Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/dataanalysis.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/dataanalysis.cs	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/dataanalysis.cs	(revision 15973)
@@ -10046,16 +10046,68 @@
 
 
+        // HEAL pfleck
+        /*************************************************************************
+        Procesing
+
+        INPUT PARAMETERS:
+            DF      -   decision forest model
+            X       -   input vector,  array[0..NVars-1].
+
+        OUTPUT PARAMETERS:
+            ys      -   result. Regression estimates for each tree when solving regression task.
+
+          -- HeuristicLab --
+              Copyright 18.07.2016 by HEAL, based on implementation of dfprocess by Bochkanov Sergey
+        *************************************************************************/
+        public static void dfprocessraw(decisionforest df,
+            double[] x,
+            ref double[] ys) 
+        {
+            int offs = 0;
+            int i = 0;
+            var y = new double[1];
+
+            if (df.nclasses != 1)
+                return;
+
+            //
+            // Proceed
+            //
+            if (alglib.ap.len(ys)<df.ntrees) 
+            {
+                ys = new double[df.ntrees];
+            }
+            offs = 0;
+            for (i=0; i<=df.ntrees-1; i++) {
+
+                //
+                // Process basic tree
+                //
+                y[0] = 0;
+                dfprocessinternal(df, offs, x, ref y);
+                ys[i] = y[0];
+                
+
+                //
+                // Next tree
+                //
+                offs = offs+(int)Math.Round(df.trees[offs]);
+            }
+        }
+
+
+
         /*************************************************************************
         Relative classification error on the test set
-
+        
         INPUT PARAMETERS:
             DF      -   decision forest model
             XY      -   test set
             NPoints -   test set size
-
+        
         RESULT:
             percent of incorrectly classified cases.
             Zero if model solves regression task.
-
+        
           -- ALGLIB --
              Copyright 16.02.2009 by Bochkanov Sergey
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/ALGLIB changes by HEAL.txt
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/ALGLIB changes by HEAL.txt	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/ALGLIB changes by HEAL.txt	(revision 15973)
@@ -0,0 +1,7 @@
+ALGLIB changes by HEAL
+
+ap.cs(ln 573)
+mkommend: added thread static attribute to RNG to have a separate instance per thread and allow modification of the seed
+
+dataanalysis.cs(ln 10048)
+pfleck: added "raw" version of dfprocess that returns the regression estimate for each tree
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -33,5 +33,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -33,5 +33,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -31,5 +31,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -31,5 +31,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/Plugin.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/Plugin.cs	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/Plugin.cs	(revision 15973)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/GeoIPLookupService.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/GeoIPLookupService.cs	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/GeoIPLookupService.cs	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Datatypes.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Datatypes.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Datatypes.cs	(revision 15973)
@@ -0,0 +1,156 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace HeuristicLab.IGraph {
+  #region Structs
+  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+  internal class igraph_rng_type_t {
+    IntPtr name;
+    internal uint min;
+    internal uint max;
+  };
+
+  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+  internal class igraph_rng_t {
+    IntPtr type;
+    IntPtr state;
+    internal int def;
+  };
+
+
+  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+  internal class igraph_vector_t {
+    IntPtr stor_begin;
+    IntPtr stor_end;
+    IntPtr end;
+  };
+
+  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+  internal class igraph_matrix_t {
+    internal igraph_vector_t data = new igraph_vector_t();
+    internal int nrow;
+    internal int ncol;
+  };
+
+  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+  internal class igraph_t {
+    internal int n;
+    internal bool directed;
+    igraph_vector_t from = new igraph_vector_t();
+    igraph_vector_t to = new igraph_vector_t();
+    igraph_vector_t oi = new igraph_vector_t();
+    igraph_vector_t ii = new igraph_vector_t();
+    igraph_vector_t os = new igraph_vector_t();
+    igraph_vector_t @is = new igraph_vector_t();
+    IntPtr attr;
+  };
+
+  [StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi)]
+  internal struct igraph_vs_t {
+    [FieldOffset(0)]
+    internal int type;
+    [FieldOffset(4)]
+    int vid;
+    [FieldOffset(4)]
+    IntPtr vecptr;
+    [FieldOffset(4)]
+    int adj_vid;
+    [FieldOffset(8)]
+    igraph_neimode_t adj_mode;
+    [FieldOffset(4)]
+    int seq_from;
+    [FieldOffset(8)]
+    int seq_to;
+  }
+
+  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+  unsafe internal struct igraph_arpack_options_t {
+    /* INPUT */
+    internal fixed char bmat[1]; /* I-standard problem, G-generalized */
+    internal int n; /* Dimension of the eigenproblem */
+    internal fixed char which[2]; /* LA, SA, LM, SM, BE */
+    internal int nev; /* Number of eigenvalues to be computed */
+    internal double tol; /* Stopping criterion */
+    internal int ncv; /* Number of columns in V */
+    internal int ldv; /* Leading dimension of V */
+    internal int ishift; /* 0-reverse comm., 1-exact with tridiagonal */
+    internal int mxiter; /* Maximum number of update iterations to take */
+    internal int nb; /* Block size on the recurrence, only 1 works */
+    internal int mode; /* The kind of problem to be solved (1-5)
+                          1: A*x=l*x, A symmetric
+                          2: A*x=l*M*x, A symm. M pos. def.
+                          3: K*x = l*M*x, K symm., M pos. semidef.
+                          4: K*x = l*KG*x, K s. pos. semidef. KG s. indef.
+                          5: A*x = l*M*x, A symm., M symm. pos. semidef. */
+    internal int start; /* 0: random, 1: use the supplied vector */
+    internal int lworkl; /* Size of temporary storage, default is fine */
+    internal double sigma; /* The shift for modes 3,4,5 */
+    internal double sigmai; /* The imaginary part of shift for rnsolve */
+    /* OUTPUT */
+    internal int info; /* What happened, see docs */
+    internal int ierr; /* What happened  in the dseupd call */
+    internal int noiter; /* The number of iterations taken */
+    internal int nconv;
+    internal int numop; /* Number of OP*x operations */
+    internal int numopb; /* Number of B*x operations if BMAT='G' */
+    internal int numreo; /* Number of steps of re-orthogonalizations */
+    /* INTERNAL */
+    internal fixed int iparam[11];
+    internal fixed int ipntr[14];
+  }
+
+  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+  internal struct igraph_pagerank_power_options_t {
+    internal int niter;
+    internal double eps;
+  }
+  #endregion
+
+  #region Delegates
+  [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+  internal delegate bool igraph_bfshandler_t(igraph_t graph, int vid, int pred, int succ, int rank, int dist, IntPtr extra);
+
+  [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
+  internal delegate bool igraph_dfshandler_t(igraph_t graph, int vid, int dist, IntPtr extra);
+  #endregion
+
+  #region Enums
+  internal enum igraph_layout_grid_t {
+    IGRAPH_LAYOUT_GRID,
+    IGRAPH_LAYOUT_NOGRID,
+    IGRAPH_LAYOUT_AUTOGRID
+  };
+  internal enum igraph_pagerank_algo_t {
+    IGRAPH_PAGERANK_ALGO_POWER = 0,
+    IGRAPH_PAGERANK_ALGO_ARPACK = 1,
+    IGRAPH_PAGERANK_ALGO_PRPACK = 2
+  }
+  internal enum igraph_neimode_t {
+    IGRAPH_OUT = 1,
+    IGRAPH_IN = 2,
+    IGRAPH_ALL = 3,
+    IGRAPH_TOTAL = 3
+  }
+  #endregion
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/DllImporter.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/DllImporter.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/DllImporter.cs	(revision 15973)
@@ -0,0 +1,447 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace HeuristicLab.IGraph {
+  internal static class DllImporter {
+    private const string X86Dll = "igraph-0.8.0-pre-x86.dll";
+    private const string X64Dll = "igraph-0.8.0-pre-x64.dll";
+    private readonly static bool X86 = false;
+
+    static DllImporter() {
+      X86 = !Environment.Is64BitProcess;
+    }
+
+    #region igraph
+    #region igraph init/finalize
+    internal static void igraph_empty(igraph_t graph, int n, bool directed) {
+      if (X86) igraph_empty_x86(graph, n, directed);
+      else igraph_empty_x64(graph, n, directed);
+    }
+    internal static int igraph_destroy(igraph_t graph) {
+      return X86 ? igraph_destroy_x86(graph) : igraph_destroy_x64(graph);
+    }
+    #endregion
+
+    #region igraph query
+    internal static int igraph_vcount(igraph_t graph) {
+      return X86 ? igraph_vcount_x86(graph) : igraph_vcount_x64(graph);
+    }
+    #endregion
+
+    #region igraph characteristics
+    internal static int igraph_density(igraph_t graph, out double density, bool loops) {
+      density = double.NaN;
+      return X86 ? igraph_density_x86(graph, ref density, loops) : igraph_density_x64(graph, ref density, loops);
+    }
+
+    internal static int igraph_pagerank(igraph_t graph, igraph_pagerank_algo_t algo, igraph_vector_t vector, out double value, igraph_vs_t vids, bool directed, double damping, igraph_vector_t weights) {
+      value = 1;
+      var options = IntPtr.Zero;
+      if (algo == igraph_pagerank_algo_t.IGRAPH_PAGERANK_ALGO_ARPACK) {
+        var arpackoptions = GetDefaultArpackOptions();
+        options = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(igraph_arpack_options_t)));
+        Marshal.StructureToPtr(arpackoptions, options, false);
+      } else if (algo == igraph_pagerank_algo_t.IGRAPH_PAGERANK_ALGO_POWER) {
+        var poweroptions = GetDefaultPowerOptions();
+        options = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(igraph_pagerank_power_options_t)));
+        Marshal.StructureToPtr(poweroptions, options, false);
+      }
+      try {
+        return X86 ? igraph_pagerank_x86(graph, algo, vector, ref value, vids, directed, damping, weights, options) : igraph_pagerank_x64(graph, algo, vector, ref value, vids, directed, damping, weights, options);
+      } finally {
+        if (algo == igraph_pagerank_algo_t.IGRAPH_PAGERANK_ALGO_ARPACK) {
+          Marshal.DestroyStructure(options, typeof(igraph_arpack_options_t));
+          Marshal.FreeHGlobal(options);
+        } else if (algo == igraph_pagerank_algo_t.IGRAPH_PAGERANK_ALGO_POWER) {
+          Marshal.DestroyStructure(options, typeof(igraph_pagerank_power_options_t));
+          Marshal.FreeHGlobal(options);
+        }
+      }
+    }
+
+    unsafe private static igraph_arpack_options_t GetDefaultArpackOptions() {
+      var arpackoptions = new igraph_arpack_options_t();
+      arpackoptions.bmat[0] = 'I';
+      arpackoptions.which[0] = arpackoptions.which[1] = 'X';
+      arpackoptions.nev = 1;
+      arpackoptions.ishift = 1;
+      arpackoptions.mxiter = 1000;
+      arpackoptions.nb = 1;
+      arpackoptions.mode = 1;
+      arpackoptions.iparam[0] = arpackoptions.ishift;
+      arpackoptions.iparam[1] = arpackoptions.iparam[4] = arpackoptions.iparam[5] = arpackoptions.iparam[7] = arpackoptions.iparam[8] = arpackoptions.iparam[9] = arpackoptions.iparam[10] = 0;
+      arpackoptions.iparam[2] = arpackoptions.mxiter;
+      arpackoptions.iparam[3] = arpackoptions.nb;
+      arpackoptions.iparam[6] = arpackoptions.mode;
+      return arpackoptions;
+    }
+
+    private static igraph_pagerank_power_options_t GetDefaultPowerOptions() {
+      var poweroptions = new igraph_pagerank_power_options_t();
+      poweroptions.niter = 50;
+      poweroptions.eps = 1e-5;
+      return poweroptions;
+    }
+    #endregion
+
+    #region igraph manipulation
+    internal static int igraph_add_edge(igraph_t graph, int from, int to) {
+      return X86 ? igraph_add_edge_x86(graph, from, to) : igraph_add_edge_x64(graph, from, to);
+    }
+    #endregion
+
+    #region igraph visits
+    internal static int igraph_bfs(igraph_t graph, int root, igraph_vector_t roots, igraph_neimode_t mode, bool unreachable, igraph_vector_t restricted, igraph_vector_t order, igraph_vector_t rank, igraph_vector_t father, igraph_vector_t pred, igraph_vector_t succ, igraph_vector_t dist, igraph_bfshandler_t callback, object tag) {
+      return MarshalIfExistsAndCall(tag, ptr => X86 ? igraph_bfs_x86(graph, root, roots, mode, unreachable, restricted, order, rank, father, pred, succ, dist, callback, ptr) : igraph_bfs_x64(graph, root, roots, mode, unreachable, restricted, order, rank, father, pred, succ, dist, callback, ptr));
+    }
+    internal static int igraph_dfs(igraph_t graph, int root, igraph_neimode_t mode, bool unreachable, igraph_vector_t order, igraph_vector_t order_out, igraph_vector_t father, igraph_vector_t dist, igraph_dfshandler_t inWrapper, igraph_dfshandler_t outWrapper, object tag) {
+      return MarshalIfExistsAndCall(tag, ptr => X86 ? igraph_dfs_x86(graph, root, mode, unreachable, order, order_out, father, dist, inWrapper, outWrapper, ptr) : igraph_dfs_x64(graph, root, mode, unreachable, order, order_out, father, dist, inWrapper, outWrapper, ptr));
+    }
+    #endregion
+
+    #region Platform specific DLL imports
+    [DllImport(X86Dll, EntryPoint = "igraph_empty", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_empty_x86([In, Out]igraph_t graph, int n, bool directed);
+    [DllImport(X64Dll, EntryPoint = "igraph_empty", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_empty_x64([In, Out]igraph_t graph, int n, bool directed);
+    [DllImport(X86Dll, EntryPoint = "igraph_destroy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_destroy_x86([In, Out]igraph_t graph);
+    [DllImport(X64Dll, EntryPoint = "igraph_destroy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_destroy_x64([In, Out]igraph_t graph);
+    [DllImport(X86Dll, EntryPoint = "igraph_vcount", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vcount_x86(igraph_t graph);
+    [DllImport(X64Dll, EntryPoint = "igraph_vcount", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vcount_x64(igraph_t graph);
+    [DllImport(X86Dll, EntryPoint = "igraph_add_edge", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_add_edge_x86([In, Out]igraph_t graph, int from, int to);
+    [DllImport(X64Dll, EntryPoint = "igraph_add_edge", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_add_edge_x64([In, Out]igraph_t graph, int from, int to);
+    [DllImport(X86Dll, EntryPoint = "igraph_density", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_density_x86(igraph_t graph, ref double density, bool loops);
+    [DllImport(X64Dll, EntryPoint = "igraph_density", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_density_x64(igraph_t graph, ref double density, bool loops);
+    [DllImport(X86Dll, EntryPoint = "igraph_pagerank", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_pagerank_x86(igraph_t graph, igraph_pagerank_algo_t algo, [In, Out]igraph_vector_t vector, ref double value, igraph_vs_t vids, bool directed, double damping, igraph_vector_t weights, IntPtr options);
+    [DllImport(X64Dll, EntryPoint = "igraph_pagerank", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_pagerank_x64(igraph_t graph, igraph_pagerank_algo_t algo, [In, Out]igraph_vector_t vector, ref double value, igraph_vs_t vids, bool directed, double damping, igraph_vector_t weights, IntPtr options);
+    [DllImport(X86Dll, EntryPoint = "igraph_bfs", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_bfs_x86(igraph_t graph, int root, igraph_vector_t roots, igraph_neimode_t mode, bool unreachable, igraph_vector_t restricted, [In, Out]igraph_vector_t order, [In, Out]igraph_vector_t rank, [In, Out]igraph_vector_t father, [In, Out]igraph_vector_t pred, [In, Out]igraph_vector_t succ, [In, Out]igraph_vector_t dist, igraph_bfshandler_t callback, IntPtr extra);
+    [DllImport(X64Dll, EntryPoint = "igraph_bfs", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_bfs_x64(igraph_t graph, int root, igraph_vector_t roots, igraph_neimode_t mode, bool unreachable, igraph_vector_t restricted, [In, Out]igraph_vector_t order, [In, Out]igraph_vector_t rank, [In, Out]igraph_vector_t father, [In, Out]igraph_vector_t pred, [In, Out]igraph_vector_t succ, [In, Out]igraph_vector_t dist, igraph_bfshandler_t callback, IntPtr extra);
+    [DllImport(X86Dll, EntryPoint = "igraph_dfs", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_dfs_x86(igraph_t graph, int root, igraph_neimode_t mode, bool unreachable, [In, Out]igraph_vector_t order, [In, Out]igraph_vector_t order_out, [In, Out]igraph_vector_t father, [In, Out]igraph_vector_t dist, igraph_dfshandler_t in_callback, igraph_dfshandler_t out_callback, IntPtr extra);
+    [DllImport(X64Dll, EntryPoint = "igraph_dfs", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_dfs_x64(igraph_t graph, int root, igraph_neimode_t mode, bool unreachable, [In, Out]igraph_vector_t order, [In, Out]igraph_vector_t order_out, [In, Out]igraph_vector_t father, [In, Out]igraph_vector_t dist, igraph_dfshandler_t in_callback, igraph_dfshandler_t out_callback, IntPtr extra);
+    #endregion
+    #endregion
+
+    #region igraph_rng
+    internal static int igraph_rng_get_integer(int l, int h) {
+      return X86 ? igraph_rng_get_integer_x86(igraph_rng_default_x86(), l, h) : igraph_rng_get_integer_x64(igraph_rng_default_x64(), l, h);
+    }
+    internal static int igraph_rng_seed(uint seed) {
+      return X86 ? igraph_rng_seed_x86(igraph_rng_default_x86(), seed) : igraph_rng_seed_x64(igraph_rng_default_x64(), seed);
+    }
+
+    #region Platform specific DLL imports
+    [DllImport(X86Dll, EntryPoint = "igraph_rng_default", CallingConvention = CallingConvention.Cdecl)]
+    private static extern IntPtr igraph_rng_default_x86();
+    [DllImport(X64Dll, EntryPoint = "igraph_rng_default", CallingConvention = CallingConvention.Cdecl)]
+    private static extern IntPtr igraph_rng_default_x64();
+    [DllImport(X86Dll, EntryPoint = "igraph_rng_get_integer", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_rng_get_integer_x86(IntPtr rng, int l, int h);
+    [DllImport(X64Dll, EntryPoint = "igraph_rng_get_integer", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_rng_get_integer_x64(IntPtr rng, int l, int h);
+    [DllImport(X86Dll, EntryPoint = "igraph_rng_seed", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_rng_seed_x86(IntPtr rng, uint seed);
+    [DllImport(X64Dll, EntryPoint = "igraph_rng_seed", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_rng_seed_x64(IntPtr rng, uint seed);
+    #endregion
+    #endregion
+
+    #region igraph_vector
+    internal static int igraph_vector_init(igraph_vector_t vector, int length) {
+      return X86 ? igraph_vector_init_x86(vector, length) : igraph_vector_init_x64(vector, length);
+    }
+    internal static int igraph_vector_init_copy(igraph_vector_t vector, double[] vec) {
+      return X86 ? igraph_vector_init_copy_x86(vector, vec, vec.Length) : igraph_vector_init_copy_x64(vector, vec, vec.Length);
+    }
+    internal static void igraph_vector_destroy(igraph_vector_t vector) {
+      if (X86) igraph_vector_destroy_x86(vector);
+      else igraph_vector_destroy_x64(vector);
+    }
+    internal static int igraph_vector_copy(igraph_vector_t to, igraph_vector_t from) {
+      return X86 ? igraph_vector_copy_x86(to, from) : igraph_vector_copy_x64(to, from);
+    }
+    internal static double[] igraph_vector_to_array(igraph_vector_t from) {
+      var len = igraph_vector_size(from);
+      var result = new double[len];
+      if (X86) igraph_vector_copy_to_x86(from, result);
+      else igraph_vector_copy_to_x64(from, result);
+      return result;
+    }
+
+    internal static int igraph_vector_size(igraph_vector_t vector) {
+      return X86 ? igraph_vector_size_x86(vector) : igraph_vector_size_x64(vector);
+    }
+
+    internal static double igraph_vector_e(igraph_vector_t vector, int index) {
+      return X86 ? igraph_vector_e_x86(vector, index) : igraph_vector_e_x64(vector, index);
+    }
+
+    internal static void igraph_vector_set(igraph_vector_t vector, int index, double value) {
+      if (X86) igraph_vector_set_x86(vector, index, value);
+      else igraph_vector_set_x64(vector, index, value);
+    }
+    internal static void igraph_vector_fill(igraph_vector_t vector, double v) {
+      if (X86) igraph_vector_fill_x86(vector, v);
+      else igraph_vector_fill_x64(vector, v);
+    }
+    internal static void igraph_vector_scale(igraph_vector_t vector, double by) {
+      if (X86) igraph_vector_scale_x86(vector, by);
+      else igraph_vector_scale_x64(vector, by);
+    }
+
+    internal static int igraph_vector_reverse(igraph_vector_t vector) {
+      return X86 ? igraph_vector_reverse_x86(vector) : igraph_vector_reverse_x64(vector);
+    }
+    internal static int igraph_vector_shuffle(igraph_vector_t vector) {
+      return X86 ? igraph_vector_shuffle_x86(vector) : igraph_vector_shuffle_x64(vector);
+    }
+
+    #region Platform specific DLL imports
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_init", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_init_x86([In, Out]igraph_vector_t vector, int length);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_init", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_init_x64([In, Out]igraph_vector_t vector, int length);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_init_copy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_init_copy_x86([In, Out]igraph_vector_t vector, double[] vec, int length);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_init_copy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_init_copy_x64([In, Out]igraph_vector_t vector, double[] vec, int length);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_destroy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_vector_destroy_x86([In, Out]igraph_vector_t vector);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_destroy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_vector_destroy_x64([In, Out]igraph_vector_t vector);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_size", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_size_x86(igraph_vector_t vector);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_size", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_size_x64(igraph_vector_t vector);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_e", CallingConvention = CallingConvention.Cdecl)]
+    private static extern double igraph_vector_e_x86(igraph_vector_t vector, int index);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_e", CallingConvention = CallingConvention.Cdecl)]
+    private static extern double igraph_vector_e_x64(igraph_vector_t vector, int index);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_set", CallingConvention = CallingConvention.Cdecl)]
+    private static extern double igraph_vector_set_x86([In, Out]igraph_vector_t vector, int index, double value);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_set", CallingConvention = CallingConvention.Cdecl)]
+    private static extern double igraph_vector_set_x64([In, Out]igraph_vector_t vector, int index, double value);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_copy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_copy_x86([In, Out]igraph_vector_t to, igraph_vector_t from);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_copy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_copy_x64([In, Out]igraph_vector_t to, igraph_vector_t from);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_copy_to", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_vector_copy_to_x86(igraph_vector_t from, [In, Out]double[] to);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_copy_to", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_vector_copy_to_x64(igraph_vector_t from, [In, Out]double[] to);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_fill", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_fill_x86([In, Out]igraph_vector_t vector, double v);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_fill", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_fill_x64([In, Out]igraph_vector_t vector, double v);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_reverse", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_reverse_x86([In, Out]igraph_vector_t vector);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_reverse", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_reverse_x64([In, Out]igraph_vector_t vector);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_shuffle", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_shuffle_x86([In, Out]igraph_vector_t vector);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_shuffle", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vector_shuffle_x64([In, Out]igraph_vector_t vector);
+    [DllImport(X86Dll, EntryPoint = "igraph_vector_scale", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_vector_scale_x86([In, Out]igraph_vector_t vector, double by);
+    [DllImport(X64Dll, EntryPoint = "igraph_vector_scale", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_vector_scale_x64([In, Out]igraph_vector_t vector, double by);
+    #endregion
+    #endregion
+
+    #region igraph_matrix
+    internal static int igraph_matrix_init(igraph_matrix_t matrix, int nrows, int ncols) {
+      return X86 ? igraph_matrix_init_x86(matrix, nrows, ncols) : igraph_matrix_init_x64(matrix, nrows, ncols);
+    }
+    internal static void igraph_matrix_destroy(igraph_matrix_t matrix) {
+      if (X86) igraph_matrix_destroy_x86(matrix);
+      else igraph_matrix_destroy_x64(matrix);
+    }
+    internal static int igraph_matrix_copy(igraph_matrix_t to, igraph_matrix_t from) {
+      return X86 ? igraph_matrix_copy_x86(to, from) : igraph_matrix_copy_x64(to, from);
+    }
+
+    internal static double igraph_matrix_e(igraph_matrix_t matrix, int row, int col) {
+      return X86 ? igraph_matrix_e_x86(matrix, row, col) : igraph_matrix_e_x64(matrix, row, col);
+    }
+
+    internal static void igraph_matrix_set(igraph_matrix_t matrix, int row, int col, double value) {
+      if (X86) igraph_matrix_set_x86(matrix, row, col, value);
+      else igraph_matrix_set_x64(matrix, row, col, value);
+    }
+
+    internal static void igraph_matrix_fill(igraph_matrix_t matrix, double v) {
+      if (X86) igraph_matrix_fill_x86(matrix, v);
+      else igraph_matrix_fill_x64(matrix, v);
+    }
+
+    internal static int igraph_matrix_transpose(igraph_matrix_t matrix) {
+      return X86 ? igraph_matrix_transpose_x86(matrix) : igraph_matrix_transpose_x64(matrix);
+    }
+
+    internal static void igraph_matrix_scale(igraph_matrix_t matrix, double by) {
+      if (X86) igraph_matrix_scale_x86(matrix, by);
+      else igraph_matrix_scale_x64(matrix, by);
+    }
+
+    #region Platform specific DLL imports
+    [DllImport(X86Dll, EntryPoint = "igraph_matrix_init", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_matrix_init_x86([In, Out]igraph_matrix_t matrix, int nrow, int ncol);
+    [DllImport(X64Dll, EntryPoint = "igraph_matrix_init", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_matrix_init_x64([In, Out]igraph_matrix_t matrix, int nrow, int ncol);
+    [DllImport(X86Dll, EntryPoint = "igraph_matrix_destroy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_matrix_destroy_x86([In, Out]igraph_matrix_t matrix);
+    [DllImport(X64Dll, EntryPoint = "igraph_matrix_destroy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_matrix_destroy_x64([In, Out]igraph_matrix_t matrix);
+    [DllImport(X86Dll, EntryPoint = "igraph_matrix_e", CallingConvention = CallingConvention.Cdecl)]
+    private static extern double igraph_matrix_e_x86(igraph_matrix_t matrix, int row, int col);
+    [DllImport(X64Dll, EntryPoint = "igraph_matrix_e", CallingConvention = CallingConvention.Cdecl)]
+    private static extern double igraph_matrix_e_x64(igraph_matrix_t matrix, int row, int col);
+    [DllImport(X86Dll, EntryPoint = "igraph_matrix_set", CallingConvention = CallingConvention.Cdecl)]
+    private static extern double igraph_matrix_set_x86([In, Out]igraph_matrix_t matrix, int row, int col, double value);
+    [DllImport(X64Dll, EntryPoint = "igraph_matrix_set", CallingConvention = CallingConvention.Cdecl)]
+    private static extern double igraph_matrix_set_x64([In, Out]igraph_matrix_t matrix, int row, int col, double value);
+    [DllImport(X86Dll, EntryPoint = "igraph_matrix_copy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_matrix_copy_x86([In, Out]igraph_matrix_t to, igraph_matrix_t from);
+    [DllImport(X64Dll, EntryPoint = "igraph_matrix_copy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_matrix_copy_x64([In, Out]igraph_matrix_t to, igraph_matrix_t from);
+    [DllImport(X86Dll, EntryPoint = "igraph_matrix_fill", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_matrix_fill_x86([In, Out]igraph_matrix_t matrix, double v);
+    [DllImport(X64Dll, EntryPoint = "igraph_matrix_fill", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_matrix_fill_x64([In, Out]igraph_matrix_t matrix, double v);
+    [DllImport(X86Dll, EntryPoint = "igraph_matrix_transpose", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_matrix_transpose_x86([In, Out]igraph_matrix_t matrix);
+    [DllImport(X64Dll, EntryPoint = "igraph_matrix_transpose", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_matrix_transpose_x64([In, Out]igraph_matrix_t matrix);
+    [DllImport(X86Dll, EntryPoint = "igraph_matrix_scale", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_matrix_scale_x86([In, Out]igraph_matrix_t matrix, double by);
+    [DllImport(X64Dll, EntryPoint = "igraph_matrix_scale", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_matrix_scale_x64([In, Out]igraph_matrix_t matrix, double by);
+    #endregion
+    #endregion
+
+    #region igraph_layout
+    internal static int igraph_layout_fruchterman_reingold(igraph_t graph, igraph_matrix_t res, bool use_seed, int niter, double start_temp, igraph_layout_grid_t grid, igraph_vector_t weights, igraph_vector_t minx, igraph_vector_t maxx, igraph_vector_t miny, igraph_vector_t maxy) {
+      return X86 ? igraph_layout_fruchterman_reingold_x86(graph, res, use_seed, niter, start_temp, grid, weights, minx, maxx, miny, maxy) : igraph_layout_fruchterman_reingold_x64(graph, res, use_seed, niter, start_temp, grid, weights, minx, maxx, miny, maxy);
+    }
+    internal static int igraph_layout_kamada_kawai(igraph_t graph, igraph_matrix_t res, bool use_seed, int maxiter, double epsilon, double kkconst, igraph_vector_t weights, igraph_vector_t minx, igraph_vector_t maxx, igraph_vector_t miny, igraph_vector_t maxy) {
+      return X86 ? igraph_layout_kamada_kawai_x86(graph, res, use_seed, maxiter, epsilon, kkconst, weights, minx, maxx, miny, maxy) : igraph_layout_kamada_kawai_x64(graph, res, use_seed, maxiter, epsilon, kkconst, weights, minx, maxx, miny, maxy);
+    }
+    internal static int igraph_layout_davidson_harel(igraph_t graph, igraph_matrix_t res, bool use_seed, int maxiter, int fineiter, double cool_fact, double weight_node_dist, double weight_border, double weight_edge_lengths, double weight_edge_crossings, double weight_node_edge_dist) {
+      return X86 ? igraph_layout_davidson_harel_x86(graph, res, use_seed, maxiter, fineiter, cool_fact, weight_node_dist, weight_border, weight_edge_lengths, weight_edge_crossings, weight_node_edge_dist) : igraph_layout_davidson_harel_x64(graph, res, use_seed, maxiter, fineiter, cool_fact, weight_node_dist, weight_border, weight_edge_lengths, weight_edge_crossings, weight_node_edge_dist);
+    }
+    internal static int igraph_layout_mds(igraph_t graph, igraph_matrix_t res, igraph_matrix_t dist = null, int dim = 2) {
+      return MarshalIfExistsAndCall(GetDefaultArpackOptions(), ptr => X86 ? igraph_layout_mds_x86(graph, res, dist, dim, ptr) : igraph_layout_mds_x64(graph, res, dist, dim, ptr));
+    }
+
+    #region Platform specific DLL imports
+    [DllImport(X86Dll, EntryPoint = "igraph_layout_fruchterman_reingold", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_layout_fruchterman_reingold_x86(igraph_t graph, [In, Out]igraph_matrix_t res, bool use_seed, int niter, double start_temp, igraph_layout_grid_t grid, igraph_vector_t weights, igraph_vector_t minx, igraph_vector_t maxx, igraph_vector_t miny, igraph_vector_t maxy);
+    [DllImport(X64Dll, EntryPoint = "igraph_layout_fruchterman_reingold", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_layout_fruchterman_reingold_x64(igraph_t graph, [In, Out]igraph_matrix_t res, bool use_seed, int niter, double start_temp, igraph_layout_grid_t grid, igraph_vector_t weights, igraph_vector_t minx, igraph_vector_t maxx, igraph_vector_t miny, igraph_vector_t maxy);
+    [DllImport(X86Dll, EntryPoint = "igraph_layout_kamada_kawai", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_layout_kamada_kawai_x86(igraph_t graph, [In, Out]igraph_matrix_t res, bool use_seed, int maxiter, double epsilon, double kkconst, igraph_vector_t weights, igraph_vector_t minx, igraph_vector_t maxx, igraph_vector_t miny, igraph_vector_t maxy);
+    [DllImport(X64Dll, EntryPoint = "igraph_layout_kamada_kawai", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_layout_kamada_kawai_x64(igraph_t graph, [In, Out]igraph_matrix_t res, bool use_seed, int maxiter, double epsilon, double kkconst, igraph_vector_t weights, igraph_vector_t minx, igraph_vector_t maxx, igraph_vector_t miny, igraph_vector_t maxy);
+    [DllImport(X86Dll, EntryPoint = "igraph_layout_davidson_harel", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_layout_davidson_harel_x86(igraph_t graph, [In, Out]igraph_matrix_t res, bool use_seed, int maxiter, int fineiter, double cool_fact, double weight_node_dist, double weight_border, double weight_edge_lengths, double weight_edge_crossings, double weight_node_edge_dist);
+    [DllImport(X64Dll, EntryPoint = "igraph_layout_davidson_harel", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_layout_davidson_harel_x64(igraph_t graph, [In, Out]igraph_matrix_t res, bool use_seed, int maxiter, int fineiter, double cool_fact, double weight_node_dist, double weight_border, double weight_edge_lengths, double weight_edge_crossings, double weight_node_edge_dist);
+    [DllImport(X86Dll, EntryPoint = "igraph_layout_mds", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_layout_mds_x86(igraph_t graph, [In, Out]igraph_matrix_t res, igraph_matrix_t dist, int dim, IntPtr options);
+    [DllImport(X64Dll, EntryPoint = "igraph_layout_mds", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_layout_mds_x64(igraph_t graph, [In, Out]igraph_matrix_t res, igraph_matrix_t dist, int dim, IntPtr options);
+    #endregion
+    #endregion
+
+    #region igraph_iterators
+    internal static int igraph_vs_all(ref igraph_vs_t vs) {
+      return X86 ? igraph_vs_all_x86(ref vs) : igraph_vs_all_x64(ref vs);
+    }
+    internal static void igraph_vs_destroy(ref igraph_vs_t vs) {
+      if (X86) igraph_vs_destroy_x86(ref vs);
+      else igraph_vs_destroy_x64(ref vs);
+    }
+
+    #region Platform specific DLL imports
+    [DllImport(X86Dll, EntryPoint = "igraph_vs_all", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vs_all_x86([In, Out]ref igraph_vs_t vs);
+    [DllImport(X64Dll, EntryPoint = "igraph_vs_all", CallingConvention = CallingConvention.Cdecl)]
+    private static extern int igraph_vs_all_x64([In, Out]ref igraph_vs_t vs);
+    [DllImport(X86Dll, EntryPoint = "igraph_vs_destroy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_vs_destroy_x86([In, Out]ref igraph_vs_t vs);
+    [DllImport(X64Dll, EntryPoint = "igraph_vs_destroy", CallingConvention = CallingConvention.Cdecl)]
+    private static extern void igraph_vs_destroy_x64([In, Out]ref igraph_vs_t vs);
+    #endregion
+    #endregion
+
+    private static int MarshalIfExistsAndCall(object o, Func<IntPtr, int> call) {
+      var ptr = IntPtr.Zero;
+      if (o != null) {
+        try {
+          ptr = Marshal.AllocHGlobal(Marshal.SizeOf(o));
+        } catch (OutOfMemoryException e) { throw new InvalidOperationException("Not enough memory to perform operation.", e); }
+        Marshal.StructureToPtr(o, ptr, false);
+      }
+      try {
+        return call(ptr);
+      } finally {
+        if (o != null) {
+          Marshal.DestroyStructure(ptr, o.GetType());
+          Marshal.FreeHGlobal(ptr);
+        }
+      }
+    }
+
+    private static void MarshalIfExistsAndCall(object o, Action<IntPtr> call) {
+      var ptr = IntPtr.Zero;
+      if (o != null) {
+        try {
+          ptr = Marshal.AllocHGlobal(Marshal.SizeOf(o));
+        } catch (OutOfMemoryException e) { throw new InvalidOperationException("Not enough memory to perform operation.", e); }
+        Marshal.StructureToPtr(o, ptr, false);
+      }
+      try {
+        call(ptr);
+      } finally {
+        if (o != null) {
+          Marshal.DestroyStructure(ptr, o.GetType());
+          Marshal.FreeHGlobal(ptr);
+        }
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj	(revision 15973)
@@ -0,0 +1,91 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{088D34F2-32EA-43FF-BAA8-22428D5B66BE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.IGraph</RootNamespace>
+    <AssemblyName>HeuristicLab.IGraph-0.8.0-pre</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DllImporter.cs" />
+    <Compile Include="Wrappers\Datatypes.cs" />
+    <Compile Include="Wrappers\Graph.cs" />
+    <Compile Include="Wrappers\Matrix.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Datatypes.cs" />
+    <Compile Include="Wrappers\Vector.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186a6a-5176-4402-ae83-886557b53cca}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="igraph-0.8.0-pre-license.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="igraph-0.8.0-pre-x64.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="igraph-0.8.0-pre-x86.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="igraph_version.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Plugin.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Plugin.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Plugin.cs	(revision 15973)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.IGraph {
+  [Plugin("HeuristicLab.IGraph", "Provides functionality of igraph in HeuristicLab", "0.8.0.0")]
+  [PluginFile("HeuristicLab.IGraph-0.8.0-pre.dll", PluginFileType.Assembly)]
+  [PluginFile("igraph-0.8.0-pre-x86.dll", PluginFileType.NativeDll)]
+  [PluginFile("igraph-0.8.0-pre-x64.dll", PluginFileType.NativeDll)]
+  [PluginFile("igraph-0.8.0-pre-license.txt", PluginFileType.License)]
+  [PluginFile("igraph_version.txt", PluginFileType.Data)]
+  public class HeuristicLabIGraphPlugin : PluginBase {
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Properties/AssemblyInfo.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Properties/AssemblyInfo.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Properties/AssemblyInfo.cs	(revision 15973)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.IGraph-0.8.0-pre")]
+[assembly: AssemblyDescription("Plugin for providing igraph functionality in HeuristicLab")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("fa788954-4370-4d95-9f3b-48871fa6df5e")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("0.8.0.0")]
+[assembly: AssemblyFileVersion("0.8.0.0")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Datatypes.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Datatypes.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Datatypes.cs	(revision 15973)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.IGraph.Wrappers {
+  public delegate bool BreadthFirstHandler(Graph g, int currentVertexId, int previousVertexId, int nextVertexId, int rank, int distance, object tag);
+  public delegate bool DepthFirstHandler(Graph g, int vertexId, int distance, object tag);
+
+  public enum DirectedWalkMode {
+    Outgoing = 1,
+    Incoming = 2,
+    All = 3,
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Graph.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Graph.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Graph.cs	(revision 15973)
@@ -0,0 +1,142 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.IGraph.Wrappers {
+  public sealed class Graph : IDisposable {
+    private igraph_t graph;
+    internal igraph_t NativeInstance { get { return graph; } }
+
+    public int Vertices { get { return graph.n; } }
+    public bool IsDirected { get { return graph.directed; } }
+
+    public Graph() : this(0) { }
+    public Graph(int vertices) : this(vertices, false) { }
+    public Graph(int vertices, bool directed) {
+      graph = new igraph_t();
+      DllImporter.igraph_empty(graph, vertices, directed);
+    }
+    public Graph(int vertices, IEnumerable<Tuple<int, int>> edges) : this(vertices, edges, false) { }
+    public Graph(int vertices, IEnumerable<Tuple<int, int>> edges, bool directed) {
+      graph = new igraph_t();
+      DllImporter.igraph_empty(graph, vertices, directed);
+      foreach (var e in edges)
+        DllImporter.igraph_add_edge(graph, e.Item1, e.Item2);
+    }
+    ~Graph() {
+      DllImporter.igraph_destroy(graph);
+    }
+
+    public void Dispose() {
+      if (graph == null) return;
+      DllImporter.igraph_destroy(graph);
+      graph = null;
+      GC.SuppressFinalize(this);
+    }
+
+    public void SetSeed(uint seed) {
+      DllImporter.igraph_rng_seed(seed);
+    }
+
+    public double Density() {
+      double density;
+      DllImporter.igraph_density(graph, out density, false);
+      return density;
+    }
+
+    public Vector PageRank(double damping = 0.85, Vector weights = null) {
+      var vec = new Vector(Vertices);
+      var all = new igraph_vs_t();
+      DllImporter.igraph_vs_all(ref all);
+      try {
+        double eigenv = 0;
+        DllImporter.igraph_pagerank(graph, igraph_pagerank_algo_t.IGRAPH_PAGERANK_ALGO_PRPACK, vec.NativeInstance, out eigenv, all, IsDirected, damping, weights != null ? weights.NativeInstance : null);
+      } finally {
+        DllImporter.igraph_vs_destroy(ref all);
+      }
+      return vec;
+    }
+
+    public Matrix LayoutWithFruchtermanReingold(Matrix initialCoords = null) {
+      return LayoutWithFruchtermanReingold(500, Math.Sqrt(Vertices), initialCoords);
+    }
+    public Matrix LayoutWithFruchtermanReingold(int niter, double startTemp, Matrix initialCoords = null) {
+      if (initialCoords != null && (initialCoords.Rows != Vertices || initialCoords.Columns != 2))
+        throw new ArgumentException("Initial coordinate matrix does not contain the required number of rows and columns.", "initialCoords");
+      var coords = initialCoords != null ? new Matrix(initialCoords) : new Matrix(Vertices, 2);
+      DllImporter.igraph_layout_fruchterman_reingold(graph, coords.NativeInstance, initialCoords != null, niter, startTemp, igraph_layout_grid_t.IGRAPH_LAYOUT_AUTOGRID, null, null, null, null, null);
+      return coords;
+    }
+
+    public Matrix LayoutWithKamadaKawai(Matrix initialCoords = null) {
+      return LayoutWithKamadaKawai(50 * Vertices, 0, Vertices, initialCoords);
+    }
+    public Matrix LayoutWithKamadaKawai(int maxiter, double epsilon, double kkconst, Matrix initialCoords = null) {
+      if (initialCoords != null && (initialCoords.Rows != Vertices || initialCoords.Columns != 2))
+        throw new ArgumentException("Initial coordinate matrix does not contain the required number of rows and columns.", "initialCoords");
+      var coords = initialCoords != null ? new Matrix(initialCoords) : new Matrix(Vertices, 2);
+      DllImporter.igraph_layout_kamada_kawai(graph, coords.NativeInstance, initialCoords != null, maxiter, epsilon, kkconst, null, null, null, null, null);
+      return coords;
+    }
+
+    public Matrix LayoutWithDavidsonHarel(Matrix initialCoords = null) {
+      var density = Density();
+      return LayoutWithDavidsonHarel(10, Math.Max(10, (int)Math.Log(Vertices, 2)), 0.75, 1.0, 0.0, density / 10.0, 1.0 - Math.Sqrt(density), 0.2 * (1 - density), initialCoords);
+    }
+    public Matrix LayoutWithDavidsonHarel(int maxiter, int fineiter, double cool_fact, double weight_node_dist, double weight_border, double weight_edge_lengths, double weight_edge_crossings, double weight_node_edge_dist, Matrix initialCoords = null) {
+      if (initialCoords != null && (initialCoords.Rows != Vertices || initialCoords.Columns != 2))
+        throw new ArgumentException("Initial coordinate matrix does not contain the required number of rows and columns.", "initialCoords");
+      var coords = initialCoords != null ? new Matrix(initialCoords) : new Matrix(Vertices, 2);
+      DllImporter.igraph_layout_davidson_harel(graph, coords.NativeInstance, initialCoords != null, maxiter, fineiter, cool_fact, weight_node_dist, weight_border, weight_edge_lengths, weight_edge_crossings, weight_node_edge_dist);
+      return coords;
+    }
+
+    /// <summary>
+    /// Use multi-dimensional scaling to layout vertices. 
+    /// A distance matrix can be used to specify the distances between the vertices.
+    /// Otherwise the distances will be calculated by shortest-path-length.
+    /// </summary>
+    /// <remarks>
+    /// For disconnected graphs, dimension must be 2.
+    /// </remarks>
+    /// <param name="dist">The distance matrix to layout the vertices.</param>
+    /// <param name="dim">How many dimensions should be used.</param>
+    /// <returns>The coordinates matrix of the aligned vertices.</returns>
+    public Matrix LayoutWithMds(Matrix dist = null, int dim = 2) {
+      var coords = new Matrix(Vertices, dim);
+      DllImporter.igraph_layout_mds(graph, coords.NativeInstance, dist != null ? dist.NativeInstance : null, dim);
+      return coords;
+    }
+
+    public void BreadthFirstWalk(BreadthFirstHandler handler, int root, DirectedWalkMode mode, bool includeUnreachableFromRoot = false, object tag = null) {
+      igraph_bfshandler_t wrapper = (t, vid, pred, succ, rank, dist, extra) => handler != null && handler(this, vid, pred, succ, rank, dist, tag);
+      DllImporter.igraph_bfs(graph, root, null, (igraph_neimode_t)mode, includeUnreachableFromRoot, null, null, null, null, null, null, null, wrapper, tag);
+    }
+
+    public void DepthFirstWalk(DepthFirstHandler inHandler, DepthFirstHandler outHandler, int root, DirectedWalkMode mode, bool includeUnreachableFromRoot = false, object tag = null) {
+      igraph_dfshandler_t inWrapper = (t, vid, dist, extra) => inHandler != null && inHandler(this, vid, dist, tag);
+      igraph_dfshandler_t outWrapper = (t, vid, dist, extra) => outHandler != null && outHandler(this, vid, dist, tag);
+      DllImporter.igraph_dfs(graph, root, (igraph_neimode_t)mode, includeUnreachableFromRoot, null, null, null, null, inWrapper, outWrapper, tag);
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Matrix.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Matrix.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Matrix.cs	(revision 15973)
@@ -0,0 +1,97 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.IGraph.Wrappers {
+  public sealed class Matrix : IDisposable {
+    igraph_matrix_t matrix;
+    internal igraph_matrix_t NativeInstance { get { return matrix; } }
+    public int Rows { get { return matrix.nrow; } }
+    public int Columns { get { return matrix.ncol; } }
+
+    public Matrix(int nrow, int ncol) {
+      if (nrow < 0 || ncol < 0) throw new ArgumentException("Rows and Columns must be >= 0");
+      matrix = new igraph_matrix_t();
+      DllImporter.igraph_matrix_init(matrix, nrow, ncol);
+    }
+    public Matrix(Matrix other) {
+      if (other == null) throw new ArgumentNullException("other");
+      matrix = new igraph_matrix_t();
+      DllImporter.igraph_matrix_copy(matrix, other.NativeInstance);
+    }
+    public Matrix(double[,] mat) {
+      if (mat == null) throw new ArgumentNullException("mat");
+      matrix = new igraph_matrix_t();
+      var nrows = mat.GetLength(0);
+      var ncols = mat.GetLength(1);
+      DllImporter.igraph_matrix_init(matrix, nrows, ncols);
+      var colwise = new double[ncols * nrows];
+      for (var j = 0; j < ncols; j++)
+        for (var i = 0; i < nrows; i++)
+          colwise[j * nrows + i] = mat[i, j];
+      DllImporter.igraph_vector_init_copy(matrix.data, colwise);
+    }
+    ~Matrix() {
+      DllImporter.igraph_matrix_destroy(matrix);
+    }
+
+    public void Dispose() {
+      if (matrix == null) return;
+      DllImporter.igraph_matrix_destroy(matrix);
+      matrix = null;
+      GC.SuppressFinalize(this);
+    }
+
+    public void Fill(double v) {
+      DllImporter.igraph_matrix_fill(matrix, v);
+    }
+
+    public void Transpose() {
+      DllImporter.igraph_matrix_transpose(matrix);
+    }
+
+    public void Scale(double by) {
+      DllImporter.igraph_matrix_scale(matrix, by);
+    }
+
+    public double this[int row, int col] {
+      get {
+        if (row < 0 || row > Rows || col < 0 || col > Columns) throw new IndexOutOfRangeException("Trying to get cell(" + row + ";" + col + ") of matrix(" + Rows + ";" + Columns + ").");
+        return DllImporter.igraph_matrix_e(matrix, row, col);
+      }
+      set {
+        if (row < 0 || row > Rows || col < 0 || col > Columns) throw new IndexOutOfRangeException("Trying to set cell(" + row + ";" + col + ") of matrix(" + Rows + ";" + Columns + ").");
+        DllImporter.igraph_matrix_set(matrix, row, col, value);
+      }
+    }
+
+    public double[,] ToMatrix() {
+      var result = new double[Rows, Columns];
+      for (var i = 0; i < Rows; i++) {
+        for (var j = 0; j < Columns; j++) {
+          result[i, j] = DllImporter.igraph_matrix_e(matrix, i, j);
+        }
+      }
+      return result;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Vector.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Vector.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Vector.cs	(revision 15973)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace HeuristicLab.IGraph.Wrappers {
+  public sealed class Vector : IDisposable {
+    private igraph_vector_t vector;
+
+    internal igraph_vector_t NativeInstance {
+      get { return vector; }
+    }
+
+    public int Length {
+      get { return DllImporter.igraph_vector_size(vector); }
+    }
+
+    public Vector(int length) {
+      if (length < 0) throw new ArgumentException("Rows and Columns must be >= 0");
+      vector = new igraph_vector_t();
+      DllImporter.igraph_vector_init(vector, length);
+    }
+    public Vector(IEnumerable<double> data) {
+      if (data == null) throw new ArgumentNullException("data");
+      var vec = data.ToArray();
+      vector = new igraph_vector_t();
+      DllImporter.igraph_vector_init_copy(vector, vec);
+    }
+    public Vector(Vector other) {
+      if (other == null) throw new ArgumentNullException("other");
+      vector = new igraph_vector_t();
+      DllImporter.igraph_vector_copy(vector, other.NativeInstance);
+    }
+    ~Vector() {
+      DllImporter.igraph_vector_destroy(vector);
+    }
+
+    public void Dispose() {
+      if (vector == null) return;
+      DllImporter.igraph_vector_destroy(vector);
+      vector = null;
+      GC.SuppressFinalize(this);
+    }
+
+    public void Fill(double v) {
+      DllImporter.igraph_vector_fill(vector, v);
+    }
+
+    public void Reverse() {
+      DllImporter.igraph_vector_reverse(vector);
+    }
+
+    public void Shuffle() {
+      DllImporter.igraph_vector_shuffle(vector);
+    }
+
+    public void Scale(double by) {
+      DllImporter.igraph_vector_scale(vector, by);
+    }
+
+    public double this[int index] {
+      get {
+        if (index < 0 || index > Length) throw new IndexOutOfRangeException("Trying to get index(" + index + ") of vector(" + Length + ").");
+        return DllImporter.igraph_vector_e(vector, index);
+      }
+      set {
+        if (index < 0 || index > Length) throw new IndexOutOfRangeException("Trying to set index(" + index + ") of vector(" + Length + ").");
+        DllImporter.igraph_vector_set(vector, index, value);
+      }
+    }
+
+    public double[] ToArray() {
+      return DllImporter.igraph_vector_to_array(vector);
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/igraph-0.8.0-pre-license.txt
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/igraph-0.8.0-pre-license.txt	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/igraph-0.8.0-pre-license.txt	(revision 15973)
@@ -0,0 +1,345 @@
+﻿		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/igraph_version.txt
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/igraph_version.txt	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/igraph_version.txt	(revision 15973)
@@ -0,0 +1,6 @@
+﻿This version of igraph is a custom build of a commit [1] in the pre-0.8.0 branch 
+of the igraph C library available at GitHub [2]. The library was compiled with
+Visual Studio 2013 for x86 as well as x64.
+
+[1]: https://github.com/igraph/igraph/commit/ac88d125017ced5d77bd64e4a336fdd8e6a5ca84
+[2]: https://github.com/igraph/igraph
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/HeuristicLab.MathJax-2.6.1.csproj
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/HeuristicLab.MathJax-2.6.1.csproj	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/HeuristicLab.MathJax-2.6.1.csproj	(revision 15973)
@@ -0,0 +1,190 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{BCDA17A6-5B4A-495C-B182-E856CA081BE6}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.MathJax</RootNamespace>
+    <AssemblyName>HeuristicLab.MathJax-2.6.1</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.IO.Compression" />
+    <Reference Include="System.IO.Compression.FileSystem" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="MathJax.zip">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="MathJax license.txt">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="obj\Debug\TempPE\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+export ProjectDir=$(ProjectDir)
+export SolutionDir=$(SolutionDir)
+
+$SolutionDir/PreBuildEvent.sh
+</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/MathJax license.txt
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/MathJax license.txt	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/MathJax license.txt	(revision 15973)
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/Plugin.cs.frame	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/Plugin.cs.frame	(revision 15973)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.MathJax {
+  [Plugin("HeuristicLab.MathJax", "HeuristicLab transport plugin for MathJax (www.mathjax.org) , an open source JavaScript display engine for mathematics that works in all browsers", "1.1.$WCREV$")]
+  [PluginFile("HeuristicLab.MathJax-2.6.1.dll", PluginFileType.Assembly)]
+  [PluginFile("MathJax license.txt", PluginFileType.License)]
+  [PluginFile("mathjax.zip", PluginFileType.Data)]
+
+  public class HeuristicLabMathJaxPlugin : PluginBase {
+    public override void OnLoad() {
+      base.OnLoad();
+      if (!Directory.EnumerateDirectories(AppDomain.CurrentDomain.BaseDirectory, "MathJax", SearchOption.TopDirectoryOnly).Any()) {
+        ZipFile.ExtractToDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "mathjax.zip"), AppDomain.CurrentDomain.BaseDirectory);
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/Properties/AssemblyInfo.cs.frame	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.6.1/HeuristicLab.MathJax-2.6.1/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.MathJax")]
+[assembly: AssemblyDescription("HeuristicLab transport plugin for MathJax (www.mathjax.org) , an open source JavaScript display engine for mathematics that works in all browsers")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("801C14B0-2379-47A5-B67A-E24CAF9B1424")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("2.6.1")]
+[assembly: AssemblyFileVersion("2.6.1.$WCREV$")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -31,5 +31,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/CustomTools/CustomPanTool.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/CustomTools/CustomPanTool.cs	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/CustomTools/CustomPanTool.cs	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/NetronVisualization.Designer.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/NetronVisualization.Designer.cs	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/NetronVisualization.Designer.cs	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/NetronVisualization.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/NetronVisualization.cs	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/NetronVisualization.cs	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/Plugin.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/Plugin.cs	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/Plugin.cs	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj	(revision 15973)
@@ -69,5 +69,5 @@
     <DebugType>full</DebugType>
     <ErrorReport>prompt</ErrorReport>
-    <GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
+    <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
     <RunCodeAnalysis>false</RunCodeAnalysis>
     <CodeAnalysisRules>
@@ -145,5 +145,5 @@
     <CodeAnalysisRules>
     </CodeAnalysisRules>
-    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
+    <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>Migrated rules for Netron.Diagramming.Core-3.0.2672.12446.ruleset</CodeAnalysisRuleSet>
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/HeuristicLab.SimSharp-3.0.11.csproj
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/HeuristicLab.SimSharp-3.0.11.csproj	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/HeuristicLab.SimSharp-3.0.11.csproj	(revision 15973)
@@ -0,0 +1,128 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{5C93CAF7-AE6A-4540-95B2-5DA6761A2677}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.SimSharp</RootNamespace>
+    <AssemblyName>HeuristicLab.SimSharp-3.0.11</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Plugin.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186a6a-5176-4402-ae83-886557b53cca}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\SimSharp-3.0.11\SimSharp-3.0.11.csproj">
+      <Project>{9fe9c740-7859-4d01-ad07-7d4e15a6320b}</Project>
+      <Name>SimSharp-3.0.11</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="SimSharp-3.0.11 License.txt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">
+      set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+      set ProjectDir=$(ProjectDir)
+      set SolutionDir=$(SolutionDir)
+      set Outdir=$(Outdir)
+
+      call PreBuildEvent.cmd
+    </PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+      export ProjectDir=$(ProjectDir)
+      export SolutionDir=$(SolutionDir)
+
+      $SolutionDir/PreBuildEvent.sh
+    </PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/Plugin.cs.frame	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/Plugin.cs.frame	(revision 15973)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.SimSharp {
+  [Plugin("HeuristicLab.SimSharp", "Transport plugin for the simulation framework Sim#", "3.0.11.$WCREV$")]
+  [PluginFile("HeuristicLab.SimSharp-3.0.11.dll", PluginFileType.Assembly)]
+  [PluginFile("SimSharp-3.0.11.dll", PluginFileType.Assembly)]
+  [PluginFile("SimSharp-3.0.11 License.txt", PluginFileType.License)]
+  public class HeuristicLabSimSharpPlugin : PluginBase {
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/Properties/AssemblyInfo.cs.frame	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -0,0 +1,35 @@
+﻿using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.SimSharp-3.0.11")]
+[assembly: AssemblyDescription("Transport plugin for the simulation framework Sim#")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("15bc80f5-e0b9-4481-bab1-289d1403f877")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.0.11.0")]
+[assembly: AssemblyFileVersion("3.0.11.$WCREV$")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/SimSharp-3.0.11 License.txt
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/SimSharp-3.0.11 License.txt	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/HeuristicLab.SimSharp-3.0.11/SimSharp-3.0.11 License.txt	(revision 15973)
@@ -0,0 +1,705 @@
+Sim# integrates code from a third-party "BlueRaja". Below the license from that
+third party provider as well as Sim#'s own license are given.
+Sim# also uses FastRandom from Colin Green (sharpneat@gmail.com) which is also
+licensed under the GPL. 
+
+=== License of BlueRaja's Event Queue ===
+
+The MIT License (MIT)
+
+Copyright (c) 2013 Daniel "BlueRaja" Pflughoeft
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=== License of SimSharp and FastRandom ===
+
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Analysis/ContinuousStatistics.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Analysis/ContinuousStatistics.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Analysis/ContinuousStatistics.cs	(revision 15973)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public sealed class ContinuousStatistics {
+    private readonly Environment env;
+
+    public int Count { get; private set; }
+    public double TotalTimeD { get; private set; }
+    public TimeSpan TotalTime { get { return env.ToTimeSpan(TotalTimeD); } }
+
+    public double Min { get; private set; }
+    public double Max { get; private set; }
+    public double Area { get; private set; }
+    public double Mean { get; private set; }
+    public double StdDev { get { return Math.Sqrt(Variance); } }
+    public double Variance { get { return (TotalTimeD > 0) ? variance / TotalTimeD : 0.0; } }
+
+    private double lastUpdateTime;
+    private double lastValue;
+    private double variance;
+
+    private bool firstSample;
+
+
+    public ContinuousStatistics(Environment env) {
+      this.env = env;
+      lastUpdateTime = env.NowD;
+    }
+
+    public void Update(double value) {
+      Count++;
+
+      if (!firstSample) {
+        Min = Max = Mean = value;
+        firstSample = true;
+      } else {
+        if (value < Min) Min = value;
+        if (value > Max) Max = value;
+
+        var duration = env.NowD - lastUpdateTime;
+        if (duration > 0) {
+          Area += (lastValue * duration);
+          var oldMean = Mean;
+          Mean = oldMean + (lastValue - oldMean) * duration / (duration + TotalTimeD);
+          variance = variance + (lastValue - oldMean) * (lastValue - Mean) * duration;
+          TotalTimeD += duration;
+        }
+      }
+
+      lastUpdateTime = env.NowD;
+      lastValue = value;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Collections/EventQueue-License.txt
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Collections/EventQueue-License.txt	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Collections/EventQueue-License.txt	(revision 15973)
@@ -0,0 +1,21 @@
+﻿The MIT License (MIT)
+
+Copyright (c) 2013 Daniel "BlueRaja" Pflughoeft
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Collections/EventQueue.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Collections/EventQueue.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Collections/EventQueue.cs	(revision 15973)
@@ -0,0 +1,287 @@
+﻿using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace SimSharp {
+  /// <summary>
+  /// An implementation of a min-Priority Queue using a heap.  Has O(1) .Contains()!
+  /// See https://bitbucket.org/BlueRaja/high-speed-priority-queue-for-c/wiki/Getting%20Started for more information
+  /// </summary>
+  /// <remarks>
+  /// There are modifications so that the type is not generic anymore and can only hold values of type EventQueueNode
+  /// </remarks>
+  public sealed class EventQueue : IEnumerable<EventQueueNode> {
+    private int _numNodes;
+    private readonly EventQueueNode[] _nodes;
+    private long _numNodesEverEnqueued;
+
+    /// <summary>
+    /// Instantiate a new Priority Queue
+    /// </summary>
+    /// <param name="maxNodes">EventQueueNodehe max nodes ever allowed to be enqueued (going over this will cause an exception)</param>
+    public EventQueue(int maxNodes) {
+      _numNodes = 0;
+      _nodes = new EventQueueNode[maxNodes + 1];
+      _numNodesEverEnqueued = 0;
+    }
+
+    /// <summary>
+    /// Returns the number of nodes in the queue.  O(1)
+    /// </summary>
+    public int Count {
+      get {
+        return _numNodes;
+      }
+    }
+
+    /// <summary>
+    /// Returns the maximum number of items that can be enqueued at once in this queue.  Once you hit this number (ie. once Count == MaxSize),
+    /// attempting to enqueue another item will throw an exception.  O(1)
+    /// </summary>
+    public int MaxSize {
+      get {
+        return _nodes.Length - 1;
+      }
+    }
+
+    /// <summary>
+    /// Removes every node from the queue.  O(n) (So, don't do this often!)
+    /// </summary>
+#if AGGRESSIVE_INLINING
+        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
+#endif
+    public void Clear() {
+      Array.Clear(_nodes, 1, _numNodes);
+      _numNodes = 0;
+    }
+
+    /// <summary>
+    /// Returns (in O(1)!) whether the given node is in the queue.  O(1)
+    /// </summary>
+#if AGGRESSIVE_INLINING
+        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
+#endif
+    public bool Contains(EventQueueNode node) {
+      return (_nodes[node.QueueIndex] == node);
+    }
+
+    /// <summary>
+    /// Enqueue a node - .Priority must be set beforehand!  O(log n)
+    /// </summary>
+#if AGGRESSIVE_INLINING
+        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
+#endif
+    public EventQueueNode Enqueue(DateTime primaryPriority, Event @event, int secondaryPriority = 0) {
+      var node = new EventQueueNode {
+        PrimaryPriority = primaryPriority,
+        SecondaryPriority = secondaryPriority,
+        Event = @event,
+        QueueIndex = ++_numNodes,
+        InsertionIndex = _numNodesEverEnqueued++
+      };
+      _nodes[_numNodes] = node;
+      CascadeUp(_nodes[_numNodes]);
+      return node;
+    }
+
+#if AGGRESSIVE_INLINING
+        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
+#endif
+    private void Swap(EventQueueNode node1, EventQueueNode node2) {
+      //Swap the nodes
+      _nodes[node1.QueueIndex] = node2;
+      _nodes[node2.QueueIndex] = node1;
+
+      //Swap their indicies
+      int temp = node1.QueueIndex;
+      node1.QueueIndex = node2.QueueIndex;
+      node2.QueueIndex = temp;
+    }
+
+    //Performance appears to be slightly better when this is NOT inlined o_O
+    private void CascadeUp(EventQueueNode node) {
+      //aka Heapify-up
+      int parent = node.QueueIndex / 2;
+      while (parent >= 1) {
+        EventQueueNode parentNode = _nodes[parent];
+        if (HasHigherPriority(parentNode, node))
+          break;
+
+        //Node has lower priority value, so move it up the heap
+        Swap(node, parentNode); //For some reason, this is faster with Swap() rather than (less..?) individual operations, like in CascadeDown()
+
+        parent = node.QueueIndex / 2;
+      }
+    }
+
+#if AGGRESSIVE_INLINING
+        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
+#endif
+    private void CascadeDown(EventQueueNode node) {
+      //aka Heapify-down
+      EventQueueNode newParent;
+      int finalQueueIndex = node.QueueIndex;
+      while (true) {
+        newParent = node;
+        int childLeftIndex = 2 * finalQueueIndex;
+
+        //Check if the left-child is higher-priority than the current node
+        if (childLeftIndex > _numNodes) {
+          //This could be placed outside the loop, but then we'd have to check newParent != node twice
+          node.QueueIndex = finalQueueIndex;
+          _nodes[finalQueueIndex] = node;
+          break;
+        }
+
+        EventQueueNode childLeft = _nodes[childLeftIndex];
+        if (HasHigherPriority(childLeft, newParent)) {
+          newParent = childLeft;
+        }
+
+        //Check if the right-child is higher-priority than either the current node or the left child
+        int childRightIndex = childLeftIndex + 1;
+        if (childRightIndex <= _numNodes) {
+          EventQueueNode childRight = _nodes[childRightIndex];
+          if (HasHigherPriority(childRight, newParent)) {
+            newParent = childRight;
+          }
+        }
+
+        //If either of the children has higher (smaller) priority, swap and continue cascading
+        if (newParent != node) {
+          //Move new parent to its new index.  node will be moved once, at the end
+          //Doing it this way is one less assignment operation than calling Swap()
+          _nodes[finalQueueIndex] = newParent;
+
+          int temp = newParent.QueueIndex;
+          newParent.QueueIndex = finalQueueIndex;
+          finalQueueIndex = temp;
+        } else {
+          //See note above
+          node.QueueIndex = finalQueueIndex;
+          _nodes[finalQueueIndex] = node;
+          break;
+        }
+      }
+    }
+
+    /// <summary>
+    /// Returns true if 'higher' has higher priority than 'lower', false otherwise.
+    /// Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false
+    /// </summary>
+#if AGGRESSIVE_INLINING
+        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
+#endif
+    private bool HasHigherPriority(EventQueueNode higher, EventQueueNode lower) {
+      return (higher.PrimaryPriority < lower.PrimaryPriority ||
+          (higher.PrimaryPriority == lower.PrimaryPriority
+            && (higher.SecondaryPriority < lower.SecondaryPriority ||
+            (higher.SecondaryPriority == lower.SecondaryPriority
+              && higher.InsertionIndex < lower.InsertionIndex))));
+    }
+
+    /// <summary>
+    /// Removes the head of the queue (node with highest priority; ties are broken by order of insertion), and returns it.  O(log n)
+    /// </summary>
+    public EventQueueNode Dequeue() {
+      EventQueueNode returnMe = _nodes[1];
+      Remove(returnMe);
+      return returnMe;
+    }
+
+    /// <summary>
+    /// Returns the head of the queue, without removing it (use Dequeue() for that).  O(1)
+    /// </summary>
+    public EventQueueNode First {
+      get {
+        return _nodes[1];
+      }
+    }
+
+    /// <summary>
+    /// This method must be called on a node every time its priority changes while it is in the queue.  
+    /// <b>Forgetting to call this method will result in a corrupted queue!</b>
+    /// O(log n)
+    /// </summary>
+#if AGGRESSIVE_INLINING
+        [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
+#endif
+    public void UpdatePriority(EventQueueNode node, DateTime primaryPriority, int secondaryPriority) {
+      node.PrimaryPriority = primaryPriority;
+      node.SecondaryPriority = secondaryPriority;
+      OnNodeUpdated(node);
+    }
+
+    internal void OnNodeUpdated(EventQueueNode node) {
+      //Bubble the updated node up or down as appropriate
+      int parentIndex = node.QueueIndex / 2;
+      EventQueueNode parentNode = _nodes[parentIndex];
+
+      if (parentIndex > 0 && HasHigherPriority(node, parentNode)) {
+        CascadeUp(node);
+      } else {
+        //Note that CascadeDown will be called if parentNode == node (that is, node is the root)
+        CascadeDown(node);
+      }
+    }
+
+    /// <summary>
+    /// Removes a node from the queue.  Note that the node does not need to be the head of the queue.  O(log n)
+    /// </summary>
+    public void Remove(EventQueueNode node) {
+      if (!Contains(node)) {
+        return;
+      }
+      if (_numNodes <= 1) {
+        _nodes[1] = null;
+        _numNodes = 0;
+        return;
+      }
+
+      //Make sure the node is the last node in the queue
+      bool wasSwapped = false;
+      EventQueueNode formerLastNode = _nodes[_numNodes];
+      if (node.QueueIndex != _numNodes) {
+        //Swap the node with the last node
+        Swap(node, formerLastNode);
+        wasSwapped = true;
+      }
+
+      _numNodes--;
+      _nodes[node.QueueIndex] = null;
+
+      if (wasSwapped) {
+        //Now bubble formerLastNode (which is no longer the last node) up or down as appropriate
+        OnNodeUpdated(formerLastNode);
+      }
+    }
+
+    public IEnumerator<EventQueueNode> GetEnumerator() {
+      for (int i = 1; i <= _numNodes; i++)
+        yield return _nodes[i];
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+    /// <summary>
+    /// <b>Should not be called in production code.</b>
+    /// Checks to make sure the queue is still in a valid state.  Used for testing/debugging the queue.
+    /// </summary>
+    public bool IsValidQueue() {
+      for (int i = 1; i < _nodes.Length; i++) {
+        if (_nodes[i] != null) {
+          int childLeftIndex = 2 * i;
+          if (childLeftIndex < _nodes.Length && _nodes[childLeftIndex] != null && HasHigherPriority(_nodes[childLeftIndex], _nodes[i]))
+            return false;
+
+          int childRightIndex = childLeftIndex + 1;
+          if (childRightIndex < _nodes.Length && _nodes[childRightIndex] != null && HasHigherPriority(_nodes[childRightIndex], _nodes[i]))
+            return false;
+        }
+      }
+      return true;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Collections/EventQueueNode.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Collections/EventQueueNode.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Collections/EventQueueNode.cs	(revision 15973)
@@ -0,0 +1,40 @@
+﻿using System;
+
+namespace SimSharp {
+  public class EventQueueNode {
+    /// <summary>
+    /// The Priority to insert this node at. Must be set BEFORE adding a node to the queue.
+    /// </summary>
+    public DateTime PrimaryPriority { get; set; }
+
+    /// <summary>
+    /// An integer priority that will be used to distinguish nodes with the same
+    /// <see cref="PrimaryPriority"/> and before the <see cref="InsertionIndex"/> is used.
+    /// Must be set BEFORE adding a node to the queue.
+    /// </summary>
+    /// <remarks>
+    /// A lower value means higher priority, thus int.MinValue has highest priority.
+    /// </remarks>
+    public int SecondaryPriority { get; set; }
+
+    /// <summary>
+    /// The event that is associated with this node.
+    /// </summary>
+    public Event Event { get; set; }
+
+    /// <summary>
+    /// <b>Used by the priority queue - do not edit this value.</b>
+    /// Represents the order the node was inserted in
+    /// </summary>
+    /// <remarks>
+    /// This is unique among all inserted nodes and thus represents the third and final priority.
+    /// </remarks>
+    public long InsertionIndex { get; set; }
+
+    /// <summary>
+    /// <b>Used by the priority queue - do not edit this value.</b>
+    /// Represents the current position in the queue
+    /// </summary>
+    public int QueueIndex { get; set; }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/ActiveObject.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/ActiveObject.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/ActiveObject.cs	(revision 15973)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+namespace SimSharp {
+  public abstract class ActiveObject<T> where T : Environment {
+    protected T Environment { get; private set; }
+
+    protected ActiveObject(T environment) {
+      Environment = environment;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Environment.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Environment.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Environment.cs	(revision 15973)
@@ -0,0 +1,420 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+namespace SimSharp {
+  /// <summary>
+  /// Environments hold the event queues, schedule and process events.
+  /// </summary>
+  public class Environment {
+    private const int InitialMaxEvents = 1024;
+    private object locker = new object();
+
+    /// <summary>
+    /// Describes the number of seconds that a logical step of 1 in the *D-API takes.
+    /// </summary>
+    protected double DefaultTimeStepSeconds { get; private set; }
+
+    /// <summary>
+    /// Calculates the logical date of the simulation by the amount of default steps
+    /// that have passed.
+    /// </summary>
+    public double NowD {
+      get { return (Now - StartDate).TotalSeconds / DefaultTimeStepSeconds; }
+    }
+
+    /// <summary>
+    /// The current simulation time as a calendar date.
+    /// </summary>
+    public DateTime Now { get; protected set; }
+
+    /// <summary>
+    /// The calendar date when the simulation started. This defaults to 1970-1-1 if
+    /// no other date has been specified in the overloaded constructor.
+    /// </summary>
+    public DateTime StartDate { get; protected set; }
+
+    /// <summary>
+    /// The random number generator that is to be used in all events in
+    /// order to produce reproducible results.
+    /// </summary>
+    protected IRandom Random { get; set; }
+
+    protected EventQueue ScheduleQ;
+    public Process ActiveProcess { get; set; }
+
+    public TextWriter Logger { get; set; }
+    public int ProcessedEvents { get; protected set; }
+
+    public Environment() : this(new DateTime(1970, 1, 1)) { }
+    public Environment(TimeSpan? defaultStep) : this(new DateTime(1970, 1, 1), defaultStep) { }
+    public Environment(int randomSeed, TimeSpan? defaultStep = null) : this(new DateTime(1970, 1, 1), randomSeed, defaultStep) { }
+    public Environment(DateTime initialDateTime, TimeSpan? defaultStep = null) {
+      DefaultTimeStepSeconds = (defaultStep ?? TimeSpan.FromSeconds(1)).Duration().TotalSeconds;
+      StartDate = initialDateTime;
+      Now = initialDateTime;
+      Random = new SystemRandom();
+      ScheduleQ = new EventQueue(InitialMaxEvents);
+      Logger = Console.Out;
+    }
+    public Environment(DateTime initialDateTime, int randomSeed, TimeSpan? defaultStep = null) {
+      DefaultTimeStepSeconds = (defaultStep ?? TimeSpan.FromSeconds(1)).Duration().TotalSeconds;
+      StartDate = initialDateTime;
+      Now = initialDateTime;
+      Random = new SystemRandom(randomSeed);
+      ScheduleQ = new EventQueue(InitialMaxEvents);
+      Logger = Console.Out;
+    }
+
+    public double ToDouble(TimeSpan span) {
+      return span.TotalSeconds / DefaultTimeStepSeconds;
+    }
+
+    public TimeSpan ToTimeSpan(double span) {
+      return TimeSpan.FromSeconds(DefaultTimeStepSeconds * span);
+    }
+
+    /// <summary>
+    /// Creates a new process from an event generator. The process is automatically
+    /// scheduled to be started at the current simulation time.
+    /// </summary>
+    /// <param name="generator">The generator function that represents the process.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param>
+    /// <returns>The scheduled process that was created.</returns>
+    public Process Process(IEnumerable<Event> generator, int priority = 0) {
+      return new Process(this, generator, priority);
+    }
+
+    /// <summary>
+    /// Creates and returns a new timeout.
+    /// </summary>
+    /// <param name="delay">The time after which the timeout is fired.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param>
+    /// <returns>The scheduled timeout event that was created.</returns>
+    public Timeout TimeoutD(double delay, int priority = 0) {
+      return Timeout(TimeSpan.FromSeconds(DefaultTimeStepSeconds * delay), priority);
+    }
+
+    /// <summary>
+    /// Creates and returns a new timeout.
+    /// </summary>
+    /// <param name="delay">The time after which the timeout is fired.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param>
+    /// <returns>The scheduled timeout event that was created.</returns>
+    public Timeout Timeout(TimeSpan delay, int priority = 0) {
+      return new Timeout(this, delay, priority: priority);
+    }
+
+    public virtual void Reset(int randomSeed) {
+      ProcessedEvents = 0;
+      Now = StartDate;
+      Random = new SystemRandom(randomSeed);
+      ScheduleQ = new EventQueue(InitialMaxEvents);
+    }
+
+    public virtual void ScheduleD(double delay, Event @event) {
+      Schedule(TimeSpan.FromSeconds(DefaultTimeStepSeconds * delay), @event);
+    }
+
+    /// <summary>
+    /// Schedules an event to occur at the same simulation time as the call was made.
+    /// </summary>
+    /// <param name="event">The event that should be scheduled.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param></param>
+    public virtual void Schedule(Event @event, int priority = 0) {
+      lock (locker) {
+        DoSchedule(Now, @event, priority);
+      }
+    }
+
+    /// <summary>
+    /// Schedules an event to occur after a certain (positive) delay.
+    /// </summary>
+    /// <exception cref="ArgumentException">
+    /// Thrown when <paramref name="delay"/> is negative.
+    /// </exception>
+    /// <param name="delay">The (positive) delay after which the event should be fired.</param>
+    /// <param name="event">The event that should be scheduled.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param>
+    public virtual void Schedule(TimeSpan delay, Event @event, int priority = 0) {
+      if (delay < TimeSpan.Zero)
+        throw new ArgumentException("Negative delays are not allowed in Schedule(TimeSpan, Event).");
+      lock (locker) {
+        var eventTime = Now + delay;
+        DoSchedule(eventTime, @event, priority);
+      }
+    }
+
+    protected virtual EventQueueNode DoSchedule(DateTime date, Event @event, int priority = 0) {
+      if (ScheduleQ.MaxSize == ScheduleQ.Count) {
+        // the capacity has to be adjusted, there are more events in the queue than anticipated
+        var oldSchedule = ScheduleQ;
+        ScheduleQ = new EventQueue(ScheduleQ.MaxSize * 2);
+        foreach (var e in oldSchedule) ScheduleQ.Enqueue(e.PrimaryPriority, e.Event, e.SecondaryPriority);
+      }
+      return ScheduleQ.Enqueue(date, @event, priority);
+    }
+
+    public virtual object RunD(double? until = null) {
+      if (!until.HasValue) return Run();
+      return Run(Now + TimeSpan.FromSeconds(DefaultTimeStepSeconds * until.Value));
+    }
+
+    public virtual object Run(TimeSpan span) {
+      return Run(Now + span);
+    }
+
+    public virtual object Run(DateTime until) {
+      if (until <= Now) throw new InvalidOperationException("Simulation end date must lie in the future.");
+      var stopEvent = new Event(this);
+      var node = DoSchedule(until, stopEvent);
+      // stop event is always the first to execute at the given time
+      node.InsertionIndex = -1;
+      ScheduleQ.OnNodeUpdated(node);
+      return Run(stopEvent);
+    }
+
+    public virtual object Run(Event stopEvent = null) {
+      if (stopEvent != null) {
+        if (stopEvent.IsProcessed) return stopEvent.Value;
+        stopEvent.AddCallback(StopSimulation);
+      }
+
+      try {
+        var stop = ScheduleQ.Count == 0;
+        while (!stop) {
+          Step();
+          ProcessedEvents++;
+          lock (locker) {
+            stop = ScheduleQ.Count == 0;
+          }
+        }
+      } catch (StopSimulationException e) { return e.Value; }
+      if (stopEvent == null) return null;
+      if (!stopEvent.IsTriggered) throw new InvalidOperationException("No scheduled events left but \"until\" event was not triggered.");
+      return stopEvent.Value;
+    }
+
+    public virtual void Step() {
+      Event evt;
+      lock (locker) {
+        var next = ScheduleQ.Dequeue();
+        Now = next.PrimaryPriority;
+        evt = next.Event;
+      }
+      evt.Process();
+    }
+
+    public virtual double PeekD() {
+      lock (locker) {
+        if (ScheduleQ.Count == 0) return double.MaxValue;
+        return (Peek() - StartDate).TotalSeconds / DefaultTimeStepSeconds;
+      }
+    }
+
+    public virtual DateTime Peek() {
+      lock (locker) {
+        return ScheduleQ.Count > 0 ? ScheduleQ.First.PrimaryPriority : DateTime.MaxValue;
+      }
+    }
+
+    protected virtual void StopSimulation(Event @event) {
+      throw new StopSimulationException(@event.Value);
+    }
+
+    public virtual void Log(string message, params object[] args) {
+      if (Logger != null)
+        Logger.WriteLine(message, args);
+    }
+
+    #region Random number distributions
+    protected static readonly double NormalMagicConst = 4 * Math.Exp(-0.5) / Math.Sqrt(2.0);
+
+    public double RandUniform(double a, double b) {
+      return a + (b - a) * Random.NextDouble();
+    }
+
+    public TimeSpan RandUniform(TimeSpan a, TimeSpan b) {
+      return TimeSpan.FromSeconds(RandUniform(a.TotalSeconds, b.TotalSeconds));
+    }
+
+    public double RandTriangular(double low, double high) {
+      var u = Random.NextDouble();
+      if (u > 0.5)
+        return high + (low - high) * Math.Sqrt(((1.0 - u) / 2));
+      return low + (high - low) * Math.Sqrt(u / 2);
+    }
+
+    public TimeSpan RandTriangular(TimeSpan low, TimeSpan high) {
+      return TimeSpan.FromSeconds(RandTriangular(low.TotalSeconds, high.TotalSeconds));
+    }
+
+    public double RandTriangular(double low, double high, double mode) {
+      var u = Random.NextDouble();
+      var c = (mode - low) / (high - low);
+      if (u > c)
+        return high + (low - high) * Math.Sqrt(((1.0 - u) * (1.0 - c)));
+      return low + (high - low) * Math.Sqrt(u * c);
+    }
+
+    public TimeSpan RandTriangular(TimeSpan low, TimeSpan high, TimeSpan mode) {
+      return TimeSpan.FromSeconds(RandTriangular(low.TotalSeconds, high.TotalSeconds, mode.TotalSeconds));
+    }
+
+    /// <summary>
+    /// Returns a number that is exponentially distributed given a certain mean.
+    /// </summary>
+    /// <remarks>
+    /// Unlike in other APIs here the mean should be given and not the lambda parameter.
+    /// </remarks>
+    /// <param name="mean">The mean(!) of the distribution is 1 / lambda.</param>
+    /// <returns>A number that is exponentially distributed</returns>
+    public double RandExponential(double mean) {
+      return -Math.Log(1 - Random.NextDouble()) * mean;
+    }
+
+    /// <summary>
+    /// Returns a timespan that is exponentially distributed given a certain mean.
+    /// </summary>
+    /// <remarks>
+    /// Unlike in other APIs here the mean should be given and not the lambda parameter.
+    /// </remarks>
+    /// <param name="mean">The mean(!) of the distribution is 1 / lambda.</param>
+    /// <returns>A number that is exponentially distributed</returns>
+    public TimeSpan RandExponential(TimeSpan mean) {
+      return TimeSpan.FromSeconds(RandExponential(mean.TotalSeconds));
+    }
+
+    public double RandNormal(double mu, double sigma) {
+      double z, zz, u1, u2;
+      do {
+        u1 = Random.NextDouble();
+        u2 = 1 - Random.NextDouble();
+        z = NormalMagicConst * (u1 - 0.5) / u2;
+        zz = z * z / 4.0;
+      } while (zz > -Math.Log(u2));
+      return mu + z * sigma;
+    }
+
+    public TimeSpan RandNormal(TimeSpan mu, TimeSpan sigma) {
+      return TimeSpan.FromSeconds(RandNormal(mu.TotalSeconds, sigma.TotalSeconds));
+    }
+
+    public double RandNormalPositive(double mu, double sigma) {
+      double val;
+      do {
+        val = RandNormal(mu, sigma);
+      } while (val <= 0);
+      return val;
+    }
+
+    public TimeSpan RandNormalPositive(TimeSpan mu, TimeSpan sigma) {
+      return TimeSpan.FromSeconds(RandNormalPositive(mu.TotalSeconds, sigma.TotalSeconds));
+    }
+
+    public double RandNormalNegative(double mu, double sigma) {
+      double val;
+      do {
+        val = RandNormal(mu, sigma);
+      } while (val >= 0);
+      return val;
+    }
+
+    public TimeSpan RandNormalNegative(TimeSpan mu, TimeSpan sigma) {
+      return TimeSpan.FromSeconds(RandNormalNegative(mu.TotalSeconds, sigma.TotalSeconds));
+    }
+
+    public double RandLogNormal(double mu, double sigma) {
+      return Math.Exp(RandNormal(mu, sigma));
+    }
+
+    public TimeSpan RandLogNormal(TimeSpan mu, TimeSpan sigma) {
+      return TimeSpan.FromSeconds(RandLogNormal(mu.TotalSeconds, sigma.TotalSeconds));
+    }
+
+    public double RandCauchy(double x0, double gamma) {
+      return x0 + gamma * Math.Tan(Math.PI * (Random.NextDouble() - 0.5));
+    }
+
+    public TimeSpan RandCauchy(TimeSpan x0, TimeSpan gamma) {
+      return TimeSpan.FromSeconds(RandCauchy(x0.TotalSeconds, gamma.TotalSeconds));
+    }
+
+    public double RandWeibull(double alpha, double beta) {
+      return alpha * Math.Pow(-Math.Log(1 - Random.NextDouble()), 1 / beta);
+    }
+
+    public TimeSpan RandWeibull(TimeSpan mu, TimeSpan sigma) {
+      return TimeSpan.FromSeconds(RandWeibull(mu.TotalSeconds, sigma.TotalSeconds));
+    }
+    #endregion
+
+    #region Random timeouts
+    public Timeout TimeoutUniformD(double a, double b) {
+      return new Timeout(this, ToTimeSpan(RandUniform(a, b)));
+    }
+
+    public Timeout TimeoutUniform(TimeSpan a, TimeSpan b) {
+      return new Timeout(this, RandUniform(a, b));
+    }
+
+    public Timeout TimeoutTriangularD(double low, double high) {
+      return new Timeout(this, ToTimeSpan(RandTriangular(low, high)));
+    }
+
+    public Timeout TimeoutTriangular(TimeSpan low, TimeSpan high) {
+      return new Timeout(this, RandTriangular(low, high));
+    }
+
+    public Timeout TimeoutTriangularD(double low, double high, double mode) {
+      return new Timeout(this, ToTimeSpan(RandTriangular(low, high, mode)));
+    }
+
+    public Timeout TimeoutTriangular(TimeSpan low, TimeSpan high, TimeSpan mode) {
+      return new Timeout(this, RandTriangular(low, high, mode));
+    }
+
+    public Timeout TimeoutExponentialD(double mean) {
+      return new Timeout(this, ToTimeSpan(RandExponential(mean)));
+    }
+
+    public Timeout TimeoutExponential(TimeSpan mean) {
+      return new Timeout(this, RandExponential(mean));
+    }
+
+    public Timeout TimeoutNormalPositiveD(double mu, double sigma) {
+      return new Timeout(this, ToTimeSpan(RandNormalPositive(mu, sigma)));
+    }
+
+    public Timeout TimeoutNormalPositive(TimeSpan mu, TimeSpan sigma) {
+      return new Timeout(this, RandNormalPositive(mu, sigma));
+    }
+
+    public Timeout TimeoutLogNormalD(double mu, double sigma) {
+      return new Timeout(this, ToTimeSpan(RandLogNormal(mu, sigma)));
+    }
+
+    public Timeout TimeoutLogNormal(TimeSpan mu, TimeSpan sigma) {
+      return new Timeout(this, RandLogNormal(mu, sigma));
+    }
+    #endregion
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/AllOf.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/AllOf.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/AllOf.cs	(revision 15973)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System.Collections.Generic;
+
+namespace SimSharp {
+  public class AllOf : Condition {
+    public AllOf(Environment environment, params Event[] events) : base(environment, events) { }
+    public AllOf(Environment environment, IEnumerable<Event> events) : base(environment, events) { }
+
+    protected override bool Evaluate() {
+      return FiredEvents.Count == Events.Count;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/AnyOf.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/AnyOf.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/AnyOf.cs	(revision 15973)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System.Collections.Generic;
+
+namespace SimSharp {
+  public class AnyOf : Condition {
+    public AnyOf(Environment environment, params Event[] events) : base(environment, events) { }
+    public AnyOf(Environment environment, IEnumerable<Event> events) : base(environment, events) { }
+
+    protected override bool Evaluate() {
+      return FiredEvents.Count > 0 || Events.Count == 0;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Condition.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Condition.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Condition.cs	(revision 15973)
@@ -0,0 +1,97 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+
+namespace SimSharp {
+  /// <summary>
+  /// Conditions are events that execute when any or all of its sub-events are executed.
+  /// </summary>
+  public abstract class Condition : Event {
+
+    public new OrderedDictionary Value {
+      get { return (OrderedDictionary)base.Value; }
+      set { base.Value = value; }
+    }
+
+    protected List<Event> Events { get; private set; }
+
+    protected List<Event> FiredEvents { get; private set; }
+
+    protected Condition(Environment environment, params Event[] events)
+      : this(environment, (IEnumerable<Event>)events) { }
+    protected Condition(Environment environment, IEnumerable<Event> events)
+      : base(environment) {
+      CallbackList.Add(CollectValues);
+      Events = new List<Event>(events);
+      FiredEvents = new List<Event>();
+
+      foreach (var @event in Events) {
+        if (Environment != @event.Environment)
+          throw new ArgumentException("It is not allowed to mix events from different environments");
+        if (@event.IsProcessed) Check(@event);
+        else @event.AddCallback(Check);
+      }
+
+      if (IsAlive && Evaluate())
+        Succeed();
+    }
+
+    protected void Check(Event @event) {
+      if (IsTriggered || IsProcessed) {
+        if (!@event.IsOk) throw new InvalidOperationException(
+@"Errors that happen after the condition has been triggered will not be
+handled by the condition and cause the simulation to crash.");
+        return;
+      }
+      FiredEvents.Add(@event);
+
+      if (!@event.IsOk)
+        Fail(@event.Value);
+      else if (Evaluate()) {
+        Succeed();
+      }
+    }
+
+    protected virtual IEnumerable<KeyValuePair<object, object>> GetValues() {
+      var values = new List<KeyValuePair<object, object>>();
+      foreach (var e in Events) {
+        var condition = e as Condition;
+        if (condition != null) {
+          values.AddRange(condition.GetValues());
+        } else if (e.IsProcessed) {
+          values.Add(new KeyValuePair<object, object>(e, e.Value));
+        }
+      }
+      return values;
+    }
+
+    protected virtual void CollectValues(Event @event) {
+      if (@event.IsOk) {
+        var value = new OrderedDictionary();
+        foreach (var v in GetValues())
+          value.Add(v.Key, v.Value);
+        Value = value;
+      }
+    }
+
+    protected abstract bool Evaluate();
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Event.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Event.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Event.cs	(revision 15973)
@@ -0,0 +1,200 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace SimSharp {
+  /// <summary>
+  /// The base class for all events in SimSharp.
+  /// An event can be in one of three states at any time:
+  ///  - Alive: The event object exists, but is neither scheduled to
+  ///           be executed, nor is it already executed.
+  ///  - Triggered: The event has been put in the event queue and is
+  ///               going to be executed.
+  ///  - Processed: The event has been executed.
+  /// 
+  /// Usually, the event is alive until its Trigger, Succeed, or Fail
+  /// method have been called. Then it becomes triggered. When the
+  /// Environment progresses to the event and executes its callbacks
+  /// the event becomes processed.
+  /// </summary>
+  public class Event {
+    protected internal Environment Environment { get; private set; }
+    protected List<Action<Event>> CallbackList { get; set; }
+
+    /// <summary>
+    /// The value property can be used to return arbitrary data from a
+    /// process or an event. It also represents the interrupt cause to
+    /// a process.
+    /// </summary>
+    public object Value { get; protected set; }
+
+    /// <summary>
+    /// The IsOk flag indicates if the event succeeded or failed. An event
+    /// that failed indicates to a waiting process that the action could
+    /// not be performed and that the faulting situation must be handled.
+    /// Typically, interrupting a process sets the IsOk flag to false.
+    /// </summary>
+    public bool IsOk { get; protected set; }
+    /// <summary>
+    /// An event is alive when it is not triggered and not processed. That
+    /// is, when it exists in memory without being scheduled. Typically,
+    /// a Process is alive until its last event has been processed and the
+    /// process event itself is to be processed.
+    /// </summary>
+    public bool IsAlive { get { return !IsTriggered && !IsProcessed; } }
+    /// <summary>
+    /// An event becomes processed when its callbacks have been executed.
+    /// Events may only be processed once and an exception will be thrown
+    /// if they are to be processed multiple times.
+    /// </summary>
+    public bool IsProcessed { get; protected set; }
+    /// <summary>
+    /// An event becomes triggered when it is placed into the event queue.
+    /// That is, when its callbacks are going to be executed.
+    /// An even that is triggered may later not be failed or retriggered.
+    /// </summary>
+    public bool IsTriggered { get; protected set; }
+
+    public Event(Environment environment) {
+      Environment = environment;
+      CallbackList = new List<Action<Event>>();
+    }
+
+    /// <summary>
+    /// This method schedules the event right now. It takes the IsOk state
+    /// and uses the <see cref="Value"/> of the given <paramref name="@event"/>.
+    /// Thus if the given event fails, this event will also be triggered as
+    /// failing.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">
+    /// Thrown when the event has already been triggered.
+    /// </exception>
+    /// <remarks>
+    /// The signature of this method allows it to be used as a callback.
+    /// </remarks>
+    /// <param name="event">The event that triggers this event.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param>
+    public virtual void Trigger(Event @event, int priority = 0) {
+      if (IsTriggered)
+        throw new InvalidOperationException("Event has already been triggered.");
+      IsOk = @event.IsOk;
+      Value = @event.Value;
+      IsTriggered = true;
+      Environment.Schedule(this, priority);
+    }
+
+    /// <summary>
+    /// This method schedules the event right now. It sets IsOk state to true
+    /// and optionally uses also the value. If urgent is given, the event may
+    /// be scheduled as urgent. Urgent events are placed in a separate event
+    /// queue. The callbacks of urgent events are executed before normal events.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">
+    /// Thrown when the event has already been triggered.
+    /// </exception>
+    /// <param name="value">The value that the event should use.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param>
+    public virtual void Succeed(object value = null, int priority = 0) {
+      if (IsTriggered)
+        throw new InvalidOperationException("Event has already been triggered.");
+      IsOk = true;
+      Value = value;
+      IsTriggered = true;
+      Environment.Schedule(this, priority);
+    }
+
+    /// <summary>
+    /// This method schedules the event right now. It sets IsOk state to false
+    /// and optionally uses also the value. If urgent is given, the event may
+    /// be scheduled as urgent. Urgent events are placed in a separate event
+    /// queue. The callbacks of urgent events are executed before normal events.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">
+    /// Thrown when the event has already been triggered.
+    /// </exception>
+    /// <param name="value">The value that the event should use.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param>
+    public virtual void Fail(object value = null, int priority = 0) {
+      if (IsTriggered)
+        throw new InvalidOperationException("Event has already been triggered.");
+      IsOk = false;
+      Value = value;
+      IsTriggered = true;
+      Environment.Schedule(this, priority);
+    }
+
+    /// <summary>
+    /// This method adds a callback to the list of callbacks. Callbacks will be
+    /// executed in the order they have been added.
+    /// </summary>
+    /// <param name="callback">The callback to execute when the event is being
+    /// processed.</param>
+    public virtual void AddCallback(Action<Event> callback) {
+      if (IsProcessed) throw new InvalidOperationException("Event is already processed.");
+      CallbackList.Add(callback);
+    }
+
+    /// <summary>
+    /// This method adds a range of callbacks to the list of callbacks. Callbacks
+    /// will be executed in the order they have been added.
+    /// </summary>
+    /// <param name="callbacks">The callbacks to execute when the event is being
+    /// processed.</param>
+    public virtual void AddCallbacks(IEnumerable<Action<Event>> callbacks) {
+      if (IsProcessed) throw new InvalidOperationException("Event is already processed.");
+      CallbackList.AddRange(callbacks);
+    }
+
+    /// <summary>
+    /// This method removes a callback to the list of callbacks.
+    /// </summary>
+    /// <remarks>
+    /// It is not checked if the callback has actually been added before and
+    /// no exception will be thrown if it had not been present.
+    /// </remarks>
+    /// <param name="callback">The callback to remove.</param>
+    public virtual void RemoveCallback(Action<Event> callback) {
+      if (IsProcessed) throw new InvalidOperationException("Event is already processed.");
+      CallbackList.Remove(callback);
+    }
+
+    /// <summary>
+    /// This method processes the event, that is, it calls all the callbacks.
+    /// When it finishes it will be marked IsProcessed and cannot be processed
+    /// again.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">When the event has already
+    /// been processed.</exception>
+    public virtual void Process() {
+      if (IsProcessed) throw new InvalidOperationException("Event has already been processed.");
+      IsProcessed = true;
+      foreach (var callback in CallbackList)
+        callback(this);
+      CallbackList = null;
+    }
+
+    public static Condition operator &(Event event1, Event event2) {
+      return new AllOf(event1.Environment, event1, event2);
+    }
+    public static Condition operator |(Event event1, Event event2) {
+      return new AnyOf(event1.Environment, event1, event2);
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Process.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Process.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Process.cs	(revision 15973)
@@ -0,0 +1,167 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace SimSharp {
+  /// <summary>
+  /// A Process handles the iteration of events. Processes may define steps that
+  /// a certain entity in the simulation has to perform. Each time the process
+  /// should wait it yields an event and will be resumed when that event is processed.
+  /// </summary>
+  /// <remarks>
+  /// Since an iterator method does not have access to its process, the method can
+  /// retrieve the associated Process through the ActiveProcess property of the
+  /// environment. Each Process sets and resets that property during Resume.
+  /// </remarks>
+  public class Process : Event {
+    private readonly IEnumerator<Event> generator;
+    private Event target;
+    /// <summary>
+    /// Target is the event that is expected to be executed next in the process.
+    /// </summary>
+    public Event Target {
+      get { return target; }
+      protected set { target = value; }
+    }
+
+    /// <summary>
+    /// Sets up a new process.
+    /// The process places an initialize event into the event queue which starts
+    /// the process by retrieving events from the generator.
+    /// </summary>
+    /// <param name="environment">The environment in which the process lives.</param>
+    /// <param name="generator">The generator function of the process.</param>
+    /// <param name="priority">The priority if multiple processes are started at the same time.</param>
+    public Process(Environment environment, IEnumerable<Event> generator, int priority = 0)
+      : base(environment) {
+      this.generator = generator.GetEnumerator();
+      IsOk = true;
+      target = new Initialize(environment, this, priority);
+    }
+
+    /// <summary>
+    /// This interrupts a process and causes the IsOk flag to be set to false.
+    /// If a process is interrupted the iterator method needs to call HandleFault()
+    /// before continuing to yield further events.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">This is thrown in three conditions:
+    ///  - If the process has already been triggered.
+    ///  - If the process attempts to interrupt itself.
+    ///  - If the process continues to yield events despite being faulted.</exception>
+    /// <param name="cause">The cause of the interrupt.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param>
+    public virtual void Interrupt(object cause = null, int priority = 0) {
+      if (IsTriggered) throw new InvalidOperationException("The process has terminated and cannot be interrupted.");
+      if (Environment.ActiveProcess == this) throw new InvalidOperationException("A process is not allowed to interrupt itself.");
+
+      var interruptEvent = new Event(Environment);
+      interruptEvent.AddCallback(Resume);
+      interruptEvent.Fail(cause, priority);
+
+      if (Target != null)
+        Target.RemoveCallback(Resume);
+    }
+
+    protected virtual void Resume(Event @event) {
+      Environment.ActiveProcess = this;
+      while (true) {
+        if (@event.IsOk) {
+          if (generator.MoveNext()) {
+            if (IsTriggered) {
+              // the generator called e.g. Environment.ActiveProcess.Fail
+              Environment.ActiveProcess = null;
+              return;
+            }
+            if (!ProceedToEvent()) {
+              @event = target;
+              continue;
+            } else break;
+          } else if (!IsTriggered) {
+            Succeed(@event.Value);
+            break;
+          } else break;
+        } else {
+          /* Fault handling differs from SimPy as in .NET it is not possible to inject an
+         * exception into an enumerator and it is impossible to put a yield return inside
+         * a try-catch block. In SimSharp the Process will set IsOk and will then move to
+         * the next yield in the generator. However, if after this move IsOk is still false
+         * we know that the error was not handled. It is assumed the error is handled if
+         * HandleFault() is called on the environment's ActiveProcess which will reset the
+         * flag. */
+          IsOk = false;
+          Value = @event.Value;
+
+          if (generator.MoveNext()) {
+            if (IsTriggered) {
+              // the generator called e.g. Environment.ActiveProcess.Fail
+              Environment.ActiveProcess = null;
+              return;
+            }
+            // if we move next, but IsOk is still false
+            if (!IsOk) throw new InvalidOperationException("The process did not react to being faulted.");
+            // otherwise HandleFault was called and the fault was handled
+            if (ProceedToEvent()) break;
+          } else if (!IsTriggered) {
+            if (!IsOk) Fail(@event.Value);
+            else Succeed(@event.Value);
+            break;
+          } else break;
+        }
+      }
+      Environment.ActiveProcess = null;
+    }
+
+    protected virtual bool ProceedToEvent() {
+      target = generator.Current;
+      Value = target.Value;
+      if (target.IsProcessed) return false;
+      target.AddCallback(Resume);
+      return true;
+    }
+
+    /// <summary>
+    /// This method must be called to reset the IsOk flag of the process back to true.
+    /// The IsOk flag may be set to false if the process waited on an event that failed.
+    /// </summary>
+    /// <remarks>
+    /// In SimPy a faulting process would throw an exception which is then catched and
+    /// chained. In SimSharp catching exceptions from a yield is not possible as a yield
+    /// return statement may not throw an exception.
+    /// If a processes faulted the Value property may indicate a cause for the fault.
+    /// </remarks>
+    /// <returns>True if a faulting situation needs to be handled, false if the process
+    /// is okay and the last yielded event succeeded.</returns>
+    public virtual bool HandleFault() {
+      if (IsOk) return false;
+      IsOk = true;
+      return true;
+    }
+
+    private class Initialize : Event {
+      public Initialize(Environment environment, Process process, int priority)
+        : base(environment) {
+        CallbackList.Add(process.Resume);
+        IsOk = true;
+        IsTriggered = true;
+        environment.Schedule(this, priority);
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Timeout.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Timeout.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Events/Timeout.cs	(revision 15973)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  /// <summary>
+  /// Timeouts are simple events that are executed after a certain timespan has passed.
+  /// </summary>
+  public sealed class Timeout : Event {
+    /// <summary>
+    /// A timeout is an event that is executed after a certain timespan has passed.
+    /// </summary>
+    /// <remarks>
+    /// Timeout events are scheduled when they are created. They are always triggered
+    /// when they are created.
+    /// </remarks>
+    /// <param name="environment">The environment in which it is scheduled.</param>
+    /// <param name="delay">The timespan for the timeout.</param>
+    /// <param name="value">The value of the timeout.</param>
+    /// <param name="isOk">Whether the timeout should succeed or fail.</param>
+    /// <param name="priority">The priority to rank events at the same time (smaller value = higher priority).</param>
+    public Timeout(Environment environment, TimeSpan delay, object value = null, bool isOk = true, int priority = 0)
+      : base(environment) {
+      IsOk = isOk;
+      Value = value;
+      IsTriggered = true;
+      environment.Schedule(delay, this, priority);
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Exceptions/EmptyScheduleException.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Exceptions/EmptyScheduleException.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Exceptions/EmptyScheduleException.cs	(revision 15973)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  /// <summary>
+  /// An exception that is thrown to stop the simulation.
+  /// </summary>
+  public class StopSimulationException : Exception {
+    public object Value { get; private set; }
+    
+    public StopSimulationException(object value) {
+      Value = value;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Preempted.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Preempted.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Preempted.cs	(revision 15973)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public sealed class Preempted {
+    public Process By { get; private set; }
+    public DateTime UsageSince { get; private set; }
+
+    public Preempted(Process by, DateTime usageSince) {
+      By = by;
+      UsageSince = usageSince;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Container.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Container.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Container.cs	(revision 15973)
@@ -0,0 +1,93 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace SimSharp {
+  public class Container {
+    public double Level { get; protected set; }
+    public double Capacity { get; protected set; }
+    protected Environment Environment { get; private set; }
+
+    protected Queue<ContainerPut> PutQueue { get; private set; }
+    protected Queue<ContainerGet> GetQueue { get; private set; }
+
+    public Container(Environment environment, double capacity = double.MaxValue, double initial = 0) {
+      if (capacity <= 0) throw new ArgumentException("Capacity must be > 0", "capacity");
+      if (initial < 0) throw new ArgumentException("Initial must be >= 0", "initial");
+      if (initial > capacity) throw new ArgumentException("Initial must be <= capacity", "initial");
+      Environment = environment;
+      Capacity = capacity;
+      Level = initial;
+      PutQueue = new Queue<ContainerPut>();
+      GetQueue = new Queue<ContainerGet>();
+    }
+
+    public virtual ContainerPut Put(double amount) {
+      if (amount > Capacity) throw new ArgumentException("Cannot put more than capacity", "amount");
+      var put = new ContainerPut(Environment, TriggerGet, amount);
+      PutQueue.Enqueue(put);
+      TriggerPut();
+      return put;
+    }
+
+    public virtual ContainerGet Get(double amount) {
+      if (amount > Capacity) throw new ArgumentException("Cannot get more than capacity", "amount");
+      var get = new ContainerGet(Environment, TriggerPut, amount);
+      GetQueue.Enqueue(get);
+      TriggerGet();
+      return get;
+    }
+
+    protected virtual void DoPut(ContainerPut put) {
+      if (Capacity - Level >= put.Amount) {
+        Level += put.Amount;
+        put.Succeed();
+      }
+    }
+
+    protected virtual void DoGet(ContainerGet get) {
+      if (Level >= get.Amount) {
+        Level -= get.Amount;
+        get.Succeed();
+      }
+    }
+
+    protected virtual void TriggerPut(Event @event = null) {
+      while (PutQueue.Count > 0) {
+        var put = PutQueue.Peek();
+        DoPut(put);
+        if (put.IsTriggered) {
+          PutQueue.Dequeue();
+        } else break;
+      }
+    }
+
+    protected virtual void TriggerGet(Event @event = null) {
+      while (GetQueue.Count > 0) {
+        var get = GetQueue.Peek();
+        DoGet(get);
+        if (get.IsTriggered) {
+          GetQueue.Dequeue();
+        } else break;
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/ContainerGet.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/ContainerGet.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/ContainerGet.cs	(revision 15973)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public class ContainerGet : Event {
+    public double Amount { get; protected set; }
+    public DateTime Time { get; private set; }
+    public Process Process { get; private set; }
+
+    public ContainerGet(Environment environment, Action<Event> callback, double amount)
+      : base(environment) {
+      if (amount <= 0) throw new ArgumentException("Amount must be > 0.", "amount");
+      Amount = amount;
+      CallbackList.Add(callback);
+      Time = environment.Now;
+      Process = environment.ActiveProcess;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/ContainerPut.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/ContainerPut.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/ContainerPut.cs	(revision 15973)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public class ContainerPut : Event {
+    public double Amount { get; protected set; }
+    public DateTime Time { get; private set; }
+    public Process Process { get; private set; }
+
+    public ContainerPut(Environment environment, Action<Event> callback, double amount)
+      : base(environment) {
+      if (amount <= 0) throw new ArgumentException("Amount must be > 0.", "amount");
+      Amount = amount;
+      CallbackList.Add(callback);
+      Time = environment.Now;
+      Process = environment.ActiveProcess;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/FilterStoreGet.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/FilterStoreGet.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/FilterStoreGet.cs	(revision 15973)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public class FilterStoreGet : StoreGet {
+    public Func<object, bool> Filter { get; private set; }
+
+    public FilterStoreGet(Environment environment, Action<Event> callback, Func<object, bool> filter)
+      : base(environment, callback) {
+      Filter = filter;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/PreemptiveRequest.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/PreemptiveRequest.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/PreemptiveRequest.cs	(revision 15973)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public sealed class PreemptiveRequest : PriorityRequest {
+    public bool Preempt { get; private set; }
+
+    public PreemptiveRequest(Environment environment, Action<Event> callback, Action<Event> disposeCallback, int priority = 1, bool preempt = false)
+      : base(environment, callback, disposeCallback, priority) {
+      Preempt = preempt;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/PriorityRequest.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/PriorityRequest.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/PriorityRequest.cs	(revision 15973)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public class PriorityRequest : Request {
+    public int Priority { get; private set; }
+
+    public PriorityRequest(Environment environment, Action<Event> callback, Action<Event> disposeCallback, int priority = 1)
+      : base(environment, callback, disposeCallback) {
+      Priority = priority;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/Release.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/Release.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/Release.cs	(revision 15973)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public sealed class Release : Event {
+    public Request Request { get; private set; }
+
+    public Release(Environment environment, Request request, Action<Event> callback)
+      : base(environment) {
+      Request = request;
+      CallbackList.Add(callback);
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/Request.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/Request.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/Request.cs	(revision 15973)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public class Request : Event, IDisposable {
+    private readonly Action<Event> disposeCallback;
+    public DateTime Time { get; private set; }
+    public Process Process { get; private set; }
+
+    public Request(Environment environment, Action<Event> callback, Action<Event> disposeCallback)
+      : base(environment) {
+      CallbackList.Add(callback);
+      this.disposeCallback = disposeCallback;
+      Time = environment.Now;
+      Process = environment.ActiveProcess;
+    }
+
+    public virtual void Dispose() {
+      if (disposeCallback != null) disposeCallback(this);
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/ResourcePoolRequest.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/ResourcePoolRequest.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/ResourcePoolRequest.cs	(revision 15973)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public class ResourcePoolRequest : Request {
+    public Func<object, bool> Filter { get; private set; }
+
+    public ResourcePoolRequest(Environment environment, Action<Event> callback, Action<Event> disposeCallback, Func<object, bool> filter)
+      : base(environment, callback, disposeCallback) {
+      Filter = filter;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/StoreGet.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/StoreGet.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/StoreGet.cs	(revision 15973)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public class StoreGet : Event {
+    public DateTime Time { get; private set; }
+    public Process Process { get; private set; }
+
+    public StoreGet(Environment environment, Action<Event> callback)
+      : base(environment) {
+      CallbackList.Add(callback);
+      Time = environment.Now;
+      Process = environment.ActiveProcess;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/StorePut.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/StorePut.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Events/StorePut.cs	(revision 15973)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public class StorePut : Event {
+    public DateTime Time { get; private set; }
+    public Process Process { get; private set; }
+
+    public StorePut(Environment environment, Action<Event> callback, object value)
+      : base(environment) {
+      if (value == null) throw new ArgumentNullException("value", "Value to put in a Store cannot be null.");
+      CallbackList.Add(callback);
+      Value = value;
+      Time = environment.Now;
+      Process = environment.ActiveProcess;
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/FilterStore.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/FilterStore.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/FilterStore.cs	(revision 15973)
@@ -0,0 +1,111 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace SimSharp {
+  public class FilterStore {
+    public int Count { get { return Items.Count; } }
+    public int Capacity { get; protected set; }
+    protected Environment Environment { get; private set; }
+
+    protected Queue<StorePut> PutQueue { get; private set; }
+    protected LinkedList<FilterStoreGet> GetQueue { get; private set; }
+    protected List<object> Items { get; private set; }
+
+    public FilterStore(Environment environment, int capacity = int.MaxValue) {
+      if (capacity <= 0) throw new ArgumentException("Capacity must be > 0", "capacity");
+      Environment = environment;
+      Capacity = capacity;
+      PutQueue = new Queue<StorePut>();
+      GetQueue = new LinkedList<FilterStoreGet>();
+      Items = new List<object>();
+    }
+    public FilterStore(Environment environment, IEnumerable<object> items, int capacity = int.MaxValue) {
+      if (capacity <= 0) throw new ArgumentException("Capacity must be > 0", "capacity");
+      Environment = environment;
+      Capacity = capacity;
+      PutQueue = new Queue<StorePut>();
+      GetQueue = new LinkedList<FilterStoreGet>();
+      Items = new List<object>(items);
+      if (capacity < Items.Count) throw new ArgumentException("There are more initial items than there is capacity.", "items");
+    }
+
+    public virtual bool IsAvailable(Func<object, bool> filter) {
+      return Items.Any(filter);
+    }
+
+    public virtual StorePut Put(object item) {
+      var put = new StorePut(Environment, TriggerGet, item);
+      PutQueue.Enqueue(put);
+      TriggerPut();
+      return put;
+    }
+
+    public virtual FilterStoreGet Get(Func<object, bool> filter = null) {
+      if (filter == null) filter = _ => true;
+      var get = new FilterStoreGet(Environment, TriggerPut, filter);
+      GetQueue.AddLast(get);
+      TriggerGet();
+      return get;
+    }
+
+    protected virtual void DoPut(StorePut put) {
+      if (Items.Count < Capacity) {
+        Items.Add(put.Value);
+        put.Succeed();
+      }
+    }
+
+    protected virtual void DoGet(FilterStoreGet get) {
+      for (int i = 0; i < Items.Count; i++) {
+        var item = Items[i];
+        if (!get.Filter(item)) continue;
+        Items.RemoveAt(i);
+        get.Succeed(item);
+        return;
+      }
+    }
+
+    protected virtual void TriggerPut(Event @event = null) {
+      while (PutQueue.Count > 0) {
+        var put = PutQueue.Peek();
+        DoPut(put);
+        if (put.IsTriggered) {
+          PutQueue.Dequeue();
+        } else break;
+      }
+    }
+
+    protected virtual void TriggerGet(Event @event = null) {
+      var current = GetQueue.First;
+      while (current != null) {
+        var get = current.Value;
+        DoGet(get);
+        if (get.IsTriggered) {
+          var next = current.Next;
+          GetQueue.Remove(current);
+          current = next;
+        } else current = current.Next;
+        if (Items.Count == 0) break;
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/PreemptiveResource.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/PreemptiveResource.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/PreemptiveResource.cs	(revision 15973)
@@ -0,0 +1,129 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace SimSharp {
+  public class PreemptiveResource {
+
+    public int Capacity { get; protected set; }
+
+    public int InUse { get { return Users.Count; } }
+
+    public int Remaining { get { return Capacity - InUse; } }
+
+    protected Environment Environment { get; private set; }
+
+    protected SortedList<int, LinkedList<PreemptiveRequest>> RequestQueue { get; private set; }
+    protected Queue<Release> ReleaseQueue { get; private set; }
+    protected HashSet<Request> Users { get; private set; }
+
+    public PreemptiveResource(Environment environment, int capacity = 1) {
+      if (capacity <= 0) throw new ArgumentException("Capacity must be > 0.", "capacity");
+      Environment = environment;
+      Capacity = capacity;
+      RequestQueue = new SortedList<int, LinkedList<PreemptiveRequest>>();
+      ReleaseQueue = new Queue<Release>();
+      Users = new HashSet<Request>();
+    }
+
+    public virtual PreemptiveRequest Request(int priority = 1, bool preempt = false) {
+      var request = new PreemptiveRequest(Environment, TriggerRelease, DisposeCallback, priority, preempt);
+      if (!RequestQueue.ContainsKey(request.Priority))
+        RequestQueue.Add(request.Priority, new LinkedList<PreemptiveRequest>());
+      RequestQueue[request.Priority].AddLast(request);
+      TriggerRequest();
+      return request;
+    }
+
+    public virtual Release Release(PreemptiveRequest request) {
+      var release = new Release(Environment, request, TriggerRequest);
+      ReleaseQueue.Enqueue(release);
+      TriggerRelease();
+      return release;
+    }
+
+    protected void DisposeCallback(Event @event) {
+      var request = @event as PreemptiveRequest;
+      if (request != null) Release(request);
+    }
+
+    protected virtual void DoRequest(PreemptiveRequest request) {
+      if (Users.Count >= Capacity && request.Preempt) {
+        // Check if we can preempt another process
+        var oldest = Users.OfType<PreemptiveRequest>().Select((r, i) => new { Request = r, Index = i })
+          .OrderByDescending(x => x.Request.Priority)
+          .ThenByDescending(x => x.Request.Time)
+          .ThenByDescending(x => x.Request.Preempt)
+          .ThenByDescending(x => x.Index)
+          .First().Request;
+        if (oldest.Priority > request.Priority || (oldest.Priority == request.Priority
+            && (!oldest.Preempt && request.Preempt || (oldest.Preempt == request.Preempt
+              && oldest.Time > request.Time)))) {
+          Users.Remove(oldest);
+          oldest.Process.Interrupt(new Preempted(request.Process, oldest.Time));
+        }
+      }
+      if (Users.Count < Capacity) {
+        Users.Add(request);
+        request.Succeed();
+      }
+    }
+
+    protected virtual void DoRelease(Release release) {
+      if (!Users.Remove(release.Request)) {
+        var preemptRequest = release.Request as PreemptiveRequest;
+        if (preemptRequest != null) {
+          var current = RequestQueue[preemptRequest.Priority].First;
+          while (current != null && current.Value != release.Request)
+            current = current.Next;
+          if (current != null) RequestQueue[preemptRequest.Priority].Remove(current);
+        }
+      }
+      release.Succeed();
+    }
+
+    protected virtual void TriggerRequest(Event @event = null) {
+      foreach (var entry in RequestQueue) {
+        var requests = entry.Value;
+        var current = requests.First;
+        while (current != null) {
+          var request = current.Value;
+          DoRequest(request);
+          if (request.IsTriggered) {
+            var next = current.Next;
+            requests.Remove(current);
+            current = next;
+          } else current = current.Next;
+        }
+      }
+    }
+
+    protected virtual void TriggerRelease(Event @event = null) {
+      while (ReleaseQueue.Count > 0) {
+        var release = ReleaseQueue.Peek();
+        DoRelease(release);
+        if (release.IsTriggered) {
+          ReleaseQueue.Dequeue();
+        } else break;
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/PriorityResource.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/PriorityResource.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/PriorityResource.cs	(revision 15973)
@@ -0,0 +1,115 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace SimSharp {
+  public class PriorityResource {
+
+    public int Capacity { get; protected set; }
+
+    public int InUse { get { return Users.Count; } }
+
+    public int Remaining { get { return Capacity - InUse; } }
+
+    protected Environment Environment { get; private set; }
+
+    protected SortedList<int, LinkedList<PriorityRequest>> RequestQueue { get; private set; }
+    protected Queue<Release> ReleaseQueue { get; private set; }
+    protected HashSet<Request> Users { get; private set; }
+
+    public PriorityResource(Environment environment, int capacity = 1) {
+      if (capacity <= 0) throw new ArgumentException("Capacity must be > 0.", "capacity");
+      Environment = environment;
+      Capacity = capacity;
+      RequestQueue = new SortedList<int, LinkedList<PriorityRequest>>();
+      ReleaseQueue = new Queue<Release>();
+      Users = new HashSet<Request>();
+    }
+
+    public virtual PriorityRequest Request(int priority = 1) {
+      var request = new PriorityRequest(Environment, TriggerRelease, DisposeCallback, priority);
+      if (!RequestQueue.ContainsKey(priority))
+        RequestQueue.Add(priority, new LinkedList<PriorityRequest>());
+      RequestQueue[priority].AddLast(request);
+      TriggerRequest();
+      return request;
+    }
+
+    public virtual Release Release(PriorityRequest request) {
+      var release = new Release(Environment, request, TriggerRequest);
+      ReleaseQueue.Enqueue(release);
+      TriggerRelease();
+      return release;
+    }
+
+    protected void DisposeCallback(Event @event) {
+      var request = @event as PriorityRequest;
+      if (request != null) Release(request);
+    }
+
+    protected virtual void DoRequest(Request request) {
+      if (Users.Count < Capacity) {
+        Users.Add(request);
+        request.Succeed();
+      }
+    }
+
+    protected virtual void DoRelease(Release release) {
+      if (!Users.Remove(release.Request)) {
+        var prioRequest = release.Request as PriorityRequest;
+        if (prioRequest != null) {
+          var current = RequestQueue[prioRequest.Priority].First;
+          while (current != null && current.Value != release.Request)
+            current = current.Next;
+          if (current != null) RequestQueue[prioRequest.Priority].Remove(current);
+        }
+      }
+      release.Succeed();
+    }
+
+    protected virtual void TriggerRequest(Event @event = null) {
+      foreach (var entry in RequestQueue) {
+        var cascade = false;
+        var requests = entry.Value;
+        while (requests.Count > 0) {
+          var req = requests.First.Value;
+          DoRequest(req);
+          if (req.IsTriggered) {
+            requests.RemoveFirst();
+          } else {
+            cascade = true;
+            break;
+          }
+        }
+        if (cascade) break;
+      }
+    }
+
+    protected virtual void TriggerRelease(Event @event = null) {
+      while (ReleaseQueue.Count > 0) {
+        var release = ReleaseQueue.Peek();
+        DoRelease(release);
+        if (release.IsTriggered) {
+          ReleaseQueue.Dequeue();
+        } else break;
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Resource.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Resource.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Resource.cs	(revision 15973)
@@ -0,0 +1,104 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace SimSharp {
+  public class Resource {
+
+    public int Capacity { get; protected set; }
+
+    public int InUse { get { return Users.Count; } }
+
+    public int Remaining { get { return Capacity - InUse; } }
+
+    protected Environment Environment { get; private set; }
+
+    protected LinkedList<Request> RequestQueue { get; private set; }
+    protected Queue<Release> ReleaseQueue { get; private set; }
+    protected HashSet<Request> Users { get; private set; }
+
+    public Resource(Environment environment, int capacity = 1) {
+      if (capacity <= 0) throw new ArgumentException("Capacity must > 0.", "capacity");
+      Environment = environment;
+      Capacity = capacity;
+      RequestQueue = new LinkedList<Request>();
+      ReleaseQueue = new Queue<Release>();
+      Users = new HashSet<Request>();
+    }
+
+    public virtual Request Request() {
+      var request = new Request(Environment, TriggerRelease, DisposeCallback);
+      RequestQueue.AddLast(request);
+      TriggerRequest();
+      return request;
+    }
+
+    public virtual Release Release(Request request) {
+      var release = new Release(Environment, request, TriggerRequest);
+      ReleaseQueue.Enqueue(release);
+      TriggerRelease();
+      return release;
+    }
+
+    protected virtual void DisposeCallback(Event @event) {
+      var request = @event as Request;
+      if (request != null) {
+        Release(request);
+      }
+    }
+
+    protected virtual void DoRequest(Request request) {
+      if (Users.Count < Capacity) {
+        Users.Add(request);
+        request.Succeed();
+      }
+    }
+
+    protected virtual void DoRelease(Release release) {
+      if (!Users.Remove(release.Request)) {
+        var current = RequestQueue.First;
+        while (current != null && current.Value != release.Request)
+          current = current.Next;
+        if (current != null) RequestQueue.Remove(current);
+      }
+      release.Succeed();
+    }
+
+    protected virtual void TriggerRequest(Event @event = null) {
+      while (RequestQueue.Count > 0) {
+        var request = RequestQueue.First.Value;
+        DoRequest(request);
+        if (request.IsTriggered) {
+          RequestQueue.RemoveFirst();
+        } else break;
+      }
+    }
+
+    protected virtual void TriggerRelease(Event @event = null) {
+      while (ReleaseQueue.Count > 0) {
+        var release = ReleaseQueue.Peek();
+        DoRelease(release);
+        if (release.IsTriggered) {
+          ReleaseQueue.Dequeue();
+        } else break;
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/ResourcePool.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/ResourcePool.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/ResourcePool.cs	(revision 15973)
@@ -0,0 +1,110 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace SimSharp {
+  public class ResourcePool {
+    protected static readonly Func<object, bool> TrueFunc = _ => true;
+
+    public int Capacity { get; protected set; }
+
+    public int InUse { get { return Capacity - Remaining; } }
+
+    public int Remaining { get { return Resources.Count; } }
+
+    protected Environment Environment { get; private set; }
+
+    protected LinkedList<ResourcePoolRequest> RequestQueue { get; private set; }
+    protected Queue<Release> ReleaseQueue { get; private set; }
+    protected List<object> Resources { get; private set; }
+
+    public ResourcePool(Environment environment, IEnumerable<object> resources) {
+      Environment = environment;
+      if (resources == null) throw new ArgumentNullException("resources");
+      Resources = new List<object>(resources);
+      Capacity = Resources.Count;
+      if (Capacity == 0) throw new ArgumentException("There must be at least one resource", "resources");
+      RequestQueue = new LinkedList<ResourcePoolRequest>();
+      ReleaseQueue = new Queue<Release>();
+    }
+
+    public virtual bool IsAvailable(Func<object, bool> filter) {
+      return Resources.Any(filter);
+    }
+
+    public virtual ResourcePoolRequest Request(Func<object, bool> filter = null) {
+      var request = new ResourcePoolRequest(Environment, TriggerRelease, DisposeCallback, filter ?? TrueFunc);
+      RequestQueue.AddLast(request);
+      TriggerRequest();
+      return request;
+    }
+
+    public virtual Release Release(Request request) {
+      var release = new Release(Environment, request, TriggerRequest);
+      ReleaseQueue.Enqueue(release);
+      TriggerRelease();
+      return release;
+    }
+
+    protected virtual void DisposeCallback(Event @event) {
+      var request = @event as Request;
+      if (request != null) Release(request);
+    }
+
+    protected virtual void DoRequest(ResourcePoolRequest request) {
+      foreach (var o in Resources) {
+        if (!request.Filter(o)) continue;
+        Resources.Remove(o);
+        request.Succeed(o);
+        return;
+      }
+    }
+
+    protected virtual void DoRelease(Release release) {
+      Resources.Add(release.Request.Value);
+      release.Succeed();
+    }
+
+    protected virtual void TriggerRequest(Event @event = null) {
+      var current = RequestQueue.First;
+      while (current != null) {
+        var request = current.Value;
+        DoRequest(request);
+        if (request.IsTriggered) {
+          var next = current.Next;
+          RequestQueue.Remove(current);
+          current = next;
+        } else current = current.Next;
+        if (Resources.Count == 0) break;
+      }
+    }
+
+    protected virtual void TriggerRelease(Event @event = null) {
+      while (ReleaseQueue.Count > 0) {
+        var release = ReleaseQueue.Peek();
+        DoRelease(release);
+        if (release.IsTriggered) {
+          ReleaseQueue.Dequeue();
+        } else break;
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Store.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Store.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Core/Resources/Store.cs	(revision 15973)
@@ -0,0 +1,91 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace SimSharp {
+  public class Store {
+    public int Count { get { return Items.Count; } }
+    public int Capacity { get; protected set; }
+    protected Environment Environment { get; private set; }
+
+    protected Queue<StorePut> PutQueue { get; private set; }
+    protected Queue<StoreGet> GetQueue { get; private set; }
+    protected List<object> Items { get; private set; }
+
+    public Store(Environment environment, int capacity = int.MaxValue) {
+      if (capacity <= 0) throw new ArgumentException("Capacity must be > 0", "capacity");
+      Environment = environment;
+      Capacity = capacity;
+      PutQueue = new Queue<StorePut>();
+      GetQueue = new Queue<StoreGet>();
+      Items = new List<object>();
+    }
+
+    public virtual StorePut Put(object item) {
+      var put = new StorePut(Environment, TriggerGet, item);
+      PutQueue.Enqueue(put);
+      TriggerPut();
+      return put;
+    }
+
+    public virtual StoreGet Get() {
+      var get = new StoreGet(Environment, TriggerPut);
+      GetQueue.Enqueue(get);
+      TriggerGet();
+      return get;
+    }
+
+    protected virtual void DoPut(StorePut put) {
+      if (Items.Count < Capacity) {
+        Items.Add(put.Value);
+        put.Succeed();
+      }
+    }
+
+    protected virtual void DoGet(StoreGet get) {
+      if (Items.Count > 0) {
+        var item = Items.First();
+        Items.RemoveAt(0);
+        get.Succeed(item);
+      }
+    }
+
+    protected virtual void TriggerPut(Event @event = null) {
+      while (PutQueue.Count > 0) {
+        var put = PutQueue.Peek();
+        DoPut(put);
+        if (put.IsTriggered) {
+          PutQueue.Dequeue();
+        } else break;
+      }
+    }
+
+    protected virtual void TriggerGet(Event @event = null) {
+      while (GetQueue.Count > 0) {
+        var get = GetQueue.Peek();
+        DoGet(get);
+        if (get.IsTriggered) {
+          GetQueue.Dequeue();
+        } else break;
+      }
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Properties/AssemblyInfo.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Properties/AssemblyInfo.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Properties/AssemblyInfo.cs	(revision 15973)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SimSharp")]
+[assembly: AssemblyDescription("A .NET port of SimPy, discrete event simulation framework")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("SimSharp")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("d51e9cc2-c26b-4df5-94f8-ca8f63f75db9")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.0.11.0")]
+[assembly: AssemblyFileVersion("3.0.11.0")]
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Random/FastRandom.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Random/FastRandom.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Random/FastRandom.cs	(revision 15973)
@@ -0,0 +1,413 @@
+﻿/* ***************************************************************************
+ * This file is part of SharpNEAT - Evolution of Neural Networks.
+ * 
+ * Copyright 2004-2006, 2009-2010 Colin Green (sharpneat@gmail.com)
+ *
+ * SharpNEAT is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SharpNEAT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SharpNEAT.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// ENHANCEMENT: Replace usages of this class with the superceding version from Math.Net.
+using System;
+
+namespace SimSharp {
+  /// <summary>
+  /// A fast random number generator for .NET
+  /// Colin Green, January 2005
+  /// 
+  /// Key points:
+  ///  1) Based on a simple and fast xor-shift pseudo random number generator (RNG) specified in: 
+  ///  Marsaglia, George. (2003). Xorshift RNGs.
+  ///  http://www.jstatsoft.org/v08/i14/paper
+  ///  
+  ///  This particular implementation of xorshift has a period of 2^128-1. See the above paper to see
+  ///  how this can be easily extened if you need a longer period. At the time of writing I could find no 
+  ///  information on the period of System.Random for comparison.
+  /// 
+  ///  2) Faster than System.Random. Up to 8x faster, depending on which methods are called.
+  /// 
+  ///  3) Direct replacement for System.Random. This class implements all of the methods that System.Random 
+  ///  does plus some additional methods. The like named methods are functionally equivalent.
+  ///  
+  ///  4) Allows fast re-initialisation with a seed, unlike System.Random which accepts a seed at construction
+  ///  time which then executes a relatively expensive initialisation routine. This provides a vast speed improvement
+  ///  if you need to reset the pseudo-random number sequence many times, e.g. if you want to re-generate the same
+  ///  sequence of random numbers many times. An alternative might be to cache random numbers in an array, but that 
+  ///  approach is limited by memory capacity and the fact that you may also want a large number of different sequences 
+  ///  cached. Each sequence can be represented by a single seed value (int) when using FastRandom.
+  ///  
+  ///  Notes.
+  ///  A further performance improvement can be obtained by declaring local variables as static, thus avoiding 
+  ///  re-allocation of variables on each call. However care should be taken if multiple instances of
+  ///  FastRandom are in use or if being used in a multi-threaded environment.
+  /// 
+  /// 
+  /// Colin Green, September 4th 2005
+  ///   - Added NextBytesUnsafe() - commented out by default.
+  ///   - Fixed bug in Reinitialise() - y,z and w variables were not being reset.
+  ///     
+  /// Colin Green, December 2008.
+  ///   - Fix to Next() - Was previously able to return int.MaxValue, contrary to the method's contract and comments.
+  ///   - Modified NextBool() to use _bitMask instead of a count of remaining bits. Also reset the bit buffer in Reinitialise().
+  ///    
+  /// Colin Green, 2011-08-31
+  ///   - Added NextByte() method.
+  ///   - Added new statically declared seedRng FastRandom to allow easy creation of multiple FastRandoms with different seeds 
+  ///     within a single clock tick.
+  ///     
+  /// Colin Green, 2011-10-04
+  ///  - Seeds are now hashed. Without this the first random sample for nearby seeds (1,2,3, etc.) are very similar 
+  ///    (have a similar bit pattern). Thanks to Francois Guibert for identifying this problem.
+  /// 
+  /// </summary>
+  public class FastRandom : IRandom {
+    #region Static Fields
+    /// <summary>
+    /// A static RNG that is used to generate seed values when constructing new instances of FastRandom.
+    /// This overcomes the problem whereby multiple FastRandom instances are instantiated within the same
+    /// tick count and thus obtain the same seed, that approach can result in extreme biases occuring 
+    /// in some cases depending on how the RNG is used.
+    /// </summary>
+    static readonly FastRandom __seedRng = new FastRandom((int)System.Environment.TickCount);
+    #endregion
+
+    #region Instance Fields
+
+    // The +1 ensures NextDouble doesn't generate 1.0
+    const double REAL_UNIT_INT = 1.0 / ((double)int.MaxValue + 1.0);
+    const double REAL_UNIT_UINT = 1.0 / ((double)uint.MaxValue + 1.0);
+    const uint Y = 842502087, Z = 3579807591, W = 273326509;
+
+    uint _x, _y, _z, _w;
+
+    #endregion
+
+    #region Constructors
+
+    /// <summary>
+    /// Initialises a new instance using a seed generated from the class's static seed RNG.
+    /// </summary>
+    public FastRandom() {
+      Reinitialise(__seedRng.NextInt());
+    }
+
+    /// <summary>
+    /// Initialises a new instance using an int value as seed.
+    /// This constructor signature is provided to maintain compatibility with
+    /// System.Random
+    /// </summary>
+    public FastRandom(int seed) {
+      Reinitialise(seed);
+    }
+
+    #endregion
+
+    #region Public Methods [Reinitialisation]
+
+    /// <summary>
+    /// Reinitialises using an int value as a seed.
+    /// </summary>
+    public void Reinitialise(int seed) {
+      // The only stipulation stated for the xorshift RNG is that at least one of
+      // the seeds x,y,z,w is non-zero. We fulfill that requirement by only allowing
+      // resetting of the x seed.
+
+      // The first random sample will be very closely related to the value of _x we set here. 
+      // Thus setting _x = seed will result in a close correlation between the bit patterns of the seed and
+      // the first random sample, therefore if the seed has a pattern (e.g. 1,2,3) then there will also be 
+      // a recognisable pattern across the first random samples.
+      //
+      // Such a strong correlation between the seed and the first random sample is an undesirable
+      // charactersitic of a RNG, therefore we significantly weaken any correlation by hashing the seed's bits. 
+      // This is achieved by multiplying the seed with four large primes each with bits distributed over the
+      // full length of a 32bit value, finally adding the results to give _x.
+      _x = (uint)((seed * 1431655781)
+                  + (seed * 1183186591)
+                  + (seed * 622729787)
+                  + (seed * 338294347));
+
+      _y = Y;
+      _z = Z;
+      _w = W;
+
+      _bitBuffer = 0;
+      _bitMask = 1;
+    }
+
+    #endregion
+
+    #region Public Methods [System.Random functionally equivalent methods]
+
+    /// <summary>
+    /// Generates a random int over the range 0 to int.MaxValue-1.
+    /// MaxValue is not generated in order to remain functionally equivalent to System.Random.Next().
+    /// This does slightly eat into some of the performance gain over System.Random, but not much.
+    /// For better performance see:
+    /// 
+    /// Call NextInt() for an int over the range 0 to int.MaxValue.
+    /// 
+    /// Call NextUInt() and cast the result to an int to generate an int over the full Int32 value range
+    /// including negative values. 
+    /// </summary>
+    public int Next() {
+      uint t = _x ^ (_x << 11);
+      _x = _y; _y = _z; _z = _w;
+      _w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8));
+
+      // Handle the special case where the value int.MaxValue is generated. This is outside of 
+      // the range of permitted values, so we therefore call Next() to try again.
+      uint rtn = _w & 0x7FFFFFFF;
+      if (rtn == 0x7FFFFFFF) {
+        return Next();
+      }
+      return (int)rtn;
+    }
+
+    /// <summary>
+    /// Generates a random int over the range 0 to upperBound-1, and not including upperBound.
+    /// </summary>
+    public int Next(int upperBound) {
+      if (upperBound < 0) {
+        throw new ArgumentOutOfRangeException("upperBound", upperBound, "upperBound must be >=0");
+      }
+
+      uint t = _x ^ (_x << 11);
+      _x = _y; _y = _z; _z = _w;
+
+      // ENHANCEMENT: Can we do this without converting to a double and back again?
+      // The explicit int cast before the first multiplication gives better performance.
+      // See comments in NextDouble.
+      return (int)((REAL_UNIT_INT * (int)(0x7FFFFFFF & (_w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8))))) * upperBound);
+    }
+
+    /// <summary>
+    /// Generates a random int over the range lowerBound to upperBound-1, and not including upperBound.
+    /// upperBound must be >= lowerBound. lowerBound may be negative.
+    /// </summary>
+    public int Next(int lowerBound, int upperBound) {
+      if (lowerBound > upperBound) {
+        throw new ArgumentOutOfRangeException("upperBound", upperBound, "upperBound must be >=lowerBound");
+      }
+
+      uint t = _x ^ (_x << 11);
+      _x = _y; _y = _z; _z = _w;
+
+      // The explicit int cast before the first multiplication gives better performance.
+      // See comments in NextDouble.
+      int range = upperBound - lowerBound;
+      if (range < 0) {   // If range is <0 then an overflow has occured and must resort to using long integer arithmetic instead (slower).
+        // We also must use all 32 bits of precision, instead of the normal 31, which again is slower.  
+        return lowerBound + (int)((REAL_UNIT_UINT * (double)(_w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8)))) * (double)((long)upperBound - (long)lowerBound));
+      }
+
+      // 31 bits of precision will suffice if range<=int.MaxValue. This allows us to cast to an int and gain
+      // a little more performance.
+      return lowerBound + (int)((REAL_UNIT_INT * (double)(int)(0x7FFFFFFF & (_w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8))))) * (double)range);
+    }
+
+    /// <summary>
+    /// Generates a random double. Values returned are over the range [0, 1). That is, inclusive of 0.0 and exclusive of 1.0.
+    /// </summary>
+    public double NextDouble() {
+      uint t = _x ^ (_x << 11);
+      _x = _y; _y = _z; _z = _w;
+
+      // Here we can gain a 2x speed improvement by generating a value that can be cast to 
+      // an int instead of the more easily available uint. If we then explicitly cast to an 
+      // int the compiler will then cast the int to a double to perform the multiplication, 
+      // this final cast is a lot faster than casting from a uint to a double. The extra cast
+      // to an int is very fast (the allocated bits remain the same) and so the overall effect 
+      // of the extra cast is a significant performance improvement.
+      //
+      // Also note that the loss of one bit of precision is equivalent to what occurs within 
+      // System.Random.
+      return REAL_UNIT_INT * (int)(0x7FFFFFFF & (_w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8))));
+    }
+
+    /// <summary>
+    /// Fills the provided byte array with random bytes.
+    /// This method is functionally equivalent to System.Random.NextBytes(). 
+    /// </summary>
+    public void NextBytes(byte[] buffer) {
+      // Fill up the bulk of the buffer in chunks of 4 bytes at a time.
+      uint x = this._x, y = this._y, z = this._z, w = this._w;
+      int i = 0;
+      uint t;
+      for (int bound = buffer.Length - 3; i < bound; ) {
+        // Generate 4 bytes. 
+        // Increased performance is achieved by generating 4 random bytes per loop.
+        // Also note that no mask needs to be applied to zero out the higher order bytes before
+        // casting because the cast ignores thos bytes. Thanks to Stefan Trosch�tz for pointing this out.
+        t = x ^ (x << 11);
+        x = y; y = z; z = w;
+        w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
+
+        buffer[i++] = (byte)w;
+        buffer[i++] = (byte)(w >> 8);
+        buffer[i++] = (byte)(w >> 16);
+        buffer[i++] = (byte)(w >> 24);
+      }
+
+      // Fill up any remaining bytes in the buffer.
+      if (i < buffer.Length) {
+        // Generate 4 bytes.
+        t = x ^ (x << 11);
+        x = y; y = z; z = w;
+        w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
+
+        buffer[i++] = (byte)w;
+        if (i < buffer.Length) {
+          buffer[i++] = (byte)(w >> 8);
+          if (i < buffer.Length) {
+            buffer[i++] = (byte)(w >> 16);
+            if (i < buffer.Length) {
+              buffer[i] = (byte)(w >> 24);
+            }
+          }
+        }
+      }
+      this._x = x; this._y = y; this._z = z; this._w = w;
+    }
+
+    ///// <summary>
+    ///// A version of NextBytes that uses a pointer to set 4 bytes of the byte buffer in one operation
+    ///// thus providing a nice speedup. The loop is also partially unrolled to allow out-of-order-execution,
+    ///// this results in about a x2 speedup on an AMD Athlon. Thus performance may vary wildly on different CPUs
+    ///// depending on the number of execution units available.
+    ///// 
+    ///// Another significant speedup is obtained by setting the 4 bytes by indexing pDWord (e.g. pDWord[i++]=_w)
+    ///// instead of dereferencing it (e.g. *pDWord++=_w).
+    ///// 
+    ///// Note that this routine requires the unsafe compilation flag to be specified and so is commented out by default.
+    ///// </summary>
+    ///// <param name="buffer"></param>
+    //      public unsafe void NextBytesUnsafe(byte[] buffer)
+    //      {
+    //          if(buffer.Length % 8 != 0)
+    //              throw new ArgumentException("Buffer length must be divisible by 8", "buffer");
+    //
+    //          uint _x=this._x, _y=this._y, _z=this._z, _w=this._w;
+    //          
+    //          fixed(byte* pByte0 = buffer)
+    //          {
+    //              uint* pDWord = (uint*)pByte0;
+    //              for(int i=0, len=buffer.Length>>2; i < len; i+=2) 
+    //              {
+    //                  uint t=(_x^(_x<<11));
+    //                  _x=_y; _y=_z; _z=_w;
+    //                  pDWord[i] = _w = (_w^(_w>>19))^(t^(t>>8));
+    //
+    //                  t=(_x^(_x<<11));
+    //                  _x=_y; _y=_z; _z=_w;
+    //                  pDWord[i+1] = _w = (_w^(_w>>19))^(t^(t>>8));
+    //              }
+    //          }
+    //
+    //          this._x=_x; this._y=_y; this._z=_z; this._w=_w;
+    //      }
+    #endregion
+
+    #region Public Methods [Methods not present on System.Random]
+
+    /// <summary>
+    /// Generates a uint. Values returned are over the full range of a uint, 
+    /// uint.MinValue to uint.MaxValue, inclusive.
+    /// 
+    /// This is the fastest method for generating a single random number because the underlying
+    /// random number generator algorithm generates 32 random bits that can be cast directly to 
+    /// a uint.
+    /// </summary>
+    public uint NextUInt() {
+      uint t = _x ^ (_x << 11);
+      _x = _y; _y = _z; _z = _w;
+      return _w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8));
+    }
+
+    /// <summary>
+    /// Generates a random int over the range 0 to int.MaxValue, inclusive. 
+    /// This method differs from Next() only in that the range is 0 to int.MaxValue
+    /// and not 0 to int.MaxValue-1.
+    /// 
+    /// The slight difference in range means this method is slightly faster than Next()
+    /// but is not functionally equivalent to System.Random.Next().
+    /// </summary>
+    public int NextInt() {
+      uint t = _x ^ (_x << 11);
+      _x = _y; _y = _z; _z = _w;
+      return (int)(0x7FFFFFFF & (_w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8))));
+    }
+
+    /// <summary>
+    /// Generates a random double. Values returned are over the range (0, 1). That is, exclusive of both 0.0 and 1.0.
+    /// </summary>
+    public double NextDoubleNonZero() {
+      uint t = _x ^ (_x << 11);
+      _x = _y; _y = _z; _z = _w;
+
+      // See notes on NextDouble(). Here we generate a random value from 0 to 0x7f ff ff fe, and add one
+      // to generate a random value from 1 to 0x7f ff ff ff.
+      return REAL_UNIT_INT * (int)((0x7FFFFFFE & (_w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8)))) + 1U);
+    }
+
+    // Buffer 32 bits in bitBuffer, return 1 at a time, keep track of how many have been returned
+    // with bitMask.
+    uint _bitBuffer;
+    uint _bitMask;
+
+    /// <summary>
+    /// Generates a single random bit.
+    /// This method's performance is improved by generating 32 bits in one operation and storing them
+    /// ready for future calls.
+    /// </summary>
+    public bool NextBool() {
+      if (0 == _bitMask) {
+        // Generate 32 more bits.
+        uint t = _x ^ (_x << 11);
+        _x = _y; _y = _z; _z = _w;
+        _bitBuffer = _w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8));
+
+        // Reset the bitMask that tells us which bit to read next.
+        _bitMask = 0x80000000;
+        return (_bitBuffer & _bitMask) == 0;
+      }
+
+      return (_bitBuffer & (_bitMask >>= 1)) == 0;
+    }
+
+    // Buffer of random bytes. A single UInt32 is used to buffer 4 bytes.
+    // _byteBufferState tracks how bytes remain in the buffer, a value of 
+    // zero  indicates that the buffer is empty.
+    uint _byteBuffer;
+    byte _byteBufferState;
+
+    /// <summary>
+    /// Generates a signle random byte with range [0,255].
+    /// This method's performance is improved by generating 4 bytes in one operation and storing them
+    /// ready for future calls.
+    /// </summary>
+    public byte NextByte() {
+      if (0 == _byteBufferState) {
+        // Generate 4 more bytes.
+        uint t = _x ^ (_x << 11);
+        _x = _y; _y = _z; _z = _w;
+        _byteBuffer = _w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8));
+        _byteBufferState = 0x4;
+        return (byte)_byteBuffer;  // Note. Masking with 0xFF is unnecessary.
+      }
+      _byteBufferState >>= 1;
+      return (byte)(_byteBuffer >>= 1);
+    }
+
+    #endregion
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Random/IRandom.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Random/IRandom.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Random/IRandom.cs	(revision 15973)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+namespace SimSharp {
+  public interface IRandom {
+    int Next();
+    int Next(int upperBound);
+    int Next(int lowerBound, int upperBound);
+    double NextDouble();
+
+    void Reinitialise(int seed);
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Random/SystemRandom.cs
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Random/SystemRandom.cs	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/Random/SystemRandom.cs	(revision 15973)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* SimSharp - A .NET port of SimPy, discrete event simulation framework
+Copyright (C) 2016  Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
+#endregion
+
+using System;
+
+namespace SimSharp {
+  public class SystemRandom : IRandom {
+    private Random random;
+
+    public SystemRandom() {
+      random = new Random();
+    }
+
+    public SystemRandom(int seed) {
+      random = new Random(seed);
+    }
+    public int Next() {
+      return random.Next();
+    }
+
+    public int Next(int upperBound) {
+      return random.Next(upperBound);
+    }
+
+    public int Next(int lowerBound, int upperBound) {
+      return random.Next(lowerBound, upperBound);
+    }
+
+    public double NextDouble() {
+      return random.NextDouble();
+    }
+
+    public void Reinitialise(int seed) {
+      random = new Random(seed);
+    }
+  }
+}
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/SimSharp-3.0.11.csproj
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/SimSharp-3.0.11.csproj	(revision 15973)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.0.11/SimSharp-3.0.11/SimSharp-3.0.11.csproj	(revision 15973)
@@ -0,0 +1,133 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{9FE9C740-7859-4D01-AD07-7D4E15A6320B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>SimSharp</RootNamespace>
+    <AssemblyName>SimSharp-3.0.11</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Analysis\ContinuousStatistics.cs" />
+    <Compile Include="Collections\EventQueue.cs" />
+    <Compile Include="Collections\EventQueueNode.cs" />
+    <Compile Include="Core\ActiveObject.cs" />
+    <Compile Include="Core\Events\AnyOf.cs" />
+    <Compile Include="Core\Events\AllOf.cs" />
+    <Compile Include="Core\Resources\Container.cs" />
+    <Compile Include="Core\Environment.cs" />
+    <Compile Include="Core\Resources\Events\ResourcePoolRequest.cs" />
+    <Compile Include="Core\Resources\Events\FilterStoreGet.cs" />
+    <Compile Include="Core\Resources\Events\StorePut.cs" />
+    <Compile Include="Core\Resources\Events\StoreGet.cs" />
+    <Compile Include="Core\Resources\Events\ContainerGet.cs" />
+    <Compile Include="Core\Resources\Events\ContainerPut.cs" />
+    <Compile Include="Core\Events\Condition.cs" />
+    <Compile Include="Core\Events\Event.cs" />
+    <Compile Include="Core\Resources\Events\PreemptiveRequest.cs" />
+    <Compile Include="Core\Events\Process.cs" />
+    <Compile Include="Core\Resources\Events\Release.cs" />
+    <Compile Include="Core\Resources\Events\PriorityRequest.cs" />
+    <Compile Include="Core\Resources\Events\Request.cs" />
+    <Compile Include="Core\Events\Timeout.cs" />
+    <Compile Include="Core\Exceptions\EmptyScheduleException.cs" />
+    <Compile Include="Core\Preempted.cs" />
+    <Compile Include="Core\Resources\FilterStore.cs" />
+    <Compile Include="Core\Resources\PreemptiveResource.cs" />
+    <Compile Include="Core\Resources\PriorityResource.cs" />
+    <Compile Include="Core\Resources\Resource.cs" />
+    <Compile Include="Core\Resources\ResourcePool.cs" />
+    <Compile Include="Core\Resources\Store.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Random\FastRandom.cs" />
+    <Compile Include="Random\IRandom.cs" />
+    <Compile Include="Random\SystemRandom.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Collections\EventQueue-License.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/Plugin.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/Plugin.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/Plugin.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/Properties/AssemblyInfo.cs.frame	(revision 15651)
+++ branches/2522_RefactorPluginInfrastructure/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/Properties/AssemblyInfo.cs.frame	(revision 15973)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
