public Timeline getPath(Timeline timeline, int lca_id, ref Timeline lca)
        {
            if (timeline.UniqueID == lca_id)
            {
                lca = timeline;
                Timeline t1 = timeline.clone();
                t1.isBuffered = false;
                t1.pathID = -1;
                return t1;
            }
            else
            {
                foreach (var child in timeline.ChildTimelines)
                {
                    Timeline t1 = getPath(child, lca_id, ref lca);
                    if (t1 != null)
                    {
                        var t2 = timeline.clone();
                        t2.isBuffered = false;

                        var k = 0;
                        foreach (var c in timeline.ChildTimelines)
                        {
                            if (c.UniqueID == t1.UniqueID)
                            {
                                t2.ChildTimelines.Add(t1);
                                t2.pathID = k;
                            }
                            else
                            {
                                var t = c.clone();
                                t.isBuffered = false;
                                t2.ChildTimelines.Add(t);
                            }
                            k++;
                        }

                        foreach (var e in timeline.Exhibits)
                        {
                           // var i = e.clone();
                            t2.Exhibits.Add(e);
                        }

                        return t2;
                    }
                }
                return null;
            }
        }
        public Timeline getContent(Timeline timeline, double left, double right, double min_width)
        {
            var t1 = timeline.clone();
            t1.isBuffered = true;
            t1.Exhibits.AddRange(timeline.Exhibits);

            foreach (var child in timeline.ChildTimelines)
            {
                if (!(child.left < left && child.right < left || child.left > right && child.right > right) && child.width >= min_width)
                    t1.ChildTimelines.Add(getContent(child, left, right, min_width));
                else
                    t1.ChildTimelines.Add(child.clone());
            }

            return t1;
        }