public TreeNode CreateSMTreeNode(ref string StdOutString)
        {
            // Cretae stack variables
            TreeNode                 SMNode = new TreeNode();
            TreeNode                 CurrentParentNode, CurrentChildNode = new TreeNode();
            treeNodeSymbolTag        newTypeSymTag;
            treeNodeSymbolTag        CurrentListSymbolTag = new treeNodeSymbolTag();
            treeNodeSymbolTag        SMNodeTag = new treeNodeSymbolTag(), CurrentParentNodeTag = new treeNodeSymbolTag(), CurrentChildNodeTag = new treeNodeSymbolTag();
            List <treeNodeSymbolTag> typeNodeTags = new List <treeNodeSymbolTag>();
            List <char>              tokenChars   = new List <char>();
            List <string>            lineTokens   = new List <string>();
            string SMInfoLine = "";
            int    measuredNodeDepth = 0, i;

            // Initialize Parent Node
            CurrentParentNode = SMNode;

            // Break Full Text into Lines
            List <char>   tempAList = new List <char>();
            List <char[]> LineList  = new List <char[]>();

            foreach (char ASCIICHAR in StdOutString)
            {
                if (ASCIICHAR != '\n')
                {
                    tempAList.Add(ASCIICHAR);
                }
                else
                {
                    LineList.Add(tempAList.GetRange(0, tempAList.Count - 1).ToArray()); tempAList.Clear();
                }
            }
            if (LineList.Count > 1)
            {
                SMInfoLine = new string(LineList[0]);
                LineList.RemoveAt(0);
            }

            // Process Lines
            int lineCounter = 0;

            foreach (char[] ASCIILine in LineList)
            {
                if (ASCIILine.Length == 0)
                {
                    break;
                }

                // Measure Node Depth
                measuredNodeDepth = 0;
                if (ASCIILine[0] == spaceChar)
                {
                    foreach (char tempChar in ASCIILine)
                    {
                        if (tempChar == spaceChar)
                        {
                            measuredNodeDepth++;
                        }
                        else
                        {
                            break;
                        }
                    }
                }

                // Parse tokens to dwarf strings
                #region // Parse line into Tokens
                i = 0;
                lineTokens.Clear();
                tokenChars.Clear();
                foreach (char lineChar in ASCIILine)
                {
                    if (lineChar == spaceChar)
                    {
                        if (ASCIILine.Length > i + 1)
                        {
                            if (ASCIILine[i + 1] != spaceChar)
                            {
                                if (tokenChars.Count > 0)
                                {
                                    lineTokens.Add(new string(tokenChars.ToArray()));
                                }
                                tokenChars.Clear();
                            }
                        }
                    }
                    else
                    {
                        tokenChars.Add(lineChar);
                    }
                    i++;
                }
                lineTokens.Add(new string(tokenChars.ToArray()));
                #endregion

                #region                                                 // Use 1st Token to determine dwarf type information
                if (lineTokens[0] == "type" && lineTokens[1] == "node") // type node
                {
                    // Always Add new Node
                    typeNodeTags.Add(new treeNodeSymbolTag());
                    CurrentListSymbolTag = typeNodeTags[typeNodeTags.Count - 1];

                    // Always set type node string
                    CurrentListSymbolTag.Dwarfstrings.typeNode = lineTokens[2];



                    // Always latch "node depth"
                    CurrentListSymbolTag.nodeDepth = measuredNodeDepth;

                    // Node line number
                    CurrentListSymbolTag.nodeLineNumber = lineCounter;

                    // determine if a header row preceeded the type node flag and set header string
                    if (lineCounter > 0)
                    {
                        CurrentListSymbolTag.Dwarfstrings.childNodeHeader = new string(LineList[lineCounter - 1]);
                    }
                    else
                    {
                        CurrentListSymbolTag.Dwarfstrings.childNodeHeader = "";
                    }

                    if (CurrentListSymbolTag.Dwarfstrings.childNodeHeader.Contains("["))
                    {
                        CurrentListSymbolTag.Dwarfstrings.parsedName = CurrentListSymbolTag.Dwarfstrings.childNodeHeader.Substring(CurrentListSymbolTag.Dwarfstrings.childNodeHeader.ToList().FindIndex(x => x == '\'') + 1, (CurrentListSymbolTag.Dwarfstrings.childNodeHeader.ToList().FindLastIndex(x => x == '\'') - CurrentListSymbolTag.Dwarfstrings.childNodeHeader.ToList().FindIndex(x => x == '\'')) - 1);
                    }
                    else
                    {
                        CurrentListSymbolTag.Dwarfstrings.parsedName = "";
                    }
                }
                else if (lineTokens[0] == "name")
                {
                    CurrentListSymbolTag.Dwarfstrings.name = lineTokens[1].Substring(1, lineTokens[1].Length - 1);
                    for (i = 2; i <= lineTokens.FindIndex(x => x.EndsWith("'")); i++)
                    {
                        CurrentListSymbolTag.Dwarfstrings.name += " " + lineTokens[i];
                    }
                    CurrentListSymbolTag.Dwarfstrings.name = CurrentListSymbolTag.Dwarfstrings.name.Substring(0, CurrentListSymbolTag.Dwarfstrings.name.Length - 1);
                }
                else if (lineTokens[0] == "tagname")
                {
                    CurrentListSymbolTag.Dwarfstrings.tagname = lineTokens[1].Substring(1, lineTokens[1].Length - 1);
                    if (lineTokens.Count > 2)
                    {
                        for (i = 2; i <= lineTokens.FindIndex(x => x.EndsWith("'")); i++)
                        {
                            CurrentListSymbolTag.Dwarfstrings.tagname += " " + lineTokens[i];
                        }
                    }
                    CurrentListSymbolTag.Dwarfstrings.tagname = CurrentListSymbolTag.Dwarfstrings.tagname.Substring(0, CurrentListSymbolTag.Dwarfstrings.tagname.Length - 1);
                }
                else if (lineTokens[0] == "code")
                {
                    CurrentListSymbolTag.Dwarfstrings.code = lineTokens[1];
                    if (lineTokens.Count > 2)
                    {
                        CurrentListSymbolTag.Dwarfstrings.code += " " + lineTokens[2];
                    }
                }
                else if (lineTokens[0] == "length")
                {
                    CurrentListSymbolTag.Dwarfstrings.length = lineTokens[1];
                }
                else if (lineTokens[0] == "target_type")
                {
                    CurrentListSymbolTag.Dwarfstrings.targetType = lineTokens[1];
                    if (CurrentListSymbolTag.Dwarfstrings.targetType != "0x0")
                    {
                        CurrentListSymbolTag.isBaseType = true;
                    }
                }
                else if (lineTokens[0] == "type_chain")
                {
                    CurrentListSymbolTag.Dwarfstrings.typeChain = lineTokens[1];
                }
                else if (lineTokens[0] == "instance_flags")
                {
                    CurrentListSymbolTag.Dwarfstrings.instanceFlags = lineTokens[1];
                    if (lineTokens.Count > 2)
                    {
                        CurrentListSymbolTag.Dwarfstrings.instanceFlags += " " + lineTokens[2];
                    }
                }
                else if (lineTokens[0] == "nfields")
                {
                    CurrentListSymbolTag.Dwarfstrings.nfields = lineTokens[1];
                }
                if (lineTokens[0] == "pointer_type")
                {
                    if (CurrentListSymbolTag.Dwarfstrings.pointerType == "")
                    {
                        CurrentListSymbolTag.Dwarfstrings.pointerType = lineTokens[1];
                    }
                    else
                    {
                        int idex = typeNodeTags.FindIndex(x => x == CurrentListSymbolTag) - 1;
                        if (idex > 0)
                        {
                            if (typeNodeTags[idex].isBaseType)
                            {
                                CurrentListSymbolTag = typeNodeTags[typeNodeTags.Count - 2];
                                CurrentListSymbolTag.Dwarfstrings.pointerType = lineTokens[1];
                            }
                        }
                    }
                }
                #endregion

                // Go to next line
                lineCounter++;
            }

            // Process Type Nodes / Dwarf Strings
            int nodeCounter = 0;
            for (nodeCounter = 0; nodeCounter < typeNodeTags.Count; nodeCounter++)
            {
                newTypeSymTag = typeNodeTags[nodeCounter];

                #region // Initialize SM Node as First (empty) Parent
                if (nodeCounter == 0)
                {
                    CurrentParentNode = SMNode;
                    setSymbolTag(ref CurrentParentNode, ref CurrentParentNodeTag, ref newTypeSymTag);
                    CurrentChildNode    = null;
                    CurrentChildNodeTag = null;
                }
                #endregion
                #region // Process all other typeNodes from the list, placing them in nested tree nodes
                else
                {
                    // if the new node is deeper than the current parent
                    if (CurrentParentNodeTag.nodeDepth < newTypeSymTag.nodeDepth)
                    {
                        // if the current child is not null
                        if (CurrentChildNode != null && CurrentChildNodeTag != null)
                        {
                            // if the new node is deepter than the current child
                            if (CurrentChildNodeTag.nodeDepth < newTypeSymTag.nodeDepth)
                            {
                                // Set Parent to Child - Increase Indent - Increase Level
                                CurrentParentNode    = CurrentChildNode;
                                CurrentParentNodeTag = (treeNodeSymbolTag)CurrentParentNode.Tag;
                                // Null Child Node references
                                CurrentChildNode    = null;
                                CurrentChildNodeTag = null;
                            }
                        }
                    }
                    // if the new node is not deeper than the current parent
                    // and the new node is not the first child of the first parent
                    else if (nodeCounter > 1)
                    {
                        // if the new node is less deep than the current parent
                        if (CurrentParentNodeTag.nodeDepth >= newTypeSymTag.nodeDepth)
                        {
                            bool keepGoing = true;
                            do
                            {
                                // Set Parent to Grand Parent
                                CurrentParentNode    = CurrentParentNode.Parent;
                                CurrentParentNodeTag = (treeNodeSymbolTag)CurrentParentNode.Tag;

                                // Stop when parent nodes' depth is "1" less than Current Parent
                                keepGoing = (CurrentParentNodeTag.nodeDepth > (newTypeSymTag.nodeDepth - 4));
                            } while (keepGoing);
                        }
                    }

                    // Add the child node to the parent node
                    CurrentParentNode.Nodes.Add(new TreeNode("new child node"));
                    CurrentChildNode = CurrentParentNode.Nodes[CurrentParentNode.Nodes.Count - 1];
                    // Tag the new child node
                    setSymbolTag(ref CurrentChildNode, ref CurrentChildNodeTag, ref newTypeSymTag);
                }
                #endregion
            }

            //// Process SM node for address mapping
            TreeNode tempNode;
            tempNode = SMNode;
            int startIndexofSubString = SMInfoLine.ToList().FindLastIndex(x => x == 'x') + 1;
            int stopIndexofSubString  = SMInfoLine.ToList().FindLastIndex(x => x == '.');
            int lengthofSubString     = stopIndexofSubString - startIndexofSubString;

            if (nodeCounter > 1)
            {
                ((treeNodeSymbolTag)(tempNode.Tag)).addrstr = SMInfoLine.Substring(startIndexofSubString, lengthofSubString);
                ((treeNodeSymbolTag)(tempNode.Tag)).addr    = ASCIIHex2_Value(((treeNodeSymbolTag)(tempNode.Tag)).addrstr);
                startIndexofSubString = SMInfoLine.ToList().FindIndex(x => x == '\"') + 1;
                stopIndexofSubString  = SMInfoLine.ToList().FindLastIndex(x => x == '\"');
                lengthofSubString     = stopIndexofSubString - startIndexofSubString;
                ((treeNodeSymbolTag)(tempNode.Tag)).Dwarfstrings.parsedName = SMInfoLine.Substring(startIndexofSubString, lengthofSubString);
                SMNode.ToolTipText += "\nAddr: 0x" + ((treeNodeSymbolTag)(tempNode.Tag)).addr.ToString("X8") + " - ";
                SMNode.Text         = ((treeNodeSymbolTag)(tempNode.Tag)).Dwarfstrings.parsedName;
                ((treeNodeSymbolTag)(tempNode.Tag)).longName = "SM";
                SMNode.ToolTipText += "\nLong Name: " + ((treeNodeSymbolTag)(tempNode.Tag)).longName;
                List <TreeNode> thisLevelNodes = new List <TreeNode>();
                List <TreeNode> nextLevelNodes = new List <TreeNode>();

                thisLevelNodes.Add(tempNode);
                foreach (TreeNode tnd in tempNode.Nodes)
                {
                    nextLevelNodes.Add(tnd);
                }

                do
                {
                    // Clock Next Nodes for Processing into Current Nodes for Processing, then clear next nodes
                    thisLevelNodes = new List <TreeNode>(nextLevelNodes);
                    nextLevelNodes.Clear();

                    // Process every node on this level and build list of next level nodes
                    foreach (TreeNode lNode in thisLevelNodes)
                    {
                        ((treeNodeSymbolTag)(lNode.Tag)).longName = ((treeNodeSymbolTag)(lNode.Parent.Tag)).longName;
                        if (((treeNodeSymbolTag)(lNode.Tag)).Dwarfstrings.parsedName != null && ((treeNodeSymbolTag)(lNode.Tag)).Dwarfstrings.parsedName != "")
                        {
                            ((treeNodeSymbolTag)(lNode.Tag)).longName = ((treeNodeSymbolTag)(lNode.Tag)).longName + "." + ((treeNodeSymbolTag)(lNode.Tag)).Dwarfstrings.parsedName;
                        }
                        ((treeNodeSymbolTag)(lNode.Tag)).addr = ((treeNodeSymbolTag)(lNode.Parent.Tag)).addr;
                        for (i = 0; i < lNode.Index; i++)
                        {
                            if (((treeNodeSymbolTag)((lNode.Parent.Nodes[i]).Tag)).Dwarfstrings.length != null && ((treeNodeSymbolTag)((lNode.Parent.Nodes[i]).Tag)).Dwarfstrings.length != "")
                            {
                                ((treeNodeSymbolTag)(lNode.Tag)).addr += uint.Parse(((treeNodeSymbolTag)((lNode.Parent.Nodes[i]).Tag)).Dwarfstrings.length);
                            }
                        }
                        ((treeNodeSymbolTag)(lNode.Tag)).addrstr = ((treeNodeSymbolTag)(lNode.Tag)).addr.ToString("X8");
                        lNode.ToolTipText += "\nAddr: 0x" + ((treeNodeSymbolTag)(lNode.Tag)).addr.ToString("X8") + " - ";



                        lNode.ToolTipText += "\nLong Name: " + ((treeNodeSymbolTag)(lNode.Tag)).longName;

                        if (lNode.GetNodeCount(false) > 0)
                        {
                            foreach (TreeNode tnd in lNode.Nodes)
                            {
                                nextLevelNodes.Add(tnd);
                            }
                        }
                    }
                } while (nextLevelNodes.Count > 0);
            }


            return(SMNode);
        }
        private void setSymbolTag(ref TreeNode Node2Tag, ref treeNodeSymbolTag NodeTag, ref treeNodeSymbolTag typeSymbolTag)
        {
            Node2Tag.Tag          = typeSymbolTag;
            NodeTag               = typeSymbolTag;
            Node2Tag.ToolTipText  = "Line: " + ((treeNodeSymbolTag)Node2Tag.Tag).nodeLineNumber.ToString() + "\n";
            Node2Tag.ToolTipText += ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.childNodeHeader + "\n";
            Node2Tag.ToolTipText += "Size: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length + " bytes\n";
            Node2Tag.ToolTipText += "Type Node: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.typeNode + " \n";
            Node2Tag.ToolTipText += "Code: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code + "\n";
            Node2Tag.ToolTipText += "Name: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name + "\n";
            Node2Tag.ToolTipText += "TagName: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.tagname + "\n";
            Node2Tag.ToolTipText += "ParsedName: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName + "\n";
            Node2Tag.ToolTipText += "Target Type: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.targetType + "\n";
            Node2Tag.ToolTipText += "Type Chain: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.typeChain + "\n";
            Node2Tag.ToolTipText += "Instance Flags: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.instanceFlags + "\n";
            Node2Tag.ToolTipText += "NFields: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.nfields + "\n";
            Node2Tag.Text         = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name + " " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.tagname;

            //Node2Tag.ContextMenuStrip = new ContextMenuStrip();
            //Node2Tag.ContextMenuStrip.Items.Add("goto Line");
            //Node2Tag.ContextMenuStrip.Items[Node2Tag.ContextMenuStrip.Items.Count - 1].Tag = Node2Tag;
            //Node2Tag.ContextMenuStrip.ItemClicked += new ToolStripItemClickedEventHandler(SMMenuItemClicked);
            //Node2Tag.Expand();

            if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name == "'<NULL>'")
            {
                if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.childNodeHeader.Contains('['))
                {
                    int startIndex   = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.childNodeHeader.ToCharArray().ToList().FindIndex(x => x == '\'');
                    int stopIndex    = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.childNodeHeader.ToCharArray().ToList().FindLastIndex(x => x == '\'');
                    int subStrLength = stopIndex - startIndex;
                    if (subStrLength > 0)
                    {
                        string tempSubStr = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.childNodeHeader.Substring(startIndex + 1, subStrLength - 1);
                        ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name = tempSubStr;
                    }
                    else
                    {
                        ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name = "Un-Named";
                    }


                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.tagname + " " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name;
                }
            }
            if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.tagname == "'<NULL>'")
            {
                ;
            }

            if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length != null)
            {
                if (Node2Tag.Text == " " && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length.Length >= 0)
                {
                    Node2Tag.Text = "Type Node: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.typeNode + " - " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length + " bytes";
                }

                if (Node2Tag.Text == "<NULL> <NULL>" && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length.Length > 0)
                {
                    Node2Tag.Text = "Un-Named: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length + " bytes";
                }
                else if (Node2Tag.Text == "<NULL> <NULL>")
                {
                    Node2Tag.Text = "Un-Named: ?? bytes";
                }

                if (!Node2Tag.Text.EndsWith("bytes"))
                {
                    Node2Tag.Text += " " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length + " bytes";
                }
            }
            else
            {
                if (Node2Tag.Text == " ")
                {
                    Node2Tag.Text = "Type Node: " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.typeNode + " - ??? bytes";
                }
            }

            Node2Tag.Text += " - - - " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code;

            if (((treeNodeSymbolTag)Node2Tag.Tag).nodeLineNumber == 0)
            {
                ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName = "SM";
            }

            if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != "")
            {
                Node2Tag.Text = string.Concat(((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName, "           ", Node2Tag.Text);
            }

            // Set node name to type string
            Node2Tag.Name = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.typeNode;

            // Set final display text based on node code
            // 0x3 (TYPE_CODE_STRUCT)
            if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code == "0x3 (TYPE_CODE_STRUCT)")
            {
                if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != null && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != "" && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != "<NULL>")
                {
                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName;
                }
                else if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != "<NULL>")
                {
                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.tagname;
                }

                Node2Tag.ImageIndex         = 20;
                Node2Tag.SelectedImageIndex = Node2Tag.ImageIndex;
            }

            // 0x8 (TYPE_CODE_INT)
            else if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code == "0x8 (TYPE_CODE_INT)")
            {
                Node2Tag.Parent.Collapse();
                if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != null && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != "")
                {
                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName + " " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length + " bytes";
                }
                else
                {
                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name + " " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length + " bytes";
                }

                Node2Tag.ImageIndex         = 17;
                Node2Tag.SelectedImageIndex = Node2Tag.ImageIndex;

                if (((treeNodeSymbolTag)Node2Tag.Parent.Tag) != null)
                {
                    if (((treeNodeSymbolTag)(Node2Tag.Parent.Tag)).Dwarfstrings.code == "0x16 (TYPE_CODE_TYPEDEF)")
                    {
                        Node2Tag.Parent.ImageIndex = 17;
                    }

                    Node2Tag.Parent.SelectedImageIndex = Node2Tag.Parent.ImageIndex;
                }
            }

            // 0x14 (TYPE_CODE_BOOL)
            else if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code == "0x14 (TYPE_CODE_BOOL)")
            {
                Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName + " " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length + " bytes";
            }

            // 0x5 (TYPE_CODE_ENUM)
            else if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code == "0x5 (TYPE_CODE_ENUM)")
            {
                Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName + " " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length + " bytes";
            }

            // 0xc (TYPE_CODE_RANGE)
            else if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code == "0xc (TYPE_CODE_RANGE)")
            {
                Node2Tag.Text = "Range";
            }

            // 0x16 (TYPE_CODE_TYPEDEF)
            else if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code == "0x16 (TYPE_CODE_TYPEDEF)")
            {
                if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != null && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != "")
                {
                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName;
                }
                else
                {
                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name;
                }
            }

            // 0x2 (TYPE_CODE_ARRAY)
            else if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code == "0x2 (TYPE_CODE_ARRAY)")
            {
                Node2Tag.Text               = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName + "[]";
                Node2Tag.ImageIndex         = 21;
                Node2Tag.SelectedImageIndex = Node2Tag.ImageIndex;
            }

            // 0x9 (TYPE_CODE_FLT)
            else if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code == "0x9 (TYPE_CODE_FLT)")
            {
                Node2Tag.Parent.Collapse();
                Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name + " " + ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.length + " bytes";

                Node2Tag.ImageIndex         = 18;
                Node2Tag.SelectedImageIndex = Node2Tag.ImageIndex;

                if (((treeNodeSymbolTag)Node2Tag.Parent.Tag) != null)
                {
                    if (((treeNodeSymbolTag)(Node2Tag.Parent.Tag)).Dwarfstrings.code == "0x16 (TYPE_CODE_TYPEDEF)")
                    {
                        Node2Tag.Parent.ImageIndex = 18;
                    }

                    Node2Tag.Parent.SelectedImageIndex = Node2Tag.Parent.ImageIndex;
                }
            }



            // 0x4 (TYPE_CODE_UNION)
            else if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.code == "0x4 (TYPE_CODE_UNION)")
            {
                if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != null && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName != "")
                {
                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.parsedName;
                }

                if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name != null && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name != "" && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name != "<NULL>")
                {
                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.name;
                }

                if (((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.tagname != null && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.tagname != "" && ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.tagname != "<NULL>")
                {
                    Node2Tag.Text = ((treeNodeSymbolTag)Node2Tag.Tag).Dwarfstrings.tagname;
                }

                if (Node2Tag.Text == null || Node2Tag.Text == "" || Node2Tag.Text.StartsWith("Un-Named"))
                {
                    Node2Tag.Text = "Union";
                }

                Node2Tag.ImageIndex         = 22;
                Node2Tag.SelectedImageIndex = Node2Tag.ImageIndex;
            }
        }