Added differencer and tests
authorPanagiotis Kanavos <pkanavos@gmail.com>
Fri, 10 Feb 2012 11:56:33 +0000 (13:56 +0200)
committerPanagiotis Kanavos <pkanavos@gmail.com>
Fri, 10 Feb 2012 11:56:33 +0000 (13:56 +0200)
trunk/Pithos.Core.Test/Pithos.Core.Test.csproj
trunk/Pithos.Core.Test/TestDifferencer.cs [new file with mode: 0644]
trunk/Pithos.Core/Agents/NetworkAgent.cs
trunk/Pithos.Core/Agents/ObjectInfoComparer.cs [new file with mode: 0644]
trunk/Pithos.Core/Agents/SnapshotDifferencer.cs [new file with mode: 0644]
trunk/Pithos.Core/Pithos.Core.csproj

index 824f409..ceb5edf 100644 (file)
     <Compile Include="StatusCheckerTest.cs" />
     <Compile Include="MockSettings.cs" />
     <Compile Include="MockStatusKeeper.cs" />
+    <Compile Include="TestDifferencer.cs" />
     <Compile Include="WorkflowFileStatusTest.cs" />
   </ItemGroup>
   <ItemGroup>
diff --git a/trunk/Pithos.Core.Test/TestDifferencer.cs b/trunk/Pithos.Core.Test/TestDifferencer.cs
new file mode 100644 (file)
index 0000000..e0c6c6f
--- /dev/null
@@ -0,0 +1,124 @@
+// -----------------------------------------------------------------------\r
+// <copyright file="TestDifferencer.cs" company="Microsoft">\r
+// TODO: Update copyright text.\r
+// </copyright>\r
+// -----------------------------------------------------------------------\r
+\r
+using System.Collections;\r
+using NUnit.Framework;\r
+using Pithos.Interfaces;\r
+\r
+namespace Pithos.Core.Test\r
+{\r
+    using System;\r
+    using System.Collections.Generic;\r
+    using System.Linq;\r
+    using System.Text;\r
+    using Pithos.Core.Agents;\r
+    \r
+    [TestFixture]\r
+    public class TestDifferencer\r
+    {\r
+        private ObjectInfo[] _previous;\r
+        private ObjectInfo[] _current;\r
+\r
+        [SetUp]\r
+        public void Setup()\r
+        {\r
+            _previous = new []{\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1},\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1},\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1},\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name4",Bytes=123,Hash="aa4",Version=1},\r
+                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1},\r
+                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1},\r
+                            };\r
+            _current = new []{\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1},\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1},\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name4",Bytes=1234,Hash="aa45",Version=1},\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name5",Bytes=123,Hash="aa5",Version=1},\r
+                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1},\r
+                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1},\r
+                           };\r
+            \r
+        }\r
+\r
+        [Test]\r
+        public void when_adding_a_snapshot_for_the_first_time()\r
+        {\r
+            var d1 = new SnapshotDifferencer();            \r
+            var differencer=d1.Post(_previous);\r
+            Assert.That(differencer.Deleted,Is.Empty);\r
+            Assert.That(differencer.Created,Is.EquivalentTo(_previous));\r
+            Assert.That(differencer.Changed,Is.Empty);\r
+            Assert.That(differencer.Unchanged,Is.Empty);\r
+        }\r
+\r
+        [Test]\r
+        public void when_adding_a_second_snapshot_with_a_deletion()\r
+        {\r
+            var d1 = new SnapshotDifferencer();            \r
+            var differencer=d1.Post(_previous).Post(_current);\r
+            var deleted=new[]{new ObjectInfo{Account="acc1",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1}};\r
+            Assert.That(differencer.Deleted.ToList(),Is.EquivalentTo(deleted)\r
+                .Using((IEqualityComparer) new ObjectInfoComparer()));\r
+        }\r
+        [Test]\r
+        public void when_adding_a_second_snapshot_with_an_addition()\r
+        {\r
+            var d1 = new SnapshotDifferencer();            \r
+            var differencer=d1.Post(_previous).Post(_current);\r
+            var created = new[] { new ObjectInfo { Account = "acc1", Container = "Cont1", Name = "Name5", Bytes = 123, Hash = "aa5", Version = 1 } };\r
+            Assert.That(differencer.Created.ToList(), Is.EquivalentTo(created)\r
+                .Using((IEqualityComparer)new ObjectInfoComparer()));\r
+        }\r
+        [Test]\r
+        public void when_adding_a_second_snapshot_with_a_change()\r
+        {\r
+            var d1 = new SnapshotDifferencer();            \r
+            var differencer=d1.Post(_previous).Post(_current);\r
+            var changed = new[] { new ObjectInfo { Account = "acc1", Container = "Cont1", Name = "Name4", Bytes = 1234, Hash = "aa45", Version = 1 } };\r
+            Assert.That(differencer.Changed.ToList(), Is.EquivalentTo(changed)\r
+                .Using((IEqualityComparer)new ObjectInfoComparer()));\r
+        }\r
+\r
+        [Test]\r
+        public void when_adding_a_second_snapshot_with_unchanged()\r
+        {\r
+            var d1 = new SnapshotDifferencer();            \r
+            var differencer=d1.Post(_previous).Post(_current);\r
+            var unchanged = new[]\r
+                                {\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1},\r
+                                new ObjectInfo{Account="acc1",Container="Cont1",Name="Name3",Bytes=123,Hash="aa3",Version=1},\r
+                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name1",Bytes=123,Hash="aa1",Version=1},\r
+                                new ObjectInfo{Account="acc2",Container="Cont1",Name="Name2",Bytes=123,Hash="aa2",Version=1},                                    \r
+                                };            \r
+            Assert.That(differencer.Unchanged.ToList(), Is.EquivalentTo(unchanged)\r
+                .Using((IEqualityComparer)new ObjectInfoComparer()));\r
+        }\r
+\r
+        [Test]\r
+        public void when_adding_a_null_first_snapshot()\r
+        {\r
+            var d1 = new SnapshotDifferencer();            \r
+            var differencer=d1.Post(null);\r
+            Assert.That(differencer.Deleted, Is.Empty);\r
+            Assert.That(differencer.Created, Is.Empty);\r
+            Assert.That(differencer.Changed, Is.Empty);\r
+            Assert.That(differencer.Unchanged, Is.Empty);\r
+        }\r
+\r
+        [Test]\r
+        public void when_adding_a_null_second_snapshot()\r
+        {\r
+            var d1 = new SnapshotDifferencer();            \r
+            var differencer=d1.Post(_previous).Post(null);\r
+            Assert.That(differencer.Deleted, Is.EquivalentTo(_previous));\r
+            Assert.That(differencer.Created, Is.Empty);\r
+            Assert.That(differencer.Changed, Is.Empty);\r
+            Assert.That(differencer.Unchanged, Is.Empty);\r
+        }\r
+    }\r
+}\r
index 123923c..02c0ec7 100644 (file)
@@ -642,20 +642,6 @@ namespace Pithos.Core.Agents
             }
         }
 
-        internal class ObjectInfoComparer:EqualityComparer<ObjectInfo>
-        {
-            public override bool Equals(ObjectInfo x, ObjectInfo y)
-            {
-                return (x.Account == y.Account &&
-                        x.Container == y.Container &&
-                        x.Name == y.Name);
-            }
-
-            public override int GetHashCode(ObjectInfo obj)
-            {
-                return String.Join("/",obj.Account,obj.Container,obj.Name).GetHashCode();
-            }
-        }
 
         Dictionary<string, List<ObjectInfo>> _currentSnapshot = new Dictionary<string, List<ObjectInfo>>();
         Dictionary<string, List<ObjectInfo>> _previousSnapshot = new Dictionary<string, List<ObjectInfo>>();
diff --git a/trunk/Pithos.Core/Agents/ObjectInfoComparer.cs b/trunk/Pithos.Core/Agents/ObjectInfoComparer.cs
new file mode 100644 (file)
index 0000000..744d7d0
--- /dev/null
@@ -0,0 +1,34 @@
+// -----------------------------------------------------------------------\r
+// <copyright file="ObjectInfoComparer.cs" company="Microsoft">\r
+// TODO: Update copyright text.\r
+// </copyright>\r
+// -----------------------------------------------------------------------\r
+\r
+using Pithos.Interfaces;\r
+\r
+namespace Pithos.Core.Agents\r
+{\r
+    using System;\r
+    using System.Collections.Generic;\r
+    using System.Linq;\r
+    using System.Text;\r
+\r
+    /// <summary>\r
+    /// TODO: Update summary.\r
+    /// </summary>\r
+    public class ObjectInfoComparer : EqualityComparer<ObjectInfo>\r
+    {\r
+        public override bool Equals(ObjectInfo x, ObjectInfo y)\r
+        {\r
+            return (x.Account == y.Account &&\r
+                    x.Container == y.Container &&\r
+                    x.Name == y.Name);\r
+        }\r
+\r
+        public override int GetHashCode(ObjectInfo obj)\r
+        {\r
+            return String.Join("/", obj.Account, obj.Container, obj.Name).GetHashCode();\r
+        }\r
+    }\r
+\r
+}\r
diff --git a/trunk/Pithos.Core/Agents/SnapshotDifferencer.cs b/trunk/Pithos.Core/Agents/SnapshotDifferencer.cs
new file mode 100644 (file)
index 0000000..e90532f
--- /dev/null
@@ -0,0 +1,76 @@
+// -----------------------------------------------------------------------\r
+// <copyright file="SnapshotDifferencer.cs" company="Microsoft">\r
+// TODO: Update copyright text.\r
+// </copyright>\r
+// -----------------------------------------------------------------------\r
+\r
+using Pithos.Interfaces;\r
+\r
+namespace Pithos.Core.Agents\r
+{\r
+    using System;\r
+    using System.Collections.Generic;\r
+    using System.Linq;\r
+    using System.Text;\r
+\r
+    /// <summary>\r
+    /// TODO: Update summary.\r
+    /// </summary>\r
+    public class SnapshotDifferencer\r
+    {\r
+        private IEnumerable<ObjectInfo> _previous;\r
+        private IEnumerable<ObjectInfo> _current;\r
+        private static ObjectInfo[] _empty = new ObjectInfo[0];\r
+        private ObjectInfoComparer _comparer = new ObjectInfoComparer();\r
+\r
+        public SnapshotDifferencer()\r
+        {\r
+            _previous = new List<ObjectInfo>();\r
+            _current= new List<ObjectInfo>();\r
+        }\r
+\r
+\r
+        public SnapshotDifferencer(IEnumerable<ObjectInfo> previous,IEnumerable<ObjectInfo> current  )\r
+        {\r
+            _previous = previous ?? new List<ObjectInfo>();\r
+            _current= current ?? new List<ObjectInfo>();\r
+        }\r
+        public SnapshotDifferencer Post(IEnumerable<ObjectInfo> list)\r
+        {\r
+            return new SnapshotDifferencer(_current,list);\r
+        }\r
+        \r
+        public IEnumerable<ObjectInfo> Deleted\r
+        {\r
+            get { return _previous.Except(_current,_comparer); }\r
+        }\r
+        public IEnumerable<ObjectInfo> Created\r
+        {\r
+            get { return _current.Except(_previous,_comparer); }\r
+        }\r
+        public IEnumerable<ObjectInfo> Changed\r
+        {\r
+            get\r
+            {\r
+                var changes = from newItem in _current \r
+                              let oldItem=_previous.FirstOrDefault(old=>_comparer.Equals(old,newItem))\r
+                              where oldItem !=null &&\r
+                                    newItem.Hash != oldItem.Hash\r
+                              select newItem;\r
+                return changes;\r
+            }\r
+        }\r
+        public IEnumerable<ObjectInfo> Unchanged\r
+        {\r
+            get\r
+            {\r
+                var unChanged = from newItem in _current\r
+                              let oldItem = _previous.FirstOrDefault(old => _comparer.Equals(old, newItem))\r
+                              where oldItem != null &&\r
+                                    newItem.Hash == oldItem.Hash\r
+                              select newItem;\r
+                return unChanged;\r
+            }\r
+        }\r
+    }\r
+}\r
index fbc4716..fbc984c 100644 (file)
 <?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>8.0.30703</ProductVersion>
-       <SchemaVersion>2.0</SchemaVersion>
-       <ProjectGuid>{142AF135-DF30-4563-B0AC-B604235AE874}</ProjectGuid>
-       <OutputType>Library</OutputType>
-       <AppDesignerFolder>Properties</AppDesignerFolder>
-       <RootNamespace>Pithos.Core</RootNamespace>
-       <AssemblyName>Pithos.Core</AssemblyName>
-       <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-       <FileAlignment>512</FileAlignment>
-       <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
-       <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{142AF135-DF30-4563-B0AC-B604235AE874}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Pithos.Core</RootNamespace>
+    <AssemblyName>Pithos.Core</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode>
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-       <DebugSymbols>true</DebugSymbols>
-       <DebugType>full</DebugType>
-       <Optimize>false</Optimize>
-       <OutputPath>bin\Debug\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <ErrorReport>prompt</ErrorReport>
-       <WarningLevel>4</WarningLevel>
-       <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
-       <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
-       <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
-       <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
-       <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
-       <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
-       <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
-       <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
-       <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
-       <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
-       <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
-       <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
-       <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
-       <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
-       <CodeContractsEmitXMLDocs>True</CodeContractsEmitXMLDocs>
-       <CodeContractsCustomRewriterAssembly />
-       <CodeContractsCustomRewriterClass />
-       <CodeContractsLibPaths />
-       <CodeContractsExtraRewriteOptions />
-       <CodeContractsExtraAnalysisOptions />
-       <CodeContractsBaseLineFile />
-       <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
-       <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
-       <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
-       <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
-       <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+    <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+    <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+    <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+    <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+    <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+    <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+    <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+    <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+    <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+    <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+    <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+    <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+    <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+    <CodeContractsEmitXMLDocs>True</CodeContractsEmitXMLDocs>
+    <CodeContractsCustomRewriterAssembly />
+    <CodeContractsCustomRewriterClass />
+    <CodeContractsLibPaths />
+    <CodeContractsExtraRewriteOptions />
+    <CodeContractsExtraAnalysisOptions />
+    <CodeContractsBaseLineFile />
+    <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+    <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+    <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+    <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-       <DebugType>pdbonly</DebugType>
-       <Optimize>true</Optimize>
-       <OutputPath>bin\Release\</OutputPath>
-       <DefineConstants>TRACE</DefineConstants>
-       <ErrorReport>prompt</ErrorReport>
-       <WarningLevel>4</WarningLevel>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Test|AnyCPU'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\Test\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>AnyCPU</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Test\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
   </PropertyGroup>
   <PropertyGroup>
-       <SignAssembly>true</SignAssembly>
+    <SignAssembly>true</SignAssembly>
   </PropertyGroup>
   <PropertyGroup>
-       <AssemblyOriginatorKeyFile>pithos.snk</AssemblyOriginatorKeyFile>
+    <AssemblyOriginatorKeyFile>pithos.snk</AssemblyOriginatorKeyFile>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Premium Debug|AnyCPU'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\Premium Debug\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>AnyCPU</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
-       <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
-       <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
-       <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
-       <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
-       <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
-       <CodeContractsRunCodeAnalysis>True</CodeContractsRunCodeAnalysis>
-       <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
-       <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
-       <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
-       <CodeContractsEnumObligations>True</CodeContractsEnumObligations>
-       <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
-       <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
-       <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
-       <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
-       <CodeContractsEmitXMLDocs>True</CodeContractsEmitXMLDocs>
-       <CodeContractsCustomRewriterAssembly />
-       <CodeContractsCustomRewriterClass />
-       <CodeContractsLibPaths />
-       <CodeContractsExtraRewriteOptions />
-       <CodeContractsExtraAnalysisOptions />
-       <CodeContractsBaseLineFile />
-       <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
-       <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
-       <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
-       <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Premium Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+    <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
+    <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+    <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+    <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+    <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+    <CodeContractsRunCodeAnalysis>True</CodeContractsRunCodeAnalysis>
+    <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations>
+    <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations>
+    <CodeContractsArithmeticObligations>True</CodeContractsArithmeticObligations>
+    <CodeContractsEnumObligations>True</CodeContractsEnumObligations>
+    <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+    <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+    <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies>
+    <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+    <CodeContractsEmitXMLDocs>True</CodeContractsEmitXMLDocs>
+    <CodeContractsCustomRewriterAssembly />
+    <CodeContractsCustomRewriterClass />
+    <CodeContractsLibPaths />
+    <CodeContractsExtraRewriteOptions />
+    <CodeContractsExtraAnalysisOptions />
+    <CodeContractsBaseLineFile />
+    <CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
+    <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+    <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+    <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug All|AnyCPU'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\Debug All\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>AnyCPU</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug All\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\x64\Debug\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>x64</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
-       <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-       <OutputPath>bin\x64\Release\</OutputPath>
-       <DefineConstants>TRACE</DefineConstants>
-       <Optimize>true</Optimize>
-       <DebugType>pdbonly</DebugType>
-       <PlatformTarget>x64</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Release\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
-       <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Test|x64'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\x64\Test\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>x64</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
-       <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Test\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Premium Debug|x64'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\x64\Premium Debug\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>x64</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Premium Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug All|x64'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\x64\Debug All\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>x64</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug All\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\x86\Debug\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>x86</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
-       <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
-       <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
-       <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
-       <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
-       <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
-       <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
-       <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
-       <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
-       <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
-       <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
-       <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
-       <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
-       <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
-       <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
-       <CodeContractsEmitXMLDocs>True</CodeContractsEmitXMLDocs>
-       <CodeContractsCustomRewriterAssembly />
-       <CodeContractsCustomRewriterClass />
-       <CodeContractsLibPaths />
-       <CodeContractsExtraRewriteOptions />
-       <CodeContractsExtraAnalysisOptions />
-       <CodeContractsBaseLineFile />
-       <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
-       <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
-       <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
-       <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
+    <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
+    <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
+    <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
+    <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
+    <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
+    <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
+    <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
+    <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
+    <CodeContractsEnumObligations>False</CodeContractsEnumObligations>
+    <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
+    <CodeContractsRunInBackground>True</CodeContractsRunInBackground>
+    <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
+    <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
+    <CodeContractsEmitXMLDocs>True</CodeContractsEmitXMLDocs>
+    <CodeContractsCustomRewriterAssembly />
+    <CodeContractsCustomRewriterClass />
+    <CodeContractsLibPaths />
+    <CodeContractsExtraRewriteOptions />
+    <CodeContractsExtraAnalysisOptions />
+    <CodeContractsBaseLineFile />
+    <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults>
+    <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
+    <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
+    <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-       <OutputPath>bin\x86\Release\</OutputPath>
-       <DefineConstants>TRACE</DefineConstants>
-       <Optimize>true</Optimize>
-       <DebugType>pdbonly</DebugType>
-       <PlatformTarget>x86</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Release\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
-       <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Test|x86'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\x86\Test\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>x86</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Test\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Premium Debug|x86'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\x86\Premium Debug\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>x86</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
-       <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Premium Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug All|x86'">
-       <DebugSymbols>true</DebugSymbols>
-       <OutputPath>bin\x86\Debug All\</OutputPath>
-       <DefineConstants>DEBUG;TRACE</DefineConstants>
-       <DebugType>full</DebugType>
-       <PlatformTarget>x86</PlatformTarget>
-       <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-       <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-       <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-       <ErrorReport>prompt</ErrorReport>
-       <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-       <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-       <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-       <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug All\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Pithos.Core.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
   </PropertyGroup>
   <ItemGroup>
-       <Reference Include="AsyncCtpLibrary">
-         <HintPath>..\Libraries\AsyncCtpLibrary.dll</HintPath>
-       </Reference>
-       <Reference Include="Caliburn.Micro, Version=1.2.0.0, Culture=neutral, PublicKeyToken=8e5891231f2ed21f, processorArchitecture=MSIL">
-         <HintPath>..\Libraries\Caliburn.Micro.dll</HintPath>
-       </Reference>
-       <Reference Include="Castle.ActiveRecord, Version=3.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
-         <HintPath>..\Libraries\Castle.ActiveRecord.dll</HintPath>
-       </Reference>
-       <Reference Include="Castle.Components.Validator, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
-         <HintPath>..\Libraries\Castle.Components.Validator.dll</HintPath>
-       </Reference>
-       <Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
-         <HintPath>..\Libraries\Castle.Core.dll</HintPath>
-       </Reference>
-       <Reference Include="Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
-         <HintPath>..\Libraries\Iesi.Collections.dll</HintPath>
-       </Reference>
-       <Reference Include="log4net">
-         <HintPath>..\Libraries\log4net.dll</HintPath>
-       </Reference>
-       <Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.0.0, Culture=neutral, PublicKeyToken=2cc55badaa91f4de, processorArchitecture=MSIL">
-         <SpecificVersion>False</SpecificVersion>
-         <HintPath>..\Libraries\Microsoft.WindowsAPICodePack.dll</HintPath>
-       </Reference>
-       <Reference Include="Microsoft.WindowsAPICodePack.Shell">
-         <HintPath>..\Libraries\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
-       </Reference>
-       <Reference Include="NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
-         <HintPath>..\Libraries\NHibernate.dll</HintPath>
-       </Reference>
-       <Reference Include="NHibernate.ByteCode.Castle, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
-         <HintPath>..\Libraries\NHibernate.ByteCode.Castle.dll</HintPath>
-       </Reference>
-       <Reference Include="NHibernate.Search, Version=0.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
-         <HintPath>..\Libraries\NHibernate.Search.dll</HintPath>
-       </Reference>
-       <Reference Include="System" />
-       <Reference Include="System.ComponentModel.Composition" />
-       <Reference Include="System.Core" />
-       <Reference Include="System.ServiceModel" />
-       <Reference Include="System.Threading.Tasks.Dataflow">
-         <HintPath>..\Libraries\System.Threading.Tasks.Dataflow.dll</HintPath>
-       </Reference>
-         <Reference Include="System.Data.SQLite, Version=1.0.76.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
-                 <SpecificVersion>True</SpecificVersion>
-                 <HintPath>..\Libraries\32\System.Data.SQLite.dll</HintPath>
-         </Reference>
-         <Reference Include="System.Xml.Linq" />
-       <Reference Include="System.Data.DataSetExtensions" />
-       <Reference Include="Microsoft.CSharp" />
-       <Reference Include="System.Data" />
-       <Reference Include="System.Xml" />
+    <Reference Include="AsyncCtpLibrary">
+      <HintPath>..\Libraries\AsyncCtpLibrary.dll</HintPath>
+    </Reference>
+    <Reference Include="Caliburn.Micro, Version=1.2.0.0, Culture=neutral, PublicKeyToken=8e5891231f2ed21f, processorArchitecture=MSIL">
+      <HintPath>..\Libraries\Caliburn.Micro.dll</HintPath>
+    </Reference>
+    <Reference Include="Castle.ActiveRecord, Version=3.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
+      <HintPath>..\Libraries\Castle.ActiveRecord.dll</HintPath>
+    </Reference>
+    <Reference Include="Castle.Components.Validator, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
+      <HintPath>..\Libraries\Castle.Components.Validator.dll</HintPath>
+    </Reference>
+    <Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
+      <HintPath>..\Libraries\Castle.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
+      <HintPath>..\Libraries\Iesi.Collections.dll</HintPath>
+    </Reference>
+    <Reference Include="log4net">
+      <HintPath>..\Libraries\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.0.0, Culture=neutral, PublicKeyToken=2cc55badaa91f4de, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Libraries\Microsoft.WindowsAPICodePack.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.WindowsAPICodePack.Shell">
+      <HintPath>..\Libraries\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
+    </Reference>
+    <Reference Include="NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
+      <HintPath>..\Libraries\NHibernate.dll</HintPath>
+    </Reference>
+    <Reference Include="NHibernate.ByteCode.Castle, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
+      <HintPath>..\Libraries\NHibernate.ByteCode.Castle.dll</HintPath>
+    </Reference>
+    <Reference Include="NHibernate.Search, Version=0.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
+      <HintPath>..\Libraries\NHibernate.Search.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.Composition" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Threading.Tasks.Dataflow">
+      <HintPath>..\Libraries\System.Threading.Tasks.Dataflow.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite, Version=1.0.76.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
+      <SpecificVersion>True</SpecificVersion>
+      <HintPath>..\Libraries\32\System.Data.SQLite.dll</HintPath>
+    </Reference>
+    <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="Agents\Agent.cs" />
-       <Compile Include="Agents\AgentLocator.cs" />
-       <Compile Include="Agents\BlockUpdater.cs" />
-       <Compile Include="Agents\CloudTransferAction.cs" />
-       <Compile Include="Agents\CollectionExtensions.cs" />
-       <Compile Include="Agents\FileAgent.cs" />
-       <Compile Include="Agents\BlockExtensions.cs" />
-       <Compile Include="Agents\FileSystemWatcherAdapter.cs" />
-       <Compile Include="Agents\MovedEventArgs.cs" />
-       <Compile Include="Agents\NetworkAgent.cs" />
-       <Compile Include="Agents\WorkflowAgent.cs" />
-       <Compile Include="DynamicDictionary.cs" />
-       <Compile Include="EnumerableExtensions.cs" />
-       <Compile Include="FileHashMap.cs" />
-       <Compile Include="FileState.cs" />
-       <Compile Include="IStatusNotification.cs" />
-       <Compile Include="IStatusService.cs" />
-       <Compile Include="JobQueue.cs" />
-       <Compile Include="NetworkGate.cs" />
-       <Compile Include="Agents\StatusAgent.cs" />
-       <Compile Include="IPithosWorkflow.cs" />
-       <Compile Include="IStatusKeeper.cs" />
-       <Compile Include="NativeMethods.cs" />
-       <Compile Include="PithosMonitor.cs" />
-       <Compile Include="PithosWorkflow.cs" />
-       <Compile Include="Properties\AssemblyInfo.cs" />
-       <Compile Include="StatusInfo.cs" />
-       <Compile Include="TaskExtensions.cs" />
-       <Compile Include="WorkflowState.cs" />
+    <Compile Include="Agents\Agent.cs" />
+    <Compile Include="Agents\AgentLocator.cs" />
+    <Compile Include="Agents\BlockUpdater.cs" />
+    <Compile Include="Agents\CloudTransferAction.cs" />
+    <Compile Include="Agents\CollectionExtensions.cs" />
+    <Compile Include="Agents\FileAgent.cs" />
+    <Compile Include="Agents\BlockExtensions.cs" />
+    <Compile Include="Agents\FileSystemWatcherAdapter.cs" />
+    <Compile Include="Agents\MovedEventArgs.cs" />
+    <Compile Include="Agents\NetworkAgent.cs" />
+    <Compile Include="Agents\ObjectInfoComparer.cs" />
+    <Compile Include="Agents\SnapshotDifferencer.cs" />
+    <Compile Include="Agents\WorkflowAgent.cs" />
+    <Compile Include="DynamicDictionary.cs" />
+    <Compile Include="EnumerableExtensions.cs" />
+    <Compile Include="FileHashMap.cs" />
+    <Compile Include="FileState.cs" />
+    <Compile Include="IStatusNotification.cs" />
+    <Compile Include="IStatusService.cs" />
+    <Compile Include="JobQueue.cs" />
+    <Compile Include="NetworkGate.cs" />
+    <Compile Include="Agents\StatusAgent.cs" />
+    <Compile Include="IPithosWorkflow.cs" />
+    <Compile Include="IStatusKeeper.cs" />
+    <Compile Include="NativeMethods.cs" />
+    <Compile Include="PithosMonitor.cs" />
+    <Compile Include="PithosWorkflow.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="StatusInfo.cs" />
+    <Compile Include="TaskExtensions.cs" />
+    <Compile Include="WorkflowState.cs" />
   </ItemGroup>
   <ItemGroup>
-       <ProjectReference Include="..\Libraries\ParallelExtensionsExtras\ParallelExtensionsExtras.csproj">
-         <Project>{C45218F8-09E7-4F57-85BC-5D8D2AC736A3}</Project>
-         <Name>ParallelExtensionsExtras</Name>
-       </ProjectReference>
-       <ProjectReference Include="..\Pithos.Interfaces\Pithos.Interfaces.csproj">
-         <Project>{7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}</Project>
-         <Name>Pithos.Interfaces</Name>
-       </ProjectReference>
-       <ProjectReference Include="..\Pithos.Network\Pithos.Network.csproj">
-         <Project>{C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}</Project>
-         <Name>Pithos.Network</Name>
-       </ProjectReference>
+    <ProjectReference Include="..\Libraries\ParallelExtensionsExtras\ParallelExtensionsExtras.csproj">
+      <Project>{C45218F8-09E7-4F57-85BC-5D8D2AC736A3}</Project>
+      <Name>ParallelExtensionsExtras</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Pithos.Interfaces\Pithos.Interfaces.csproj">
+      <Project>{7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}</Project>
+      <Name>Pithos.Interfaces</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Pithos.Network\Pithos.Network.csproj">
+      <Project>{C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}</Project>
+      <Name>Pithos.Network</Name>
+    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-       <None Include="packages.config">
-         <SubType>Designer</SubType>
-       </None>
-       <None Include="pithos.snk" />
+    <None Include="packages.config">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="pithos.snk" />
   </ItemGroup>
   <ItemGroup>
-       <Content Include="DbConfig.xml">
-         <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-         <SubType>Designer</SubType>
-       </Content>
+    <Content Include="DbConfig.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+      <SubType>Designer</SubType>
+    </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.