public void Analyse(DirectoryInfo dir)
		{
			var sw = Stopwatch.StartNew();
			try
			{
				Nodes = SearchTreeKnownNodes.Load(dir);
				Console.WriteLine("Loaded {0} positions.", Nodes.Count);
			}
			catch (Exception x)
			{
				Console.WriteLine(x.Message);
			}

			var files = dir.GetFiles("*.log").OrderByDescending(f => f.Name).ToList();

			var saved = 0;
			var skipped = 0;
			double total = files.Count;

			foreach (var file in files)
			{
				Console.Write("\r");
				Console.Write(@"{4:hh\:mm\:ss} Saved: {0}, skipped: {1}, {2} out {3} ({5:0.00%})",
						saved, skipped, saved + skipped, total, sw.Elapsed, (Percentage)((saved + skipped)/total));

				Load(file);

				if(Fields.Any(field => 
					Nodes.ContainsKey(field) || 
					Nodes.ContainsKey(field.Flip())))
				{
					skipped++;
					continue;
				}
				if (Fields.Count >= MinPly && Fields.Last().Count < 42)
				{
					Console.WriteLine();
					if (Analyse())
					{
						saved++;
						Nodes.Save(dir);
					}
					else
					{
						skipped++;
					}
				}
				else { skipped++; }
			}
		}
		public GameAnalyser()
		{
			Duration = TimeSpan.FromSeconds(15);
			Fields = new List<Field>();
			Nodes = new SearchTreeKnownNodes();
		}