public static List <NodeEditor> UnpackData(PackedNodeData data)
                {
                    //List<Node> ret = new List<Node>();
                    Dictionary <NodeEditor, int> instances = new Dictionary <NodeEditor, int>();
                    // Dictionary<int, SocketsData> socketInstances = new Dictionary<int, SocketsData>();

                    int i = 0;

                    foreach (var x in data.nodeData)
                    {
                        NodeEditor node;

                        if (typeof(LeafEditor).ToString().Equals(x.type))
                        {
                            var lst = Convert(x.argsBool, x.argsNum, x.argsStr);
                            //lst.AddRange (x.argsStr.ConvertAll<object>(y => (object)y));
                            //lst.AddRange (x.argsNum.ConvertAll<object> (y => (object)y));
                            //lst.AddRange (x.argsBool.ConvertAll<object> (y => (object)y));


                            node = CreateLeafNode(x.title, x.window, Type.GetType(x.handledLeaf)
                                                  , lst);
                        }
                        else if (typeof(ParallelEditor).ToString().Equals(x.type) ||
                                 typeof(ParallelRunningEditor).ToString().Equals(x.type))
                        {
                            node = (NodeEditor)Activator.CreateInstance(Type.GetType(x.type), new object[] { x.title, x.window, x.name, x.reqFail, x.reqSucc });
                        }
                        else if (typeof(SequenceEditor).ToString().Equals(x.type) || typeof(SelectorEditor).ToString().Equals(x.type) ||
                                 typeof(SequenceRandomEditor).ToString().Equals(x.type) || typeof(SelectorRandomEditor).ToString().Equals(x.type))
                        {
                            node = (NodeEditor)Activator.CreateInstance(Type.GetType(x.type), new object[] { x.title, x.window, x.name });
                        }
                        else
                        {
                            node = (NodeEditor)Activator.CreateInstance(Type.GetType(x.type), new object[] { x.title, x.window });
                        }

                        instances.Add(node, i++);

                        //socketInstances.Add(i, x.sockets);
                    }
                    i = 0;
                    foreach (var x in instances.Keys)
                    {
                        var node = x as NodeEditor;
                        node.SetSockets(FromData(data.nodeData[i++].sockets, instances));
                    }

                    foreach (var node in instances.Keys.ToList())
                    {
                        node.UpdateNodesFromSockets();
                    }

                    return(new List <NodeEditor>(instances.Keys));
                }
                static public PackedNodeData PackData(List <NodeEditor> nodes)
                {
                    PackedNodeData ret = new PackedNodeData();

                    ret.nodeData = new List <NodeData>();

                    Dictionary <NodeEditor, int> instances = GenerateInstance(nodes);

                    foreach (var node in nodes)
                    {
                        ret.nodeData.Add(ToData(node, instances));
                    }

                    return(ret);
                }