private void retrieveHierarchy(object sender, RoutedEventArgs e)
        {
            expandDong.Clear();
            var items = treeView.Items;

            foreach (TreeViewItem oldItem in items)
            {
                checkExpandedDongs(oldItem);
            }

            items.Clear();

            Process process;

            if (Process.GetProcessesByName("Rayman2").Length > 0)
            {
                process       = Process.GetProcessesByName("Rayman2")[0];
                processHandle = MemoryRead.OpenProcess(MemoryRead.PROCESS_WM_READ | MemoryRead.PROCESS_VM_WRITE | MemoryRead.PROCESS_VM_OPERATION, false, process.Id).ToInt32();

                int dynamicWorldAddress = ReadIntFromMemory(processHandle, 0x500FD0);
                int staticWorldAddress  = ReadIntFromMemory(processHandle, 0x500FC0);

                int mainCharacterObjectAddress = ReadIntFromMemory(processHandle, 0x4FF764);

                SuperObject dynamicWorld = GetStructure <SuperObject>(processHandle, dynamicWorldAddress);
                SuperObject staticWorld  = GetStructure <SuperObject>(processHandle, staticWorldAddress);

                SOTreeNode dynamicTreeRoot = new SOTreeNode();
                dynamicTreeRoot.name        = "Dynamic World Root";
                dynamicTreeRoot.superObject = dynamicWorld;
                retrieveHierarchyRecursive(dynamicTreeRoot, mainCharacterObjectAddress, 0);

                int mainSectorAddress         = ReadIntFromMemory(processHandle, 0x500FB0);
                int previousMainSectorAddress = ReadIntFromMemory(processHandle, 0x500FC8);

                SOTreeNode staticTreeRoot = new SOTreeNode();
                staticTreeRoot.name        = "Static World Root";
                staticTreeRoot.superObject = staticWorld;
                retrieveHierarchyRecursive(staticTreeRoot, mainSectorAddress, previousMainSectorAddress);

                TreeViewItem dynamicTreeViewItemRoot = new TreeViewItem()
                {
                    Header = "Dynamic World"
                };
                dynamicTreeViewItemRoot.ExpandSubtree();

                TreeViewItem staticTreeViewItemRoot = new TreeViewItem()
                {
                    Header = "Static World"
                };
                staticTreeViewItemRoot.ExpandSubtree();

                b = 0;
                fillTree(dynamicTreeRoot, dynamicTreeViewItemRoot);
                fillTree(staticTreeRoot, staticTreeViewItemRoot);

                items.Add(dynamicTreeViewItemRoot);
                items.Add(staticTreeViewItemRoot);

                Console.WriteLine(process);
            }
            else
            {
                Console.WriteLine("Rayman2.exe not found");
            }
        }