// methods
		private void Decode (byte[] message)
		{
            //base.Decode (message);

            if (message == null)
                throw new ArgumentNullException("message");

            if (message.Length < 12)
            {
                string msg = "Minimum Type3 message length is 12 bytes.";
                throw new ArgumentOutOfRangeException("message", message.Length, msg);
            }

            if (!CheckHeader(message))
            {
                string msg = "Invalid Type3 message header.";
                throw new ArgumentException(msg, "message");
            }

			if (LittleEndian.ToUInt16 (message, 56) != message.Length) 
            {
				string msg = "Invalid Type3 message length.";
				throw new ArgumentException (msg, "message");
			}

            if (message.Length >= 64)
            {
                Flags = (Common.NtlmFlags)LittleEndian.ToUInt32(message, 60);
            }
            else
            {
                Flags = (Common.NtlmFlags)0x8201;
            }
		
			int dom_len = LittleEndian.ToUInt16 (message, 28);
			int dom_off = LittleEndian.ToUInt16 (message, 32);

			this.Domain = DecodeString (message, dom_off, dom_len);

			int user_len = LittleEndian.ToUInt16 (message, 36);
			int user_off = LittleEndian.ToUInt16 (message, 40);

			this.Username = DecodeString (message, user_off, user_len);
		}