using System; 
using System.Collections .Generic ; 
using System.Linq ; 
 
namespace Protocol
{ 
    #region Consts 
    public enum  ObjectType{ 
        Register, 
        Data, 
        Clock, 
        Profile
    } 
        public enum  DataType{ 
        INT_16, 
        INT_32, 
        INT_64, 
        UINT_16, 
        UINT_32, 
        UINT_64, 
        BYTE, 
        FLOAT_32, 
        FLOAT_64, 
        UFLOAT_32, 
        UFLOAT_64,         
        STRING, 
        BYTE_STRING, 
        ARRAY, 
        STRUCT, 
        TIME
    } 
    #endregion 
    public class ProtocolObject
    { 
        private readonly Dictionary< int ,  ObjectAttribute>  _attributes; 
        private readonly string _code; 
        private readonly string _name; 
 
        public ProtocolObject( string code,  string name) 
        { 
            if  ( code is null ) 
            { 
                throw new ArgumentNullException( nameof( code) ) ; 
            } 
 
            if  ( name is null ) 
            { 
                throw new ArgumentNullException( nameof( name) ) ; 
            } 
 
            _code =  code; 
            _name =  name; 
            _attributes =  new Dictionary< int ,  ObjectAttribute> ( ) ; 
        } 
        public string Code =>  _code;  
        public string Name =>  _name; 
        public ObjectType Type { get; set; } 
 
        public void  AddAttribute( ObjectAttribute attribute) 
        { 
            if ( attribute is null ) 
                throw new ArgumentNullException( nameof( attribute) ) ; 
            if ( _attributes.Any ( x=> x.Key  ==  attribute.Index ) ) 
                throw new InvalidOperationException( "Атрибут с данным индексом присутствует в объекте" ) ; 
            if  ( attribute.Index  <=  0 ) 
                throw new ArgumentException( "Индекс должен быть положительным числом больше 0" ) ; 
            _attributes.Add ( attribute.Index ,  attribute) ; 
        } 
        public ObjectAttribute GetAttributeByIndex( int  index)  =>  _attributes[ index] ; 
    } 
 
    public class ObjectAttribute
    { 
        public DataType Type { get; set; } 
        public int  Index { get; set; } 
        public string Value {  get;  set;  }  =  string.Empty ; 
    } 
} 
 
 
				dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpuYW1lc3BhY2UgUHJvdG9jb2wKewogICAgI3JlZ2lvbiBDb25zdHMKICAgIHB1YmxpYyBlbnVtIE9iamVjdFR5cGV7CiAgICAgICAgUmVnaXN0ZXIsCiAgICAgICAgRGF0YSwKICAgICAgICBDbG9jaywKICAgICAgICBQcm9maWxlCiAgICB9CiAgICAgICAgcHVibGljIGVudW0gRGF0YVR5cGV7CiAgICAgICAgSU5UXzE2LAogICAgICAgIElOVF8zMiwKICAgICAgICBJTlRfNjQsCiAgICAgICAgVUlOVF8xNiwKICAgICAgICBVSU5UXzMyLAogICAgICAgIFVJTlRfNjQsCiAgICAgICAgQllURSwKICAgICAgICBGTE9BVF8zMiwKICAgICAgICBGTE9BVF82NCwKICAgICAgICBVRkxPQVRfMzIsCiAgICAgICAgVUZMT0FUXzY0LCAgICAgICAgCiAgICAgICAgU1RSSU5HLAogICAgICAgIEJZVEVfU1RSSU5HLAogICAgICAgIEFSUkFZLAogICAgICAgIFNUUlVDVCwKICAgICAgICBUSU1FCiAgICB9CiAgICAjZW5kcmVnaW9uCiAgICBwdWJsaWMgY2xhc3MgUHJvdG9jb2xPYmplY3QKICAgIHsKICAgICAgICBwcml2YXRlIHJlYWRvbmx5IERpY3Rpb25hcnk8aW50LCBPYmplY3RBdHRyaWJ1dGU+IF9hdHRyaWJ1dGVzOwogICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nIF9jb2RlOwogICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nIF9uYW1lOwoKICAgICAgICBwdWJsaWMgUHJvdG9jb2xPYmplY3Qoc3RyaW5nIGNvZGUsIHN0cmluZyBuYW1lKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGNvZGUgaXMgbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbihuYW1lb2YoY29kZSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobmFtZSBpcyBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKG5hbWVvZihuYW1lKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIF9jb2RlID0gY29kZTsKICAgICAgICAgICAgX25hbWUgPSBuYW1lOwogICAgICAgICAgICBfYXR0cmlidXRlcyA9IG5ldyBEaWN0aW9uYXJ5PGludCwgT2JqZWN0QXR0cmlidXRlPigpOwogICAgICAgIH0KICAgICAgICBwdWJsaWMgc3RyaW5nIENvZGUgPT4gX2NvZGU7IAogICAgICAgIHB1YmxpYyBzdHJpbmcgTmFtZSA9PiBfbmFtZTsKICAgICAgICBwdWJsaWMgT2JqZWN0VHlwZSBUeXBlIHtnZXQ7c2V0O30KCiAgICAgICAgcHVibGljIHZvaWQgQWRkQXR0cmlidXRlKE9iamVjdEF0dHJpYnV0ZSBhdHRyaWJ1dGUpCiAgICAgICAgewogICAgICAgICAgICBpZihhdHRyaWJ1dGUgaXMgbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24obmFtZW9mKGF0dHJpYnV0ZSkpOwogICAgICAgICAgICBpZihfYXR0cmlidXRlcy5BbnkoeD0+eC5LZXkgPT0gYXR0cmlidXRlLkluZGV4KSkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCLQkNGC0YDQuNCx0YPRgiDRgSDQtNCw0L3QvdGL0Lwg0LjQvdC00LXQutGB0L7QvCDQv9GA0LjRgdGD0YLRgdGC0LLRg9C10YIg0LIg0L7QsdGK0LXQutGC0LUiKTsKICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5JbmRleCA8PSAwKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCLQmNC90LTQtdC60YEg0LTQvtC70LbQtdC9INCx0YvRgtGMINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3Ri9C8INGH0LjRgdC70L7QvCDQsdC+0LvRjNGI0LUgMCIpOwogICAgICAgICAgICBfYXR0cmlidXRlcy5BZGQoYXR0cmlidXRlLkluZGV4LCBhdHRyaWJ1dGUpOwogICAgICAgIH0KICAgICAgICBwdWJsaWMgT2JqZWN0QXR0cmlidXRlIEdldEF0dHJpYnV0ZUJ5SW5kZXgoaW50IGluZGV4KSA9PiBfYXR0cmlidXRlc1tpbmRleF07CiAgICB9CgogICAgcHVibGljIGNsYXNzIE9iamVjdEF0dHJpYnV0ZQogICAgewogICAgICAgIHB1YmxpYyBEYXRhVHlwZSBUeXBlIHtnZXQ7c2V0O30KICAgICAgICBwdWJsaWMgaW50IEluZGV4IHtnZXQ7c2V0O30KICAgICAgICBwdWJsaWMgc3RyaW5nIFZhbHVlIHsgZ2V0OyBzZXQ7IH0gPSBzdHJpbmcuRW1wdHk7CiAgICB9Cn0K
				
				 
				 
				 
				 
			 
			
				
			
			
				
	
		
	 
	
		  compilation info 
		 
	 
	prog.cs(41,22): error CS1644: Feature `pattern matching' cannot be used because it is not part of the C# 7.0 language specification
prog.cs(46,22): error CS1644: Feature `pattern matching' cannot be used because it is not part of the C# 7.0 language specification
prog.cs(61,26): error CS1644: Feature `pattern matching' cannot be used because it is not part of the C# 7.0 language specification
Compilation failed: 3 error(s), 0 warnings
 
		
		 
	
		
		  stdout