Pārlūkot izejas kodu

Merge branch 'master' of https://github.com/Reactive-Extensions/Rx.NET

Conflicts:
	Rx.NET/Source/Common.targets
	Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs
unknown 10 gadi atpakaļ
vecāks
revīzija
a13e3ff05b
100 mainītis faili ar 4370 papildinājumiem un 3067 dzēšanām
  1. 2 1
      AUTHORS.txt
  2. 36 2
      Ix.NET/Source/Interactive Extensions.sln
  3. 6 0
      Ix.NET/Source/Playground/App.config
  4. 72 0
      Ix.NET/Source/Playground/Playground.csproj
  5. 17 0
      Ix.NET/Source/Playground/Program.cs
  6. 36 0
      Ix.NET/Source/Playground/Properties/AssemblyInfo.cs
  7. 32 32
      Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Aggregates.cs
  8. 83 72
      Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Conversions.cs
  9. 9 9
      Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Creation.cs
  10. 9 9
      Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Exceptions.cs
  11. 17 17
      Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Multiple.cs
  12. 80 106
      Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Single.cs
  13. 73 15
      Ix.NET/Source/System.Interactive.Async/Disposables.cs
  14. 43 4
      Ix.NET/Source/System.Interactive.Async/TaskExt.cs
  15. 6 0
      Ix.NET/Source/System.Interactive/EnumerableEx.Creation.cs
  16. 0 5
      Ix.NET/Source/System.Interactive/IAwaitable.cs
  17. 15 4
      Ix.NET/Source/System.Interactive/IYielder.cs
  18. 76 10
      Ix.NET/Source/Tests/AsyncTests.Bugs.cs
  19. 17 10
      Ix.NET/Source/Tests/AsyncTests.Creation.cs
  20. 16 2
      Ix.NET/Source/Tests/AsyncTests.cs
  21. 42 3
      Ix.NET/Source/Tests/Tests.Creation.cs
  22. BIN
      Rx.NET/Documentation/Rx Design Guidelines.pdf
  23. 41 34
      Rx.NET/Source/Common.targets
  24. 0 6
      Rx.NET/Source/Microsoft.Reactive.Testing/Microsoft.Reactive.Testing.csproj
  25. 18 67
      Rx.NET/Source/Playground/Playground.csproj
  26. 2 2
      Rx.NET/Source/Playground/Program.cs
  27. 1 1
      Rx.NET/Source/Playground/app.config
  28. 44 0
      Rx.NET/Source/RunTests.bat
  29. 129 1056
      Rx.NET/Source/Rx.sln
  30. 1 0
      Rx.NET/Source/System.Reactive.Core/InternalsVisibleTo.cs
  31. 5 17
      Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs
  32. 2 2
      Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/DefaultScheduler.cs
  33. 63 53
      Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs
  34. 1 1
      Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.cs
  35. 1 1
      Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/Scheduler.Async.cs
  36. 3 3
      Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/Scheduler.Services.Emulation.cs
  37. 1 1
      Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs
  38. 39 0
      Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/TaskHelpers.cs
  39. 10 5
      Rx.NET/Source/System.Reactive.Core/Reactive/Disposables/CompositeDisposable.cs
  40. 144 0
      Rx.NET/Source/System.Reactive.Core/Reactive/Disposables/StableCompositeDisposable.cs
  41. 4 4
      Rx.NET/Source/System.Reactive.Core/Reactive/Internal/Constants.cs
  42. 33 18
      Rx.NET/Source/System.Reactive.Core/Reactive/Internal/ImmutableList.cs
  43. 1 1
      Rx.NET/Source/System.Reactive.Core/Reactive/Internal/Producer.cs
  44. 17 7
      Rx.NET/Source/System.Reactive.Core/Reactive/Internal/ScheduledObserver.cs
  45. 140 8
      Rx.NET/Source/System.Reactive.Core/Reactive/Internal/SystemClock.cs
  46. 33 0
      Rx.NET/Source/System.Reactive.Core/Reactive/Internal/TaskServices.Default.cs
  47. 47 0
      Rx.NET/Source/System.Reactive.Core/Reactive/Internal/TaskServices.cs
  48. 11 0
      Rx.NET/Source/System.Reactive.Core/Strings_Core.Generated.cs
  49. 3 0
      Rx.NET/Source/System.Reactive.Core/Strings_Core.resx
  50. 4 6
      Rx.NET/Source/System.Reactive.Core/System.Reactive.Core.csproj
  51. 0 6
      Rx.NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj
  52. 1 1
      Rx.NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs
  53. 1 1
      Rx.NET/Source/System.Reactive.Experimental/Reactive/Linq/QueryLanguageEx.cs
  54. 1 1
      Rx.NET/Source/System.Reactive.Experimental/Reactive/ListObservable.cs
  55. 0 6
      Rx.NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj
  56. 1 1
      Rx.NET/Source/System.Reactive.Interfaces/IObservable.cs
  57. 1 1
      Rx.NET/Source/System.Reactive.Interfaces/IObserver.cs
  58. 1 1
      Rx.NET/Source/System.Reactive.Interfaces/Reactive/Disposables/ICancelable.cs
  59. 0 6
      Rx.NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj
  60. 1 0
      Rx.NET/Source/System.Reactive.Linq/InternalsVisibleTo.cs
  61. 20 8
      Rx.NET/Source/System.Reactive.Linq/Reactive/Concurrency/VirtualTimeScheduler.cs
  62. 2 2
      Rx.NET/Source/System.Reactive.Linq/Reactive/Internal/Constants.cs
  63. 15 5
      Rx.NET/Source/System.Reactive.Linq/Reactive/Internal/Lookup.cs
  64. 788 0
      Rx.NET/Source/System.Reactive.Linq/Reactive/Internal/SortedDictionary.cs
  65. 34 4
      Rx.NET/Source/System.Reactive.Linq/Reactive/Internal/TailRecursiveSink.cs
  66. 1 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/GroupedObservable.cs
  67. 11 0
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs
  68. 196 0
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Async.cs
  69. 1 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs
  70. 4 4
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs
  71. 27 0
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs
  72. 7 14
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs
  73. 8 8
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs
  74. 1 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs
  75. 1 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs
  76. 8 8
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs
  77. 11 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs
  78. 1322 0
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.Generated.cs
  79. 134 0
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.Generated.tt
  80. 1 1306
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs
  81. 3 3
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs
  82. 12 8
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs
  83. 36 12
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs
  84. 38 28
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs
  85. 1 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs
  86. 11 2
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs
  87. 2 2
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs
  88. 4 4
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs
  89. 14 8
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs
  90. 1 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs
  91. 2 2
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs
  92. 1 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs
  93. 1 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs
  94. 2 2
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs
  95. 2 2
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs
  96. 2 2
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs
  97. 3 3
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs
  98. 1 1
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs
  99. 2 2
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs
  100. 148 0
      Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/WithLatestFrom.cs

+ 2 - 1
AUTHORS.txt

@@ -4,7 +4,7 @@ Rx and Ix.NET:
 Wes Dyer
 Wes Dyer
 Jeffrey van Gogh	
 Jeffrey van Gogh	
 Matthew Podwysocki 
 Matthew Podwysocki 
-Bart de Smet		
+Bart De Smet		
 Danny van Velzen
 Danny van Velzen
 Erik Meijer
 Erik Meijer
 Brian Beckman
 Brian Beckman
@@ -13,6 +13,7 @@ Georgi Chkodrov
 Arthur Watson
 Arthur Watson
 Gert Drapers
 Gert Drapers
 Mark Shields
 Mark Shields
+Eric Rozell
 
 
 Rx.js and Ix.js:
 Rx.js and Ix.js:
 Matthew Podwysocki
 Matthew Podwysocki

+ 36 - 2
Ix.NET/Source/Interactive Extensions.sln

@@ -1,7 +1,7 @@
 
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.30501.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.22512.0
 MinimumVisualStudioVersion = 10.0.40219.1
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Interactive", "System.Interactive\System.Interactive.csproj", "{8E4B04F0-915E-48F9-9796-76278C6094BD}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Interactive", "System.Interactive\System.Interactive.csproj", "{8E4B04F0-915E-48F9-9796-76278C6094BD}"
 EndProject
 EndProject
@@ -18,6 +18,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Interactive.Provider
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Interactive.Async", "System.Interactive.Async\System.Interactive.Async.csproj", "{7269A578-326A-4C3E-9874-A2D2600095BC}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Interactive.Async", "System.Interactive.Async\System.Interactive.Async.csproj", "{7269A578-326A-4C3E-9874-A2D2600095BC}"
 EndProject
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Playground", "Playground\Playground.csproj", "{45817D7B-A707-497B-89D3-37794B6E46C7}"
+EndProject
 Global
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Debug|Any CPU = Debug|Any CPU
@@ -156,6 +158,38 @@ Global
 		{7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Debug35|Any CPU.ActiveCfg = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Debug35|Any CPU.Build.0 = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Debug40|Any CPU.ActiveCfg = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Debug40|Any CPU.Build.0 = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Debug45|Any CPU.ActiveCfg = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Debug45|Any CPU.Build.0 = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.DebugPL|Any CPU.ActiveCfg = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.DebugPL|Any CPU.Build.0 = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.DebugSL5|Any CPU.ActiveCfg = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.DebugSL5|Any CPU.Build.0 = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.DebugWP7|Any CPU.ActiveCfg = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.DebugWP7|Any CPU.Build.0 = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.DebugWP8|Any CPU.ActiveCfg = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.DebugWP8|Any CPU.Build.0 = Debug|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Release35|Any CPU.ActiveCfg = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Release35|Any CPU.Build.0 = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Release40|Any CPU.ActiveCfg = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Release40|Any CPU.Build.0 = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Release45|Any CPU.ActiveCfg = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.Release45|Any CPU.Build.0 = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.ReleasePL|Any CPU.ActiveCfg = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.ReleasePL|Any CPU.Build.0 = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.ReleaseSL5|Any CPU.ActiveCfg = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.ReleaseSL5|Any CPU.Build.0 = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.ReleaseWP7|Any CPU.ActiveCfg = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.ReleaseWP7|Any CPU.Build.0 = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.ReleaseWP8|Any CPU.ActiveCfg = Release|Any CPU
+		{45817D7B-A707-497B-89D3-37794B6E46C7}.ReleaseWP8|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE

+ 6 - 0
Ix.NET/Source/Playground/App.config

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+</configuration>

+ 72 - 0
Ix.NET/Source/Playground/Playground.csproj

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.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>{45817D7B-A707-497B-89D3-37794B6E46C7}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Playground</RootNamespace>
+    <AssemblyName>Playground</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <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>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </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="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\System.Interactive.Async\System.Interactive.Async.csproj">
+      <Project>{7269a578-326a-4c3e-9874-a2d2600095bc}</Project>
+      <Name>System.Interactive.Async</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\System.Interactive.Providers\System.Interactive.Providers.csproj">
+      <Project>{6d62e966-469d-4a99-bd43-0a17fa14fb4f}</Project>
+      <Name>System.Interactive.Providers</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\System.Interactive\System.Interactive.csproj">
+      <Project>{8e4b04f0-915e-48f9-9796-76278c6094bd}</Project>
+      <Name>System.Interactive</Name>
+    </ProjectReference>
+  </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>

+ 17 - 0
Ix.NET/Source/Playground/Program.cs

@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Playground
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+        }
+    }
+}

+ 36 - 0
Ix.NET/Source/Playground/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+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("Playground")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Playground")]
+[assembly: AssemblyCopyright("Copyright ©  2015")]
+[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("45817d7b-a707-497b-89d3-37794b6e46c7")]
+
+// 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("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 32 - 32
Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Aggregates.cs

@@ -25,7 +25,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -89,7 +89,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -130,7 +130,7 @@ namespace System.Linq
             if (source == null)
             if (source == null)
                 throw new ArgumentNullException("source");
                 throw new ArgumentNullException("source");
 
 
-            return source.Aggregate(0, (c, _) => c + 1, cancellationToken);
+            return source.Aggregate(0, (c, _) => checked(c + 1), cancellationToken);
         }
         }
 
 
         public static Task<int> Count<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate, CancellationToken cancellationToken)
         public static Task<int> Count<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate, CancellationToken cancellationToken)
@@ -140,7 +140,7 @@ namespace System.Linq
             if (predicate == null)
             if (predicate == null)
                 throw new ArgumentNullException("predicate");
                 throw new ArgumentNullException("predicate");
 
 
-            return source.Where(predicate).Aggregate(0, (c, _) => c + 1, cancellationToken);
+            return source.Where(predicate).Aggregate(0, (c, _) => checked(c + 1), cancellationToken);
         }
         }
 
 
         public static Task<long> LongCount<TSource>(this IAsyncEnumerable<TSource> source, CancellationToken cancellationToken)
         public static Task<long> LongCount<TSource>(this IAsyncEnumerable<TSource> source, CancellationToken cancellationToken)
@@ -148,7 +148,7 @@ namespace System.Linq
             if (source == null)
             if (source == null)
                 throw new ArgumentNullException("source");
                 throw new ArgumentNullException("source");
 
 
-            return source.Aggregate(0L, (c, _) => c + 1, cancellationToken);
+            return source.Aggregate(0L, (c, _) => checked(c + 1), cancellationToken);
         }
         }
 
 
         public static Task<long> LongCount<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate, CancellationToken cancellationToken)
         public static Task<long> LongCount<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate, CancellationToken cancellationToken)
@@ -158,7 +158,7 @@ namespace System.Linq
             if (predicate == null)
             if (predicate == null)
                 throw new ArgumentNullException("predicate");
                 throw new ArgumentNullException("predicate");
 
 
-            return source.Where(predicate).Aggregate(0L, (c, _) => c + 1, cancellationToken);
+            return source.Where(predicate).Aggregate(0L, (c, _) => checked(c + 1), cancellationToken);
         }
         }
 
 
         public static Task<bool> All<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate, CancellationToken cancellationToken)
         public static Task<bool> All<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate, CancellationToken cancellationToken)
@@ -173,7 +173,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -215,7 +215,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -281,7 +281,7 @@ namespace System.Linq
 
 
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
-            e.MoveNext(cancellationToken).ContinueWith(t =>
+            e.MoveNext(cancellationToken).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -314,7 +314,7 @@ namespace System.Linq
 
 
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
-            e.MoveNext(cancellationToken).ContinueWith(t =>
+            e.MoveNext(cancellationToken).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -350,7 +350,7 @@ namespace System.Linq
             var hasLast = false;
             var hasLast = false;
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -397,7 +397,7 @@ namespace System.Linq
             var hasLast = false;
             var hasLast = false;
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -441,14 +441,14 @@ namespace System.Linq
 
 
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
-            e.MoveNext(cancellationToken).ContinueWith(t =>
+            e.MoveNext(cancellationToken).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
                     if (res)
                     if (res)
                     {
                     {
                         var result = e.Current;
                         var result = e.Current;
-                        e.MoveNext(cancellationToken).ContinueWith(t1 =>
+                        e.MoveNext(cancellationToken).Then(t1 =>
                         {
                         {
                             t1.Handle(tcs, res1 =>
                             t1.Handle(tcs, res1 =>
                             {
                             {
@@ -486,14 +486,14 @@ namespace System.Linq
 
 
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
-            e.MoveNext(cancellationToken).ContinueWith(t =>
+            e.MoveNext(cancellationToken).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
                     if (res)
                     if (res)
                     {
                     {
                         var result = e.Current;
                         var result = e.Current;
-                        e.MoveNext(cancellationToken).ContinueWith(t1 =>
+                        e.MoveNext(cancellationToken).Then(t1 =>
                         {
                         {
                             t1.Handle(tcs, res1 =>
                             t1.Handle(tcs, res1 =>
                             {
                             {
@@ -534,7 +534,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var next = default(Action<CancellationToken>);
             var next = default(Action<CancellationToken>);
-            next = ct => e.MoveNext(ct).ContinueWith(t =>
+            next = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -574,7 +574,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var next = default(Action<CancellationToken>);
             var next = default(Action<CancellationToken>);
-            next = ct => e.MoveNext(ct).ContinueWith(t =>
+            next = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -774,7 +774,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -812,7 +812,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -853,7 +853,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -891,7 +891,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -932,7 +932,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -970,7 +970,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -1011,7 +1011,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -1049,7 +1049,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -1090,7 +1090,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -1128,7 +1128,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {
@@ -1863,7 +1863,7 @@ namespace System.Linq
             if (source == null)
             if (source == null)
                 throw new ArgumentNullException("source");
                 throw new ArgumentNullException("source");
 
 
-            return source.Any(cancellationToken).ContinueWith(t => !t.Result);
+            return source.Any(cancellationToken).Then(t => !t.Result);
         }
         }
 
 
         public static Task<TSource> Min<TSource>(this IAsyncEnumerable<TSource> source, IComparer<TSource> comparer, CancellationToken cancellationToken)
         public static Task<TSource> Min<TSource>(this IAsyncEnumerable<TSource> source, IComparer<TSource> comparer, CancellationToken cancellationToken)
@@ -1873,7 +1873,7 @@ namespace System.Linq
             if (comparer == null)
             if (comparer == null)
                 throw new ArgumentNullException("comparer");
                 throw new ArgumentNullException("comparer");
 
 
-            return MinBy(source, x => x, comparer, cancellationToken).ContinueWith(t => t.Result.First());
+            return MinBy(source, x => x, comparer, cancellationToken).Then(t => t.Result.First());
         }
         }
 
 
         public static Task<IList<TSource>> MinBy<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, CancellationToken cancellationToken)
         public static Task<IList<TSource>> MinBy<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, CancellationToken cancellationToken)
@@ -1905,7 +1905,7 @@ namespace System.Linq
             if (comparer == null)
             if (comparer == null)
                 throw new ArgumentNullException("comparer");
                 throw new ArgumentNullException("comparer");
 
 
-            return MaxBy(source, x => x, comparer, cancellationToken).ContinueWith(t => t.Result.First());
+            return MaxBy(source, x => x, comparer, cancellationToken).Then(t => t.Result.First());
         }
         }
 
 
         public static Task<IList<TSource>> MaxBy<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, CancellationToken cancellationToken)
         public static Task<IList<TSource>> MaxBy<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, CancellationToken cancellationToken)
@@ -1943,7 +1943,7 @@ namespace System.Linq
             var e = source.GetEnumerator();
             var e = source.GetEnumerator();
 
 
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
-            f = ct => e.MoveNext(ct).ContinueWith(t =>
+            f = ct => e.MoveNext(ct).Then(t =>
             {
             {
                 t.Handle(tcs, res =>
                 t.Handle(tcs, res =>
                 {
                 {

+ 83 - 72
Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Conversions.cs

@@ -77,7 +77,7 @@ namespace System.Linq
                     {
                     {
                         if (Interlocked.CompareExchange(ref called, 1, 0) == 0)
                         if (Interlocked.CompareExchange(ref called, 1, 0) == 0)
                         {
                         {
-                            task.ContinueWith(continuedTask =>
+                            task.Then(continuedTask =>
                             {
                             {
                                 if (continuedTask.IsCanceled)
                                 if (continuedTask.IsCanceled)
                                     tcs.SetCanceled();
                                     tcs.SetCanceled();
@@ -106,36 +106,48 @@ namespace System.Linq
             return Create(() =>
             return Create(() =>
             {
             {
                 var observer = new ToAsyncEnumerableObserver<TSource>();
                 var observer = new ToAsyncEnumerableObserver<TSource>();
-                observer.Queue = new Queue<Either<TSource, Exception, bool>>();
 
 
                 var subscription = source.Subscribe(observer);
                 var subscription = source.Subscribe(observer);
 
 
                 return Create(
                 return Create(
                     (ct, tcs) =>
                     (ct, tcs) =>
                     {
                     {
-                        lock (observer.Queue)
+                        var hasValue = false;
+                        var hasCompleted = false;
+                        var error = default(Exception);
+
+                        lock (observer.SyncRoot)
                         {
                         {
-                            if (observer.Queue.Count > 0)
+                            if (observer.Values.Count > 0)
+                            {
+                                hasValue = true;
+                                observer.Current = observer.Values.Dequeue();
+                            }
+                            else if (observer.HasCompleted)
+                            {
+                                hasCompleted = true;
+                            }
+                            else if (observer.Error != null)
                             {
                             {
-                                var n = observer.Queue.Dequeue();
-                                n.Switch(
-                                    x =>
-                                    {
-                                        observer.Current = x;
-                                        tcs.TrySetResult(true);
-                                    },
-                                    ex =>
-                                    {
-                                        tcs.TrySetException(ex);
-                                    },
-                                    _ =>
-                                    {
-                                        tcs.TrySetResult(false);
-                                    }
-                                );
+                                error = observer.Error;
                             }
                             }
                             else
                             else
+                            {
                                 observer.TaskCompletionSource = tcs;
                                 observer.TaskCompletionSource = tcs;
+                            }
+                        }
+
+                        if (hasValue)
+                        {
+                            tcs.TrySetResult(true);
+                        }
+                        else if (hasCompleted)
+                        {
+                            tcs.TrySetResult(false);
+                        }
+                        else if (error != null)
+                        {
+                            tcs.TrySetException(error);
                         }
                         }
 
 
                         return tcs.Task;
                         return tcs.Task;
@@ -151,88 +163,87 @@ namespace System.Linq
 
 
         class ToAsyncEnumerableObserver<T> : IObserver<T>
         class ToAsyncEnumerableObserver<T> : IObserver<T>
         {
         {
-            public Queue<Either<T, Exception, bool>> Queue { get; set; }
-            public T Current { get; set; }
-            public TaskCompletionSource<bool> TaskCompletionSource { get; set; }
+            public ToAsyncEnumerableObserver()
+            {
+                Values = new Queue<T>();
+            }
+
+            public object SyncRoot
+            {
+                get { return Values; }
+            }
+
+            public readonly Queue<T> Values;
+            public Exception Error;
+            public bool HasCompleted;
+
+            public T Current;
+            public TaskCompletionSource<bool> TaskCompletionSource;
 
 
             public void OnCompleted()
             public void OnCompleted()
             {
             {
-                lock (Queue)
+                var tcs = default(TaskCompletionSource<bool>);
+
+                lock (SyncRoot)
                 {
                 {
-                    if (TaskCompletionSource == null)
-                        Queue.Enqueue(new Either<T, Exception, bool>.Choice3(true));
-                    else
+                    HasCompleted = true;
+
+                    if (TaskCompletionSource != null)
                     {
                     {
-                        TaskCompletionSource.SetResult(false);
+                        tcs = TaskCompletionSource;
                         TaskCompletionSource = null;
                         TaskCompletionSource = null;
                     }
                     }
                 }
                 }
+
+                if (tcs != null)
+                {
+                    tcs.SetResult(false);
+                }
             }
             }
 
 
             public void OnError(Exception error)
             public void OnError(Exception error)
             {
             {
-                lock (Queue)
+                var tcs = default(TaskCompletionSource<bool>);
+
+                lock (SyncRoot)
                 {
                 {
-                    if (TaskCompletionSource == null)
-                        Queue.Enqueue(new Either<T, Exception, bool>.Choice2(error));
-                    else
+                    Error = error;
+
+                    if (TaskCompletionSource != null)
                     {
                     {
-                        TaskCompletionSource.SetException(error);
+                        tcs = TaskCompletionSource;
                         TaskCompletionSource = null;
                         TaskCompletionSource = null;
                     }
                     }
                 }
                 }
+
+                if (tcs != null)
+                {
+                    tcs.SetException(error);
+                }
             }
             }
 
 
             public void OnNext(T value)
             public void OnNext(T value)
             {
             {
-                lock (Queue)
+                var tcs = default(TaskCompletionSource<bool>);
+
+                lock (SyncRoot)
                 {
                 {
                     if (TaskCompletionSource == null)
                     if (TaskCompletionSource == null)
-                        Queue.Enqueue(new Either<T, Exception, bool>.Choice1(value));
+                    {
+                        Values.Enqueue(value);
+                    }
                     else
                     else
                     {
                     {
                         Current = value;
                         Current = value;
-                        TaskCompletionSource.SetResult(true);
+
+                        tcs = TaskCompletionSource;
                         TaskCompletionSource = null;
                         TaskCompletionSource = null;
                     }
                     }
                 }
                 }
-            }
-        }
-
-        abstract class Either<T, U, V>
-        {
-            public abstract void Switch(Action<T> choice1, Action<U> choice2, Action<V> choice3);
-
-            public class Choice1 : Either<T, U, V>
-            {
-                public Choice1(T value) { Value = value; }
-                public T Value { get; private set; }
-
-                public override void Switch(Action<T> choice1, Action<U> choice2, Action<V> choice3)
-                {
-                    choice1(Value);
-                }
-            }
-
-            public class Choice2 : Either<T, U, V>
-            {
-                public Choice2(U value) { Value = value; }
-                public U Value { get; private set; }
-
-                public override void Switch(Action<T> choice1, Action<U> choice2, Action<V> choice3)
-                {
-                    choice2(Value);
-                }
-            }
-
-            public class Choice3 : Either<T, U, V>
-            {
-                public Choice3(V value) { Value = value; }
-                public V Value { get; private set; }
 
 
-                public override void Switch(Action<T> choice1, Action<U> choice2, Action<V> choice3)
+                if (tcs != null)
                 {
                 {
-                    choice3(Value);
+                    tcs.SetResult(true);
                 }
                 }
             }
             }
         }
         }
@@ -288,7 +299,7 @@ namespace System.Linq
 
 
                 f();
                 f();
 
 
-                return new CompositeDisposable(ctd, e);
+                return Disposable.Create(ctd, e);
             }
             }
         }
         }
 #endif
 #endif

+ 9 - 9
Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Creation.cs

@@ -76,7 +76,7 @@ namespace System.Linq
             public Task<bool> MoveNext(CancellationToken cancellationToken)
             public Task<bool> MoveNext(CancellationToken cancellationToken)
             {
             {
                 if (_disposed)
                 if (_disposed)
-                    return TaskExt.Return(false, CancellationToken.None);
+                    return TaskExt.False;
 
 
                 return _moveNext(cancellationToken);
                 return _moveNext(cancellationToken);
             }
             }
@@ -110,7 +110,7 @@ namespace System.Linq
                 throw new ArgumentNullException("exception");
                 throw new ArgumentNullException("exception");
 
 
             return Create(() => Create<TValue>(
             return Create(() => Create<TValue>(
-                ct => TaskExt.Throw<bool>(exception, ct),
+                ct => TaskExt.Throw<bool>(exception),
                 () => { throw new InvalidOperationException(); },
                 () => { throw new InvalidOperationException(); },
                 () => { })
                 () => { })
             );
             );
@@ -128,7 +128,7 @@ namespace System.Linq
         public static IAsyncEnumerable<TValue> Empty<TValue>()
         public static IAsyncEnumerable<TValue> Empty<TValue>()
         {
         {
             return Create(() => Create<TValue>(
             return Create(() => Create<TValue>(
-                ct => TaskExt.Return(false, ct),
+                ct => TaskExt.False,
                 () => { throw new InvalidOperationException(); },
                 () => { throw new InvalidOperationException(); },
                 () => { })
                 () => { })
             );
             );
@@ -155,7 +155,7 @@ namespace System.Linq
             return Create(() =>
             return Create(() =>
             {
             {
                 return Create(
                 return Create(
-                    ct => TaskExt.Return(true, ct),
+                    ct => TaskExt.True,
                     () => element,
                     () => element,
                     () => { }
                     () => { }
                 );
                 );
@@ -201,16 +201,16 @@ namespace System.Linq
                         }
                         }
                         catch (Exception ex)
                         catch (Exception ex)
                         {
                         {
-                            return TaskExt.Throw<bool>(ex, ct);
+                            return TaskExt.Throw<bool>(ex);
                         }
                         }
 
 
                         if (!b)
                         if (!b)
-                            return TaskExt.Return(false, ct);
+                            return TaskExt.False;
 
 
                         if (!started)
                         if (!started)
                             started = true;
                             started = true;
 
 
-                        return TaskExt.Return(true, ct);
+                        return TaskExt.True;
                     },
                     },
                     () => current,
                     () => current,
                     () => { }
                     () => { }
@@ -241,14 +241,14 @@ namespace System.Linq
                 }
                 }
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, resource, e);
+                var d = Disposable.Create(cts, resource, e);
 
 
                 var current = default(TSource);
                 var current = default(TSource);
 
 
                 return Create(
                 return Create(
                     (ct, tcs) =>
                     (ct, tcs) =>
                     {
                     {
-                        e.MoveNext(cts.Token).ContinueWith(t =>
+                        e.MoveNext(cts.Token).Then(t =>
                         {
                         {
                             t.Handle(tcs,
                             t.Handle(tcs,
                                 res =>
                                 res =>

+ 9 - 9
Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Exceptions.cs

@@ -23,7 +23,7 @@ namespace System.Linq
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
                 var a = new AssignableDisposable { Disposable = e };
                 var a = new AssignableDisposable { Disposable = e };
-                var d = new CompositeDisposable(cts, a);
+                var d = Disposable.Create(cts, a);
                 var done = false;
                 var done = false;
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
@@ -31,7 +31,7 @@ namespace System.Linq
                 {
                 {
                     if (!done)
                     if (!done)
                     {
                     {
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs,
                             t.Handle(tcs,
                                 res =>
                                 res =>
@@ -76,7 +76,7 @@ namespace System.Linq
                     }
                     }
                     else
                     else
                     {
                     {
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -133,7 +133,7 @@ namespace System.Linq
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
                 var a = new AssignableDisposable();
                 var a = new AssignableDisposable();
-                var d = new CompositeDisposable(cts, se, a);
+                var d = Disposable.Create(cts, se, a);
 
 
                 var error = default(Exception);
                 var error = default(Exception);
 
 
@@ -172,7 +172,7 @@ namespace System.Linq
                         a.Disposable = e;
                         a.Disposable = e;
                     }
                     }
 
 
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs,
                         t.Handle(tcs,
                             res =>
                             res =>
@@ -216,12 +216,12 @@ namespace System.Linq
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
                 var r = new Disposable(finallyAction);
                 var r = new Disposable(finallyAction);
-                var d = new CompositeDisposable(cts, e, r);
+                var d = Disposable.Create(cts, e, r);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -277,7 +277,7 @@ namespace System.Linq
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
                 var a = new AssignableDisposable();
                 var a = new AssignableDisposable();
-                var d = new CompositeDisposable(cts, se, a);
+                var d = Disposable.Create(cts, se, a);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
@@ -306,7 +306,7 @@ namespace System.Linq
                         a.Disposable = e;
                         a.Disposable = e;
                     }
                     }
 
 
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs,
                         t.Handle(tcs,
                             res =>
                             res =>

+ 17 - 17
Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Multiple.cs

@@ -23,10 +23,10 @@ namespace System.Linq
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
                 var a = new AssignableDisposable { Disposable = e };
                 var a = new AssignableDisposable { Disposable = e };
-                var d = new CompositeDisposable(cts, a);
+                var d = Disposable.Create(cts, a);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
-                f = (tcs, ct) => e.MoveNext(ct).ContinueWith(t =>
+                f = (tcs, ct) => e.MoveNext(ct).Then(t =>
                 {
                 {
                     t.Handle(tcs, res =>
                     t.Handle(tcs, res =>
                     {
                     {
@@ -81,7 +81,7 @@ namespace System.Linq
                 var current = default(TResult);
                 var current = default(TResult);
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e1, e2);
+                var d = Disposable.Create(cts, e1, e2);
 
 
                 return Create(
                 return Create(
                     (ct, tcs) =>
                     (ct, tcs) =>
@@ -92,7 +92,7 @@ namespace System.Linq
                             if (result)
                             if (result)
                                 current = selector(e1.Current, e2.Current);
                                 current = selector(e1.Current, e2.Current);
                             return result;
                             return result;
-                        }).ContinueWith(t =>
+                        }).Then(t =>
                         {
                         {
                             t.Handle(tcs, x => tcs.TrySetResult(x));
                             t.Handle(tcs, x => tcs.TrySetResult(x));
                         });
                         });
@@ -119,7 +119,7 @@ namespace System.Linq
                 var e = first.GetEnumerator();
                 var e = first.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var mapTask = default(Task<Dictionary<TSource, TSource>>);
                 var mapTask = default(Task<Dictionary<TSource, TSource>>);
                 var getMapTask = new Func<CancellationToken, Task<Dictionary<TSource, TSource>>>(ct =>
                 var getMapTask = new Func<CancellationToken, Task<Dictionary<TSource, TSource>>>(ct =>
@@ -132,7 +132,7 @@ namespace System.Linq
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).Zip(getMapTask(ct), (b, _) => b).ContinueWith(t =>
+                    e.MoveNext(ct).Zip(getMapTask(ct), (b, _) => b).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -185,7 +185,7 @@ namespace System.Linq
                 var e = first.GetEnumerator();
                 var e = first.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var mapTask = default(Task<Dictionary<TSource, TSource>>);
                 var mapTask = default(Task<Dictionary<TSource, TSource>>);
                 var getMapTask = new Func<CancellationToken, Task<Dictionary<TSource, TSource>>>(ct =>
                 var getMapTask = new Func<CancellationToken, Task<Dictionary<TSource, TSource>>>(ct =>
@@ -198,7 +198,7 @@ namespace System.Linq
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).Zip(getMapTask(ct), (b, _) => b).ContinueWith(t =>
+                    e.MoveNext(ct).Zip(getMapTask(ct), (b, _) => b).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -310,7 +310,7 @@ namespace System.Linq
                         tcs.TrySetResult(true);
                         tcs.TrySetResult(true);
                         return false;
                         return false;
                     }
                     }
-                }).ContinueWith(t =>
+                }).Then(t =>
                 {
                 {
                     t.Handle(tcs, res =>
                     t.Handle(tcs, res =>
                     {
                     {
@@ -369,16 +369,16 @@ namespace System.Linq
                 var current = default(TResult);
                 var current = default(TResult);
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, outerE);
+                var d = Disposable.Create(cts, outerE);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    getInnerMap(ct).ContinueWith(ti =>
+                    getInnerMap(ct).Then(ti =>
                     {
                     {
                         ti.Handle(tcs, map =>
                         ti.Handle(tcs, map =>
                         {
                         {
-                            outerE.MoveNext(ct).ContinueWith(to =>
+                            outerE.MoveNext(ct).Then(to =>
                             {
                             {
                                 to.Handle(tcs, res =>
                                 to.Handle(tcs, res =>
                                 {
                                 {
@@ -474,7 +474,7 @@ namespace System.Linq
                 var ie = inner.GetEnumerator();
                 var ie = inner.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, oe, ie);
+                var d = Disposable.Create(cts, oe, ie);
 
 
                 var current = default(TResult);
                 var current = default(TResult);
                 var useOuter = true;
                 var useOuter = true;
@@ -524,7 +524,7 @@ namespace System.Linq
                     });
                     });
 
 
                     if (b)
                     if (b)
-                        oe.MoveNext(ct).ContinueWith(t =>
+                        oe.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -576,7 +576,7 @@ namespace System.Linq
                             });
                             });
                         });
                         });
                     else
                     else
-                        ie.MoveNext(ct).ContinueWith(t =>
+                        ie.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -682,7 +682,7 @@ namespace System.Linq
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
                 var a = new AssignableDisposable();
                 var a = new AssignableDisposable();
-                var d = new CompositeDisposable(cts, se, a);
+                var d = Disposable.Create(cts, se, a);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
@@ -711,7 +711,7 @@ namespace System.Linq
                         a.Disposable = e;
                         a.Disposable = e;
                     }
                     }
 
 
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {

+ 80 - 106
Ix.NET/Source/System.Interactive.Async/AsyncEnumerable.Single.cs

@@ -22,12 +22,12 @@ namespace System.Linq
                 var current = default(TResult);
                 var current = default(TResult);
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 return Create(
                 return Create(
                     (ct, tcs) =>
                     (ct, tcs) =>
                     {
                     {
-                        e.MoveNext(cts.Token).ContinueWith(t =>
+                        e.MoveNext(cts.Token).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -74,12 +74,12 @@ namespace System.Linq
                 var index = 0;
                 var index = 0;
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 return Create(
                 return Create(
                     (ct, tcs) =>
                     (ct, tcs) =>
                     {
                     {
-                        e.MoveNext(cts.Token).ContinueWith(t =>
+                        e.MoveNext(cts.Token).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -87,7 +87,7 @@ namespace System.Linq
                                 {
                                 {
                                     try
                                     try
                                     {
                                     {
-                                        current = selector(e.Current, index++);
+                                        current = selector(e.Current, checked(index++));
                                     }
                                     }
                                     catch (Exception ex)
                                     catch (Exception ex)
                                     {
                                     {
@@ -132,12 +132,12 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -190,12 +190,12 @@ namespace System.Linq
                 var index = 0;
                 var index = 0;
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -204,7 +204,7 @@ namespace System.Linq
                                 var b = false;
                                 var b = false;
                                 try
                                 try
                                 {
                                 {
-                                    b = predicate(e.Current, index++);
+                                    b = predicate(e.Current, checked(index++));
                                 }
                                 }
                                 catch (Exception ex)
                                 catch (Exception ex)
                                 {
                                 {
@@ -244,35 +244,20 @@ namespace System.Linq
 
 
             return Create(() =>
             return Create(() =>
             {
             {
-                // A lock seems inevitable. Disposal of the outer enumerator and completion of
-                // MoveNext of the inner enumerator can happen concurrently.
-                var syncRoot = new object();
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
                 var ie = default(IAsyncEnumerator<TResult>);
                 var ie = default(IAsyncEnumerator<TResult>);
 
 
-                var disposeIe = new Action(() =>
-                {
-                    IAsyncEnumerator<TResult> localIe;
-
-                    lock (syncRoot)
-                    {
-                        localIe = ie;
-                        ie = null;
-                    }
-
-                    if (localIe != null)
-                        localIe.Dispose();
-                });
+                var innerDisposable = new AssignableDisposable();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, new Disposable(disposeIe), e);
+                var d = Disposable.Create(cts, innerDisposable, e);
 
 
                 var outer = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var outer = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var inner = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var inner = default(Action<TaskCompletionSource<bool>, CancellationToken>);
 
 
                 inner = (tcs, ct) =>
                 inner = (tcs, ct) =>
                 {
                 {
-                    ie.MoveNext(ct).ContinueWith(t =>
+                    ie.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -282,7 +267,7 @@ namespace System.Linq
                             }
                             }
                             else
                             else
                             {
                             {
-                                disposeIe();
+                                innerDisposable.Disposable = null;
                                 outer(tcs, ct);
                                 outer(tcs, ct);
                             }
                             }
                         });
                         });
@@ -291,7 +276,7 @@ namespace System.Linq
 
 
                 outer = (tcs, ct) =>
                 outer = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -300,6 +285,8 @@ namespace System.Linq
                                 try
                                 try
                                 {
                                 {
                                     ie = selector(e.Current).GetEnumerator();
                                     ie = selector(e.Current).GetEnumerator();
+                                    innerDisposable.Disposable = ie;
+
                                     inner(tcs, ct);
                                     inner(tcs, ct);
                                 }
                                 }
                                 catch (Exception ex)
                                 catch (Exception ex)
@@ -338,37 +325,22 @@ namespace System.Linq
 
 
             return Create(() =>
             return Create(() =>
             {
             {
-                // A lock seems inevitable. Disposal of the outer enumerator and completion of
-                // MoveNext of the inner enumerator can happen concurrently.
-                var syncRoot = new object();
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
                 var ie = default(IAsyncEnumerator<TResult>);
                 var ie = default(IAsyncEnumerator<TResult>);
 
 
-                var disposeIe = new Action(() =>
-                {
-                    IAsyncEnumerator<TResult> localIe;
-
-                    lock (syncRoot)
-                    {
-                        localIe = ie;
-                        ie = null;
-                    }
-
-                    if (localIe != null)
-                        localIe.Dispose();
-                });
-
                 var index = 0;
                 var index = 0;
 
 
+                var innerDisposable = new AssignableDisposable();
+
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, new Disposable(disposeIe), e);
+                var d = Disposable.Create(cts, innerDisposable, e);
 
 
                 var outer = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var outer = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var inner = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var inner = default(Action<TaskCompletionSource<bool>, CancellationToken>);
 
 
                 inner = (tcs, ct) =>
                 inner = (tcs, ct) =>
                 {
                 {
-                    ie.MoveNext(ct).ContinueWith(t =>
+                    ie.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -378,7 +350,7 @@ namespace System.Linq
                             }
                             }
                             else
                             else
                             {
                             {
-                                disposeIe();
+                                innerDisposable.Disposable = null;
                                 outer(tcs, ct);
                                 outer(tcs, ct);
                             }
                             }
                         });
                         });
@@ -387,7 +359,7 @@ namespace System.Linq
 
 
                 outer = (tcs, ct) =>
                 outer = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -395,7 +367,9 @@ namespace System.Linq
                             {
                             {
                                 try
                                 try
                                 {
                                 {
-                                    ie = selector(e.Current, index++).GetEnumerator();
+                                    ie = selector(e.Current, checked(index++)).GetEnumerator();
+                                    innerDisposable.Disposable = ie;
+
                                     inner(tcs, ct);
                                     inner(tcs, ct);
                                 }
                                 }
                                 catch (Exception ex)
                                 catch (Exception ex)
@@ -478,15 +452,15 @@ namespace System.Linq
                 var n = count;
                 var n = count;
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 return Create(
                 return Create(
                     (ct, tcs) =>
                     (ct, tcs) =>
                     {
                     {
                         if (n == 0)
                         if (n == 0)
-                            return TaskExt.Return(false, cts.Token);
+                            return TaskExt.False;
 
 
-                        e.MoveNext(cts.Token).ContinueWith(t =>
+                        e.MoveNext(cts.Token).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -519,12 +493,12 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 return Create(
                 return Create(
                     (ct, tcs) =>
                     (ct, tcs) =>
                     {
                     {
-                        e.MoveNext(cts.Token).ContinueWith(t =>
+                        e.MoveNext(cts.Token).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -573,12 +547,12 @@ namespace System.Linq
                 var index = 0;
                 var index = 0;
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 return Create(
                 return Create(
                     (ct, tcs) =>
                     (ct, tcs) =>
                     {
                     {
-                        e.MoveNext(cts.Token).ContinueWith(t =>
+                        e.MoveNext(cts.Token).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -588,7 +562,7 @@ namespace System.Linq
 
 
                                     try
                                     try
                                     {
                                     {
-                                        b = predicate(e.Current, index++);
+                                        b = predicate(e.Current, checked(index++));
                                     }
                                     }
                                     catch (Exception ex)
                                     catch (Exception ex)
                                     {
                                     {
@@ -627,20 +601,20 @@ namespace System.Linq
                 var n = count;
                 var n = count;
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
                     if (n == 0)
                     if (n == 0)
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, x => tcs.TrySetResult(x));
                             t.Handle(tcs, x => tcs.TrySetResult(x));
                         });
                         });
                     else
                     else
                     {
                     {
                         --n;
                         --n;
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -678,13 +652,13 @@ namespace System.Linq
                 var skipping = true;
                 var skipping = true;
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
                     if (skipping)
                     if (skipping)
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -713,7 +687,7 @@ namespace System.Linq
                             });
                             });
                         });
                         });
                     else
                     else
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, x => tcs.TrySetResult(x));
                             t.Handle(tcs, x => tcs.TrySetResult(x));
                         });
                         });
@@ -745,13 +719,13 @@ namespace System.Linq
                 var index = 0;
                 var index = 0;
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
                     if (skipping)
                     if (skipping)
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -760,7 +734,7 @@ namespace System.Linq
                                     var result = false;
                                     var result = false;
                                     try
                                     try
                                     {
                                     {
-                                        result = predicate(e.Current, index++);
+                                        result = predicate(e.Current, checked(index++));
                                     }
                                     }
                                     catch (Exception ex)
                                     catch (Exception ex)
                                     {
                                     {
@@ -780,7 +754,7 @@ namespace System.Linq
                             });
                             });
                         });
                         });
                     else
                     else
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, x => tcs.TrySetResult(x));
                             t.Handle(tcs, x => tcs.TrySetResult(x));
                         });
                         });
@@ -811,7 +785,7 @@ namespace System.Linq
                 var current = default(TSource);
                 var current = default(TSource);
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
@@ -819,7 +793,7 @@ namespace System.Linq
                     if (done)
                     if (done)
                         tcs.TrySetResult(false);
                         tcs.TrySetResult(false);
                     else
                     else
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -898,21 +872,21 @@ namespace System.Linq
                 var stack = default(Stack<TSource>);
                 var stack = default(Stack<TSource>);
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 return Create(
                 return Create(
                     (ct, tcs) =>
                     (ct, tcs) =>
                     {
                     {
                         if (stack == null)
                         if (stack == null)
                         {
                         {
-                            Create(() => e).Aggregate(new Stack<TSource>(), (s, x) => { s.Push(x); return s; }, cts.Token).ContinueWith(t =>
+                            Create(() => e).Aggregate(new Stack<TSource>(), (s, x) => { s.Push(x); return s; }, cts.Token).Then(t =>
                             {
                             {
                                 t.Handle(tcs, res =>
                                 t.Handle(tcs, res =>
                                 {
                                 {
                                     stack = res;
                                     stack = res;
                                     tcs.TrySetResult(stack.Count > 0);
                                     tcs.TrySetResult(stack.Count > 0);
                                 });
                                 });
-                            }, cts.Token);
+                            });
                         }
                         }
                         else
                         else
                         {
                         {
@@ -948,7 +922,7 @@ namespace System.Linq
                             var tcs = new TaskCompletionSource<bool>();
                             var tcs = new TaskCompletionSource<bool>();
                             if (current == null)
                             if (current == null)
                             {
                             {
-                                source.ToList(ct).ContinueWith(t =>
+                                source.ToList(ct).Then(t =>
                                 {
                                 {
                                     t.Handle(tcs, res =>
                                     t.Handle(tcs, res =>
                                     {
                                     {
@@ -1092,14 +1066,14 @@ namespace System.Linq
 
 
                     var cts = new CancellationTokenDisposable();
                     var cts = new CancellationTokenDisposable();
                     var d1 = new AssignableDisposable();
                     var d1 = new AssignableDisposable();
-                    var d = new CompositeDisposable(cts, e, d1);
+                    var d = Disposable.Create(cts, e, d1);
 
 
                     var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                     var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                     var g = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                     var g = default(Action<TaskCompletionSource<bool>, CancellationToken>);
 
 
                     f = (tcs, ct) =>
                     f = (tcs, ct) =>
                     {
                     {
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -1223,7 +1197,7 @@ namespace System.Linq
                             e.Dispose();
                             e.Dispose();
                     }
                     }
                 );
                 );
-                var d = new CompositeDisposable(cts, refCount);
+                var d = Disposable.Create(cts, refCount);
 
 
                 var iterateSource = default(Func<CancellationToken, Task<bool>>);
                 var iterateSource = default(Func<CancellationToken, Task<bool>>);
                 iterateSource = ct =>
                 iterateSource = ct =>
@@ -1248,7 +1222,7 @@ namespace System.Linq
                         return task;
                         return task;
                     }
                     }
 
 
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs,
                         t.Handle(tcs,
                             res =>
                             res =>
@@ -1310,7 +1284,7 @@ namespace System.Linq
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    iterateSource(ct).ContinueWith(t =>
+                    iterateSource(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs,
                         t.Handle(tcs,
                             res =>
                             res =>
@@ -1478,7 +1452,7 @@ namespace System.Linq
                 var index = -1;
                 var index = -1;
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, sourceDisposable);
+                var d = Disposable.Create(cts, sourceDisposable);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
@@ -1500,7 +1474,7 @@ namespace System.Linq
                     }
                     }
                     else
                     else
                     {
                     {
-                        iterateSource(ct).ContinueWith(t =>
+                        iterateSource(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -1595,14 +1569,14 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var current = default(TSource);
                 var current = default(TSource);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         if (!t.IsCanceled)
                         if (!t.IsCanceled)
                         {
                         {
@@ -1694,7 +1668,7 @@ namespace System.Linq
             var f = default(Action<CancellationToken>);
             var f = default(Action<CancellationToken>);
             f = ct =>
             f = ct =>
             {
             {
-                e.MoveNext(ct).ContinueWith(t =>
+                e.MoveNext(ct).Then(t =>
                 {
                 {
                     t.Handle(tcs, res =>
                     t.Handle(tcs, res =>
                     {
                     {
@@ -1738,7 +1712,7 @@ namespace System.Linq
                 var current = default(TSource);
                 var current = default(TSource);
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, a);
+                var d = Disposable.Create(cts, a);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
@@ -1764,7 +1738,7 @@ namespace System.Linq
                         a.Disposable = e;
                         a.Disposable = e;
                     }
                     }
 
 
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -1806,7 +1780,7 @@ namespace System.Linq
                 var current = default(TSource);
                 var current = default(TSource);
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, a);
+                var d = Disposable.Create(cts, a);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
@@ -1826,7 +1800,7 @@ namespace System.Linq
                         a.Disposable = e;
                         a.Disposable = e;
                     }
                     }
 
 
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -1866,12 +1840,12 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -1935,7 +1909,7 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var buffers = new Queue<IList<TSource>>();
                 var buffers = new Queue<IList<TSource>>();
 
 
@@ -1949,7 +1923,7 @@ namespace System.Linq
                 {
                 {
                     if (!stopped)
                     if (!stopped)
                     {
                     {
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -2081,7 +2055,7 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var currentKey = default(TKey);
                 var currentKey = default(TKey);
                 var hasCurrentKey = false;
                 var hasCurrentKey = false;
@@ -2090,7 +2064,7 @@ namespace System.Linq
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -2161,7 +2135,7 @@ namespace System.Linq
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
                 var a = new AssignableDisposable();
                 var a = new AssignableDisposable();
-                var d = new CompositeDisposable(cts, a);
+                var d = Disposable.Create(cts, a);
 
 
                 var queue = new Queue<IAsyncEnumerable<TSource>>();
                 var queue = new Queue<IAsyncEnumerable<TSource>>();
                 queue.Enqueue(source);
                 queue.Enqueue(source);
@@ -2197,7 +2171,7 @@ namespace System.Linq
                     }
                     }
                     else
                     else
                     {
                     {
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -2254,7 +2228,7 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var acc = seed;
                 var acc = seed;
                 var current = default(TAccumulate);
                 var current = default(TAccumulate);
@@ -2262,7 +2236,7 @@ namespace System.Linq
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -2313,7 +2287,7 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var hasSeed = false;
                 var hasSeed = false;
                 var acc = default(TSource);
                 var acc = default(TSource);
@@ -2322,7 +2296,7 @@ namespace System.Linq
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {
@@ -2382,7 +2356,7 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var q = new Queue<TSource>(count);
                 var q = new Queue<TSource>(count);
                 var done = false;
                 var done = false;
@@ -2393,7 +2367,7 @@ namespace System.Linq
                 {
                 {
                     if (!done)
                     if (!done)
                     {
                     {
-                        e.MoveNext(ct).ContinueWith(t =>
+                        e.MoveNext(ct).Then(t =>
                         {
                         {
                             t.Handle(tcs, res =>
                             t.Handle(tcs, res =>
                             {
                             {
@@ -2453,7 +2427,7 @@ namespace System.Linq
                 var e = source.GetEnumerator();
                 var e = source.GetEnumerator();
 
 
                 var cts = new CancellationTokenDisposable();
                 var cts = new CancellationTokenDisposable();
-                var d = new CompositeDisposable(cts, e);
+                var d = Disposable.Create(cts, e);
 
 
                 var q = new Queue<TSource>();
                 var q = new Queue<TSource>();
                 var current = default(TSource);
                 var current = default(TSource);
@@ -2461,7 +2435,7 @@ namespace System.Linq
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 var f = default(Action<TaskCompletionSource<bool>, CancellationToken>);
                 f = (tcs, ct) =>
                 f = (tcs, ct) =>
                 {
                 {
-                    e.MoveNext(ct).ContinueWith(t =>
+                    e.MoveNext(ct).Then(t =>
                     {
                     {
                         t.Handle(tcs, res =>
                         t.Handle(tcs, res =>
                         {
                         {

+ 73 - 15
Ix.NET/Source/System.Interactive.Async/Disposables.cs

@@ -1,26 +1,33 @@
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
-using System;
-using System.Collections.Generic;
 using System.Threading;
 using System.Threading;
 
 
 namespace System.Linq
 namespace System.Linq
 {
 {
     class CancellationTokenDisposable : IDisposable
     class CancellationTokenDisposable : IDisposable
     {
     {
-        private CancellationTokenSource cts = new CancellationTokenSource();
+        private readonly CancellationTokenSource cts = new CancellationTokenSource();
 
 
-        public CancellationToken Token { get { return cts.Token; } }
+        public CancellationToken Token
+        {
+            get
+            {
+                return cts.Token;
+            }
+        }
 
 
         public void Dispose()
         public void Dispose()
         {
         {
             if (!cts.IsCancellationRequested)
             if (!cts.IsCancellationRequested)
+            {
                 cts.Cancel();
                 cts.Cancel();
+            }
         }
         }
     }
     }
 
 
     class CompositeDisposable : IDisposable
     class CompositeDisposable : IDisposable
     {
     {
-        private readonly IDisposable[] _dispose;
+        private static IDisposable[] s_empty = new IDisposable[0];
+        private IDisposable[] _dispose;
 
 
         public CompositeDisposable(params IDisposable[] dispose)
         public CompositeDisposable(params IDisposable[] dispose)
         {
         {
@@ -29,14 +36,18 @@ namespace System.Linq
 
 
         public void Dispose()
         public void Dispose()
         {
         {
-            foreach (var d in _dispose)
+            var dispose = Interlocked.Exchange(ref _dispose, s_empty);
+
+            foreach (var d in dispose)
+            {
                 d.Dispose();
                 d.Dispose();
+            }
         }
         }
     }
     }
 
 
     class AssignableDisposable : IDisposable
     class AssignableDisposable : IDisposable
     {
     {
-        private object _gate = new object();
+        private readonly object _gate = new object();
         private IDisposable _disposable;
         private IDisposable _disposable;
         private bool _disposed;
         private bool _disposed;
 
 
@@ -46,13 +57,14 @@ namespace System.Linq
             {
             {
                 lock (_gate)
                 lock (_gate)
                 {
                 {
-                    if (_disposable != null)
-                        _disposable.Dispose();
+                    DisposeInner();
 
 
                     _disposable = value;
                     _disposable = value;
 
 
                     if (_disposed)
                     if (_disposed)
-                        _disposable.Dispose();
+                    {
+                        DisposeInner();
+                    }
                 }
                 }
             }
             }
         }
         }
@@ -64,26 +76,72 @@ namespace System.Linq
                 if (!_disposed)
                 if (!_disposed)
                 {
                 {
                     _disposed = true;
                     _disposed = true;
-
-                    if (_disposable != null)
-                        _disposable.Dispose();
+                    DisposeInner();
                 }
                 }
             }
             }
         }
         }
+
+        private void DisposeInner()
+        {
+            if (_disposable != null)
+            {
+                _disposable.Dispose();
+                _disposable = null;
+            }
+        }
     }
     }
 
 
     class Disposable : IDisposable
     class Disposable : IDisposable
     {
     {
-        private readonly Action _dispose;
+        private static Action s_nop = () => { };
+        private Action _dispose;
 
 
         public Disposable(Action dispose)
         public Disposable(Action dispose)
         {
         {
             _dispose = dispose;
             _dispose = dispose;
         }
         }
 
 
+        public static IDisposable Create(IDisposable d1, IDisposable d2)
+        {
+            return new BinaryDisposable(d1, d2);
+        }
+
+        public static IDisposable Create(params IDisposable[] disposables)
+        {
+            return new CompositeDisposable(disposables);
+        }
+
+        public void Dispose()
+        {
+            var dispose = Interlocked.Exchange(ref _dispose, s_nop);
+            dispose();
+        }
+    }
+
+    class BinaryDisposable : IDisposable
+    {
+        private IDisposable _d1;
+        private IDisposable _d2;
+
+        public BinaryDisposable(IDisposable d1, IDisposable d2)
+        {
+            _d1 = d1;
+            _d2 = d2;
+        }
+
         public void Dispose()
         public void Dispose()
         {
         {
-            _dispose();
+            var d1 = Interlocked.Exchange(ref _d1, null);
+            if (d1 != null)
+            {
+                d1.Dispose();
+
+                var d2 = Interlocked.Exchange(ref _d2, null);
+                if (d2 != null)
+                {
+                    d2.Dispose();
+                }
+            }
         }
         }
     }
     }
 }
 }

+ 43 - 4
Ix.NET/Source/System.Interactive.Async/TaskExt.cs

@@ -7,14 +7,23 @@ namespace System.Threading.Tasks
 {
 {
     static class TaskExt
     static class TaskExt
     {
     {
-        public static Task<T> Return<T>(T value, CancellationToken cancellationToken)
+        public static readonly Task<bool> True;
+        public static readonly Task<bool> False;
+
+        static TaskExt()
+        {
+            True = Return(true);
+            False = Return(false);
+        }
+
+        public static Task<T> Return<T>(T value)
         {
         {
             var tcs = new TaskCompletionSource<T>();
             var tcs = new TaskCompletionSource<T>();
             tcs.TrySetResult(value);
             tcs.TrySetResult(value);
             return tcs.Task;
             return tcs.Task;
         }
         }
 
 
-        public static Task<T> Throw<T>(Exception exception, CancellationToken cancellationToken)
+        public static Task<T> Throw<T>(Exception exception)
         {
         {
             var tcs = new TaskCompletionSource<T>();
             var tcs = new TaskCompletionSource<T>();
             tcs.TrySetException(exception);
             tcs.TrySetException(exception);
@@ -23,12 +32,22 @@ namespace System.Threading.Tasks
 
 
         public static void Handle<T, R>(this Task<T> task, TaskCompletionSource<R> tcs, Action<T> success)
         public static void Handle<T, R>(this Task<T> task, TaskCompletionSource<R> tcs, Action<T> success)
         {
         {
-            Handle(task, tcs, success, ex => tcs.TrySetException(ex), () => tcs.TrySetCanceled());
+            if (task.IsFaulted)
+                tcs.TrySetException(task.Exception);
+            else if (task.IsCanceled)
+                tcs.TrySetCanceled();
+            else if (task.IsCompleted)
+                success(task.Result);
         }
         }
 
 
         public static void Handle<T, R>(this Task<T> task, TaskCompletionSource<R> tcs, Action<T> success, Action<AggregateException> error)
         public static void Handle<T, R>(this Task<T> task, TaskCompletionSource<R> tcs, Action<T> success, Action<AggregateException> error)
         {
         {
-            Handle(task, tcs, success, error, () => tcs.TrySetCanceled());
+            if (task.IsFaulted)
+                error(task.Exception);
+            else if (task.IsCanceled)
+                tcs.TrySetCanceled();
+            else if (task.IsCompleted)
+                success(task.Result);
         }
         }
 
 
         public static void Handle<T, R>(this Task<T> task, TaskCompletionSource<R> tcs, Action<T> success, Action<AggregateException> error, Action canceled)
         public static void Handle<T, R>(this Task<T> task, TaskCompletionSource<R> tcs, Action<T> success, Action<AggregateException> error, Action canceled)
@@ -57,6 +76,26 @@ namespace System.Threading.Tasks
             return task;
             return task;
         }
         }
 
 
+        public static Task Then<T>(this Task<T> task, Action<Task<T>> continuation)
+        {
+            //
+            // Central location to deal with continuations; allows for experimentation with flags.
+            // Note that right now, we don't go for synchronous execution. Users can block on the
+            // task returned from MoveNext, which can cause deadlocks (e.g. typical uses of GroupBy
+            // involve some aggregate). We'd need deeper asynchrony to make this work with less
+            // spawning of tasks.
+            //
+            return task.ContinueWith(continuation);
+        }
+
+        public static Task<R> Then<T, R>(this Task<T> task, Func<Task<T>, R> continuation)
+        {
+            //
+            // See comment on Then<T> for rationale.
+            //
+            return task.ContinueWith(continuation);
+        }
+
         public static Task<bool> UsingEnumeratorSync(this Task<bool> task, IDisposable disposable)
         public static Task<bool> UsingEnumeratorSync(this Task<bool> task, IDisposable disposable)
         {
         {
             var tcs = new TaskCompletionSource<bool>();
             var tcs = new TaskCompletionSource<bool>();

+ 6 - 0
Ix.NET/Source/System.Interactive/EnumerableEx.Creation.cs

@@ -21,6 +21,12 @@ namespace System.Linq
         }
         }
 
 
 #if HAS_AWAIT
 #if HAS_AWAIT
+        /// <summary>
+        /// Creates an enumerable sequence based on an asynchronous method that provides a yielder.
+        /// </summary>
+        /// <typeparam name="T">Result sequence element type.</typeparam>
+        /// <param name="create">Delegate implementing an asynchronous method that can use the specified yielder to yield return values.</param>
+        /// <returns>Sequence that will use the asynchronous method to obtain its elements.</returns>
         public static IEnumerable<T> Create<T>(Action<IYielder<T>> create)
         public static IEnumerable<T> Create<T>(Action<IYielder<T>> create)
         {
         {
             if (create == null)
             if (create == null)

+ 0 - 5
Ix.NET/Source/System.Interactive/IAwaitable.cs

@@ -1,11 +1,6 @@
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
 #if HAS_AWAIT
 #if HAS_AWAIT
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
 using System.Runtime.CompilerServices;
 using System.Runtime.CompilerServices;
-using System.Threading;
-using System.Threading.Tasks;
 
 
 namespace System.Linq
 namespace System.Linq
 {
 {

+ 15 - 4
Ix.NET/Source/System.Interactive/IYielder.cs

@@ -1,15 +1,26 @@
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
-using System;
-using System.Collections.Generic;
-using System.Runtime.CompilerServices;
+#if HAS_AWAIT
 using System.Security;
 using System.Security;
 
 
-#if HAS_AWAIT
 namespace System.Linq
 namespace System.Linq
 {
 {
+    /// <summary>
+    /// Interface for yielding elements to enumerator.
+    /// </summary>
+    /// <typeparam name="T">Type of the elements yielded to an enumerator.</typeparam>
     public interface IYielder<in T>
     public interface IYielder<in T>
     {
     {
+        /// <summary>
+        /// Yields a value to the enumerator.
+        /// </summary>
+        /// <param name="value">Value to yield return.</param>
+        /// <returns>Awaitable object for use in an asynchronous method.</returns>
         IAwaitable Return(T value);
         IAwaitable Return(T value);
+
+        /// <summary>
+        /// Stops the enumeration.
+        /// </summary>
+        /// <returns>Awaitable object for use in an asynchronous method.</returns>
         IAwaitable Break();
         IAwaitable Break();
     }
     }
 
 

+ 76 - 10
Ix.NET/Source/Tests/AsyncTests.Bugs.cs

@@ -101,11 +101,11 @@ namespace Tests
         [TestMethod]
         [TestMethod]
         public void CorrectDispose()
         public void CorrectDispose()
         {
         {
-            var disposed = false;
+            var disposed = new TaskCompletionSource<bool>();
 
 
             var xs = new[] { 1, 2, 3 }.WithDispose(() =>
             var xs = new[] { 1, 2, 3 }.WithDispose(() =>
             {
             {
-                disposed = true;
+                disposed.TrySetResult(true);
             }).ToAsyncEnumerable();
             }).ToAsyncEnumerable();
 
 
             var ys = xs.Select(x => x + 1);
             var ys = xs.Select(x => x + 1);
@@ -113,7 +113,7 @@ namespace Tests
             var e = ys.GetEnumerator();
             var e = ys.GetEnumerator();
             e.Dispose();
             e.Dispose();
 
 
-            Assert.IsTrue(disposed);
+            Assert.IsTrue(disposed.Task.Result);
 
 
             Assert.IsFalse(e.MoveNext().Result);
             Assert.IsFalse(e.MoveNext().Result);
         }
         }
@@ -121,30 +121,30 @@ namespace Tests
         [TestMethod]
         [TestMethod]
         public void DisposesUponError()
         public void DisposesUponError()
         {
         {
-            var disposed = false;
+            var disposed = new TaskCompletionSource<bool>();
 
 
             var xs = new[] { 1, 2, 3 }.WithDispose(() =>
             var xs = new[] { 1, 2, 3 }.WithDispose(() =>
             {
             {
-                disposed = true;
+                disposed.SetResult(true);
             }).ToAsyncEnumerable();
             }).ToAsyncEnumerable();
 
 
             var ex = new Exception("Bang!");
             var ex = new Exception("Bang!");
             var ys = xs.Select(x => { if (x == 1) throw ex; return x; });
             var ys = xs.Select(x => { if (x == 1) throw ex; return x; });
 
 
             var e = ys.GetEnumerator();
             var e = ys.GetEnumerator();
-            AssertThrows<Exception>(() => e.MoveNext());
+            AssertThrows<Exception>(() => e.MoveNext().Wait());
 
 
-            Assert.IsTrue(disposed);
+            Assert.IsTrue(disposed.Task.Result);
         }
         }
 
 
         [TestMethod]
         [TestMethod]
         public void CorrectCancel()
         public void CorrectCancel()
         {
         {
-            var disposed = false;
+            var disposed = new TaskCompletionSource<bool>();
 
 
             var xs = new[] { 1, 2, 3 }.WithDispose(() =>
             var xs = new[] { 1, 2, 3 }.WithDispose(() =>
             {
             {
-                disposed = true;
+                disposed.SetResult(true);
             }).ToAsyncEnumerable();
             }).ToAsyncEnumerable();
 
 
             var ys = xs.Select(x => x + 1).Where(x => true);
             var ys = xs.Select(x => x + 1).Where(x => true);
@@ -171,7 +171,7 @@ namespace Tests
                 // it. This design is chosen because cancelling a MoveNext call leaves
                 // it. This design is chosen because cancelling a MoveNext call leaves
                 // the enumerator in an indeterminate state. Further interactions with
                 // the enumerator in an indeterminate state. Further interactions with
                 // it should be forbidden.
                 // it should be forbidden.
-                Assert.IsTrue(disposed);
+                Assert.IsTrue(disposed.Task.Result);
             }
             }
 
 
             Assert.IsFalse(e.MoveNext().Result);
             Assert.IsFalse(e.MoveNext().Result);
@@ -207,6 +207,72 @@ namespace Tests
             evt.WaitOne();
             evt.WaitOne();
             yield return 42;
             yield return 42;
         }
         }
+
+        [TestMethod]
+        public void TakeOneFromSelectMany()
+        {
+            var enumerable = AsyncEnumerable
+                .Return(0)
+                .SelectMany(_ => AsyncEnumerable.Return("Check"))
+                .Take(1)
+                .Do(_ => { });
+
+            Assert.AreEqual("Check", enumerable.First().Result);
+        }
+
+        [TestMethod]
+        public void SelectManyDisposeInvokedOnlyOnce()
+        {
+            var disposeCounter = new DisposeCounter();
+
+            var result = AsyncEnumerable.Return(1).SelectMany(i => disposeCounter).Select(i => i).ToList().Result;
+
+            Assert.AreEqual(0, result.Count);
+            Assert.AreEqual(1, disposeCounter.DisposeCount);
+        }
+
+        [TestMethod]
+        public void SelectManyInnerDispose()
+        {
+            var disposes = Enumerable.Range(0, 10).Select(_ => new DisposeCounter()).ToList();
+
+            var result = AsyncEnumerable.Range(0, 10).SelectMany(i => disposes[i]).Select(i => i).ToList().Result;
+
+            Assert.AreEqual(0, result.Count);
+            Assert.IsTrue(disposes.All(d => d.DisposeCount == 1));
+        }
+
+        private class DisposeCounter : IAsyncEnumerable<object>
+        {
+            public int DisposeCount { get; private set; }
+
+            public IAsyncEnumerator<object> GetEnumerator()
+            {
+                return new Enumerator(this);
+            }
+
+            private class Enumerator : IAsyncEnumerator<object>
+            {
+                private readonly DisposeCounter _disposeCounter;
+
+                public Enumerator(DisposeCounter disposeCounter)
+                {
+                    _disposeCounter = disposeCounter;
+                }
+
+                public void Dispose()
+                {
+                    _disposeCounter.DisposeCount++;
+                }
+
+                public Task<bool> MoveNext(CancellationToken _)
+                {
+                    return Task.FromResult(false);
+                }
+
+                public object Current { get; }
+            }
+        }
     }
     }
 
 
     static class MyExt
     static class MyExt

+ 17 - 10
Ix.NET/Source/Tests/AsyncTests.Creation.cs

@@ -309,13 +309,13 @@ namespace Tests
         public void Using4()
         public void Using4()
         {
         {
             var i = 0;
             var i = 0;
-            var disposed = false;
+            var disposed = new TaskCompletionSource<bool>();
 
 
             var xs = AsyncEnumerable.Using(
             var xs = AsyncEnumerable.Using(
                 () =>
                 () =>
                 {
                 {
                     i++;
                     i++;
-                    return new MyD(() => { disposed = true; });
+                    return new MyD(() => { disposed.TrySetResult(true); });
                 },
                 },
                 _ => AsyncEnumerable.Return(42)
                 _ => AsyncEnumerable.Return(42)
             );
             );
@@ -328,7 +328,7 @@ namespace Tests
             HasNext(e, 42);
             HasNext(e, 42);
             NoNext(e);
             NoNext(e);
 
 
-            Assert.IsTrue(disposed);
+            Assert.IsTrue(disposed.Task.Result);
         }
         }
 
 
         [TestMethod]
         [TestMethod]
@@ -336,13 +336,13 @@ namespace Tests
         {
         {
             var ex = new Exception("Bang!");
             var ex = new Exception("Bang!");
             var i = 0;
             var i = 0;
-            var disposed = false;
+            var disposed = new TaskCompletionSource<bool>();
 
 
             var xs = AsyncEnumerable.Using(
             var xs = AsyncEnumerable.Using(
                 () =>
                 () =>
                 {
                 {
                     i++;
                     i++;
-                    return new MyD(() => { disposed = true; });
+                    return new MyD(() => { disposed.TrySetResult(true); });
                 },
                 },
                 _ => AsyncEnumerable.Throw<int>(ex)
                 _ => AsyncEnumerable.Throw<int>(ex)
             );
             );
@@ -354,20 +354,20 @@ namespace Tests
 
 
             AssertThrows<Exception>(() => e.MoveNext().Wait(), ex_ => ((AggregateException)ex_).Flatten().InnerExceptions.Single() == ex);
             AssertThrows<Exception>(() => e.MoveNext().Wait(), ex_ => ((AggregateException)ex_).Flatten().InnerExceptions.Single() == ex);
 
 
-            Assert.IsTrue(disposed);
+            Assert.IsTrue(disposed.Task.Result);
         }
         }
 
 
         [TestMethod]
         [TestMethod]
         public void Using6()
         public void Using6()
         {
         {
             var i = 0;
             var i = 0;
-            var disposed = false;
+            var disposed = new TaskCompletionSource<bool>();
 
 
             var xs = AsyncEnumerable.Using(
             var xs = AsyncEnumerable.Using(
                 () =>
                 () =>
                 {
                 {
                     i++;
                     i++;
-                    return new MyD(() => { disposed = true; });
+                    return new MyD(() => { disposed.TrySetResult(true); });
                 },
                 },
                 _ => AsyncEnumerable.Range(0, 10)
                 _ => AsyncEnumerable.Range(0, 10)
             );
             );
@@ -384,9 +384,16 @@ namespace Tests
             var t = e.MoveNext(cts.Token);
             var t = e.MoveNext(cts.Token);
             cts.Cancel();
             cts.Cancel();
 
 
-            t.Wait();
+            try
+            {
+                t.Wait();
+            }
+            catch (AggregateException ex)
+            {
+                ex.Flatten().Handle(inner => inner is TaskCanceledException);
+            }
 
 
-            Assert.IsTrue(disposed);
+            Assert.IsTrue(disposed.Task.Result);
         }
         }
 
 
         class MyD : IDisposable
         class MyD : IDisposable

+ 16 - 2
Ix.NET/Source/Tests/AsyncTests.cs

@@ -14,27 +14,41 @@ namespace Tests
         public void AssertThrows<E>(Action a)
         public void AssertThrows<E>(Action a)
             where E : Exception
             where E : Exception
         {
         {
+            var hasFailed = false;
+
             try
             try
             {
             {
                 a();
                 a();
-                Assert.Fail();
             }
             }
             catch (E)
             catch (E)
             {
             {
+                hasFailed = true;
+            }
+
+            if (!hasFailed)
+            {
+                Assert.Fail();
             }
             }
         }
         }
 
 
         public void AssertThrows<E>(Action a, Func<E, bool> assert)
         public void AssertThrows<E>(Action a, Func<E, bool> assert)
             where E : Exception
             where E : Exception
         {
         {
+            var hasFailed = false;
+
             try
             try
             {
             {
                 a();
                 a();
-                Assert.Fail();
             }
             }
             catch (E e)
             catch (E e)
             {
             {
                 Assert.IsTrue(assert(e));
                 Assert.IsTrue(assert(e));
+                hasFailed = true;
+            }
+
+            if (!hasFailed)
+            {
+                Assert.Fail();
             }
             }
         }
         }
 
 

+ 42 - 3
Ix.NET/Source/Tests/Tests.Creation.cs

@@ -46,20 +46,59 @@ namespace Tests
         {
         {
             var xs = EnumerableEx.Create<int>(async yield => {
             var xs = EnumerableEx.Create<int>(async yield => {
                 var i = 0;
                 var i = 0;
-                while (i < 10) {
+                while (i < 10)
+                {
                     await yield.Return(i++);
                     await yield.Return(i++);
                 }
                 }
             });
             });
 
 
             int j = 0;
             int j = 0;
-            foreach (int elem in xs) {
+            foreach (int elem in xs)
+            {
+                Assert.AreEqual(elem, j);
+                j++;
+            }
+
+            Assert.AreEqual(j, 10);
+        }
+
+        [TestMethod]
+        public void CreateYieldBreak()
+        {
+            var xs = EnumerableEx.Create<int>(async yield => {
+                var i = 0;
+                while (true)
+                {
+                    if (i == 10)
+                    {
+                        await yield.Break();
+                        return;
+                    }
+
+                    await yield.Return(i++);
+                }
+            });
+
+            int j = 0;
+            foreach (int elem in xs)
+            {
                 Assert.AreEqual(elem, j);
                 Assert.AreEqual(elem, j);
                 j++;
                 j++;
             }
             }
 
 
             Assert.AreEqual(j, 10);
             Assert.AreEqual(j, 10);
         }
         }
-#endif 
+
+        [TestMethod]
+        public void YielderNoReset()
+        {
+            var xs = EnumerableEx.Create<int>(async yield => {
+               await yield.Break();
+            });
+
+            AssertThrows<NotSupportedException>(() => xs.GetEnumerator().Reset());
+        }
+#endif
 
 
         private static IEnumerator<int> MyEnumerator()
         private static IEnumerator<int> MyEnumerator()
         {
         {

BIN
Rx.NET/Documentation/Rx Design Guidelines.pdf


+ 41 - 34
Rx.NET/Source/Common.targets

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
   <PropertyGroup>
   <PropertyGroup>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
     <ProductVersion>8.0.30703</ProductVersion>
     <ProductVersion>8.0.30703</ProductVersion>
@@ -41,6 +42,15 @@
     <BuildTarget>45</BuildTarget>
     <BuildTarget>45</BuildTarget>
   </PropertyGroup>
   </PropertyGroup>
 
 
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug46|AnyCPU' ">
+    <BuildConfig>Debug</BuildConfig>
+    <BuildTarget>46</BuildTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release46|AnyCPU' ">
+    <BuildConfig>Release</BuildConfig>
+    <BuildTarget>46</BuildTarget>
+  </PropertyGroup>
+
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug8|AnyCPU' ">
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug8|AnyCPU' ">
     <BuildConfig>Debug</BuildConfig>
     <BuildConfig>Debug</BuildConfig>
     <BuildTarget>8</BuildTarget>
     <BuildTarget>8</BuildTarget>
@@ -104,14 +114,37 @@
     <NoStdLib>true</NoStdLib>
     <NoStdLib>true</NoStdLib>
   </PropertyGroup>
   </PropertyGroup>
 
 
+  <PropertyGroup Condition=" '$(BuildTarget)' == 'PLLITE' ">
+    <DefineConstants>$(DefineConstants);NO_RXINTERFACES;NO_SERIALIZABLE;NO_REMOTING;NO_SEMAPHORE;NO_STOPWATCH;NO_CDS;PLIB;PLIB_LITE;NO_THREAD;USE_TASKEX;CRIPPLED_REFLECTION;NO_WEAKREFOFT;NO_SORTEDDICTIONARY</DefineConstants>    
+    <TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+      <!-- 
+      Profile2   = .NET for Windows Store apps, .NET Framework 4,     Silverlight 4, Windows Phone 7
+      Profile36  = .NET for Windows Store apps, .NET Framework 4,     Silverlight 4, Windows Phone 8
+      Profile88  = .NET for Windows Store apps, .NET Framework 4,     Silverlight 4, Windows Phone 7.5
+      Profile96  = .NET for Windows Store apps, .NET Framework 4.0.3, Silverlight 4, Windows Phone 7.5
+      Profile136 = .NET for Windows Store apps, .NET Framework 4,     Silverlight 5, Windows Phone 8
+      -->
+    <TargetFrameworkProfile>Profile136</TargetFrameworkProfile>
+    <NoStdLib>true</NoStdLib>
+  </PropertyGroup>
+
   <PropertyGroup Condition=" '$(BuildTarget)' == '45' ">
   <PropertyGroup Condition=" '$(BuildTarget)' == '45' ">
-    <DefineConstants>$(DefineConstants);NO_EVENTARGS_CONSTRAINT;HAS_EDI;HAS_WINRT;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;HAS_APTCA;                                                              HAS_DISPATCHER_PRIORITY;HAS_WINFORMS;USE_TIMER_SELF_ROOT</DefineConstants>
+    <DefineConstants>$(DefineConstants);NO_EVENTARGS_CONSTRAINT;HAS_EDI;HAS_WINRT;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;HAS_APTCA;HAS_DISPATCHER_PRIORITY;HAS_WINFORMS;USE_TIMER_SELF_ROOT</DefineConstants>
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <NoStdLib>true</NoStdLib>
     <NoStdLib>true</NoStdLib>
     <BuildPlatform>DESKTOPCLR</BuildPlatform>
     <BuildPlatform>DESKTOPCLR</BuildPlatform>
     <BuildFlavor>DESKTOPCLR45</BuildFlavor>
     <BuildFlavor>DESKTOPCLR45</BuildFlavor>
   </PropertyGroup>
   </PropertyGroup>
 
 
+  <PropertyGroup Condition=" '$(BuildTarget)' == '46' ">
+    <DefineConstants>$(DefineConstants);NO_EVENTARGS_CONSTRAINT;HAS_EDI;HAS_WINRT;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;HAS_APTCA;HAS_DISPATCHER_PRIORITY;HAS_WINFORMS;USE_TIMER_SELF_ROOT;HAS_TPL46</DefineConstants>
+    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+    <NoStdLib>true</NoStdLib>
+    <BuildPlatform>DESKTOPCLR</BuildPlatform>
+    <BuildFlavor>DESKTOPCLR46</BuildFlavor>
+  </PropertyGroup>
+
   <PropertyGroup Condition=" '$(BuildTarget)' == '8' ">
   <PropertyGroup Condition=" '$(BuildTarget)' == '8' ">
     <DefineConstants>$(DefineConstants);NO_EVENTARGS_CONSTRAINT;HAS_EDI;HAS_WINRT;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;NO_REMOTING;NO_SERIALIZABLE;NO_THREAD;CRIPPLED_REFLECTION;USE_TIMER_SELF_ROOT</DefineConstants>
     <DefineConstants>$(DefineConstants);NO_EVENTARGS_CONSTRAINT;HAS_EDI;HAS_WINRT;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;NO_REMOTING;NO_SERIALIZABLE;NO_THREAD;CRIPPLED_REFLECTION;USE_TIMER_SELF_ROOT</DefineConstants>
     <TargetFrameworkIdentifier>.NETCore</TargetFrameworkIdentifier>
     <TargetFrameworkIdentifier>.NETCore</TargetFrameworkIdentifier>
@@ -135,14 +168,14 @@
   </PropertyGroup>
   </PropertyGroup>
 
 
   <PropertyGroup Condition=" '$(BuildTarget)' == '40' ">
   <PropertyGroup Condition=" '$(BuildTarget)' == '40' ">
-    <DefineConstants>$(DefineConstants);NO_TASK_DELAY;HAS_APTCA;HAS_WINFORMS;USE_TIMER_SELF_ROOT</DefineConstants>
+    <DefineConstants>$(DefineConstants);NO_TASK_DELAY;HAS_APTCA;HAS_WINFORMS;USE_TIMER_SELF_ROOT;NO_WEAKREFOFT</DefineConstants>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
     <BuildPlatform>DESKTOPCLR</BuildPlatform>
     <BuildPlatform>DESKTOPCLR</BuildPlatform>
     <BuildFlavor>DESKTOPCLR40</BuildFlavor>
     <BuildFlavor>DESKTOPCLR40</BuildFlavor>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <PropertyGroup Condition=" '$(BuildTarget)' == 'SL5' ">
   <PropertyGroup Condition=" '$(BuildTarget)' == 'SL5' ">
-    <DefineConstants>$(DefineConstants);NO_RXINTERFACES;USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_SEMAPHORE;NO_STOPWATCH;NO_CDS;NO_TASK_DELAY</DefineConstants>
+    <DefineConstants>$(DefineConstants);NO_RXINTERFACES;USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_SEMAPHORE;NO_STOPWATCH;NO_CDS;NO_TASK_DELAY;NO_WEAKREFOFT;NO_SORTEDDICTIONARY</DefineConstants>
     <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
     <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
     <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
     <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
     <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
     <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>
@@ -150,26 +183,9 @@
     <BuildPlatform>SILVERLIGHT</BuildPlatform>
     <BuildPlatform>SILVERLIGHT</BuildPlatform>
     <BuildFlavor>SILVERLIGHT5</BuildFlavor>
     <BuildFlavor>SILVERLIGHT5</BuildFlavor>
   </PropertyGroup>
   </PropertyGroup>
-  
-  
-  
-  <PropertyGroup Condition=" '$(BuildTarget)' == 'PLLITE' ">
-    <DefineConstants>$(DefineConstants);NO_RXINTERFACES;NO_SERIALIZABLE;NO_REMOTING;NO_SEMAPHORE;NO_STOPWATCH;NO_CDS;PLIB;PLIB_LITE;NO_THREAD;USE_TASKEX;CRIPPLED_REFLECTION</DefineConstants>    
-    <TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
-    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-      <!-- 
-      Profile2   = .NET for Windows Store apps, .NET Framework 4, Silverlight 4, Windows Phone 7
-      Profile36  = .NET for Windows Store apps, .NET Framework 4, Silverlight 4, Windows Phone 8
-      Profile88  = .NET for Windows Store apps, .NET Framework 4, Silverlight 4, Windows Phone 7.5
-      Profile96  = .NET for Windows Store apps, .NET Framework 4.0.3, Silverlight 4, Windows Phone 7.5
-      Profile136 = .NET for Windows Store apps, .NET Framework 4, Silverlight 5, Windows Phone 8
-      -->
-    <TargetFrameworkProfile>Profile136</TargetFrameworkProfile>
-    <NoStdLib>true</NoStdLib>
-  </PropertyGroup>
 
 
   <PropertyGroup Condition=" '$(BuildTarget)' == 'WP7' ">
   <PropertyGroup Condition=" '$(BuildTarget)' == 'WP7' ">
-    <DefineConstants>$(DefineConstants);USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_CDS;NO_TLS;NO_VARIANCE;NO_TPL;NO_HASHSET;NO_SEMAPHORE;NO_LARGEARITY;NO_EXPRESSIONVISITOR;NO_LAZY;NO_WEAKTABLE;NO_INTERLOCKED_64;WINDOWSPHONE7</DefineConstants>
+    <DefineConstants>$(DefineConstants);USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_CDS;NO_TLS;NO_VARIANCE;NO_TPL;NO_HASHSET;NO_SEMAPHORE;NO_LARGEARITY;NO_EXPRESSIONVISITOR;NO_LAZY;NO_WEAKTABLE;NO_INTERLOCKED_64;WINDOWSPHONE7;NO_WEAKREFOFT;NO_SORTEDDICTIONARY</DefineConstants>
     <TargetFrameworkProfile>WindowsPhone71</TargetFrameworkProfile>
     <TargetFrameworkProfile>WindowsPhone71</TargetFrameworkProfile>
     <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
     <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
@@ -190,13 +206,6 @@
     <NoStdLib>true</NoStdLib>
     <NoStdLib>true</NoStdLib>
   </PropertyGroup>
   </PropertyGroup>
 
 
-  <!--<PropertyGroup Condition=" '$(BuildTarget)' == 'PortableWP7' ">
-    <DefineConstants>$(DefineConstants);NO_VARIANCE;NO_EVENTARGS_CONSTRAINT;HAS_EDI;HAS_WINRT;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;HAS_APTCA;NO_REMOTING;NO_SERIALIZABLE;NO_THREAD;CRIPPLED_REFLECTION;PLIB;NO_CDS_COLLECTIONS;USE_TIMER_SELF_ROOT</DefineConstants>
-    <TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
-    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile>Profile4</TargetFrameworkProfile>
-    <NoStdLib>true</NoStdLib>
-  </PropertyGroup>-->
   
   
   <!--
   <!--
        ********************
        ********************
@@ -347,7 +356,7 @@
   </ItemGroup>
   </ItemGroup>
 
 
   <!-- Temporary flag to enable stress test builds. Should be refactored into a separate project and be written in a more platform-neutral manner. (TFS 484720) -->
   <!-- Temporary flag to enable stress test builds. Should be refactored into a separate project and be written in a more platform-neutral manner. (TFS 484720) -->
-  <PropertyGroup Condition=" '$(BuildFlavor)' == 'DESKTOPCLR40' OR '$(BuildFlavor)' == 'DESKTOPCLR45' ">
+  <PropertyGroup Condition=" '$(BuildFlavor)' == 'DESKTOPCLR40' OR '$(BuildFlavor)' == 'DESKTOPCLR45' OR '$(BuildFlavor)' == 'DESKTOPCLR46' ">
     <DefineConstants>$(DefineConstants);STRESS</DefineConstants>
     <DefineConstants>$(DefineConstants);STRESS</DefineConstants>
   </PropertyGroup>
   </PropertyGroup>
   
   
@@ -373,13 +382,13 @@
     <ReferencePath>$(MSBuildProjectDirectory)\..\References\$(BuildFlavor)</ReferencePath>
     <ReferencePath>$(MSBuildProjectDirectory)\..\References\$(BuildFlavor)</ReferencePath>
   </PropertyGroup>
   </PropertyGroup>
 
 
-<!--
+  <!--
        ************************************************
        ************************************************
        * GENERAL REFERENCES - Microsoft.Bcl and Async *
        * GENERAL REFERENCES - Microsoft.Bcl and Async *
        ************************************************
        ************************************************
-   -->
+  -->
 
 
-   <ItemGroup Condition=" '$(BuildTarget)' == 'PLLITE' ">
+  <ItemGroup Condition=" '$(BuildTarget)' == 'PLLITE' ">
     <!--- Microsoft.Bcl References -->
     <!--- Microsoft.Bcl References -->
     <Reference Include="System.Runtime">
     <Reference Include="System.Runtime">
       <HintPath>..\packages\Microsoft.Bcl.1.0.19\lib\portable-net40+sl5+win8+wp8\System.Runtime.dll</HintPath>
       <HintPath>..\packages\Microsoft.Bcl.1.0.19\lib\portable-net40+sl5+win8+wp8\System.Runtime.dll</HintPath>
@@ -401,7 +410,6 @@
   </ItemGroup>
   </ItemGroup>
    
    
   <ItemGroup Condition=" '$(BuildTarget)' == '40' ">
   <ItemGroup Condition=" '$(BuildTarget)' == '40' ">
-  
     <Reference Include="Microsoft.Threading.Tasks">
     <Reference Include="Microsoft.Threading.Tasks">
       <HintPath>..\packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
       <HintPath>..\packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
       <Private>False</Private>
       <Private>False</Private>
@@ -423,6 +431,5 @@
       <Private>False</Private>
       <Private>False</Private>
     </Reference>
     </Reference>
   </ItemGroup>
   </ItemGroup>
-
   
   
 </Project>
 </Project>

+ 0 - 6
Rx.NET/Source/Microsoft.Reactive.Testing/Microsoft.Reactive.Testing.csproj

@@ -14,12 +14,6 @@
     <ProductSignAssembly>true</ProductSignAssembly>
     <ProductSignAssembly>true</ProductSignAssembly>
     <CodeAnalysisRuleSet>..\Rx.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRuleSet>..\Rx.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseXBLV|AnyCPU'">
-    <OutputPath>bin\ReleaseXBLV\</OutputPath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugXBLV|AnyCPU'">
-    <OutputPath>bin\DebugXBLV\</OutputPath>
-  </PropertyGroup>
   <Import Project="..\Common.targets" />
   <Import Project="..\Common.targets" />
   <PropertyGroup>
   <PropertyGroup>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>

+ 18 - 67
Rx.NET/Source/Playground/Playground.csproj

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
   <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug45</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">Any CPU</Platform>
     <ProductVersion>8.0.30703</ProductVersion>
     <ProductVersion>8.0.30703</ProductVersion>
     <SchemaVersion>2.0</SchemaVersion>
     <SchemaVersion>2.0</SchemaVersion>
     <ProjectGuid>{8A062C6B-4441-49F3-B618-4238B6AB5290}</ProjectGuid>
     <ProjectGuid>{8A062C6B-4441-49F3-B618-4238B6AB5290}</ProjectGuid>
@@ -10,70 +10,24 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>Playground</RootNamespace>
     <RootNamespace>Playground</RootNamespace>
     <AssemblyName>Playground</AssemblyName>
     <AssemblyName>Playground</AssemblyName>
-    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile>
-    </TargetFrameworkProfile>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <FileAlignment>512</FileAlignment>
-    <SccProjectName>SAK</SccProjectName>
-    <SccLocalPath>SAK</SccLocalPath>
-    <SccAuxPath>SAK</SccAuxPath>
-    <SccProvider>SAK</SccProvider>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
-    <PlatformTarget>x86</PlatformTarget>
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <UseVSHostingProcess>false</UseVSHostingProcess>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
-    <PlatformTarget>x86</PlatformTarget>
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseXBLV|x86'">
-    <OutputPath>bin\x86\ReleaseXBLV\</OutputPath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugXBLV|x86'">
-    <OutputPath>bin\x86\DebugXBLV\</OutputPath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug81|x86'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x86\Debug81\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <UseVSHostingProcess>false</UseVSHostingProcess>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release81|x86'">
-    <OutputPath>bin\x86\Release81\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <ProductSignAssembly>false</ProductSignAssembly>
   </PropertyGroup>
   </PropertyGroup>
+  <Import Project="..\Common.targets" />
   <ItemGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Core" />
-    <Reference Include="Microsoft.CSharp" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <Compile Include="Program.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\Microsoft.Reactive.Testing\Microsoft.Reactive.Testing.csproj">
+      <Project>{e7b7408b-b039-4f30-b6cf-cc06218ce4ca}</Project>
+      <Name>Microsoft.Reactive.Testing</Name>
+    </ProjectReference>
     <ProjectReference Include="..\System.Reactive.Core\System.Reactive.Core.csproj">
     <ProjectReference Include="..\System.Reactive.Core\System.Reactive.Core.csproj">
       <Project>{4E516F10-DA7A-4D43-963E-A93865ABEA5B}</Project>
       <Project>{4E516F10-DA7A-4D43-963E-A93865ABEA5B}</Project>
       <Name>System.Reactive.Core</Name>
       <Name>System.Reactive.Core</Name>
@@ -90,14 +44,18 @@
       <Project>{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}</Project>
       <Project>{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}</Project>
       <Name>System.Reactive.Interfaces</Name>
       <Name>System.Reactive.Interfaces</Name>
     </ProjectReference>
     </ProjectReference>
-    <ProjectReference Include="..\System.Reactive.PlatformServices\System.Reactive.PlatformServices.csproj">
-      <Project>{0CCCF009-763F-40D2-8655-7A94828023BF}</Project>
-      <Name>System.Reactive.PlatformServices</Name>
-    </ProjectReference>
     <ProjectReference Include="..\System.Reactive.Linq\System.Reactive.Linq.csproj">
     <ProjectReference Include="..\System.Reactive.Linq\System.Reactive.Linq.csproj">
       <Project>{63252AE9-5186-45CA-BFCD-FA51C6B66A43}</Project>
       <Project>{63252AE9-5186-45CA-BFCD-FA51C6B66A43}</Project>
       <Name>System.Reactive.Linq</Name>
       <Name>System.Reactive.Linq</Name>
     </ProjectReference>
     </ProjectReference>
+    <ProjectReference Include="..\System.Reactive.Observable.Aliases\System.Reactive.Observable.Aliases.csproj">
+      <Project>{9ffac385-10a4-4ddd-b800-de67e8469cc0}</Project>
+      <Name>System.Reactive.Observable.Aliases</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\System.Reactive.PlatformServices\System.Reactive.PlatformServices.csproj">
+      <Project>{0cccf009-763f-40d2-8655-7a94828023bf}</Project>
+      <Name>System.Reactive.PlatformServices</Name>
+    </ProjectReference>
     <ProjectReference Include="..\System.Reactive.Providers\System.Reactive.Providers.csproj">
     <ProjectReference Include="..\System.Reactive.Providers\System.Reactive.Providers.csproj">
       <Project>{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}</Project>
       <Project>{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}</Project>
       <Name>System.Reactive.Providers</Name>
       <Name>System.Reactive.Providers</Name>
@@ -110,12 +68,5 @@
   <ItemGroup>
   <ItemGroup>
     <None Include="app.config" />
     <None Include="app.config" />
   </ItemGroup>
   </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>
-  -->
+  <Import Project="..\Import.targets" />
 </Project>
 </Project>

+ 2 - 2
Rx.NET/Source/Playground/Program.cs

@@ -7,6 +7,7 @@ using System.Reactive.Disposables;
 using System.Reactive.Linq;
 using System.Reactive.Linq;
 using System.Reactive.Subjects;
 using System.Reactive.Subjects;
 using System.Threading;
 using System.Threading;
+using System.Threading.Tasks;
 
 
 namespace Playground
 namespace Playground
 {
 {
@@ -14,7 +15,6 @@ namespace Playground
     {
     {
         static void Main()
         static void Main()
         {
         {
-
         }
         }
     }
     }
-}
+}

+ 1 - 1
Rx.NET/Source/Playground/app.config

@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <?xml version="1.0"?>
 <configuration>
 <configuration>
   <startup>
   <startup>
-    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
   </startup>
   </startup>
 </configuration>
 </configuration>

+ 44 - 0
Rx.NET/Source/RunTests.bat

@@ -0,0 +1,44 @@
+@echo off
+
+set _use_code_coverage=0
+for %%a in (%*) do if "%%a"=="-coverage" set _use_code_coverage=1
+
+set _release_build=0
+for %%a in (%*) do if "%%a"=="-release" set _release_build=1
+
+set _build_rx_tmp=%temp%\Rx
+rd /s /q "%_build_rx_tmp%"
+mkdir "%_build_rx_tmp%"
+
+set _runtest_list=Tests.System.Reactive.dll
+
+set _test_coverage_targets=System.Reactive.Core.dll System.Reactive.Linq.dll System.Reactive.PlatformServices.dll
+
+if %_release_build%==1 (
+  call msbuild /p:Configuration=Release45 /p:RunCodeAnalysis=false /p:OutputPath="%_build_rx_tmp%" Rx.sln
+) else (
+  call msbuild /p:Configuration=Debug45 /p:RunCodeAnalysis=false /p:OutputPath="%_build_rx_tmp%" Rx.sln
+)
+
+set _src_rx=%cd%
+
+pushd "%_build_rx_tmp%"
+
+set _original_path=%path%
+path %path%;c:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools;
+
+if %_use_code_coverage%==1 (
+  for %%a in (%_test_coverage_targets%) do call vsinstr -coverage %%a
+  start vsperfmon -coverage -output:%cd%\runtests.coverage
+)
+
+call mstest /testcontainer:%_runtest_list%
+
+if %_use_code_coverage%==1 (
+  vsperfcmd -shutdown
+  copy %cd%\runtests.coverage "%_src_rx%\"
+)
+
+path %_original_path%
+
+popd

+ 129 - 1056
Rx.NET/Source/Rx.sln

@@ -1,7 +1,7 @@
 
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.31101.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.22609.0
 MinimumVisualStudioVersion = 10.0.40219.1
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Reactive.Linq", "System.Reactive.Linq\System.Reactive.Linq.csproj", "{63252AE9-5186-45CA-BFCD-FA51C6B66A43}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Reactive.Linq", "System.Reactive.Linq\System.Reactive.Linq.csproj", "{63252AE9-5186-45CA-BFCD-FA51C6B66A43}"
 EndProject
 EndProject
@@ -54,724 +54,284 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Reactive.Observable.
 EndProject
 EndProject
 Global
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Debug|Mixed Platforms = Debug|Mixed Platforms
-		Debug|x86 = Debug|x86
 		Debug35|Any CPU = Debug35|Any CPU
 		Debug35|Any CPU = Debug35|Any CPU
-		Debug35|Mixed Platforms = Debug35|Mixed Platforms
-		Debug35|x86 = Debug35|x86
 		Debug40|Any CPU = Debug40|Any CPU
 		Debug40|Any CPU = Debug40|Any CPU
-		Debug40|Mixed Platforms = Debug40|Mixed Platforms
-		Debug40|x86 = Debug40|x86
 		Debug45|Any CPU = Debug45|Any CPU
 		Debug45|Any CPU = Debug45|Any CPU
-		Debug45|Mixed Platforms = Debug45|Mixed Platforms
-		Debug45|x86 = Debug45|x86
+		Debug46|Any CPU = Debug46|Any CPU
 		Debug8|Any CPU = Debug8|Any CPU
 		Debug8|Any CPU = Debug8|Any CPU
-		Debug8|Mixed Platforms = Debug8|Mixed Platforms
-		Debug8|x86 = Debug8|x86
 		Debug81|Any CPU = Debug81|Any CPU
 		Debug81|Any CPU = Debug81|Any CPU
-		Debug81|Mixed Platforms = Debug81|Mixed Platforms
-		Debug81|x86 = Debug81|x86
 		DebugPL|Any CPU = DebugPL|Any CPU
 		DebugPL|Any CPU = DebugPL|Any CPU
-		DebugPL|Mixed Platforms = DebugPL|Mixed Platforms
-		DebugPL|x86 = DebugPL|x86
 		DebugPLLITE|Any CPU = DebugPLLITE|Any CPU
 		DebugPLLITE|Any CPU = DebugPLLITE|Any CPU
-		DebugPLLITE|Mixed Platforms = DebugPLLITE|Mixed Platforms
-		DebugPLLITE|x86 = DebugPLLITE|x86
 		DebugSL4|Any CPU = DebugSL4|Any CPU
 		DebugSL4|Any CPU = DebugSL4|Any CPU
-		DebugSL4|Mixed Platforms = DebugSL4|Mixed Platforms
-		DebugSL4|x86 = DebugSL4|x86
 		DebugSL5|Any CPU = DebugSL5|Any CPU
 		DebugSL5|Any CPU = DebugSL5|Any CPU
-		DebugSL5|Mixed Platforms = DebugSL5|Mixed Platforms
-		DebugSL5|x86 = DebugSL5|x86
 		DebugWP7|Any CPU = DebugWP7|Any CPU
 		DebugWP7|Any CPU = DebugWP7|Any CPU
-		DebugWP7|Mixed Platforms = DebugWP7|Mixed Platforms
-		DebugWP7|x86 = DebugWP7|x86
 		DebugWP8|Any CPU = DebugWP8|Any CPU
 		DebugWP8|Any CPU = DebugWP8|Any CPU
-		DebugWP8|Mixed Platforms = DebugWP8|Mixed Platforms
-		DebugWP8|x86 = DebugWP8|x86
-		Release|Any CPU = Release|Any CPU
-		Release|Mixed Platforms = Release|Mixed Platforms
-		Release|x86 = Release|x86
 		Release35|Any CPU = Release35|Any CPU
 		Release35|Any CPU = Release35|Any CPU
-		Release35|Mixed Platforms = Release35|Mixed Platforms
-		Release35|x86 = Release35|x86
 		Release40|Any CPU = Release40|Any CPU
 		Release40|Any CPU = Release40|Any CPU
-		Release40|Mixed Platforms = Release40|Mixed Platforms
-		Release40|x86 = Release40|x86
 		Release45|Any CPU = Release45|Any CPU
 		Release45|Any CPU = Release45|Any CPU
-		Release45|Mixed Platforms = Release45|Mixed Platforms
-		Release45|x86 = Release45|x86
+		Release46|Any CPU = Release46|Any CPU
 		Release8|Any CPU = Release8|Any CPU
 		Release8|Any CPU = Release8|Any CPU
-		Release8|Mixed Platforms = Release8|Mixed Platforms
-		Release8|x86 = Release8|x86
 		Release81|Any CPU = Release81|Any CPU
 		Release81|Any CPU = Release81|Any CPU
-		Release81|Mixed Platforms = Release81|Mixed Platforms
-		Release81|x86 = Release81|x86
 		ReleasePL|Any CPU = ReleasePL|Any CPU
 		ReleasePL|Any CPU = ReleasePL|Any CPU
-		ReleasePL|Mixed Platforms = ReleasePL|Mixed Platforms
-		ReleasePL|x86 = ReleasePL|x86
 		ReleasePLLITE|Any CPU = ReleasePLLITE|Any CPU
 		ReleasePLLITE|Any CPU = ReleasePLLITE|Any CPU
-		ReleasePLLITE|Mixed Platforms = ReleasePLLITE|Mixed Platforms
-		ReleasePLLITE|x86 = ReleasePLLITE|x86
 		ReleaseSL4|Any CPU = ReleaseSL4|Any CPU
 		ReleaseSL4|Any CPU = ReleaseSL4|Any CPU
-		ReleaseSL4|Mixed Platforms = ReleaseSL4|Mixed Platforms
-		ReleaseSL4|x86 = ReleaseSL4|x86
 		ReleaseSL5|Any CPU = ReleaseSL5|Any CPU
 		ReleaseSL5|Any CPU = ReleaseSL5|Any CPU
-		ReleaseSL5|Mixed Platforms = ReleaseSL5|Mixed Platforms
-		ReleaseSL5|x86 = ReleaseSL5|x86
 		ReleaseWP7|Any CPU = ReleaseWP7|Any CPU
 		ReleaseWP7|Any CPU = ReleaseWP7|Any CPU
-		ReleaseWP7|Mixed Platforms = ReleaseWP7|Mixed Platforms
-		ReleaseWP7|x86 = ReleaseWP7|x86
 		ReleaseWP8|Any CPU = ReleaseWP8|Any CPU
 		ReleaseWP8|Any CPU = ReleaseWP8|Any CPU
-		ReleaseWP8|Mixed Platforms = ReleaseWP8|Mixed Platforms
-		ReleaseWP8|x86 = ReleaseWP8|x86
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|x86.ActiveCfg = Debug45|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|x86.ActiveCfg = Release45|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release81|Any CPU.Build.0 = Release81|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release81|Any CPU.Build.0 = Release81|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|x86.ActiveCfg = Debug45|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|x86.ActiveCfg = Release45|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|x86.ActiveCfg = Debug45|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Any CPU.ActiveCfg = Debug40|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Any CPU.ActiveCfg = Debug40|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Any CPU.Build.0 = Debug40|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|x86.ActiveCfg = Release45|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|x86.ActiveCfg = Debug45|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|x86.ActiveCfg = Release45|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|x86.ActiveCfg = Debug45|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|x86.ActiveCfg = Release8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release81|Any CPU.Build.0 = Release81|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release81|Any CPU.Build.0 = Release81|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|x86.ActiveCfg = Debug8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|x86.ActiveCfg = Release8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release81|Any CPU.Build.0 = Release81|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release81|Any CPU.Build.0 = Release81|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
 		{C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
@@ -882,884 +442,397 @@ Global
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|Any CPU.ActiveCfg = Debug45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|Any CPU.Build.0 = Debug45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|Any CPU.ActiveCfg = Debug45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|Any CPU.Build.0 = Debug45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release35|Any CPU.Build.0 = Release35|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release40|Any CPU.Build.0 = Release40|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release45|Any CPU.Build.0 = Release45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release46|Any CPU.Build.0 = Release46|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|Any CPU.ActiveCfg = Release45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|Any CPU.Build.0 = Release45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|Any CPU.ActiveCfg = Release45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|Any CPU.Build.0 = Release45|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
+		{8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|x86.ActiveCfg = Debug8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|x86.ActiveCfg = Release8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release81|Any CPU.Build.0 = Release81|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release81|Any CPU.Build.0 = Release81|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|x86.ActiveCfg = Debug8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|x86.ActiveCfg = Release8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release81|Any CPU.Build.0 = Release81|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release81|Any CPU.Build.0 = Release81|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|x86.ActiveCfg = Debug8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|x86.ActiveCfg = Release8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release81|Any CPU.Build.0 = Release81|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release81|Any CPU.Build.0 = Release81|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|x86.ActiveCfg = Debug8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|x86.ActiveCfg = Release8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release81|Any CPU.Build.0 = Release81|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release81|Any CPU.Build.0 = Release81|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|x86.ActiveCfg = Debug8|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|x86.ActiveCfg = Release8|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|x86.ActiveCfg = Debug8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|x86.ActiveCfg = Release8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release81|Any CPU.Build.0 = Release81|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release81|Any CPU.Build.0 = Release81|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|x86.ActiveCfg = DebugCF35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug35|x86.ActiveCfg = Debug35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug40|x86.ActiveCfg = Debug40|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug45|x86.ActiveCfg = Debug45|Any CPU
+		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|x86.ActiveCfg = Debug8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug81|x86.ActiveCfg = Debug81|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release35|Any CPU.Build.0 = Release35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release35|x86.ActiveCfg = Release35|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release45|x86.ActiveCfg = Release45|Any CPU
+		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release46|Any CPU.Build.0 = Release46|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Any CPU.Build.0 = Release8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|x86.ActiveCfg = Release8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release81|Any CPU.Build.0 = Release81|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release81|Any CPU.Build.0 = Release81|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release81|x86.ActiveCfg = Release81|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|x86.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|x86.ActiveCfg = Debug40|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Any CPU.Build.0 = Debug35|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|x86.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|x86.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|x86.ActiveCfg = Debug40|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Any CPU.Build.0 = Debug45|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug46|Any CPU.ActiveCfg = Debug46|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug46|Any CPU.Build.0 = Debug46|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Any CPU.Build.0 = Debug8|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug81|Any CPU.ActiveCfg = Debug81|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug81|Any CPU.Build.0 = Debug81|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug81|Mixed Platforms.ActiveCfg = Debug81|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug81|Mixed Platforms.Build.0 = Debug81|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug81|x86.ActiveCfg = Debug81|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|x86.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|x86.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|x86.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|x86.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|x86.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Any CPU.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Any CPU.Build.0 = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|x86.ActiveCfg = Debug40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Any CPU.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Any CPU.Build.0 = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Mixed Platforms.Build.0 = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|x86.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Any CPU.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|x86.ActiveCfg = Release40|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Any CPU.ActiveCfg = Release35|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Any CPU.Build.0 = Release35|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Any CPU.ActiveCfg = Release40|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Any CPU.Build.0 = Release40|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Any CPU.Build.0 = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|x86.ActiveCfg = Release40|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Any CPU.ActiveCfg = Release45|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Any CPU.Build.0 = Release45|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Any CPU.Build.0 = Release45|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|x86.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Any CPU.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|x86.ActiveCfg = Release40|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release46|Any CPU.ActiveCfg = Release46|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release46|Any CPU.Build.0 = Release46|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Any CPU.ActiveCfg = Release8|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Any CPU.Build.0 = Release8|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
 		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release81|Any CPU.ActiveCfg = Release81|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release81|Mixed Platforms.ActiveCfg = Release81|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release81|Mixed Platforms.Build.0 = Release81|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release81|x86.ActiveCfg = Release81|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Any CPU.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|x86.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Any CPU.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|x86.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Any CPU.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|x86.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Any CPU.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|x86.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Any CPU.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|x86.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Any CPU.ActiveCfg = Release40|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU
-		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|x86.ActiveCfg = Release40|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release81|Any CPU.Build.0 = Release81|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU
+		{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE

+ 1 - 0
Rx.NET/Source/System.Reactive.Core/InternalsVisibleTo.cs

@@ -22,5 +22,6 @@ using System;
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Experimental")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Experimental")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Linq")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Linq")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.PlatformServices")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.PlatformServices")]
+[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Tests.System.Reactive")]
 
 
 #endif
 #endif

+ 5 - 17
Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs

@@ -371,7 +371,7 @@ namespace System.Reactive.Concurrency
         class FastPeriodicTimer : IDisposable
         class FastPeriodicTimer : IDisposable
         {
         {
             private readonly Action _action;
             private readonly Action _action;
-            private bool disposed;
+            private volatile bool disposed;
 
 
             public FastPeriodicTimer(Action action)
             public FastPeriodicTimer(Action action)
             {
             {
@@ -403,6 +403,7 @@ namespace System.Reactive.Concurrency
 #else
 #else
 using System;
 using System;
 using System.Reactive.Disposables;
 using System.Reactive.Disposables;
+using System.Threading;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
 
 
 namespace System.Reactive.Concurrency
 namespace System.Reactive.Concurrency
@@ -412,11 +413,7 @@ namespace System.Reactive.Concurrency
         public IDisposable StartTimer(Action<object> action, object state, TimeSpan dueTime)
         public IDisposable StartTimer(Action<object> action, object state, TimeSpan dueTime)
         {
         {
             var cancel = new CancellationDisposable();            
             var cancel = new CancellationDisposable();            
-#if USE_TASKEX
-            TaskEx.Delay(dueTime, cancel.Token).ContinueWith(
-#else
-            Task.Delay(dueTime, cancel.Token).ContinueWith(
-#endif
+            TaskHelpers.Delay(dueTime, cancel.Token).ContinueWith(
                 _ => action(state),
                 _ => action(state),
                 TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion
                 TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion
             );
             );
@@ -436,11 +433,7 @@ namespace System.Reactive.Concurrency
                 var moveNext = default(Action);
                 var moveNext = default(Action);
                 moveNext = () =>
                 moveNext = () =>
                 {
                 {
-#if USE_TASKEX
-                TaskEx.Delay(period, cancel.Token).ContinueWith(
-#else
-                    Task.Delay(period, cancel.Token).ContinueWith(
-#endif
+                    TaskHelpers.Delay(period, cancel.Token).ContinueWith(
                         _ =>
                         _ =>
                         {
                         {
                             moveNext();
                             moveNext();
@@ -465,12 +458,7 @@ namespace System.Reactive.Concurrency
         
         
         public void Sleep(TimeSpan timeout)
         public void Sleep(TimeSpan timeout)
         {
         {
-#if USE_TASKEX
-            TaskEx.Delay(timeout).Wait();
-#else
-            Task.Delay(timeout).Wait();
-#endif
-
+            TaskHelpers.Delay(timeout, CancellationToken.None).Wait();
         }
         }
 
 
         public IStopwatch StartStopwatch()
         public IStopwatch StartStopwatch()

+ 2 - 2
Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/DefaultScheduler.cs

@@ -51,7 +51,7 @@ namespace System.Reactive.Concurrency
                     d.Disposable = action(this, state);
                     d.Disposable = action(this, state);
             }, null);
             }, null);
 
 
-            return new CompositeDisposable(
+            return StableCompositeDisposable.Create(
                 d,
                 d,
                 cancel
                 cancel
             );
             );
@@ -83,7 +83,7 @@ namespace System.Reactive.Concurrency
                     d.Disposable = action(this, state);
                     d.Disposable = action(this, state);
             }, null, dt);
             }, null, dt);
 
 
-            return new CompositeDisposable(
+            return StableCompositeDisposable.Create(
                 d,
                 d,
                 cancel
                 cancel
             );
             );

+ 63 - 53
Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs

@@ -9,6 +9,11 @@ namespace System.Reactive.Concurrency
 {
 {
     public partial class LocalScheduler
     public partial class LocalScheduler
     {
     {
+        /// <summary>
+        /// Gate to protect local scheduler queues.
+        /// </summary>
+        private static readonly object _gate = new object();
+
         /// <summary>
         /// <summary>
         /// Gate to protect queues and to synchronize scheduling decisions and system clock
         /// Gate to protect queues and to synchronize scheduling decisions and system clock
         /// change management.
         /// change management.
@@ -42,16 +47,16 @@ namespace System.Reactive.Concurrency
         /// items. This queue is kept in order to be able to relocate short term items back
         /// items. This queue is kept in order to be able to relocate short term items back
         /// to the long term queue in case a system clock change occurs.
         /// to the long term queue in case a system clock change occurs.
         /// </summary>
         /// </summary>
-        private static readonly PriorityQueue<WorkItem/*!*/> s_shortTerm = new PriorityQueue<WorkItem/*!*/>();
+        private readonly PriorityQueue<WorkItem/*!*/> _shortTerm = new PriorityQueue<WorkItem/*!*/>();
 
 
         /// <summary>
         /// <summary>
         /// Set of disposable handles to all of the current short term work Schedule calls,
         /// Set of disposable handles to all of the current short term work Schedule calls,
         /// allowing those to be cancelled upon a system clock change.
         /// allowing those to be cancelled upon a system clock change.
         /// </summary>
         /// </summary>
 #if !NO_HASHSET
 #if !NO_HASHSET
-        private static readonly HashSet<IDisposable> s_shortTermWork = new HashSet<IDisposable>();
+        private readonly HashSet<IDisposable> _shortTermWork = new HashSet<IDisposable>();
 #else
 #else
-        private static readonly Dictionary<IDisposable, object> s_shortTermWork = new Dictionary<IDisposable, object>();
+        private readonly Dictionary<IDisposable, object> _shortTermWork = new Dictionary<IDisposable, object>();
 #endif
 #endif
 
 
         /// <summary>
         /// <summary>
@@ -98,25 +103,27 @@ namespace System.Reactive.Concurrency
         /// </summary>
         /// </summary>
         private static readonly TimeSpan MAXSUPPORTEDTIMER = TimeSpan.FromMilliseconds((1L << 32) - 2);
         private static readonly TimeSpan MAXSUPPORTEDTIMER = TimeSpan.FromMilliseconds((1L << 32) - 2);
 
 
+        /// <summary>
+        /// Creates a new local scheduler.
+        /// </summary>
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline", Justification = "We can't really lift this into a field initializer, and would end up checking for an initialization flag in every static method anyway (which is roughly what the JIT does in a thread-safe manner).")]
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline", Justification = "We can't really lift this into a field initializer, and would end up checking for an initialization flag in every static method anyway (which is roughly what the JIT does in a thread-safe manner).")]
-        static LocalScheduler()
+        protected LocalScheduler()
         {
         {
             //
             //
             // Hook up for system clock change notifications. This doesn't do anything until the
             // Hook up for system clock change notifications. This doesn't do anything until the
             // AddRef method is called (which can throw).
             // AddRef method is called (which can throw).
             //
             //
-            SystemClock.SystemClockChanged += SystemClockChanged;
+            SystemClock.Register(this);
         }
         }
 
 
         /// <summary>
         /// <summary>
         /// Enqueues absolute time scheduled work in the timer queue or the short term work list.
         /// Enqueues absolute time scheduled work in the timer queue or the short term work list.
         /// </summary>
         /// </summary>
-        /// <param name="scheduler">Scheduler to run the work on. Typically "this" from the caller's perspective (LocalScheduler.Schedule), but parameter kept because we have a single (static) timer queue across all of Rx local schedulers.</param>
         /// <param name="state">State to pass to the action.</param>
         /// <param name="state">State to pass to the action.</param>
         /// <param name="dueTime">Absolute time to run the work on. The timer queue is responsible to execute the work close to the specified time, also accounting for system clock changes.</param>
         /// <param name="dueTime">Absolute time to run the work on. The timer queue is responsible to execute the work close to the specified time, also accounting for system clock changes.</param>
         /// <param name="action">Action to run, potentially recursing into the scheduler.</param>
         /// <param name="action">Action to run, potentially recursing into the scheduler.</param>
         /// <returns>Disposable object to prevent the work from running.</returns>
         /// <returns>Disposable object to prevent the work from running.</returns>
-        private static IDisposable Enqueue<TState>(IScheduler scheduler, TState state, DateTimeOffset dueTime, Func<IScheduler, TState, IDisposable> action)
+        private IDisposable Enqueue<TState>(TState state, DateTimeOffset dueTime, Func<IScheduler, TState, IDisposable> action)
         {
         {
             //
             //
             // Work that's due in the past is sent to the underlying scheduler through the Schedule
             // Work that's due in the past is sent to the underlying scheduler through the Schedule
@@ -129,10 +136,10 @@ namespace System.Reactive.Concurrency
             // - Optimize for the default behavior of LocalScheduler where a virtual call to Schedule
             // - Optimize for the default behavior of LocalScheduler where a virtual call to Schedule
             //   for immediate execution calls into the abstract Schedule method with TimeSpan.Zero.
             //   for immediate execution calls into the abstract Schedule method with TimeSpan.Zero.
             //
             //
-            var due = Scheduler.Normalize(dueTime - scheduler.Now);
+            var due = Scheduler.Normalize(dueTime - Now);
             if (due == TimeSpan.Zero)
             if (due == TimeSpan.Zero)
             {
             {
-                return scheduler.Schedule<TState>(state, TimeSpan.Zero, action);
+                return Schedule<TState>(state, TimeSpan.Zero, action);
             }
             }
 
 
             //
             //
@@ -146,7 +153,7 @@ namespace System.Reactive.Concurrency
             //
             //
             SystemClock.AddRef();
             SystemClock.AddRef();
 
 
-            var workItem = new WorkItem<TState>(scheduler, state, dueTime, action);
+            var workItem = new WorkItem<TState>(this, state, dueTime, action);
 
 
             if (due <= SHORTTERM)
             if (due <= SHORTTERM)
             {
             {
@@ -166,26 +173,26 @@ namespace System.Reactive.Concurrency
         /// the short term work is attempted to be cancelled and reevaluated.
         /// the short term work is attempted to be cancelled and reevaluated.
         /// </summary>
         /// </summary>
         /// <param name="item">Work item to schedule in the short term. The caller is responsible to determine the work is indeed short term.</param>
         /// <param name="item">Work item to schedule in the short term. The caller is responsible to determine the work is indeed short term.</param>
-        private static void ScheduleShortTermWork(WorkItem/*!*/ item)
+        private void ScheduleShortTermWork(WorkItem/*!*/ item)
         {
         {
-            lock (s_gate)
+            lock (_gate)
             {
             {
-                s_shortTerm.Enqueue(item);
+                _shortTerm.Enqueue(item);
 
 
                 //
                 //
                 // We don't bother trying to dequeue the item or stop the timer upon cancellation,
                 // We don't bother trying to dequeue the item or stop the timer upon cancellation,
                 // but always let the timer fire to do the queue maintenance. When the item is
                 // but always let the timer fire to do the queue maintenance. When the item is
                 // cancelled, it won't run (see WorkItem.Invoke). In the event of a system clock
                 // cancelled, it won't run (see WorkItem.Invoke). In the event of a system clock
-                // change, all outstanding work in s_shortTermWork is cancelled and the short
+                // change, all outstanding work in _shortTermWork is cancelled and the short
                 // term queue is reevaluated, potentially prompting rescheduling of short term
                 // term queue is reevaluated, potentially prompting rescheduling of short term
                 // work. Notice work is protected against double execution by the implementation
                 // work. Notice work is protected against double execution by the implementation
                 // of WorkItem.Invoke.
                 // of WorkItem.Invoke.
                 //
                 //
                 var d = new SingleAssignmentDisposable();
                 var d = new SingleAssignmentDisposable();
 #if !NO_HASHSET
 #if !NO_HASHSET
-                s_shortTermWork.Add(d);
+                _shortTermWork.Add(d);
 #else
 #else
-                s_shortTermWork.Add(d, null);
+                _shortTermWork.Add(d, null);
 #endif
 #endif
 
 
                 //
                 //
@@ -204,11 +211,11 @@ namespace System.Reactive.Concurrency
         /// <param name="scheduler">Recursive scheduler supplied by the underlying scheduler.</param>
         /// <param name="scheduler">Recursive scheduler supplied by the underlying scheduler.</param>
         /// <param name="cancel">Disposable used to identify the work the timer was triggered for (see code for usage).</param>
         /// <param name="cancel">Disposable used to identify the work the timer was triggered for (see code for usage).</param>
         /// <returns>Empty disposable. Recursive work cancellation is wired through the original WorkItem.</returns>
         /// <returns>Empty disposable. Recursive work cancellation is wired through the original WorkItem.</returns>
-        private static IDisposable ExecuteNextShortTermWorkItem(IScheduler scheduler, IDisposable cancel)
+        private IDisposable ExecuteNextShortTermWorkItem(IScheduler scheduler, IDisposable cancel)
         {
         {
             var next = default(WorkItem);
             var next = default(WorkItem);
 
 
-            lock (s_gate)
+            lock (_gate)
             {
             {
                 //
                 //
                 // Notice that even though we try to cancel all work in the short term queue upon a
                 // Notice that even though we try to cancel all work in the short term queue upon a
@@ -223,9 +230,9 @@ namespace System.Reactive.Concurrency
                 // call to Dispose versus the underlying timer. It's also possible the underlying
                 // call to Dispose versus the underlying timer. It's also possible the underlying
                 // scheduler does a bad job at cancellation, so this measure helps for that too.
                 // scheduler does a bad job at cancellation, so this measure helps for that too.
                 //
                 //
-                if (s_shortTermWork.Remove(cancel) && s_shortTerm.Count > 0)
+                if (_shortTermWork.Remove(cancel) && _shortTerm.Count > 0)
                 {
                 {
-                    next = s_shortTerm.Dequeue();
+                    next = _shortTerm.Dequeue();
                 }
                 }
             }
             }
 
 
@@ -352,7 +359,7 @@ namespace System.Reactive.Concurrency
                         break;
                         break;
 
 
                     var item = s_longTerm.Dequeue();
                     var item = s_longTerm.Dequeue();
-                    ScheduleShortTermWork(item);
+                    item.Scheduler.ScheduleShortTermWork(item);
                 }
                 }
 
 
                 s_nextLongTermWorkItem = null;
                 s_nextLongTermWorkItem = null;
@@ -366,42 +373,45 @@ namespace System.Reactive.Concurrency
         /// </summary>
         /// </summary>
         /// <param name="args">Currently not used.</param>
         /// <param name="args">Currently not used.</param>
         /// <param name="sender">Currently not used.</param>
         /// <param name="sender">Currently not used.</param>
-        private static void SystemClockChanged(object sender, SystemClockChangedEventArgs args)
+        internal void SystemClockChanged(object sender, SystemClockChangedEventArgs args)
         {
         {
-            lock (s_gate)
+            lock (_gate)
             {
             {
-                //
-                // Best-effort cancellation of short term work. A check for presence in the hash set
-                // is used to notice race conditions between cancellation and the timer firing (also
-                // guarded by the same gate object). See checks in ExecuteNextShortTermWorkItem.
-                //
+                lock (s_gate)
+                {
+                    //
+                    // Best-effort cancellation of short term work. A check for presence in the hash set
+                    // is used to notice race conditions between cancellation and the timer firing (also
+                    // guarded by the same gate object). See checks in ExecuteNextShortTermWorkItem.
+                    //
 #if !NO_HASHSET
 #if !NO_HASHSET
-                foreach (var d in s_shortTermWork)
+                    foreach (var d in _shortTermWork)
 #else
 #else
-                foreach (var d in s_shortTermWork.Keys)
+                    foreach (var d in _shortTermWork.Keys)
 #endif
 #endif
-                    d.Dispose();
+                        d.Dispose();
 
 
-                s_shortTermWork.Clear();
+                    _shortTermWork.Clear();
 
 
-                //
-                // Transition short term work to the long term queue for reevaluation by calling the
-                // EvaluateLongTermQueue method. We don't know which direction the clock was changed
-                // in, so we don't optimize for special cases, but always transition the whole queue.
-                // Notice the short term queue is bounded to SHORTTERM length.
-                //
-                while (s_shortTerm.Count > 0)
-                {
-                    var next = s_shortTerm.Dequeue();
-                    s_longTerm.Enqueue(next);
-                }
+                    //
+                    // Transition short term work to the long term queue for reevaluation by calling the
+                    // EvaluateLongTermQueue method. We don't know which direction the clock was changed
+                    // in, so we don't optimize for special cases, but always transition the whole queue.
+                    // Notice the short term queue is bounded to SHORTTERM length.
+                    //
+                    while (_shortTerm.Count > 0)
+                    {
+                        var next = _shortTerm.Dequeue();
+                        s_longTerm.Enqueue(next);
+                    }
 
 
-                //
-                // Reevaluate the queue and don't forget to null out the current timer to force the
-                // method to create a new timer for the new first long term item.
-                //
-                s_nextLongTermWorkItem = null;
-                EvaluateLongTermQueue(null);
+                    //
+                    // Reevaluate the queue and don't forget to null out the current timer to force the
+                    // method to create a new timer for the new first long term item.
+                    //
+                    s_nextLongTermWorkItem = null;
+                    EvaluateLongTermQueue(null);
+                }
             }
             }
         }
         }
 
 
@@ -414,12 +424,12 @@ namespace System.Reactive.Concurrency
         /// </remarks>
         /// </remarks>
         abstract class WorkItem : IComparable<WorkItem>, IDisposable
         abstract class WorkItem : IComparable<WorkItem>, IDisposable
         {
         {
-            private readonly IScheduler _scheduler;
+            private readonly LocalScheduler _scheduler;
             private readonly DateTimeOffset _dueTime;
             private readonly DateTimeOffset _dueTime;
             private readonly SingleAssignmentDisposable _disposable;
             private readonly SingleAssignmentDisposable _disposable;
             private int _hasRun;
             private int _hasRun;
 
 
-            public WorkItem(IScheduler scheduler, DateTimeOffset dueTime)
+            public WorkItem(LocalScheduler scheduler, DateTimeOffset dueTime)
             {
             {
                 _scheduler = scheduler;
                 _scheduler = scheduler;
                 _dueTime = dueTime;
                 _dueTime = dueTime;
@@ -427,7 +437,7 @@ namespace System.Reactive.Concurrency
                 _hasRun = 0;
                 _hasRun = 0;
             }
             }
 
 
-            public IScheduler Scheduler
+            public LocalScheduler Scheduler
             {
             {
                 get { return _scheduler; }
                 get { return _scheduler; }
             }
             }
@@ -481,7 +491,7 @@ namespace System.Reactive.Concurrency
             private readonly TState _state;
             private readonly TState _state;
             private readonly Func<IScheduler, TState, IDisposable> _action;
             private readonly Func<IScheduler, TState, IDisposable> _action;
 
 
-            public WorkItem(IScheduler scheduler, TState state, DateTimeOffset dueTime, Func<IScheduler, TState, IDisposable> action)
+            public WorkItem(LocalScheduler scheduler, TState state, DateTimeOffset dueTime, Func<IScheduler, TState, IDisposable> action)
                 : base(scheduler, dueTime)
                 : base(scheduler, dueTime)
             {
             {
                 _state = state;
                 _state = state;

+ 1 - 1
Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.cs

@@ -57,7 +57,7 @@ namespace System.Reactive.Concurrency
             if (action == null)
             if (action == null)
                 throw new ArgumentNullException("action");
                 throw new ArgumentNullException("action");
 
 
-            return Enqueue(this, state, dueTime, action);
+            return Enqueue(state, dueTime, action);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 1 - 1
Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/Scheduler.Async.cs

@@ -376,7 +376,7 @@ namespace System.Reactive.Concurrency
                 d.Disposable = t.Result;
                 d.Disposable = t.Result;
             }, TaskContinuationOptions.ExecuteSynchronously);
             }, TaskContinuationOptions.ExecuteSynchronously);
 
 
-            return new CompositeDisposable(c, d);
+            return StableCompositeDisposable.Create(c, d);
         }
         }
 
 
         private static IDisposable InvokeAsync<TState>(IScheduler self, TState s, Func<IScheduler, TState, CancellationToken, Task> action)
         private static IDisposable InvokeAsync<TState>(IScheduler self, TState s, Func<IScheduler, TState, CancellationToken, Task> action)

+ 3 - 3
Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/Scheduler.Services.Emulation.cs

@@ -338,11 +338,11 @@ namespace System.Reactive.Concurrency
                 _nextDue = _period;
                 _nextDue = _period;
                 _runState = RUNNING;
                 _runState = RUNNING;
 
 
-                return new CompositeDisposable(2)
-                {
+                return StableCompositeDisposable.Create
+                (
                     _scheduler.Schedule(_nextDue, Tick),
                     _scheduler.Schedule(_nextDue, Tick),
                     Disposable.Create(Cancel)
                     Disposable.Create(Cancel)
-                };
+                );
             }
             }
 
 
             private void Tick(Action<TimeSpan> recurse)
             private void Tick(Action<TimeSpan> recurse)

+ 1 - 1
Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs

@@ -76,7 +76,7 @@ namespace System.Reactive.Concurrency
                     _parent._context.OperationCompleted();
                     _parent._context.OperationCompleted();
                 });
                 });
 
 
-                return new CompositeDisposable(d, c);
+                return StableCompositeDisposable.Create(d, c);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)

+ 39 - 0
Rx.NET/Source/System.Reactive.Core/Reactive/Concurrency/TaskHelpers.cs

@@ -0,0 +1,39 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+#if !NO_TPL && !NO_TASK_DELAY
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace System.Reactive.Concurrency
+{
+    static class TaskHelpers
+    {
+        private const int MAX_DELAY = int.MaxValue;
+
+        public static Task Delay(TimeSpan delay, CancellationToken token)
+        {
+            var milliseconds = (long)delay.TotalMilliseconds;
+
+            if (milliseconds > MAX_DELAY)
+            {
+                var remainder = delay - TimeSpan.FromMilliseconds(MAX_DELAY);
+
+                return
+#if USE_TASKEX
+                    TaskEx.Delay(MAX_DELAY, token)
+#else
+                    Task.Delay(MAX_DELAY, token)
+#endif
+                        .ContinueWith(_ => Delay(remainder, token), TaskContinuationOptions.ExecuteSynchronously)
+                        .Unwrap();
+            }
+
+#if USE_TASKEX
+            return TaskEx.Delay(delay, token);
+#else
+            return Task.Delay(delay, token);
+#endif
+        }
+    }
+}
+#endif

+ 10 - 5
Rx.NET/Source/System.Reactive.Core/Reactive/Disposables/CompositeDisposable.cs

@@ -44,13 +44,10 @@ namespace System.Reactive.Disposables
         /// </summary>
         /// </summary>
         /// <param name="disposables">Disposables that will be disposed together.</param>
         /// <param name="disposables">Disposables that will be disposed together.</param>
         /// <exception cref="ArgumentNullException"><paramref name="disposables"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="disposables"/> is null.</exception>
+        /// <exception cref="ArgumentException">Any of the disposables in the <paramref name="disposables"/> collection is null.</exception>
         public CompositeDisposable(params IDisposable[] disposables)
         public CompositeDisposable(params IDisposable[] disposables)
+            : this((IEnumerable<IDisposable>)disposables)
         {
         {
-            if (disposables == null)
-                throw new ArgumentNullException("disposables");
-
-            _disposables = new List<IDisposable>(disposables);
-            _count = _disposables.Count;
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -58,12 +55,20 @@ namespace System.Reactive.Disposables
         /// </summary>
         /// </summary>
         /// <param name="disposables">Disposables that will be disposed together.</param>
         /// <param name="disposables">Disposables that will be disposed together.</param>
         /// <exception cref="ArgumentNullException"><paramref name="disposables"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="disposables"/> is null.</exception>
+        /// <exception cref="ArgumentException">Any of the disposables in the <paramref name="disposables"/> collection is null.</exception>
         public CompositeDisposable(IEnumerable<IDisposable> disposables)
         public CompositeDisposable(IEnumerable<IDisposable> disposables)
         {
         {
             if (disposables == null)
             if (disposables == null)
                 throw new ArgumentNullException("disposables");
                 throw new ArgumentNullException("disposables");
 
 
             _disposables = new List<IDisposable>(disposables);
             _disposables = new List<IDisposable>(disposables);
+            
+            //
+            // Doing this on the list to avoid duplicate enumeration of disposables.
+            //
+            if (_disposables.Contains(null))
+                throw new ArgumentException(Strings_Core.DISPOSABLES_CANT_CONTAIN_NULL, "disposables");
+            
             _count = _disposables.Count;
             _count = _disposables.Count;
         }
         }
 
 

+ 144 - 0
Rx.NET/Source/System.Reactive.Core/Reactive/Disposables/StableCompositeDisposable.cs

@@ -0,0 +1,144 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+using System.Collections.Generic;
+using System.Threading;
+
+namespace System.Reactive.Disposables
+{
+    /// <summary>
+    /// Represents a group of disposable resources that are disposed together.
+    /// </summary>
+    public abstract class StableCompositeDisposable : ICancelable
+    {
+        /// <summary>
+        /// Creates a new group containing two disposable resources that are disposed together.
+        /// </summary>
+        /// <param name="disposable1">The first disposable resoruce to add to the group.</param>
+        /// <param name="disposable2">The second disposable resoruce to add to the group.</param>
+        /// <returns>Group of disposable resources that are disposed together.</returns>
+        public static ICancelable Create(IDisposable disposable1, IDisposable disposable2)
+        {
+            if (disposable1 == null)
+                throw new ArgumentNullException("disposable1");
+            if (disposable2 == null)
+                throw new ArgumentNullException("disposable2");
+
+            return new Binary(disposable1, disposable2);
+        }
+
+        /// <summary>
+        /// Creates a new group of disposable resources that are disposed together.
+        /// </summary>
+        /// <param name="disposables">Disposable resources to add to the group.</param>
+        /// <returns>Group of disposable resources that are disposed together.</returns>
+        public static ICancelable Create(params IDisposable[] disposables)
+        {
+            if (disposables == null)
+                throw new ArgumentNullException("disposables");
+
+            return new NAry(disposables);
+        }
+
+        /// <summary>
+        /// Creates a new group of disposable resources that are disposed together.
+        /// </summary>
+        /// <param name="disposables">Disposable resources to add to the group.</param>
+        /// <returns>Group of disposable resources that are disposed together.</returns>
+        public static ICancelable Create(IEnumerable<IDisposable> disposables)
+        {
+            if (disposables == null)
+                throw new ArgumentNullException("disposables");
+
+            return new NAry(disposables);
+        }
+
+        /// <summary>
+        /// Disposes all disposables in the group.
+        /// </summary>
+        public abstract void Dispose();
+
+        /// <summary>
+        /// Gets a value that indicates whether the object is disposed.
+        /// </summary>
+        public abstract bool IsDisposed
+        {
+            get;
+        }
+
+        class Binary : StableCompositeDisposable
+        {
+            private volatile IDisposable _disposable1;
+            private volatile IDisposable _disposable2;
+
+            public Binary(IDisposable disposable1, IDisposable disposable2)
+            {
+                _disposable1 = disposable1;
+                _disposable2 = disposable2;
+            }
+
+            public override bool IsDisposed
+            {
+                get
+                {
+                    return _disposable1 == null;
+                }
+            }
+
+            public override void Dispose()
+            {
+                var old1 = Interlocked.Exchange(ref _disposable1, null);
+                if (old1 != null)
+                {
+                    old1.Dispose();
+                }
+
+                var old2 = Interlocked.Exchange(ref _disposable2, null);
+                if (old2 != null)
+                {
+                    old2.Dispose();
+                }
+            }
+        }
+
+        class NAry : StableCompositeDisposable
+        {
+            private volatile List<IDisposable> _disposables;
+
+            public NAry(IDisposable[] disposables)
+                : this((IEnumerable<IDisposable>)disposables)
+            {
+            }
+
+            public NAry(IEnumerable<IDisposable> disposables)
+            {
+                _disposables = new List<IDisposable>(disposables);
+
+                //
+                // Doing this on the list to avoid duplicate enumeration of disposables.
+                //
+                if (_disposables.Contains(null))
+                    throw new ArgumentException(Strings_Core.DISPOSABLES_CANT_CONTAIN_NULL, "disposables");
+            }
+
+            public override bool IsDisposed
+            {
+                get
+                {
+                    return _disposables == null;
+                }
+            }
+
+            public override void Dispose()
+            {
+                var old = Interlocked.Exchange(ref _disposables, null);
+                if (old != null)
+                {
+                    foreach (var d in old)
+                    {
+                        d.Dispose();
+                    }
+                }
+            }
+        }
+    }
+}

+ 4 - 4
Rx.NET/Source/System.Reactive.Core/Reactive/Internal/Constants.cs

@@ -8,10 +8,10 @@ namespace System.Reactive
     {
     {
         private const string OBSOLETE_REFACTORING = "This property is no longer supported due to refactoring of the API surface and elimination of platform-specific dependencies.";
         private const string OBSOLETE_REFACTORING = "This property is no longer supported due to refactoring of the API surface and elimination of platform-specific dependencies.";
 
 
-        public const string OBSOLETE_SCHEDULER_NEWTHREAD  = OBSOLETE_REFACTORING + " Please add a reference to the System.Reactive.PlatformServices assembly for your target platform and use NewThreadScheduler.Default to obtain an instance of this scheduler type. See http://go.microsoft.com/fwlink/?LinkID=260866 for more information.";
-        public const string OBSOLETE_SCHEDULER_TASKPOOL   = OBSOLETE_REFACTORING + " Please add a reference to the System.Reactive.PlatformServices assembly for your target platform and use TaskPoolScheduler.Default to obtain an instance of this scheduler type. See http://go.microsoft.com/fwlink/?LinkID=260866 for more information.";
-        public const string OBSOLETE_SCHEDULER_THREADPOOL = OBSOLETE_REFACTORING + " Consider using Scheduler.Default to obtain the platform's most appropriate pool-based scheduler. In order to access a specific pool-based scheduler, please add a reference to the System.Reactive.PlatformServices assembly for your target platform and use the appropriate scheduler in the System.Reactive.Concurrency namespace. See http://go.microsoft.com/fwlink/?LinkID=260866 for more information.";
+        public const string OBSOLETE_SCHEDULER_NEWTHREAD  = OBSOLETE_REFACTORING + " Please add a reference to the System.Reactive.PlatformServices assembly for your target platform and use NewThreadScheduler.Default to obtain an instance of this scheduler type.";
+        public const string OBSOLETE_SCHEDULER_TASKPOOL   = OBSOLETE_REFACTORING + " Please add a reference to the System.Reactive.PlatformServices assembly for your target platform and use TaskPoolScheduler.Default to obtain an instance of this scheduler type.";
+        public const string OBSOLETE_SCHEDULER_THREADPOOL = OBSOLETE_REFACTORING + " Consider using Scheduler.Default to obtain the platform's most appropriate pool-based scheduler. In order to access a specific pool-based scheduler, please add a reference to the System.Reactive.PlatformServices assembly for your target platform and use the appropriate scheduler in the System.Reactive.Concurrency namespace.";
 
 
-        public const string OBSOLETE_SCHEDULEREQUIRED     = "This instance property is no longer supported. Use CurrentThreadScheduler.IsScheduleRequired instead. See http://go.microsoft.com/fwlink/?LinkID=260866 for more information.";
+        public const string OBSOLETE_SCHEDULEREQUIRED     = "This instance property is no longer supported. Use CurrentThreadScheduler.IsScheduleRequired instead.";
     }
     }
 }
 }

+ 33 - 18
Rx.NET/Source/System.Reactive.Core/Reactive/Internal/ImmutableList.cs

@@ -4,23 +4,35 @@ namespace System.Reactive
 {
 {
     internal class ImmutableList<T>
     internal class ImmutableList<T>
     {
     {
-        T[] data;
+        public static readonly ImmutableList<T> Empty = new ImmutableList<T>();
 
 
-        public ImmutableList()
+        private readonly T[] _data;
+
+        private ImmutableList()
         {
         {
-            data = new T[0];
+            _data = new T[0];
         }
         }
 
 
         public ImmutableList(T[] data)
         public ImmutableList(T[] data)
         {
         {
-            this.data = data;
+            _data = data;
+        }
+
+        public T[] Data
+        {
+            get
+            {
+                return _data;
+            }
         }
         }
 
 
         public ImmutableList<T> Add(T value)
         public ImmutableList<T> Add(T value)
         {
         {
-            var newData = new T[data.Length + 1];
-            Array.Copy(data, newData, data.Length);
-            newData[data.Length] = value;
+            var newData = new T[_data.Length + 1];
+
+            Array.Copy(_data, newData, _data.Length);
+            newData[_data.Length] = value;
+
             return new ImmutableList<T>(newData);
             return new ImmutableList<T>(newData);
         }
         }
 
 
@@ -29,23 +41,26 @@ namespace System.Reactive
             var i = IndexOf(value);
             var i = IndexOf(value);
             if (i < 0)
             if (i < 0)
                 return this;
                 return this;
-            var newData = new T[data.Length - 1];
-            Array.Copy(data, 0, newData, 0, i);
-            Array.Copy(data, i + 1, newData, i, data.Length - i - 1);
+
+            var length = _data.Length;
+            if (length == 1)
+                return Empty;
+
+            var newData = new T[length - 1];
+
+            Array.Copy(_data, 0, newData, 0, i);
+            Array.Copy(_data, i + 1, newData, i, length - i - 1);
+
             return new ImmutableList<T>(newData);
             return new ImmutableList<T>(newData);
         }
         }
 
 
-        public int IndexOf(T value)
+        private int IndexOf(T value)
         {
         {
-            for (var i = 0; i < data.Length; ++i)
-                if (data[i].Equals(value))
+            for (var i = 0; i < _data.Length; ++i)
+                if (object.Equals(_data[i], value))
                     return i;
                     return i;
-            return -1;
-        }
 
 
-        public T[] Data
-        {
-            get { return data; }
+            return -1;
         }
         }
     }
     }
 }
 }

+ 1 - 1
Rx.NET/Source/System.Reactive.Core/Reactive/Internal/Producer.cs

@@ -45,7 +45,7 @@ namespace System.Reactive
             state.sink = new SingleAssignmentDisposable();
             state.sink = new SingleAssignmentDisposable();
             state.subscription = new SingleAssignmentDisposable();
             state.subscription = new SingleAssignmentDisposable();
 
 
-            var d = new CompositeDisposable(2) { state.sink, state.subscription };
+            var d = StableCompositeDisposable.Create(state.sink, state.subscription);
 
 
             //
             //
             // See AutoDetachObserver.cs for more information on the safeguarding requirement and
             // See AutoDetachObserver.cs for more information on the safeguarding requirement and

+ 17 - 7
Rx.NET/Source/System.Reactive.Core/Reactive/Internal/ScheduledObserver.cs

@@ -11,7 +11,7 @@ namespace System.Reactive
     using System.Collections.Concurrent;
     using System.Collections.Concurrent;
     using System.Diagnostics;
     using System.Diagnostics;
 
 
-    internal class ScheduledObserver<T> : ObserverBase<T>, IDisposable
+    internal class ScheduledObserver<T> : ObserverBase<T>, IScheduledObserver<T>
     {
     {
         private volatile int _state = 0;
         private volatile int _state = 0;
         private const int STOPPED = 0;
         private const int STOPPED = 0;
@@ -36,11 +36,15 @@ namespace System.Reactive
             _longRunning = _scheduler.AsLongRunning();
             _longRunning = _scheduler.AsLongRunning();
 
 
             if (_longRunning != null)
             if (_longRunning != null)
+            {
                 _dispatcherEvent = new SemaphoreSlim(0);
                 _dispatcherEvent = new SemaphoreSlim(0);
+                _dispatcherEventRelease = Disposable.Create(() => _dispatcherEvent.Release());
+            }
         }
         }
 
 
         private readonly object _dispatcherInitGate = new object();
         private readonly object _dispatcherInitGate = new object();
-        private SemaphoreSlim _dispatcherEvent;
+        private readonly SemaphoreSlim _dispatcherEvent;
+        private readonly IDisposable _dispatcherEventRelease;
         private IDisposable _dispatcherJob;
         private IDisposable _dispatcherJob;
 
 
         private void EnsureDispatcher()
         private void EnsureDispatcher()
@@ -53,11 +57,11 @@ namespace System.Reactive
                     {
                     {
                         _dispatcherJob = _longRunning.ScheduleLongRunning(Dispatch);
                         _dispatcherJob = _longRunning.ScheduleLongRunning(Dispatch);
 
 
-                        _disposable.Disposable = new CompositeDisposable(2)
-                        {
+                        _disposable.Disposable = StableCompositeDisposable.Create
+                        (
                             _dispatcherJob,
                             _dispatcherJob,
-                            Disposable.Create(() => _dispatcherEvent.Release())
-                        };
+                            _dispatcherEventRelease
+                        );
                     }
                     }
                 }
                 }
             }
             }
@@ -296,7 +300,7 @@ namespace System.Reactive
         }
         }
     }
     }
 #else
 #else
-    class ScheduledObserver<T> : ObserverBase<T>, IDisposable
+    class ScheduledObserver<T> : ObserverBase<T>, IScheduledObserver<T>
     {
     {
         private bool _isAcquired = false;
         private bool _isAcquired = false;
         private bool _hasFaulted = false;
         private bool _hasFaulted = false;
@@ -438,4 +442,10 @@ namespace System.Reactive
             }
             }
         }
         }
     }
     }
+
+    interface IScheduledObserver<T> : IObserver<T>, IDisposable
+    {
+        void EnsureActive();
+        void EnsureActive(int count);
+    }
 }
 }

+ 140 - 8
Rx.NET/Source/System.Reactive.Core/Reactive/Internal/SystemClock.cs

@@ -1,6 +1,9 @@
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
 
 
+using System.Collections;
+using System.Collections.Generic;
 using System.ComponentModel;
 using System.ComponentModel;
+using System.Reactive.Concurrency;
 using System.Threading;
 using System.Threading;
 
 
 namespace System.Reactive.PlatformServices
 namespace System.Reactive.PlatformServices
@@ -17,6 +20,8 @@ namespace System.Reactive.PlatformServices
     {
     {
         private static Lazy<ISystemClock> s_serviceSystemClock = new Lazy<ISystemClock>(InitializeSystemClock);
         private static Lazy<ISystemClock> s_serviceSystemClock = new Lazy<ISystemClock>(InitializeSystemClock);
         private static Lazy<INotifySystemClockChanged> s_serviceSystemClockChanged = new Lazy<INotifySystemClockChanged>(InitializeSystemClockChanged);
         private static Lazy<INotifySystemClockChanged> s_serviceSystemClockChanged = new Lazy<INotifySystemClockChanged>(InitializeSystemClockChanged);
+        private static readonly HashSet<WeakReference<LocalScheduler>> s_systemClockChanged = new HashSet<WeakReference<LocalScheduler>>();
+        private static IDisposable s_systemClockChangedHandlerCollector;
 
 
         private static int _refCount;
         private static int _refCount;
 
 
@@ -28,11 +33,6 @@ namespace System.Reactive.PlatformServices
             get { return s_serviceSystemClock.Value.UtcNow; }
             get { return s_serviceSystemClock.Value.UtcNow; }
         }
         }
 
 
-        /// <summary>
-        /// Event that gets raised when a system clock change is detected, if there's any interest as indicated by AddRef calls.
-        /// </summary>
-        public static event EventHandler<SystemClockChangedEventArgs> SystemClockChanged;
-
         /// <summary>
         /// <summary>
         /// Adds a reference to the system clock monitor, causing it to be sending notifications.
         /// Adds a reference to the system clock monitor, causing it to be sending notifications.
         /// </summary>
         /// </summary>
@@ -59,9 +59,18 @@ namespace System.Reactive.PlatformServices
 
 
         private static void OnSystemClockChanged(object sender, SystemClockChangedEventArgs e)
         private static void OnSystemClockChanged(object sender, SystemClockChangedEventArgs e)
         {
         {
-            var scc = SystemClockChanged;
-            if (scc != null)
-                scc(sender, e);
+            lock (s_systemClockChanged)
+            {
+                foreach (var entry in s_systemClockChanged)
+                {
+                    var scheduler = default(LocalScheduler);
+
+                    if (entry.TryGetTarget(out scheduler))
+                    {
+                        scheduler.SystemClockChanged(sender, e);
+                    }
+                }
+            }
         }
         }
 
 
         private static ISystemClock InitializeSystemClock()
         private static ISystemClock InitializeSystemClock()
@@ -73,6 +82,75 @@ namespace System.Reactive.PlatformServices
         {
         {
             return PlatformEnlightenmentProvider.Current.GetService<INotifySystemClockChanged>() ?? new DefaultSystemClockMonitor();
             return PlatformEnlightenmentProvider.Current.GetService<INotifySystemClockChanged>() ?? new DefaultSystemClockMonitor();
         }
         }
+
+        internal static void Register(LocalScheduler scheduler)
+        {
+            //
+            // LocalScheduler maintains per-instance work queues that need revisiting
+            // upon system clock changes. We need to be careful to avoid keeping those
+            // scheduler instances alive by the system clock monitor, so we use weak
+            // references here. In particular, AsyncLockScheduler in ImmediateScheduler
+            // can have a lot of instances, so we need to collect spurious handlers
+            // at regular times.
+            //
+            lock (s_systemClockChanged)
+            {
+                s_systemClockChanged.Add(new WeakReference<LocalScheduler>(scheduler));
+
+                if (s_systemClockChanged.Count == 1)
+                {
+                    s_systemClockChangedHandlerCollector = ConcurrencyAbstractionLayer.Current.StartPeriodicTimer(CollectHandlers, TimeSpan.FromSeconds(30));
+                }
+                else if (s_systemClockChanged.Count % 64 == 0)
+                {
+                    CollectHandlers();
+                }
+            }
+        }
+
+        private static void CollectHandlers()
+        {
+            //
+            // The handler collector merely collects the WeakReference<T> instances
+            // that are kept in the hash set. The underlying scheduler itself will
+            // be collected due to the weak reference. Unfortunately, we can't use
+            // the ConditionalWeakTable<TKey, TValue> type here because we need to
+            // be able to enumerate the keys.
+            //
+            lock (s_systemClockChanged)
+            {
+                var remove = default(HashSet<WeakReference<LocalScheduler>>);
+
+                foreach (var handler in s_systemClockChanged)
+                {
+                    var scheduler = default(LocalScheduler);
+
+                    if (!handler.TryGetTarget(out scheduler))
+                    {
+                        if (remove == null)
+                        {
+                            remove = new HashSet<WeakReference<LocalScheduler>>();
+                        }
+
+                        remove.Add(handler);
+                    }
+                }
+
+                if (remove != null)
+                {
+                    foreach (var handler in remove)
+                    {
+                        s_systemClockChanged.Remove(handler);
+                    }
+                }
+
+                if (s_systemClockChanged.Count == 0)
+                {
+                    s_systemClockChangedHandlerCollector.Dispose();
+                    s_systemClockChangedHandlerCollector = null;
+                }
+            }
+        }
     }
     }
 
 
     /// <summary>
     /// <summary>
@@ -146,4 +224,58 @@ namespace System.Reactive.PlatformServices
         /// </summary>
         /// </summary>
         public DateTimeOffset NewTime { get; private set; }
         public DateTimeOffset NewTime { get; private set; }
     }
     }
+
+#if NO_WEAKREFOFT
+    class WeakReference<T>
+        where T : class
+    {
+        private readonly WeakReference _weakReference;
+
+        public WeakReference(T value)
+        {
+            _weakReference = new WeakReference(value);
+        }
+
+        public bool TryGetTarget(out T value)
+        {
+            value = (T)_weakReference.Target;
+            return value != null;
+        }
+    }
+#endif
+
+#if NO_HASHSET
+    class HashSet<T> : IEnumerable<T>
+    {
+        private readonly Dictionary<T, object> _dictionary = new Dictionary<T, object>();
+
+        public int Count
+        {
+            get
+            {
+                return _dictionary.Count;
+            }
+        }
+
+        public IEnumerator<T> GetEnumerator()
+        {
+            return _dictionary.Keys.GetEnumerator();
+        }
+
+        public void Add(T value)
+        {
+            _dictionary.Add(value, null);
+        }
+
+        public void Remove(T value)
+        {
+            _dictionary.Remove(value);
+        }
+
+        IEnumerator IEnumerable.GetEnumerator()
+        {
+            return GetEnumerator();
+        }
+    }
+#endif
 }
 }

+ 33 - 0
Rx.NET/Source/System.Reactive.Core/Reactive/Internal/TaskServices.Default.cs

@@ -0,0 +1,33 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+using System.Threading;
+using System.Threading.Tasks;
+
+#if HAS_TPL46
+namespace System.Reactive.PlatformServices
+{
+    //
+    // WARNING: This code is kept *identically* in two places. One copy is kept in System.Reactive.Core for non-PLIB platforms.
+    //          Another copy is kept in System.Reactive.PlatformServices to enlighten the default lowest common denominator
+    //          behavior of Rx for PLIB when used on a more capable platform.
+    //
+    internal class DefaultTaskServices/*Impl*/ : ITaskServices
+    {
+        public bool TrySetCanceled<T>(TaskCompletionSource<T> tcs, CancellationToken token)
+        {
+            return tcs.TrySetCanceled(token);
+        }
+    }
+}
+#else
+namespace System.Reactive.PlatformServices
+{
+    internal class DefaultTaskServices : ITaskServices
+    {
+        public bool TrySetCanceled<T>(TaskCompletionSource<T> tcs, CancellationToken token)
+        {
+            return tcs.TrySetCanceled();
+        }
+    }
+}
+#endif

+ 47 - 0
Rx.NET/Source/System.Reactive.Core/Reactive/Internal/TaskServices.cs

@@ -0,0 +1,47 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+using System.ComponentModel;
+using System.Reactive.PlatformServices;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace System.Reactive
+{
+    internal static class TaskHelpers
+    {
+        private static Lazy<ITaskServices> s_services = new Lazy<ITaskServices>(Initialize);
+
+        private static ITaskServices Initialize()
+        {
+            return PlatformEnlightenmentProvider.Current.GetService<ITaskServices>() ?? new DefaultTaskServices();
+        }
+
+        public static bool TrySetCanceled<T>(this TaskCompletionSource<T> tcs, CancellationToken token)
+        {
+            return s_services.Value.TrySetCanceled(tcs, token);
+        }
+    }
+}
+
+namespace System.Reactive.PlatformServices
+{
+    /// <summary>
+    /// (Infrastructure) Services to leverage evolving TPL Task APIs.
+    /// </summary>
+    /// <remarks>
+    /// This type is used by the Rx infrastructure and not meant for public consumption or implementation.
+    /// No guarantees are made about forward compatibility of the type's functionality and its usage.
+    /// </remarks>
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public interface ITaskServices
+    {
+        /// <summary>
+        /// Attempts to transition the underlying Task{T} into the Canceled state.
+        /// </summary>
+        /// <typeparam name="T">Type of the result of the underlying task.</typeparam>
+        /// <param name="tcs">Task completion source whose underlying task to transition into the Canceled state.</param>
+        /// <param name="token">Cancellation token that triggered the cancellation.</param>
+        /// <returns>True if the operation was successful; false if the operation was unsuccessful or the object has already been disposed.</returns>
+        bool TrySetCanceled<T>(TaskCompletionSource<T> tcs, CancellationToken token);
+    }
+}

+ 11 - 0
Rx.NET/Source/System.Reactive.Core/Strings_Core.Generated.cs

@@ -168,5 +168,16 @@ namespace System.Reactive
                 return ResourceManager.GetString("SCHEDULER_OPERATION_ALREADY_AWAITED", resourceCulture);
                 return ResourceManager.GetString("SCHEDULER_OPERATION_ALREADY_AWAITED", resourceCulture);
             }
             }
         }
         }
+
+        /// <summary>
+        ///   Looks up a localized string similar to Disposables collection can not contain null values..
+        /// </summary>
+        internal static string DISPOSABLES_CANT_CONTAIN_NULL
+        {
+            get
+            {
+                return ResourceManager.GetString("DISPOSABLES_CANT_CONTAIN_NULL", resourceCulture);
+            }
+        }
     }
     }
 }
 }

+ 3 - 0
Rx.NET/Source/System.Reactive.Core/Strings_Core.resx

@@ -123,6 +123,9 @@
   <data name="COMPLETED_NO_VALUE" xml:space="preserve">
   <data name="COMPLETED_NO_VALUE" xml:space="preserve">
     <value>OnCompleted notification doesn't have a value.</value>
     <value>OnCompleted notification doesn't have a value.</value>
   </data>
   </data>
+  <data name="DISPOSABLES_CANT_CONTAIN_NULL" xml:space="preserve">
+    <value>Disposables collection can not contain null values.</value>
+  </data>
   <data name="DISPOSABLE_ALREADY_ASSIGNED" xml:space="preserve">
   <data name="DISPOSABLE_ALREADY_ASSIGNED" xml:space="preserve">
     <value>Disposable has already been assigned.</value>
     <value>Disposable has already been assigned.</value>
   </data>
   </data>

+ 4 - 6
Rx.NET/Source/System.Reactive.Core/System.Reactive.Core.csproj

@@ -15,12 +15,6 @@
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
     <RestorePackages>true</RestorePackages>
     <RestorePackages>true</RestorePackages>
   </PropertyGroup>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseXBLV|AnyCPU'">
-    <OutputPath>bin\ReleaseXBLV\</OutputPath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugXBLV|AnyCPU'">
-    <OutputPath>bin\DebugXBLV\</OutputPath>
-  </PropertyGroup>
   <Import Project="..\Common.targets" />
   <Import Project="..\Common.targets" />
   <PropertyGroup>
   <PropertyGroup>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>
@@ -69,6 +63,8 @@
     <Compile Include="Reactive\Concurrency\Synchronization.Synchronize.cs" />
     <Compile Include="Reactive\Concurrency\Synchronization.Synchronize.cs" />
     <Compile Include="Reactive\Concurrency\SynchronizationContextScheduler.cs" />
     <Compile Include="Reactive\Concurrency\SynchronizationContextScheduler.cs" />
     <Compile Include="Reactive\Concurrency\DefaultScheduler.cs" />
     <Compile Include="Reactive\Concurrency\DefaultScheduler.cs" />
+    <Compile Include="Reactive\Concurrency\TaskHelpers.cs" />
+    <Compile Include="Reactive\Disposables\StableCompositeDisposable.cs" />
     <Compile Include="Reactive\Internal\AsyncLockObserver.cs" />
     <Compile Include="Reactive\Internal\AsyncLockObserver.cs" />
     <Compile Include="Reactive\Internal\CheckedObserver.cs" />
     <Compile Include="Reactive\Internal\CheckedObserver.cs" />
     <Compile Include="Reactive\Internal\ConcurrentDictionary.cs" />
     <Compile Include="Reactive\Internal\ConcurrentDictionary.cs" />
@@ -87,6 +83,8 @@
     <Compile Include="Reactive\Disposables\SerialDisposable.cs" />
     <Compile Include="Reactive\Disposables\SerialDisposable.cs" />
     <Compile Include="Reactive\Disposables\SingleAssignmentDisposable.cs" />
     <Compile Include="Reactive\Disposables\SingleAssignmentDisposable.cs" />
     <Compile Include="Reactive\Internal\AutoDetachObserver.cs" />
     <Compile Include="Reactive\Internal\AutoDetachObserver.cs" />
+    <Compile Include="Reactive\Internal\TaskServices.Default.cs" />
+    <Compile Include="Reactive\Internal\TaskServices.cs" />
     <Compile Include="Reactive\Internal\ExceptionServices.Default.cs" />
     <Compile Include="Reactive\Internal\ExceptionServices.Default.cs" />
     <Compile Include="Reactive\Internal\ExceptionServices.cs" />
     <Compile Include="Reactive\Internal\ExceptionServices.cs" />
     <Compile Include="Reactive\Internal\HostLifecycleService.cs" />
     <Compile Include="Reactive\Internal\HostLifecycleService.cs" />

+ 0 - 6
Rx.NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj

@@ -14,12 +14,6 @@
     <CodeAnalysisRuleSet>..\Rx.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRuleSet>..\Rx.ruleset</CodeAnalysisRuleSet>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
   </PropertyGroup>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseXBLV|AnyCPU'">
-    <OutputPath>bin\ReleaseXBLV\</OutputPath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugXBLV|AnyCPU'">
-    <OutputPath>bin\DebugXBLV\</OutputPath>
-  </PropertyGroup>
   <Import Project="..\Common.targets" />
   <Import Project="..\Common.targets" />
   <PropertyGroup>
   <PropertyGroup>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>

+ 1 - 1
Rx.NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs

@@ -1,5 +1,5 @@
 /*
 /*
- * WARNING: Auto-generated file (11/21/2013 11:07:25 AM)
+ * WARNING: Auto-generated file (5/1/2015 21:21:20)
  * Run Rx's auto-homoiconizer tool to generate this file (in the HomoIcon directory).
  * Run Rx's auto-homoiconizer tool to generate this file (in the HomoIcon directory).
  */
  */
 
 

+ 1 - 1
Rx.NET/Source/System.Reactive.Experimental/Reactive/Linq/QueryLanguageEx.cs

@@ -436,7 +436,7 @@ namespace System.Reactive.Linq
                 leftSubscription.Disposable = leftSource.Materialize().Select(x => Either<Notification<TLeft>, Notification<TRight>>.CreateLeft(x)).Synchronize(gate).Subscribe(combiner);
                 leftSubscription.Disposable = leftSource.Materialize().Select(x => Either<Notification<TLeft>, Notification<TRight>>.CreateLeft(x)).Synchronize(gate).Subscribe(combiner);
                 rightSubscription.Disposable = rightSource.Materialize().Select(x => Either<Notification<TLeft>, Notification<TRight>>.CreateRight(x)).Synchronize(gate).Subscribe(combiner);
                 rightSubscription.Disposable = rightSource.Materialize().Select(x => Either<Notification<TLeft>, Notification<TRight>>.CreateRight(x)).Synchronize(gate).Subscribe(combiner);
 
 
-                return new CompositeDisposable(leftSubscription, rightSubscription);
+                return StableCompositeDisposable.Create(leftSubscription, rightSubscription);
             });
             });
         }
         }
 
 

+ 1 - 1
Rx.NET/Source/System.Reactive.Experimental/Reactive/ListObservable.cs

@@ -199,7 +199,7 @@ namespace System.Reactive
             if (observer == null)
             if (observer == null)
                 throw new ArgumentNullException("observer");
                 throw new ArgumentNullException("observer");
 
 
-            return new CompositeDisposable(subscription, subject.Subscribe(observer));
+            return StableCompositeDisposable.Create(subscription, subject.Subscribe(observer));
         }
         }
     }
     }
 }
 }

+ 0 - 6
Rx.NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj

@@ -14,12 +14,6 @@
     <CodeAnalysisRuleSet>..\Rx.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRuleSet>..\Rx.ruleset</CodeAnalysisRuleSet>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
   </PropertyGroup>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseXBLV|AnyCPU'">
-    <OutputPath>bin\ReleaseXBLV\</OutputPath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugXBLV|AnyCPU'">
-    <OutputPath>bin\DebugXBLV\</OutputPath>
-  </PropertyGroup>
   <Import Project="..\Common.targets" />
   <Import Project="..\Common.targets" />
   <PropertyGroup>
   <PropertyGroup>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>

+ 1 - 1
Rx.NET/Source/System.Reactive.Interfaces/IObservable.cs

@@ -18,7 +18,7 @@ namespace System
         IDisposable Subscribe(IObserver<T> observer);
         IDisposable Subscribe(IObserver<T> observer);
     }
     }
 }
 }
-#elif !WINDOWSPHONE7 // TypeForwardedTo is not presen on windows phone 7 so we can't really target
+#elif !WINDOWSPHONE7 // TypeForwardedTo is not present on Windows Phone 7 so we can't really target
 [assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.IObservable<>))]
 [assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.IObservable<>))]
 #endif
 #endif
 
 

+ 1 - 1
Rx.NET/Source/System.Reactive.Interfaces/IObserver.cs

@@ -30,6 +30,6 @@ namespace System
         void OnCompleted();
         void OnCompleted();
     }
     }
 }
 }
-#elif !WINDOWSPHONE7 // TypeForwardedTo is not presen on windows phone 7 so we can't really target
+#elif !WINDOWSPHONE7 // TypeForwardedTo is not present on Windows Phone 7 so we can't really target
 [assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.IObserver<>))]
 [assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.IObserver<>))]
 #endif
 #endif

+ 1 - 1
Rx.NET/Source/System.Reactive.Interfaces/Reactive/Disposables/ICancelable.cs

@@ -3,7 +3,7 @@
 namespace System.Reactive.Disposables
 namespace System.Reactive.Disposables
 {
 {
     /// <summary>
     /// <summary>
-    /// Disposable resource with dipsosal state tracking.
+    /// Disposable resource with disposal state tracking.
     /// </summary>
     /// </summary>
     public interface ICancelable : IDisposable
     public interface ICancelable : IDisposable
     {
     {

+ 0 - 6
Rx.NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj

@@ -14,12 +14,6 @@
     <CodeAnalysisRuleSet>..\Rx.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRuleSet>..\Rx.ruleset</CodeAnalysisRuleSet>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
   </PropertyGroup>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseXBLV|AnyCPU'">
-    <OutputPath>bin\ReleaseXBLV\</OutputPath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugXBLV|AnyCPU'">
-    <OutputPath>bin\DebugXBLV\</OutputPath>
-  </PropertyGroup>
   <Import Project="..\Common.targets" />
   <Import Project="..\Common.targets" />
   <PropertyGroup>
   <PropertyGroup>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>
     <DocumentationFile>$(OutputPath)\$(AssemblyName).XML</DocumentationFile>

+ 1 - 0
Rx.NET/Source/System.Reactive.Linq/InternalsVisibleTo.cs

@@ -19,5 +19,6 @@ using System;
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Debugger")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Debugger")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Experimental")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.Experimental")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.PlatformServices")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Reactive.PlatformServices")]
+[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Tests.System.Reactive")]
 
 
 #endif
 #endif

+ 20 - 8
Rx.NET/Source/System.Reactive.Linq/Reactive/Concurrency/VirtualTimeScheduler.cs

@@ -373,14 +373,18 @@ namespace System.Reactive.Concurrency
         /// <returns>The next scheduled item.</returns>
         /// <returns>The next scheduled item.</returns>
         protected override IScheduledItem<TAbsolute> GetNext()
         protected override IScheduledItem<TAbsolute> GetNext()
         {
         {
-            while (queue.Count > 0)
+            lock (queue)
             {
             {
-                var next = queue.Peek();
-                if (next.IsCanceled)
-                    queue.Dequeue();
-                else
-                    return next;
+                while (queue.Count > 0)
+                {
+                    var next = queue.Peek();
+                    if (next.IsCanceled)
+                        queue.Dequeue();
+                    else
+                        return next;
+                }
             }
             }
+
             return null;
             return null;
         }
         }
 
 
@@ -402,12 +406,20 @@ namespace System.Reactive.Concurrency
 
 
             var run = new Func<IScheduler, TState, IDisposable>((scheduler, state1) =>
             var run = new Func<IScheduler, TState, IDisposable>((scheduler, state1) =>
             {
             {
-                queue.Remove(si);
+                lock (queue)
+                {
+                    queue.Remove(si);
+                }
+
                 return action(scheduler, state1);
                 return action(scheduler, state1);
             });
             });
 
 
             si = new ScheduledItem<TAbsolute, TState>(this, state, run, dueTime, Comparer);
             si = new ScheduledItem<TAbsolute, TState>(this, state, run, dueTime, Comparer);
-            queue.Enqueue(si);
+
+            lock (queue)
+            {
+                queue.Enqueue(si);
+            }
 
 
             return Disposable.Create(si.Cancel);
             return Disposable.Create(si.Cancel);
         }
         }

+ 2 - 2
Rx.NET/Source/System.Reactive.Linq/Reactive/Internal/Constants.cs

@@ -11,8 +11,8 @@ namespace System.Reactive
     class Constants_Linq
     class Constants_Linq
     {
     {
 #if PREFER_ASYNC
 #if PREFER_ASYNC
-        public const string USE_ASYNC = "This blocking operation is no longer supported. Instead, use the async version in combination with C# and Visual Basic async/await support. In case you need a blocking operation, use Wait or convert the resulting observable sequence to a Task object and block. See http://go.microsoft.com/fwlink/?LinkID=260866 for more information.";
-        public const string USE_TASK_FROMASYNCPATTERN = "This conversion is no longer supported. Replace use of the Begin/End asynchronous method pair with a new Task-based async method, and convert the result using ToObservable. If no Task-based async method is available, use Task.Factory.FromAsync to obtain a Task object. See http://go.microsoft.com/fwlink/?LinkID=260866 for more information.";
+        public const string USE_ASYNC = "This blocking operation is no longer supported. Instead, use the async version in combination with C# and Visual Basic async/await support. In case you need a blocking operation, use Wait or convert the resulting observable sequence to a Task object and block.";
+        public const string USE_TASK_FROMASYNCPATTERN = "This conversion is no longer supported. Replace use of the Begin/End asynchronous method pair with a new Task-based async method, and convert the result using ToObservable. If no Task-based async method is available, use Task.Factory.FromAsync to obtain a Task object.";
 #endif
 #endif
     }
     }
 }
 }

+ 15 - 5
Rx.NET/Source/System.Reactive.Linq/Reactive/Internal/Lookup.cs

@@ -1,6 +1,6 @@
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
 
 
-using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
 
 
@@ -8,7 +8,7 @@ namespace System.Reactive
 {
 {
     class Lookup<K, E> : ILookup<K, E>
     class Lookup<K, E> : ILookup<K, E>
     {
     {
-        Dictionary<K, List<E>> d;
+        private readonly Dictionary<K, List<E>> d;
 
 
         public Lookup(IEqualityComparer<K> comparer)
         public Lookup(IEqualityComparer<K> comparer)
         {
         {
@@ -18,8 +18,10 @@ namespace System.Reactive
         public void Add(K key, E element)
         public void Add(K key, E element)
         {
         {
             var list = default(List<E>);
             var list = default(List<E>);
+
             if (!d.TryGetValue(key, out list))
             if (!d.TryGetValue(key, out list))
                 d[key] = list = new List<E>();
                 d[key] = list = new List<E>();
+
             list.Add(element);
             list.Add(element);
         }
         }
 
 
@@ -35,7 +37,15 @@ namespace System.Reactive
 
 
         public IEnumerable<E> this[K key]
         public IEnumerable<E> this[K key]
         {
         {
-            get { return Hide(d[key]); }
+            get
+            {
+                var list = default(List<E>);
+
+                if (!d.TryGetValue(key, out list))
+                    return Enumerable.Empty<E>();
+
+                return Hide(list);
+            }
         }
         }
 
 
         private IEnumerable<E> Hide(List<E> elements)
         private IEnumerable<E> Hide(List<E> elements)
@@ -69,13 +79,13 @@ namespace System.Reactive
                 return kv.Value.GetEnumerator();
                 return kv.Value.GetEnumerator();
             }
             }
 
 
-            Collections.IEnumerator Collections.IEnumerable.GetEnumerator()
+            IEnumerator IEnumerable.GetEnumerator()
             {
             {
                 return GetEnumerator();
                 return GetEnumerator();
             }
             }
         }
         }
 
 
-        Collections.IEnumerator Collections.IEnumerable.GetEnumerator()
+        IEnumerator IEnumerable.GetEnumerator()
         {
         {
             return GetEnumerator();
             return GetEnumerator();
         }
         }

+ 788 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Internal/SortedDictionary.cs

@@ -0,0 +1,788 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+#if NO_SORTEDDICTIONARY
+
+using System;
+using System.Diagnostics;
+    
+//
+// Code ported from SortedDictionary.cs and SortedSet.cs in the BCL.
+// Unused portions have been removed for brevity.
+//
+
+namespace System.Collections.Generic
+{
+    class SortedDictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>>
+    {
+        private readonly TreeSet<KeyValuePair<TKey, TValue>> _set;
+
+        public SortedDictionary()
+        {
+            _set = new TreeSet<KeyValuePair<TKey, TValue>>(new KeyValuePairComparer());
+        }
+
+        public void Add(TKey key, TValue value)
+        {
+            _set.Add(new KeyValuePair<TKey, TValue>(key, value));
+        }
+
+        public int Count
+        {
+            get
+            {
+                return _set.Count;
+            }
+        }
+
+        public bool Remove(TKey key)
+        {
+            return _set.Remove(new KeyValuePair<TKey, TValue>(key, default(TValue)));
+        }
+
+        public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
+        {
+            return new Enumerator(this);
+        }
+
+        IEnumerator IEnumerable.GetEnumerator()
+        {
+            return GetEnumerator();
+        }
+
+        public struct Enumerator : IEnumerator<KeyValuePair<TKey, TValue>>
+        {
+            private readonly TreeSet<KeyValuePair<TKey, TValue>>.Enumerator _treeEnum;
+
+            internal Enumerator(SortedDictionary<TKey, TValue> dictionary)
+            {
+                _treeEnum = dictionary._set.GetEnumerator();
+            }
+
+            public bool MoveNext()
+            {
+                return _treeEnum.MoveNext();
+            }
+
+            public void Dispose()
+            {
+                _treeEnum.Dispose();
+            }
+
+            public KeyValuePair<TKey, TValue> Current
+            {
+                get
+                {
+                    return _treeEnum.Current;
+                }
+            }
+
+            object IEnumerator.Current
+            {
+                get
+                {
+                    return new KeyValuePair<TKey, TValue>(Current.Key, Current.Value);
+                }
+            }
+
+            internal void Reset()
+            {
+                _treeEnum.Reset();
+            }
+
+            void IEnumerator.Reset()
+            {
+                _treeEnum.Reset();
+            }
+        }
+
+        internal class KeyValuePairComparer : Comparer<KeyValuePair<TKey, TValue>>
+        {
+            private readonly IComparer<TKey> _keyComparer = Comparer<TKey>.Default;
+
+            public override int Compare(KeyValuePair<TKey, TValue> x, KeyValuePair<TKey, TValue> y)
+            {
+                return _keyComparer.Compare(x.Key, y.Key);
+            }
+        }
+
+        internal class TreeSet<T> : SortedSet<T>
+        {
+            public TreeSet(IComparer<T> comparer)
+                : base(comparer)
+            {
+            }
+
+            internal override bool AddIfNotPresent(T item)
+            {
+                var ret = base.AddIfNotPresent(item);
+
+                if (!ret)
+                {
+                    throw new ArgumentException("Duplicate entry added.");
+                }
+
+                return ret;
+            }
+        }
+    }
+
+    class SortedSet<T> : IEnumerable<T>
+    {
+        private readonly IComparer<T> _comparer;
+        private Node _root;
+        private int _count;
+        private int _version;
+
+        public SortedSet(IComparer<T> comparer)
+        {
+            _comparer = comparer;
+        }
+
+        public int Count
+        {
+            get
+            {
+                return _count;
+            }
+        }
+
+        public bool Add(T item)
+        {
+            return AddIfNotPresent(item);
+        }
+
+        internal virtual bool AddIfNotPresent(T item)
+        {
+            if (_root == null)
+            {
+                _root = new Node(item, false);
+                _count = 1;
+                _version++;
+                return true;
+            }
+
+            //
+            // Search for a node at bottom to insert the new node. 
+            // If we can guarantee the node we found is not a 4-node, it would be easy to do insertion.
+            // We split 4-nodes along the search path.
+            // 
+            Node current = _root;
+            Node parent = null;
+            Node grandParent = null;
+            Node greatGrandParent = null;
+
+            //
+            // Even if we don't actually add to the set, we may be altering its structure (by doing rotations
+            // and such). so update version to disable any enumerators/subsets working on it.
+            //
+            _version++;
+
+            int order = 0;
+            while (current != null)
+            {
+                order = _comparer.Compare(item, current.Item);
+                if (order == 0)
+                {
+                    // We could have changed root node to red during the search process.
+                    // We need to set it to black before we return.
+                    _root.IsRed = false;
+                    return false;
+                }
+
+                // split a 4-node into two 2-nodes                
+                if (Is4Node(current))
+                {
+                    Split4Node(current);
+                    // We could have introduced two consecutive red nodes after split. Fix that by rotation.
+                    if (IsRed(parent))
+                    {
+                        InsertionBalance(current, ref parent, grandParent, greatGrandParent);
+                    }
+                }
+
+                greatGrandParent = grandParent;
+                grandParent = parent;
+                parent = current;
+                current = (order < 0) ? current.Left : current.Right;
+            }
+
+            Debug.Assert(parent != null, "Parent node cannot be null here!");
+            
+            var node = new Node(item);
+            if (order > 0)
+            {
+                parent.Right = node;
+            }
+            else
+            {
+                parent.Left = node;
+            }
+
+            //
+            // The new node will be red, so we will need to adjust the colors if parent node is also red.
+            //
+            if (parent.IsRed)
+            {
+                InsertionBalance(node, ref parent, grandParent, greatGrandParent);
+            }
+
+            //
+            // Root node is always black.
+            //
+            _root.IsRed = false;
+            ++_count;
+            return true;
+        }
+
+        public bool Remove(T item)
+        {
+            return DoRemove(item); // hack so it can be made non-virtual
+        }
+
+        internal virtual bool DoRemove(T item)
+        {
+            if (_root == null)
+            {
+                return false;
+            }
+
+            // Search for a node and then find its succesor. 
+            // Then copy the item from the succesor to the matching node and delete the successor. 
+            // If a node doesn't have a successor, we can replace it with its left child (if not empty.) 
+            // or delete the matching node.
+            // 
+            // In top-down implementation, it is important to make sure the node to be deleted is not a 2-node.
+            // Following code will make sure the node on the path is not a 2 Node. 
+
+            //
+            // Even if we don't actually remove from the set, we may be altering its structure (by doing rotations
+            // and such). so update version to disable any enumerators/subsets working on it.
+            //
+            _version++;
+
+            Node current = _root;
+            Node parent = null;
+            Node grandParent = null;
+            Node match = null;
+            Node parentOfMatch = null;
+            bool foundMatch = false;
+            while (current != null)
+            {
+                if (Is2Node(current))
+                { // fix up 2-Node
+                    if (parent == null)
+                    {   // current is root. Mark it as red
+                        current.IsRed = true;
+                    }
+                    else
+                    {
+                        Node sibling = GetSibling(current, parent);
+                        if (sibling.IsRed)
+                        {
+                            // If parent is a 3-node, flip the orientation of the red link. 
+                            // We can acheive this by a single rotation        
+                            // This case is converted to one of other cased below.
+                            Debug.Assert(!parent.IsRed, "parent must be a black node!");
+                            if (parent.Right == sibling)
+                            {
+                                RotateLeft(parent);
+                            }
+                            else
+                            {
+                                RotateRight(parent);
+                            }
+
+                            parent.IsRed = true;
+                            sibling.IsRed = false;    // parent's color
+                            // sibling becomes child of grandParent or root after rotation. Update link from grandParent or root
+                            ReplaceChildOfNodeOrRoot(grandParent, parent, sibling);
+                            // sibling will become grandParent of current node 
+                            grandParent = sibling;
+                            if (parent == match)
+                            {
+                                parentOfMatch = sibling;
+                            }
+
+                            // update sibling, this is necessary for following processing
+                            sibling = (parent.Left == current) ? parent.Right : parent.Left;
+                        }
+                        Debug.Assert(sibling != null || sibling.IsRed == false, "sibling must not be null and it must be black!");
+
+                        if (Is2Node(sibling))
+                        {
+                            Merge2Nodes(parent, current, sibling);
+                        }
+                        else
+                        {
+                            // current is a 2-node and sibling is either a 3-node or a 4-node.
+                            // We can change the color of current to red by some rotation.
+                            TreeRotation rotation = RotationNeeded(parent, current, sibling);
+                            Node newGrandParent = null;
+                            switch (rotation)
+                            {
+                                case TreeRotation.RightRotation:
+                                    Debug.Assert(parent.Left == sibling, "sibling must be left child of parent!");
+                                    Debug.Assert(sibling.Left.IsRed, "Left child of sibling must be red!");
+                                    sibling.Left.IsRed = false;
+                                    newGrandParent = RotateRight(parent);
+                                    break;
+                                case TreeRotation.LeftRotation:
+                                    Debug.Assert(parent.Right == sibling, "sibling must be left child of parent!");
+                                    Debug.Assert(sibling.Right.IsRed, "Right child of sibling must be red!");
+                                    sibling.Right.IsRed = false;
+                                    newGrandParent = RotateLeft(parent);
+                                    break;
+
+                                case TreeRotation.RightLeftRotation:
+                                    Debug.Assert(parent.Right == sibling, "sibling must be left child of parent!");
+                                    Debug.Assert(sibling.Left.IsRed, "Left child of sibling must be red!");
+                                    newGrandParent = RotateRightLeft(parent);
+                                    break;
+
+                                case TreeRotation.LeftRightRotation:
+                                    Debug.Assert(parent.Left == sibling, "sibling must be left child of parent!");
+                                    Debug.Assert(sibling.Right.IsRed, "Right child of sibling must be red!");
+                                    newGrandParent = RotateLeftRight(parent);
+                                    break;
+                            }
+
+                            newGrandParent.IsRed = parent.IsRed;
+                            parent.IsRed = false;
+                            current.IsRed = true;
+                            ReplaceChildOfNodeOrRoot(grandParent, parent, newGrandParent);
+                            if (parent == match)
+                            {
+                                parentOfMatch = newGrandParent;
+                            }
+                            grandParent = newGrandParent;
+                        }
+                    }
+                }
+
+                // we don't need to compare any more once we found the match
+                int order = foundMatch ? -1 : _comparer.Compare(item, current.Item);
+                if (order == 0)
+                {
+                    // save the matching node
+                    foundMatch = true;
+                    match = current;
+                    parentOfMatch = parent;
+                }
+
+                grandParent = parent;
+                parent = current;
+
+                if (order < 0)
+                {
+                    current = current.Left;
+                }
+                else
+                {
+                    current = current.Right;       // continue the search in  right sub tree after we find a match
+                }
+            }
+
+            // move successor to the matching node position and replace links
+            if (match != null)
+            {
+                ReplaceNode(match, parentOfMatch, parent, grandParent);
+                --_count;
+            }
+
+            if (_root != null)
+            {
+                _root.IsRed = false;
+            }
+
+            return foundMatch;
+        }
+
+        public Enumerator GetEnumerator()
+        {
+            return new Enumerator(this);
+        }
+
+        IEnumerator<T> IEnumerable<T>.GetEnumerator()
+        {
+            return new Enumerator(this);
+        }
+
+        IEnumerator IEnumerable.GetEnumerator()
+        {
+            return new Enumerator(this);
+        }
+
+        private static Node GetSibling(Node node, Node parent)
+        {
+            if (parent.Left == node)
+            {
+                return parent.Right;
+            }
+            return parent.Left;
+        }
+
+        // After calling InsertionBalance, we need to make sure current and parent up-to-date.
+        // It doesn't matter if we keep grandParent and greatGrantParent up-to-date 
+        // because we won't need to split again in the next node.
+        // By the time we need to split again, everything will be correctly set.
+        //  
+        private void InsertionBalance(Node current, ref Node parent, Node grandParent, Node greatGrandParent)
+        {
+            Debug.Assert(grandParent != null, "Grand parent cannot be null here!");
+            bool parentIsOnRight = (grandParent.Right == parent);
+            bool currentIsOnRight = (parent.Right == current);
+
+            Node newChildOfGreatGrandParent;
+            if (parentIsOnRight == currentIsOnRight)
+            { // same orientation, single rotation
+                newChildOfGreatGrandParent = currentIsOnRight ? RotateLeft(grandParent) : RotateRight(grandParent);
+            }
+            else
+            {  // different orientaton, double rotation
+                newChildOfGreatGrandParent = currentIsOnRight ? RotateLeftRight(grandParent) : RotateRightLeft(grandParent);
+                // current node now becomes the child of greatgrandparent 
+                parent = greatGrandParent;
+            }
+            // grand parent will become a child of either parent of current.
+            grandParent.IsRed = true;
+            newChildOfGreatGrandParent.IsRed = false;
+
+            ReplaceChildOfNodeOrRoot(greatGrandParent, grandParent, newChildOfGreatGrandParent);
+        }
+
+        private static bool Is2Node(Node node)
+        {
+            Debug.Assert(node != null, "node cannot be null!");
+            return IsBlack(node) && IsNullOrBlack(node.Left) && IsNullOrBlack(node.Right);
+        }
+
+        private static bool Is4Node(Node node)
+        {
+            return IsRed(node.Left) && IsRed(node.Right);
+        }
+
+        private static bool IsBlack(Node node)
+        {
+            return (node != null && !node.IsRed);
+        }
+
+        private static bool IsNullOrBlack(Node node)
+        {
+            return (node == null || !node.IsRed);
+        }
+
+        private static bool IsRed(Node node)
+        {
+            return (node != null && node.IsRed);
+        }
+
+        private static void Merge2Nodes(Node parent, Node child1, Node child2)
+        {
+            Debug.Assert(IsRed(parent), "parent must be be red");
+            // combing two 2-nodes into a 4-node
+            parent.IsRed = false;
+            child1.IsRed = true;
+            child2.IsRed = true;
+        }
+
+        // Replace the child of a parent node. 
+        // If the parent node is null, replace the root.        
+        private void ReplaceChildOfNodeOrRoot(Node parent, Node child, Node newChild)
+        {
+            if (parent != null)
+            {
+                if (parent.Left == child)
+                {
+                    parent.Left = newChild;
+                }
+                else
+                {
+                    parent.Right = newChild;
+                }
+            }
+            else
+            {
+                _root = newChild;
+            }
+        }
+
+        // Replace the matching node with its succesor.
+        private void ReplaceNode(Node match, Node parentOfMatch, Node successor, Node parentOfSuccessor)
+        {
+            if (successor == match)
+            {  // this node has no successor, should only happen if right child of matching node is null.
+                Debug.Assert(match.Right == null, "Right child must be null!");
+                successor = match.Left;
+            }
+            else
+            {
+                Debug.Assert(parentOfSuccessor != null, "parent of successor cannot be null!");
+                Debug.Assert(successor.Left == null, "Left child of succesor must be null!");
+                Debug.Assert((successor.Right == null && successor.IsRed) || (successor.Right.IsRed && !successor.IsRed), "Succesor must be in valid state");
+                if (successor.Right != null)
+                {
+                    successor.Right.IsRed = false;
+                }
+
+                if (parentOfSuccessor != match)
+                {   // detach succesor from its parent and set its right child
+                    parentOfSuccessor.Left = successor.Right;
+                    successor.Right = match.Right;
+                }
+
+                successor.Left = match.Left;
+            }
+
+            if (successor != null)
+            {
+                successor.IsRed = match.IsRed;
+            }
+
+            ReplaceChildOfNodeOrRoot(parentOfMatch, match, successor);
+        }
+
+        internal void UpdateVersion()
+        {
+            ++_version;
+        }
+
+        private static Node RotateLeft(Node node)
+        {
+            var x = node.Right;
+            node.Right = x.Left;
+            x.Left = node;
+
+            return x;
+        }
+
+        private static Node RotateLeftRight(Node node)
+        {
+            var child = node.Left;
+            var grandChild = child.Right;
+
+            node.Left = grandChild.Right;
+            grandChild.Right = node;
+            child.Right = grandChild.Left;
+            grandChild.Left = child;
+
+            return grandChild;
+        }
+
+        private static Node RotateRight(Node node)
+        {
+            var x = node.Left;
+            node.Left = x.Right;
+            x.Right = node;
+
+            return x;
+        }
+
+        private static Node RotateRightLeft(Node node)
+        {
+            var child = node.Right;
+            var grandChild = child.Left;
+
+            node.Right = grandChild.Left;
+            grandChild.Left = node;
+            child.Left = grandChild.Right;
+            grandChild.Right = child;
+
+            return grandChild;
+        }
+
+        private static TreeRotation RotationNeeded(Node parent, Node current, Node sibling)
+        {
+            Debug.Assert(IsRed(sibling.Left) || IsRed(sibling.Right), "sibling must have at least one red child");
+            if (IsRed(sibling.Left))
+            {
+                if (parent.Left == current)
+                {
+                    return TreeRotation.RightLeftRotation;
+                }
+
+                return TreeRotation.RightRotation;
+            }
+            else
+            {
+                if (parent.Left == current)
+                {
+                    return TreeRotation.LeftRotation;
+                }
+
+                return TreeRotation.LeftRightRotation;
+            }
+        }
+
+        private static void Split4Node(Node node)
+        {
+            node.IsRed = true;
+            node.Left.IsRed = false;
+            node.Right.IsRed = false;
+        }
+
+        internal class Node
+        {
+            public bool IsRed;
+            public T Item;
+            public Node Left;
+            public Node Right;
+
+            public Node(T item)
+            {
+                // The default color will be red, we never need to create a black node directly.                
+                Item = item;
+                IsRed = true;
+            }
+
+            public Node(T item, bool isRed)
+            {
+                // The default color will be red, we never need to create a black node directly.                
+                Item = item;
+                IsRed = isRed;
+            }
+        }
+
+        public struct Enumerator : IEnumerator<T>
+        {
+            private readonly SortedSet<T> _tree;
+            private int _version;
+
+            private readonly Stack<Node> _stack;
+            private Node _current;
+
+            internal Enumerator(SortedSet<T> set)
+            {
+                _tree = set;
+                _version = _tree._version;
+
+                // 2lg(n + 1) is the maximum height
+                _stack = new Stack<Node>(2 * (int)SortedSet<T>.log2(set.Count + 1));
+                _current = null;
+                Intialize();
+            }
+
+            private void Intialize()
+            {
+                _current = null;
+
+                Node node = _tree._root;
+                Node next = null, other = null;
+
+                while (node != null)
+                {
+                    next = node.Left;
+                    other = node.Right;
+
+                    _stack.Push(node);
+                    node = next;
+                }
+            }
+
+            public bool MoveNext()
+            {
+                if (_version != _tree._version)
+                {
+                    throw new InvalidOperationException("Collection has changed during enumeration.");
+                }
+
+                if (_stack.Count == 0)
+                {
+                    _current = null;
+                    return false;
+                }
+
+                _current = _stack.Pop();
+
+                Node node = _current.Right;
+                Node next = null, other = null;
+
+                while (node != null)
+                {
+                    next = node.Left;
+                    other = node.Right;
+
+                    _stack.Push(node);
+                    node = next;
+                }
+
+                return true;
+            }
+
+            public void Dispose()
+            {
+            }
+
+            public T Current
+            {
+                get
+                {
+                    if (_current != null)
+                    {
+                        return _current.Item;
+                    }
+
+                    return default(T);
+                }
+            }
+
+            object IEnumerator.Current
+            {
+                get
+                {
+                    if (_current == null)
+                    {
+                        throw new InvalidOperationException("Collection has changed during enumeration.");
+                    }
+
+                    return _current.Item;
+                }
+            }
+
+            internal bool NotStartedOrEnded
+            {
+                get
+                {
+                    return _current == null;
+                }
+            }
+
+            internal void Reset()
+            {
+                if (_version != _tree._version)
+                {
+                    throw new InvalidOperationException("Collection has changed during enumeration.");
+                }
+
+                _stack.Clear();
+                Intialize();
+            }
+
+            void IEnumerator.Reset()
+            {
+                Reset();
+            }
+        }
+
+        private static int log2(int value)
+        {
+            int c = 0;
+
+            while (value > 0)
+            {
+                c++;
+                value >>= 1;
+            }
+
+            return c;
+        }
+    }
+
+    internal enum TreeRotation
+    {
+        LeftRotation = 1,
+        RightRotation = 2,
+        RightLeftRotation = 3,
+        LeftRightRotation = 4,
+    }
+}
+#endif

+ 34 - 4
Rx.NET/Source/System.Reactive.Linq/Reactive/Internal/TailRecursiveSink.cs

@@ -42,7 +42,7 @@ namespace System.Reactive
                 _gate.Wait(MoveNext);
                 _gate.Wait(MoveNext);
             });
             });
 
 
-            return new CompositeDisposable(_subscription, cancelable, Disposable.Create(() => _gate.Wait(Dispose)));
+            return StableCompositeDisposable.Create(_subscription, cancelable, Disposable.Create(() => _gate.Wait(Dispose)));
         }
         }
 
 
         protected abstract IEnumerable<IObservable<TSource>> Extract(IObservable<TSource> source);
         protected abstract IEnumerable<IObservable<TSource>> Extract(IObservable<TSource> source);
@@ -74,6 +74,12 @@ namespace System.Reactive
                 {
                 {
                     e.Dispose();
                     e.Dispose();
 
 
+                    //
+                    // Failure to enumerate the sequence cannot be handled, even by
+                    // operators like Catch, because it'd lead to another attempt at
+                    // enumerating to find the next observable sequence. Therefore,
+                    // we feed those errors directly to the observer.
+                    //
                     base._observer.OnError(ex);
                     base._observer.OnError(ex);
                     base.Dispose();
                     base.Dispose();
                     return;
                     return;
@@ -98,9 +104,18 @@ namespace System.Reactive
                     }
                     }
                     catch (Exception exception)
                     catch (Exception exception)
                     {
                     {
-                        e.Dispose();
-                        base._observer.OnError(exception);
-                        base.Dispose();
+                        //
+                        // Errors from unpacking may produce side-effects that normally
+                        // would occur during a SubscribeSafe operation. Those would feed
+                        // back into the observer and be subject to the operator's error
+                        // handling behavior. For example, Catch would allow to handle
+                        // the error using a handler function.
+                        //
+                        if (!Fail(exception))
+                        {
+                            e.Dispose();
+                        }
+
                         return;
                         return;
                     }
                     }
 
 
@@ -110,6 +125,7 @@ namespace System.Reactive
                     if (r == 0)
                     if (r == 0)
                     {
                     {
                         e.Dispose();
                         e.Dispose();
+
                         _stack.Pop();
                         _stack.Pop();
                         _length.Pop();
                         _length.Pop();
                     }
                     }
@@ -165,6 +181,12 @@ namespace System.Reactive
             }
             }
             catch (Exception exception)
             catch (Exception exception)
             {
             {
+                //
+                // Failure to enumerate the sequence cannot be handled, even by
+                // operators like Catch, because it'd lead to another attempt at
+                // enumerating to find the next observable sequence. Therefore,
+                // we feed those errors directly to the observer.
+                //
                 base._observer.OnError(exception);
                 base._observer.OnError(exception);
                 base.Dispose();
                 base.Dispose();
 
 
@@ -182,6 +204,14 @@ namespace System.Reactive
             base._observer.OnCompleted();
             base._observer.OnCompleted();
             base.Dispose();
             base.Dispose();
         }
         }
+
+        protected virtual bool Fail(Exception error)
+        {
+            base._observer.OnError(error);
+            base.Dispose();
+
+            return false;
+        }
     }
     }
 }
 }
 #endif
 #endif

+ 1 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/GroupedObservable.cs

@@ -38,7 +38,7 @@ namespace System.Reactive.Linq
                 //
                 //
                 var release = _refCount.GetDisposable();
                 var release = _refCount.GetDisposable();
                 var subscription = _subject.Subscribe/*Unsafe*/(observer);
                 var subscription = _subject.Subscribe/*Unsafe*/(observer);
-                return new CompositeDisposable(release, subscription);
+                return StableCompositeDisposable.Create(release, subscription);
             }
             }
             else
             else
             {
             {

+ 11 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs

@@ -206,6 +206,8 @@ namespace System.Reactive.Linq
 #if !NO_TPL
 #if !NO_TPL
         IObservable<TSource> StartAsync<TSource>(Func<Task<TSource>> functionAsync);
         IObservable<TSource> StartAsync<TSource>(Func<Task<TSource>> functionAsync);
         IObservable<TSource> StartAsync<TSource>(Func<CancellationToken, Task<TSource>> functionAsync);
         IObservable<TSource> StartAsync<TSource>(Func<CancellationToken, Task<TSource>> functionAsync);
+        IObservable<TSource> StartAsync<TSource>(Func<Task<TSource>> functionAsync, IScheduler scheduler);
+        IObservable<TSource> StartAsync<TSource>(Func<CancellationToken, Task<TSource>> functionAsync, IScheduler scheduler);
 #endif
 #endif
 
 
         IObservable<Unit> Start(Action action);
         IObservable<Unit> Start(Action action);
@@ -214,6 +216,8 @@ namespace System.Reactive.Linq
 #if !NO_TPL
 #if !NO_TPL
         IObservable<Unit> StartAsync(Func<Task> actionAsync);
         IObservable<Unit> StartAsync(Func<Task> actionAsync);
         IObservable<Unit> StartAsync(Func<CancellationToken, Task> actionAsync);
         IObservable<Unit> StartAsync(Func<CancellationToken, Task> actionAsync);
+        IObservable<Unit> StartAsync(Func<Task> actionAsync, IScheduler scheduler);
+        IObservable<Unit> StartAsync(Func<CancellationToken, Task> actionAsync, IScheduler scheduler);
 #endif
 #endif
 
 
 #if !NO_TPL
 #if !NO_TPL
@@ -221,6 +225,10 @@ namespace System.Reactive.Linq
         IObservable<TResult> FromAsync<TResult>(Func<CancellationToken, Task<TResult>> functionAsync);
         IObservable<TResult> FromAsync<TResult>(Func<CancellationToken, Task<TResult>> functionAsync);
         IObservable<Unit> FromAsync(Func<Task> actionAsync);
         IObservable<Unit> FromAsync(Func<Task> actionAsync);
         IObservable<Unit> FromAsync(Func<CancellationToken, Task> actionAsync);
         IObservable<Unit> FromAsync(Func<CancellationToken, Task> actionAsync);
+        IObservable<TResult> FromAsync<TResult>(Func<Task<TResult>> functionAsync, IScheduler scheduler);
+        IObservable<TResult> FromAsync<TResult>(Func<CancellationToken, Task<TResult>> functionAsync, IScheduler scheduler);
+        IObservable<Unit> FromAsync(Func<Task> actionAsync, IScheduler scheduler);
+        IObservable<Unit> FromAsync(Func<CancellationToken, Task> actionAsync, IScheduler scheduler);
 #endif
 #endif
 
 
         Func<IObservable<TResult>> ToAsync<TResult>(Func<TResult> function);
         Func<IObservable<TResult>> ToAsync<TResult>(Func<TResult> function);
@@ -597,6 +605,7 @@ namespace System.Reactive.Linq
         IObservable<IObservable<TSource>> Window<TSource, TWindowClosing>(IObservable<TSource> source, Func<IObservable<TWindowClosing>> windowClosingSelector);
         IObservable<IObservable<TSource>> Window<TSource, TWindowClosing>(IObservable<TSource> source, Func<IObservable<TWindowClosing>> windowClosingSelector);
         IObservable<IObservable<TSource>> Window<TSource, TWindowOpening, TWindowClosing>(IObservable<TSource> source, IObservable<TWindowOpening> windowOpenings, Func<TWindowOpening, IObservable<TWindowClosing>> windowClosingSelector);
         IObservable<IObservable<TSource>> Window<TSource, TWindowOpening, TWindowClosing>(IObservable<TSource> source, IObservable<TWindowOpening> windowOpenings, Func<TWindowOpening, IObservable<TWindowClosing>> windowClosingSelector);
         IObservable<IObservable<TSource>> Window<TSource, TWindowBoundary>(IObservable<TSource> source, IObservable<TWindowBoundary> windowBoundaries);
         IObservable<IObservable<TSource>> Window<TSource, TWindowBoundary>(IObservable<TSource> source, IObservable<TWindowBoundary> windowBoundaries);
+        IObservable<TResult> WithLatestFrom<TFirst, TSecond, TResult>(IObservable<TFirst> first, IObservable<TSecond> second, Func<TFirst, TSecond, TResult> resultSelector);
         IObservable<TResult> Zip<TFirst, TSecond, TResult>(IObservable<TFirst> first, IObservable<TSecond> second, Func<TFirst, TSecond, TResult> resultSelector);
         IObservable<TResult> Zip<TFirst, TSecond, TResult>(IObservable<TFirst> first, IObservable<TSecond> second, Func<TFirst, TSecond, TResult> resultSelector);
         IObservable<TResult> Zip<TSource, TResult>(IEnumerable<IObservable<TSource>> sources, Func<IList<TSource>, TResult> resultSelector);
         IObservable<TResult> Zip<TSource, TResult>(IEnumerable<IObservable<TSource>> sources, Func<IList<TSource>, TResult> resultSelector);
         IObservable<IList<TSource>> Zip<TSource>(IEnumerable<IObservable<TSource>> sources);
         IObservable<IList<TSource>> Zip<TSource>(IEnumerable<IObservable<TSource>> sources);
@@ -661,6 +670,8 @@ namespace System.Reactive.Linq
         IObservable<TSource> SkipLast<TSource>(IObservable<TSource> source, int count);
         IObservable<TSource> SkipLast<TSource>(IObservable<TSource> source, int count);
         IObservable<TSource> StartWith<TSource>(IObservable<TSource> source, params TSource[] values);
         IObservable<TSource> StartWith<TSource>(IObservable<TSource> source, params TSource[] values);
         IObservable<TSource> StartWith<TSource>(IObservable<TSource> source, IScheduler scheduler, params TSource[] values);
         IObservable<TSource> StartWith<TSource>(IObservable<TSource> source, IScheduler scheduler, params TSource[] values);
+        IObservable<TSource> StartWith<TSource>(IObservable<TSource> source, IEnumerable<TSource> values);
+        IObservable<TSource> StartWith<TSource>(IObservable<TSource> source, IScheduler scheduler, IEnumerable<TSource> values);
         IObservable<TSource> TakeLast<TSource>(IObservable<TSource> source, int count);
         IObservable<TSource> TakeLast<TSource>(IObservable<TSource> source, int count);
         IObservable<TSource> TakeLast<TSource>(IObservable<TSource> source, int count, IScheduler scheduler);
         IObservable<TSource> TakeLast<TSource>(IObservable<TSource> source, int count, IScheduler scheduler);
         IObservable<IList<TSource>> TakeLastBuffer<TSource>(IObservable<TSource> source, int count);
         IObservable<IList<TSource>> TakeLastBuffer<TSource>(IObservable<TSource> source, int count);

+ 196 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Async.cs

@@ -953,6 +953,30 @@ namespace System.Reactive.Linq
             return s_impl.StartAsync<TResult>(functionAsync);
             return s_impl.StartAsync<TResult>(functionAsync);
         }
         }
 
 
+        /// <summary>
+        /// Invokes the asynchronous function, surfacing the result through an observable sequence.
+        /// </summary>
+        /// <typeparam name="TResult">The type of the result returned by the asynchronous function.</typeparam>
+        /// <param name="functionAsync">Asynchronous function to run.</param>
+        /// <param name="scheduler">Scheduler on which to notify observers.</param>
+        /// <returns>An observable sequence exposing the function's result value, or an exception.</returns>
+        /// <exception cref="ArgumentNullException"><paramref name="functionAsync"/> is null or <paramref name="scheduler"/> is null.</exception>
+        /// <remarks>
+        /// <list type="bullet">
+        /// <item><description>The function is started immediately, not during the subscription of the resulting sequence.</description></item>
+        /// <item><description>Multiple subscriptions to the resulting sequence can observe the function's result.</description></item>
+        /// </list>
+        /// </remarks>
+        public static IObservable<TResult> StartAsync<TResult>(Func<Task<TResult>> functionAsync, IScheduler scheduler)
+        {
+            if (functionAsync == null)
+                throw new ArgumentNullException("functionAsync");
+            if (scheduler == null)
+                throw new ArgumentNullException("scheduler");
+
+            return s_impl.StartAsync<TResult>(functionAsync, scheduler);
+        }
+
         /// <summary>
         /// <summary>
         /// Invokes the asynchronous function, surfacing the result through an observable sequence.
         /// Invokes the asynchronous function, surfacing the result through an observable sequence.
         /// The CancellationToken is shared by all subscriptions on the resulting observable sequence. See the remarks section for more information.
         /// The CancellationToken is shared by all subscriptions on the resulting observable sequence. See the remarks section for more information.
@@ -981,6 +1005,38 @@ namespace System.Reactive.Linq
 
 
             return s_impl.StartAsync<TResult>(functionAsync);
             return s_impl.StartAsync<TResult>(functionAsync);
         }
         }
+
+        /// <summary>
+        /// Invokes the asynchronous function, surfacing the result through an observable sequence.
+        /// The CancellationToken is shared by all subscriptions on the resulting observable sequence. See the remarks section for more information.
+        /// </summary>
+        /// <typeparam name="TResult">The type of the result returned by the asynchronous function.</typeparam>
+        /// <param name="functionAsync">Asynchronous function to run.</param>
+        /// <param name="scheduler">Scheduler on which to notify observers.</param>
+        /// <returns>An observable sequence exposing the function's result value, or an exception.</returns>
+        /// <exception cref="ArgumentNullException"><paramref name="functionAsync"/> is null or <paramref name="scheduler"/> is null.</exception>
+        /// <remarks>
+        /// <list type="bullet">
+        /// <item><description>The function is started immediately, not during the subscription of the resulting sequence.</description></item>
+        /// <item><description>Multiple subscriptions to the resulting sequence can observe the function's result.</description></item>
+        /// <item><description>
+        /// If any subscription to the resulting sequence is disposed, the CancellationToken is set. The observer associated to the disposed
+        /// subscription won't see the TaskCanceledException, but other observers will. You can protect against this using the Catch operator.
+        /// Be careful when handing out the resulting sequence because of this behavior. The most common use is to have a single subscription
+        /// to the resulting sequence, which controls the CancellationToken state. Alternatively, you can control subscription behavior using
+        /// multicast operators.
+        /// </description></item>
+        /// </list>
+        /// </remarks>
+        public static IObservable<TResult> StartAsync<TResult>(Func<CancellationToken, Task<TResult>> functionAsync, IScheduler scheduler)
+        {
+            if (functionAsync == null)
+                throw new ArgumentNullException("functionAsync");
+            if (scheduler == null)
+                throw new ArgumentNullException("scheduler");
+
+            return s_impl.StartAsync<TResult>(functionAsync, scheduler);
+        }
 #endif
 #endif
 
 
         #endregion
         #endregion
@@ -1051,6 +1107,29 @@ namespace System.Reactive.Linq
             return s_impl.StartAsync(actionAsync);
             return s_impl.StartAsync(actionAsync);
         }
         }
 
 
+        /// <summary>
+        /// Invokes the asynchronous action, surfacing the result through an observable sequence.
+        /// </summary>
+        /// <param name="actionAsync">Asynchronous action to run.</param>
+        /// <param name="scheduler">Scheduler on which to notify observers.</param>
+        /// <returns>An observable sequence exposing a Unit value upon completion of the action, or an exception.</returns>
+        /// <exception cref="ArgumentNullException"><paramref name="actionAsync"/> is null or <paramref name="scheduler"/> is null.</exception>
+        /// <remarks>
+        /// <list type="bullet">
+        /// <item><description>The action is started immediately, not during the subscription of the resulting sequence.</description></item>
+        /// <item><description>Multiple subscriptions to the resulting sequence can observe the action's outcome.</description></item>
+        /// </list>
+        /// </remarks>
+        public static IObservable<Unit> StartAsync(Func<Task> actionAsync, IScheduler scheduler)
+        {
+            if (actionAsync == null)
+                throw new ArgumentNullException("actionAsync");
+            if (scheduler == null)
+                throw new ArgumentNullException("scheduler");
+
+            return s_impl.StartAsync(actionAsync, scheduler);
+        }
+
         /// <summary>
         /// <summary>
         /// Invokes the asynchronous action, surfacing the result through an observable sequence.
         /// Invokes the asynchronous action, surfacing the result through an observable sequence.
         /// The CancellationToken is shared by all subscriptions on the resulting observable sequence. See the remarks section for more information.
         /// The CancellationToken is shared by all subscriptions on the resulting observable sequence. See the remarks section for more information.
@@ -1078,6 +1157,37 @@ namespace System.Reactive.Linq
 
 
             return s_impl.StartAsync(actionAsync);
             return s_impl.StartAsync(actionAsync);
         }
         }
+
+        /// <summary>
+        /// Invokes the asynchronous action, surfacing the result through an observable sequence.
+        /// The CancellationToken is shared by all subscriptions on the resulting observable sequence. See the remarks section for more information.
+        /// </summary>
+        /// <param name="actionAsync">Asynchronous action to run.</param>
+        /// <param name="scheduler">Scheduler on which to notify observers.</param>
+        /// <returns>An observable sequence exposing a Unit value upon completion of the action, or an exception.</returns>
+        /// <exception cref="ArgumentNullException"><paramref name="actionAsync"/> is null or <paramref name="scheduler"/> is null.</exception>
+        /// <remarks>
+        /// <list type="bullet">
+        /// <item><description>The action is started immediately, not during the subscription of the resulting sequence.</description></item>
+        /// <item><description>Multiple subscriptions to the resulting sequence can observe the action's outcome.</description></item>
+        /// <item><description>
+        /// If any subscription to the resulting sequence is disposed, the CancellationToken is set. The observer associated to the disposed
+        /// subscription won't see the TaskCanceledException, but other observers will. You can protect against this using the Catch operator.
+        /// Be careful when handing out the resulting sequence because of this behavior. The most common use is to have a single subscription
+        /// to the resulting sequence, which controls the CancellationToken state. Alternatively, you can control subscription behavior using
+        /// multicast operators.
+        /// </description></item>
+        /// </list>
+        /// </remarks>
+        public static IObservable<Unit> StartAsync(Func<CancellationToken, Task> actionAsync, IScheduler scheduler)
+        {
+            if (actionAsync == null)
+                throw new ArgumentNullException("actionAsync");
+            if (scheduler == null)
+                throw new ArgumentNullException("scheduler");
+
+            return s_impl.StartAsync(actionAsync, scheduler);
+        }
 #endif
 #endif
 
 
         #endregion
         #endregion
@@ -1099,9 +1209,30 @@ namespace System.Reactive.Linq
         /// <exception cref="ArgumentNullException"><paramref name="functionAsync"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="functionAsync"/> is null.</exception>
         public static IObservable<TResult> FromAsync<TResult>(Func<Task<TResult>> functionAsync)
         public static IObservable<TResult> FromAsync<TResult>(Func<Task<TResult>> functionAsync)
         {
         {
+            if (functionAsync == null)
+                throw new ArgumentNullException("functionAsync");
+
             return s_impl.FromAsync<TResult>(functionAsync);
             return s_impl.FromAsync<TResult>(functionAsync);
         }
         }
 
 
+        /// <summary>
+        /// Converts to asynchronous function into an observable sequence. Each subscription to the resulting sequence causes the function to be started.
+        /// </summary>
+        /// <typeparam name="TResult">The type of the result returned by the asynchronous function.</typeparam>
+        /// <param name="functionAsync">Asynchronous function to convert.</param>
+        /// <param name="scheduler">Scheduler on which to notify observers.</param>
+        /// <returns>An observable sequence exposing the result of invoking the function, or an exception.</returns>
+        /// <exception cref="ArgumentNullException"><paramref name="functionAsync"/> is null or <paramref name="scheduler"/> is null.</exception>
+        public static IObservable<TResult> FromAsync<TResult>(Func<Task<TResult>> functionAsync, IScheduler scheduler)
+        {
+            if (functionAsync == null)
+                throw new ArgumentNullException("functionAsync");
+            if (scheduler == null)
+                throw new ArgumentNullException("scheduler");
+
+            return s_impl.FromAsync<TResult>(functionAsync, scheduler);
+        }
+
         /// <summary>
         /// <summary>
         /// Converts to asynchronous function into an observable sequence. Each subscription to the resulting sequence causes the function to be started.
         /// Converts to asynchronous function into an observable sequence. Each subscription to the resulting sequence causes the function to be started.
         /// The CancellationToken passed to the asynchronous function is tied to the observable sequence's subscription that triggered the function's invocation and can be used for best-effort cancellation.
         /// The CancellationToken passed to the asynchronous function is tied to the observable sequence's subscription that triggered the function's invocation and can be used for best-effort cancellation.
@@ -1113,9 +1244,32 @@ namespace System.Reactive.Linq
         /// <remarks>When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous function will be signaled.</remarks>
         /// <remarks>When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous function will be signaled.</remarks>
         public static IObservable<TResult> FromAsync<TResult>(Func<CancellationToken, Task<TResult>> functionAsync)
         public static IObservable<TResult> FromAsync<TResult>(Func<CancellationToken, Task<TResult>> functionAsync)
         {
         {
+            if (functionAsync == null)
+                throw new ArgumentNullException("functionAsync");
+
             return s_impl.FromAsync<TResult>(functionAsync);
             return s_impl.FromAsync<TResult>(functionAsync);
         }
         }
 
 
+        /// <summary>
+        /// Converts to asynchronous function into an observable sequence. Each subscription to the resulting sequence causes the function to be started.
+        /// The CancellationToken passed to the asynchronous function is tied to the observable sequence's subscription that triggered the function's invocation and can be used for best-effort cancellation.
+        /// </summary>
+        /// <typeparam name="TResult">The type of the result returned by the asynchronous function.</typeparam>
+        /// <param name="functionAsync">Asynchronous function to convert.</param>
+        /// <param name="scheduler">Scheduler on which to notify observers.</param>
+        /// <returns>An observable sequence exposing the result of invoking the function, or an exception.</returns>
+        /// <exception cref="ArgumentNullException"><paramref name="functionAsync"/> is null or <paramref name="scheduler"/> is null.</exception>
+        /// <remarks>When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous function will be signaled.</remarks>
+        public static IObservable<TResult> FromAsync<TResult>(Func<CancellationToken, Task<TResult>> functionAsync, IScheduler scheduler)
+        {
+            if (functionAsync == null)
+                throw new ArgumentNullException("functionAsync");
+            if (scheduler == null)
+                throw new ArgumentNullException("scheduler");
+
+            return s_impl.FromAsync<TResult>(functionAsync, scheduler);
+        }
+
         #endregion
         #endregion
 
 
         #region Action
         #region Action
@@ -1128,9 +1282,29 @@ namespace System.Reactive.Linq
         /// <exception cref="ArgumentNullException"><paramref name="actionAsync"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="actionAsync"/> is null.</exception>
         public static IObservable<Unit> FromAsync(Func<Task> actionAsync)
         public static IObservable<Unit> FromAsync(Func<Task> actionAsync)
         {
         {
+            if (actionAsync == null)
+                throw new ArgumentNullException("actionAsync");
+
             return s_impl.FromAsync(actionAsync);
             return s_impl.FromAsync(actionAsync);
         }
         }
 
 
+        /// <summary>
+        /// Converts to asynchronous action into an observable sequence. Each subscription to the resulting sequence causes the action to be started.
+        /// </summary>
+        /// <param name="actionAsync">Asynchronous action to convert.</param>
+        /// <param name="scheduler">Scheduler on which to notify observers.</param>
+        /// <returns>An observable sequence exposing a Unit value upon completion of the action, or an exception.</returns>
+        /// <exception cref="ArgumentNullException"><paramref name="actionAsync"/> is null or <paramref name="scheduler"/> is null.</exception>
+        public static IObservable<Unit> FromAsync(Func<Task> actionAsync, IScheduler scheduler)
+        {
+            if (actionAsync == null)
+                throw new ArgumentNullException("actionAsync");
+            if (scheduler == null)
+                throw new ArgumentNullException("scheduler");
+
+            return s_impl.FromAsync(actionAsync, scheduler);
+        }
+
         /// <summary>
         /// <summary>
         /// Converts to asynchronous action into an observable sequence. Each subscription to the resulting sequence causes the action to be started.
         /// Converts to asynchronous action into an observable sequence. Each subscription to the resulting sequence causes the action to be started.
         /// The CancellationToken passed to the asynchronous action is tied to the observable sequence's subscription that triggered the action's invocation and can be used for best-effort cancellation.
         /// The CancellationToken passed to the asynchronous action is tied to the observable sequence's subscription that triggered the action's invocation and can be used for best-effort cancellation.
@@ -1141,9 +1315,31 @@ namespace System.Reactive.Linq
         /// <exception cref="ArgumentNullException"><paramref name="actionAsync"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="actionAsync"/> is null.</exception>
         public static IObservable<Unit> FromAsync(Func<CancellationToken, Task> actionAsync)
         public static IObservable<Unit> FromAsync(Func<CancellationToken, Task> actionAsync)
         {
         {
+            if (actionAsync == null)
+                throw new ArgumentNullException("actionAsync");
+
             return s_impl.FromAsync(actionAsync);
             return s_impl.FromAsync(actionAsync);
         }
         }
 
 
+        /// <summary>
+        /// Converts to asynchronous action into an observable sequence. Each subscription to the resulting sequence causes the action to be started.
+        /// The CancellationToken passed to the asynchronous action is tied to the observable sequence's subscription that triggered the action's invocation and can be used for best-effort cancellation.
+        /// </summary>
+        /// <param name="actionAsync">Asynchronous action to convert.</param>
+        /// <param name="scheduler">Scheduler on which to notify observers.</param>
+        /// <returns>An observable sequence exposing a Unit value upon completion of the action, or an exception.</returns>
+        /// <remarks>When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous function will be signaled.</remarks>
+        /// <exception cref="ArgumentNullException"><paramref name="actionAsync"/> is null or <paramref name="scheduler"/> is null.</exception>
+        public static IObservable<Unit> FromAsync(Func<CancellationToken, Task> actionAsync, IScheduler scheduler)
+        {
+            if (actionAsync == null)
+                throw new ArgumentNullException("actionAsync");
+            if (scheduler == null)
+                throw new ArgumentNullException("scheduler");
+
+            return s_impl.FromAsync(actionAsync, scheduler);
+        }
+
         #endregion
         #endregion
 
 
 #endif
 #endif

+ 1 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs

@@ -483,7 +483,7 @@ namespace System.Reactive.Linq
 
 
         /// <summary>
         /// <summary>
         /// Waits for the observable sequence to complete and returns the last element of the sequence.
         /// Waits for the observable sequence to complete and returns the last element of the sequence.
-        /// If the sequence terminates with an OnError notification, the exception is throw.
+        /// If the sequence terminates with an OnError notification, the exception is thrown.
         /// </summary>
         /// </summary>
         /// <typeparam name="TSource">The type of the elements in the source sequence.</typeparam>
         /// <typeparam name="TSource">The type of the elements in the source sequence.</typeparam>
         /// <param name="source">Source observable sequence.</param>
         /// <param name="source">Source observable sequence.</param>

+ 4 - 4
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs

@@ -98,7 +98,7 @@ namespace System.Reactive.Linq
         /// The CancellationToken passed to the asynchronous Subscribe method is tied to the returned disposable subscription, allowing best-effort cancellation.
         /// The CancellationToken passed to the asynchronous Subscribe method is tied to the returned disposable subscription, allowing best-effort cancellation.
         /// </summary>
         /// </summary>
         /// <typeparam name="TResult">The type of the elements in the produced sequence.</typeparam>
         /// <typeparam name="TResult">The type of the elements in the produced sequence.</typeparam>
-        /// <param name="subscribeAsync">Asynchronous method used to implemented the resulting sequence's Subscribe method.</param>
+        /// <param name="subscribeAsync">Asynchronous method used to implement the resulting sequence's Subscribe method.</param>
         /// <returns>The observable sequence with the specified implementation for the Subscribe method.</returns>
         /// <returns>The observable sequence with the specified implementation for the Subscribe method.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="subscribeAsync"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="subscribeAsync"/> is null.</exception>
         /// <remarks>This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11.</remarks>
         /// <remarks>This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11.</remarks>
@@ -115,7 +115,7 @@ namespace System.Reactive.Linq
         /// Creates an observable sequence from a specified asynchronous Subscribe method.
         /// Creates an observable sequence from a specified asynchronous Subscribe method.
         /// </summary>
         /// </summary>
         /// <typeparam name="TResult">The type of the elements in the produced sequence.</typeparam>
         /// <typeparam name="TResult">The type of the elements in the produced sequence.</typeparam>
-        /// <param name="subscribeAsync">Asynchronous method used to implemented the resulting sequence's Subscribe method.</param>
+        /// <param name="subscribeAsync">Asynchronous method used to implement the resulting sequence's Subscribe method.</param>
         /// <returns>The observable sequence with the specified implementation for the Subscribe method.</returns>
         /// <returns>The observable sequence with the specified implementation for the Subscribe method.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="subscribeAsync"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="subscribeAsync"/> is null.</exception>
         /// <remarks>This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11.</remarks>
         /// <remarks>This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11.</remarks>
@@ -132,7 +132,7 @@ namespace System.Reactive.Linq
         /// The CancellationToken passed to the asynchronous Subscribe method is tied to the returned disposable subscription, allowing best-effort cancellation.
         /// The CancellationToken passed to the asynchronous Subscribe method is tied to the returned disposable subscription, allowing best-effort cancellation.
         /// </summary>
         /// </summary>
         /// <typeparam name="TResult">The type of the elements in the produced sequence.</typeparam>
         /// <typeparam name="TResult">The type of the elements in the produced sequence.</typeparam>
-        /// <param name="subscribeAsync">Asynchronous method used to implemented the resulting sequence's Subscribe method, returning an Action delegate that will be wrapped in an IDisposable.</param>
+        /// <param name="subscribeAsync">Asynchronous method used to implement the resulting sequence's Subscribe method, returning an Action delegate that will be wrapped in an IDisposable.</param>
         /// <returns>The observable sequence with the specified implementation for the Subscribe method.</returns>
         /// <returns>The observable sequence with the specified implementation for the Subscribe method.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="subscribeAsync"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="subscribeAsync"/> is null.</exception>
         /// <remarks>This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11.</remarks>
         /// <remarks>This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11.</remarks>
@@ -149,7 +149,7 @@ namespace System.Reactive.Linq
         /// Creates an observable sequence from a specified asynchronous Subscribe method.
         /// Creates an observable sequence from a specified asynchronous Subscribe method.
         /// </summary>
         /// </summary>
         /// <typeparam name="TResult">The type of the elements in the produced sequence.</typeparam>
         /// <typeparam name="TResult">The type of the elements in the produced sequence.</typeparam>
-        /// <param name="subscribeAsync">Asynchronous method used to implemented the resulting sequence's Subscribe method, returning an Action delegate that will be wrapped in an IDisposable.</param>
+        /// <param name="subscribeAsync">Asynchronous method used to implement the resulting sequence's Subscribe method, returning an Action delegate that will be wrapped in an IDisposable.</param>
         /// <returns>The observable sequence with the specified implementation for the Subscribe method.</returns>
         /// <returns>The observable sequence with the specified implementation for the Subscribe method.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="subscribeAsync"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="subscribeAsync"/> is null.</exception>
         /// <remarks>This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11.</remarks>
         /// <remarks>This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11.</remarks>

+ 27 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs

@@ -1532,6 +1532,33 @@ namespace System.Reactive.Linq
 
 
         #endregion
         #endregion
 
 
+        #region + WithLatestFrom +
+
+        /// <summary>
+        /// Merges two observable sequences into one observable sequence by combining each element from the first source with the latest element from the second source, if any.
+        /// </summary>
+        /// <typeparam name="TFirst">The type of the elements in the first source sequence.</typeparam>
+        /// <typeparam name="TSecond">The type of the elements in the second source sequence.</typeparam>
+        /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
+        /// <param name="first">First observable source.</param>
+        /// <param name="second">Second observable source.</param>
+        /// <param name="resultSelector">Function to invoke for each element from the first source combined with the latest element from the second source, if any.</param>
+        /// <returns>An observable sequence containing the result of combining each element of the first source with the latest element from the second source, if any, using the specified result selector function.</returns>
+        /// <exception cref="ArgumentNullException"><paramref name="first"/> or <paramref name="second"/> or <paramref name="resultSelector"/> is null.</exception>
+        public static IObservable<TResult> WithLatestFrom<TFirst, TSecond, TResult>(this IObservable<TFirst> first, IObservable<TSecond> second, Func<TFirst, TSecond, TResult> resultSelector)
+        {
+            if (first == null)
+                throw new ArgumentNullException("first");
+            if (second == null)
+                throw new ArgumentNullException("second");
+            if (resultSelector == null)
+                throw new ArgumentNullException("resultSelector");
+
+            return s_impl.WithLatestFrom<TFirst, TSecond, TResult>(first, second, resultSelector);
+        }
+
+        #endregion
+
         #region + Zip +
         #region + Zip +
 
 
         /// <summary>
         /// <summary>

+ 7 - 14
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs

@@ -521,13 +521,7 @@ namespace System.Reactive.Linq
             if (values == null)
             if (values == null)
                 throw new ArgumentNullException("values");
                 throw new ArgumentNullException("values");
 
 
-            TSource[] valueArray = values as TSource[];
-            if (valueArray == null)
-            {
-                List<TSource> valueList = new List<TSource>(values);
-                valueArray = valueList.ToArray();
-            }
-            return s_impl.StartWith<TSource>(source, valueArray);
+            return s_impl.StartWith<TSource>(source, values);
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -562,6 +556,11 @@ namespace System.Reactive.Linq
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="scheduler"/> or <paramref name="values"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="scheduler"/> or <paramref name="values"/> is null.</exception>
         public static IObservable<TSource> StartWith<TSource>(this IObservable<TSource> source, IScheduler scheduler, IEnumerable<TSource> values)
         public static IObservable<TSource> StartWith<TSource>(this IObservable<TSource> source, IScheduler scheduler, IEnumerable<TSource> values)
         {
         {
+            //
+            // NOTE: For some reason, someone introduced this signature which is inconsistent with the Rx pattern of putting the IScheduler last.
+            //       We can't change it at this point because of compatibility.
+            //
+
             if (source == null)
             if (source == null)
                 throw new ArgumentNullException("source");
                 throw new ArgumentNullException("source");
             if (scheduler == null)
             if (scheduler == null)
@@ -569,13 +568,7 @@ namespace System.Reactive.Linq
             if (values == null)
             if (values == null)
                 throw new ArgumentNullException("values");
                 throw new ArgumentNullException("values");
 
 
-            TSource[] valueArray = values as TSource[];
-            if (valueArray == null)
-            {
-                List<TSource> valueList = new List<TSource>(values);
-                valueArray = valueList.ToArray();
-            }
-            return s_impl.StartWith<TSource>(source, scheduler, valueArray);
+            return s_impl.StartWith<TSource>(source, scheduler, values);
         }
         }
 
 
         #endregion
         #endregion

+ 8 - 8
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs

@@ -820,7 +820,7 @@ namespace System.Reactive.Linq
         /// <param name="source">An observable sequence of elements to project.</param>
         /// <param name="source">An observable sequence of elements to project.</param>
         /// <param name="selector">A transform function to apply to each element.</param>
         /// <param name="selector">A transform function to apply to each element.</param>
         /// <returns>An observable sequence whose elements are the result of the tasks executed for each element of the input sequence.</returns>
         /// <returns>An observable sequence whose elements are the result of the tasks executed for each element of the input sequence.</returns>
-        /// <remarks>This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable&lt;TResult&gt;"/>.</remarks>
+        /// <remarks>This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable{TResult}(Task{TResult})"/>.</remarks>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="selector"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="selector"/> is null.</exception>
         public static IObservable<TResult> SelectMany<TSource, TResult>(this IObservable<TSource> source, Func<TSource, Task<TResult>> selector)
         public static IObservable<TResult> SelectMany<TSource, TResult>(this IObservable<TSource> source, Func<TSource, Task<TResult>> selector)
         {
         {
@@ -840,7 +840,7 @@ namespace System.Reactive.Linq
         /// <param name="source">An observable sequence of elements to project.</param>
         /// <param name="source">An observable sequence of elements to project.</param>
         /// <param name="selector">A transform function to apply to each element; the second parameter of the function represents the index of the source element.</param>
         /// <param name="selector">A transform function to apply to each element; the second parameter of the function represents the index of the source element.</param>
         /// <returns>An observable sequence whose elements are the result of the tasks executed for each element of the input sequence.</returns>
         /// <returns>An observable sequence whose elements are the result of the tasks executed for each element of the input sequence.</returns>
-        /// <remarks>This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable&lt;TResult&gt;"/>.</remarks>
+        /// <remarks>This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable{TResult}(Task{TResult})"/>.</remarks>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="selector"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="selector"/> is null.</exception>
         public static IObservable<TResult> SelectMany<TSource, TResult>(this IObservable<TSource> source, Func<TSource, int, Task<TResult>> selector)
         public static IObservable<TResult> SelectMany<TSource, TResult>(this IObservable<TSource> source, Func<TSource, int, Task<TResult>> selector)
         {
         {
@@ -860,7 +860,7 @@ namespace System.Reactive.Linq
         /// <param name="source">An observable sequence of elements to project.</param>
         /// <param name="source">An observable sequence of elements to project.</param>
         /// <param name="selector">A transform function to apply to each element.</param>
         /// <param name="selector">A transform function to apply to each element.</param>
         /// <returns>An observable sequence whose elements are the result of the tasks executed for each element of the input sequence.</returns>
         /// <returns>An observable sequence whose elements are the result of the tasks executed for each element of the input sequence.</returns>
-        /// <remarks>This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable&lt;TResult&gt;"/>.</remarks>
+        /// <remarks>This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable{TResult}(Task{TResult})"/>.</remarks>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="selector"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="selector"/> is null.</exception>
         public static IObservable<TResult> SelectMany<TSource, TResult>(this IObservable<TSource> source, Func<TSource, CancellationToken, Task<TResult>> selector)
         public static IObservable<TResult> SelectMany<TSource, TResult>(this IObservable<TSource> source, Func<TSource, CancellationToken, Task<TResult>> selector)
         {
         {
@@ -880,7 +880,7 @@ namespace System.Reactive.Linq
         /// <param name="source">An observable sequence of elements to project.</param>
         /// <param name="source">An observable sequence of elements to project.</param>
         /// <param name="selector">A transform function to apply to each element; the second parameter of the function represents the index of the source element.</param>
         /// <param name="selector">A transform function to apply to each element; the second parameter of the function represents the index of the source element.</param>
         /// <returns>An observable sequence whose elements are the result of the tasks executed for each element of the input sequence.</returns>
         /// <returns>An observable sequence whose elements are the result of the tasks executed for each element of the input sequence.</returns>
-        /// <remarks>This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable&lt;TResult&gt;"/>.</remarks>
+        /// <remarks>This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable{TResult}(Task{TResult})"/>.</remarks>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="selector"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="selector"/> is null.</exception>
         public static IObservable<TResult> SelectMany<TSource, TResult>(this IObservable<TSource> source, Func<TSource, int, CancellationToken, Task<TResult>> selector)
         public static IObservable<TResult> SelectMany<TSource, TResult>(this IObservable<TSource> source, Func<TSource, int, CancellationToken, Task<TResult>> selector)
         {
         {
@@ -951,7 +951,7 @@ namespace System.Reactive.Linq
         /// <param name="resultSelector">A transform function to apply to each element of the intermediate sequence.</param>
         /// <param name="resultSelector">A transform function to apply to each element of the intermediate sequence.</param>
         /// <returns>An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element.</returns>
         /// <returns>An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="taskSelector"/> or <paramref name="resultSelector"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="taskSelector"/> or <paramref name="resultSelector"/> is null.</exception>
-        /// <remarks>This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable&lt;TResult&gt;"/>.</remarks>
+        /// <remarks>This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable{TResult}(Task{TResult})"/>.</remarks>
         public static IObservable<TResult> SelectMany<TSource, TTaskResult, TResult>(this IObservable<TSource> source, Func<TSource, Task<TTaskResult>> taskSelector, Func<TSource, TTaskResult, TResult> resultSelector)
         public static IObservable<TResult> SelectMany<TSource, TTaskResult, TResult>(this IObservable<TSource> source, Func<TSource, Task<TTaskResult>> taskSelector, Func<TSource, TTaskResult, TResult> resultSelector)
         {
         {
             if (source == null)
             if (source == null)
@@ -975,7 +975,7 @@ namespace System.Reactive.Linq
         /// <param name="resultSelector">A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element.</param>
         /// <param name="resultSelector">A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element.</param>
         /// <returns>An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element.</returns>
         /// <returns>An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="taskSelector"/> or <paramref name="resultSelector"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="taskSelector"/> or <paramref name="resultSelector"/> is null.</exception>
-        /// <remarks>This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable&lt;TResult&gt;"/>.</remarks>
+        /// <remarks>This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable{TResult}(Task{TResult})"/>.</remarks>
         public static IObservable<TResult> SelectMany<TSource, TTaskResult, TResult>(this IObservable<TSource> source, Func<TSource, int, Task<TTaskResult>> taskSelector, Func<TSource, int, TTaskResult, TResult> resultSelector)
         public static IObservable<TResult> SelectMany<TSource, TTaskResult, TResult>(this IObservable<TSource> source, Func<TSource, int, Task<TTaskResult>> taskSelector, Func<TSource, int, TTaskResult, TResult> resultSelector)
         {
         {
             if (source == null)
             if (source == null)
@@ -999,7 +999,7 @@ namespace System.Reactive.Linq
         /// <param name="resultSelector">A transform function to apply to each element of the intermediate sequence.</param>
         /// <param name="resultSelector">A transform function to apply to each element of the intermediate sequence.</param>
         /// <returns>An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element.</returns>
         /// <returns>An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="taskSelector"/> or <paramref name="resultSelector"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="taskSelector"/> or <paramref name="resultSelector"/> is null.</exception>
-        /// <remarks>This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable&lt;TResult&gt;"/>.</remarks>
+        /// <remarks>This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable{TResult}(Task{TResult})"/>.</remarks>
         public static IObservable<TResult> SelectMany<TSource, TTaskResult, TResult>(this IObservable<TSource> source, Func<TSource, CancellationToken, Task<TTaskResult>> taskSelector, Func<TSource, TTaskResult, TResult> resultSelector)
         public static IObservable<TResult> SelectMany<TSource, TTaskResult, TResult>(this IObservable<TSource> source, Func<TSource, CancellationToken, Task<TTaskResult>> taskSelector, Func<TSource, TTaskResult, TResult> resultSelector)
         {
         {
             if (source == null)
             if (source == null)
@@ -1023,7 +1023,7 @@ namespace System.Reactive.Linq
         /// <param name="resultSelector">A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element.</param>
         /// <param name="resultSelector">A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element.</param>
         /// <returns>An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element.</returns>
         /// <returns>An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="taskSelector"/> or <paramref name="resultSelector"/> is null.</exception>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="taskSelector"/> or <paramref name="resultSelector"/> is null.</exception>
-        /// <remarks>This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable&lt;TResult&gt;"/>.</remarks>
+        /// <remarks>This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using <see cref="TaskObservableExtensions.ToObservable{TResult}(Task{TResult})"/>.</remarks>
         public static IObservable<TResult> SelectMany<TSource, TTaskResult, TResult>(this IObservable<TSource> source, Func<TSource, int, CancellationToken, Task<TTaskResult>> taskSelector, Func<TSource, int, TTaskResult, TResult> resultSelector)
         public static IObservable<TResult> SelectMany<TSource, TTaskResult, TResult>(this IObservable<TSource> source, Func<TSource, int, CancellationToken, Task<TTaskResult>> taskSelector, Func<TSource, int, TTaskResult, TResult> resultSelector)
         {
         {
             if (source == null)
             if (source == null)

+ 1 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs

@@ -19,7 +19,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
         protected override IDisposable Run(IObserver<TSource> observer, IDisposable cancel, Action<IDisposable> setSink)
         protected override IDisposable Run(IObserver<TSource> observer, IDisposable cancel, Action<IDisposable> setSink)
         {
         {
-            var d = new CompositeDisposable(_refCount.GetDisposable(), cancel);
+            var d = StableCompositeDisposable.Create(_refCount.GetDisposable(), cancel);
 
 
             var sink = new _(observer, d);
             var sink = new _(observer, d);
             setSink(sink);
             setSink(sink);

+ 1 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs

@@ -40,7 +40,7 @@ namespace System.Reactive.Linq.ObservableImpl
             {
             {
                 var ls = new SingleAssignmentDisposable();
                 var ls = new SingleAssignmentDisposable();
                 var rs = new SingleAssignmentDisposable();
                 var rs = new SingleAssignmentDisposable();
-                var d = new CompositeDisposable(ls, rs);
+                var d = StableCompositeDisposable.Create(ls, rs);
 
 
                 var gate = new object();
                 var gate = new object();
 
 

+ 8 - 8
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs

@@ -178,7 +178,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 var subscription = _parent._source.SubscribeSafe(this);
                 var subscription = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable { _timerD, subscription };
+                return StableCompositeDisposable.Create(_timerD, subscription);
             }
             }
 
 
             private void CreateWindow()
             private void CreateWindow()
@@ -304,7 +304,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 var d = _parent._scheduler.SchedulePeriodic(_parent._timeSpan, Tick);
                 var d = _parent._scheduler.SchedulePeriodic(_parent._timeSpan, Tick);
                 var s = _parent._source.SubscribeSafe(this);
                 var s = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(d, s);
+                return StableCompositeDisposable.Create(d, s);
             }
             }
 
 
             private void Tick()
             private void Tick()
@@ -377,7 +377,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 var subscription = _parent._source.SubscribeSafe(this);
                 var subscription = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable { _timerD, subscription };
+                return StableCompositeDisposable.Create(_timerD, subscription);
             }
             }
 
 
             private void CreateTimer(int id)
             private void CreateTimer(int id)
@@ -404,9 +404,9 @@ namespace System.Reactive.Linq.ObservableImpl
                     var res = _s;
                     var res = _s;
                     _s = new List<TSource>();
                     _s = new List<TSource>();
                     base._observer.OnNext(res);
                     base._observer.OnNext(res);
-                }
 
 
-                CreateTimer(newId);
+                    CreateTimer(newId);
+                }
 
 
                 return d;
                 return d;
             }
             }
@@ -431,10 +431,10 @@ namespace System.Reactive.Linq.ObservableImpl
                         _s = new List<TSource>();
                         _s = new List<TSource>();
                         base._observer.OnNext(res);
                         base._observer.OnNext(res);
                     }
                     }
-                }
 
 
-                if (newWindow)
-                    CreateTimer(newId);
+                    if (newWindow)
+                        CreateTimer(newId);
+                }
             }
             }
 
 
             public void OnError(Exception error)
             public void OnError(Exception error)

+ 11 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs

@@ -3,7 +3,6 @@
 #if !NO_PERF
 #if !NO_PERF
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
-using System.Reactive.Concurrency;
 using System.Reactive.Disposables;
 using System.Reactive.Disposables;
 
 
 namespace System.Reactive.Linq.ObservableImpl
 namespace System.Reactive.Linq.ObservableImpl
@@ -68,6 +67,17 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 base.Dispose();
                 base.Dispose();
             }
             }
+
+            protected override bool Fail(Exception error)
+            {
+                //
+                // Note that the invocation of _recurse in OnError will
+                // cause the next MoveNext operation to be enqueued, so
+                // we will still return to the caller immediately.
+                //
+                OnError(error);
+                return true;
+            }
         }
         }
     }
     }
 
 

+ 1322 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.Generated.cs

@@ -0,0 +1,1322 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+#if !NO_PERF
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reactive.Disposables;
+
+namespace System.Reactive.Linq.ObservableImpl
+{
+	#region [3,16]-ary
+
+    /* The following code is generated by a T4 template. */
+
+    #region CombineLatest auto-generated code (4/14/2015 00:26:20)
+
+	class CombineLatest<T1, T2, T3, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly Func<T1, T2, T3, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, Func<T1, T2, T3, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(3, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[3];
+                for (int i = 0; i < 3; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly Func<T1, T2, T3, T4, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, Func<T1, T2, T3, T4, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(4, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[4];
+                for (int i = 0; i < 4; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value);
+            }
+        }
+    }
+
+#if !NO_LARGEARITY
+
+	class CombineLatest<T1, T2, T3, T4, T5, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly Func<T1, T2, T3, T4, T5, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, Func<T1, T2, T3, T4, T5, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(5, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[5];
+                for (int i = 0; i < 5; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly Func<T1, T2, T3, T4, T5, T6, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, Func<T1, T2, T3, T4, T5, T6, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(6, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[6];
+                for (int i = 0; i < 6; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, Func<T1, T2, T3, T4, T5, T6, T7, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(7, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[7];
+                for (int i = 0; i < 7; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(8, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[8];
+                for (int i = 0; i < 8; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(9, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[9];
+                for (int i = 0; i < 9; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(10, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[10];
+                for (int i = 0; i < 10; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(11, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[11];
+                for (int i = 0; i < 11; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(12, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[12];
+                for (int i = 0; i < 12; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(13, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+            private CombineLatestObserver<T13> _observer13;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[13];
+                for (int i = 0; i < 13; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+				_observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly IObservable<T14> _source14;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _source14 = source14;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(14, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+            private CombineLatestObserver<T13> _observer13;
+            private CombineLatestObserver<T14> _observer14;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[14];
+                for (int i = 0; i < 14; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+				_observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
+				_observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
+                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly IObservable<T14> _source14;
+        private readonly IObservable<T15> _source15;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _source14 = source14;
+            _source15 = source15;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(15, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+            private CombineLatestObserver<T13> _observer13;
+            private CombineLatestObserver<T14> _observer14;
+            private CombineLatestObserver<T15> _observer15;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[15];
+                for (int i = 0; i < 15; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+				_observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
+				_observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
+				_observer15 = new CombineLatestObserver<T15>(_gate, this, 14, subscriptions[14]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
+                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
+                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly IObservable<T14> _source14;
+        private readonly IObservable<T15> _source15;
+        private readonly IObservable<T16> _source16;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, IObservable<T16> source16, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _source14 = source14;
+            _source15 = source15;
+            _source16 = source16;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(16, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+            private CombineLatestObserver<T13> _observer13;
+            private CombineLatestObserver<T14> _observer14;
+            private CombineLatestObserver<T15> _observer15;
+            private CombineLatestObserver<T16> _observer16;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[16];
+                for (int i = 0; i < 16; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+				_observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
+				_observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
+				_observer15 = new CombineLatestObserver<T15>(_gate, this, 14, subscriptions[14]);
+				_observer16 = new CombineLatestObserver<T16>(_gate, this, 15, subscriptions[15]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
+                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
+                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
+                subscriptions[15].Disposable = _parent._source16.SubscribeSafe(_observer16);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value, _observer16.Value);
+            }
+        }
+    }
+
+
+#endif
+
+	#endregion
+
+	#endregion
+}
+#endif

+ 134 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.Generated.tt

@@ -0,0 +1,134 @@
+<#@ template debug="false" hostspecific="false" language="C#" #>
+<#@ assembly name="System.Core" #>
+<#@ import namespace="System.Linq" #>
+<#@ import namespace="System.Text" #>
+<#@ import namespace="System.Collections.Generic" #>
+<#@ output extension=".cs" #>
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+#if !NO_PERF
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reactive.Disposables;
+
+namespace System.Reactive.Linq.ObservableImpl
+{
+	#region [3,16]-ary
+
+    /* The following code is generated by a T4 template. */
+
+    #region CombineLatest auto-generated code (<#=DateTime.Now.ToString()#>)
+
+<#
+for (var i = 3; i <= 16; i++)
+{
+	var ts = string.Join(", ", Enumerable.Range(1, i).Select(j => "T" + j));
+	var os = string.Join(", ", Enumerable.Range(1, i).Select(j => "IObservable<T" + j + "> source" + j));
+	var vs = string.Join(", ", Enumerable.Range(1, i).Select(j => "_observer" + j + ".Value"));
+
+	if (i == 5)
+	{
+#>
+#if !NO_LARGEARITY
+
+<#
+	}
+#>
+	class CombineLatest<<#=ts#>, TResult> : Producer<TResult>
+    {
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+        private readonly IObservable<T<#=j#>> _source<#=j#>;
+<#
+}
+#>
+        private readonly Func<<#=ts#>, TResult> _resultSelector;
+
+        public CombineLatest(<#=os#>, Func<<#=ts#>, TResult> resultSelector)
+        {
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+            _source<#=j#> = source<#=j#>;
+<#
+}
+#>
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<<#=ts#>, TResult> _parent;
+
+            public _(CombineLatest<<#=ts#>, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(<#=i#>, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+            private CombineLatestObserver<T<#=j#>> _observer<#=j#>;
+<#
+}
+#>
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[<#=i#>];
+                for (int i = 0; i < <#=i#>; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+				_observer<#=j#> = new CombineLatestObserver<T<#=j#>>(_gate, this, <#=j - 1#>, subscriptions[<#=j - 1#>]);
+<#
+}
+#>
+                
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+                subscriptions[<#=j - 1#>].Disposable = _parent._source<#=j#>.SubscribeSafe(_observer<#=j#>);
+<#
+}
+#>
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(<#=vs#>);
+            }
+        }
+    }
+
+<#
+}
+#>
+
+#endif
+
+	#endregion
+
+	#endregion
+}
+#endif

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1306
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs


+ 3 - 3
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs

@@ -111,7 +111,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 _sourceSubscription = sourceSubscription;
                 _sourceSubscription = sourceSubscription;
                 sourceSubscription.Disposable = _parent._source.SubscribeSafe(this);
                 sourceSubscription.Disposable = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(_sourceSubscription, _cancelable);
+                return StableCompositeDisposable.Create(_sourceSubscription, _cancelable);
             }
             }
 
 
             private void Start()
             private void Start()
@@ -386,7 +386,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 _sourceSubscription = sourceSubscription;
                 _sourceSubscription = sourceSubscription;
                 sourceSubscription.Disposable = _parent._source.SubscribeSafe(this);
                 sourceSubscription.Disposable = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(_sourceSubscription, _cancelable);
+                return StableCompositeDisposable.Create(_sourceSubscription, _cancelable);
             }
             }
 
 
             private void Start()
             private void Start()
@@ -632,7 +632,7 @@ namespace System.Reactive.Linq.ObservableImpl
                     _subscription.Disposable = _parent._subscriptionDelay.SubscribeSafe(new SubscriptionDelay(this));
                     _subscription.Disposable = _parent._subscriptionDelay.SubscribeSafe(new SubscriptionDelay(this));
                 }
                 }
 
 
-                return new CompositeDisposable(_subscription, _delays);
+                return StableCompositeDisposable.Create(_subscription, _delays);
             }
             }
 
 
             private void Start()
             private void Start()

+ 12 - 8
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs

@@ -58,6 +58,13 @@ namespace System.Reactive.Linq.ObservableImpl
                 _nullGate = new object();
                 _nullGate = new object();
             }
             }
 
 
+            private ISubject<TElement> NewSubject()
+            {
+                var sub = new Subject<TElement>();
+
+                return Subject.Create<TElement>(new AsyncLockObserver<TElement>(sub, new Concurrency.AsyncLock()), sub);
+            }
+
             public void OnNext(TSource value)
             public void OnNext(TSource value)
             {
             {
                 var key = default(TKey);
                 var key = default(TKey);
@@ -89,7 +96,7 @@ namespace System.Reactive.Linq.ObservableImpl
                         {
                         {
                             if (_null == null)
                             if (_null == null)
                             {
                             {
-                                _null = new Subject<TElement>();
+                                _null = NewSubject();
                                 fireNewMapEntry = true;
                                 fireNewMapEntry = true;
                             }
                             }
 
 
@@ -98,7 +105,7 @@ namespace System.Reactive.Linq.ObservableImpl
                     }
                     }
                     else
                     else
                     {
                     {
-                        writer = _map.GetOrAdd(key, () => new Subject<TElement>(), out fireNewMapEntry);
+                        writer = _map.GetOrAdd(key, NewSubject, out fireNewMapEntry);
                     }
                     }
                 }
                 }
                 catch (Exception exception)
                 catch (Exception exception)
@@ -161,8 +168,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 //        revisit the behavior for vNext. Nonetheless, we'll add synchronization
                 //        revisit the behavior for vNext. Nonetheless, we'll add synchronization
                 //        to ensure no concurrent calls to the subject are made.
                 //        to ensure no concurrent calls to the subject are made.
                 //
                 //
-                lock (writer)
-                    writer.OnNext(element);
+                writer.OnNext(element);
             }
             }
 
 
             class Delta : IObserver<TDuration>
             class Delta : IObserver<TDuration>
@@ -202,15 +208,13 @@ namespace System.Reactive.Linq.ObservableImpl
                             _parent._null = null;
                             _parent._null = null;
                         }
                         }
 
 
-                        lock (@null)
-                            @null.OnCompleted();
+                        @null.OnCompleted();
                     }
                     }
                     else
                     else
                     {
                     {
                         if (_parent._map.Remove(_key))
                         if (_parent._map.Remove(_key))
                         {
                         {
-                            lock (_writer)
-                                _writer.OnCompleted();
+                            _writer.OnCompleted();
                         }
                         }
                     }
                     }
 
 

+ 36 - 12
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs

@@ -47,10 +47,10 @@ namespace System.Reactive.Linq.ObservableImpl
             private RefCountDisposable _refCount;
             private RefCountDisposable _refCount;
 
 
             private int _leftID;
             private int _leftID;
-            private Dictionary<int, IObserver<TRight>> _leftMap;
+            private SortedDictionary<int, IObserver<TRight>> _leftMap;
 
 
             private int _rightID;
             private int _rightID;
-            private Dictionary<int, TRight> _rightMap;
+            private SortedDictionary<int, TRight> _rightMap;
 
 
             public IDisposable Run()
             public IDisposable Run()
             {
             {
@@ -61,12 +61,12 @@ namespace System.Reactive.Linq.ObservableImpl
                 var leftSubscription = new SingleAssignmentDisposable();
                 var leftSubscription = new SingleAssignmentDisposable();
                 _group.Add(leftSubscription);
                 _group.Add(leftSubscription);
                 _leftID = 0;
                 _leftID = 0;
-                _leftMap = new Dictionary<int, IObserver<TRight>>();
+                _leftMap = new SortedDictionary<int, IObserver<TRight>>();
 
 
                 var rightSubscription = new SingleAssignmentDisposable();
                 var rightSubscription = new SingleAssignmentDisposable();
                 _group.Add(rightSubscription);
                 _group.Add(rightSubscription);
                 _rightID = 0;
                 _rightID = 0;
-                _rightMap = new Dictionary<int, TRight>();
+                _rightMap = new SortedDictionary<int, TRight>();
 
 
                 leftSubscription.Disposable = _parent._left.SubscribeSafe(new LeftObserver(this, leftSubscription));
                 leftSubscription.Disposable = _parent._left.SubscribeSafe(new LeftObserver(this, leftSubscription));
                 rightSubscription.Disposable = _parent._right.SubscribeSafe(new RightObserver(this, rightSubscription));
                 rightSubscription.Disposable = _parent._right.SubscribeSafe(new RightObserver(this, rightSubscription));
@@ -88,8 +88,12 @@ namespace System.Reactive.Linq.ObservableImpl
                 private void Expire(int id, IObserver<TRight> group, IDisposable resource)
                 private void Expire(int id, IObserver<TRight> group, IDisposable resource)
                 {
                 {
                     lock (_parent._gate)
                     lock (_parent._gate)
+                    {
                         if (_parent._leftMap.Remove(id))
                         if (_parent._leftMap.Remove(id))
+                        {
                             group.OnCompleted();
                             group.OnCompleted();
+                        }
+                    }
 
 
                     _parent._group.Remove(resource);
                     _parent._group.Remove(resource);
                 }
                 }
@@ -98,9 +102,11 @@ namespace System.Reactive.Linq.ObservableImpl
                 {
                 {
                     var s = new Subject<TRight>();
                     var s = new Subject<TRight>();
                     var id = 0;
                     var id = 0;
+                    var rightID = 0;
                     lock (_parent._gate)
                     lock (_parent._gate)
                     {
                     {
                         id = _parent._leftID++;
                         id = _parent._leftID++;
+                        rightID = _parent._rightID;
                         _parent._leftMap.Add(id, s);
                         _parent._leftMap.Add(id, s);
                     }
                     }
 
 
@@ -139,9 +145,12 @@ namespace System.Reactive.Linq.ObservableImpl
                     {
                     {
                         _parent._observer.OnNext(result);
                         _parent._observer.OnNext(result);
 
 
-                        foreach (var rightValue in _parent._rightMap.Values)
+                        foreach (var rightValue in _parent._rightMap)
                         {
                         {
-                            s.OnNext(rightValue);
+                            if (rightValue.Key < rightID)
+                            {
+                                s.OnNext(rightValue.Value);
+                            }
                         }
                         }
                     }
                     }
                 }
                 }
@@ -181,8 +190,10 @@ namespace System.Reactive.Linq.ObservableImpl
                 {
                 {
                     lock (_parent._gate)
                     lock (_parent._gate)
                     {
                     {
-                        foreach (var o in _parent._leftMap.Values)
-                            o.OnError(error);
+                        foreach (var o in _parent._leftMap)
+                        {
+                            o.Value.OnError(error);
+                        }
 
 
                         _parent._observer.OnError(error);
                         _parent._observer.OnError(error);
                         _parent.Dispose();
                         _parent.Dispose();
@@ -215,7 +226,9 @@ namespace System.Reactive.Linq.ObservableImpl
                 private void Expire(int id, IDisposable resource)
                 private void Expire(int id, IDisposable resource)
                 {
                 {
                     lock (_parent._gate)
                     lock (_parent._gate)
+                    {
                         _parent._rightMap.Remove(id);
                         _parent._rightMap.Remove(id);
+                    }
 
 
                     _parent._group.Remove(resource);
                     _parent._group.Remove(resource);
                 }
                 }
@@ -223,9 +236,11 @@ namespace System.Reactive.Linq.ObservableImpl
                 public void OnNext(TRight value)
                 public void OnNext(TRight value)
                 {
                 {
                     var id = 0;
                     var id = 0;
+                    var leftID = 0;
                     lock (_parent._gate)
                     lock (_parent._gate)
                     {
                     {
                         id = _parent._rightID++;
                         id = _parent._rightID++;
+                        leftID = _parent._leftID;
                         _parent._rightMap.Add(id, value);
                         _parent._rightMap.Add(id, value);
                     }
                     }
 
 
@@ -242,12 +257,18 @@ namespace System.Reactive.Linq.ObservableImpl
                         OnError(exception);
                         OnError(exception);
                         return;
                         return;
                     }
                     }
+
                     md.Disposable = duration.SubscribeSafe(new Delta(this, id, md));
                     md.Disposable = duration.SubscribeSafe(new Delta(this, id, md));
 
 
                     lock (_parent._gate)
                     lock (_parent._gate)
                     {
                     {
-                        foreach (var o in _parent._leftMap.Values)
-                            o.OnNext(value);
+                        foreach (var o in _parent._leftMap)
+                        {
+                            if (o.Key < leftID)
+                            {
+                                o.Value.OnNext(value);
+                            }
+                        }
                     }
                     }
                 }
                 }
 
 
@@ -284,8 +305,11 @@ namespace System.Reactive.Linq.ObservableImpl
                 {
                 {
                     lock (_parent._gate)
                     lock (_parent._gate)
                     {
                     {
-                        foreach (var o in _parent._leftMap.Values)
-                            o.OnError(error);
+                        foreach (var o in _parent._leftMap)
+                        {
+                            o.Value.OnError(error);
+                        }
+
                         _parent._observer.OnError(error);
                         _parent._observer.OnError(error);
                         _parent.Dispose();
                         _parent.Dispose();
                     }
                     }

+ 38 - 28
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs

@@ -46,11 +46,11 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
             private bool _leftDone;
             private bool _leftDone;
             private int _leftID;
             private int _leftID;
-            private Dictionary<int, TLeft> _leftMap;
+            private SortedDictionary<int, TLeft> _leftMap;
             
             
             private bool _rightDone;
             private bool _rightDone;
             private int _rightID;
             private int _rightID;
-            private Dictionary<int, TRight> _rightMap;
+            private SortedDictionary<int, TRight> _rightMap;
 
 
             public IDisposable Run()
             public IDisposable Run()
             {
             {
@@ -61,13 +61,13 @@ namespace System.Reactive.Linq.ObservableImpl
                 _group.Add(leftSubscription);
                 _group.Add(leftSubscription);
                 _leftDone = false;
                 _leftDone = false;
                 _leftID = 0;
                 _leftID = 0;
-                _leftMap = new Dictionary<int, TLeft>();
+                _leftMap = new SortedDictionary<int, TLeft>();
 
 
                 var rightSubscription = new SingleAssignmentDisposable();
                 var rightSubscription = new SingleAssignmentDisposable();
                 _group.Add(rightSubscription);
                 _group.Add(rightSubscription);
                 _rightDone = false;
                 _rightDone = false;
                 _rightID = 0;
                 _rightID = 0;
-                _rightMap = new Dictionary<int, TRight>();
+                _rightMap = new SortedDictionary<int, TRight>();
 
 
                 leftSubscription.Disposable = _parent._left.SubscribeSafe(new LeftObserver(this, leftSubscription));
                 leftSubscription.Disposable = _parent._left.SubscribeSafe(new LeftObserver(this, leftSubscription));
                 rightSubscription.Disposable = _parent._right.SubscribeSafe(new RightObserver(this, rightSubscription));
                 rightSubscription.Disposable = _parent._right.SubscribeSafe(new RightObserver(this, rightSubscription));
@@ -103,9 +103,11 @@ namespace System.Reactive.Linq.ObservableImpl
                 public void OnNext(TLeft value)
                 public void OnNext(TLeft value)
                 {
                 {
                     var id = 0;
                     var id = 0;
+                    var rightID = 0;
                     lock (_parent._gate)
                     lock (_parent._gate)
                     {
                     {
                         id = _parent._leftID++;
                         id = _parent._leftID++;
+                        rightID = _parent._rightID;
                         _parent._leftMap.Add(id, value);
                         _parent._leftMap.Add(id, value);
                     }
                     }
 
 
@@ -128,21 +130,24 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                     lock (_parent._gate)
                     lock (_parent._gate)
                     {
                     {
-                        foreach (var rightValue in _parent._rightMap.Values)
+                        foreach (var rightValue in _parent._rightMap)
                         {
                         {
-                            var result = default(TResult);
-                            try
+                            if (rightValue.Key < rightID)
                             {
                             {
-                                result = _parent._parent._resultSelector(value, rightValue);
+                                var result = default(TResult);
+                                try
+                                {
+                                    result = _parent._parent._resultSelector(value, rightValue.Value);
+                                }
+                                catch (Exception exception)
+                                {
+                                    _parent._observer.OnError(exception);
+                                    _parent.Dispose();
+                                    return;
+                                }
+
+                                _parent._observer.OnNext(result);
                             }
                             }
-                            catch (Exception exception)
-                            {
-                                _parent._observer.OnError(exception);
-                                _parent.Dispose();
-                                return;
-                            }
-
-                            _parent._observer.OnNext(result);
                         }
                         }
                     }
                     }
                 }
                 }
@@ -231,9 +236,11 @@ namespace System.Reactive.Linq.ObservableImpl
                 public void OnNext(TRight value)
                 public void OnNext(TRight value)
                 {
                 {
                     var id = 0;
                     var id = 0;
+                    var leftID = 0;
                     lock (_parent._gate)
                     lock (_parent._gate)
                     {
                     {
                         id = _parent._rightID++;
                         id = _parent._rightID++;
+                        leftID = _parent._leftID;
                         _parent._rightMap.Add(id, value);
                         _parent._rightMap.Add(id, value);
                     }
                     }
 
 
@@ -256,21 +263,24 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                     lock (_parent._gate)
                     lock (_parent._gate)
                     {
                     {
-                        foreach (var leftValue in _parent._leftMap.Values)
+                        foreach (var leftValue in _parent._leftMap)
                         {
                         {
-                            var result = default(TResult);
-                            try
+                            if (leftValue.Key < leftID)
                             {
                             {
-                                result = _parent._parent._resultSelector(leftValue, value);
+                                var result = default(TResult);
+                                try
+                                {
+                                    result = _parent._parent._resultSelector(leftValue.Value, value);
+                                }
+                                catch (Exception exception)
+                                {
+                                    _parent._observer.OnError(exception);
+                                    _parent.Dispose();
+                                    return;
+                                }
+
+                                _parent._observer.OnNext(result);
                             }
                             }
-                            catch (Exception exception)
-                            {
-                                _parent._observer.OnError(exception);
-                                _parent.Dispose();
-                                return;
-                            }
-
-                            _parent._observer.OnNext(result);
                         }
                         }
                     }
                     }
                 }
                 }

+ 1 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs

@@ -57,7 +57,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 var subscription = observable.SubscribeSafe(this);
                 var subscription = observable.SubscribeSafe(this);
                 var connection = connectable.Connect();
                 var connection = connectable.Connect();
 
 
-                return new CompositeDisposable(subscription, connection);
+                return StableCompositeDisposable.Create(subscription, connection);
             }
             }
 
 
             public void OnNext(TResult value)
             public void OnNext(TResult value)

+ 11 - 2
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs

@@ -3,8 +3,6 @@
 #if !NO_PERF
 #if !NO_PERF
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
-using System.Reactive.Concurrency;
-using System.Reactive.Disposables;
 
 
 namespace System.Reactive.Linq.ObservableImpl
 namespace System.Reactive.Linq.ObservableImpl
 {
 {
@@ -54,6 +52,17 @@ namespace System.Reactive.Linq.ObservableImpl
             {
             {
                 _recurse();
                 _recurse();
             }
             }
+
+            protected override bool Fail(Exception error)
+            {
+                //
+                // Note that the invocation of _recurse in OnError will
+                // cause the next MoveNext operation to be enqueued, so
+                // we will still return to the caller immediately.
+                //
+                OnError(error);
+                return true;
+            }
         }
         }
     }
     }
 }
 }

+ 2 - 2
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs

@@ -53,7 +53,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 var samplerSubscription = _parent._sampler.SubscribeSafe(new SampleImpl(this));
                 var samplerSubscription = _parent._sampler.SubscribeSafe(new SampleImpl(this));
 
 
-                return new CompositeDisposable(_sourceSubscription, samplerSubscription);
+                return StableCompositeDisposable.Create(_sourceSubscription, samplerSubscription);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)
@@ -187,7 +187,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 _sourceSubscription = sourceSubscription;
                 _sourceSubscription = sourceSubscription;
                 sourceSubscription.Disposable = _parent._source.SubscribeSafe(this);
                 sourceSubscription.Disposable = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(
+                return StableCompositeDisposable.Create(
                     sourceSubscription,
                     sourceSubscription,
                     _parent._scheduler.SchedulePeriodic(_parent._interval, Tick)
                     _parent._scheduler.SchedulePeriodic(_parent._interval, Tick)
                 );
                 );

+ 4 - 4
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs

@@ -606,7 +606,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 _cancel = new CancellationDisposable();
                 _cancel = new CancellationDisposable();
                 _count = 1;
                 _count = 1;
 
 
-                return new CompositeDisposable(_parent._source.SubscribeSafe(this), _cancel);
+                return StableCompositeDisposable.Create(_parent._source.SubscribeSafe(this), _cancel);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)
@@ -741,7 +741,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 _cancel = new CancellationDisposable();
                 _cancel = new CancellationDisposable();
                 _count = 1;
                 _count = 1;
 
 
-                return new CompositeDisposable(_parent._source.SubscribeSafe(this), _cancel);
+                return StableCompositeDisposable.Create(_parent._source.SubscribeSafe(this), _cancel);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)
@@ -1532,7 +1532,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 _cancel = new CancellationDisposable();
                 _cancel = new CancellationDisposable();
                 _count = 1;
                 _count = 1;
 
 
-                return new CompositeDisposable(_parent._source.SubscribeSafe(this), _cancel);
+                return StableCompositeDisposable.Create(_parent._source.SubscribeSafe(this), _cancel);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)
@@ -1643,7 +1643,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 _cancel = new CancellationDisposable();
                 _cancel = new CancellationDisposable();
                 _count = 1;
                 _count = 1;
 
 
-                return new CompositeDisposable(_parent._source.SubscribeSafe(this), _cancel);
+                return StableCompositeDisposable.Create(_parent._source.SubscribeSafe(this), _cancel);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)

+ 14 - 8
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs

@@ -68,11 +68,11 @@ namespace System.Reactive.Linq.ObservableImpl
                 _ql = new Queue<TSource>();
                 _ql = new Queue<TSource>();
                 _qr = new Queue<TSource>();
                 _qr = new Queue<TSource>();
 
 
-                return new CompositeDisposable
-                {
+                return StableCompositeDisposable.Create
+                (
                     _parent._first.SubscribeSafe(new F(this)),
                     _parent._first.SubscribeSafe(new F(this)),
                     _parent._second.SubscribeSafe(new S(this))
                     _parent._second.SubscribeSafe(new S(this))
-                };
+                );
             }
             }
 
 
             class F : IObserver<TSource>
             class F : IObserver<TSource>
@@ -122,8 +122,11 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 public void OnError(Exception error)
                 public void OnError(Exception error)
                 {
                 {
-                    _parent._observer.OnError(error);
-                    _parent.Dispose();
+                    lock (_parent._gate)
+                    {
+                        _parent._observer.OnError(error);
+                        _parent.Dispose();
+                    }
                 }
                 }
 
 
                 public void OnCompleted()
                 public void OnCompleted()
@@ -197,8 +200,11 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 public void OnError(Exception error)
                 public void OnError(Exception error)
                 {
                 {
-                    _parent._observer.OnError(error);
-                    _parent.Dispose();
+                    lock (_parent._gate)
+                    {
+                        _parent._observer.OnError(error);
+                        _parent.Dispose();
+                    }
                 }
                 }
 
 
                 public void OnCompleted()
                 public void OnCompleted()
@@ -258,7 +264,7 @@ namespace System.Reactive.Linq.ObservableImpl
                     return Disposable.Empty;
                     return Disposable.Empty;
                 }
                 }
 
 
-                return new CompositeDisposable(
+                return StableCompositeDisposable.Create(
                     _parent._first.SubscribeSafe(this),
                     _parent._first.SubscribeSafe(this),
                     _enumerator
                     _enumerator
                 );
                 );

+ 1 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs

@@ -120,7 +120,7 @@ namespace System.Reactive.Linq.ObservableImpl
             {
             {
                 var t = _parent._scheduler.Schedule(_parent._duration, Tick);
                 var t = _parent._scheduler.Schedule(_parent._duration, Tick);
                 var d = _parent._source.SubscribeSafe(this);
                 var d = _parent._source.SubscribeSafe(this);
-                return new CompositeDisposable(t, d);
+                return StableCompositeDisposable.Create(t, d);
             }
             }
 
 
             private void Tick()
             private void Tick()

+ 2 - 2
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs

@@ -47,7 +47,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 sourceObserver.Disposable = sourceSubscription;
                 sourceObserver.Disposable = sourceSubscription;
                 otherObserver.Disposable = otherSubscription;
                 otherObserver.Disposable = otherSubscription;
 
 
-                return new CompositeDisposable(
+                return StableCompositeDisposable.Create(
                     sourceSubscription,
                     sourceSubscription,
                     otherSubscription
                     otherSubscription
                 );
                 );
@@ -179,7 +179,7 @@ namespace System.Reactive.Linq.ObservableImpl
             {
             {
                 var t = _parent._scheduler.Schedule(_parent._startTime, Tick);
                 var t = _parent._scheduler.Schedule(_parent._startTime, Tick);
                 var d = _parent._source.SubscribeSafe(this);
                 var d = _parent._source.SubscribeSafe(this);
-                return new CompositeDisposable(t, d);
+                return StableCompositeDisposable.Create(t, d);
             }
             }
 
 
             private void Tick()
             private void Tick()

+ 1 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs

@@ -51,7 +51,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 _subscription = subscription;
                 _subscription = subscription;
                 subscription.Disposable = _parent._sources.SubscribeSafe(this);
                 subscription.Disposable = _parent._sources.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(_subscription, _innerSubscription);
+                return StableCompositeDisposable.Create(_subscription, _innerSubscription);
             }
             }
 
 
             public void OnNext(IObservable<TSource> value)
             public void OnNext(IObservable<TSource> value)

+ 1 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs

@@ -133,7 +133,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 var t = _parent._scheduler.Schedule(_parent._duration, Tick);
                 var t = _parent._scheduler.Schedule(_parent._duration, Tick);
                 var d = _parent._source.SubscribeSafe(this);
                 var d = _parent._source.SubscribeSafe(this);
-                return new CompositeDisposable(t, d);
+                return StableCompositeDisposable.Create(t, d);
             }
             }
 
 
             private void Tick()
             private void Tick()

+ 2 - 2
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs

@@ -69,7 +69,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 _subscription.Disposable = _parent._source.SubscribeSafe(this);
                 _subscription.Disposable = _parent._source.SubscribeSafe(this);
                 
                 
-                return new CompositeDisposable(_subscription, _loop);
+                return StableCompositeDisposable.Create(_subscription, _loop);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)
@@ -155,7 +155,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 _watch = _parent._scheduler.StartStopwatch();
                 _watch = _parent._scheduler.StartStopwatch();
                 _subscription.Disposable = _parent._source.SubscribeSafe(this);
                 _subscription.Disposable = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(_subscription, _loop);
+                return StableCompositeDisposable.Create(_subscription, _loop);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)

+ 2 - 2
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs

@@ -47,7 +47,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 var sourceSubscription = _parent._source.SubscribeSafe(sourceObserver);
                 var sourceSubscription = _parent._source.SubscribeSafe(sourceObserver);
 
 
-                return new CompositeDisposable(
+                return StableCompositeDisposable.Create(
                     otherSubscription,
                     otherSubscription,
                     sourceSubscription
                     sourceSubscription
                 );
                 );
@@ -215,7 +215,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 var t = _parent._scheduler.Schedule(_parent._endTime, Tick);
                 var t = _parent._scheduler.Schedule(_parent._endTime, Tick);
                 var d = _parent._source.SubscribeSafe(this);
                 var d = _parent._source.SubscribeSafe(this);
-                return new CompositeDisposable(t, d);
+                return StableCompositeDisposable.Create(t, d);
             }
             }
 
 
             private void Tick()
             private void Tick()

+ 2 - 2
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs

@@ -53,7 +53,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 var subscription = _parent._source.SubscribeSafe(this);
                 var subscription = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(subscription, _cancelable);
+                return StableCompositeDisposable.Create(subscription, _cancelable);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)
@@ -160,7 +160,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 var subscription = _parent._source.SubscribeSafe(this);
                 var subscription = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(subscription, _cancelable);
+                return StableCompositeDisposable.Create(subscription, _cancelable);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)

+ 3 - 3
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs

@@ -75,7 +75,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 original.Disposable = _parent._source.SubscribeSafe(this);
                 original.Disposable = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(_subscription, timer);
+                return StableCompositeDisposable.Create(_subscription, timer);
             }
             }
 
 
             private void Timeout()
             private void Timeout()
@@ -169,7 +169,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 original.Disposable = _parent._source.SubscribeSafe(this);
                 original.Disposable = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(_subscription, _timer);
+                return StableCompositeDisposable.Create(_subscription, _timer);
             }
             }
 
 
             private void CreateTimer()
             private void CreateTimer()
@@ -309,7 +309,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
 
                 original.Disposable = _parent._source.SubscribeSafe(this);
                 original.Disposable = _parent._source.SubscribeSafe(this);
 
 
-                return new CompositeDisposable(_subscription, _timer);
+                return StableCompositeDisposable.Create(_subscription, _timer);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)

+ 1 - 1
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs

@@ -210,7 +210,7 @@ namespace System.Reactive.Linq.ObservableImpl
                     var c = new SingleAssignmentDisposable();
                     var c = new SingleAssignmentDisposable();
                     c.Disposable = self.Schedule(1L, CatchUp);
                     c.Disposable = self.Schedule(1L, CatchUp);
 
 
-                    return new CompositeDisposable(2) { d, c };
+                    return StableCompositeDisposable.Create(d, c);
                 }
                 }
 
 
                 return d;
                 return d;

+ 2 - 2
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs

@@ -48,10 +48,10 @@ namespace System.Reactive.Linq.ObservableImpl
                 }
                 }
                 catch (Exception exception)
                 catch (Exception exception)
                 {
                 {
-                    return new CompositeDisposable(Observable.Throw<TSource>(exception).SubscribeSafe(this), disposable);
+                    return StableCompositeDisposable.Create(Observable.Throw<TSource>(exception).SubscribeSafe(this), disposable);
                 }
                 }
 
 
-                return new CompositeDisposable(source.SubscribeSafe(this), disposable);
+                return StableCompositeDisposable.Create(source.SubscribeSafe(this), disposable);
             }
             }
 
 
             public void OnNext(TSource value)
             public void OnNext(TSource value)

+ 148 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/WithLatestFrom.cs

@@ -0,0 +1,148 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+#if !NO_PERF
+using System;
+using System.Reactive.Disposables;
+
+namespace System.Reactive.Linq.ObservableImpl
+{
+    class WithLatestFrom<TFirst, TSecond, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<TFirst> _first;
+        private readonly IObservable<TSecond> _second;
+        private readonly Func<TFirst, TSecond, TResult> _resultSelector;
+
+        public WithLatestFrom(IObservable<TFirst> first, IObservable<TSecond> second, Func<TFirst, TSecond, TResult> resultSelector)
+        {
+            _first = first;
+            _second = second;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : Sink<TResult>
+        {
+            private readonly WithLatestFrom<TFirst, TSecond, TResult> _parent;
+
+            public _(WithLatestFrom<TFirst, TSecond, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private object _gate;
+            private volatile bool _hasLatest;
+            private TSecond _latest;
+
+            public IDisposable Run()
+            {
+                _gate = new object();
+
+                var sndSubscription = new SingleAssignmentDisposable();
+
+                var fstO = new F(this);
+                var sndO = new S(this, sndSubscription);
+
+                var fstSubscription = _parent._first.SubscribeSafe(fstO);
+                sndSubscription.Disposable = _parent._second.SubscribeSafe(sndO);
+
+                return StableCompositeDisposable.Create(fstSubscription, sndSubscription);
+            }
+
+            class F : IObserver<TFirst>
+            {
+                private readonly _ _parent;
+
+                public F(_ parent)
+                {
+                    _parent = parent;
+                }
+
+                public void OnCompleted()
+                {
+                    lock (_parent._gate)
+                    {
+                        _parent._observer.OnCompleted();
+                        _parent.Dispose();
+                    }
+                }
+
+                public void OnError(Exception error)
+                {
+                    lock (_parent._gate)
+                    {
+                        _parent._observer.OnError(error);
+                        _parent.Dispose();
+                    }
+                }
+
+                public void OnNext(TFirst value)
+                {
+                    if (_parent._hasLatest) // Volatile read
+                    {
+                        var res = default(TResult);
+
+                        try
+                        {
+                            res = _parent._parent._resultSelector(value, _parent._latest);
+                        }
+                        catch (Exception ex)
+                        {
+                            lock (_parent._gate)
+                            {
+                                _parent._observer.OnError(ex);
+                                _parent.Dispose();
+                            }
+
+                            return;
+                        }
+
+                        lock (_parent._gate)
+                        {
+                            _parent._observer.OnNext(res);
+                        }
+                    }
+                }
+            }
+
+            class S : IObserver<TSecond>
+            {
+                private readonly _ _parent;
+                private readonly IDisposable _self;
+
+                public S(_ parent, IDisposable self)
+                {
+                    _parent = parent;
+                    _self = self;
+                }
+
+                public void OnCompleted()
+                {
+                    _self.Dispose();
+                }
+
+                public void OnError(Exception error)
+                {
+                    lock (_parent._gate)
+                    {
+                        _parent._observer.OnError(error);
+                        _parent.Dispose();
+                    }
+                }
+
+                public void OnNext(TSecond value)
+                {
+                    _parent._latest = value;
+                    _parent._hasLatest = true; // Volatile write
+                }
+            }
+        }
+    }
+}
+#endif

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels