[
  {
    "path": ".gitignore",
    "content": "*.suo\n*.user\n_ReSharper.*\nbin\nobj\npackages/\n\n# TODO NUGET\n!/packages/UnityEngine.dll\n!/packages/UnityEngine.dll.mdb\n!/packages/UnityEngine.xml\nFoundation.Architecture/TestResults/\nFoundation.Unity/Library/\nFoundation.Unity/Temp/\nFoundation.Unity/Assets/UnityTestTools/Assertions/\nFoundation.Unity/ProjectSettings/\n"
  },
  {
    "path": "DomainEvents.md",
    "content": "# Domain Events\n\nA global message broker for relaying events routed by the objects type. This pub sub service is perfect for decoupling logical consumers from infrastructure.\n\nThis implementation makes use of static generics. This alows us to not use reflection. On IOS and other older AOT platforms this can cause error of 'not enough trampolines', which can be fixed by config setting.\n\n## Use\n\n`````\n            //Define a message class to send\n            var msg = new Msg {Content = MagicString};\n            \n            //subscribe you handlers\n            DomainEvents<Msg>.Subscribe(Handler);\n\n            //maby ways to send\n            DomainEvents<Msg>.Publish(msg);\n            DomainEvents.Publish(msg);\n            DomainEvents.Publish(msg, typeof(Msg));\n\n            //unsubcribe when done as we are not using weakreferences internally\n            DomainEvents<Msg>.Unsubscribe(Handler);\n            \n            \n            public void Handler(Msg myMessage)\n            {\n              //Do Something\n            }\n`````\n"
  },
  {
    "path": "Foundation.Architecture/.vs/restore.dg",
    "content": "#:C:\\Users\\nick\\Documents\\Nventi\\Foundation-Light\\Foundation.Architecture\\Architecture.Core.Tests\\Architecture.Core.Tests.xproj\nC:\\Users\\nick\\Documents\\Nventi\\Foundation-Light\\Foundation.Architecture\\Architecture.Core.Tests\\Architecture.Core.Tests.xproj|C:\\Users\\nick\\Documents\\Nventi\\Foundation-Light\\Foundation.Architecture\\Architecture.Core\\Architecture.Core.xproj\n"
  },
  {
    "path": "Foundation.Architecture/Architecture/Architecture.Unity3d.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Foundation.Architecture</RootNamespace>\n    <AssemblyName>Foundation.Architecture.Unity3d</AssemblyName>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile>Unity Subset v3.5</TargetFrameworkProfile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>TRACE;DEBUG;UNITY;USE_THREAD</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"UnityEngine\">\n      <HintPath>..\\..\\packages\\UnityEngine.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Data\\BufferExt.cs\" />\n    <Compile Include=\"Data\\BufferHelper.cs\" />\n    <Compile Include=\"Data\\JsonHelper.cs\" />\n    <Compile Include=\"Injector\\InjectAttribute.cs\" />\n    <Compile Include=\"Injector\\InjectService.cs\" />\n    <Compile Include=\"Logging\\LogService.Unity3d.cs\" />\n    <Compile Include=\"Logging\\LogModel.cs\" />\n    <Compile Include=\"Messaging\\DomainEvents.cs\" />\n    <Compile Include=\"Messaging\\ObjectEvents.cs\" />\n    <Compile Include=\"Observables\\IObservable.cs\" />\n    <Compile Include=\"Observables\\ListEvent.cs\" />\n    <Compile Include=\"Observables\\ObservableProperty.cs\" />\n    <Compile Include=\"Observables\\ObservableList.cs\" />\n    <Compile Include=\"Observables\\ObservableProxy.cs\" />\n    <Compile Include=\"Observables\\ObservableBehaviour.cs\" />\n    <Compile Include=\"Observables\\ObservableObject.cs\" />\n    <Compile Include=\"Observables\\PropertyEvent.cs\" />\n    <Compile Include=\"Pooling\\Pool.cs\" />\n    <Compile Include=\"Pooling\\ThreadSafePool.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Threading\\Internal\\IThreadingService.cs\" />\n    <Compile Include=\"Threading\\Internal\\UnityThreadService.cs\" />\n    <Compile Include=\"Threading\\RoutineTimer.cs\" />\n    <Compile Include=\"Threading\\ThreadingService.cs\" />\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <PostBuildEvent>echo f | xcopy \"$(TargetDir)Foundation.Architecture.Unity3d.dll\" \"$(SolutionDir)..\\Foundation.Unity\\Assets\\Plugins\\Foundation.Architecture.Unity3d.dll\"  /D /Y\necho f | xcopy \"$(TargetDir)Foundation.Architecture.Unity3d.pdb\" \"$(SolutionDir)..\\Foundation.Unity\\Assets\\Plugins\\Foundation.Architecture.Unity3d.pdb\"  /D /Y</PostBuildEvent>\n  </PropertyGroup>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Foundation.Architecture/Architecture/Architecture.Unity3d.csproj.DotSettings",
    "content": "﻿<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namespace:System;assembly=mscorlib\" xmlns:ss=\"urn:shemas-jetbrains-com:settings-storage-xaml\" xmlns:wpf=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=data/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=injector/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=logging/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=messaging/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=observables/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=pooling/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=threading/@EntryIndexedValue\">True</s:Boolean></wpf:ResourceDictionary>"
  },
  {
    "path": "Foundation.Architecture/Architecture/Architecture.WebGL.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{7238EC8C-9378-4369-BEA9-07D774F6C104}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Foundation.Architecture</RootNamespace>\n    <AssemblyName>Foundation.Architecture.WebGL</AssemblyName>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile>Unity Subset v3.5</TargetFrameworkProfile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>TRACE;DEBUG;UNITY</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"UnityEngine\">\n      <HintPath>..\\..\\packages\\UnityEngine.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Data\\BufferExt.cs\" />\n    <Compile Include=\"Data\\BufferHelper.cs\" />\n    <Compile Include=\"Data\\JsonHelper.cs\" />\n    <Compile Include=\"Injector\\InjectAttribute.cs\" />\n    <Compile Include=\"Injector\\InjectService.cs\" />\n    <Compile Include=\"Logging\\LogModel.cs\" />\n    <Compile Include=\"Logging\\LogService.Unity3d.cs\" />\n    <Compile Include=\"Messaging\\DomainEvents.cs\" />\n    <Compile Include=\"Messaging\\ObjectEvents.cs\" />\n    <Compile Include=\"Observables\\IObservable.cs\" />\n    <Compile Include=\"Observables\\ListEvent.cs\" />\n    <Compile Include=\"Observables\\ObservableBehaviour.cs\" />\n    <Compile Include=\"Observables\\ObservableList.cs\" />\n    <Compile Include=\"Observables\\ObservableObject.cs\" />\n    <Compile Include=\"Observables\\ObservableProperty.cs\" />\n    <Compile Include=\"Observables\\ObservableProxy.cs\" />\n    <Compile Include=\"Observables\\PropertyEvent.cs\" />\n    <Compile Include=\"Pooling\\Pool.cs\" />\n    <Compile Include=\"Pooling\\ThreadSafePool.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Threading\\Internal\\IThreadingService.cs\" />\n    <Compile Include=\"Threading\\Internal\\UnityThreadService.cs\" />\n    <Compile Include=\"Threading\\RoutineTimer.cs\" />\n    <Compile Include=\"Threading\\ThreadingService.cs\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <PostBuildEvent>echo f | xcopy \"$(TargetDir)Foundation.Architecture.WebGL.dll\" \"$(SolutionDir)..\\Foundation.Unity\\Assets\\Plugins\\Foundation.Architecture.WebGL.dll\"  /D /Y</PostBuildEvent>\n  </PropertyGroup>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Foundation.Architecture/Architecture/Architecture.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Foundation.Architecture</RootNamespace>\n    <AssemblyName>Foundation.Architecture</AssemblyName>\n    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Data\\BufferExt.cs\" />\n    <Compile Include=\"Data\\BufferHelper.cs\" />\n    <Compile Include=\"Injector\\InjectAttribute.cs\" />\n    <Compile Include=\"Injector\\InjectService.cs\" />\n    <Compile Include=\"Logging\\LogService.cs\" />\n    <Compile Include=\"Logging\\LogModel.cs\" />\n    <Compile Include=\"Messaging\\ObjectEvents.cs\" />\n    <Compile Include=\"Messaging\\DomainEvents.cs\" />\n    <Compile Include=\"Observables\\IObservable.cs\" />\n    <Compile Include=\"Observables\\ListEvent.cs\" />\n    <Compile Include=\"Observables\\ObservableProperty.cs\" />\n    <Compile Include=\"Observables\\PropertyEvent.cs\" />\n    <Compile Include=\"Observables\\ObservableList.cs\" />\n    <Compile Include=\"Observables\\ObservableObject.cs\" />\n    <Compile Include=\"Observables\\ObservableProxy.cs\" />\n    <Compile Include=\"Pooling\\ThreadSafePool.cs\" />\n    <Compile Include=\"Pooling\\Pool.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Data\\JsonHelper.cs\" />\n    <Compile Include=\"Threading\\AsyncLock.cs\" />\n    <Compile Include=\"Threading\\AsyncSemaphore.cs\" />\n    <Compile Include=\"Threading\\Internal\\AsyncThreadService.cs\" />\n    <Compile Include=\"Threading\\Internal\\IThreadingService.cs\" />\n    <Compile Include=\"Threading\\RoutineTimer.cs\" />\n    <Compile Include=\"Threading\\ThreadingService.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <PropertyGroup>\n    <PostBuildEvent>\n    </PostBuildEvent>\n  </PropertyGroup>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Foundation.Architecture/Architecture/Architecture.csproj.DotSettings",
    "content": "﻿<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namespace:System;assembly=mscorlib\" xmlns:ss=\"urn:shemas-jetbrains-com:settings-storage-xaml\" xmlns:wpf=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=data/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=extensions/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=injector/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=logging/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=messaging/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=observables/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=threading/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=views/@EntryIndexedValue\">True</s:Boolean></wpf:ResourceDictionary>"
  },
  {
    "path": "Foundation.Architecture/Architecture/Data/BufferExt.cs",
    "content": "// Nicholas Ventimiglia 2016-09-05\n\nnamespace Foundation.Architecture\n{\n    public static class BufferExt\n    {\n        /// <summary>\n        /// For Human Readability\n        /// </summary>\n        /// <param name=\"bytes\"></param>\n        /// <returns></returns>\n        public static double ConvertBytesToMegabytes(long bytes)\n        {\n            return (bytes/1024f)/1024f;\n        }\n\n        /// <summary>\n        /// For Human Readability\n        /// </summary>\n        /// <param name=\"kilobytes\"></param>\n        /// <returns></returns>\n        public static double ConvertKilobytesToMegabytes(long kilobytes)\n        {\n            return kilobytes/1024f;\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Data/BufferHelper.cs",
    "content": "// Nicholas Ventimiglia 2016-09-05\n\nusing System;\nusing System.Text;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Unsafe I/O for byte arrays\n    /// </summary>\n    /// <remarks>\n    /// Here incase we need it. May not, depends on how we pool things.\n    /// </remarks>\n    public static class BufferHelper\n    {\n        #region Read\n\n        public static unsafe bool ReadBool(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(bool));\n\n            bool result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(bool*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe byte ReadByte(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(byte));\n\n            byte result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(byte*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe short ReadInt16(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(short));\n\n            short result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(short*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe ushort ReadUInt16(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(ushort));\n\n            ushort result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(ushort*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe int ReadInt32(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(int));\n\n            int result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(int*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe uint ReadUInt32(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(uint));\n\n            uint result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(uint*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe long ReadInt64(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(long));\n\n            long result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(long*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe ulong ReadUInt64(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(ulong));\n\n            ulong result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(ulong*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe double ReadDouble(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(double));\n\n            double result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(double*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe float ReadFloat(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(float));\n\n            float result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(float*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static unsafe char ReadChar(byte[] buffer, int index)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(char));\n\n            char result;\n            fixed (byte* ptr = buffer)\n            {\n                result = *(char*) (ptr + index);\n            }\n            return result;\n        }\n\n        public static string ReadString(byte[] buffer, int index)\n        {\n            //http://stackoverflow.com/questions/10773440/conversion-in-net-native-utf-8-managed-string\n            var length = ReadUInt16(buffer, index);\n            var result = Encoding.UTF8.GetString(buffer, index + sizeof(ushort), length);\n            return result;\n        }\n\n        #endregion\n\n        #region Write\n\n        public static void Write(byte[] buffer, int index, byte[] payload, int count)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + count);\n\n            Buffer.BlockCopy(payload, 0, buffer, index, count);\n        }\n\n        public static void Write(byte[] buffer, int index, byte b)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(byte));\n\n            buffer[index] = b;\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, bool value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(bool));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(bool*) (ptr + index) = value;\n            }\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, short value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(short));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(short*) (ptr + index) = value;\n            }\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, ushort value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(ushort));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(ushort*) (ptr + index) = value;\n            }\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, int value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(int));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(int*) (ptr + index) = value;\n            }\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, uint value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(uint));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(uint*) (ptr + index) = value;\n            }\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, double value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(double));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(double*) (ptr + index) = value;\n            }\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, long value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(long));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(long*) (ptr + index) = value;\n            }\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, ulong value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(ulong));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(ulong*) (ptr + index) = value;\n            }\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, float value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(float));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(float*) (ptr + index) = value;\n            }\n        }\n\n        public static unsafe void Write(byte[] buffer, int index, char value)\n        {\n            Ensures(buffer != null);\n            Ensures(buffer.Length >= index + sizeof(char));\n\n            fixed (byte* ptr = buffer)\n            {\n                *(char*) (ptr + index) = value;\n            }\n        }\n\n        public static void Write(byte[] buffer, int index, string value)\n        {\n            Ensures(buffer != null);\n            var payload = Encoding.UTF8.GetBytes(value);\n            Write(buffer, index, (ushort) payload.Length);\n            Write(buffer, index + sizeof(ushort), payload, payload.Length);\n        }\n\n        #endregion\n\n        #region Private\n\n        public static void Ensures(bool assertion)\n        {\n            if(!assertion)\n                throw new ArgumentException(\"BufferHelper : Method failed sanity.\");\n        }\n        #endregion\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Data/JsonHelper.cs",
    "content": "// Nicholas Ventimiglia 2016-09-05\n\nusing System;\n#if !UNITY\nusing Newtonsoft.Json;\n\n#endif\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Json serialization proxy. Platform agnostic.\n    /// </summary>\n    public class JsonHelper\n    {\n#if !UNITY\n        public static T FromJson<T>(string json)\n        {\n            return JsonConvert.DeserializeObject<T>(json);\n        }\n\n        public static object FromJson(string json, Type type)\n        {\n            return JsonConvert.DeserializeObject(json, type);\n        }\n\n        public static string ToJson(object instance)\n        {\n            return JsonConvert.SerializeObject(instance);\n        }\n#else\n        public static T FromJson<T>(string json)\n        {\n            return UnityEngine.JsonUtility.FromJson<T>(json);\n        }\n\n        public static object FromJson(string json, Type type)\n        {\n            return UnityEngine.JsonUtility.FromJson(json, type);\n        }\n\n        public static string ToJson(object instance)\n        {\n            return UnityEngine.JsonUtility.ToJson(instance);\n        }\n#endif\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Injector/InjectAttribute.cs",
    "content": "﻿// Nicholas Ventimiglia 2016-09-05\n\nusing System;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    ///     Identifies a service to be injected\n    /// </summary>\n    /// <remarks>\n    ///     Use Inject into\n    /// </remarks>\n    [AttributeUsage(AttributeTargets.Field)]\n    public class InjectAttribute : Attribute\n    {\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Injector/InjectService.cs",
    "content": "﻿// Nicholas Ventimiglia 2016-09-05\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    ///     Default Inject Service\n    /// </summary>\n    public class InjectService \n    {\n        // RegisterTransient\n\n        /// <summary>\n        ///     Registers a new service. Transient is a new instance per get.\n        /// </summary>\n        public static void RegisterTransient<TInterface, TInstance>() where TInstance : class, new()\n        {\n            Container.Add(typeof(TInterface), new InjectReference(DefaultFactory<TInstance>()));\n        }\n\n        /// <summary>\n        ///     Registers a new service. Transient is a new instance per get.\n        /// </summary>\n        public static void RegisterTransient<TInstance>() where TInstance : class, new()\n        {\n            Container.Add(typeof(TInstance), new InjectReference(DefaultFactory<TInstance>()));\n        }\n\n        /// <summary>\n        ///     Registers a new service. Transient is a new instance per get.\n        /// </summary>\n        public static void RegisterTransient<TInterface, TInstance>(Func<TInstance> factory) where TInstance : class\n        {\n            Container.Add(typeof(TInterface), new InjectReference(DefaultFactory(factory)));\n        }\n\n        /// <summary>\n        ///     Registers a new service. Transient is a new instance per get.\n        /// </summary>\n        public static void RegisterTransient<TInstance>(Func<TInstance> factory) where TInstance : class\n        {\n            Container.Add(typeof(TInstance), new InjectReference(DefaultFactory(factory)));\n        }\n\n        // RegisterSingleton\n\n        /// <summary>\n        ///     Registers a new service. Singleton is a one instance forever.\n        /// </summary>\n        public static void RegisterSingleton<TInterface, TInstance>() where TInstance : class, new()\n        {\n            Container.Add(typeof(TInterface), new InjectReference(DefaultFactory<TInstance>(), true));\n        }\n\n        /// <summary>\n        ///     Registers a new service. Singleton is a one instance forever.\n        /// </summary>\n        public static void RegisterSingleton<TInstance>() where TInstance : class, new()\n        {\n            Container.Add(typeof(TInstance), new InjectReference(DefaultFactory<TInstance>(), true));\n        }\n\n        /// <summary>\n        ///     Registers a new service. Singleton is a one instance forever.\n        /// </summary>\n        public static void RegisterSingleton<TInterface, TInstance>(Func<TInstance> factory) where TInstance : class\n        {\n            Container.Add(typeof(TInterface), new InjectReference(DefaultFactory(factory), true));\n        }\n\n        /// <summary>\n        ///     Registers a new service. Singleton is a one instance forever.\n        /// </summary>\n        public static void RegisterSingleton<TInstance>(Func<TInstance> factory) where TInstance : class\n        {\n            Container.Add(typeof(TInstance), new InjectReference(DefaultFactory(factory), true));\n        }\n\n        /// <summary>\n        ///     Registers a new service. Singleton is a one instance forever.\n        /// </summary>\n        public static void RegisterSingleton<TInterface, TInstance>(TInstance instance) where TInstance : class\n        {\n            Container.Add(typeof(TInterface), new InjectReference(instance, true));\n        }\n\n        /// <summary>\n        ///     Registers a new service. Singleton is a one instance forever.\n        /// </summary>\n        public static void RegisterSingleton<TInstance>(TInstance instance) where TInstance : class\n        {\n            Container.Add(typeof(TInstance), new InjectReference(instance, true));\n        }\n\n        // Unregister\n\n        /// <summary>\n        ///     Removes a reference from the container\n        /// </summary>\n        public static bool Unregister<TInterface>() where TInterface : class, new()\n        {\n            return Container.Remove(typeof(TInterface));\n        }\n\n        /// <summary>\n        ///     Clears the container\n        /// </summary>\n        public static void UnregisterAll()\n        {\n            Container.Clear();\n        }\n\n        // Get\n\n        /// <summary>\n        ///     Get an instance from the container\n        /// </summary>\n        /// <typeparam name=\"TInterface\"></typeparam>\n        /// <returns></returns>\n        public static TInterface Get<TInterface>() where TInterface : class\n        {\n            return Get(typeof(TInterface)) as TInterface;\n        }\n\n        /// <summary>\n        ///     Get an instance from the container\n        /// </summary>\n        /// <returns></returns>\n        public static object Get(Type interfaceType)\n        {\n            if (!Container.ContainsKey(interfaceType))\n                return null;\n\n            var refer = Container[interfaceType];\n            if (refer.Instance != null)\n                return refer.Instance;\n\n            if (refer.Factory != null)\n            {\n                var inst = refer.Factory();\n\n                if (refer.IsStatic)\n                {\n                    refer.Instance = inst;\n                    refer.Factory = null;\n                }\n                return inst;\n            }\n\n            return null;\n        }\n\n        // Print\n\n        /// <summary>\n        ///     Prints the contents of the container\n        /// </summary>\n        public static IEnumerable<string> Print()\n        {\n            foreach (var reference in Container)\n                if (reference.Value.Instance != null)\n                    yield return string.Format(\"{0} with {1} instance\", reference.Key, reference.Value.Instance);\n                else if (reference.Value.Factory != null)\n                    yield return string.Format(\"{0} with factory\", reference.Key);\n        }\n\n        // Reflection\n\n        /// <summary>\n        ///     Injects dependencies into the object using reflection and the Inject annotation\n        /// </summary>\n        /// <remarks>\n        ///     Reflection, Expensive\n        /// </remarks>\n        /// <param name=\"instance\">the instance to find dependencies for</param>\n        public static void InjectInto(object instance)\n        {\n#if CORE\n            var allFields = instance\n                .GetType()\n                .GetTypeInfo()\n                .GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)\n                .Where(o => o.GetCustomAttributes(typeof(InjectAttribute),true).Count() > 0)\n                .ToArray();\n#else\n            var allFields = instance\n                .GetType()\n                .GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)\n                .Where(o => o.GetCustomAttributes(typeof(InjectAttribute), true).Length > 0)\n                .ToArray();\n#endif\n\n            FieldInfo field = null;\n\n            for (var i = 0; i < allFields.Length; i++)\n                try\n                {\n                    field = allFields[i];\n\n                    var type = field.FieldType;\n\n                    field.SetValue(instance, Get(type));\n                }\n                catch (Exception ex)\n                {\n                    if (field != null)\n                        throw new Exception(\"Failed to inject into \" + field.Name + \"(\" + field.FieldType + \")\", ex);\n                    else\n                        throw new Exception(\"Failed to inject into unknown field\", ex);\n                }\n        }\n\n        #region Private\n\n        private class InjectReference\n        {\n            public Func<object> Factory;\n            public object Instance;\n            public readonly bool IsStatic;\n\n            public InjectReference(object instance, bool isStatic = false)\n            {\n                Instance = instance;\n                IsStatic = isStatic;\n            }\n\n            public InjectReference(Func<object> factory, bool isStatic = false)\n            {\n                Factory = factory;\n                IsStatic = isStatic;\n            }\n        }\n\n        private static readonly Dictionary<Type, InjectReference> Container = new Dictionary<Type, InjectReference>();\n\n        private static Func<object> DefaultFactory<TInstance>() where TInstance : class, new()\n        {\n            return () =>\n            {\n                var instance = new TInstance();\n                InjectInto(instance);\n                return instance;\n            };\n        }\n\n        private static Func<object> DefaultFactory<TInstance>(Func<TInstance> factory) where TInstance : class\n        {\n            return () =>\n            {\n                var instance = factory();\n                InjectInto(instance);\n                return instance;\n            };\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Logging/LogModel.cs",
    "content": "// Nicholas Ventimiglia 2016-09-07\n\nusing System;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Class of log event\n    /// </summary>\n    public enum LogLevel\n    {\n        Info,\n        Warning,\n        Error\n    }\n\n    /// <summary>\n    /// Log information\n    /// </summary>\n    public struct LogModel\n    {\n        public LogLevel Level;\n        public string Message;\n        public Exception Exception;\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Logging/LogService.Unity3d.cs",
    "content": "﻿// Nicholas Ventimiglia 2016-09-05\n#if UNITY\nusing System;\nusing UnityEngine;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Cross platform logging interface\n    /// </summary>\n    public class LogService\n    {\n        /// <summary>\n        ///  extensibility point\n        /// </summary>\n        public static event Action<LogModel> OnLog = delegate { };\n\n        public static void Log(LogModel model)\n        {\n            switch (model.Level)\n            {\n                case LogLevel.Info:\n                    Debug.Log(model.Message);\n                    break;\n                case LogLevel.Error:\n                    Debug.LogError(model.Message);\n                    if (model.Exception != null)\n                        Debug.LogException(model.Exception);\n                    break;\n                case LogLevel.Warning:\n                    Debug.LogWarning(model.Message);\n                    break;\n            }\n\n            OnLog(model);\n        }\n\n        public static void Log(string message)\n        {\n            Log(new LogModel\n            {\n                Message = message,\n                Level = LogLevel.Info\n            });\n        }\n\n        public static void LogWarning(string message)\n        {\n            Log(new LogModel\n            {\n                Message = message,\n                Level = LogLevel.Warning\n            });\n        }\n\n        public static void LogError(string message)\n        {\n            Log(new LogModel\n            {\n                Message = message,\n                Level = LogLevel.Error\n            });\n        }\n\n        public static void LogException(Exception ex)\n        {\n            Log(new LogModel\n            {\n                Exception = ex,\n                Message = ex.Message,\n                Level = LogLevel.Error\n            });\n        }\n\n        public static void LogException(string message, Exception ex)\n        {\n            Log(new LogModel\n            {\n                Exception = ex,\n                Message = message,\n                Level = LogLevel.Error\n            });\n        }\n    }\n}\n#endif"
  },
  {
    "path": "Foundation.Architecture/Architecture/Logging/LogService.cs",
    "content": "﻿// Nicholas Ventimiglia 2016-09-05\n\nusing System;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Cross platform logging interface\n    /// </summary>\n    public static class LogService\n    {\n        /// <summary>\n        ///  extensibility point\n        /// </summary>\n        public static event Action<LogModel> OnLog = delegate { };\n\n        public static void Log(LogModel model)\n        {\n            switch (model.Level)\n            {\n                case LogLevel.Error:\n                    Console.ForegroundColor = ConsoleColor.Red;\n                    break;\n                case LogLevel.Warning:\n                    Console.ForegroundColor = ConsoleColor.Yellow;\n                    break;\n            }\n\n            OnLog(model);\n\n            Console.WriteLine(model.Message + (model.Exception == null ? null : model.Exception.Message));\n            Console.ResetColor();\n        }\n\n        public static void Log(string message)\n        {\n            Log(new LogModel\n            {\n                Message = message,\n                Level = LogLevel.Info\n            });\n        }\n\n        public static void LogWarning(string message)\n        {\n            Log(new LogModel\n            {\n                Message = message,\n                Level = LogLevel.Warning\n            });\n        }\n\n        public static void LogError(string message)\n        {\n            Log(new LogModel\n            {\n                Message = message,\n                Level = LogLevel.Error\n            });\n        }\n\n        public static void LogException(Exception ex)\n        {\n            Log(new LogModel\n            {\n                Exception = ex,\n                Message = ex.Message,\n                Level = LogLevel.Error\n            });\n        }\n\n        public static void LogException(string message, Exception ex)\n        {\n            Log(new LogModel\n            {\n                Exception = ex,\n                Message = message,\n                Level = LogLevel.Error\n            });\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Messaging/DomainEvents.cs",
    "content": "// Nicholas Ventimiglia 2016-09-05\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Generic Message broadcaster\n    /// </summary>\n    /// <remarks>\n    /// Global Message Broker. Routed by Type\n    /// </remarks>\n    /// <typeparam name=\"TMessage\">the type of message being raised</typeparam>\n    public static class DomainEvents<TMessage> where TMessage : class\n    {\n        /// <summary>\n        /// Handler Signature\n        /// </summary>\n        /// <param name=\"message\"></param>\n        public delegate void MessageDelegate(TMessage message);\n\n        /// <summary>\n        /// Event\n        /// </summary>\n        public static event MessageDelegate OnMessage = delegate { };\n\n        /// <summary>\n        /// sends a message to subscriptions\n        /// </summary>\n        public static void Publish(TMessage message)\n        {\n            OnMessage(message);\n        }\n\n        /// <summary>\n        /// sends a message to subscriptions\n        /// </summary>\n        public static void Publish(object message)\n        {\n            OnMessage(message as TMessage);\n        }\n\n        /// <summary>\n        /// Adds a route\n        /// </summary>\n        public static void Subscribe(MessageDelegate handler)\n        {\n            OnMessage += handler;\n        }\n\n        /// <summary>\n        /// removes a route\n        /// </summary>\n        public static void Unsubscribe(MessageDelegate handler)\n        {\n            OnMessage -= handler;\n        }\n    }\n\n    /// <summary>\n    /// NonGeneric Message broadcaster\n    /// </summary>\n    public static class DomainEvents\n    {\n        static Dictionary<Type, Delegate> _cache = new Dictionary<Type, Delegate>();\n\n        /// <summary>\n        /// Notifies listeners of a new message\n        /// </summary>\n        public static void Publish(object message, Type messageType)\n        {\n            if (!_cache.ContainsKey(messageType))\n            {\n                var info = typeof(DomainEvents<>).MakeGenericType(messageType);\n                var pType = typeof(Action<object>);\n#if CORE\n                var func = info.GetMethod(\"Publish\").CreateDelegate(pType, null);\n#else\n                var func = Delegate.CreateDelegate(pType, info, \"Publish\");\n#endif\n                _cache.Add(messageType, func);\n            }\n\n            (_cache[messageType] as Action<object>).Invoke(message);\n        }\n\n        /// <summary>\n        /// Notifies listeners of a new message\n        /// </summary>\n        public static void Publish<TMessage>(TMessage message) where TMessage : class\n        {\n            DomainEvents<TMessage>.Publish(message);\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Messaging/ObjectEvents.cs",
    "content": "// Nicholas Ventimiglia 2016-09-06\n\nusing System;\nusing System.Collections.Generic;\nusing System.Reflection;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Generic Message broadcaster with support for filtering based on specific handlers\n    /// </summary>\n    /// <remarks>\n    /// E.G. Send Message to Game Object\n    /// </remarks>\n    /// <typeparam name=\"TRoute\">The type of route key, generally string or game object</typeparam>\n    /// <typeparam name=\"TMessage\">the type of message being raised</typeparam>\n    public static class ObjectEvents<TRoute, TMessage> where TMessage : class where TRoute : class\n    {\n        /// <summary>\n        /// Handler Signature\n        /// </summary>\n        /// <param name=\"message\"></param>\n        public delegate void MessageDelegate(TMessage message);\n\n        /// <summary>\n        /// All Listeners / Observers\n        /// </summary>\n        static readonly Dictionary<TRoute, MessageDelegate> _listeners = new Dictionary<TRoute, MessageDelegate>();\n\n        /// <summary>\n        /// sends a message to subscriptions\n        /// </summary>\n        public static void Publish(TRoute route, TMessage message)\n        {\n            if (_listeners.ContainsKey(route))\n            {\n                _listeners[route](message);\n            }\n        }\n\n        /// <summary>\n        /// sends a message to subscriptions\n        /// </summary>\n        public static void Publish(object route, object message)\n        {\n            if (_listeners.ContainsKey(route as TRoute))\n            {\n                _listeners[route as TRoute](message as TMessage);\n            }\n        }\n\n        /// <summary>\n        /// Adds a route\n        /// </summary>\n        public static void Subscribe(TRoute route, MessageDelegate handler)\n        {\n            if (!_listeners.ContainsKey(route))\n            {\n                _listeners.Add(route, delegate { });\n            }\n            _listeners[route] = Delegate.Combine(_listeners[route], handler) as MessageDelegate;\n        }\n\n        /// <summary>\n        /// removes a handler\n        /// </summary>\n        public static void Unsubscribe(TRoute route, MessageDelegate handler)\n        {\n            if (_listeners.ContainsKey(route))\n            {\n                _listeners[route] = Delegate.Remove(_listeners[route], handler) as MessageDelegate;\n            }\n        }\n\n        /// <summary>\n        /// removes all handlers\n        /// </summary>\n        public static void Unsubscribe(TRoute route)\n        {\n            if (_listeners.ContainsKey(route))\n            {\n                _listeners.Remove(route);\n            }\n        }\n\n\n        /// <summary>\n        /// removes all handlers\n        /// </summary>\n        public static void Clear()\n        {\n            _listeners.Clear();\n        }\n    }\n\n    /// <summary>\n    /// NonGeneric Message broadcaster\n    /// </summary>\n    public static class ObjectEvents\n    {\n        static Dictionary<Type, Dictionary<Type, Delegate>> _cache = new Dictionary<Type, Dictionary<Type, Delegate>>();\n\n        /// <summary>\n        /// Notifies listeners of a new message\n        /// </summary>\n        public static void Publish(object route, object message, Type routeType, Type messageType)\n        {\n            if (!_cache.ContainsKey(routeType))\n            {\n                _cache.Add(routeType, new Dictionary<Type, Delegate>());\n            }\n\n            var inner = _cache[routeType];\n\n            if (!inner.ContainsKey(messageType))\n            {\n                var info = typeof(ObjectEvents<,>).MakeGenericType(routeType, messageType);\n                var pType = typeof(Action<object, object>);\n\n#if CORE\n                var func = info.GetMethod(\"Publish\").CreateDelegate(pType, null);\n#else\n                var func = Delegate.CreateDelegate(pType, info, \"Publish\");\n#endif\n                inner.Add(messageType, func);\n            }\n\n            (inner[messageType] as Action<object, object>).Invoke(route, message);\n        }\n\n        /// <summary>\n        /// Notifies listeners of a new message\n        /// </summary>\n        public static void Publish<TRoute, TMessage>(TRoute route, TMessage message) where TMessage : class\n            where TRoute : class\n        {\n            ObjectEvents<TRoute, TMessage>.Publish(route, message);\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Observables/IObservable.cs",
    "content": "// Nicholas Ventimiglia 2016-09-05\n\nusing System;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Data Source. Message Publisher Source\n    /// </summary>\n    /// <typeparam name=\"TModel\"></typeparam>\n    public interface IObservable<TModel> : IDisposable\n    {\n        /// <summary>\n        /// Old School Change Delegate\n        /// </summary>\n        event Action<TModel> OnPublish; \n        \n        /// <summary>\n        /// Will Publish value\n        /// </summary>\n        /// <param name=\"model\"></param>\n        void Publish(TModel model);\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Observables/ListEvent.cs",
    "content": "using System.Collections.Generic;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// List event type\n    /// </summary>\n    public enum ListChangedEventType\n    {\n        /// <summary>\n        /// List.Add(index, value);\n        /// </summary>\n        Add,\n        /// <summary>\n        /// List.Remove(index, value);\n        /// </summary>\n        Remove,\n        /// <summary>\n        /// List[i].RaiseChange();\n        /// </summary>\n        Refresh,\n        /// <summary>\n        /// List.Add(index, value)\n        /// </summary>\n        Insert,\n        /// <summary>\n        /// List[i] = value;\n        /// </summary>\n        Replace,\n        /// <summary>\n        /// List.Clear();\n        /// </summary>\n        Clear\n    }\n\n    /// <summary>\n    /// List Changed Args\n    /// </summary>\n    public struct ListEvent\n    {\n        public ListChangedEventType Event;\n\n        public IEnumerable<object> Items;\n\n        /// <summary>\n        /// Used for replace and Insert\n        /// </summary>\n        public int Index;\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Observables/ObservableBehaviour.cs",
    "content": "#if UNITY\n// Nicholas Ventimiglia 2016-09-05\n\nusing System;\nusing UnityEngine;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Implements IPropertyChanged for MonoBehaviour\n    /// </summary>\n    public class ObservableBehaviour : MonoBehaviour, IObservable<PropertyEvent>\n    {\n        /// <summary>\n        /// Listeners\n        /// </summary>\n        public event Action<PropertyEvent> OnPublish = delegate { };\n\n        /// <summary>\n        /// Raise Change\n        /// </summary>\n        /// <param name=\"model\"></param>\n        public void Publish(PropertyEvent model)\n        {\n            OnPublish(model);\n        }\n\n        /// <summary>\n        /// Raise Change on a single property\n        /// </summary>\n        public void RaiseChange<T>(string memberName, T value)\n        {\n            OnPublish(new PropertyEvent { Sender = this, Name = memberName, Value = value });\n        }\n\n        /// <summary>\n        /// Raise Change All\n        /// </summary>\n        public void RaiseChange()\n        {\n            OnPublish(new PropertyEvent { Sender = this });\n        }\n\n        public void Dispose()\n        {\n            OnPublish = delegate { };\n        }\n    }\n}\n#endif"
  },
  {
    "path": "Foundation.Architecture/Architecture/Observables/ObservableList.cs",
    "content": "// Nicholas Ventimiglia 2016-09-05\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\n#if UNITY\nusing UnityEngine;\n#endif\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// For controllers with an observable model. \n    /// </summary>\n    /// <typeparam name=\"T\"></typeparam>\n    // WEBGL [Serializable]\n    public class ObservableList<T> : IEnumerable<T>, IObservable<ListEvent> where T : class\n    {\n        #region IObservable\n        public event Action<ListEvent> OnPublish = delegate { };\n\n        public void Subscribe(Action<ListEvent> handler)\n        {\n            OnPublish += handler;\n            handler(new ListEvent\n            {\n                Event = ListChangedEventType.Add,\n#if UNITY\n                Items = InternalList.ToArray(),\n#else\n                Items = InternalList,\n#endif\n            });\n        }\n\n        public void Unsubscribe(Action<ListEvent> handler)\n        {\n            OnPublish -= handler;\n        }\n\n        public void Publish(ListEvent model)\n        {\n            OnPublish(model);\n        }\n\n        public void Publish(ListChangedEventType e, object item)\n        {\n            OnPublish(new ListEvent\n            {\n                Event = e,\n                Items = new []{ item },\n            });\n        }\n\n        public void Publish(ListChangedEventType e, IEnumerable<T> items)\n        {\n            OnPublish(new ListEvent\n            {\n                Event = e,\n                Items = (object[])items,\n            });\n        }\n\n\n        public void Dispose()\n        {\n            if (CanRefresh)\n            {\n                for (int i = 0; i < InternalList.Count(); i++)\n                {\n                    UnbindRefresh(InternalList.ElementAt(i) as IObservable<PropertyEvent>);\n                }\n            }\n\n            InternalList.Clear();\n            OnPublish = delegate { };\n        }\n        #endregion\n\n        #region  IEnumerable\n\n#if UNITY\n        [SerializeField]\n#endif\n        public List<T> InternalList = new List<T>();\n\n        public IComparer<T> Comperer;\n\n        public ObservableList()\n        {\n        }\n\n        public ObservableList(IEnumerable<T> set)\n        {\n            InternalList = new List<T>(set);\n        }\n\n        public virtual void Add(T model)\n        {\n            if (CanRefresh)\n            {\n                BindRefresh(model as IObservable<PropertyEvent>);\n            }\n\n            InternalList.Add(model);\n            if (Comperer != null)\n                InternalList.Sort(Comperer);\n            Publish(ListChangedEventType.Add, model);\n        }\n\n        public virtual void AddRange(IEnumerable<T> models)\n        {\n            if (CanRefresh)\n            {\n                for (int i = 0; i < models.Count(); i++)\n                {\n                    BindRefresh(models.ElementAt(i) as IObservable<PropertyEvent>);\n                }\n            }\n\n            InternalList.AddRange(models);\n            if (Comperer != null)\n                InternalList.Sort(Comperer);\n            Publish(ListChangedEventType.Add, models);\n        }\n\n        public virtual void Insert(int index, T model)\n        {\n            if (CanRefresh)\n            {\n                UnbindRefresh(model as IObservable<PropertyEvent>);\n            }\n\n            InternalList.Insert(index, model);\n\n            Publish(new ListEvent\n            {\n                Event = ListChangedEventType.Insert,\n                Index = index,\n                Items = new[] { model }\n            });\n        }\n\n        public virtual void Remove(T model)\n        {\n            if (CanRefresh)\n            {\n                UnbindRefresh(model as IObservable<PropertyEvent>);\n            }\n\n            InternalList.Remove(model);\n            Publish(ListChangedEventType.Remove, model);\n        }\n\n        public virtual void RemoveRange(IEnumerable<T> models)\n        {\n            if (CanRefresh)\n            {\n                for (int i = 0; i < models.Count(); i++)\n                {\n                    UnbindRefresh(models.ElementAt(i) as IObservable<PropertyEvent>);\n                }\n            }\n\n            for (int i = 0; i < models.Count(); i++)\n            {\n                InternalList.Remove(models.ElementAt(i));\n            }\n\n            Publish(ListChangedEventType.Remove, models);\n        }\n\n        public virtual void Replace(T model)\n        {\n            \n            Remove(model);\n            Add(model);\n\n        }\n\n        public virtual void AddOrReplace(T model)\n        {\n            if (InternalList.Contains(model))\n            {\n                Replace(model);\n            }\n            else\n            {\n                Add(model);\n            }\n        }\n\n        public virtual int IndexOf(T model)\n        {\n            return InternalList.IndexOf(model);\n        }\n\n        public void Clear()\n        {\n            InternalList.Clear();\n            Publish(ListChangedEventType.Clear, null);\n        }\n\n        public void Sort()\n        {\n            InternalList.Sort();\n        }\n\n        public bool Contains(T model)\n        {\n            return InternalList.Contains(model);\n        }\n\n        public int Count\n        {\n            get { return InternalList.Count; }\n        }\n\n        public T this[int index]\n        {\n            get { return InternalList[index]; }\n            set\n            {\n                InternalList[index] = value;\n                Publish(new ListEvent\n                {\n                    Event = ListChangedEventType.Replace,\n                    Index = index,\n                    Items = new []{value}\n                });\n            }\n        }\n\n        public IEnumerator<T> GetEnumerator()\n        {\n            return InternalList.GetEnumerator();\n        }\n\n        public IEnumerable<T> GetEnumerable()\n        {\n            return InternalList;\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        #endregion\n\n        #region Refresh Binding\n\n        // Subscribes to the item in the collection.\n        // Raises a 'item refreshed' when that item says to.\n\n        bool CanRefresh\n        {\n            get { return typeof(T).IsAssignableFrom(typeof(IObservable<PropertyEvent>)); }\n        }\n\n        void BindRefresh(IObservable<PropertyEvent> model)\n        {\n            model.OnPublish += OnRefresh;\n        }\n        void UnbindRefresh(IObservable<PropertyEvent> model)\n        {\n            model.OnPublish -= OnRefresh;\n        }\n\n        void OnRefresh(PropertyEvent args)\n        {\n            if (!args.IsRefreshAll)\n                return;\n\n            Publish(ListChangedEventType.Refresh, args.Sender);\n        }\n\n        #endregion\n\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Observables/ObservableObject.cs",
    "content": "// Nicholas Ventimiglia 2016-09-05\n\nusing System;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Implements IPropertyChanged for Non-Monobehaviours\n    /// </summary>\n    public class ObservableObject : IObservable<PropertyEvent>\n    {\n        /// <summary>\n        /// Listeners\n        /// </summary>\n        public event Action<PropertyEvent> OnPublish = delegate { };\n        \n        /// <summary>\n        /// Raise Change\n        /// </summary>\n        /// <param name=\"model\"></param>\n        public void Publish(PropertyEvent model)\n        {\n            OnPublish(model);\n        }\n\n        /// <summary>\n        /// Raise Change on a single property\n        /// </summary>\n        public void RaiseChange<T>(string memberName, T value)\n        {\n            OnPublish(new PropertyEvent { Sender = this, Name = memberName, Value = value });\n        }\n\n        /// <summary>\n        /// Raise Change All\n        /// </summary>\n        public void RaiseChange()\n        {\n            OnPublish(new PropertyEvent { Sender = this });\n        }\n\n        public void Dispose()\n        {\n            OnPublish = delegate { };\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Observables/ObservableProperty.cs",
    "content": "// Nicholas Ventimiglia 2016-09-05\nusing System;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Wrapps a property with on change internally\n    /// </summary>\n    /// <typeparam name=\"T\"></typeparam>\n    public class ObservableProperty<T> : IEquatable<T>, IObservable<T>\n    {\n        private event Action<T> _onPublish = delegate { };\n        public event Action<T> OnPublish\n        {\n            add\n            {\n                _onPublish += value;\n                value(Value);\n            }\n            remove\n            {\n                _onPublish -= value;\n            }\n        }\n\n        private IObservable<PropertyEvent> _parent;\n        private string _memberName;\n\n        private T _value;\n        public T Value\n        {\n            get\n            {\n                return _value;\n            }\n            set\n            {\n                Set(value);\n            }\n        }\n\n        /// <summary>\n        /// CTOR\n        /// </summary>\n        public ObservableProperty() { }\n\n        /// <summary>\n        /// For Chaining\n        /// </summary>\n        public ObservableProperty(string memberName, IObservable<PropertyEvent> parent)\n        {\n            Bind(memberName, parent);\n        }\n\n        /// <summary>\n        /// Set value without notifing subscribers\n        /// </summary>\n        /// <param name=\"value\"></param>\n        public void SetValueSilently(T value)\n        {\n            _value = value;\n        }\n\n        /// <summary>\n        /// Set value\n        /// </summary>\n        /// <param name=\"value\"></param>\n        public void Set(T value)\n        {\n            _value = value;\n            _onPublish(value);\n\n            if (_parent != null)\n            {\n                _parent.Publish(new PropertyEvent\n                {\n                    Sender = _parent,\n                    Name = _memberName,\n                    Value = _value,\n                });\n            }\n        }\n\n        /// <summary>\n        /// Get value\n        /// </summary>\n        /// <returns></returns>\n        public T Get()\n        {\n            return _value;\n        }\n\n        /// <summary>\n        /// Notify Listeners\n        /// </summary>\n        /// <param name=\"model\"></param>\n        public void Publish(T model)\n        {\n            Value = model;\n        }\n\n        /// <summary>\n        /// For Chaining MVVM\n        /// </summary>\n        public void Bind(string memberName, IObservable<PropertyEvent> parent)\n        {\n            _parent = parent;\n            _memberName = memberName;\n        }\n\n        /// <summary>\n        /// Clears it\n        /// </summary>\n        public void Dispose()\n        {\n            _parent = null;\n            _memberName = null;\n            _value = default(T);\n            _onPublish = delegate { };\n        }\n\n        public bool Equals(T other)\n        {\n            return _value.Equals(other);\n        }\n\n        public static implicit operator T(ObservableProperty<T> observable)\n        {\n            return observable.Value;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Foundation.Architecture/Architecture/Observables/ObservableProxy.cs",
    "content": "// Nicholas Ventimiglia 2016-09-05\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Reflection Proxy. Wraps around an object and caches all reflection calls for a ~300% improvement.\n    /// </summary>\n    public class ObservableProxy : IObservable<PropertyEvent>\n    {\n        #region Api\n\n        public object Instance { get; private set; }\n        public Type InstanceType { get; private set; }\n\n        Dictionary<string, List<Action<PropertyEvent>>> Handlers = new Dictionary<string, List<Action<PropertyEvent>>>();\n      \n        /// <summary>\n        /// Call a member\n        /// </summary>\n        public T Get<T>(string memberName)\n        {\n            try\n            {\n                DelegateInfo temp;\n                if (_cacheGet.TryGetValue(memberName, out temp))\n                {\n                    var val = (temp.Delegate).DynamicInvoke();\n                    return (T)Convert(val, typeof(T));\n                }\n                LogService.LogWarning(\"Unknown member \" + memberName + \" of \" + typeof(T).Name + \" on \" + InstanceType.Name);\n                return default(T);\n            }\n            catch (Exception ex)\n            {\n                LogService.LogError(\"Failed to call member \" + memberName + \" of \" + typeof(T).Name + \" with void\");\n                LogService.LogException(ex);\n\n                return default(T);\n            }\n        }\n\n        /// <summary>\n        /// Call a member\n        /// </summary>\n        public void Post(string memberName, object value = null)\n        {\n            try\n            {\n                DelegateInfo temp;\n                if (_cacheSet.TryGetValue(memberName, out temp))\n                {\n                    if (value == null)\n                    {\n                        (temp.Delegate as Action).Invoke();\n                    }\n                    else\n                    {\n                        (temp.Delegate).DynamicInvoke(Convert(value, temp.Type));\n                    }\n                }\n                else\n                {\n                    LogService.LogWarning(\"Unknown member \" + memberName + \" on \" + InstanceType.Name);\n                }\n            }\n            catch (Exception ex)\n            {\n                LogService.LogError(\"Failed to call member \" + memberName + \" on \" + InstanceType.Name);\n                LogService.LogException(ex);\n            }\n        }\n\n        /// <summary>\n        /// Member specific listener\n        /// </summary>\n        public void Subscribe(string memberName, Action<PropertyEvent> handler)\n        {\n            List<Action<PropertyEvent>> events;\n\n            if (!Handlers.TryGetValue(memberName, out events))\n            {\n                events = new List<Action<PropertyEvent>>();\n                Handlers.Add(memberName, events);\n            }\n\n            events.Add(handler);\n        }\n\n        /// <summary>\n        /// Member specific listener\n        /// </summary>\n        public void Unsubscribe(string memberName, Action<PropertyEvent> handler)\n        {\n            List<Action<PropertyEvent>> events;\n\n            if (Handlers.TryGetValue(memberName, out events))\n            {\n                events = new List<Action<PropertyEvent>>();\n                events.Remove(handler);\n            }\n        }\n\n        public ObservableProxy(object instance)\n        {\n            Instance = instance;\n\n            if (Instance is IObservable<PropertyEvent>)\n            {\n                ((IObservable<PropertyEvent>)Instance).OnPublish += Publish;\n            }\n\n            BuildCache();\n        }\n\n        public void Dispose()\n        {\n            if (Instance is IObservable<PropertyEvent>)\n            {\n                ((IObservable<PropertyEvent>)Instance).OnPublish -= Publish;\n            }\n\n            Instance = null;\n\n            Handlers.Clear();\n            _cacheGet.Clear();\n            _cacheSet.Clear();\n        }\n\n        object Convert(object value, Type type)\n        {\n            if (type == null || value == null || value.GetType() == type)\n                return value;\n\n            return System.Convert.ChangeType(value, type);\n        }\n        #endregion\n\n        #region IObservable\n\n        public event Action<PropertyEvent> OnPublish = delegate { };\n\n        public void Publish(PropertyEvent model)\n        {\n            OnPublish(model);\n        }\n        \n        #endregion\n\n        #region Caching\n\n        struct DelegateInfo\n        {\n            public Delegate Delegate;\n            public Type Type;\n\n            public DelegateInfo(Delegate d, Type t)\n            {\n                Delegate = d;\n                Type = t;\n            }\n        }\n\n        private Dictionary<string, DelegateInfo> _cacheGet = new Dictionary<string, DelegateInfo>();\n        private Dictionary<string, DelegateInfo> _cacheSet = new Dictionary<string, DelegateInfo>();\n\n        void BuildCache()\n        {\n            InstanceType = Instance.GetType();\n\n            //Methods\n            CacheMethods();\n            CacheProperties();\n        }\n\n        void CacheMethods()\n        {\n            var methods =\n                InstanceType.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance)\n                    .Where(m => !m.IsSpecialName);\n\n            foreach (var member in methods)\n            {\n                if (_cacheSet.ContainsKey(member.Name))\n                {\n                    LogService.LogWarning(\"Duplicate member \" + member.Name + \" on \" + InstanceType.Name);\n\n                    continue;\n                }\n\n\n                var ptype = member.GetParameters();\n\n                // Note : Would be nice to invoke coroutines here, NV\n\n                if (ptype.Length == 0)\n                {\n                    var del = CreateDelegate(typeof(Action), Instance, member);\n                    _cacheSet.Add(member.Name, new DelegateInfo(del, null));\n                }\n                else\n                {\n                    var type = typeof(Action<>).MakeGenericType(ptype[0].ParameterType);\n                    var del = CreateDelegate(type, Instance, member);\n                    _cacheSet.Add(member.Name, new DelegateInfo(del, ptype[0].ParameterType));\n                }\n            }\n        }\n\n        void CacheProperties()\n        {\n            var members = InstanceType.GetProperties(BindingFlags.Public | BindingFlags.Instance);\n\n            foreach (var member in members)\n            {\n                if (_cacheSet.ContainsKey(member.Name) || _cacheSet.ContainsKey(member.Name))\n                {\n                    LogService.LogWarning(\"Duplicate member \" + member.Name + \" on \" + InstanceType.Name);\n                    continue;\n                }\n\n                var gtype = typeof(Func<>).MakeGenericType(member.PropertyType);\n                var get = CreateDelegate(gtype, Instance, member.GetGetMethod());\n                _cacheGet.Add(member.Name, new DelegateInfo(get, member.PropertyType));\n\n                var stype = typeof(Action<>).MakeGenericType(member.PropertyType);\n                var set = CreateDelegate(stype, Instance, member.GetSetMethod());\n                _cacheSet.Add(member.Name, new DelegateInfo(set, member.PropertyType));\n            }\n        }\n\n        Delegate CreateDelegate(Type type, Object target, MethodInfo method)\n        {\n#if CORE\n            return method.CreateDelegate(type, target);\n#else\n            return Delegate.CreateDelegate(type, target, method);\n#endif\n        }\n        #endregion\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Observables/PropertyEvent.cs",
    "content": "namespace Foundation.Architecture\n{\n    /// <summary>\n    /// MVVM Event Arguments\n    /// </summary>\n    public struct PropertyEvent\n    {\n        /// <summary>\n        /// The Model\n        /// </summary>\n        public object Sender;\n\n        /// <summary>\n        /// Member name (property / method)\n        /// </summary>\n        public string Name;\n\n        /// <summary>\n        /// New Value\n        /// </summary>\n        public object Value;\n\n        /// <summary>\n        /// Refresh root\n        /// </summary>\n        public bool IsRefreshAll\n        {\n            get { return string.IsNullOrEmpty(Name); }\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Observables/ReflectionExt.cs",
    "content": "using System;\nusing System.Reflection;\n\nnamespace Foundation.Architecture\n{\n    public static class ReflectionExt\n    {\n        public static FieldInfo[] GetFields(this Type type, BindingFlags bindingAttr)\n        {\n            return type.GetTypeInfo().GetFields(bindingAttr);\n        }\n\n        public static PropertyInfo[] GetProperties(this Type type, BindingFlags bindingAttr)\n        {\n            return type.GetTypeInfo().GetProperties(bindingAttr);\n        }\n\n        public static MethodInfo[] GetMethods(this Type type, BindingFlags bindingAttr)\n        {\n            return type.GetTypeInfo().GetMethods(bindingAttr);\n        }\n\n        public static Type[] GetGenericArguments(this Type type)\n        {\n            return type.GetTypeInfo().GetGenericArguments();\n        }\n        public static EventInfo GetEvent(this Type type, string name)\n        {\n            return type.GetTypeInfo().GetEvent(name);\n        }\n        public static MethodInfo GetMethod(this Type type, string name)\n        {\n            return type.GetTypeInfo().GetMethod(name);\n        }\n        public static MethodInfo CreateDelegate(this Type type, string name)\n        {\n            return type.GetTypeInfo().GetMethod(name);\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Pooling/Pool.cs",
    "content": "﻿// Nicholas Ventimiglia 2016-09-05\n\nusing System.Collections.Generic;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// A very simple object pool\n    /// </summary>\n    /// <remarks>\n    /// Not thread safe\n    /// </remarks>\n    /// <typeparam name=\"T\"></typeparam>\n    public class Pool<T> where T : new()\n    {\n        /// <summary>\n        /// Global Singleton\n        /// </summary>\n        public static readonly Pool<T> Default = new Pool<T>();\n\n        private readonly Stack<T> _items = new Stack<T>();\n\n        /// <summary>\n        /// Rents an item from the pool\n        /// </summary>\n        /// <returns></returns>\n        public T Rent()\n        {\n            var result = _items.Count > 0 ? _items.Pop() : new T();\n            return result;\n        }\n\n        /// <summary>\n        /// Return the item to the pool\n        /// </summary>\n        /// <param name=\"item\"></param>\n        public void Return(T item)\n        {\n            _items.Push(item);\n        }\n\n        /// <summary>\n        /// clears the pool\n        /// </summary>\n        public void Clear()\n        {\n            _items.Clear();\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Pooling/ThreadSafePool.cs",
    "content": "﻿// Nicholas Ventimiglia 2016-09-07\n\nusing System.Collections.Generic;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// A very simple object pool\n    /// </summary>\n    /// <remarks>\n    /// thread safe\n    /// </remarks>\n    /// <typeparam name=\"T\"></typeparam>\n    public class ThreadSafePool<T> where T : new()\n    {\n        /// <summary>\n        /// Global Singleton\n        /// </summary>\n        public static readonly ThreadSafePool<T> Default = new ThreadSafePool<T>();\n\n        private readonly Stack<T> _items = new Stack<T>();\n        private readonly object _lock = new object();\n\n        /// <summary>\n        /// Rents an item from the pool\n        /// </summary>\n        /// <returns></returns>\n        public T Rent()\n        {\n            lock (_lock)\n            {\n                var result = _items.Count > 0 ? _items.Pop() : new T();\n                return result;\n            }\n        }\n\n        /// <summary>\n        /// Return the item to the pool\n        /// </summary>\n        /// <param name=\"item\"></param>\n        public void Return(T item)\n        {\n            lock (_lock)\n            {\n                _items.Push(item);\n            }\n        }\n\n        /// <summary>\n        /// clears the pool\n        /// </summary>\n        public void Clear()\n        {\n            lock (_lock)\n            {\n                _items.Clear();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Properties/AssemblyInfo.cs",
    "content": "﻿// Nicholas Ventimiglia 2016-09-05\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n\n[assembly: AssemblyTitle(\"Architecture\")]\n[assembly: AssemblyDescription(\"Common Services and Components\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"NVentimiglia\")]\n[assembly: AssemblyProduct(\"Foundation.Architecture\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n\n[assembly: Guid(\"f38f800f-d4d8-48e4-9a2c-b0518be831cb\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]"
  },
  {
    "path": "Foundation.Architecture/Architecture/Threading/AsyncLock.cs",
    "content": "// Nicholas Ventimiglia 2016-09-07\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// A lock that supports awaiting on tasks while locked\n    // http://blogs.msdn.com/b/pfxteam/archive/2012/02/12/10266988.aspx\n    /// </summary>\n    public class AsyncLock\n    {\n        private readonly AsyncSemaphore m_semaphore;\n        private readonly Task<Releaser> m_releaser;\n\n        public AsyncLock()\n        {\n            m_semaphore = new AsyncSemaphore(1);\n            m_releaser = Task.FromResult(new Releaser(this));\n        }\n\n        public Task<Releaser> LockAsync()\n        {\n            var wait = m_semaphore.WaitAsync();\n            return wait.IsCompleted\n                ? m_releaser\n                : wait.ContinueWith((_, state) => new Releaser((AsyncLock) state),\n                    this, CancellationToken.None,\n                    TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default);\n        }\n\n        public struct Releaser : IDisposable\n        {\n            private readonly AsyncLock m_toRelease;\n\n            internal Releaser(AsyncLock toRelease)\n            {\n                m_toRelease = toRelease;\n            }\n\n            public void Dispose()\n            {\n                if (m_toRelease != null)\n                    m_toRelease.m_semaphore.Release();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Threading/AsyncSemaphore.cs",
    "content": "// Nicholas Ventimiglia 2016-09-07\n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    ///  See AsyncLock\n    ///  </summary>\n    public class AsyncSemaphore\n    {\n        private readonly static Task s_completed = Task.FromResult(true);\n        private readonly Queue<TaskCompletionSource<bool>> m_waiters = new Queue<TaskCompletionSource<bool>>();\n        private int m_currentCount;\n\n        public AsyncSemaphore(int initialCount)\n        {\n            if (initialCount < 0) throw new ArgumentOutOfRangeException(\"initialCount\");\n            m_currentCount = initialCount;\n        }\n\n        public Task WaitAsync()\n        {\n            lock (m_waiters)\n            {\n                if (m_currentCount > 0)\n                {\n                    --m_currentCount;\n                    return s_completed;\n                }\n                else\n                {\n                    var waiter = new TaskCompletionSource<bool>();\n                    m_waiters.Enqueue(waiter);\n                    return waiter.Task;\n                }\n            }\n        }\n\n        public void Release()\n        {\n            TaskCompletionSource<bool> toRelease = null;\n            lock (m_waiters)\n            {\n                if (m_waiters.Count > 0)\n                    toRelease = m_waiters.Dequeue();\n                else\n                    ++m_currentCount;\n            }\n            if (toRelease != null)\n                toRelease.SetResult(true);\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Threading/Internal/AsyncThreadService.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Threading.Tasks;\n\nnamespace Foundation.Architecture.Internal\n{\n    public class AsyncThreadService : IThreadingService\n    {\n        public class ThreadTask : IDisposable\n        {\n            public bool IsDisposed;\n\n            public void Dispose()\n            {\n                IsDisposed = true;\n            }\n        }\n        \n        public bool IsMainThread\n        {\n            get { return true; }\n        }\n\n        public IDisposable RunUpdate(Action<double> callback)\n        {\n            var task = new ThreadTask();\n            task.IsDisposed = false;\n            RunUpdate(callback, task);\n            return task;\n        }\n\n        public IDisposable RunDelay(Action callback, float seconds = 5)\n        {\n            var task = new ThreadTask();\n            task.IsDisposed = false;\n            RunUpdate(callback, seconds, task);\n            return task;\n        }\n\n        public void RunRoutine(IEnumerator routine)\n        {\n            RunRoutineAsync(routine);\n        }\n\n        public void RunMainThread(Action action)\n        {\n            //NotImplemented\n            action();\n        }\n\n        public void RunBackgroundThread(Action action)\n        {\n            //NotImplemented\n            action();\n        }\n\n        public void RunBackgroundThread(Action backgroundWork, Action mainWork)\n        {\n            //NotImplemented\n            backgroundWork();\n            mainWork();\n        }\n\n        async void RunUpdate(Action<double> callback, ThreadTask task)\n        {\n            var startTime = DateTime.UtcNow;\n            double delta;\n\n            while (!task.IsDisposed)\n            {\n                //60 fps\n                delta = (DateTime.UtcNow - startTime).TotalMilliseconds;\n                startTime = DateTime.UtcNow;\n                callback(delta);\n                await Task.Delay(16);\n            }\n        }\n\n        async void RunUpdate(Action callback, float seconds, ThreadTask task)\n        {\n            await Task.Delay(TimeSpan.FromSeconds(seconds));\n\n            if (!task.IsDisposed)\n            {\n                callback();\n            }\n        }\n\n        async void RunRoutineAsync(IEnumerator routine)\n        {\n            do\n            {\n                //60 fps\n                await Task.Delay(16);\n\n            } while (routine.MoveNext());\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Threading/Internal/IThreadingService.cs",
    "content": "// Nicholas Ventimiglia 2016-09-07\n\nusing System;\nusing System.Collections;\n\nnamespace Foundation.Architecture.Internal\n{\n    /// <summary>\n    /// Main thread / Background thread utility\n    /// </summary>\n    /// <remarks>\n    /// Games need consistent threading / time logic on server and client.\n    /// </remarks>\n    public interface IThreadingService\n    {\n        /// <summary>\n        /// Checks if this is the main thread\n        /// </summary>\n        bool IsMainThread { get; }\n\n        /// <summary>\n        /// A long running (continuous) update loop\n        /// </summary>\n        /// <param name=\"callback\">Update Handler with delta time parameter</param>\n        /// <returns></returns>\n        IDisposable RunUpdate(Action<double> callback);\n\n        /// <summary>\n        /// Registers a timeout (Wait and Invoke)\n        /// </summary>\n        IDisposable RunDelay(Action callback, float seconds = 5);\n\n        /// <summary>\n        /// A Coroutine. Like an Update Loop, but, execution broken up by yields\n        /// </summary>\n        void RunRoutine(IEnumerator routine);\n\n        /// <summary>\n        /// Executes an action on the main thread\n        /// </summary>\n        void RunMainThread(Action action);\n\n        /// <summary>\n        /// Executes an action on the background thread (if possible - webGl)\n        /// </summary>\n        void RunBackgroundThread(Action action);\n\n        /// <summary>\n        /// Run a background job with completion\n        /// </summary>\n        void RunBackgroundThread(Action backgroundWork, Action mainWork);\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Threading/Internal/UnityThreadService.cs",
    "content": "﻿#if UNITY\nusing System;\nusing System.Collections;\nusing UnityEngine;\nusing System.Collections.Generic;\n#if USE_THREAD\nusing System.Threading;\n#endif\n\nnamespace Foundation.Architecture.Internal\n{\n    public class UnityThreadService : MonoBehaviour, IThreadingService\n    {\n        #region Defines\n        public class UpdateTask : IDisposable\n        {\n            public Action<double> Action;\n            public Action<UpdateTask> Cleanup;\n\n            public bool IsDisposed;\n\n            public void Dispose()\n            {\n                Cleanup(this);\n                Cleanup = null;\n                Action = null;\n                IsDisposed = true;\n                //Note : for pooling confirm not used by client and controller. Double Dispose ?\n            }\n        }\n\n        public class RoutineTask : IDisposable\n        {\n            public IEnumerator Routine;\n\n            public bool IsDisposed;\n\n            public void Dispose()\n            {\n                Routine = null;\n                IsDisposed = true;\n                //Note : for pooling confirm not used by client and controller. Double Dispose ?\n            }\n        }\n\n        public class JobTask\n        {\n            public Action Background;\n            public Action Main;\n        }\n        #endregion\n\n        #region API\n        public IDisposable RunUpdate(Action<double> callback)\n        {\n            var task = new UpdateTask { Cleanup = Remove };\n            task.Action = callback;\n\n            lock (pendingUpdates)\n            {\n                pendingUpdates.Add(task);\n                hasUpdates = true;\n            }\n\n            return task;\n        }\n\n        public IDisposable RunDelay(Action callback, float seconds = 5)\n        {\n            var task = new RoutineTask();\n            task.Routine = RunDelayAsync(callback, seconds, task);\n\n            lock (pendingRoutine)\n            {\n                pendingRoutine.Enqueue(task);\n                hasRoutine = true;\n            }\n\n            return task;\n        }\n\n        public void RunRoutine(IEnumerator routine)\n        {\n            var task = new RoutineTask();\n            task.Routine = routine;\n\n            lock (pendingRoutine)\n            {\n                pendingRoutine.Enqueue(task);\n                hasRoutine = true;\n            }\n        }\n\n        public void RunMainThread(Action action)\n        {\n#if USE_THREAD\n            lock (pendingMain)\n            {\n                pendingMain.Enqueue(action);\n                hasMain = true;\n            }\n#else\n            action();\n#endif\n        }\n\n        public void RunBackgroundThread(Action action)\n        {\n#if USE_THREAD\n            lock (pendingBack)\n            {\n                pendingBack.Enqueue(new JobTask { Background = action });\n                hasBack = true;\n            }\n#else\n            action();\n#endif\n        }\n\n        public void RunBackgroundThread(Action bgAction, Action mainAction)\n        {\n#if USE_THREAD\n            lock (pendingBack)\n            {\n                pendingBack.Enqueue(new JobTask { Background = bgAction, Main = mainAction });\n                hasBack = true;\n            }\n#else\n            bgAction();\n            mainAction();\n#endif\n        }\n        #endregion\n\n        #region Implementation\n\n        private static UnityThreadService _instance;\n        //[RuntimeInitializeOnLoadMethod]\n        public static UnityThreadService Init()\n        {\n            if (_instance == null)\n            {\n                var go = new GameObject(\"_UnityThreadService\");\n                DontDestroyOnLoad(go);\n                _instance = go.AddComponent<UnityThreadService>();\n            }\n            return _instance;\n        }\n\n        private readonly List<UpdateTask> pendingUpdates = new List<UpdateTask>();\n        private readonly Queue<JobTask> pendingBack = new Queue<JobTask>();\n        private readonly Queue<Action> pendingMain = new Queue<Action>();\n        private readonly Queue<RoutineTask> pendingRoutine = new Queue<RoutineTask>();\n\n        private volatile bool hasUpdates;\n        private volatile bool hasBack;\n        private volatile bool hasMain;\n        private volatile bool hasRoutine;\n        private static volatile bool alive;\n\n        private DateTime lastUpdate;\n#if USE_THREAD\n        private Thread workThread;\n        private Thread mainThread;\n\n        /// <summary>\n        /// Checks if this is the main thread\n        /// </summary>\n        public bool IsMainThread\n        {\n            get { return Thread.CurrentThread == mainThread; }\n        }\n        \n#else\n        /// <summary>\n        /// Checks if this is the main thread\n        /// </summary>\n        public bool IsMainThread\n        {\n            get { return true; }\n        }\n#endif\n\n        void Awake()\n        {\n#if USE_THREAD\n            mainThread = Thread.CurrentThread;\n#endif\n            _instance = this;\n        }\n\n        void Start()\n        {\n#if USE_THREAD\n            workThread = new Thread(() =>\n            {\n                while (alive)\n                {\n                    try\n                    {\n                        lock (pendingBack)\n                        {\n                            while (pendingBack.Count > 0)\n                            {\n                                var job = pendingBack.Dequeue();\n                                job.Background();\n                                if (job.Main != null)\n                                    RunMainThread(job.Main);\n                            }\n                        }\n                    }\n                    catch (Exception ex)\n                    {\n                        LogService.LogException(\"UnityThreadService\", ex);\n                    }\n\n                    //60 fps\n                    Thread.Sleep(16);\n                }\n\n            });\n            workThread.IsBackground = true;\n            workThread.Start();\n#endif\n            // lastUpdate = DateTime.UtcNow;\n        }\n\n        void OnDestroy()\n        {\n            _instance = null;\n            alive = false;\n        }\n\n        void Update()\n        {\n            // var delta = (DateTime.UtcNow - lastUpdate).TotalMilliseconds;\n            // lastUpdate = DateTime.UtcNow;\n\n            if (hasUpdates)\n            {\n                lock (pendingUpdates)\n                {\n                    for (int i = 0; i < pendingUpdates.Count; i++)\n                    {\n                        pendingUpdates[i].Action(Time.deltaTime);\n                    }\n\n                }\n\n            }\n\n            if (hasMain)\n            {\n                try\n                {\n                    lock (pendingMain)\n                    {\n                        while (pendingMain.Count > 0)\n                        {\n                            pendingMain.Dequeue()();\n                        }\n                        hasMain = false;\n                    }\n                }\n                catch (Exception ex)\n                {\n                    LogService.LogException(\"UnityThreadService.pendingMain\", ex);\n                }\n            }\n\n            if (hasRoutine)\n            {\n                try\n                {\n                    lock (pendingRoutine)\n                    {\n                        while (pendingRoutine.Count > 0)\n                        {\n                            StartCoroutine(pendingRoutine.Dequeue().Routine);\n\n                            hasRoutine = false;\n                        }\n                    }\n\n                }\n                catch (Exception ex)\n                {\n                    LogService.LogException(\"UnityThreadService.pendingRoutine\", ex);\n                }\n            }\n        }\n\n        IEnumerator RunDelayAsync(Action callback, float seconds, RoutineTask task)\n        {\n            yield return new WaitForSecondsRealtime(seconds);\n\n            if (!task.IsDisposed)\n                callback();\n        }\n\n        void Remove(UpdateTask task)\n        {\n            lock (pendingUpdates)\n            {\n                pendingUpdates.Remove(task);\n                hasUpdates = pendingUpdates.Count > 0;\n            }\n        }\n        #endregion\n    }\n}\n#endif"
  },
  {
    "path": "Foundation.Architecture/Architecture/Threading/RoutineTimer.cs",
    "content": "// Nicholas Ventimiglia 2016-09-07\n\nusing System;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// A platform agnostic timer with callback helper\n    /// </summary>\n    public class RoutineTimer : IDisposable\n    {\n        public TimeSpan Interval { get; private set; }\n        public Action Callback { get; private set; }\n        public bool IsRunning { get; private set; }\n        \n        private IDisposable routine;\n        private double delta;\n\n        public RoutineTimer(TimeSpan interval, Action callback)\n        {\n            Callback = callback;\n            Interval = interval;\n        }\n\n        public void Dispose()\n        {\n            Stop();\n            Callback = null;\n        }\n\n        public RoutineTimer Stop()\n        {\n            if (routine != null)\n            {\n                routine.Dispose();\n                routine = null;\n            }\n\n            IsRunning = false;\n\n            return this;\n        }\n\n        public RoutineTimer Start()\n        {\n            if (!IsRunning)\n            {\n                IsRunning = true;\n\n                routine = ThreadingService.RunUpdate(Handler);\n            }\n\n            return this;\n        }\n\n        void Handler(double d)\n        {\n            if (!IsRunning)\n                return;\n\n            delta += d;\n\n            if (delta >= Interval.TotalMilliseconds)\n            {\n                delta = 0;\n                Callback();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture/Threading/ThreadingService.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing Foundation.Architecture.Internal;\n\nnamespace Foundation.Architecture\n{\n    /// <summary>\n    /// Main thread / Background thread utility\n    /// </summary>\n    /// <remarks>\n    /// Games need consistent threading / time logic on server and client.\n    /// </remarks>\n    public static class ThreadingService\n    {\n#if UNITY\n        static readonly IThreadingService Instance = UnityThreadService.Init();\n#else\n        static readonly IThreadingService Instance = new AsyncThreadService();\n#endif\n        /// <summary>\n        /// Checks if this is the main thread\n        /// </summary>\n        public static bool IsMainThread\n        {\n            get { return Instance.IsMainThread; }\n        }\n\n        /// <summary>\n        /// A long running (continuous) update loop\n        /// </summary>\n        /// <param name=\"callback\">Update Handler with delta time parameter</param>\n        /// <returns></returns>\n        public static IDisposable RunUpdate(Action<double> callback)\n        {\n            return Instance.RunUpdate(callback);\n        }\n\n        /// <summary>\n        /// Registers a timeout (Wait and Invoke)\n        /// </summary>\n        public static IDisposable RunDelay(Action callback, float seconds = 5)\n        {\n            return Instance.RunDelay(callback, seconds);\n        }\n      \n        /// <summary>\n        /// A Coroutine. Like an Update Loop, but, execution broken up by yields\n        /// </summary>\n        public static void RunRoutine(IEnumerator routine)\n        {\n            Instance.RunRoutine(routine);\n        }\n        \n        /// <summary>\n        /// Executes an action on the main thread\n        /// </summary>\n        public static void RunMainThread(Action action)\n        {\n            Instance.RunDelay(action);\n        }\n        \n        /// <summary>\n        /// Executes an action on the background thread (if possible - webGl)\n        /// </summary>\n        public static void RunBackgroundThread(Action action)\n        {\n            Instance.RunBackgroundThread(action);\n        }\n\n        /// <summary>\n        /// Run a background job with completion\n        /// </summary>\n        public static void RunBackgroundThread(Action backgroundWork, Action mainWork)\n        {\n            Instance.RunBackgroundThread(backgroundWork, mainWork);\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Architecture/Architecture/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<packages>\n  <package id=\"Newtonsoft.Json\" version=\"9.0.1\" targetFramework=\"net452\" />\n</packages>"
  },
  {
    "path": "Foundation.Architecture/Architecture.Core/Architecture.Core.xproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">14.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n\n  <Import Project=\"$(VSToolsPath)\\DotNet\\Microsoft.DotNet.Props\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>0cafb5cc-49cc-4665-a226-99df505c6a46</ProjectGuid>\n    <RootNamespace>Architecture.Core</RootNamespace>\n    <BaseIntermediateOutputPath Condition=\"'$(BaseIntermediateOutputPath)'=='' \">.\\obj</BaseIntermediateOutputPath>\n    <OutputPath Condition=\"'$(OutputPath)'=='' \">.\\bin\\</OutputPath>\n    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <SchemaVersion>2.0</SchemaVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VSToolsPath)\\DotNet\\Microsoft.DotNet.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n</Project>\n"
  },
  {
    "path": "Foundation.Architecture/Architecture.Core/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following\n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Architecture.Core\")]\n[assembly: AssemblyTrademark(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible\n// to COM components.  If you need to access a type in this assembly from\n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"0cafb5cc-49cc-4665-a226-99df505c6a46\")]\n"
  },
  {
    "path": "Foundation.Architecture/Architecture.Core/project.json",
    "content": "﻿{\n  \"name\": \"Foundation.Architecture\",\n  \"description\": \"Common architecture componenets\",\n  \"copyright\": \"NicholasVentimiglia.com\",\n  \"version\": \"1.0.0-*\",\n\n  \"dependencies\": {\n    \"NETStandard.Library\": \"1.6.0\",\n    \"Newtonsoft.Json\": \"9.0.1\"\n  },\n\n  \"frameworks\": {\n    \"netstandard1.6\": {\n      \"imports\": \"dnxcore50\"\n    }\n  },\n\n  \"buildOptions\": {\n\n    \"allowUnsafe\": true,\n\n    \"compile\": {\n      \"include\": [\n        \"../Architecture/Data/**.cs\",\n        \"../Architecture/Logging/**.cs\",\n        \"../Architecture/Injector/**.cs\",\n        \"../Architecture/Messaging/**.cs\",\n        \"../Architecture/Observables/**.cs\",\n        \"../Architecture/Pooling/**.cs\",\n        \"../Architecture/Threading/**.cs\"\n      ],\n      \"exclude\": [\n        //Ignore Stuff\n        \"AssemblyInfo.cs\",\n        \"**AssemblyInfo.cs\"\n      ]\n    },\n    \"define\": [ \"CORE\" ]\n  }\n}\n"
  },
  {
    "path": "Foundation.Architecture/Architecture.Core/project.lock.json",
    "content": "{\n  \"locked\": false,\n  \"version\": 2,\n  \"targets\": {\n    \".NETStandard,Version=v1.6\": {\n      \"Microsoft.CSharp/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Dynamic.Runtime\": \"4.0.11\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Linq\": \"4.1.0\",\n          \"System.Linq.Expressions\": \"4.1.0\",\n          \"System.ObjectModel\": \"4.0.12\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Reflection.Extensions\": \"4.0.1\",\n          \"System.Reflection.Primitives\": \"4.0.1\",\n          \"System.Reflection.TypeExtensions\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.0/Microsoft.CSharp.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/Microsoft.CSharp.dll\": {}\n        }\n      },\n      \"Microsoft.NETCore.Platforms/1.0.1\": {\n        \"type\": \"package\",\n        \"compile\": {\n          \"lib/netstandard1.0/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.0/_._\": {}\n        }\n      },\n      \"Microsoft.NETCore.Targets/1.0.1\": {\n        \"type\": \"package\",\n        \"compile\": {\n          \"lib/netstandard1.0/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.0/_._\": {}\n        }\n      },\n      \"Microsoft.Win32.Primitives/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/Microsoft.Win32.Primitives.dll\": {}\n        }\n      },\n      \"NETStandard.Library/1.6.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.Win32.Primitives\": \"4.0.1\",\n          \"System.AppContext\": \"4.1.0\",\n          \"System.Collections\": \"4.0.11\",\n          \"System.Collections.Concurrent\": \"4.0.12\",\n          \"System.Console\": \"4.0.0\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Diagnostics.Tools\": \"4.0.1\",\n          \"System.Diagnostics.Tracing\": \"4.1.0\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Globalization.Calendars\": \"4.0.1\",\n          \"System.IO\": \"4.1.0\",\n          \"System.IO.Compression\": \"4.1.0\",\n          \"System.IO.Compression.ZipFile\": \"4.0.1\",\n          \"System.IO.FileSystem\": \"4.0.1\",\n          \"System.IO.FileSystem.Primitives\": \"4.0.1\",\n          \"System.Linq\": \"4.1.0\",\n          \"System.Linq.Expressions\": \"4.1.0\",\n          \"System.Net.Http\": \"4.1.0\",\n          \"System.Net.Primitives\": \"4.0.11\",\n          \"System.Net.Sockets\": \"4.1.0\",\n          \"System.ObjectModel\": \"4.0.12\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Reflection.Extensions\": \"4.0.1\",\n          \"System.Reflection.Primitives\": \"4.0.1\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Runtime.InteropServices.RuntimeInformation\": \"4.0.0\",\n          \"System.Runtime.Numerics\": \"4.0.1\",\n          \"System.Security.Cryptography.Algorithms\": \"4.2.0\",\n          \"System.Security.Cryptography.Encoding\": \"4.0.0\",\n          \"System.Security.Cryptography.Primitives\": \"4.0.0\",\n          \"System.Security.Cryptography.X509Certificates\": \"4.1.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Text.Encoding.Extensions\": \"4.0.11\",\n          \"System.Text.RegularExpressions\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\",\n          \"System.Threading.Tasks\": \"4.0.11\",\n          \"System.Threading.Timer\": \"4.0.1\",\n          \"System.Xml.ReaderWriter\": \"4.0.11\",\n          \"System.Xml.XDocument\": \"4.0.11\"\n        }\n      },\n      \"Newtonsoft.Json/9.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.CSharp\": \"4.0.1\",\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Dynamic.Runtime\": \"4.0.11\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Linq\": \"4.1.0\",\n          \"System.Linq.Expressions\": \"4.1.0\",\n          \"System.ObjectModel\": \"4.0.12\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Reflection.Extensions\": \"4.0.1\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Serialization.Primitives\": \"4.1.1\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Text.Encoding.Extensions\": \"4.0.11\",\n          \"System.Text.RegularExpressions\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\",\n          \"System.Threading.Tasks\": \"4.0.11\",\n          \"System.Xml.ReaderWriter\": \"4.0.11\",\n          \"System.Xml.XDocument\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"lib/netstandard1.0/Newtonsoft.Json.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.0/Newtonsoft.Json.dll\": {}\n        }\n      },\n      \"runtime.native.System/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\"\n        },\n        \"compile\": {\n          \"lib/netstandard1.0/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.0/_._\": {}\n        }\n      },\n      \"runtime.native.System.IO.Compression/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\"\n        },\n        \"compile\": {\n          \"lib/netstandard1.0/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.0/_._\": {}\n        }\n      },\n      \"runtime.native.System.Net.Http/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\"\n        },\n        \"compile\": {\n          \"lib/netstandard1.0/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.0/_._\": {}\n        }\n      },\n      \"runtime.native.System.Security.Cryptography/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\"\n        },\n        \"compile\": {\n          \"lib/netstandard1.0/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.0/_._\": {}\n        }\n      },\n      \"System.AppContext/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.6/System.AppContext.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.6/System.AppContext.dll\": {}\n        }\n      },\n      \"System.Buffers/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Diagnostics.Tracing\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"lib/netstandard1.1/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.1/System.Buffers.dll\": {}\n        }\n      },\n      \"System.Collections/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Collections.dll\": {}\n        }\n      },\n      \"System.Collections.Concurrent/4.0.12\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Diagnostics.Tracing\": \"4.1.0\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\",\n          \"System.Threading.Tasks\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Collections.Concurrent.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Collections.Concurrent.dll\": {}\n        }\n      },\n      \"System.Console/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Text.Encoding\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Console.dll\": {}\n        }\n      },\n      \"System.Diagnostics.Debug/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Diagnostics.Debug.dll\": {}\n        }\n      },\n      \"System.Diagnostics.DiagnosticSource/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Tracing\": \"4.1.0\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"lib/netstandard1.3/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll\": {}\n        }\n      },\n      \"System.Diagnostics.Tools/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.0/System.Diagnostics.Tools.dll\": {}\n        }\n      },\n      \"System.Diagnostics.Tracing/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.5/System.Diagnostics.Tracing.dll\": {}\n        }\n      },\n      \"System.Dynamic.Runtime/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Linq\": \"4.1.0\",\n          \"System.Linq.Expressions\": \"4.1.0\",\n          \"System.ObjectModel\": \"4.0.12\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Reflection.Emit\": \"4.0.1\",\n          \"System.Reflection.Emit.ILGeneration\": \"4.0.1\",\n          \"System.Reflection.Primitives\": \"4.0.1\",\n          \"System.Reflection.TypeExtensions\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Dynamic.Runtime.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Dynamic.Runtime.dll\": {}\n        }\n      },\n      \"System.Globalization/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Globalization.dll\": {}\n        }\n      },\n      \"System.Globalization.Calendars/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Globalization.Calendars.dll\": {}\n        }\n      },\n      \"System.Globalization.Extensions/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.InteropServices\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/_._\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          },\n          \"runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"win\"\n          }\n        }\n      },\n      \"System.IO/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Threading.Tasks\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.5/System.IO.dll\": {}\n        }\n      },\n      \"System.IO.Compression/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Threading\": \"4.0.11\",\n          \"System.Threading.Tasks\": \"4.0.11\",\n          \"runtime.native.System\": \"4.0.0\",\n          \"runtime.native.System.IO.Compression\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.IO.Compression.dll\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          },\n          \"runtimes/win/lib/netstandard1.3/System.IO.Compression.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"win\"\n          }\n        }\n      },\n      \"System.IO.Compression.ZipFile/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Buffers\": \"4.0.0\",\n          \"System.IO\": \"4.1.0\",\n          \"System.IO.Compression\": \"4.1.0\",\n          \"System.IO.FileSystem\": \"4.0.1\",\n          \"System.IO.FileSystem.Primitives\": \"4.0.1\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Text.Encoding\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.IO.Compression.ZipFile.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.IO.Compression.ZipFile.dll\": {}\n        }\n      },\n      \"System.IO.FileSystem/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.IO\": \"4.1.0\",\n          \"System.IO.FileSystem.Primitives\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Threading.Tasks\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.IO.FileSystem.dll\": {}\n        }\n      },\n      \"System.IO.FileSystem.Primitives/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.IO.FileSystem.Primitives.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.IO.FileSystem.Primitives.dll\": {}\n        }\n      },\n      \"System.Linq/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.6/System.Linq.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.6/System.Linq.dll\": {}\n        }\n      },\n      \"System.Linq.Expressions/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Linq\": \"4.1.0\",\n          \"System.ObjectModel\": \"4.0.12\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Reflection.Emit\": \"4.0.1\",\n          \"System.Reflection.Emit.ILGeneration\": \"4.0.1\",\n          \"System.Reflection.Emit.Lightweight\": \"4.0.1\",\n          \"System.Reflection.Extensions\": \"4.0.1\",\n          \"System.Reflection.Primitives\": \"4.0.1\",\n          \"System.Reflection.TypeExtensions\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.6/System.Linq.Expressions.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.6/System.Linq.Expressions.dll\": {}\n        }\n      },\n      \"System.Net.Http/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Diagnostics.DiagnosticSource\": \"4.0.0\",\n          \"System.Diagnostics.Tracing\": \"4.1.0\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Globalization.Extensions\": \"4.0.1\",\n          \"System.IO\": \"4.1.0\",\n          \"System.IO.FileSystem\": \"4.0.1\",\n          \"System.Net.Primitives\": \"4.0.11\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Security.Cryptography.Algorithms\": \"4.2.0\",\n          \"System.Security.Cryptography.Encoding\": \"4.0.0\",\n          \"System.Security.Cryptography.OpenSsl\": \"4.0.0\",\n          \"System.Security.Cryptography.Primitives\": \"4.0.0\",\n          \"System.Security.Cryptography.X509Certificates\": \"4.1.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Threading\": \"4.0.11\",\n          \"System.Threading.Tasks\": \"4.0.11\",\n          \"runtime.native.System\": \"4.0.0\",\n          \"runtime.native.System.Net.Http\": \"4.0.1\",\n          \"runtime.native.System.Security.Cryptography\": \"4.0.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Net.Http.dll\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.6/System.Net.Http.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          },\n          \"runtimes/win/lib/netstandard1.3/System.Net.Http.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"win\"\n          }\n        }\n      },\n      \"System.Net.Primitives/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Net.Primitives.dll\": {}\n        }\n      },\n      \"System.Net.Sockets/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Net.Primitives\": \"4.0.11\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Threading.Tasks\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Net.Sockets.dll\": {}\n        }\n      },\n      \"System.ObjectModel/4.0.12\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.ObjectModel.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.ObjectModel.dll\": {}\n        }\n      },\n      \"System.Reflection/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Reflection.Primitives\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.5/System.Reflection.dll\": {}\n        }\n      },\n      \"System.Reflection.Emit/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.IO\": \"4.1.0\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Reflection.Emit.ILGeneration\": \"4.0.1\",\n          \"System.Reflection.Primitives\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.1/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Reflection.Emit.dll\": {}\n        }\n      },\n      \"System.Reflection.Emit.ILGeneration/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Reflection.Primitives\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.0/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll\": {}\n        }\n      },\n      \"System.Reflection.Emit.Lightweight/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Reflection.Emit.ILGeneration\": \"4.0.1\",\n          \"System.Reflection.Primitives\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.0/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll\": {}\n        }\n      },\n      \"System.Reflection.Extensions/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.0/System.Reflection.Extensions.dll\": {}\n        }\n      },\n      \"System.Reflection.Primitives/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.0/System.Reflection.Primitives.dll\": {}\n        }\n      },\n      \"System.Reflection.TypeExtensions/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.5/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.5/System.Reflection.TypeExtensions.dll\": {}\n        }\n      },\n      \"System.Resources.ResourceManager/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.0/System.Resources.ResourceManager.dll\": {}\n        }\n      },\n      \"System.Runtime/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.5/System.Runtime.dll\": {}\n        }\n      },\n      \"System.Runtime.Extensions/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.5/System.Runtime.Extensions.dll\": {}\n        }\n      },\n      \"System.Runtime.Handles/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Runtime.Handles.dll\": {}\n        }\n      },\n      \"System.Runtime.InteropServices/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Reflection.Primitives\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.5/System.Runtime.InteropServices.dll\": {}\n        }\n      },\n      \"System.Runtime.InteropServices.RuntimeInformation/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\",\n          \"runtime.native.System\": \"4.0.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          },\n          \"runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"win\"\n          }\n        }\n      },\n      \"System.Runtime.Numerics/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.1/System.Runtime.Numerics.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Runtime.Numerics.dll\": {}\n        }\n      },\n      \"System.Runtime.Serialization.Primitives/4.1.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll\": {}\n        }\n      },\n      \"System.Security.Cryptography.Algorithms/4.2.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"System.Collections\": \"4.0.11\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Runtime.Numerics\": \"4.0.1\",\n          \"System.Security.Cryptography.Encoding\": \"4.0.0\",\n          \"System.Security.Cryptography.Primitives\": \"4.0.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"runtime.native.System.Security.Cryptography\": \"4.0.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          },\n          \"runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"win\"\n          }\n        }\n      },\n      \"System.Security.Cryptography.Cng/4.2.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Security.Cryptography.Algorithms\": \"4.2.0\",\n          \"System.Security.Cryptography.Encoding\": \"4.0.0\",\n          \"System.Security.Cryptography.Primitives\": \"4.0.0\",\n          \"System.Text.Encoding\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.6/_._\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          },\n          \"runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"win\"\n          }\n        }\n      },\n      \"System.Security.Cryptography.Csp/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Security.Cryptography.Algorithms\": \"4.2.0\",\n          \"System.Security.Cryptography.Encoding\": \"4.0.0\",\n          \"System.Security.Cryptography.Primitives\": \"4.0.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Threading\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/_._\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          },\n          \"runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"win\"\n          }\n        }\n      },\n      \"System.Security.Cryptography.Encoding/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"System.Collections\": \"4.0.11\",\n          \"System.Collections.Concurrent\": \"4.0.12\",\n          \"System.Linq\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Security.Cryptography.Primitives\": \"4.0.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"runtime.native.System.Security.Cryptography\": \"4.0.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Security.Cryptography.Encoding.dll\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          },\n          \"runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"win\"\n          }\n        }\n      },\n      \"System.Security.Cryptography.OpenSsl/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Runtime.Numerics\": \"4.0.1\",\n          \"System.Security.Cryptography.Algorithms\": \"4.2.0\",\n          \"System.Security.Cryptography.Encoding\": \"4.0.0\",\n          \"System.Security.Cryptography.Primitives\": \"4.0.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"runtime.native.System.Security.Cryptography\": \"4.0.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.6/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          }\n        }\n      },\n      \"System.Security.Cryptography.Primitives/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\",\n          \"System.Threading.Tasks\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Security.Cryptography.Primitives.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Security.Cryptography.Primitives.dll\": {}\n        }\n      },\n      \"System.Security.Cryptography.X509Certificates/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Globalization.Calendars\": \"4.0.1\",\n          \"System.IO\": \"4.1.0\",\n          \"System.IO.FileSystem\": \"4.0.1\",\n          \"System.IO.FileSystem.Primitives\": \"4.0.1\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.Handles\": \"4.0.1\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Runtime.Numerics\": \"4.0.1\",\n          \"System.Security.Cryptography.Algorithms\": \"4.2.0\",\n          \"System.Security.Cryptography.Cng\": \"4.2.0\",\n          \"System.Security.Cryptography.Csp\": \"4.0.0\",\n          \"System.Security.Cryptography.Encoding\": \"4.0.0\",\n          \"System.Security.Cryptography.OpenSsl\": \"4.0.0\",\n          \"System.Security.Cryptography.Primitives\": \"4.0.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Threading\": \"4.0.11\",\n          \"runtime.native.System\": \"4.0.0\",\n          \"runtime.native.System.Net.Http\": \"4.0.1\",\n          \"runtime.native.System.Security.Cryptography\": \"4.0.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll\": {}\n        },\n        \"runtimeTargets\": {\n          \"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"unix\"\n          },\n          \"runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll\": {\n            \"assetType\": \"runtime\",\n            \"rid\": \"win\"\n          }\n        }\n      },\n      \"System.Text.Encoding/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Text.Encoding.dll\": {}\n        }\n      },\n      \"System.Text.Encoding.Extensions/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Text.Encoding\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Text.Encoding.Extensions.dll\": {}\n        }\n      },\n      \"System.Text.RegularExpressions/4.1.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Threading\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.6/System.Text.RegularExpressions.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.6/System.Text.RegularExpressions.dll\": {}\n        }\n      },\n      \"System.Threading/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Threading.Tasks\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Threading.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Threading.dll\": {}\n        }\n      },\n      \"System.Threading.Tasks/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Threading.Tasks.dll\": {}\n        }\n      },\n      \"System.Threading.Tasks.Extensions/4.0.0\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Threading.Tasks\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"lib/netstandard1.0/_._\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.0/System.Threading.Tasks.Extensions.dll\": {}\n        }\n      },\n      \"System.Threading.Timer/4.0.1\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"Microsoft.NETCore.Platforms\": \"1.0.1\",\n          \"Microsoft.NETCore.Targets\": \"1.0.1\",\n          \"System.Runtime\": \"4.1.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.2/System.Threading.Timer.dll\": {}\n        }\n      },\n      \"System.Xml.ReaderWriter/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.IO\": \"4.1.0\",\n          \"System.IO.FileSystem\": \"4.0.1\",\n          \"System.IO.FileSystem.Primitives\": \"4.0.1\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Runtime.InteropServices\": \"4.1.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Text.Encoding.Extensions\": \"4.0.11\",\n          \"System.Text.RegularExpressions\": \"4.1.0\",\n          \"System.Threading.Tasks\": \"4.0.11\",\n          \"System.Threading.Tasks.Extensions\": \"4.0.0\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Xml.ReaderWriter.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Xml.ReaderWriter.dll\": {}\n        }\n      },\n      \"System.Xml.XDocument/4.0.11\": {\n        \"type\": \"package\",\n        \"dependencies\": {\n          \"System.Collections\": \"4.0.11\",\n          \"System.Diagnostics.Debug\": \"4.0.11\",\n          \"System.Diagnostics.Tools\": \"4.0.1\",\n          \"System.Globalization\": \"4.0.11\",\n          \"System.IO\": \"4.1.0\",\n          \"System.Reflection\": \"4.1.0\",\n          \"System.Resources.ResourceManager\": \"4.0.1\",\n          \"System.Runtime\": \"4.1.0\",\n          \"System.Runtime.Extensions\": \"4.1.0\",\n          \"System.Text.Encoding\": \"4.0.11\",\n          \"System.Threading\": \"4.0.11\",\n          \"System.Xml.ReaderWriter\": \"4.0.11\"\n        },\n        \"compile\": {\n          \"ref/netstandard1.3/System.Xml.XDocument.dll\": {}\n        },\n        \"runtime\": {\n          \"lib/netstandard1.3/System.Xml.XDocument.dll\": {}\n        }\n      }\n    }\n  },\n  \"libraries\": {\n    \"Microsoft.CSharp/4.0.1\": {\n      \"sha512\": \"cjnk5GNoivyDA+bLhtQ1C4OxdnCDF4/0jPZBjt4oxABBXSVqlo9OWBHHoLKLSfdA/XGVWUhLm8IT62nbPrfx3w==\",\n      \"type\": \"package\",\n      \"path\": \"Microsoft.CSharp/4.0.1\",\n      \"files\": [\n        \"Microsoft.CSharp.4.0.1.nupkg.sha512\",\n        \"Microsoft.CSharp.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/Microsoft.CSharp.dll\",\n        \"lib/netstandard1.3/Microsoft.CSharp.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/Microsoft.CSharp.dll\",\n        \"ref/netcore50/Microsoft.CSharp.xml\",\n        \"ref/netcore50/de/Microsoft.CSharp.xml\",\n        \"ref/netcore50/es/Microsoft.CSharp.xml\",\n        \"ref/netcore50/fr/Microsoft.CSharp.xml\",\n        \"ref/netcore50/it/Microsoft.CSharp.xml\",\n        \"ref/netcore50/ja/Microsoft.CSharp.xml\",\n        \"ref/netcore50/ko/Microsoft.CSharp.xml\",\n        \"ref/netcore50/ru/Microsoft.CSharp.xml\",\n        \"ref/netcore50/zh-hans/Microsoft.CSharp.xml\",\n        \"ref/netcore50/zh-hant/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/Microsoft.CSharp.dll\",\n        \"ref/netstandard1.0/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/de/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/es/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/fr/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/it/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/ja/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/ko/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/ru/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/zh-hans/Microsoft.CSharp.xml\",\n        \"ref/netstandard1.0/zh-hant/Microsoft.CSharp.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"Microsoft.NETCore.Platforms/1.0.1\": {\n      \"sha512\": \"MckX8mZraSfkhdJrBNI9vGfjAVre6ZndTUQ41YqJQEftZbud9XDoa7dYyRkFOPlekag+UZvuTp0VGoeEFhF9kA==\",\n      \"type\": \"package\",\n      \"path\": \"Microsoft.NETCore.Platforms/1.0.1\",\n      \"files\": [\n        \"Microsoft.NETCore.Platforms.1.0.1.nupkg.sha512\",\n        \"Microsoft.NETCore.Platforms.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/netstandard1.0/_._\",\n        \"runtime.json\"\n      ]\n    },\n    \"Microsoft.NETCore.Targets/1.0.1\": {\n      \"sha512\": \"wh5c7Jtadh5Pq8CIH31SU/fQWmR+Qa+TSQN3bR/NuMbE/8gQd9x6aiV8twY34RC9xuJ69u2tTLtIM/GMQp8D8A==\",\n      \"type\": \"package\",\n      \"path\": \"Microsoft.NETCore.Targets/1.0.1\",\n      \"files\": [\n        \"Microsoft.NETCore.Targets.1.0.1.nupkg.sha512\",\n        \"Microsoft.NETCore.Targets.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/netstandard1.0/_._\",\n        \"runtime.json\"\n      ]\n    },\n    \"Microsoft.Win32.Primitives/4.0.1\": {\n      \"sha512\": \"wTQ2FbDa8hvoTS/CFc5qAu1Bnx9EAJenKa6NNd4rNgeojgy6gkIKpVQWVC6A//Fg2qpL5Q2Fi4ekhhJd956QVQ==\",\n      \"type\": \"package\",\n      \"path\": \"Microsoft.Win32.Primitives/4.0.1\",\n      \"files\": [\n        \"Microsoft.Win32.Primitives.4.0.1.nupkg.sha512\",\n        \"Microsoft.Win32.Primitives.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/Microsoft.Win32.Primitives.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/Microsoft.Win32.Primitives.dll\",\n        \"ref/netstandard1.3/Microsoft.Win32.Primitives.dll\",\n        \"ref/netstandard1.3/Microsoft.Win32.Primitives.xml\",\n        \"ref/netstandard1.3/de/Microsoft.Win32.Primitives.xml\",\n        \"ref/netstandard1.3/es/Microsoft.Win32.Primitives.xml\",\n        \"ref/netstandard1.3/fr/Microsoft.Win32.Primitives.xml\",\n        \"ref/netstandard1.3/it/Microsoft.Win32.Primitives.xml\",\n        \"ref/netstandard1.3/ja/Microsoft.Win32.Primitives.xml\",\n        \"ref/netstandard1.3/ko/Microsoft.Win32.Primitives.xml\",\n        \"ref/netstandard1.3/ru/Microsoft.Win32.Primitives.xml\",\n        \"ref/netstandard1.3/zh-hans/Microsoft.Win32.Primitives.xml\",\n        \"ref/netstandard1.3/zh-hant/Microsoft.Win32.Primitives.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"NETStandard.Library/1.6.0\": {\n      \"sha512\": \"vw4kjupPp6A5m6koi0aM9+/rNXPfChlC0I9N/prKOL7oppr/nvIzx/NasYioxnj6eE1R3Nr9ilTympaYWV1Hzg==\",\n      \"type\": \"package\",\n      \"path\": \"NETStandard.Library/1.6.0\",\n      \"files\": [\n        \"NETStandard.Library.1.6.0.nupkg.sha512\",\n        \"NETStandard.Library.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\"\n      ]\n    },\n    \"Newtonsoft.Json/9.0.1\": {\n      \"sha512\": \"U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==\",\n      \"type\": \"package\",\n      \"path\": \"Newtonsoft.Json/9.0.1\",\n      \"files\": [\n        \"Newtonsoft.Json.9.0.1.nupkg.sha512\",\n        \"Newtonsoft.Json.nuspec\",\n        \"lib/net20/Newtonsoft.Json.dll\",\n        \"lib/net20/Newtonsoft.Json.xml\",\n        \"lib/net35/Newtonsoft.Json.dll\",\n        \"lib/net35/Newtonsoft.Json.xml\",\n        \"lib/net40/Newtonsoft.Json.dll\",\n        \"lib/net40/Newtonsoft.Json.xml\",\n        \"lib/net45/Newtonsoft.Json.dll\",\n        \"lib/net45/Newtonsoft.Json.xml\",\n        \"lib/netstandard1.0/Newtonsoft.Json.dll\",\n        \"lib/netstandard1.0/Newtonsoft.Json.xml\",\n        \"lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll\",\n        \"lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml\",\n        \"lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll\",\n        \"lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.xml\",\n        \"tools/install.ps1\"\n      ]\n    },\n    \"runtime.native.System/4.0.0\": {\n      \"sha512\": \"zg/NbMRugSd2+UQATSJS+coPQjVQlIwsHWqCx9yX7gLRsYJDM84JNGw9NUQtSRLo86mgNp8kGDxGDnyJqArxlw==\",\n      \"type\": \"package\",\n      \"path\": \"runtime.native.System/4.0.0\",\n      \"files\": [\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/netstandard1.0/_._\",\n        \"runtime.native.System.4.0.0.nupkg.sha512\",\n        \"runtime.native.System.nuspec\"\n      ]\n    },\n    \"runtime.native.System.IO.Compression/4.1.0\": {\n      \"sha512\": \"xMXP/JH9nX2uA2gQmausAX3WrSyM9K7Cw/LTXnHX2YwQPl2ItFA4x5VJbYtrYiLDvFrLJrICXH6OpSNQRpUamg==\",\n      \"type\": \"package\",\n      \"path\": \"runtime.native.System.IO.Compression/4.1.0\",\n      \"files\": [\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/netstandard1.0/_._\",\n        \"runtime.native.System.IO.Compression.4.1.0.nupkg.sha512\",\n        \"runtime.native.System.IO.Compression.nuspec\"\n      ]\n    },\n    \"runtime.native.System.Net.Http/4.0.1\": {\n      \"sha512\": \"0Kyk4d1689s9APzmAydtccI+l3aG26W2z6z1qazRVP9XZxcpEsEbWiMuYIAP6m4RDaei7jduZOdtidNFGE2oJQ==\",\n      \"type\": \"package\",\n      \"path\": \"runtime.native.System.Net.Http/4.0.1\",\n      \"files\": [\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/netstandard1.0/_._\",\n        \"runtime.native.System.Net.Http.4.0.1.nupkg.sha512\",\n        \"runtime.native.System.Net.Http.nuspec\"\n      ]\n    },\n    \"runtime.native.System.Security.Cryptography/4.0.0\": {\n      \"sha512\": \"Ao+u1dJYA36RCX2cJdsYKHnNXWf777rWxNE6DWJKM3oJfvtnfDa37hYKzQwFRSDxboqUFE0XetaJV41R/GZXkg==\",\n      \"type\": \"package\",\n      \"path\": \"runtime.native.System.Security.Cryptography/4.0.0\",\n      \"files\": [\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/netstandard1.0/_._\",\n        \"runtime.native.System.Security.Cryptography.4.0.0.nupkg.sha512\",\n        \"runtime.native.System.Security.Cryptography.nuspec\"\n      ]\n    },\n    \"System.AppContext/4.1.0\": {\n      \"sha512\": \"T9cj9RKt8/je4uKRjgB+uMY4FaiISCWQ57JY7U0L3N8pOm3vNNoDBv23gcRjHJouB34pclRHLp7nd0yjz5oppQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.AppContext/4.1.0\",\n      \"files\": [\n        \"System.AppContext.4.1.0.nupkg.sha512\",\n        \"System.AppContext.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.AppContext.dll\",\n        \"lib/net463/System.AppContext.dll\",\n        \"lib/netcore50/System.AppContext.dll\",\n        \"lib/netstandard1.6/System.AppContext.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.AppContext.dll\",\n        \"ref/net463/System.AppContext.dll\",\n        \"ref/netstandard/_._\",\n        \"ref/netstandard1.3/System.AppContext.dll\",\n        \"ref/netstandard1.3/System.AppContext.xml\",\n        \"ref/netstandard1.3/de/System.AppContext.xml\",\n        \"ref/netstandard1.3/es/System.AppContext.xml\",\n        \"ref/netstandard1.3/fr/System.AppContext.xml\",\n        \"ref/netstandard1.3/it/System.AppContext.xml\",\n        \"ref/netstandard1.3/ja/System.AppContext.xml\",\n        \"ref/netstandard1.3/ko/System.AppContext.xml\",\n        \"ref/netstandard1.3/ru/System.AppContext.xml\",\n        \"ref/netstandard1.3/zh-hans/System.AppContext.xml\",\n        \"ref/netstandard1.3/zh-hant/System.AppContext.xml\",\n        \"ref/netstandard1.6/System.AppContext.dll\",\n        \"ref/netstandard1.6/System.AppContext.xml\",\n        \"ref/netstandard1.6/de/System.AppContext.xml\",\n        \"ref/netstandard1.6/es/System.AppContext.xml\",\n        \"ref/netstandard1.6/fr/System.AppContext.xml\",\n        \"ref/netstandard1.6/it/System.AppContext.xml\",\n        \"ref/netstandard1.6/ja/System.AppContext.xml\",\n        \"ref/netstandard1.6/ko/System.AppContext.xml\",\n        \"ref/netstandard1.6/ru/System.AppContext.xml\",\n        \"ref/netstandard1.6/zh-hans/System.AppContext.xml\",\n        \"ref/netstandard1.6/zh-hant/System.AppContext.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/aot/lib/netcore50/System.AppContext.dll\"\n      ]\n    },\n    \"System.Buffers/4.0.0\": {\n      \"sha512\": \"XL/OWDhDy7gQfDhVi6FXsdUBuaJ9ypyxN0YmEq5qqL9Z61t5LntMlJl7ncHA++kO3NFTwtJ/AYzucBEYUy2XUA==\",\n      \"type\": \"package\",\n      \"path\": \"System.Buffers/4.0.0\",\n      \"files\": [\n        \"System.Buffers.4.0.0.nupkg.sha512\",\n        \"System.Buffers.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/netstandard1.1/.xml\",\n        \"lib/netstandard1.1/System.Buffers.dll\"\n      ]\n    },\n    \"System.Collections/4.0.11\": {\n      \"sha512\": \"SuPicHuwVYJI7bYj2CmhUOUAtGipgG7XJNANrbSY0+HH14b07uF1+dYUIq60XGecq6wi6Oefvab0GX2sZMq7kQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Collections/4.0.11\",\n      \"files\": [\n        \"System.Collections.4.0.11.nupkg.sha512\",\n        \"System.Collections.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Collections.dll\",\n        \"ref/netcore50/System.Collections.xml\",\n        \"ref/netcore50/de/System.Collections.xml\",\n        \"ref/netcore50/es/System.Collections.xml\",\n        \"ref/netcore50/fr/System.Collections.xml\",\n        \"ref/netcore50/it/System.Collections.xml\",\n        \"ref/netcore50/ja/System.Collections.xml\",\n        \"ref/netcore50/ko/System.Collections.xml\",\n        \"ref/netcore50/ru/System.Collections.xml\",\n        \"ref/netcore50/zh-hans/System.Collections.xml\",\n        \"ref/netcore50/zh-hant/System.Collections.xml\",\n        \"ref/netstandard1.0/System.Collections.dll\",\n        \"ref/netstandard1.0/System.Collections.xml\",\n        \"ref/netstandard1.0/de/System.Collections.xml\",\n        \"ref/netstandard1.0/es/System.Collections.xml\",\n        \"ref/netstandard1.0/fr/System.Collections.xml\",\n        \"ref/netstandard1.0/it/System.Collections.xml\",\n        \"ref/netstandard1.0/ja/System.Collections.xml\",\n        \"ref/netstandard1.0/ko/System.Collections.xml\",\n        \"ref/netstandard1.0/ru/System.Collections.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Collections.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Collections.xml\",\n        \"ref/netstandard1.3/System.Collections.dll\",\n        \"ref/netstandard1.3/System.Collections.xml\",\n        \"ref/netstandard1.3/de/System.Collections.xml\",\n        \"ref/netstandard1.3/es/System.Collections.xml\",\n        \"ref/netstandard1.3/fr/System.Collections.xml\",\n        \"ref/netstandard1.3/it/System.Collections.xml\",\n        \"ref/netstandard1.3/ja/System.Collections.xml\",\n        \"ref/netstandard1.3/ko/System.Collections.xml\",\n        \"ref/netstandard1.3/ru/System.Collections.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Collections.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Collections.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Collections.Concurrent/4.0.12\": {\n      \"sha512\": \"XFZaWGYuNyDQfZ/HomndlipMX0c8Lib3zV5CncHHx9+gj8hAP/uREd/iEPiWqatgU4iBau1BkVjOYx/K+qdUsA==\",\n      \"type\": \"package\",\n      \"path\": \"System.Collections.Concurrent/4.0.12\",\n      \"files\": [\n        \"System.Collections.Concurrent.4.0.12.nupkg.sha512\",\n        \"System.Collections.Concurrent.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.Collections.Concurrent.dll\",\n        \"lib/netstandard1.3/System.Collections.Concurrent.dll\",\n        \"lib/portable-net45+win8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Collections.Concurrent.dll\",\n        \"ref/netcore50/System.Collections.Concurrent.xml\",\n        \"ref/netcore50/de/System.Collections.Concurrent.xml\",\n        \"ref/netcore50/es/System.Collections.Concurrent.xml\",\n        \"ref/netcore50/fr/System.Collections.Concurrent.xml\",\n        \"ref/netcore50/it/System.Collections.Concurrent.xml\",\n        \"ref/netcore50/ja/System.Collections.Concurrent.xml\",\n        \"ref/netcore50/ko/System.Collections.Concurrent.xml\",\n        \"ref/netcore50/ru/System.Collections.Concurrent.xml\",\n        \"ref/netcore50/zh-hans/System.Collections.Concurrent.xml\",\n        \"ref/netcore50/zh-hant/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/System.Collections.Concurrent.dll\",\n        \"ref/netstandard1.1/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/de/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/es/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/fr/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/it/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/ja/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/ko/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/ru/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/zh-hans/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.1/zh-hant/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/System.Collections.Concurrent.dll\",\n        \"ref/netstandard1.3/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/de/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/es/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/fr/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/it/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/ja/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/ko/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/ru/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Collections.Concurrent.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Collections.Concurrent.xml\",\n        \"ref/portable-net45+win8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Console/4.0.0\": {\n      \"sha512\": \"BLt4LWLDFoSl9QrTIyaAFNf5D25Cr+uMNw22Hb9p27Z7qg93ZkdoZyfXlSchszNq7bqQaYufV8GhM13j6dJhcw==\",\n      \"type\": \"package\",\n      \"path\": \"System.Console/4.0.0\",\n      \"files\": [\n        \"System.Console.4.0.0.nupkg.sha512\",\n        \"System.Console.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Console.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Console.dll\",\n        \"ref/netstandard1.3/System.Console.dll\",\n        \"ref/netstandard1.3/System.Console.xml\",\n        \"ref/netstandard1.3/de/System.Console.xml\",\n        \"ref/netstandard1.3/es/System.Console.xml\",\n        \"ref/netstandard1.3/fr/System.Console.xml\",\n        \"ref/netstandard1.3/it/System.Console.xml\",\n        \"ref/netstandard1.3/ja/System.Console.xml\",\n        \"ref/netstandard1.3/ko/System.Console.xml\",\n        \"ref/netstandard1.3/ru/System.Console.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Console.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Console.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Diagnostics.Debug/4.0.11\": {\n      \"sha512\": \"3ZLx/Q8De4QDNAnqnJbw3gr3iPU1LkxP3zB80jFZOaRm8gbsQ+Bo6xEzQgTEt7dH/WVrlhHZBU90sJgZNgxvfg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Diagnostics.Debug/4.0.11\",\n      \"files\": [\n        \"System.Diagnostics.Debug.4.0.11.nupkg.sha512\",\n        \"System.Diagnostics.Debug.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Diagnostics.Debug.dll\",\n        \"ref/netcore50/System.Diagnostics.Debug.xml\",\n        \"ref/netcore50/de/System.Diagnostics.Debug.xml\",\n        \"ref/netcore50/es/System.Diagnostics.Debug.xml\",\n        \"ref/netcore50/fr/System.Diagnostics.Debug.xml\",\n        \"ref/netcore50/it/System.Diagnostics.Debug.xml\",\n        \"ref/netcore50/ja/System.Diagnostics.Debug.xml\",\n        \"ref/netcore50/ko/System.Diagnostics.Debug.xml\",\n        \"ref/netcore50/ru/System.Diagnostics.Debug.xml\",\n        \"ref/netcore50/zh-hans/System.Diagnostics.Debug.xml\",\n        \"ref/netcore50/zh-hant/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/System.Diagnostics.Debug.dll\",\n        \"ref/netstandard1.0/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/de/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/es/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/fr/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/it/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/ja/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/ko/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/ru/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/System.Diagnostics.Debug.dll\",\n        \"ref/netstandard1.3/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/de/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/es/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/fr/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/it/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/ja/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/ko/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/ru/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Diagnostics.DiagnosticSource/4.0.0\": {\n      \"sha512\": \"1bNILdvNdzrTryYN0/4635W0bDld4wZhqbrmooZ0Un41eU2f6RBDfCmKYXsllPKq9jP63vIoB11g3AB7uwXGyQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Diagnostics.DiagnosticSource/4.0.0\",\n      \"files\": [\n        \"System.Diagnostics.DiagnosticSource.4.0.0.nupkg.sha512\",\n        \"System.Diagnostics.DiagnosticSource.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/net46/System.Diagnostics.DiagnosticSource.dll\",\n        \"lib/net46/System.Diagnostics.DiagnosticSource.xml\",\n        \"lib/netstandard1.1/System.Diagnostics.DiagnosticSource.dll\",\n        \"lib/netstandard1.1/System.Diagnostics.DiagnosticSource.xml\",\n        \"lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll\",\n        \"lib/netstandard1.3/System.Diagnostics.DiagnosticSource.xml\",\n        \"lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.dll\",\n        \"lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.xml\"\n      ]\n    },\n    \"System.Diagnostics.Tools/4.0.1\": {\n      \"sha512\": \"YlnvA9Bpb/pDyhNodufGBD0Cr9Xwf+yBZlSYUUWbkosLjJYVWL9O0KeXh6/TIJsVHkrKbWnaMifdiiUwSDXJVQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Diagnostics.Tools/4.0.1\",\n      \"files\": [\n        \"System.Diagnostics.Tools.4.0.1.nupkg.sha512\",\n        \"System.Diagnostics.Tools.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Diagnostics.Tools.dll\",\n        \"ref/netcore50/System.Diagnostics.Tools.xml\",\n        \"ref/netcore50/de/System.Diagnostics.Tools.xml\",\n        \"ref/netcore50/es/System.Diagnostics.Tools.xml\",\n        \"ref/netcore50/fr/System.Diagnostics.Tools.xml\",\n        \"ref/netcore50/it/System.Diagnostics.Tools.xml\",\n        \"ref/netcore50/ja/System.Diagnostics.Tools.xml\",\n        \"ref/netcore50/ko/System.Diagnostics.Tools.xml\",\n        \"ref/netcore50/ru/System.Diagnostics.Tools.xml\",\n        \"ref/netcore50/zh-hans/System.Diagnostics.Tools.xml\",\n        \"ref/netcore50/zh-hant/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/System.Diagnostics.Tools.dll\",\n        \"ref/netstandard1.0/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/de/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/es/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/fr/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/it/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/ja/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/ko/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/ru/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Diagnostics.Tools.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Diagnostics.Tools.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Diagnostics.Tracing/4.1.0\": {\n      \"sha512\": \"Vuc4OM2vnTNkxtyLKP4ysBHscmzPVrB6gv6jm9GfdlmiuKHtwM4OyRVOoEg7ENqqNg7S354EYMdUbmAidEw2dA==\",\n      \"type\": \"package\",\n      \"path\": \"System.Diagnostics.Tracing/4.1.0\",\n      \"files\": [\n        \"System.Diagnostics.Tracing.4.1.0.nupkg.sha512\",\n        \"System.Diagnostics.Tracing.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net462/System.Diagnostics.Tracing.dll\",\n        \"lib/portable-net45+win8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net462/System.Diagnostics.Tracing.dll\",\n        \"ref/netcore50/System.Diagnostics.Tracing.dll\",\n        \"ref/netcore50/System.Diagnostics.Tracing.xml\",\n        \"ref/netcore50/de/System.Diagnostics.Tracing.xml\",\n        \"ref/netcore50/es/System.Diagnostics.Tracing.xml\",\n        \"ref/netcore50/fr/System.Diagnostics.Tracing.xml\",\n        \"ref/netcore50/it/System.Diagnostics.Tracing.xml\",\n        \"ref/netcore50/ja/System.Diagnostics.Tracing.xml\",\n        \"ref/netcore50/ko/System.Diagnostics.Tracing.xml\",\n        \"ref/netcore50/ru/System.Diagnostics.Tracing.xml\",\n        \"ref/netcore50/zh-hans/System.Diagnostics.Tracing.xml\",\n        \"ref/netcore50/zh-hant/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/System.Diagnostics.Tracing.dll\",\n        \"ref/netstandard1.1/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/de/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/es/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/fr/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/it/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/ja/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/ko/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/ru/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/zh-hans/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.1/zh-hant/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/System.Diagnostics.Tracing.dll\",\n        \"ref/netstandard1.2/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/de/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/es/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/fr/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/it/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/ja/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/ko/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/ru/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/zh-hans/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.2/zh-hant/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/System.Diagnostics.Tracing.dll\",\n        \"ref/netstandard1.3/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/de/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/es/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/fr/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/it/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/ja/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/ko/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/ru/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/System.Diagnostics.Tracing.dll\",\n        \"ref/netstandard1.5/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/de/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/es/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/fr/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/it/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/ja/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/ko/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/ru/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/zh-hans/System.Diagnostics.Tracing.xml\",\n        \"ref/netstandard1.5/zh-hant/System.Diagnostics.Tracing.xml\",\n        \"ref/portable-net45+win8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Dynamic.Runtime/4.0.11\": {\n      \"sha512\": \"mo6l33TjqA/xuRtbCEcbNL/VCn4JMPoB+bTbQ54LkRAJTXa58GfGM7FG9iKYGpTZuCFph9vb1/KXwiNwKN7AJw==\",\n      \"type\": \"package\",\n      \"path\": \"System.Dynamic.Runtime/4.0.11\",\n      \"files\": [\n        \"System.Dynamic.Runtime.4.0.11.nupkg.sha512\",\n        \"System.Dynamic.Runtime.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.Dynamic.Runtime.dll\",\n        \"lib/netstandard1.3/System.Dynamic.Runtime.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Dynamic.Runtime.dll\",\n        \"ref/netcore50/System.Dynamic.Runtime.xml\",\n        \"ref/netcore50/de/System.Dynamic.Runtime.xml\",\n        \"ref/netcore50/es/System.Dynamic.Runtime.xml\",\n        \"ref/netcore50/fr/System.Dynamic.Runtime.xml\",\n        \"ref/netcore50/it/System.Dynamic.Runtime.xml\",\n        \"ref/netcore50/ja/System.Dynamic.Runtime.xml\",\n        \"ref/netcore50/ko/System.Dynamic.Runtime.xml\",\n        \"ref/netcore50/ru/System.Dynamic.Runtime.xml\",\n        \"ref/netcore50/zh-hans/System.Dynamic.Runtime.xml\",\n        \"ref/netcore50/zh-hant/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/System.Dynamic.Runtime.dll\",\n        \"ref/netstandard1.0/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/de/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/es/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/fr/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/it/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/ja/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/ko/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/ru/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/System.Dynamic.Runtime.dll\",\n        \"ref/netstandard1.3/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/de/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/es/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/fr/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/it/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/ja/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/ko/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/ru/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Dynamic.Runtime.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Dynamic.Runtime.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/aot/lib/netcore50/System.Dynamic.Runtime.dll\"\n      ]\n    },\n    \"System.Globalization/4.0.11\": {\n      \"sha512\": \"dlkZ6jJ6rt9Yj/uGBB7drvBWqZ94ErztOllgVRz3UeqMGPnVCUWEA5cq2OZ5sMdQvl8+rJjFE0z8dalnv8wVRA==\",\n      \"type\": \"package\",\n      \"path\": \"System.Globalization/4.0.11\",\n      \"files\": [\n        \"System.Globalization.4.0.11.nupkg.sha512\",\n        \"System.Globalization.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Globalization.dll\",\n        \"ref/netcore50/System.Globalization.xml\",\n        \"ref/netcore50/de/System.Globalization.xml\",\n        \"ref/netcore50/es/System.Globalization.xml\",\n        \"ref/netcore50/fr/System.Globalization.xml\",\n        \"ref/netcore50/it/System.Globalization.xml\",\n        \"ref/netcore50/ja/System.Globalization.xml\",\n        \"ref/netcore50/ko/System.Globalization.xml\",\n        \"ref/netcore50/ru/System.Globalization.xml\",\n        \"ref/netcore50/zh-hans/System.Globalization.xml\",\n        \"ref/netcore50/zh-hant/System.Globalization.xml\",\n        \"ref/netstandard1.0/System.Globalization.dll\",\n        \"ref/netstandard1.0/System.Globalization.xml\",\n        \"ref/netstandard1.0/de/System.Globalization.xml\",\n        \"ref/netstandard1.0/es/System.Globalization.xml\",\n        \"ref/netstandard1.0/fr/System.Globalization.xml\",\n        \"ref/netstandard1.0/it/System.Globalization.xml\",\n        \"ref/netstandard1.0/ja/System.Globalization.xml\",\n        \"ref/netstandard1.0/ko/System.Globalization.xml\",\n        \"ref/netstandard1.0/ru/System.Globalization.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Globalization.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Globalization.xml\",\n        \"ref/netstandard1.3/System.Globalization.dll\",\n        \"ref/netstandard1.3/System.Globalization.xml\",\n        \"ref/netstandard1.3/de/System.Globalization.xml\",\n        \"ref/netstandard1.3/es/System.Globalization.xml\",\n        \"ref/netstandard1.3/fr/System.Globalization.xml\",\n        \"ref/netstandard1.3/it/System.Globalization.xml\",\n        \"ref/netstandard1.3/ja/System.Globalization.xml\",\n        \"ref/netstandard1.3/ko/System.Globalization.xml\",\n        \"ref/netstandard1.3/ru/System.Globalization.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Globalization.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Globalization.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Globalization.Calendars/4.0.1\": {\n      \"sha512\": \"962x899y6gBQaFylMYAcWGPXiJmPIPN7415XtbTPNG/+TdcDhBUsWZVmPLjECxbRjDQsR+nNFHoQWSP3We43vg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Globalization.Calendars/4.0.1\",\n      \"files\": [\n        \"System.Globalization.Calendars.4.0.1.nupkg.sha512\",\n        \"System.Globalization.Calendars.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Globalization.Calendars.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Globalization.Calendars.dll\",\n        \"ref/netstandard1.3/System.Globalization.Calendars.dll\",\n        \"ref/netstandard1.3/System.Globalization.Calendars.xml\",\n        \"ref/netstandard1.3/de/System.Globalization.Calendars.xml\",\n        \"ref/netstandard1.3/es/System.Globalization.Calendars.xml\",\n        \"ref/netstandard1.3/fr/System.Globalization.Calendars.xml\",\n        \"ref/netstandard1.3/it/System.Globalization.Calendars.xml\",\n        \"ref/netstandard1.3/ja/System.Globalization.Calendars.xml\",\n        \"ref/netstandard1.3/ko/System.Globalization.Calendars.xml\",\n        \"ref/netstandard1.3/ru/System.Globalization.Calendars.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Globalization.Calendars.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Globalization.Calendars.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Globalization.Extensions/4.0.1\": {\n      \"sha512\": \"wsi5FF3HgmY3xslEkK3avLrFRf04lrQESRaIaUL9+u1CtzEPmbZFs45Sv3ASIUxpmBTxkJ6RFLrJ84FjIV19mQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Globalization.Extensions/4.0.1\",\n      \"files\": [\n        \"System.Globalization.Extensions.4.0.1.nupkg.sha512\",\n        \"System.Globalization.Extensions.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Globalization.Extensions.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Globalization.Extensions.dll\",\n        \"ref/netstandard1.3/System.Globalization.Extensions.dll\",\n        \"ref/netstandard1.3/System.Globalization.Extensions.xml\",\n        \"ref/netstandard1.3/de/System.Globalization.Extensions.xml\",\n        \"ref/netstandard1.3/es/System.Globalization.Extensions.xml\",\n        \"ref/netstandard1.3/fr/System.Globalization.Extensions.xml\",\n        \"ref/netstandard1.3/it/System.Globalization.Extensions.xml\",\n        \"ref/netstandard1.3/ja/System.Globalization.Extensions.xml\",\n        \"ref/netstandard1.3/ko/System.Globalization.Extensions.xml\",\n        \"ref/netstandard1.3/ru/System.Globalization.Extensions.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Globalization.Extensions.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Globalization.Extensions.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll\",\n        \"runtimes/win/lib/net46/System.Globalization.Extensions.dll\",\n        \"runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll\"\n      ]\n    },\n    \"System.IO/4.1.0\": {\n      \"sha512\": \"aacsoGIwCqvLgWqVfYZFB8DflfLY/lzuS0GhEWtnZwi3XmZQfoxjznl7yR/Pr+vaMSxsZWLFZgU2OQDM8ESQEg==\",\n      \"type\": \"package\",\n      \"path\": \"System.IO/4.1.0\",\n      \"files\": [\n        \"System.IO.4.1.0.nupkg.sha512\",\n        \"System.IO.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net462/System.IO.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net462/System.IO.dll\",\n        \"ref/netcore50/System.IO.dll\",\n        \"ref/netcore50/System.IO.xml\",\n        \"ref/netcore50/de/System.IO.xml\",\n        \"ref/netcore50/es/System.IO.xml\",\n        \"ref/netcore50/fr/System.IO.xml\",\n        \"ref/netcore50/it/System.IO.xml\",\n        \"ref/netcore50/ja/System.IO.xml\",\n        \"ref/netcore50/ko/System.IO.xml\",\n        \"ref/netcore50/ru/System.IO.xml\",\n        \"ref/netcore50/zh-hans/System.IO.xml\",\n        \"ref/netcore50/zh-hant/System.IO.xml\",\n        \"ref/netstandard1.0/System.IO.dll\",\n        \"ref/netstandard1.0/System.IO.xml\",\n        \"ref/netstandard1.0/de/System.IO.xml\",\n        \"ref/netstandard1.0/es/System.IO.xml\",\n        \"ref/netstandard1.0/fr/System.IO.xml\",\n        \"ref/netstandard1.0/it/System.IO.xml\",\n        \"ref/netstandard1.0/ja/System.IO.xml\",\n        \"ref/netstandard1.0/ko/System.IO.xml\",\n        \"ref/netstandard1.0/ru/System.IO.xml\",\n        \"ref/netstandard1.0/zh-hans/System.IO.xml\",\n        \"ref/netstandard1.0/zh-hant/System.IO.xml\",\n        \"ref/netstandard1.3/System.IO.dll\",\n        \"ref/netstandard1.3/System.IO.xml\",\n        \"ref/netstandard1.3/de/System.IO.xml\",\n        \"ref/netstandard1.3/es/System.IO.xml\",\n        \"ref/netstandard1.3/fr/System.IO.xml\",\n        \"ref/netstandard1.3/it/System.IO.xml\",\n        \"ref/netstandard1.3/ja/System.IO.xml\",\n        \"ref/netstandard1.3/ko/System.IO.xml\",\n        \"ref/netstandard1.3/ru/System.IO.xml\",\n        \"ref/netstandard1.3/zh-hans/System.IO.xml\",\n        \"ref/netstandard1.3/zh-hant/System.IO.xml\",\n        \"ref/netstandard1.5/System.IO.dll\",\n        \"ref/netstandard1.5/System.IO.xml\",\n        \"ref/netstandard1.5/de/System.IO.xml\",\n        \"ref/netstandard1.5/es/System.IO.xml\",\n        \"ref/netstandard1.5/fr/System.IO.xml\",\n        \"ref/netstandard1.5/it/System.IO.xml\",\n        \"ref/netstandard1.5/ja/System.IO.xml\",\n        \"ref/netstandard1.5/ko/System.IO.xml\",\n        \"ref/netstandard1.5/ru/System.IO.xml\",\n        \"ref/netstandard1.5/zh-hans/System.IO.xml\",\n        \"ref/netstandard1.5/zh-hant/System.IO.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.IO.Compression/4.1.0\": {\n      \"sha512\": \"WqC6YYuXqVlUUzw2cgWKfVadga3PayxSNe2oyDhP73V4PVPoeoRnOItFTdqskymmK1oaNwQPm7KlSy4W6pvjhg==\",\n      \"type\": \"package\",\n      \"path\": \"System.IO.Compression/4.1.0\",\n      \"files\": [\n        \"System.IO.Compression.4.1.0.nupkg.sha512\",\n        \"System.IO.Compression.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net46/System.IO.Compression.dll\",\n        \"lib/portable-net45+win8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net46/System.IO.Compression.dll\",\n        \"ref/netcore50/System.IO.Compression.dll\",\n        \"ref/netcore50/System.IO.Compression.xml\",\n        \"ref/netcore50/de/System.IO.Compression.xml\",\n        \"ref/netcore50/es/System.IO.Compression.xml\",\n        \"ref/netcore50/fr/System.IO.Compression.xml\",\n        \"ref/netcore50/it/System.IO.Compression.xml\",\n        \"ref/netcore50/ja/System.IO.Compression.xml\",\n        \"ref/netcore50/ko/System.IO.Compression.xml\",\n        \"ref/netcore50/ru/System.IO.Compression.xml\",\n        \"ref/netcore50/zh-hans/System.IO.Compression.xml\",\n        \"ref/netcore50/zh-hant/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/System.IO.Compression.dll\",\n        \"ref/netstandard1.1/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/de/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/es/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/fr/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/it/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/ja/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/ko/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/ru/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/zh-hans/System.IO.Compression.xml\",\n        \"ref/netstandard1.1/zh-hant/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/System.IO.Compression.dll\",\n        \"ref/netstandard1.3/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/de/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/es/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/fr/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/it/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/ja/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/ko/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/ru/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/zh-hans/System.IO.Compression.xml\",\n        \"ref/netstandard1.3/zh-hant/System.IO.Compression.xml\",\n        \"ref/portable-net45+win8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll\",\n        \"runtimes/win/lib/net46/System.IO.Compression.dll\",\n        \"runtimes/win/lib/netstandard1.3/System.IO.Compression.dll\"\n      ]\n    },\n    \"System.IO.Compression.ZipFile/4.0.1\": {\n      \"sha512\": \"FZwxPY+FwOoQ+58COiltUzcomAPr0lcCR0tdtP8lFEeSLF/yg8Dc6Q77YGkfOP3JC1fYAvZXcctDlVgZyjP8jQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.IO.Compression.ZipFile/4.0.1\",\n      \"files\": [\n        \"System.IO.Compression.ZipFile.4.0.1.nupkg.sha512\",\n        \"System.IO.Compression.ZipFile.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.IO.Compression.ZipFile.dll\",\n        \"lib/netstandard1.3/System.IO.Compression.ZipFile.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.IO.Compression.ZipFile.dll\",\n        \"ref/netstandard1.3/System.IO.Compression.ZipFile.dll\",\n        \"ref/netstandard1.3/System.IO.Compression.ZipFile.xml\",\n        \"ref/netstandard1.3/de/System.IO.Compression.ZipFile.xml\",\n        \"ref/netstandard1.3/es/System.IO.Compression.ZipFile.xml\",\n        \"ref/netstandard1.3/fr/System.IO.Compression.ZipFile.xml\",\n        \"ref/netstandard1.3/it/System.IO.Compression.ZipFile.xml\",\n        \"ref/netstandard1.3/ja/System.IO.Compression.ZipFile.xml\",\n        \"ref/netstandard1.3/ko/System.IO.Compression.ZipFile.xml\",\n        \"ref/netstandard1.3/ru/System.IO.Compression.ZipFile.xml\",\n        \"ref/netstandard1.3/zh-hans/System.IO.Compression.ZipFile.xml\",\n        \"ref/netstandard1.3/zh-hant/System.IO.Compression.ZipFile.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.IO.FileSystem/4.0.1\": {\n      \"sha512\": \"6RxK3OUic/6+xk0IiWjEPszbRG9gzXaYisLbbChS2Im+a3Oqb3PayrR/Z6BKEh/JsEk4gOOKpTzDDBS4gq6krw==\",\n      \"type\": \"package\",\n      \"path\": \"System.IO.FileSystem/4.0.1\",\n      \"files\": [\n        \"System.IO.FileSystem.4.0.1.nupkg.sha512\",\n        \"System.IO.FileSystem.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.IO.FileSystem.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.IO.FileSystem.dll\",\n        \"ref/netstandard1.3/System.IO.FileSystem.dll\",\n        \"ref/netstandard1.3/System.IO.FileSystem.xml\",\n        \"ref/netstandard1.3/de/System.IO.FileSystem.xml\",\n        \"ref/netstandard1.3/es/System.IO.FileSystem.xml\",\n        \"ref/netstandard1.3/fr/System.IO.FileSystem.xml\",\n        \"ref/netstandard1.3/it/System.IO.FileSystem.xml\",\n        \"ref/netstandard1.3/ja/System.IO.FileSystem.xml\",\n        \"ref/netstandard1.3/ko/System.IO.FileSystem.xml\",\n        \"ref/netstandard1.3/ru/System.IO.FileSystem.xml\",\n        \"ref/netstandard1.3/zh-hans/System.IO.FileSystem.xml\",\n        \"ref/netstandard1.3/zh-hant/System.IO.FileSystem.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.IO.FileSystem.Primitives/4.0.1\": {\n      \"sha512\": \"58wQfv50QgewCs2owRm5kEMWDeFmlaf2ICMq5ZfLLN+dVXi0MEf8TVe9QKCOWUpdOkZL+egiOP1I67Lj5mdtfw==\",\n      \"type\": \"package\",\n      \"path\": \"System.IO.FileSystem.Primitives/4.0.1\",\n      \"files\": [\n        \"System.IO.FileSystem.Primitives.4.0.1.nupkg.sha512\",\n        \"System.IO.FileSystem.Primitives.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.IO.FileSystem.Primitives.dll\",\n        \"lib/netstandard1.3/System.IO.FileSystem.Primitives.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.IO.FileSystem.Primitives.dll\",\n        \"ref/netstandard1.3/System.IO.FileSystem.Primitives.dll\",\n        \"ref/netstandard1.3/System.IO.FileSystem.Primitives.xml\",\n        \"ref/netstandard1.3/de/System.IO.FileSystem.Primitives.xml\",\n        \"ref/netstandard1.3/es/System.IO.FileSystem.Primitives.xml\",\n        \"ref/netstandard1.3/fr/System.IO.FileSystem.Primitives.xml\",\n        \"ref/netstandard1.3/it/System.IO.FileSystem.Primitives.xml\",\n        \"ref/netstandard1.3/ja/System.IO.FileSystem.Primitives.xml\",\n        \"ref/netstandard1.3/ko/System.IO.FileSystem.Primitives.xml\",\n        \"ref/netstandard1.3/ru/System.IO.FileSystem.Primitives.xml\",\n        \"ref/netstandard1.3/zh-hans/System.IO.FileSystem.Primitives.xml\",\n        \"ref/netstandard1.3/zh-hant/System.IO.FileSystem.Primitives.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Linq/4.1.0\": {\n      \"sha512\": \"1tUq0uRHAc9xvZrB3vEte0emh86Lzx5UracoyKFhKW+PZiWmIgX6SQJ1hZwnK76Qz/FiMp3S9ZxCeaTab7wk0Q==\",\n      \"type\": \"package\",\n      \"path\": \"System.Linq/4.1.0\",\n      \"files\": [\n        \"System.Linq.4.1.0.nupkg.sha512\",\n        \"System.Linq.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net463/System.Linq.dll\",\n        \"lib/netcore50/System.Linq.dll\",\n        \"lib/netstandard1.6/System.Linq.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net463/System.Linq.dll\",\n        \"ref/netcore50/System.Linq.dll\",\n        \"ref/netcore50/System.Linq.xml\",\n        \"ref/netcore50/de/System.Linq.xml\",\n        \"ref/netcore50/es/System.Linq.xml\",\n        \"ref/netcore50/fr/System.Linq.xml\",\n        \"ref/netcore50/it/System.Linq.xml\",\n        \"ref/netcore50/ja/System.Linq.xml\",\n        \"ref/netcore50/ko/System.Linq.xml\",\n        \"ref/netcore50/ru/System.Linq.xml\",\n        \"ref/netcore50/zh-hans/System.Linq.xml\",\n        \"ref/netcore50/zh-hant/System.Linq.xml\",\n        \"ref/netstandard1.0/System.Linq.dll\",\n        \"ref/netstandard1.0/System.Linq.xml\",\n        \"ref/netstandard1.0/de/System.Linq.xml\",\n        \"ref/netstandard1.0/es/System.Linq.xml\",\n        \"ref/netstandard1.0/fr/System.Linq.xml\",\n        \"ref/netstandard1.0/it/System.Linq.xml\",\n        \"ref/netstandard1.0/ja/System.Linq.xml\",\n        \"ref/netstandard1.0/ko/System.Linq.xml\",\n        \"ref/netstandard1.0/ru/System.Linq.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Linq.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Linq.xml\",\n        \"ref/netstandard1.6/System.Linq.dll\",\n        \"ref/netstandard1.6/System.Linq.xml\",\n        \"ref/netstandard1.6/de/System.Linq.xml\",\n        \"ref/netstandard1.6/es/System.Linq.xml\",\n        \"ref/netstandard1.6/fr/System.Linq.xml\",\n        \"ref/netstandard1.6/it/System.Linq.xml\",\n        \"ref/netstandard1.6/ja/System.Linq.xml\",\n        \"ref/netstandard1.6/ko/System.Linq.xml\",\n        \"ref/netstandard1.6/ru/System.Linq.xml\",\n        \"ref/netstandard1.6/zh-hans/System.Linq.xml\",\n        \"ref/netstandard1.6/zh-hant/System.Linq.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Linq.Expressions/4.1.0\": {\n      \"sha512\": \"jy/SFGKT+UYZdT91L3LNoJyaNpHoTANT7iindYuW3edsaaiVhRs+d7ZCGeIAErp16YW31xuSe2tOS3G2BtWOww==\",\n      \"type\": \"package\",\n      \"path\": \"System.Linq.Expressions/4.1.0\",\n      \"files\": [\n        \"System.Linq.Expressions.4.1.0.nupkg.sha512\",\n        \"System.Linq.Expressions.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net463/System.Linq.Expressions.dll\",\n        \"lib/netcore50/System.Linq.Expressions.dll\",\n        \"lib/netstandard1.6/System.Linq.Expressions.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net463/System.Linq.Expressions.dll\",\n        \"ref/netcore50/System.Linq.Expressions.dll\",\n        \"ref/netcore50/System.Linq.Expressions.xml\",\n        \"ref/netcore50/de/System.Linq.Expressions.xml\",\n        \"ref/netcore50/es/System.Linq.Expressions.xml\",\n        \"ref/netcore50/fr/System.Linq.Expressions.xml\",\n        \"ref/netcore50/it/System.Linq.Expressions.xml\",\n        \"ref/netcore50/ja/System.Linq.Expressions.xml\",\n        \"ref/netcore50/ko/System.Linq.Expressions.xml\",\n        \"ref/netcore50/ru/System.Linq.Expressions.xml\",\n        \"ref/netcore50/zh-hans/System.Linq.Expressions.xml\",\n        \"ref/netcore50/zh-hant/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/System.Linq.Expressions.dll\",\n        \"ref/netstandard1.0/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/de/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/es/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/fr/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/it/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/ja/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/ko/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/ru/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/System.Linq.Expressions.dll\",\n        \"ref/netstandard1.3/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/de/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/es/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/fr/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/it/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/ja/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/ko/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/ru/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/System.Linq.Expressions.dll\",\n        \"ref/netstandard1.6/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/de/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/es/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/fr/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/it/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/ja/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/ko/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/ru/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/zh-hans/System.Linq.Expressions.xml\",\n        \"ref/netstandard1.6/zh-hant/System.Linq.Expressions.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/aot/lib/netcore50/System.Linq.Expressions.dll\"\n      ]\n    },\n    \"System.Net.Http/4.1.0\": {\n      \"sha512\": \"Exg1Wp7Kqmktqh/rbNIYqk1EXrf2xvOyUt3IA/P0ZpeuI8EiNioV2vHuKP9pzIWtbrRuX5sa+D5GZUSCcNARXw==\",\n      \"type\": \"package\",\n      \"path\": \"System.Net.Http/4.1.0\",\n      \"files\": [\n        \"System.Net.Http.4.1.0.nupkg.sha512\",\n        \"System.Net.Http.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/Xamarinmac20/_._\",\n        \"lib/monoandroid10/_._\",\n        \"lib/monotouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net46/System.Net.Http.dll\",\n        \"lib/portable-net45+win8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/Xamarinmac20/_._\",\n        \"ref/monoandroid10/_._\",\n        \"ref/monotouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net46/System.Net.Http.dll\",\n        \"ref/net46/System.Net.Http.xml\",\n        \"ref/net46/de/System.Net.Http.xml\",\n        \"ref/net46/es/System.Net.Http.xml\",\n        \"ref/net46/fr/System.Net.Http.xml\",\n        \"ref/net46/it/System.Net.Http.xml\",\n        \"ref/net46/ja/System.Net.Http.xml\",\n        \"ref/net46/ko/System.Net.Http.xml\",\n        \"ref/net46/ru/System.Net.Http.xml\",\n        \"ref/net46/zh-hans/System.Net.Http.xml\",\n        \"ref/net46/zh-hant/System.Net.Http.xml\",\n        \"ref/netcore50/System.Net.Http.dll\",\n        \"ref/netcore50/System.Net.Http.xml\",\n        \"ref/netcore50/de/System.Net.Http.xml\",\n        \"ref/netcore50/es/System.Net.Http.xml\",\n        \"ref/netcore50/fr/System.Net.Http.xml\",\n        \"ref/netcore50/it/System.Net.Http.xml\",\n        \"ref/netcore50/ja/System.Net.Http.xml\",\n        \"ref/netcore50/ko/System.Net.Http.xml\",\n        \"ref/netcore50/ru/System.Net.Http.xml\",\n        \"ref/netcore50/zh-hans/System.Net.Http.xml\",\n        \"ref/netcore50/zh-hant/System.Net.Http.xml\",\n        \"ref/netstandard1.1/System.Net.Http.dll\",\n        \"ref/netstandard1.1/System.Net.Http.xml\",\n        \"ref/netstandard1.1/de/System.Net.Http.xml\",\n        \"ref/netstandard1.1/es/System.Net.Http.xml\",\n        \"ref/netstandard1.1/fr/System.Net.Http.xml\",\n        \"ref/netstandard1.1/it/System.Net.Http.xml\",\n        \"ref/netstandard1.1/ja/System.Net.Http.xml\",\n        \"ref/netstandard1.1/ko/System.Net.Http.xml\",\n        \"ref/netstandard1.1/ru/System.Net.Http.xml\",\n        \"ref/netstandard1.1/zh-hans/System.Net.Http.xml\",\n        \"ref/netstandard1.1/zh-hant/System.Net.Http.xml\",\n        \"ref/netstandard1.3/System.Net.Http.dll\",\n        \"ref/netstandard1.3/System.Net.Http.xml\",\n        \"ref/netstandard1.3/de/System.Net.Http.xml\",\n        \"ref/netstandard1.3/es/System.Net.Http.xml\",\n        \"ref/netstandard1.3/fr/System.Net.Http.xml\",\n        \"ref/netstandard1.3/it/System.Net.Http.xml\",\n        \"ref/netstandard1.3/ja/System.Net.Http.xml\",\n        \"ref/netstandard1.3/ko/System.Net.Http.xml\",\n        \"ref/netstandard1.3/ru/System.Net.Http.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Net.Http.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Net.Http.xml\",\n        \"ref/portable-net45+win8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/unix/lib/netstandard1.6/System.Net.Http.dll\",\n        \"runtimes/win/lib/net46/System.Net.Http.dll\",\n        \"runtimes/win/lib/netcore50/System.Net.Http.dll\",\n        \"runtimes/win/lib/netstandard1.3/System.Net.Http.dll\"\n      ]\n    },\n    \"System.Net.Primitives/4.0.11\": {\n      \"sha512\": \"svRy7nZOUptRg622rMcirJBuCSOOt2A94f8+afmt7HszaBVaqu3v6rrem4u2ZHdW0Rvk25cj+Jb8fDPMQngK3w==\",\n      \"type\": \"package\",\n      \"path\": \"System.Net.Primitives/4.0.11\",\n      \"files\": [\n        \"System.Net.Primitives.4.0.11.nupkg.sha512\",\n        \"System.Net.Primitives.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Net.Primitives.dll\",\n        \"ref/netcore50/System.Net.Primitives.xml\",\n        \"ref/netcore50/de/System.Net.Primitives.xml\",\n        \"ref/netcore50/es/System.Net.Primitives.xml\",\n        \"ref/netcore50/fr/System.Net.Primitives.xml\",\n        \"ref/netcore50/it/System.Net.Primitives.xml\",\n        \"ref/netcore50/ja/System.Net.Primitives.xml\",\n        \"ref/netcore50/ko/System.Net.Primitives.xml\",\n        \"ref/netcore50/ru/System.Net.Primitives.xml\",\n        \"ref/netcore50/zh-hans/System.Net.Primitives.xml\",\n        \"ref/netcore50/zh-hant/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/System.Net.Primitives.dll\",\n        \"ref/netstandard1.0/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/de/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/es/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/fr/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/it/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/ja/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/ko/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/ru/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Net.Primitives.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/System.Net.Primitives.dll\",\n        \"ref/netstandard1.1/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/de/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/es/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/fr/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/it/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/ja/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/ko/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/ru/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/zh-hans/System.Net.Primitives.xml\",\n        \"ref/netstandard1.1/zh-hant/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/System.Net.Primitives.dll\",\n        \"ref/netstandard1.3/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/de/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/es/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/fr/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/it/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/ja/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/ko/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/ru/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Net.Primitives.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Net.Primitives.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Net.Sockets/4.1.0\": {\n      \"sha512\": \"4yYs0WPAv7OdYGXZpmJ19USjiV9QX9r4pTNrHUgdsjjMxrLtXO2hGplU+v0TrD6TU2ygdEjSYCi3zgJhYqY4bw==\",\n      \"type\": \"package\",\n      \"path\": \"System.Net.Sockets/4.1.0\",\n      \"files\": [\n        \"System.Net.Sockets.4.1.0.nupkg.sha512\",\n        \"System.Net.Sockets.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Net.Sockets.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Net.Sockets.dll\",\n        \"ref/netstandard1.3/System.Net.Sockets.dll\",\n        \"ref/netstandard1.3/System.Net.Sockets.xml\",\n        \"ref/netstandard1.3/de/System.Net.Sockets.xml\",\n        \"ref/netstandard1.3/es/System.Net.Sockets.xml\",\n        \"ref/netstandard1.3/fr/System.Net.Sockets.xml\",\n        \"ref/netstandard1.3/it/System.Net.Sockets.xml\",\n        \"ref/netstandard1.3/ja/System.Net.Sockets.xml\",\n        \"ref/netstandard1.3/ko/System.Net.Sockets.xml\",\n        \"ref/netstandard1.3/ru/System.Net.Sockets.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Net.Sockets.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Net.Sockets.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.ObjectModel/4.0.12\": {\n      \"sha512\": \"sbJ21bsz5F0aJuRRlodMF8glEFfy++HwudqyvDyQLiJqEtJ+J6c7z1JuB9YmIDnPbpQwAaychjc1+/LeFp/KcA==\",\n      \"type\": \"package\",\n      \"path\": \"System.ObjectModel/4.0.12\",\n      \"files\": [\n        \"System.ObjectModel.4.0.12.nupkg.sha512\",\n        \"System.ObjectModel.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.ObjectModel.dll\",\n        \"lib/netstandard1.3/System.ObjectModel.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.ObjectModel.dll\",\n        \"ref/netcore50/System.ObjectModel.xml\",\n        \"ref/netcore50/de/System.ObjectModel.xml\",\n        \"ref/netcore50/es/System.ObjectModel.xml\",\n        \"ref/netcore50/fr/System.ObjectModel.xml\",\n        \"ref/netcore50/it/System.ObjectModel.xml\",\n        \"ref/netcore50/ja/System.ObjectModel.xml\",\n        \"ref/netcore50/ko/System.ObjectModel.xml\",\n        \"ref/netcore50/ru/System.ObjectModel.xml\",\n        \"ref/netcore50/zh-hans/System.ObjectModel.xml\",\n        \"ref/netcore50/zh-hant/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/System.ObjectModel.dll\",\n        \"ref/netstandard1.0/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/de/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/es/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/fr/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/it/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/ja/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/ko/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/ru/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/zh-hans/System.ObjectModel.xml\",\n        \"ref/netstandard1.0/zh-hant/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/System.ObjectModel.dll\",\n        \"ref/netstandard1.3/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/de/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/es/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/fr/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/it/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/ja/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/ko/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/ru/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/zh-hans/System.ObjectModel.xml\",\n        \"ref/netstandard1.3/zh-hant/System.ObjectModel.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Reflection/4.1.0\": {\n      \"sha512\": \"AkVQr5VlJCdzfk+UHgquE6DJJ3HYsJrVwb8s7+mxJxzsFjyRJl7wYyZvXMrfBqJmRpzgPofgVBJJt4lvBOTupA==\",\n      \"type\": \"package\",\n      \"path\": \"System.Reflection/4.1.0\",\n      \"files\": [\n        \"System.Reflection.4.1.0.nupkg.sha512\",\n        \"System.Reflection.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net462/System.Reflection.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net462/System.Reflection.dll\",\n        \"ref/netcore50/System.Reflection.dll\",\n        \"ref/netcore50/System.Reflection.xml\",\n        \"ref/netcore50/de/System.Reflection.xml\",\n        \"ref/netcore50/es/System.Reflection.xml\",\n        \"ref/netcore50/fr/System.Reflection.xml\",\n        \"ref/netcore50/it/System.Reflection.xml\",\n        \"ref/netcore50/ja/System.Reflection.xml\",\n        \"ref/netcore50/ko/System.Reflection.xml\",\n        \"ref/netcore50/ru/System.Reflection.xml\",\n        \"ref/netcore50/zh-hans/System.Reflection.xml\",\n        \"ref/netcore50/zh-hant/System.Reflection.xml\",\n        \"ref/netstandard1.0/System.Reflection.dll\",\n        \"ref/netstandard1.0/System.Reflection.xml\",\n        \"ref/netstandard1.0/de/System.Reflection.xml\",\n        \"ref/netstandard1.0/es/System.Reflection.xml\",\n        \"ref/netstandard1.0/fr/System.Reflection.xml\",\n        \"ref/netstandard1.0/it/System.Reflection.xml\",\n        \"ref/netstandard1.0/ja/System.Reflection.xml\",\n        \"ref/netstandard1.0/ko/System.Reflection.xml\",\n        \"ref/netstandard1.0/ru/System.Reflection.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Reflection.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Reflection.xml\",\n        \"ref/netstandard1.3/System.Reflection.dll\",\n        \"ref/netstandard1.3/System.Reflection.xml\",\n        \"ref/netstandard1.3/de/System.Reflection.xml\",\n        \"ref/netstandard1.3/es/System.Reflection.xml\",\n        \"ref/netstandard1.3/fr/System.Reflection.xml\",\n        \"ref/netstandard1.3/it/System.Reflection.xml\",\n        \"ref/netstandard1.3/ja/System.Reflection.xml\",\n        \"ref/netstandard1.3/ko/System.Reflection.xml\",\n        \"ref/netstandard1.3/ru/System.Reflection.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Reflection.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Reflection.xml\",\n        \"ref/netstandard1.5/System.Reflection.dll\",\n        \"ref/netstandard1.5/System.Reflection.xml\",\n        \"ref/netstandard1.5/de/System.Reflection.xml\",\n        \"ref/netstandard1.5/es/System.Reflection.xml\",\n        \"ref/netstandard1.5/fr/System.Reflection.xml\",\n        \"ref/netstandard1.5/it/System.Reflection.xml\",\n        \"ref/netstandard1.5/ja/System.Reflection.xml\",\n        \"ref/netstandard1.5/ko/System.Reflection.xml\",\n        \"ref/netstandard1.5/ru/System.Reflection.xml\",\n        \"ref/netstandard1.5/zh-hans/System.Reflection.xml\",\n        \"ref/netstandard1.5/zh-hant/System.Reflection.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Reflection.Emit/4.0.1\": {\n      \"sha512\": \"78w2PN55KRTD3GOn5c8LGkOLqeL/mHuM4ewlV2TbI3Itu97ziZ7WvtcsyVDuB9vPJTJeOc+RythqIoWhf1dKNQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Reflection.Emit/4.0.1\",\n      \"files\": [\n        \"System.Reflection.Emit.4.0.1.nupkg.sha512\",\n        \"System.Reflection.Emit.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.Reflection.Emit.dll\",\n        \"lib/netstandard1.3/System.Reflection.Emit.dll\",\n        \"lib/xamarinmac20/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netstandard1.1/System.Reflection.Emit.dll\",\n        \"ref/netstandard1.1/System.Reflection.Emit.xml\",\n        \"ref/netstandard1.1/de/System.Reflection.Emit.xml\",\n        \"ref/netstandard1.1/es/System.Reflection.Emit.xml\",\n        \"ref/netstandard1.1/fr/System.Reflection.Emit.xml\",\n        \"ref/netstandard1.1/it/System.Reflection.Emit.xml\",\n        \"ref/netstandard1.1/ja/System.Reflection.Emit.xml\",\n        \"ref/netstandard1.1/ko/System.Reflection.Emit.xml\",\n        \"ref/netstandard1.1/ru/System.Reflection.Emit.xml\",\n        \"ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml\",\n        \"ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml\",\n        \"ref/xamarinmac20/_._\"\n      ]\n    },\n    \"System.Reflection.Emit.ILGeneration/4.0.1\": {\n      \"sha512\": \"6CZgDCpbJNKxzxHNO6Vd+FX4lXduWfNjGI6FJBt7Y0n5e4cN5H6tzD+DDm0GDY3jj+zUtem5WzOXHJE6Tn6a/Q==\",\n      \"type\": \"package\",\n      \"path\": \"System.Reflection.Emit.ILGeneration/4.0.1\",\n      \"files\": [\n        \"System.Reflection.Emit.ILGeneration.4.0.1.nupkg.sha512\",\n        \"System.Reflection.Emit.ILGeneration.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.Reflection.Emit.ILGeneration.dll\",\n        \"lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll\",\n        \"lib/portable-net45+wp8/_._\",\n        \"lib/wp80/_._\",\n        \"ref/net45/_._\",\n        \"ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll\",\n        \"ref/netstandard1.0/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/netstandard1.0/de/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/netstandard1.0/es/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/netstandard1.0/fr/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/netstandard1.0/it/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/netstandard1.0/ja/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/netstandard1.0/ko/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/netstandard1.0/ru/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Reflection.Emit.ILGeneration.xml\",\n        \"ref/portable-net45+wp8/_._\",\n        \"ref/wp80/_._\",\n        \"runtimes/aot/lib/netcore50/_._\"\n      ]\n    },\n    \"System.Reflection.Emit.Lightweight/4.0.1\": {\n      \"sha512\": \"KJzuAxjyGuNI1ae7ueQnktw7/PZEZ6Jew64ZJHF+9hpftcDS7TD0tISYc2xE5G5OM870JD+fTxPI1z28cN75xQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Reflection.Emit.Lightweight/4.0.1\",\n      \"files\": [\n        \"System.Reflection.Emit.Lightweight.4.0.1.nupkg.sha512\",\n        \"System.Reflection.Emit.Lightweight.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.Reflection.Emit.Lightweight.dll\",\n        \"lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll\",\n        \"lib/portable-net45+wp8/_._\",\n        \"lib/wp80/_._\",\n        \"ref/net45/_._\",\n        \"ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll\",\n        \"ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml\",\n        \"ref/portable-net45+wp8/_._\",\n        \"ref/wp80/_._\",\n        \"runtimes/aot/lib/netcore50/_._\"\n      ]\n    },\n    \"System.Reflection.Extensions/4.0.1\": {\n      \"sha512\": \"xbALJfzxgs1/jtfltoS8+tJF57THuXN2+iOv9HWPE/Ol7cBIIEglUCY7llDkKBlyXzzV9v+BpQOYK1ps6lWsMQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Reflection.Extensions/4.0.1\",\n      \"files\": [\n        \"System.Reflection.Extensions.4.0.1.nupkg.sha512\",\n        \"System.Reflection.Extensions.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Reflection.Extensions.dll\",\n        \"ref/netcore50/System.Reflection.Extensions.xml\",\n        \"ref/netcore50/de/System.Reflection.Extensions.xml\",\n        \"ref/netcore50/es/System.Reflection.Extensions.xml\",\n        \"ref/netcore50/fr/System.Reflection.Extensions.xml\",\n        \"ref/netcore50/it/System.Reflection.Extensions.xml\",\n        \"ref/netcore50/ja/System.Reflection.Extensions.xml\",\n        \"ref/netcore50/ko/System.Reflection.Extensions.xml\",\n        \"ref/netcore50/ru/System.Reflection.Extensions.xml\",\n        \"ref/netcore50/zh-hans/System.Reflection.Extensions.xml\",\n        \"ref/netcore50/zh-hant/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/System.Reflection.Extensions.dll\",\n        \"ref/netstandard1.0/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/de/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/es/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/fr/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/it/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/ja/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/ko/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/ru/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Reflection.Extensions.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Reflection.Extensions.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Reflection.Primitives/4.0.1\": {\n      \"sha512\": \"QD0i9BS7v4eMpSjFOlkXVhEU/VOD0hkC9T57GaSdBbh3vekbnL1KsudBH16Gf4AauH6CcFRAcbjuVkj+ZV2h4g==\",\n      \"type\": \"package\",\n      \"path\": \"System.Reflection.Primitives/4.0.1\",\n      \"files\": [\n        \"System.Reflection.Primitives.4.0.1.nupkg.sha512\",\n        \"System.Reflection.Primitives.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Reflection.Primitives.dll\",\n        \"ref/netcore50/System.Reflection.Primitives.xml\",\n        \"ref/netcore50/de/System.Reflection.Primitives.xml\",\n        \"ref/netcore50/es/System.Reflection.Primitives.xml\",\n        \"ref/netcore50/fr/System.Reflection.Primitives.xml\",\n        \"ref/netcore50/it/System.Reflection.Primitives.xml\",\n        \"ref/netcore50/ja/System.Reflection.Primitives.xml\",\n        \"ref/netcore50/ko/System.Reflection.Primitives.xml\",\n        \"ref/netcore50/ru/System.Reflection.Primitives.xml\",\n        \"ref/netcore50/zh-hans/System.Reflection.Primitives.xml\",\n        \"ref/netcore50/zh-hant/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/System.Reflection.Primitives.dll\",\n        \"ref/netstandard1.0/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/de/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/es/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/fr/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/it/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/ja/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/ko/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/ru/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Reflection.TypeExtensions/4.1.0\": {\n      \"sha512\": \"+Mphr2/ChE98e7oMPFXDkFp/Gjd/Ch/UY84i1XgDgpg8NlnVK3lf4OwREwerNUhBV0ujhm9Qkh2d8YkxhlcT4g==\",\n      \"type\": \"package\",\n      \"path\": \"System.Reflection.TypeExtensions/4.1.0\",\n      \"files\": [\n        \"System.Reflection.TypeExtensions.4.1.0.nupkg.sha512\",\n        \"System.Reflection.TypeExtensions.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Reflection.TypeExtensions.dll\",\n        \"lib/net462/System.Reflection.TypeExtensions.dll\",\n        \"lib/netcore50/System.Reflection.TypeExtensions.dll\",\n        \"lib/netstandard1.5/System.Reflection.TypeExtensions.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Reflection.TypeExtensions.dll\",\n        \"ref/net462/System.Reflection.TypeExtensions.dll\",\n        \"ref/netstandard1.3/System.Reflection.TypeExtensions.dll\",\n        \"ref/netstandard1.3/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.3/de/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.3/es/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.3/fr/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.3/it/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.3/ja/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.3/ko/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.3/ru/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/System.Reflection.TypeExtensions.dll\",\n        \"ref/netstandard1.5/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/de/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/es/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/fr/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/it/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/ja/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/ko/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/ru/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/zh-hans/System.Reflection.TypeExtensions.xml\",\n        \"ref/netstandard1.5/zh-hant/System.Reflection.TypeExtensions.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/aot/lib/netcore50/System.Reflection.TypeExtensions.dll\"\n      ]\n    },\n    \"System.Resources.ResourceManager/4.0.1\": {\n      \"sha512\": \"kB67pWsjh4QH9ww23uKt/zTd65XN2jMCA0ZNwr+C1TILo8692Br0KtKQblBfN3DQuFiEl+1MYv+pPpkVJlMN+A==\",\n      \"type\": \"package\",\n      \"path\": \"System.Resources.ResourceManager/4.0.1\",\n      \"files\": [\n        \"System.Resources.ResourceManager.4.0.1.nupkg.sha512\",\n        \"System.Resources.ResourceManager.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Resources.ResourceManager.dll\",\n        \"ref/netcore50/System.Resources.ResourceManager.xml\",\n        \"ref/netcore50/de/System.Resources.ResourceManager.xml\",\n        \"ref/netcore50/es/System.Resources.ResourceManager.xml\",\n        \"ref/netcore50/fr/System.Resources.ResourceManager.xml\",\n        \"ref/netcore50/it/System.Resources.ResourceManager.xml\",\n        \"ref/netcore50/ja/System.Resources.ResourceManager.xml\",\n        \"ref/netcore50/ko/System.Resources.ResourceManager.xml\",\n        \"ref/netcore50/ru/System.Resources.ResourceManager.xml\",\n        \"ref/netcore50/zh-hans/System.Resources.ResourceManager.xml\",\n        \"ref/netcore50/zh-hant/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/System.Resources.ResourceManager.dll\",\n        \"ref/netstandard1.0/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/de/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/es/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/fr/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/it/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/ja/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/ko/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/ru/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Runtime/4.1.0\": {\n      \"sha512\": \"/k532PHTaDa7fouSoVKiooY7h+npY1ySLUV5Ohd7mfQYQMU+ruUrxZOFdTbVvRLbHb+IuY5xBaelYtIoZ/iOAQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Runtime/4.1.0\",\n      \"files\": [\n        \"System.Runtime.4.1.0.nupkg.sha512\",\n        \"System.Runtime.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net462/System.Runtime.dll\",\n        \"lib/portable-net45+win8+wp80+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net462/System.Runtime.dll\",\n        \"ref/netcore50/System.Runtime.dll\",\n        \"ref/netcore50/System.Runtime.xml\",\n        \"ref/netcore50/de/System.Runtime.xml\",\n        \"ref/netcore50/es/System.Runtime.xml\",\n        \"ref/netcore50/fr/System.Runtime.xml\",\n        \"ref/netcore50/it/System.Runtime.xml\",\n        \"ref/netcore50/ja/System.Runtime.xml\",\n        \"ref/netcore50/ko/System.Runtime.xml\",\n        \"ref/netcore50/ru/System.Runtime.xml\",\n        \"ref/netcore50/zh-hans/System.Runtime.xml\",\n        \"ref/netcore50/zh-hant/System.Runtime.xml\",\n        \"ref/netstandard1.0/System.Runtime.dll\",\n        \"ref/netstandard1.0/System.Runtime.xml\",\n        \"ref/netstandard1.0/de/System.Runtime.xml\",\n        \"ref/netstandard1.0/es/System.Runtime.xml\",\n        \"ref/netstandard1.0/fr/System.Runtime.xml\",\n        \"ref/netstandard1.0/it/System.Runtime.xml\",\n        \"ref/netstandard1.0/ja/System.Runtime.xml\",\n        \"ref/netstandard1.0/ko/System.Runtime.xml\",\n        \"ref/netstandard1.0/ru/System.Runtime.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Runtime.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Runtime.xml\",\n        \"ref/netstandard1.2/System.Runtime.dll\",\n        \"ref/netstandard1.2/System.Runtime.xml\",\n        \"ref/netstandard1.2/de/System.Runtime.xml\",\n        \"ref/netstandard1.2/es/System.Runtime.xml\",\n        \"ref/netstandard1.2/fr/System.Runtime.xml\",\n        \"ref/netstandard1.2/it/System.Runtime.xml\",\n        \"ref/netstandard1.2/ja/System.Runtime.xml\",\n        \"ref/netstandard1.2/ko/System.Runtime.xml\",\n        \"ref/netstandard1.2/ru/System.Runtime.xml\",\n        \"ref/netstandard1.2/zh-hans/System.Runtime.xml\",\n        \"ref/netstandard1.2/zh-hant/System.Runtime.xml\",\n        \"ref/netstandard1.3/System.Runtime.dll\",\n        \"ref/netstandard1.3/System.Runtime.xml\",\n        \"ref/netstandard1.3/de/System.Runtime.xml\",\n        \"ref/netstandard1.3/es/System.Runtime.xml\",\n        \"ref/netstandard1.3/fr/System.Runtime.xml\",\n        \"ref/netstandard1.3/it/System.Runtime.xml\",\n        \"ref/netstandard1.3/ja/System.Runtime.xml\",\n        \"ref/netstandard1.3/ko/System.Runtime.xml\",\n        \"ref/netstandard1.3/ru/System.Runtime.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Runtime.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Runtime.xml\",\n        \"ref/netstandard1.5/System.Runtime.dll\",\n        \"ref/netstandard1.5/System.Runtime.xml\",\n        \"ref/netstandard1.5/de/System.Runtime.xml\",\n        \"ref/netstandard1.5/es/System.Runtime.xml\",\n        \"ref/netstandard1.5/fr/System.Runtime.xml\",\n        \"ref/netstandard1.5/it/System.Runtime.xml\",\n        \"ref/netstandard1.5/ja/System.Runtime.xml\",\n        \"ref/netstandard1.5/ko/System.Runtime.xml\",\n        \"ref/netstandard1.5/ru/System.Runtime.xml\",\n        \"ref/netstandard1.5/zh-hans/System.Runtime.xml\",\n        \"ref/netstandard1.5/zh-hant/System.Runtime.xml\",\n        \"ref/portable-net45+win8+wp80+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Runtime.Extensions/4.1.0\": {\n      \"sha512\": \"QKBt96oHHyyJv8bnAcSHqjLkSSW/t/7nboGi489j6OYGkQpaM9ghwhoeYR+z4qQ9gS7d2MvTR0VIh2DyEzSasA==\",\n      \"type\": \"package\",\n      \"path\": \"System.Runtime.Extensions/4.1.0\",\n      \"files\": [\n        \"System.Runtime.Extensions.4.1.0.nupkg.sha512\",\n        \"System.Runtime.Extensions.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net462/System.Runtime.Extensions.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net462/System.Runtime.Extensions.dll\",\n        \"ref/netcore50/System.Runtime.Extensions.dll\",\n        \"ref/netcore50/System.Runtime.Extensions.xml\",\n        \"ref/netcore50/de/System.Runtime.Extensions.xml\",\n        \"ref/netcore50/es/System.Runtime.Extensions.xml\",\n        \"ref/netcore50/fr/System.Runtime.Extensions.xml\",\n        \"ref/netcore50/it/System.Runtime.Extensions.xml\",\n        \"ref/netcore50/ja/System.Runtime.Extensions.xml\",\n        \"ref/netcore50/ko/System.Runtime.Extensions.xml\",\n        \"ref/netcore50/ru/System.Runtime.Extensions.xml\",\n        \"ref/netcore50/zh-hans/System.Runtime.Extensions.xml\",\n        \"ref/netcore50/zh-hant/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/System.Runtime.Extensions.dll\",\n        \"ref/netstandard1.0/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/de/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/es/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/fr/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/it/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/ja/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/ko/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/ru/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/System.Runtime.Extensions.dll\",\n        \"ref/netstandard1.3/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/de/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/es/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/fr/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/it/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/ja/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/ko/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/ru/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/System.Runtime.Extensions.dll\",\n        \"ref/netstandard1.5/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/de/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/es/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/fr/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/it/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/ja/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/ko/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/ru/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml\",\n        \"ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Runtime.Handles/4.0.1\": {\n      \"sha512\": \"WDqxX+UVhSQ5VqEE3PKN5Kbmz58I+PMpCSm95vI72lp6ewChuTllDoOdfOl3gw0k30FWMz2uNXgPy9EgL8BaPg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Runtime.Handles/4.0.1\",\n      \"files\": [\n        \"System.Runtime.Handles.4.0.1.nupkg.sha512\",\n        \"System.Runtime.Handles.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/_._\",\n        \"ref/netstandard1.3/System.Runtime.Handles.dll\",\n        \"ref/netstandard1.3/System.Runtime.Handles.xml\",\n        \"ref/netstandard1.3/de/System.Runtime.Handles.xml\",\n        \"ref/netstandard1.3/es/System.Runtime.Handles.xml\",\n        \"ref/netstandard1.3/fr/System.Runtime.Handles.xml\",\n        \"ref/netstandard1.3/it/System.Runtime.Handles.xml\",\n        \"ref/netstandard1.3/ja/System.Runtime.Handles.xml\",\n        \"ref/netstandard1.3/ko/System.Runtime.Handles.xml\",\n        \"ref/netstandard1.3/ru/System.Runtime.Handles.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Runtime.InteropServices/4.1.0\": {\n      \"sha512\": \"p9pBuqAGCYjyNrDiA5J55n2Ys3Tjy61fH6R2jGBJr1Ymz1V0fIlv9gLBdx/G9KmRHYFM9KFM4Jxpa0YVpfG8AA==\",\n      \"type\": \"package\",\n      \"path\": \"System.Runtime.InteropServices/4.1.0\",\n      \"files\": [\n        \"System.Runtime.InteropServices.4.1.0.nupkg.sha512\",\n        \"System.Runtime.InteropServices.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net462/System.Runtime.InteropServices.dll\",\n        \"lib/portable-net45+win8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net462/System.Runtime.InteropServices.dll\",\n        \"ref/netcore50/System.Runtime.InteropServices.dll\",\n        \"ref/netcore50/System.Runtime.InteropServices.xml\",\n        \"ref/netcore50/de/System.Runtime.InteropServices.xml\",\n        \"ref/netcore50/es/System.Runtime.InteropServices.xml\",\n        \"ref/netcore50/fr/System.Runtime.InteropServices.xml\",\n        \"ref/netcore50/it/System.Runtime.InteropServices.xml\",\n        \"ref/netcore50/ja/System.Runtime.InteropServices.xml\",\n        \"ref/netcore50/ko/System.Runtime.InteropServices.xml\",\n        \"ref/netcore50/ru/System.Runtime.InteropServices.xml\",\n        \"ref/netcore50/zh-hans/System.Runtime.InteropServices.xml\",\n        \"ref/netcore50/zh-hant/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/System.Runtime.InteropServices.dll\",\n        \"ref/netstandard1.1/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/de/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/es/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/fr/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/it/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/ja/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/ko/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/ru/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/System.Runtime.InteropServices.dll\",\n        \"ref/netstandard1.2/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/de/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/es/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/fr/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/it/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/ja/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/ko/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/ru/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/System.Runtime.InteropServices.dll\",\n        \"ref/netstandard1.3/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/de/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/es/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/fr/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/it/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/ja/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/ko/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/ru/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/System.Runtime.InteropServices.dll\",\n        \"ref/netstandard1.5/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/de/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/es/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/fr/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/it/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/ja/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/ko/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/ru/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml\",\n        \"ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml\",\n        \"ref/portable-net45+win8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Runtime.InteropServices.RuntimeInformation/4.0.0\": {\n      \"sha512\": \"YlG4l3iUdzN+edwvbYKMtIq32R/gJtSzYBhsfcOMh5sUuynkoteYDN7N2/2l7lfTlPD0D9hV2uLeZy0AbHVh1A==\",\n      \"type\": \"package\",\n      \"path\": \"System.Runtime.InteropServices.RuntimeInformation/4.0.0\",\n      \"files\": [\n        \"System.Runtime.InteropServices.RuntimeInformation.4.0.0.nupkg.sha512\",\n        \"System.Runtime.InteropServices.RuntimeInformation.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll\",\n        \"lib/win8/System.Runtime.InteropServices.RuntimeInformation.dll\",\n        \"lib/wpa81/System.Runtime.InteropServices.RuntimeInformation.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/aot/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll\",\n        \"runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll\",\n        \"runtimes/win/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll\",\n        \"runtimes/win/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll\",\n        \"runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll\"\n      ]\n    },\n    \"System.Runtime.Numerics/4.0.1\": {\n      \"sha512\": \"FtLv8UyQEc1FDaAjRtXBSYqsHBZYXeI8ygfFmJXYbIfb4kSHJ3+hURaeDkpLVMG40ykVorVdH8J0KYzNr9yNOw==\",\n      \"type\": \"package\",\n      \"path\": \"System.Runtime.Numerics/4.0.1\",\n      \"files\": [\n        \"System.Runtime.Numerics.4.0.1.nupkg.sha512\",\n        \"System.Runtime.Numerics.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.Runtime.Numerics.dll\",\n        \"lib/netstandard1.3/System.Runtime.Numerics.dll\",\n        \"lib/portable-net45+win8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Runtime.Numerics.dll\",\n        \"ref/netcore50/System.Runtime.Numerics.xml\",\n        \"ref/netcore50/de/System.Runtime.Numerics.xml\",\n        \"ref/netcore50/es/System.Runtime.Numerics.xml\",\n        \"ref/netcore50/fr/System.Runtime.Numerics.xml\",\n        \"ref/netcore50/it/System.Runtime.Numerics.xml\",\n        \"ref/netcore50/ja/System.Runtime.Numerics.xml\",\n        \"ref/netcore50/ko/System.Runtime.Numerics.xml\",\n        \"ref/netcore50/ru/System.Runtime.Numerics.xml\",\n        \"ref/netcore50/zh-hans/System.Runtime.Numerics.xml\",\n        \"ref/netcore50/zh-hant/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/System.Runtime.Numerics.dll\",\n        \"ref/netstandard1.1/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/de/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/es/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/fr/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/it/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/ja/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/ko/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/ru/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/zh-hans/System.Runtime.Numerics.xml\",\n        \"ref/netstandard1.1/zh-hant/System.Runtime.Numerics.xml\",\n        \"ref/portable-net45+win8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Runtime.Serialization.Primitives/4.1.1\": {\n      \"sha512\": \"HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Runtime.Serialization.Primitives/4.1.1\",\n      \"files\": [\n        \"System.Runtime.Serialization.Primitives.4.1.1.nupkg.sha512\",\n        \"System.Runtime.Serialization.Primitives.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net46/System.Runtime.Serialization.Primitives.dll\",\n        \"lib/netcore50/System.Runtime.Serialization.Primitives.dll\",\n        \"lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net46/System.Runtime.Serialization.Primitives.dll\",\n        \"ref/netcore50/System.Runtime.Serialization.Primitives.dll\",\n        \"ref/netcore50/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netcore50/de/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netcore50/es/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netcore50/fr/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netcore50/it/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netcore50/ja/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netcore50/ko/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netcore50/ru/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netcore50/zh-hans/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netcore50/zh-hant/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/System.Runtime.Serialization.Primitives.dll\",\n        \"ref/netstandard1.0/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/de/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/es/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/fr/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/it/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/ja/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/ko/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/ru/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll\",\n        \"ref/netstandard1.3/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/de/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/es/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/fr/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/it/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/ja/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/ko/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/ru/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Runtime.Serialization.Primitives.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/aot/lib/netcore50/System.Runtime.Serialization.Primitives.dll\"\n      ]\n    },\n    \"System.Security.Cryptography.Algorithms/4.2.0\": {\n      \"sha512\": \"9LS5BHpndNsWPZcK1abft3cT3j0H9e1fPdUjL3oNFun6u5ZIxEd/aMMZXucLnatlKh0Fi7cTgsUkvIQsd5+XIg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Security.Cryptography.Algorithms/4.2.0\",\n      \"files\": [\n        \"System.Security.Cryptography.Algorithms.4.2.0.nupkg.sha512\",\n        \"System.Security.Cryptography.Algorithms.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Security.Cryptography.Algorithms.dll\",\n        \"lib/net461/System.Security.Cryptography.Algorithms.dll\",\n        \"lib/net463/System.Security.Cryptography.Algorithms.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Security.Cryptography.Algorithms.dll\",\n        \"ref/net461/System.Security.Cryptography.Algorithms.dll\",\n        \"ref/net463/System.Security.Cryptography.Algorithms.dll\",\n        \"ref/netstandard1.3/System.Security.Cryptography.Algorithms.dll\",\n        \"ref/netstandard1.4/System.Security.Cryptography.Algorithms.dll\",\n        \"ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll\",\n        \"runtimes/win/lib/net46/System.Security.Cryptography.Algorithms.dll\",\n        \"runtimes/win/lib/net461/System.Security.Cryptography.Algorithms.dll\",\n        \"runtimes/win/lib/net463/System.Security.Cryptography.Algorithms.dll\",\n        \"runtimes/win/lib/netcore50/System.Security.Cryptography.Algorithms.dll\",\n        \"runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll\"\n      ]\n    },\n    \"System.Security.Cryptography.Cng/4.2.0\": {\n      \"sha512\": \"NNaCsYL+dqUQ/1oJOHCknhMHBuJaF6JRuK0eBnfxI34l5PKFaH3SvvHVAdpG3/3GXjkEEG2syBC2kx/2e0mPwg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Security.Cryptography.Cng/4.2.0\",\n      \"files\": [\n        \"System.Security.Cryptography.Cng.4.2.0.nupkg.sha512\",\n        \"System.Security.Cryptography.Cng.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/net46/System.Security.Cryptography.Cng.dll\",\n        \"lib/net461/System.Security.Cryptography.Cng.dll\",\n        \"lib/net463/System.Security.Cryptography.Cng.dll\",\n        \"ref/net46/System.Security.Cryptography.Cng.dll\",\n        \"ref/net461/System.Security.Cryptography.Cng.dll\",\n        \"ref/net463/System.Security.Cryptography.Cng.dll\",\n        \"ref/netstandard1.3/System.Security.Cryptography.Cng.dll\",\n        \"ref/netstandard1.4/System.Security.Cryptography.Cng.dll\",\n        \"ref/netstandard1.6/System.Security.Cryptography.Cng.dll\",\n        \"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll\",\n        \"runtimes/win/lib/net46/System.Security.Cryptography.Cng.dll\",\n        \"runtimes/win/lib/net461/System.Security.Cryptography.Cng.dll\",\n        \"runtimes/win/lib/net463/System.Security.Cryptography.Cng.dll\",\n        \"runtimes/win/lib/netstandard1.4/System.Security.Cryptography.Cng.dll\",\n        \"runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll\"\n      ]\n    },\n    \"System.Security.Cryptography.Csp/4.0.0\": {\n      \"sha512\": \"zLWWrV/51uS/tBGDchSrq4vvUds8Mt9CP7WAXGgnhbhmyEPWL3Imf2fVlzVQE2qScDyH8KrSBXXbgQte/mgH9Q==\",\n      \"type\": \"package\",\n      \"path\": \"System.Security.Cryptography.Csp/4.0.0\",\n      \"files\": [\n        \"System.Security.Cryptography.Csp.4.0.0.nupkg.sha512\",\n        \"System.Security.Cryptography.Csp.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Security.Cryptography.Csp.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Security.Cryptography.Csp.dll\",\n        \"ref/netstandard1.3/System.Security.Cryptography.Csp.dll\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll\",\n        \"runtimes/win/lib/net46/System.Security.Cryptography.Csp.dll\",\n        \"runtimes/win/lib/netcore50/_._\",\n        \"runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll\"\n      ]\n    },\n    \"System.Security.Cryptography.Encoding/4.0.0\": {\n      \"sha512\": \"qbX8PkXQx8MUx810JLQ1UVNCAnU/zgfNcFTyYASO1vPF2xpHF64T5i/Q5AMd7Y2ag1AJixcojvY+DRCXgJl9wg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Security.Cryptography.Encoding/4.0.0\",\n      \"files\": [\n        \"System.Security.Cryptography.Encoding.4.0.0.nupkg.sha512\",\n        \"System.Security.Cryptography.Encoding.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Security.Cryptography.Encoding.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Security.Cryptography.Encoding.dll\",\n        \"ref/netstandard1.3/System.Security.Cryptography.Encoding.dll\",\n        \"ref/netstandard1.3/System.Security.Cryptography.Encoding.xml\",\n        \"ref/netstandard1.3/de/System.Security.Cryptography.Encoding.xml\",\n        \"ref/netstandard1.3/es/System.Security.Cryptography.Encoding.xml\",\n        \"ref/netstandard1.3/fr/System.Security.Cryptography.Encoding.xml\",\n        \"ref/netstandard1.3/it/System.Security.Cryptography.Encoding.xml\",\n        \"ref/netstandard1.3/ja/System.Security.Cryptography.Encoding.xml\",\n        \"ref/netstandard1.3/ko/System.Security.Cryptography.Encoding.xml\",\n        \"ref/netstandard1.3/ru/System.Security.Cryptography.Encoding.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Security.Cryptography.Encoding.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Security.Cryptography.Encoding.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll\",\n        \"runtimes/win/lib/net46/System.Security.Cryptography.Encoding.dll\",\n        \"runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll\"\n      ]\n    },\n    \"System.Security.Cryptography.OpenSsl/4.0.0\": {\n      \"sha512\": \"l21X5xtcXvWZVW/dnkbqg2e47Was2HLQRz76ZEUnFMiUhbF2FREiq5mH2PPA1GbTlYqRv4dfh25MN0HWgk0HXQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Security.Cryptography.OpenSsl/4.0.0\",\n      \"files\": [\n        \"System.Security.Cryptography.OpenSsl.4.0.0.nupkg.sha512\",\n        \"System.Security.Cryptography.OpenSsl.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll\",\n        \"ref/netstandard1.6/System.Security.Cryptography.OpenSsl.dll\",\n        \"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll\"\n      ]\n    },\n    \"System.Security.Cryptography.Primitives/4.0.0\": {\n      \"sha512\": \"xWq6qtYC6/0ZeT+WUDLgp6GFuVh2uKRgd5wgRyRrbJVmaq+rmR6UKWCCbPRxvEEFGgSJKZ2RHZ5ekOr0FcS+zA==\",\n      \"type\": \"package\",\n      \"path\": \"System.Security.Cryptography.Primitives/4.0.0\",\n      \"files\": [\n        \"System.Security.Cryptography.Primitives.4.0.0.nupkg.sha512\",\n        \"System.Security.Cryptography.Primitives.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Security.Cryptography.Primitives.dll\",\n        \"lib/netstandard1.3/System.Security.Cryptography.Primitives.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Security.Cryptography.Primitives.dll\",\n        \"ref/netstandard1.3/System.Security.Cryptography.Primitives.dll\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Security.Cryptography.X509Certificates/4.1.0\": {\n      \"sha512\": \"IA9bQFs61BaOEqvXSr7kGixlxySdehm4ot9ng1a7Vj3zaLkPhQCCaLWgqRPdI0fUD3dlKVypbb9WcAIjiSj8MQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Security.Cryptography.X509Certificates/4.1.0\",\n      \"files\": [\n        \"System.Security.Cryptography.X509Certificates.4.1.0.nupkg.sha512\",\n        \"System.Security.Cryptography.X509Certificates.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net46/System.Security.Cryptography.X509Certificates.dll\",\n        \"lib/net461/System.Security.Cryptography.X509Certificates.dll\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net46/System.Security.Cryptography.X509Certificates.dll\",\n        \"ref/net461/System.Security.Cryptography.X509Certificates.dll\",\n        \"ref/netstandard1.3/System.Security.Cryptography.X509Certificates.dll\",\n        \"ref/netstandard1.3/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.3/de/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.3/es/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.3/fr/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.3/it/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.3/ja/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.3/ko/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.3/ru/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll\",\n        \"ref/netstandard1.4/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/de/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/es/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/fr/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/it/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/ja/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/ko/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/ru/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/zh-hans/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/netstandard1.4/zh-hant/System.Security.Cryptography.X509Certificates.xml\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll\",\n        \"runtimes/win/lib/net46/System.Security.Cryptography.X509Certificates.dll\",\n        \"runtimes/win/lib/net461/System.Security.Cryptography.X509Certificates.dll\",\n        \"runtimes/win/lib/netcore50/System.Security.Cryptography.X509Certificates.dll\",\n        \"runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll\"\n      ]\n    },\n    \"System.Text.Encoding/4.0.11\": {\n      \"sha512\": \"n+qkz6pjbVLAJSe18w3aAMP0TwJYbl+OwwI9xcB+B4l8uDWBLwssJmiEf0u51LSbo7S8Bapul40sYcUQw+BCRw==\",\n      \"type\": \"package\",\n      \"path\": \"System.Text.Encoding/4.0.11\",\n      \"files\": [\n        \"System.Text.Encoding.4.0.11.nupkg.sha512\",\n        \"System.Text.Encoding.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Text.Encoding.dll\",\n        \"ref/netcore50/System.Text.Encoding.xml\",\n        \"ref/netcore50/de/System.Text.Encoding.xml\",\n        \"ref/netcore50/es/System.Text.Encoding.xml\",\n        \"ref/netcore50/fr/System.Text.Encoding.xml\",\n        \"ref/netcore50/it/System.Text.Encoding.xml\",\n        \"ref/netcore50/ja/System.Text.Encoding.xml\",\n        \"ref/netcore50/ko/System.Text.Encoding.xml\",\n        \"ref/netcore50/ru/System.Text.Encoding.xml\",\n        \"ref/netcore50/zh-hans/System.Text.Encoding.xml\",\n        \"ref/netcore50/zh-hant/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/System.Text.Encoding.dll\",\n        \"ref/netstandard1.0/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/de/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/es/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/fr/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/it/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/ja/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/ko/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/ru/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Text.Encoding.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/System.Text.Encoding.dll\",\n        \"ref/netstandard1.3/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/de/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/es/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/fr/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/it/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/ja/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/ko/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/ru/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Text.Encoding.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Text.Encoding.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Text.Encoding.Extensions/4.0.11\": {\n      \"sha512\": \"tTo36p3sK3IjoMt6ALr+CVoO+gyVd69ykGXschYsQUUWjcxhq/TnD1ACIYtfzxxq+Tcg4Zoiw295kFmapXMROw==\",\n      \"type\": \"package\",\n      \"path\": \"System.Text.Encoding.Extensions/4.0.11\",\n      \"files\": [\n        \"System.Text.Encoding.Extensions.4.0.11.nupkg.sha512\",\n        \"System.Text.Encoding.Extensions.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Text.Encoding.Extensions.dll\",\n        \"ref/netcore50/System.Text.Encoding.Extensions.xml\",\n        \"ref/netcore50/de/System.Text.Encoding.Extensions.xml\",\n        \"ref/netcore50/es/System.Text.Encoding.Extensions.xml\",\n        \"ref/netcore50/fr/System.Text.Encoding.Extensions.xml\",\n        \"ref/netcore50/it/System.Text.Encoding.Extensions.xml\",\n        \"ref/netcore50/ja/System.Text.Encoding.Extensions.xml\",\n        \"ref/netcore50/ko/System.Text.Encoding.Extensions.xml\",\n        \"ref/netcore50/ru/System.Text.Encoding.Extensions.xml\",\n        \"ref/netcore50/zh-hans/System.Text.Encoding.Extensions.xml\",\n        \"ref/netcore50/zh-hant/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/System.Text.Encoding.Extensions.dll\",\n        \"ref/netstandard1.0/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/de/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/es/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/fr/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/it/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/ja/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/ko/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/ru/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/System.Text.Encoding.Extensions.dll\",\n        \"ref/netstandard1.3/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/de/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/es/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/fr/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/it/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/ja/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/ko/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/ru/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Text.Encoding.Extensions.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Text.Encoding.Extensions.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Text.RegularExpressions/4.1.0\": {\n      \"sha512\": \"YvaewnYFFkqF1LCRmg0/nVBk3eLSP/Oz+XWR50mW0sBHZHOOL7tIdw0F4aXPnHx5udlTpfkhwY2XaIhB0qGnBg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Text.RegularExpressions/4.1.0\",\n      \"files\": [\n        \"System.Text.RegularExpressions.4.1.0.nupkg.sha512\",\n        \"System.Text.RegularExpressions.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/net463/System.Text.RegularExpressions.dll\",\n        \"lib/netcore50/System.Text.RegularExpressions.dll\",\n        \"lib/netstandard1.6/System.Text.RegularExpressions.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/net463/System.Text.RegularExpressions.dll\",\n        \"ref/netcore50/System.Text.RegularExpressions.dll\",\n        \"ref/netcore50/System.Text.RegularExpressions.xml\",\n        \"ref/netcore50/de/System.Text.RegularExpressions.xml\",\n        \"ref/netcore50/es/System.Text.RegularExpressions.xml\",\n        \"ref/netcore50/fr/System.Text.RegularExpressions.xml\",\n        \"ref/netcore50/it/System.Text.RegularExpressions.xml\",\n        \"ref/netcore50/ja/System.Text.RegularExpressions.xml\",\n        \"ref/netcore50/ko/System.Text.RegularExpressions.xml\",\n        \"ref/netcore50/ru/System.Text.RegularExpressions.xml\",\n        \"ref/netcore50/zh-hans/System.Text.RegularExpressions.xml\",\n        \"ref/netcore50/zh-hant/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/System.Text.RegularExpressions.dll\",\n        \"ref/netstandard1.0/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/de/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/es/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/fr/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/it/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/ja/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/ko/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/ru/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/System.Text.RegularExpressions.dll\",\n        \"ref/netstandard1.3/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/de/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/es/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/fr/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/it/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/ja/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/ko/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/ru/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/System.Text.RegularExpressions.dll\",\n        \"ref/netstandard1.6/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/de/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/es/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/fr/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/it/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/ja/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/ko/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/ru/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/zh-hans/System.Text.RegularExpressions.xml\",\n        \"ref/netstandard1.6/zh-hant/System.Text.RegularExpressions.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Threading/4.0.11\": {\n      \"sha512\": \"TkrlS3NzOXjdG9m4bGErvcxc7ILYmKKV9orf/JIdXXyT8nDd6hbU8iGMhHQNGKLhFup8NWuLBrNlPKrBjv/hrg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Threading/4.0.11\",\n      \"files\": [\n        \"System.Threading.4.0.11.nupkg.sha512\",\n        \"System.Threading.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.Threading.dll\",\n        \"lib/netstandard1.3/System.Threading.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Threading.dll\",\n        \"ref/netcore50/System.Threading.xml\",\n        \"ref/netcore50/de/System.Threading.xml\",\n        \"ref/netcore50/es/System.Threading.xml\",\n        \"ref/netcore50/fr/System.Threading.xml\",\n        \"ref/netcore50/it/System.Threading.xml\",\n        \"ref/netcore50/ja/System.Threading.xml\",\n        \"ref/netcore50/ko/System.Threading.xml\",\n        \"ref/netcore50/ru/System.Threading.xml\",\n        \"ref/netcore50/zh-hans/System.Threading.xml\",\n        \"ref/netcore50/zh-hant/System.Threading.xml\",\n        \"ref/netstandard1.0/System.Threading.dll\",\n        \"ref/netstandard1.0/System.Threading.xml\",\n        \"ref/netstandard1.0/de/System.Threading.xml\",\n        \"ref/netstandard1.0/es/System.Threading.xml\",\n        \"ref/netstandard1.0/fr/System.Threading.xml\",\n        \"ref/netstandard1.0/it/System.Threading.xml\",\n        \"ref/netstandard1.0/ja/System.Threading.xml\",\n        \"ref/netstandard1.0/ko/System.Threading.xml\",\n        \"ref/netstandard1.0/ru/System.Threading.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Threading.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Threading.xml\",\n        \"ref/netstandard1.3/System.Threading.dll\",\n        \"ref/netstandard1.3/System.Threading.xml\",\n        \"ref/netstandard1.3/de/System.Threading.xml\",\n        \"ref/netstandard1.3/es/System.Threading.xml\",\n        \"ref/netstandard1.3/fr/System.Threading.xml\",\n        \"ref/netstandard1.3/it/System.Threading.xml\",\n        \"ref/netstandard1.3/ja/System.Threading.xml\",\n        \"ref/netstandard1.3/ko/System.Threading.xml\",\n        \"ref/netstandard1.3/ru/System.Threading.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Threading.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Threading.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\",\n        \"runtimes/aot/lib/netcore50/System.Threading.dll\"\n      ]\n    },\n    \"System.Threading.Tasks/4.0.11\": {\n      \"sha512\": \"AShEL6v4KgMjaM9Las2ayUNqiSphx2mdRItMmUzfu8l15KCECcRLWgbGPoY17nqyMQV4W8kO7sjAq3IU9wFCJA==\",\n      \"type\": \"package\",\n      \"path\": \"System.Threading.Tasks/4.0.11\",\n      \"files\": [\n        \"System.Threading.Tasks.4.0.11.nupkg.sha512\",\n        \"System.Threading.Tasks.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Threading.Tasks.dll\",\n        \"ref/netcore50/System.Threading.Tasks.xml\",\n        \"ref/netcore50/de/System.Threading.Tasks.xml\",\n        \"ref/netcore50/es/System.Threading.Tasks.xml\",\n        \"ref/netcore50/fr/System.Threading.Tasks.xml\",\n        \"ref/netcore50/it/System.Threading.Tasks.xml\",\n        \"ref/netcore50/ja/System.Threading.Tasks.xml\",\n        \"ref/netcore50/ko/System.Threading.Tasks.xml\",\n        \"ref/netcore50/ru/System.Threading.Tasks.xml\",\n        \"ref/netcore50/zh-hans/System.Threading.Tasks.xml\",\n        \"ref/netcore50/zh-hant/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/System.Threading.Tasks.dll\",\n        \"ref/netstandard1.0/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/de/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/es/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/fr/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/it/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/ja/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/ko/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/ru/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/System.Threading.Tasks.dll\",\n        \"ref/netstandard1.3/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/de/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/es/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/fr/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/it/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/ja/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/ko/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/ru/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Threading.Tasks.Extensions/4.0.0\": {\n      \"sha512\": \"Pz5tyPagGf3nA2np2dQmRShxorlxRcvzBEFdYYuW7t0BbJaAuIMiBzRQ5ews7aIkdILwn293Wq5viLh3pm0MeQ==\",\n      \"type\": \"package\",\n      \"path\": \"System.Threading.Tasks.Extensions/4.0.0\",\n      \"files\": [\n        \"System.Threading.Tasks.Extensions.4.0.0.nupkg.sha512\",\n        \"System.Threading.Tasks.Extensions.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/netstandard1.0/System.Threading.Tasks.Extensions.dll\",\n        \"lib/netstandard1.0/System.Threading.Tasks.Extensions.xml\",\n        \"lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml\"\n      ]\n    },\n    \"System.Threading.Timer/4.0.1\": {\n      \"sha512\": \"nHIn2bIQvEjQw8mXh3uu3DH6Gef8e+c3Mc0zBjz9XhGb7WewZ46JSo8EPmUQ++MLGNBGrXHhz0bZvmDum7MO1Q==\",\n      \"type\": \"package\",\n      \"path\": \"System.Threading.Timer/4.0.1\",\n      \"files\": [\n        \"System.Threading.Timer.4.0.1.nupkg.sha512\",\n        \"System.Threading.Timer.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net451/_._\",\n        \"lib/portable-net451+win81+wpa81/_._\",\n        \"lib/win81/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net451/_._\",\n        \"ref/netcore50/System.Threading.Timer.dll\",\n        \"ref/netcore50/System.Threading.Timer.xml\",\n        \"ref/netcore50/de/System.Threading.Timer.xml\",\n        \"ref/netcore50/es/System.Threading.Timer.xml\",\n        \"ref/netcore50/fr/System.Threading.Timer.xml\",\n        \"ref/netcore50/it/System.Threading.Timer.xml\",\n        \"ref/netcore50/ja/System.Threading.Timer.xml\",\n        \"ref/netcore50/ko/System.Threading.Timer.xml\",\n        \"ref/netcore50/ru/System.Threading.Timer.xml\",\n        \"ref/netcore50/zh-hans/System.Threading.Timer.xml\",\n        \"ref/netcore50/zh-hant/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/System.Threading.Timer.dll\",\n        \"ref/netstandard1.2/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/de/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/es/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/fr/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/it/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/ja/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/ko/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/ru/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/zh-hans/System.Threading.Timer.xml\",\n        \"ref/netstandard1.2/zh-hant/System.Threading.Timer.xml\",\n        \"ref/portable-net451+win81+wpa81/_._\",\n        \"ref/win81/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Xml.ReaderWriter/4.0.11\": {\n      \"sha512\": \"bAPmrelFLVsxSCVLxNBqK/WoJjdad88EiJhZiV38K9EcGAUWYHo5a3lKTppqZqSiefq9gjFLz53JWS+pV/ZGIg==\",\n      \"type\": \"package\",\n      \"path\": \"System.Xml.ReaderWriter/4.0.11\",\n      \"files\": [\n        \"System.Xml.ReaderWriter.4.0.11.nupkg.sha512\",\n        \"System.Xml.ReaderWriter.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.Xml.ReaderWriter.dll\",\n        \"lib/netstandard1.3/System.Xml.ReaderWriter.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Xml.ReaderWriter.dll\",\n        \"ref/netcore50/System.Xml.ReaderWriter.xml\",\n        \"ref/netcore50/de/System.Xml.ReaderWriter.xml\",\n        \"ref/netcore50/es/System.Xml.ReaderWriter.xml\",\n        \"ref/netcore50/fr/System.Xml.ReaderWriter.xml\",\n        \"ref/netcore50/it/System.Xml.ReaderWriter.xml\",\n        \"ref/netcore50/ja/System.Xml.ReaderWriter.xml\",\n        \"ref/netcore50/ko/System.Xml.ReaderWriter.xml\",\n        \"ref/netcore50/ru/System.Xml.ReaderWriter.xml\",\n        \"ref/netcore50/zh-hans/System.Xml.ReaderWriter.xml\",\n        \"ref/netcore50/zh-hant/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/System.Xml.ReaderWriter.dll\",\n        \"ref/netstandard1.0/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/de/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/es/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/fr/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/it/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/ja/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/ko/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/ru/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/System.Xml.ReaderWriter.dll\",\n        \"ref/netstandard1.3/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/de/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/es/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/fr/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/it/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/ja/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/ko/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/ru/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Xml.ReaderWriter.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Xml.ReaderWriter.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    },\n    \"System.Xml.XDocument/4.0.11\": {\n      \"sha512\": \"SvNGKdBIH7G8JOUnzdMaWN4/eUCCkiR6eDMHo7/EzgXCJYqMNATMTFkMI/u7uJnxQYuMAyRIBWUWY4HLtL6ygw==\",\n      \"type\": \"package\",\n      \"path\": \"System.Xml.XDocument/4.0.11\",\n      \"files\": [\n        \"System.Xml.XDocument.4.0.11.nupkg.sha512\",\n        \"System.Xml.XDocument.nuspec\",\n        \"ThirdPartyNotices.txt\",\n        \"dotnet_library_license.txt\",\n        \"lib/MonoAndroid10/_._\",\n        \"lib/MonoTouch10/_._\",\n        \"lib/net45/_._\",\n        \"lib/netcore50/System.Xml.XDocument.dll\",\n        \"lib/netstandard1.3/System.Xml.XDocument.dll\",\n        \"lib/portable-net45+win8+wp8+wpa81/_._\",\n        \"lib/win8/_._\",\n        \"lib/wp80/_._\",\n        \"lib/wpa81/_._\",\n        \"lib/xamarinios10/_._\",\n        \"lib/xamarinmac20/_._\",\n        \"lib/xamarintvos10/_._\",\n        \"lib/xamarinwatchos10/_._\",\n        \"ref/MonoAndroid10/_._\",\n        \"ref/MonoTouch10/_._\",\n        \"ref/net45/_._\",\n        \"ref/netcore50/System.Xml.XDocument.dll\",\n        \"ref/netcore50/System.Xml.XDocument.xml\",\n        \"ref/netcore50/de/System.Xml.XDocument.xml\",\n        \"ref/netcore50/es/System.Xml.XDocument.xml\",\n        \"ref/netcore50/fr/System.Xml.XDocument.xml\",\n        \"ref/netcore50/it/System.Xml.XDocument.xml\",\n        \"ref/netcore50/ja/System.Xml.XDocument.xml\",\n        \"ref/netcore50/ko/System.Xml.XDocument.xml\",\n        \"ref/netcore50/ru/System.Xml.XDocument.xml\",\n        \"ref/netcore50/zh-hans/System.Xml.XDocument.xml\",\n        \"ref/netcore50/zh-hant/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/System.Xml.XDocument.dll\",\n        \"ref/netstandard1.0/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/de/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/es/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/fr/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/it/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/ja/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/ko/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/ru/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/zh-hans/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.0/zh-hant/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/System.Xml.XDocument.dll\",\n        \"ref/netstandard1.3/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/de/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/es/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/fr/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/it/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/ja/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/ko/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/ru/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/zh-hans/System.Xml.XDocument.xml\",\n        \"ref/netstandard1.3/zh-hant/System.Xml.XDocument.xml\",\n        \"ref/portable-net45+win8+wp8+wpa81/_._\",\n        \"ref/win8/_._\",\n        \"ref/wp80/_._\",\n        \"ref/wpa81/_._\",\n        \"ref/xamarinios10/_._\",\n        \"ref/xamarinmac20/_._\",\n        \"ref/xamarintvos10/_._\",\n        \"ref/xamarinwatchos10/_._\"\n      ]\n    }\n  },\n  \"projectFileDependencyGroups\": {\n    \"\": [\n      \"NETStandard.Library >= 1.6.0\",\n      \"Newtonsoft.Json >= 9.0.1\"\n    ],\n    \".NETStandard,Version=v1.6\": []\n  },\n  \"tools\": {},\n  \"projectFileToolGroups\": {}\n}"
  },
  {
    "path": "Foundation.Architecture/Architecture.Core.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25420.1\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}\") = \"Architecture.Core\", \"Architecture.Core\\Architecture.Core.xproj\", \"{0CAFB5CC-49CC-4665-A226-99DF505C6A46}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Release|x64.Build.0 = Release|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{0CAFB5CC-49CC-4665-A226-99DF505C6A46}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Foundation.Architecture/Architecture.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25420.1\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Architecture\", \"Architecture\\Architecture.csproj\", \"{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{DCB94898-CCFD-48D3-9FA5-C18363617A80}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tInjector.md = Injector.md\n\t\tREADME.md = README.md\n\tEndProjectSection\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Tests\", \"Tests\", \"{7F010A24-7AB3-4EF0-9104-32B3A6E55073}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Architecture.Unity3d\", \"Architecture\\Architecture.Unity3d.csproj\", \"{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Architecture.Tests\", \"Tests\\Architecture.Tests.csproj\", \"{521C4991-F9C6-4BC3-800C-227E7E365CCF}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Architecture.WebGL\", \"Architecture\\Architecture.WebGL.csproj\", \"{7238EC8C-9378-4369-BEA9-07D774F6C104}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Release|x64.Build.0 = Release|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{F38F800F-D4D8-48E4-9A2C-B0518BE831CB}.Release|x86.Build.0 = Release|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Release|x64.Build.0 = Release|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{5DDB2AF5-1DB0-43D1-97B7-654E5D75F42F}.Release|x86.Build.0 = Release|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Release|x64.Build.0 = Release|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF}.Release|x86.Build.0 = Release|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Release|x64.Build.0 = Release|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7238EC8C-9378-4369-BEA9-07D774F6C104}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{521C4991-F9C6-4BC3-800C-227E7E365CCF} = {7F010A24-7AB3-4EF0-9104-32B3A6E55073}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Foundation.Architecture/Tests/Architecture.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{521C4991-F9C6-4BC3-800C-227E7E365CCF}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Foundation.Architecture.Tests</RootNamespace>\n    <AssemblyName>Foundation.Architecture.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n    <ReferencePath>$(ProgramFiles)\\Common Files\\microsoft shared\\VSTT\\$(VisualStudioVersion)\\UITestExtensionPackages</ReferencePath>\n    <IsCodedUITest>False</IsCodedUITest>\n    <TestProjectType>UnitTest</TestProjectType>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Newtonsoft.Json.9.0.1\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n      <Private>True</Private>\n    </Reference>\n    <Reference Include=\"System\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\" />\n      </ItemGroup>\n    </When>\n    <Otherwise>\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.UnitTestFramework\" />\n      </ItemGroup>\n    </Otherwise>\n  </Choose>\n  <ItemGroup>\n    <Compile Include=\"BufferHelperTests.cs\" />\n    <Compile Include=\"ThreadingTests.cs\" />\n    <Compile Include=\"ObservableTests.cs\" />\n    <Compile Include=\"ObjectEventsTest.cs\" />\n    <Compile Include=\"DomainEventsTest.cs\" />\n    <Compile Include=\"SerializerTests.cs\" />\n    <Compile Include=\"TestModels.cs\" />\n    <Compile Include=\"InjectorTests.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Architecture\\Architecture.csproj\">\n      <Project>{f38f800f-d4d8-48e4-9a2c-b0518be831cb}</Project>\n      <Name>Architecture</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n        <Reference Include=\"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n          <Private>False</Private>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Import Project=\"$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets\" Condition=\"Exists('$(VSToolsPath)\\TeamTest\\Microsoft.TestTools.targets')\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Foundation.Architecture/Tests/BufferHelperTests.cs",
    "content": "﻿using System;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace Foundation.Architecture.Tests\n{\n    [TestClass]\n    public class BufferHelperTests\n    {\n\n        [TestMethod]\n        public void TestInt()\n        {\n            var buffer = new byte[sizeof(int)];\n\n            BufferHelper.Write(buffer, 0, 69);\n\n            var val = BufferHelper.ReadInt32(buffer, 0);\n\n            Assert.AreEqual(val, 69);\n        }\n\n        [TestMethod]\n        public void TestShort()\n        {\n            var buffer = new byte[sizeof(ushort)];\n\n            BufferHelper.Write(buffer, 0, (ushort)69);\n\n            var val = BufferHelper.ReadUInt16(buffer, 0);\n\n            Assert.AreEqual(val, 69);\n        }\n\n        [TestMethod]\n        public void TestFloat()\n        {\n            var buffer = new byte[sizeof(float)];\n\n            BufferHelper.Write(buffer, 0, 69f);\n\n            var val = BufferHelper.ReadFloat(buffer, 0);\n\n            Assert.AreEqual(val, 69f);\n        }\n\n\n        [TestMethod]\n        public void TestString()\n        {\n            var str = \"Hello World BLAH BLAH\";\n\n            var buffer = new byte[(sizeof(char) * str.Length) + sizeof(ushort)];\n\n            BufferHelper.Write(buffer, 0, str);\n\n            var val = BufferHelper.ReadString(buffer, 0);\n\n            Assert.AreEqual(val, str);\n        }\n\n\n        [TestMethod]\n        public void TestBadRead()\n        {\n            try\n            {\n                var buffer = new byte[sizeof(float)];\n\n                BufferHelper.Write(buffer, 0, 69f);\n\n                var val = BufferHelper.ReadFloat(buffer, 0);\n                val = BufferHelper.ReadFloat(buffer, sizeof(float));\n\n                Assert.Fail(\"Should of Failed\");\n\n            }\n            catch (Exception ex)\n            {\n                Assert.IsInstanceOfType(ex, typeof(ArgumentException));\n            }\n        }\n\n\n        [TestMethod]\n        public void TestBadWrite()\n        {\n            try\n            {\n                var buffer = new byte[sizeof(float)];\n\n                BufferHelper.Write(buffer, 0, 69f);\n                BufferHelper.Write(buffer, sizeof(float), 69f);\n\n                Assert.Fail(\"Should of Failed\");\n\n            }\n            catch (Exception ex)\n            {\n                Assert.IsInstanceOfType(ex, typeof(ArgumentException));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Architecture/Tests/DomainEventsTest.cs",
    "content": "﻿using System.Linq;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace Foundation.Architecture.Tests\n{\n    [TestClass]\n    public class DomainEventsTest\n    {\n        public class Msg\n        {\n            public string Content { get; set; }\n        }\n\n        const string MagicString = \"Hello World\";\n        private int counter = 0;\n\n        [TestCleanup]\n        public void Cleanup()\n        {\n            counter = 0;\n        }\n\n        [TestMethod]\n        public void TestSubscribe()\n        {\n            //Define a message class to send\n            var msg = new Msg {Content = MagicString};\n            \n            //subscribe you handlers\n            DomainEvents<Msg>.Subscribe(Handler);\n\n            //maby ways to send\n            DomainEvents<Msg>.Publish(msg);\n            DomainEvents.Publish(msg);\n            DomainEvents.Publish(msg, typeof(Msg));\n\n            Assert.AreEqual(counter, 3);\n\n            //unsubcribe when done as we are not using weakreferences internally\n            DomainEvents<Msg>.Unsubscribe(Handler);\n            DomainEvents.Publish(msg);\n            \n            Assert.AreEqual(counter, 3);\n        }\n\n        [TestMethod]\n        public void TestAddEvent()\n        {\n            var msg = new Msg { Content = MagicString };\n            \n            DomainEvents<Msg>.OnMessage += Handler;\n\n            DomainEvents<Msg>.Publish(msg);\n            DomainEvents.Publish(msg);\n            DomainEvents.Publish(msg, typeof(Msg));\n\n            Assert.AreEqual(counter, 3);\n            \n            DomainEvents<Msg>.Unsubscribe(Handler);\n            DomainEvents.Publish(msg);\n\n            Assert.AreEqual(counter, 3);\n        }\n        \n\n        public void Handler(Msg myMessage)\n        {\n            Assert.AreEqual(myMessage.Content, MagicString);\n            counter++;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Architecture/Tests/InjectorTests.cs",
    "content": "﻿using System.Linq;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace Foundation.Architecture.Tests\n{\n    [TestClass]\n    public class InjectorTests\n    {\n\n        [TestInitialize]\n        public void TestInitialize()\n        {\n            InjectService.UnregisterAll();\n        }\n\n        [TestCleanup]\n        public void TestCleanup()\n        {\n            InjectService.UnregisterAll();\n        }\n\n        [TestMethod]\n        public void TestTransient()\n        {\n            //Register a concrete type keyed by an interface\n            InjectService.RegisterTransient<IWordService, WordService>();\n            InjectService.RegisterTransient<ISentanceService, SentanceService>();\n            InjectService.RegisterTransient<Document>();\n\n            var document = InjectService.Get<Document>();\n\n            Assert.IsNotNull(document);\n            Assert.IsNotNull(document.Sentances);\n            Assert.IsNotNull(document.Words);\n            Assert.AreEqual(document.Print(), document.Sentances.GetSentance());\n        }\n\n        [TestMethod]\n        public void TestTransient2()\n        {\n            //Not we are not using the interface here\n            InjectService.RegisterTransient<WordService>();\n            Assert.IsNotNull(InjectService.Get<WordService>());\n\n            InjectService.RegisterTransient(() => new SentanceService());\n            Assert.IsNotNull(InjectService.Get<SentanceService>());\n        }\n\n\n        [TestMethod]\n        public void TestSingleton()\n        {\n            InjectService.RegisterSingleton<IWordService, WordService>();\n            InjectService.RegisterSingleton<ISentanceService, SentanceService>();\n            InjectService.RegisterSingleton<Document>();\n\n            var document = InjectService.Get<Document>();\n\n            Assert.IsNotNull(document);\n            Assert.IsNotNull(document.Sentances);\n            Assert.IsNotNull(document.Words);\n            Assert.AreEqual(document.Print(), document.Sentances.GetSentance());\n\n\n            var document2 = InjectService.Get<Document>();\n\n            Assert.AreEqual(document, document2);\n            Assert.AreEqual(document.Words, document2.Words);\n            Assert.AreEqual(document.Sentances, document2.Sentances);\n        }\n\n        [TestMethod]\n        public void TestSingleton2()\n        {\n            // Note we are NOT using the interface here\n            // Since we use a dictionary internally, these are keyed by the concrete type only.\n            // We can make the InjectService more flexible, but, that would be a performance hit.\n\n            InjectService.RegisterSingleton<WordService>();\n            Assert.IsNotNull(InjectService.Get<WordService>());\n\n            InjectService.RegisterSingleton(() => new SentanceService());\n            Assert.IsNotNull(InjectService.Get<SentanceService>());\n\n            InjectService.RegisterSingleton(new Document());\n            Assert.IsNotNull(InjectService.Get<Document>());\n\n            InjectService.UnregisterAll();\n\n            InjectService.RegisterSingleton<IWordService, WordService>(new WordService());\n            Assert.IsNotNull(InjectService.Get<IWordService>());\n\n            InjectService.RegisterSingleton<ISentanceService, SentanceService>(() => new SentanceService());\n            Assert.IsNotNull(InjectService.Get<ISentanceService>());\n        }\n\n\n        [TestMethod]\n        public void TestRemove()\n        {\n            InjectService.RegisterTransient<IWordService, WordService>();\n            InjectService.RegisterTransient<ISentanceService, SentanceService>();\n            InjectService.RegisterTransient<Document>();\n\n\n            InjectService.Unregister<Document>();\n            var document = InjectService.Get<Document>();\n            Assert.IsNull(document);\n\n            InjectService.UnregisterAll();\n            Assert.IsNull(InjectService.Get<IWordService>());\n            Assert.IsNull(InjectService.Get<ISentanceService>());\n        }\n\n        [TestMethod]\n        public void TestNull()\n        {\n            var document = InjectService.Get<Document>();\n            Assert.IsNull(document);\n        }\n\n        [TestMethod]\n        public void TestPrint()\n        {\n            InjectService.RegisterSingleton<IWordService, WordService>();\n            InjectService.RegisterSingleton<ISentanceService, SentanceService>();\n            InjectService.RegisterSingleton<Document>();\n\n            var log = InjectService.Print();\n            Assert.IsTrue(log.Count() == 3);\n        }\n\n    }\n}\n"
  },
  {
    "path": "Foundation.Architecture/Tests/ObjectEventsTest.cs",
    "content": "﻿using Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace Foundation.Architecture.Tests\n{\n    [TestClass]\n    public class ObjectEventsTest\n    {\n        public class Msg\n        {\n            public string Content { get; set; }\n        }\n\n        public class GameObject\n        {\n\n        }\n\n        const string MagicString = \"Hello World\";\n        private int counter = 0;\n\n        [TestCleanup]\n        public void Cleanup()\n        {\n            counter = 0;\n        }\n\n        [TestMethod]\n        public void TestStringRoute()\n        {\n            var msg = new Msg {Content = MagicString};\n            var route = \"Users/NVenti\";\n\n            ObjectEvents<string, Msg>.Subscribe(route, Handler);\n            ObjectEvents<string, Msg>.Publish(route, msg);\n            ObjectEvents.Publish(route, msg);\n            ObjectEvents.Publish(route, msg, typeof(string), typeof(Msg));\n            Assert.AreEqual(counter, 3);\n\n            //bad route\n            ObjectEvents.Publish(route +route, msg, typeof(string), typeof(Msg));\n            ObjectEvents<string, Msg>.Unsubscribe(route, Handler);\n            ObjectEvents<string, Msg>.Publish(route, msg);\n\n            Assert.AreEqual(counter, 3);\n\n            ObjectEvents<string, Msg>.Subscribe(route, Handler);\n            ObjectEvents<string, Msg>.Unsubscribe(route);\n            ObjectEvents<string, Msg>.Publish(route, msg);\n\n            Assert.AreEqual(counter, 3);\n        }\n\n\n        [TestMethod]\n        public void TestObjectRoute()\n        {\n            //define out message, a class\n            var msg = new Msg { Content = MagicString };\n\n            //define our routes (strings or game objects or something else)\n            var route = new GameObject();\n            var route2 = new GameObject();\n\n            //subscribe using the object reference\n            ObjectEvents<GameObject, Msg>.Subscribe(route, Handler);\n\n            //many ways to send\n            ObjectEvents<GameObject, Msg>.Publish(route, msg);\n            ObjectEvents.Publish(route, msg);\n            ObjectEvents.Publish(route, msg, typeof(GameObject), typeof(Msg));\n            Assert.AreEqual(counter, 3);\n\n            //bad route\n            ObjectEvents.Publish(route2, msg, typeof(GameObject), typeof(Msg));\n\n            //be sure to clean up as we are not using weak references\n            ObjectEvents<GameObject, Msg>.Unsubscribe(route, Handler);\n\n            ObjectEvents<GameObject, Msg>.Publish(route, msg);\n            Assert.AreEqual(counter, 3);\n\n            ObjectEvents<GameObject, Msg>.Subscribe(route, Handler);\n            ObjectEvents<GameObject, Msg>.Unsubscribe(route);\n            ObjectEvents<GameObject, Msg>.Publish(route, msg);\n\n            Assert.AreEqual(counter, 3);\n        }\n\n\n        public void Handler(Msg myMessage)\n        {\n            Assert.AreEqual(myMessage.Content, MagicString);\n            counter++;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Architecture/Tests/ObservableTests.cs",
    "content": "\n\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace Foundation.Architecture.Tests\n{\n    [TestClass]\n    public class ObservableTests\n    {\n        public class ViewModel : ObservableObject\n        {\n            private string _myProperty2;\n            public string MyProperty2\n            {\n                get { return _myProperty2; }\n                set\n                {\n                    if (_myProperty2 == value)\n                        return;\n                    _myProperty2 = value;\n                    RaiseChange(\"MyProperty2\", value);\n                }\n            }\n\n            private int _myProperty;\n            public int MyProperty\n            {\n                get { return _myProperty; }\n                set\n                {\n                    if (_myProperty == value)\n                        return;\n                    _myProperty = value;\n                    RaiseChange(\"MyProperty\", value);\n                }\n            }\n\n            public void MyCommand()\n            {\n                MyProperty++;\n            }\n\n            public void MyCommand2(int value)\n            {\n                MyProperty = (value + _myProperty);\n            }\n\n        }\n\n        [TestMethod]\n        public void TestObservableObject()\n        {\n            var vm = new ViewModel();\n            int counter = 0;\n\n            vm.OnPublish += (name) =>\n            {\n                Assert.AreEqual(name.Name, \"MyProperty\");\n                Assert.AreEqual(name.Sender, vm);\n                Assert.AreEqual(name.Value, vm.MyProperty);\n                counter++;\n            };\n\n            vm.MyCommand();\n            Assert.AreEqual(vm.MyProperty, 1);\n\n            vm.MyCommand2(2);\n            Assert.AreEqual(vm.MyProperty, 3);\n\n            vm.MyProperty = 0;\n            Assert.AreEqual(vm.MyProperty, 0);\n\n            Assert.AreEqual(counter, 3);\n        }\n\n\n        [TestMethod]\n        public void TestObservableProxy()\n        {\n            var vm = new ViewModel();\n            var proxy = new ObservableProxy(vm);\n            int counter2 = 0;\n            int counter1 = 0;\n\n            vm.OnPublish += (name) =>\n            {\n                counter1++;\n            };\n\n            proxy.OnPublish += (name) =>\n            {\n                counter2++;\n            };\n\n            proxy.Post(\"MyCommand\");\n            Assert.AreEqual(vm.MyProperty, 1);\n\n            proxy.Post(\"MyCommand2\", 2);\n            Assert.AreEqual(vm.MyProperty, 3);\n\n            proxy.Post(\"MyProperty\", 0);\n            Assert.AreEqual(vm.MyProperty, 0);\n\n            Assert.AreEqual(counter1, 3);\n            Assert.AreEqual(counter2, 3);\n\n            proxy.Dispose();\n        }\n\n\n        [TestMethod]\n        public void TestConversion()\n        {\n            var vm = new ViewModel();\n            var proxy = new ObservableProxy(vm);\n            int counter2 = 0;\n            int counter1 = 0;\n\n            vm.OnPublish += (name) =>\n            {\n                counter1++;\n            };\n\n            proxy.OnPublish += (name) =>\n            {\n                counter2++;\n            };\n\n            proxy.Post(\"MyCommand\");\n            Assert.AreEqual(vm.MyProperty, 1);\n\n            proxy.Post(\"MyCommand2\", \"2\");\n            Assert.AreEqual(vm.MyProperty, 3);\n\n            proxy.Post(\"MyProperty\", 0f);\n            Assert.AreEqual(vm.MyProperty, 0);\n\n            Assert.AreEqual(counter1, 3);\n            Assert.AreEqual(counter2, 3);\n\n\n            proxy.Post(\"MyProperty2\", \"1\");\n            var temp = proxy.Get<int>(\"MyProperty2\");\n            Assert.AreEqual(temp, 1);\n\n            proxy.Dispose();\n        }\n\n        [TestMethod]\n        public void TestObservable()\n        {\n            var vm = new ObservableProperty<int>();\n\n            vm.Value = 10;\n\n            int counter = 0;\n\n            vm.OnPublish += (v) =>\n            {\n                if(counter == 0)\n                    Assert.AreEqual(10, v);\n               counter++;\n            };\n\n            vm.Value = 0;\n\n            vm.Value++;\n            Assert.AreEqual(vm.Value, 1);\n\n            vm.Value--;\n            Assert.AreEqual(vm.Value, 0);\n\n            vm.Value++;\n            Assert.AreEqual(vm.Value, 1);\n\n            Assert.AreEqual(counter, 5);\n        }\n\n\n        [TestMethod]\n        public void TestList()\n        {\n            var vm = new ObservableList<string>();\n            var v = new List<string>();\n\n            Action test = () =>\n            {\n                Assert.IsTrue(v.Count == vm.Count);\n                for (int i = 0; i < v.Count; i++)\n                {\n                    Assert.IsTrue(v[i] == vm[i]);\n                }\n            };\n\n            vm.OnPublish += (args) =>\n            {\n                switch (args.Event)\n                {\n                    case ListChangedEventType.Add:\n                        {\n                            foreach (var item in args.Items)\n                            {\n                                v.Add(item as string);\n                            }\n                        }\n                        break;\n                    case ListChangedEventType.Remove:\n                        {\n                            foreach (var item in args.Items)\n                            {\n                                v.Remove(item as string);\n                            }\n                        }\n                        break;\n                    case ListChangedEventType.Replace:\n                        {\n                            var index = v.IndexOf(args.Items.ElementAt(0) as string);\n                            if (index >= 0)\n                            {\n                                v[index] = args.Items.ElementAt(0) as string;\n                            }\n                        }\n                        break;\n                    case ListChangedEventType.Insert:\n                        {\n                            for (int j = 0; j < args.Items.Count(); j++)\n                            {\n                                v.Insert(j + args.Index, args.Items.ElementAt(j) as string);\n                            }\n                        }\n                        break;\n                    case ListChangedEventType.Clear:\n                        {\n                            v.Clear();\n                        }\n                        break;\n                    case ListChangedEventType.Refresh:\n                        {\n                            //Nothing, flicker UI\n                        }\n                        break;\n                }\n\n                test();\n            };\n\n\n            vm.Add(\"0\");\n\n            for (int i = 1; i < 100; i++)\n            {\n                vm.Add(i.ToString());\n            }\n\n\n            for (int i = 1; i < 10; i++)\n            {\n                vm.Remove((i + 10).ToString());\n            }\n\n            vm.AddRange(new[] { \"11\", \"12\", \"13\" });\n\n            vm.RemoveRange(new[] { \"11\", \"12\", \"13\" });\n\n            vm.Replace(\"99\");\n\n            vm.Insert(3, \"199\");\n\n            var h = vm.IndexOf(\"21\");\n            vm[h] = \"21\";\n\n            vm.Clear();\n\n        }\n\n        [TestMethod]\n        public void TestObservableMetrics()\n        {\n            var vm = new ViewModel();\n            var proxy = new ObservableProxy(vm);\n            var watch = new Stopwatch();\n            long testNormal = long.MinValue;\n            long testReflected = long.MinValue;\n            long testProxy = long.MinValue;\n            long testInvoke = long.MinValue;\n\n            var invoke = (Action)Delegate.CreateDelegate(typeof(Action), vm, \"MyCommand\");\n\n            //Dry run first before real test\n            for (int k = 0; k < 5; k++)\n            {\n                watch.Reset();\n                watch.Start();\n                for (int i = 0; i < 1000; i++)\n                {\n                    vm.MyCommand();\n                }\n                watch.Stop();\n                testNormal = watch.ElapsedTicks;\n\n                watch.Reset();\n                watch.Start();\n                for (int i = 0; i < 1000; i++)\n                {\n                    proxy.Post(\"MyCommand\");\n                }\n                watch.Stop();\n                testProxy = watch.ElapsedTicks;\n\n\n                watch.Reset();\n                watch.Start();\n                for (int i = 0; i < 1000; i++)\n                {\n                    invoke();\n                }\n                watch.Stop();\n                testInvoke = watch.ElapsedTicks;\n\n                watch.Reset();\n                watch.Start();\n                for (int i = 0; i < 1000; i++)\n                {\n                    vm.GetType().GetMethod(\"MyCommand\").Invoke(vm, null);\n                }\n                watch.Stop();\n                testReflected = watch.ElapsedTicks;\n            }\n\n            //Normal = 81\n            //Reflected = 1088\n            //Cached = 82\n            //Proxy = 507\n            Console.WriteLine(\"Normal = \" + testNormal);\n            Console.WriteLine(\"Reflected = \" + testReflected);\n            Console.WriteLine(\"Cached = \" + testInvoke);\n            Console.WriteLine(\"Proxy = \" + testProxy);\n\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Architecture/Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Injector.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Injector.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"521c4991-f9c6-4bc3-800c-227e7e365ccf\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Foundation.Architecture/Tests/SerializerTests.cs",
    "content": ""
  },
  {
    "path": "Foundation.Architecture/Tests/TestModels.cs",
    "content": "﻿namespace Foundation.Architecture.Tests\n{\n    public interface IWordService\n    {\n        string GetWord();\n    }\n\n    public interface ISentanceService\n    {\n        string GetSentance();\n    }\n    \n    public class WordService : IWordService\n    {\n        public string GetWord()\n        {\n            return \"World\";\n        }\n    }\n\n    public class SentanceService : ISentanceService\n    {\n        [Inject]\n        public IWordService Words;\n\n        public string GetSentance()\n        {\n            return \"Hello \"+Words.GetWord();\n        }\n    }\n\n    public class Document\n    {\n        [Inject]\n        public ISentanceService Sentances;\n        [Inject]\n        public IWordService Words;\n\n        public string Print()\n        {\n            return Sentances.GetSentance();\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Architecture/Tests/ThreadingTests.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Threading.Tasks;\nusing Microsoft.VisualStudio.TestTools.UnitTesting;\n\nnamespace Foundation.Architecture.Tests\n{\n    [TestClass]\n    public class ThreadingTests\n    {\n        [TestCleanup]\n        public void TestCleanup()\n        {\n            updateCounter = 0;\n        }\n\n        private double updateCounter;\n\n        [TestMethod]\n        public async Task TestUpdate()\n        {\n            var task = ThreadingService.RunUpdate(Update);\n\n            await Task.Delay(1000);\n\n            //Asset works\n            Assert.IsTrue(updateCounter >= 900);\n\n            task.Dispose();\n\n            var old = updateCounter;\n\n            await Task.Delay(1000);\n\n            //Asset Dispose works\n            Assert.IsTrue(updateCounter == old);\n        }\n        void Update(double delta)\n        {\n            updateCounter += delta;\n        }\n\n        [TestMethod]\n        public async Task TestDelay()\n        {\n            var task = ThreadingService.RunDelay(UpdateDelay, 1);\n            await Task.Delay(500);\n            //Asset Not early executed\n            Assert.IsTrue(updateCounter == 0);\n            await Task.Delay(1500);\n            //Asset Executed in time\n            Assert.IsTrue(updateCounter == 1);\n            task.Dispose();\n\n            updateCounter = 0;\n            task = ThreadingService.RunDelay(UpdateDelay, 1);\n            await Task.Delay(500);\n            task.Dispose();\n            await Task.Delay(1500);\n            //asset early dispose\n            Assert.IsTrue(updateCounter == 0);\n        }\n        void UpdateDelay()\n        {\n            updateCounter++;\n        }\n\n\n        [TestMethod]\n        public async Task TestCoroutine()\n        {\n            updateCounter = 0;\n            ThreadingService.RunRoutine(CoroutineAsync());\n            await Task.Delay(5000);\n            Console.WriteLine(updateCounter);\n            Assert.IsTrue(updateCounter == 5);\n        }\n\n        IEnumerator CoroutineAsync()\n        {\n            updateCounter++;\n            yield return 1;\n            updateCounter++;\n            yield return 1;\n            updateCounter++;\n            yield return 1;\n            updateCounter++;\n            yield return 1;\n            updateCounter++;\n            yield return 1;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Foundation.Architecture/Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Newtonsoft.Json\" version=\"9.0.1\" targetFramework=\"net452\" />\n</packages>"
  },
  {
    "path": "Foundation.Unity/Assets/Binding/BindingComponenet.cs",
    "content": "﻿using System;\nusing UnityEngine;\nusing System.Collections.Generic;\nusing Foundation.Architecture;\n\n/// <summary>\n/// Represents a single property binding\n/// </summary>\n[Serializable]\npublic class Binding\n{\n    /// <summary>\n    /// The specific member this binding is bound to\n    /// </summary>\n    [SerializeField]\n    public string Member;\n\n    /// <summary>\n    /// Things we can bind to.\n    /// Key value pair of MemberName x  Member Description\n    /// </summary>\n    [HideInInspector]\n    public Dictionary<string, string> Members;\n\n    /// <summary>\n    /// The expected type / signiture of the member. \n    /// </summary>\n    /// <remarks>\n    /// All if empty or null, else white list\n    /// </remarks>\n    [HideInInspector]\n    public Type[] Constraints;\n}\n\n/// <summary>\n/// Base class for all binders\n/// </summary>\n[AddComponentMenu(\"PierPlay/Binding/BindingComponenet\")]\npublic class BindingComponenet : MonoBehaviour\n{\n    /// <summary>\n    /// Find Context override\n    /// </summary>\n    public Component Target;\n\n    /// <summary>\n    /// Collection of all bindings avaliable for targeting\n    /// </summary>\n    public List<Binding> Bindings;\n\n    /// <summary>\n    /// The 'view model' we are bound to\n    /// </summary>\n    public ObservableProxy Context;\n\n  //  private IObservableView view;\n\n    public void Init()\n    {\n        if (Target == null)\n            FindTarget();\n\n        BindTarget();\n    }\n\n    void FindTarget()\n    {\n    //    Target = this.GetComponentInParent<IObservableView>() as Component;\n    }\n\n    void BindTarget()\n    {\n    //    if (view != null)\n    //    {\n    //        view.Unsubscribe(OnContext);\n    //    }\n\n    //  //  view = Target as IObservableView;\n\n    //    if (view != null)\n    //    {\n    //        view.Subscribe(OnContext);\n    //    }\n    }\n\n    void OnContext(ObservableProxy proxy)\n    {\n        //if (Context != null)\n        //{\n        //    Context.OnPropertyChanged -= Context_OnPropertyChanged;\n        //}\n\n        //Context = proxy;\n\n        //if (Context != null)\n        //{\n        //    Context.OnPropertyChanged += Context_OnPropertyChanged;\n        //}\n    }\n\n    private void Context_OnPropertyChanged(string memberName)\n    {\n        if (Bindings == null)\n            return;\n        for (int i = 0; i < Bindings.Count; i++)\n        {\n            if (Bindings[i].Member == memberName)\n            {\n                OnChanged(memberName);\n                return;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Handle any/all property changes here\n    /// </summary>\n    /// <param name=\"memberName\"></param>\n    public virtual void OnChanged(string memberName)\n    {\n\n    }\n\n    /// <summary>\n    /// Post changes to the view model here\n    /// </summary>\n    /// <param name=\"memberName\"></param>\n    /// <param name=\"value\"></param>\n    public void Post(string memberName, object value = null)\n    {\n        if (Context == null)\n        {\n            return;\n        }\n\n      //  Context.Set();\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/Binding/BindingComponenet.cs.meta",
    "content": "fileFormatVersion: 2\nguid: ee7f19e4e318e1b4d9126087b78f9cf4\ntimeCreated: 1473380751\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Binding/IViewTarget.cs",
    "content": "﻿using System;\nusing Foundation.Architecture;\n\n\n///// <summary>\n///// Interface for getting a view model. Used by the view binder\n///// </summary>\n///// <remarks>\n///// Finding the correct model to bind to in hierarchy can get messy\n///// </remarks>\n//public interface IObservableView : IObservable<ObservableProxy>\n//{\n\n//}"
  },
  {
    "path": "Foundation.Unity/Assets/Binding/IViewTarget.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 323186f5224bd8f438a3b8da6ee75aed\ntimeCreated: 1473388625\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Binding/View.cs",
    "content": "﻿using System;\nusing Foundation.Architecture;\nusing UnityEngine;\n\n\n///// <summary>\n///// Put this on the root of everything with a view model.\n///// </summary>\n//[AddComponentMenu(\"PierPlay/Binding/View\")]\n//public class View : MonoBehaviour\n//{\n//    /// <summary>\n//    /// Raised whenever the data model changes\n//    /// </summary>\n//    public event Action<ObservableProxy> OnBinding;\n\n\n//}\n\n\n///// <summary>\n///// Put this on the root of everything with a view model.\n///// </summary>\n//[AddComponentMenu(\"PierPlay/Binding/View\")]\n//public class View : MonoBehaviour\n//{\n//    /// <summary>\n//    /// Raised whenever the data model changes\n//    /// </summary>\n//    public event Action<ObservableProxy> OnBinding;\n\n\n//}\n"
  },
  {
    "path": "Foundation.Unity/Assets/Binding/View.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 84cf8b98c34b6a948b6c1a4bd0b29519\ntimeCreated: 1473380744\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Binding.meta",
    "content": "fileFormatVersion: 2\nguid: 3d2de8d5b30a3aa4dae13812f3457da9\nfolderAsset: yes\ntimeCreated: 1473380702\nlicenseType: Free\nDefaultImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Plugins/Foundation.Architecture.Unity3d.dll.mdb.meta",
    "content": "fileFormatVersion: 2\nguid: 2b49a5831a5db6049b9ff66f8a4c69dc\ntimeCreated: 1473461926\nlicenseType: Free\nDefaultImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Plugins/Foundation.Architecture.Unity3d.dll.meta",
    "content": "fileFormatVersion: 2\nguid: ab0227721ac21b54f9bf470ad8fab9fa\ntimeCreated: 1473303897\nlicenseType: Free\nPluginImporter:\n  serializedVersion: 1\n  iconMap: {}\n  executionOrder: {}\n  isPreloaded: 0\n  platformData:\n    Android:\n      enabled: 1\n      settings:\n        CPU: AnyCPU\n    Any:\n      enabled: 0\n      settings: {}\n    Editor:\n      enabled: 1\n      settings:\n        CPU: AnyCPU\n        DefaultValueInitialized: true\n        OS: AnyOS\n    Linux:\n      enabled: 1\n      settings:\n        CPU: x86\n    Linux64:\n      enabled: 1\n      settings:\n        CPU: x86_64\n    LinuxUniversal:\n      enabled: 1\n      settings:\n        CPU: AnyCPU\n    OSXIntel:\n      enabled: 1\n      settings:\n        CPU: AnyCPU\n    OSXIntel64:\n      enabled: 1\n      settings:\n        CPU: AnyCPU\n    OSXUniversal:\n      enabled: 1\n      settings:\n        CPU: AnyCPU\n    Win:\n      enabled: 1\n      settings:\n        CPU: AnyCPU\n    Win64:\n      enabled: 1\n      settings:\n        CPU: AnyCPU\n    WindowsStoreApps:\n      enabled: 0\n      settings:\n        CPU: AnyCPU\n    iOS:\n      enabled: 1\n      settings:\n        CompileFlags: \n        FrameworkDependencies: \n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Plugins/Foundation.Architecture.Unity3d.pdb.meta",
    "content": "fileFormatVersion: 2\nguid: 00ca4fedbb301114aad23ac0fb630300\ntimeCreated: 1473380534\nlicenseType: Free\nDefaultImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Plugins/Foundation.Architecture.WebGL.dll.meta",
    "content": "fileFormatVersion: 2\nguid: 728180cb81fac194c9e8684be30e8fe6\ntimeCreated: 1473304321\nlicenseType: Free\nPluginImporter:\n  serializedVersion: 1\n  iconMap: {}\n  executionOrder: {}\n  isPreloaded: 0\n  platformData:\n    Android:\n      enabled: 0\n      settings:\n        CPU: AnyCPU\n    Any:\n      enabled: 0\n      settings: {}\n    Editor:\n      enabled: 0\n      settings:\n        CPU: AnyCPU\n        DefaultValueInitialized: true\n        OS: AnyOS\n    Linux:\n      enabled: 0\n      settings:\n        CPU: x86\n    Linux64:\n      enabled: 0\n      settings:\n        CPU: x86_64\n    OSXIntel:\n      enabled: 0\n      settings:\n        CPU: AnyCPU\n    OSXIntel64:\n      enabled: 0\n      settings:\n        CPU: AnyCPU\n    WebGL:\n      enabled: 1\n      settings: {}\n    Win:\n      enabled: 0\n      settings:\n        CPU: AnyCPU\n    Win64:\n      enabled: 0\n      settings:\n        CPU: AnyCPU\n    WindowsStoreApps:\n      enabled: 0\n      settings:\n        CPU: AnyCPU\n    iOS:\n      enabled: 0\n      settings:\n        CompileFlags: \n        FrameworkDependencies: \n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Plugins.meta",
    "content": "fileFormatVersion: 2\nguid: c3aefe2b84b1d2a4d80e61abd5be628e\nfolderAsset: yes\ntimeCreated: 1473303895\nlicenseType: Free\nDefaultImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/Assert.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Linq;\n\n/// <summary>\n/// DOTNET Shim\n/// </summary>\npublic class Assert\n{\n    public static string GetMethodName()\n    {\n        // get call stack\n        var stackTrace = new StackTrace();\n        // get method calls (frames)\n        var stackFrames = stackTrace.GetFrames().ToList();\n\n        string n = String.Empty;\n        for (int i = 0; i < stackFrames.Count; i++)\n        {\n            if (i == 0)\n                continue;\n\n            n = stackFrames[i].GetMethod().Name;\n\n            if (n == \"MoveNext\")\n                continue;\n\n            break;\n        }\n        return n;\n    }\n\n    public static void IsNotNull(object o)\n    {\n       \n        if (o == null)\n            throw new Exception(\"IsNotNull Assertion Failed on \" + GetMethodName());\n    }\n\n    public static void AreEqual<T>(T a, T b)\n    {\n        if (!a.Equals(b))\n            throw new Exception(\"AreEqual Assertion Failed on \" + GetMethodName());\n    }\n\n    public static void IsNull(object o)\n    {\n        if (o != null)\n            throw new Exception(\"IsNull Assertion Failed on \" + GetMethodName());\n    }\n\n    public static void IsTrue(bool o)\n    {\n        if (!o)\n            throw new Exception(\"IsTrue Assertion Failed on \" + GetMethodName());\n    }\n\n    public static void IsFalse(bool o)\n    {\n        if (!o)\n            throw new Exception(\"IsFalse Assertion Failed on \" + GetMethodName());\n    }\n\n    public static void Fail(string o)\n    {\n        throw new Exception(o);\n    }\n\n    public static void IsInstanceOfType(object o, Type t)\n    {\n        if (o.GetType() != t)\n            throw new Exception(\"IsInstanceOfType Assertion Failed on \" + GetMethodName());\n    }\n\n}"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/Assert.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 0244c8afafb4aed47a172a9af4c5091a\ntimeCreated: 1473308412\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/BufferHelperTests.cs",
    "content": "﻿using System;\nusing Foundation.Architecture;\nusing UnityEngine;\n\n\n[IntegrationTest.DynamicTest(\"TestScene\")]\n[IntegrationTest.Timeout(10)]\npublic class BufferHelperTests : MonoBehaviour\n{\n\n    void Start()\n    {\n        TestMethod.RunAll(this, () => { });\n    }\n\n    [TestMethod]\n    public void TestInt()\n    {\n        var buffer = new byte[sizeof(int)];\n\n        BufferHelper.Write(buffer, 0, 69);\n\n        var val = BufferHelper.ReadInt32(buffer, 0);\n\n        Assert.AreEqual(val, 69);\n    }\n\n    [TestMethod]\n    public void TestShort()\n    {\n        var buffer = new byte[sizeof(ushort)];\n\n        BufferHelper.Write(buffer, 0, (ushort)69);\n\n        var val = BufferHelper.ReadUInt16(buffer, 0);\n\n        Assert.AreEqual(val, 69);\n    }\n\n    [TestMethod]\n    public void TestFloat()\n    {\n        var buffer = new byte[sizeof(float)];\n\n        BufferHelper.Write(buffer, 0, 69f);\n\n        var val = BufferHelper.ReadFloat(buffer, 0);\n\n        Assert.AreEqual(val, 69f);\n    }\n\n\n    [TestMethod]\n    public void TestString()\n    {\n        var str = \"Hello World BLAH BLAH\";\n\n        var buffer = new byte[(sizeof(char) * str.Length) + sizeof(ushort)];\n\n        BufferHelper.Write(buffer, 0, str);\n\n        var val = BufferHelper.ReadString(buffer, 0);\n\n        Assert.AreEqual(val, str);\n    }\n\n\n    [TestMethod]\n    public void TestBadRead()\n    {\n        try\n        {\n            var buffer = new byte[sizeof(float)];\n\n            BufferHelper.Write(buffer, 0, 69f);\n\n            BufferHelper.ReadFloat(buffer, 0);\n            BufferHelper.ReadFloat(buffer, sizeof(float));\n\n            Assert.Fail(\"Should of Failed\");\n\n        }\n        catch (Exception ex)\n        {\n            Assert.IsInstanceOfType(ex, typeof(ArgumentException));\n        }\n    }\n\n\n    [TestMethod]\n    public void TestBadWrite()\n    {\n        try\n        {\n            var buffer = new byte[sizeof(float)];\n\n            BufferHelper.Write(buffer, 0, 69f);\n            BufferHelper.Write(buffer, sizeof(float), 69f);\n\n            Assert.Fail(\"Should of Failed\");\n\n        }\n        catch (Exception ex)\n        {\n            Assert.IsInstanceOfType(ex, typeof(ArgumentException));\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/BufferHelperTests.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 7c7b769bf0b589747a79052f1dac102b\ntimeCreated: 1473309957\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/DemoTest.cs",
    "content": "﻿using UnityEngine;\n\n\n[IntegrationTest.DynamicTest(\"TestScene\")]\n[IntegrationTest.Timeout(10)]\npublic class DemoTest : MonoBehaviour\n{\n    void Start()\n    {\n        IntegrationTest.Assert(true);\n\n        IntegrationTest.Pass();\n    }\n}"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/DemoTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: cbb54cb807ef05046a70cbbbd60aecda\ntimeCreated: 1473304596\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/DomainEventsTest.cs",
    "content": "﻿using Foundation.Architecture;\nusing UnityEngine;\n\n[IntegrationTest.DynamicTest(\"TestScene\")]\n[IntegrationTest.Timeout(10)]\npublic class DomainEventsTest : MonoBehaviour\n{\n    public class Msg\n    {\n        public string Content { get; set; }\n    }\n\n    const string MagicString = \"Hello World\";\n    private int counter = 0;\n\n    void Start()\n    {\n        TestMethod.RunAll(this, () => { counter = 0; });\n    }\n\n    [TestMethod]\n    public void TestSubscribe()\n    {\n        //Define a message class to send\n        var msg = new Msg { Content = MagicString };\n\n        //subscribe you handlers\n        DomainEvents<Msg>.Subscribe(Handler);\n\n        //maby ways to send\n        DomainEvents<Msg>.Publish(msg);\n        DomainEvents.Publish(msg);\n        DomainEvents.Publish(msg, typeof(Msg));\n\n        Assert.AreEqual(counter, 3);\n\n        DomainEvents<Msg>.Unsubscribe(Handler);\n        DomainEvents.Publish(msg);\n\n        Assert.AreEqual(counter, 3);\n    }\n\n    [TestMethod]\n    public void TestAddEvent()\n    {\n        var msg = new Msg { Content = MagicString };\n\n        DomainEvents<Msg>.OnMessage += Handler;\n\n        DomainEvents<Msg>.Publish(msg);\n        DomainEvents.Publish(msg);\n        DomainEvents.Publish(msg, typeof(Msg));\n\n        Assert.AreEqual(counter, 3);\n\n        DomainEvents<Msg>.Unsubscribe(Handler);\n        DomainEvents.Publish(msg);\n\n        Assert.AreEqual(counter, 3);\n    }\n\n\n    public void Handler(Msg myMessage)\n    {\n        Assert.AreEqual(myMessage.Content, MagicString);\n        counter++;\n    }\n}"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/DomainEventsTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: aa9b3b094f5459140b33538ca057ecce\ntimeCreated: 1473309957\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/InjectorTests.cs",
    "content": "﻿using System.Linq;\nusing Foundation.Architecture;\nusing UnityEngine;\n\n\n[IntegrationTest.Timeout(10)]\n[IntegrationTest.DynamicTest(\"TestScene\")]\npublic class InjectorTests : MonoBehaviour\n{\n    #region models\n     public interface IWordService\n    {\n        string GetWord();\n    }\n\n    public interface ISentanceService\n    {\n        string GetSentance();\n    }\n    \n    public class WordService : IWordService\n    {\n        public string GetWord()\n        {\n            return \"World\";\n        }\n    }\n\n    public class SentanceService : ISentanceService\n    {\n        [Inject]\n        public IWordService Words;\n\n        public string GetSentance()\n        {\n            return \"Hello \"+Words.GetWord();\n        }\n    }\n\n    public class Document\n    {\n        [Inject]\n        public ISentanceService Sentances;\n        [Inject]\n        public IWordService Words;\n\n        public string Print()\n        {\n            return Sentances.GetSentance();\n        }\n    }\n#endregion\n\n    void Cleanup()\n    {\n        InjectService.UnregisterAll();\n    }\n\n    void Start()\n    {\n        TestMethod.RunAll(this, Cleanup);\n\n        IntegrationTest.Pass();\n    }\n\n\n    [TestMethod]\n    public void TestTransient()\n    {\n        //Register a concrete type keyed by an interface\n        InjectService.RegisterTransient<IWordService, WordService>();\n        InjectService.RegisterTransient<ISentanceService, SentanceService>();\n        InjectService.RegisterTransient<Document>();\n\n        var document = InjectService.Get<Document>();\n\n        Assert.IsNotNull(document);\n        Assert.IsNotNull(document.Sentances);\n        Assert.IsNotNull(document.Words);\n        Assert.AreEqual(document.Print(), document.Sentances.GetSentance());\n    }\n\n    [TestMethod]\n    public void TestTransient2()\n    {\n        //Not we are not using the interface here\n        InjectService.RegisterTransient<WordService>();\n        Assert.IsNotNull(InjectService.Get<WordService>());\n\n        InjectService.RegisterTransient(() => new SentanceService());\n        Assert.IsNotNull(InjectService.Get<SentanceService>());\n    }\n\n\n    [TestMethod]\n    public void TestSingleton()\n    {\n        InjectService.RegisterSingleton<IWordService, WordService>();\n        InjectService.RegisterSingleton<ISentanceService, SentanceService>();\n        InjectService.RegisterSingleton<Document>();\n\n        var document = InjectService.Get<Document>();\n\n        Assert.IsNotNull(document);\n        Assert.IsNotNull(document.Sentances);\n        Assert.IsNotNull(document.Words);\n        Assert.AreEqual(document.Print(), document.Sentances.GetSentance());\n\n\n        var document2 = InjectService.Get<Document>();\n\n        Assert.AreEqual(document, document2);\n        Assert.AreEqual(document.Words, document2.Words);\n        Assert.AreEqual(document.Sentances, document2.Sentances);\n    }\n\n    [TestMethod]\n    public void TestSingleton2()\n    {\n        // Note we are NOT using the interface here\n        // Since we use a dictionary internally, these are keyed by the concrete type only.\n        // We can make the InjectService more flexible, but, that would be a performance hit.\n\n        InjectService.RegisterSingleton<WordService>();\n        Assert.IsNotNull(InjectService.Get<WordService>());\n\n        InjectService.RegisterSingleton(() => new SentanceService());\n        Assert.IsNotNull(InjectService.Get<SentanceService>());\n\n        InjectService.RegisterSingleton(new Document());\n        Assert.IsNotNull(InjectService.Get<Document>());\n\n        InjectService.UnregisterAll();\n\n        InjectService.RegisterSingleton<IWordService, WordService>(new WordService());\n        Assert.IsNotNull(InjectService.Get<IWordService>());\n\n        InjectService.RegisterSingleton<ISentanceService, SentanceService>(() => new SentanceService());\n        Assert.IsNotNull(InjectService.Get<ISentanceService>());\n    }\n\n\n    [TestMethod]\n    public void TestRemove()\n    {\n        InjectService.RegisterTransient<IWordService, WordService>();\n        InjectService.RegisterTransient<ISentanceService, SentanceService>();\n        InjectService.RegisterTransient<Document>();\n\n\n        InjectService.Unregister<Document>();\n        var document = InjectService.Get<Document>();\n        Assert.IsNull(document);\n\n        InjectService.UnregisterAll();\n        Assert.IsNull(InjectService.Get<IWordService>());\n        Assert.IsNull(InjectService.Get<ISentanceService>());\n    }\n\n    [TestMethod]\n    public void TestNull()\n    {\n        var document = InjectService.Get<Document>();\n        Assert.IsNull(document);\n    }\n\n    [TestMethod]\n    public void TestPrint()\n    {\n        InjectService.RegisterSingleton<IWordService, WordService>();\n        InjectService.RegisterSingleton<ISentanceService, SentanceService>();\n        InjectService.RegisterSingleton<Document>();\n\n        var log = InjectService.Print();\n        Assert.IsTrue(log.Count() == 3);\n    }\n}"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/InjectorTests.cs.meta",
    "content": "fileFormatVersion: 2\nguid: e8c7338b83c6e6b4da5ee163f6ef1148\ntimeCreated: 1473308413\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/ObjectEventsTest.cs",
    "content": "﻿using System;\nusing Foundation.Architecture;\nusing UnityEngine;\n\n[IntegrationTest.DynamicTest(\"TestScene\")]\n[IntegrationTest.Timeout(10)]\npublic class ObjectEventsTest : MonoBehaviour\n{\n    public class Msg\n    {\n        public string Content { get; set; }\n    }\n\n    public class SpaceShip\n    {\n\n    }\n\n    public SpaceShip route = new SpaceShip();\n    public SpaceShip route2 = new SpaceShip();\n\n    const string MagicString = \"Hello World\";\n    private int counter = 0;\n\n    void Start()\n    {\n        TestMethod.RunAll(this, () =>\n        {\n            counter = 0;\n            ObjectEvents<string, Msg>.Clear();\n            ObjectEvents<GameObject, Msg>.Clear();\n        });\n    }\n\n    [TestMethod]\n    public void TestStringRoute()\n    {\n        counter = 0;\n        var msg = new Msg {Content = MagicString};\n        var route = \"Users/NVenti\";\n\n        ObjectEvents<string, Msg>.Subscribe(route, Handler);\n        ObjectEvents<string, Msg>.Publish(route, msg);\n        ObjectEvents.Publish(route, msg);\n        ObjectEvents.Publish(route, msg, typeof(string), typeof(Msg));\n        Assert.AreEqual(counter, 3);\n\n        //bad route\n        ObjectEvents.Publish(route + route, msg, typeof(string), typeof(Msg));\n        ObjectEvents<string, Msg>.Unsubscribe(route, Handler);\n        ObjectEvents<string, Msg>.Publish(route, msg);\n\n        Assert.AreEqual(counter, 3);\n\n        ObjectEvents<string, Msg>.Subscribe(route, Handler);\n        ObjectEvents<string, Msg>.Unsubscribe(route);\n        ObjectEvents<string, Msg>.Publish(route, msg);\n\n        Assert.AreEqual(counter, 3);\n    }\n\n\n\n    [TestMethod]\n    public void TestObjectRoute()\n    {\n        counter = 0;\n        //define out message, a class\n        var msg = new Msg {Content = MagicString};\n\n        //subscribe using the object reference\n        ObjectEvents<SpaceShip, Msg>.Subscribe(route, Handler);\n\n        //many ways to send\n        ObjectEvents<SpaceShip, Msg>.Publish(route, msg);\n        ObjectEvents.Publish(route, msg);\n        ObjectEvents.Publish(route, msg, typeof(SpaceShip), typeof(Msg));\n        Assert.AreEqual(counter, 3);\n\n        //bad route\n        ObjectEvents.Publish(route2, msg, typeof(SpaceShip), typeof(Msg));\n\n        //be sure to clean up as we are not using weak references\n        ObjectEvents<SpaceShip, Msg>.Unsubscribe(route, Handler);\n\n        ObjectEvents<SpaceShip, Msg>.Publish(route, msg);\n        Assert.AreEqual(counter, 3);\n\n        ObjectEvents<SpaceShip, Msg>.Subscribe(route, Handler);\n        ObjectEvents<SpaceShip, Msg>.Unsubscribe(route);\n        ObjectEvents<SpaceShip, Msg>.Publish(route, msg);\n\n        Assert.AreEqual(counter, 3);\n    }\n\n\n    public void Handler(Msg myMessage)\n    {\n        Assert.AreEqual(myMessage.Content, MagicString);\n        counter++;\n    }\n}"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/ObjectEventsTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 470c3da55fc65b043a3618cce5e8915f\ntimeCreated: 1473309957\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/ObservableTests.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing Foundation.Architecture;\nusing UnityEngine;\n\n[IntegrationTest.DynamicTest(\"TestScene\")]\n[IntegrationTest.Timeout(10)]\npublic class ObservableTests : MonoBehaviour\n{\n    public class ViewModel : ObservableObject\n    {\n        private string _myProperty2;\n        public string MyProperty2\n        {\n            get { return _myProperty2; }\n            set\n            {\n                if (_myProperty2 == value)\n                    return;\n                _myProperty2 = value;\n                RaiseChange(\"MyProperty2\", value);\n            }\n        }\n\n        private int _myProperty;\n        public int MyProperty\n        {\n            get { return _myProperty; }\n            set\n            {\n                if (_myProperty == value)\n                    return;\n                _myProperty = value;\n                RaiseChange(\"MyProperty\", value);\n            }\n        }\n\n        public void MyCommand()\n        {\n            MyProperty++;\n        }\n\n        public void MyCommand2(int value)\n        {\n            MyProperty = (value + _myProperty);\n        }\n\n    }\n    \n\n    void Start()\n    {\n        TestMethod.RunAll(this, () => { });\n    }\n    \n    [TestMethod]\n    public void TestObservableObject()\n    {\n        var vm = new ViewModel();\n        int counter = 0;\n\n        vm.OnPublish += (name) =>\n        {\n            Assert.AreEqual(name.Name, \"MyProperty\");\n            Assert.AreEqual(name.Sender, vm);\n            counter++;\n        };\n\n        vm.MyCommand();\n        Assert.AreEqual(vm.MyProperty, 1);\n\n        vm.MyCommand2(2);\n        Assert.AreEqual(vm.MyProperty, 3);\n\n        vm.MyProperty = 0;\n        Assert.AreEqual(vm.MyProperty, 0);\n\n        Assert.AreEqual(counter, 3);\n    }\n\n\n    [TestMethod]\n    public void TestObservableProxy()\n    {\n        var vm = new ViewModel();\n        var proxy = new ObservableProxy(vm);\n        int counter2 = 0;\n        int counter1 = 0;\n\n        vm.OnPublish += (e) =>\n        {\n            counter1++;\n        };\n\n        proxy.OnPublish += (e) =>\n        {\n            counter2++;\n        };\n\n        proxy.Post(\"MyCommand\");\n        Assert.AreEqual(vm.MyProperty, 1);\n\n        proxy.Post(\"MyCommand2\", 2);\n        Assert.AreEqual(vm.MyProperty, 3);\n\n        proxy.Post(\"MyProperty\", 0);\n        Assert.AreEqual(vm.MyProperty, 0);\n\n        Assert.AreEqual(counter1, 3);\n        Assert.AreEqual(counter2, 3);\n\n        proxy.Dispose();\n    }\n\n\n    [TestMethod]\n    public void TestConversion()\n    {\n        var vm = new ViewModel();\n        var proxy = new ObservableProxy(vm);\n        int counter2 = 0;\n        int counter1 = 0;\n\n        vm.OnPublish += (e) =>\n        {\n            counter1++;\n        };\n\n        proxy.OnPublish += (e) =>\n        {\n            counter2++;\n        };\n\n        proxy.Post(\"MyCommand\");\n        Assert.AreEqual(vm.MyProperty, 1);\n\n        proxy.Post(\"MyCommand2\", \"2\");\n        Assert.AreEqual(vm.MyProperty, 3);\n\n        proxy.Post(\"MyProperty\", 0f);\n        Assert.AreEqual(vm.MyProperty, 0);\n\n        Assert.AreEqual(counter1, 3);\n        Assert.AreEqual(counter2, 3);\n\n\n        proxy.Post(\"MyProperty2\", \"1\");\n        var temp = proxy.Get<int>(\"MyProperty2\");\n        Assert.AreEqual(temp, 1);\n\n        proxy.Dispose();\n    }\n\n    [TestMethod]\n    public void TestObservable()\n    {\n        var vm = new ObservableProperty<int>();\n\n        vm.Value = 10;\n\n        int counter = 0;\n\n        vm.OnPublish += (v) =>\n        {\n            if (counter == 0)\n                Assert.AreEqual(10, v);\n            counter++;\n        };\n\n        vm.Value = 0;\n\n        vm.Value++;\n        Assert.AreEqual(vm.Value, 1);\n\n        vm.Value--;\n        Assert.AreEqual(vm.Value, 0);\n\n        vm.Value++;\n        Assert.AreEqual(vm.Value, 1);\n\n        Assert.AreEqual(counter, 5);\n    }\n\n    [TestMethod]\n    public void TestList()\n    {\n        var vm = new ObservableList<string>();\n        var v = new List<string>();\n\n        Action test = () =>\n        {\n            Assert.IsTrue(v.Count == vm.Count);\n            for (int i = 0; i < v.Count; i++)\n            {\n                Assert.IsTrue(v[i] == vm[i]);\n            }\n        };\n\n        vm.OnPublish += (args) =>\n        {\n            switch (args.Event)\n            {\n                case ListChangedEventType.Add:\n                    {\n                        foreach (var item in args.Items)\n                        {\n                            v.Add(item as string);\n                        }\n                    }\n                    break;\n                case ListChangedEventType.Remove:\n                    {\n                        foreach (var item in args.Items)\n                        {\n                            v.Remove(item as string);\n                        }\n                    }\n                    break;\n                case ListChangedEventType.Replace:\n                    {\n                        var index = v.IndexOf(args.Items.ElementAt(0) as string);\n                        if (index >= 0)\n                        {\n                            v[index] = args.Items.ElementAt(0) as string;\n                        }\n                    }\n                    break;\n                case ListChangedEventType.Insert:\n                    {\n                        for (int j = 0; j < args.Items.Count(); j++)\n                        {\n                            v.Insert(j + args.Index, args.Items.ElementAt(j) as string);\n                        }\n                    }\n                    break;\n                case ListChangedEventType.Clear:\n                    {\n                        v.Clear();\n                    }\n                    break;\n                case ListChangedEventType.Refresh:\n                    {\n                        //Nothing, flicker UI\n                    }\n                    break;\n            }\n\n            test();\n        };\n\n\n        vm.Add(\"0\");\n\n        for (int i = 1; i < 100; i++)\n        {\n            vm.Add(i.ToString());\n        }\n\n\n        for (int i = 1; i < 10; i++)\n        {\n            vm.Remove((i + 10).ToString());\n        }\n\n        vm.AddRange(new[] { \"11\", \"12\", \"13\" });\n\n        vm.RemoveRange(new[] { \"11\", \"12\", \"13\" });\n\n        vm.Replace(\"99\");\n\n        vm.Insert(3, \"199\");\n\n        var h = vm.IndexOf(\"21\");\n        vm[h] = \"21\";\n\n        vm.Clear();\n\n    }\n\n    [TestMethod]\n    public void TestObservableMetrics()\n    {\n        var vm = new ViewModel();\n        var proxy = new ObservableProxy(vm);\n        var watch = new Stopwatch();\n        long testNormal = long.MinValue;\n        long testReflected = long.MinValue;\n        long testProxy = long.MinValue;\n        long testInvoke = long.MinValue;\n\n        var invoke = (Action)Delegate.CreateDelegate(typeof(Action), vm, \"MyCommand\");\n\n        //Dry run first before real test\n        for (int k = 0; k < 5; k++)\n        {\n            watch.Reset();\n            watch.Start();\n            for (int i = 0; i < 1000; i++)\n            {\n                vm.MyCommand();\n            }\n            watch.Stop();\n            testNormal = watch.ElapsedTicks;\n\n            watch.Reset();\n            watch.Start();\n            for (int i = 0; i < 1000; i++)\n            {\n                proxy.Post(\"MyCommand\");\n            }\n            watch.Stop();\n            testProxy = watch.ElapsedTicks;\n\n\n            watch.Reset();\n            watch.Start();\n            for (int i = 0; i < 1000; i++)\n            {\n                invoke();\n            }\n            watch.Stop();\n            testInvoke = watch.ElapsedTicks;\n\n            watch.Reset();\n            watch.Start();\n            for (int i = 0; i < 1000; i++)\n            {\n                vm.GetType().GetMethod(\"MyCommand\").Invoke(vm, null);\n            }\n            watch.Stop();\n            testReflected = watch.ElapsedTicks;\n        }\n\n        //Normal = 81\n        //Reflected = 1088\n        //Cached = 82\n        //Proxy = 507\n        UnityEngine.Debug.Log(\"Normal = \" + testNormal);\n        UnityEngine.Debug.Log(\"Reflected = \" + testReflected);\n        UnityEngine.Debug.Log(\"Cached = \" + testInvoke);\n        UnityEngine.Debug.Log(\"Proxy = \" + testProxy);\n\n    }\n}"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/ObservableTests.cs.meta",
    "content": "fileFormatVersion: 2\nguid: a0b8095b555d3aa4a88302ff66af4885\ntimeCreated: 1473309957\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/TestMethod.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Linq;\nusing System.Reflection;\nusing UnityEngine;\n\n/// <summary>\n/// DOTNET Shim\n/// </summary>\npublic class TestMethod : Attribute\n{\n    public static void RunAll(MonoBehaviour testClass, Action cleanup)\n    {\n        testClass.StartCoroutine(RunAllAsync(testClass, cleanup));\n    }\n\n    public static IEnumerator RunAllAsync(MonoBehaviour testClass, Action cleanup)\n    {\n        var calls = testClass.GetType().GetMethods()\n            .Where(\n                o => o.GetCustomAttributes(typeof(TestMethod), false)\n                    .Any(a => a.GetType() == typeof(TestMethod)))\n            .ToArray();\n\n        var name = testClass.GetType().Name;\n        Debug.Log(name + \".Start\");\n        foreach (var call in calls)\n        {\n            Debug.Log(name + \".Cleanup\");\n            cleanup();\n            Debug.Log(name + \".\" + call.Name);\n\n            if (call.ReturnType == typeof(IEnumerator))\n            {\n                yield return testClass.StartCoroutine(call.Name);\n            }\n            else\n            {\n                try\n                {\n                    call.Invoke(testClass, null);\n                }\n                catch (Exception ex)\n                {\n                    Debug.LogError(\"ERROR \" + call.Name + \" \" + ex.Message);\n                    UnityEngine.Debug.LogException(ex);\n                    yield break;\n                }\n            }\n\n        }\n\n        cleanup();\n        Debug.Log(name + \".End\");\n        IntegrationTest.Pass(testClass.gameObject);\n    }\n}"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/TestMethod.cs.meta",
    "content": "fileFormatVersion: 2\nguid: c2f222b33a8dd8045955ab79f5094e84\ntimeCreated: 1473308412\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/TestScene.unity.meta",
    "content": "fileFormatVersion: 2\nguid: 4ca74bd6b8955724693eb9f9fd457961\ntimeCreated: 1473304364\nlicenseType: Free\nDefaultImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/ThreadingTests.cs",
    "content": "﻿using System.Collections;\nusing Foundation.Architecture;\nusing UnityEngine;\n\n[IntegrationTest.DynamicTest(\"TestScene\")]\n[IntegrationTest.Timeout(10)]\npublic class ThreadingTests : MonoBehaviour\n{\n    private double updateCounter;\n\n    public void Start()\n    {\n        TestMethod.RunAll(this, () => updateCounter = 0);\n    }\n\n\n    [TestMethod]\n    public IEnumerator TestUpdate()\n    {\n        var task = ThreadingService.RunUpdate(MyUpdate);\n        yield return 1;\n\n        yield return new WaitForSeconds(1.2f);\n\n        //Asset works\n        Assert.IsTrue(updateCounter >= 1);\n\n        task.Dispose();\n\n        var old = updateCounter;\n\n        yield return new WaitForSeconds(1);\n\n        //Asset Dispose works\n        Assert.IsTrue(updateCounter == old);\n    }\n    void MyUpdate(double delta)\n    {\n        updateCounter += delta;\n    }\n\n    [TestMethod]\n    public IEnumerator TestDelay()\n    {\n        var task = ThreadingService.RunDelay(UpdateDelay, 1);\n        yield return new WaitForSeconds(.5f);\n        //Asset Not early executed\n        Assert.IsTrue(updateCounter == 0);\n        yield return new WaitForSeconds(2f);\n        //Asset Executed in time\n        Assert.IsTrue(updateCounter >= 1);\n        task.Dispose();\n\n        updateCounter = 0;\n        task = ThreadingService.RunDelay(UpdateDelay, 1);\n        yield return new WaitForSeconds(.5f);\n        task.Dispose();\n        yield return new WaitForSeconds(1.5f);\n        //asset early dispose\n        Assert.IsTrue(updateCounter == 0);\n    }\n    void UpdateDelay()\n    {\n        updateCounter++;\n    }\n\n\n    [TestMethod]\n    public IEnumerator TestCoroutine()\n    {\n        updateCounter = 0;\n        ThreadingService.RunRoutine(CoroutineAsync());\n        yield return new WaitForSeconds(1);\n        Assert.IsTrue(updateCounter == 5);\n    }\n\n    IEnumerator CoroutineAsync()\n    {\n        updateCounter++;\n        yield return 1;\n        updateCounter++;\n        yield return 1;\n        updateCounter++;\n        yield return 1;\n        updateCounter++;\n        yield return 1;\n        updateCounter++;\n        yield return 1;\n    }\n}"
  },
  {
    "path": "Foundation.Unity/Assets/Tests/ThreadingTests.cs.meta",
    "content": "fileFormatVersion: 2\nguid: d6a460540a452e743882591984cdc4b8\ntimeCreated: 1473309957\nlicenseType: Free\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/Tests.meta",
    "content": "fileFormatVersion: 2\nguid: 9cab23d9dbd89d74591ce858c1a129e3\nfolderAsset: yes\ntimeCreated: 1473304557\nlicenseType: Free\nDefaultImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Assertions.meta",
    "content": "fileFormatVersion: 2\nguid: b27b28700d3365146808b6e082748201\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/Icons.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    public static class Icons\n    {\n        const string k_IconsFolderName = \"icons\";\n        private static readonly string k_IconsFolderPath = String.Format(\"UnityTestTools{0}Common{0}Editor{0}{1}\", Path.DirectorySeparatorChar, k_IconsFolderName);\n\n        private static readonly string k_IconsAssetsPath = \"\";\n\n        public static readonly Texture2D FailImg;\n        public static readonly Texture2D IgnoreImg;\n        public static readonly Texture2D SuccessImg;\n        public static readonly Texture2D UnknownImg;\n        public static readonly Texture2D InconclusiveImg;\n        public static readonly Texture2D StopwatchImg;\n\n        public static readonly GUIContent GUIUnknownImg;\n        public static readonly GUIContent GUIInconclusiveImg;\n        public static readonly GUIContent GUIIgnoreImg;\n        public static readonly GUIContent GUISuccessImg;\n        public static readonly GUIContent GUIFailImg;\n\n        static Icons()\n        {\n            var dirs = Directory.GetDirectories(\"Assets\", k_IconsFolderName, SearchOption.AllDirectories).Where(s => s.EndsWith(k_IconsFolderPath));\n            if (dirs.Any())\n                k_IconsAssetsPath = dirs.First();\n            else\n                Debug.LogWarning(\"The UnityTestTools asset folder path is incorrect. If you relocated the tools please change the path accordingly (Icons.cs).\");\n\n            FailImg = LoadTexture(\"failed.png\");\n            IgnoreImg = LoadTexture(\"ignored.png\");\n            SuccessImg = LoadTexture(\"passed.png\");\n            UnknownImg = LoadTexture(\"normal.png\");\n            InconclusiveImg = LoadTexture(\"inconclusive.png\");\n            StopwatchImg = LoadTexture(\"stopwatch.png\");\n\n            GUIUnknownImg = new GUIContent(UnknownImg);\n            GUIInconclusiveImg = new GUIContent(InconclusiveImg);\n            GUIIgnoreImg = new GUIContent(IgnoreImg);\n            GUISuccessImg = new GUIContent(SuccessImg);\n            GUIFailImg = new GUIContent(FailImg);\n        }\n\n        private static Texture2D LoadTexture(string fileName)\n        {\n            return (Texture2D)AssetDatabase.LoadAssetAtPath(k_IconsAssetsPath + Path.DirectorySeparatorChar + fileName, typeof(Texture2D));\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/Icons.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 8571844b0c115b84cbe8b3f67e8dec04\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/ProjectSettingsBase.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    public abstract class ProjectSettingsBase : ScriptableObject\n    {\n        private static readonly string k_SettingsPath = Path.Combine(\"UnityTestTools\", \"Common\");\n        const string k_SettingsFolder = \"Settings\";\n\n        public virtual void Save()\n        {\n            EditorUtility.SetDirty(this);\n        }\n\n        public static T Load<T>() where T : ProjectSettingsBase, new ()\n        {\n            var pathsInProject = Directory.GetDirectories(\"Assets\", \"*\", SearchOption.AllDirectories)\n                                 .Where(s => s.Contains(k_SettingsPath));\n\n            if (pathsInProject.Count() == 0) Debug.LogError(\"Can't find settings path: \" + k_SettingsPath);\n\n            string pathInProject = Path.Combine(pathsInProject.First(), k_SettingsFolder);\n            var assetPath = Path.Combine(pathInProject, typeof(T).Name) + \".asset\";\n            var settings = AssetDatabase.LoadAssetAtPath(assetPath, typeof(T)) as T;\n\n            if (settings != null) return settings;\n\n            settings = CreateInstance<T>();\n            Directory.CreateDirectory(pathInProject);\n            AssetDatabase.CreateAsset(settings, assetPath);\n            return settings;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/ProjectSettingsBase.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 9ac961be07107124a88dcb81927143d4\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/ResultWriter/ResultSummarizer.cs",
    "content": "// ****************************************************************\n// Based on nUnit 2.6.2 (http://www.nunit.org/)\n// ****************************************************************\n\nusing System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    /// <summary>\n    /// Summary description for ResultSummarizer.\n    /// </summary>\n    public class ResultSummarizer\n    {\n        private int m_ErrorCount;\n        private int m_FailureCount;\n        private int m_IgnoreCount;\n        private int m_InconclusiveCount;\n        private int m_NotRunnable;\n        private int m_ResultCount;\n        private int m_SkipCount;\n        private int m_SuccessCount;\n        private int m_TestsRun;\n\n        private TimeSpan m_Duration;\n\n        public ResultSummarizer(IEnumerable<ITestResult> results)\n        {\n            foreach (var result in results)\n                Summarize(result);\n        }\n\n        public bool Success\n        {\n            get { return m_FailureCount == 0; }\n        }\n\n        /// <summary>\n        /// Returns the number of test cases for which results\n        /// have been summarized. Any tests excluded by use of\n        /// Category or Explicit attributes are not counted.\n        /// </summary>\n        public int ResultCount\n        {\n            get { return m_ResultCount; }\n        }\n\n        /// <summary>\n        /// Returns the number of test cases actually run, which\n        /// is the same as ResultCount, less any Skipped, Ignored\n        /// or NonRunnable tests.\n        /// </summary>\n        public int TestsRun\n        {\n            get { return m_TestsRun; }\n        }\n\n        /// <summary>\n        /// Returns the number of tests that passed\n        /// </summary>\n        public int Passed\n        {\n            get { return m_SuccessCount; }\n        }\n\n        /// <summary>\n        /// Returns the number of test cases that had an error.\n        /// </summary>\n        public int Errors\n        {\n            get { return m_ErrorCount; }\n        }\n\n        /// <summary>\n        /// Returns the number of test cases that failed.\n        /// </summary>\n        public int Failures\n        {\n            get { return m_FailureCount; }\n        }\n\n        /// <summary>\n        /// Returns the number of test cases that failed.\n        /// </summary>\n        public int Inconclusive\n        {\n            get { return m_InconclusiveCount; }\n        }\n\n        /// <summary>\n        /// Returns the number of test cases that were not runnable\n        /// due to errors in the signature of the class or method.\n        /// Such tests are also counted as Errors.\n        /// </summary>\n        public int NotRunnable\n        {\n            get { return m_NotRunnable; }\n        }\n\n        /// <summary>\n        /// Returns the number of test cases that were skipped.\n        /// </summary>\n        public int Skipped\n        {\n            get { return m_SkipCount; }\n        }\n\n        public int Ignored\n        {\n            get { return m_IgnoreCount; }\n        }\n\n        public double Duration\n        {\n            get { return m_Duration.TotalSeconds; }\n        }\n\n        public int TestsNotRun\n        {\n            get { return m_SkipCount + m_IgnoreCount + m_NotRunnable; }\n        }\n\n        public void Summarize(ITestResult result)\n        {\n            m_Duration += TimeSpan.FromSeconds(result.Duration);\n            m_ResultCount++;\n            \n            if(!result.Executed)\n            {\n                if(result.IsIgnored)\n                {\n                    m_IgnoreCount++;\n                    return;\n                }\n                \n                m_SkipCount++;\n                return;\n            }\n            \n            switch (result.ResultState)\n            {\n                case TestResultState.Success:\n                    m_SuccessCount++;\n                    m_TestsRun++;\n                    break;\n                case TestResultState.Failure:\n                    m_FailureCount++;\n                    m_TestsRun++;\n                    break;\n                case TestResultState.Error:\n                case TestResultState.Cancelled:\n                    m_ErrorCount++;\n                    m_TestsRun++;\n                    break;\n                case TestResultState.Inconclusive:\n                    m_InconclusiveCount++;\n                    m_TestsRun++;\n                    break;\n                case TestResultState.NotRunnable:\n                    m_NotRunnable++;\n                    // errorCount++;\n                    break;\n                case TestResultState.Ignored:\n                    m_IgnoreCount++;\n                    break;\n                default:\n                    m_SkipCount++;\n                    break;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/ResultWriter/ResultSummarizer.cs.meta",
    "content": "fileFormatVersion: 2\nguid: ce89106be5bd4204388d58510e4e55da\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/ResultWriter/StackTraceFilter.cs",
    "content": "// ****************************************************************\n// Based on nUnit 2.6.2 (http://www.nunit.org/)\n// ****************************************************************\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    /// <summary>\n    /// Summary description for StackTraceFilter.\n    /// </summary>\n    public class StackTraceFilter\n    {\n        public static string Filter(string stack)\n        {\n            if (stack == null) return null;\n            var sw = new StringWriter();\n            var sr = new StringReader(stack);\n\n            try\n            {\n                string line;\n                while ((line = sr.ReadLine()) != null)\n                {\n                    if (!FilterLine(line))\n                        sw.WriteLine(line.Trim());\n                }\n            }\n            catch (Exception)\n            {\n                return stack;\n            }\n            return sw.ToString();\n        }\n\n        static bool FilterLine(string line)\n        {\n            string[] patterns =\n            {\n                \"NUnit.Core.TestCase\",\n                \"NUnit.Core.ExpectedExceptionTestCase\",\n                \"NUnit.Core.TemplateTestCase\",\n                \"NUnit.Core.TestResult\",\n                \"NUnit.Core.TestSuite\",\n                \"NUnit.Framework.Assertion\",\n                \"NUnit.Framework.Assert\",\n                \"System.Reflection.MonoMethod\"\n            };\n\n            for (int i = 0; i < patterns.Length; i++)\n            {\n                if (line.IndexOf(patterns[i]) > 0)\n                    return true;\n            }\n\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/ResultWriter/StackTraceFilter.cs.meta",
    "content": "fileFormatVersion: 2\nguid: fe6b4d68575d4ba44b1d5c5c3f0e96d3\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/ResultWriter/XmlResultWriter.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Security;\nusing System.Text;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    public class XmlResultWriter\n    {\n        private readonly StringBuilder m_ResultWriter = new StringBuilder();\n        private int m_Indend;\n        private readonly string m_SuiteName;\n        private readonly ITestResult[] m_Results;\n        string m_Platform;\n\n        public XmlResultWriter(string suiteName, string platform, ITestResult[] results)\n        {\n            m_SuiteName = suiteName;\n            m_Results = results;\n            m_Platform = platform;\n        }\n\n        private const string k_NUnitVersion = \"2.6.2-Unity\";\n\n        public string GetTestResult()\n        {\n            InitializeXmlFile(m_SuiteName, new ResultSummarizer(m_Results));\n            foreach (var result in m_Results)\n            {\n                WriteResultElement(result);\n            }\n            TerminateXmlFile();\n            return m_ResultWriter.ToString();\n        }\n\n        private void InitializeXmlFile(string resultsName, ResultSummarizer summaryResults)\n        {\n            WriteHeader();\n\n            DateTime now = DateTime.Now;\n            var attributes = new Dictionary<string, string>\n            {\n                {\"name\", \"Unity Tests\"},\n                {\"total\", summaryResults.TestsRun.ToString()},\n                {\"errors\", summaryResults.Errors.ToString()},\n                {\"failures\", summaryResults.Failures.ToString()},\n                {\"not-run\", summaryResults.TestsNotRun.ToString()},\n                {\"inconclusive\", summaryResults.Inconclusive.ToString()},\n                {\"ignored\", summaryResults.Ignored.ToString()},\n                {\"skipped\", summaryResults.Skipped.ToString()},\n                {\"invalid\", summaryResults.NotRunnable.ToString()},\n                {\"date\", now.ToString(\"yyyy-MM-dd\")},\n                {\"time\", now.ToString(\"HH:mm:ss\")}\n            };\n\n            WriteOpeningElement(\"test-results\", attributes);\n\n            WriteEnvironment(m_Platform);\n            WriteCultureInfo();\n            WriteTestSuite(resultsName, summaryResults);\n            WriteOpeningElement(\"results\");\n        }\n\n        private void WriteOpeningElement(string elementName)\n        {\n            WriteOpeningElement(elementName, new Dictionary<string, string>());\n        }\n\n        private void WriteOpeningElement(string elementName, Dictionary<string, string> attributes)\n        {\n            WriteOpeningElement(elementName, attributes, false);\n        }\n\n\n        private void WriteOpeningElement(string elementName, Dictionary<string, string> attributes, bool closeImmediatelly)\n        {\n            WriteIndend();\n            m_Indend++;\n            m_ResultWriter.Append(\"<\");\n            m_ResultWriter.Append(elementName);\n            foreach (var attribute in attributes)\n            {\n                m_ResultWriter.AppendFormat(\" {0}=\\\"{1}\\\"\", attribute.Key, SecurityElement.Escape(attribute.Value));\n            }\n            if (closeImmediatelly)\n            {\n                m_ResultWriter.Append(\" /\");\n                m_Indend--;\n            }\n            m_ResultWriter.AppendLine(\">\");\n        }\n\n        private void WriteIndend()\n        {\n            for (int i = 0; i < m_Indend; i++)\n            {\n                m_ResultWriter.Append(\"  \");\n            }\n        }\n\n        private void WriteClosingElement(string elementName)\n        {\n            m_Indend--;\n            WriteIndend();\n            m_ResultWriter.AppendLine(\"</\" + elementName + \">\");\n        }\n\n        private void WriteHeader()\n        {\n            m_ResultWriter.AppendLine(\"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\");\n            m_ResultWriter.AppendLine(\"<!--This file represents the results of running a test suite-->\");\n        }\n\n        static string GetEnvironmentUserName()\n        {\n            return Environment.UserName;\n        }\n\n        static string GetEnvironmentMachineName()\n        {\n            return Environment.MachineName;\n        }\n\n        static string GetEnvironmentUserDomainName()\n        {\n            return Environment.UserDomainName;\n        }\n\n        static string GetEnvironmentVersion()\n        {\n            return Environment.Version.ToString();\n        }\n\n        static string GetEnvironmentOSVersion()\n        {\n            return Environment.OSVersion.ToString();\n        }\n\n        static string GetEnvironmentOSVersionPlatform()\n        {\n            return Environment.OSVersion.Platform.ToString();\n        }\n\n        static string EnvironmentGetCurrentDirectory()\n        {\n            return Environment.CurrentDirectory;\n        }\n\n        private void WriteEnvironment( string targetPlatform )\n        {\n            var attributes = new Dictionary<string, string>\n            {\n                {\"nunit-version\", k_NUnitVersion},\n                {\"clr-version\", GetEnvironmentVersion()},\n                {\"os-version\", GetEnvironmentOSVersion()},\n                {\"platform\", GetEnvironmentOSVersionPlatform()},\n                {\"cwd\", EnvironmentGetCurrentDirectory()},\n                {\"machine-name\", GetEnvironmentMachineName()},\n                {\"user\", GetEnvironmentUserName()},\n                {\"user-domain\", GetEnvironmentUserDomainName()},\n                {\"unity-version\", Application.unityVersion},\n                {\"unity-platform\", targetPlatform}\n            };\n            WriteOpeningElement(\"environment\", attributes, true);\n        }\n\n        private void WriteCultureInfo()\n        {\n            var attributes = new Dictionary<string, string>\n            {\n                {\"current-culture\", CultureInfo.CurrentCulture.ToString()},\n                {\"current-uiculture\", CultureInfo.CurrentUICulture.ToString()}\n            };\n            WriteOpeningElement(\"culture-info\", attributes, true);\n        }\n\n        private void WriteTestSuite(string resultsName, ResultSummarizer summaryResults)\n        {\n            var attributes = new Dictionary<string, string>\n            {\n                {\"name\", resultsName},\n                {\"type\", \"Assembly\"},\n                {\"executed\", \"True\"},\n                {\"result\", summaryResults.Success ? \"Success\" : \"Failure\"},\n                {\"success\", summaryResults.Success ? \"True\" : \"False\"},\n                {\"time\", summaryResults.Duration.ToString(\"#####0.000\", NumberFormatInfo.InvariantInfo)}\n            };\n            WriteOpeningElement(\"test-suite\", attributes);\n        }\n\n        private void WriteResultElement(ITestResult result)\n        {\n            StartTestElement(result);\n\n            switch (result.ResultState)\n            {\n                case TestResultState.Ignored:\n                case TestResultState.NotRunnable:\n                case TestResultState.Skipped:\n                    WriteReasonElement(result);\n                    break;\n\n                case TestResultState.Failure:\n                case TestResultState.Error:\n                case TestResultState.Cancelled:\n                    WriteFailureElement(result);\n                    break;\n                case TestResultState.Success:\n                case TestResultState.Inconclusive:\n                    if (result.Message != null)\n                        WriteReasonElement(result);\n                    break;\n            };\n\n            WriteClosingElement(\"test-case\");\n        }\n\n        private void TerminateXmlFile()\n        {\n            WriteClosingElement(\"results\");\n            WriteClosingElement(\"test-suite\");\n            WriteClosingElement(\"test-results\");\n        }\n\n        #region Element Creation Helpers\n\n        private void StartTestElement(ITestResult result)\n        {\n            var attributes = new Dictionary<string, string>\n            {\n                {\"name\", result.FullName},\n                {\"executed\", result.Executed.ToString()}\n            };\n            string resultString;\n            switch (result.ResultState)\n            {\n                case TestResultState.Cancelled:\n                    resultString = TestResultState.Failure.ToString();\n                    break;\n                default:\n                    resultString = result.ResultState.ToString();\n                    break;\n            }\n            attributes.Add(\"result\", resultString);\n            if (result.Executed)\n            {\n                attributes.Add(\"success\", result.IsSuccess.ToString());\n                attributes.Add(\"time\", result.Duration.ToString(\"#####0.000\", NumberFormatInfo.InvariantInfo));\n            }\n            WriteOpeningElement(\"test-case\", attributes);\n        }\n\n        private void WriteReasonElement(ITestResult result)\n        {\n            WriteOpeningElement(\"reason\");\n            WriteOpeningElement(\"message\");\n            WriteCData(result.Message);\n            WriteClosingElement(\"message\");\n            WriteClosingElement(\"reason\");\n        }\n\n        private void WriteFailureElement(ITestResult result)\n        {\n            WriteOpeningElement(\"failure\");\n            WriteOpeningElement(\"message\");\n            WriteCData(result.Message);\n            WriteClosingElement(\"message\");\n            WriteOpeningElement(\"stack-trace\");\n            if (result.StackTrace != null)\n                WriteCData(StackTraceFilter.Filter(result.StackTrace));\n            WriteClosingElement(\"stack-trace\");\n            WriteClosingElement(\"failure\");\n        }\n\n        #endregion\n\n        private void WriteCData(string text)\n        {\n            if (string.IsNullOrEmpty(text)) \n                return;\n            m_ResultWriter.AppendFormat(\"<![CDATA[{0}]]>\", text);\n            m_ResultWriter.AppendLine();\n        }\n\n        public void WriteToFile(string resultDestiantion, string resultFileName)\n        {\n            try\n            {\n                var path = Path.Combine(resultDestiantion, resultFileName);\n                Debug.Log(\"Saving results in \" + path);\n                File.WriteAllText(path, GetTestResult(), Encoding.UTF8);\n            }\n            catch (Exception e)\n            {\n                Debug.LogError(\"Error while opening file\");\n                Debug.LogException(e);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/ResultWriter/XmlResultWriter.cs.meta",
    "content": "fileFormatVersion: 2\nguid: e9bba41ace7686d4ab0c400d1e7f55b7\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/ResultWriter.meta",
    "content": "fileFormatVersion: 2\nguid: 4ffbf5a07740aa5479651bd415f52ebb\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/Styles.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    public static class Styles\n    {\n        public static GUIStyle info;\n        public static GUIStyle testList;\n\n        public static GUIStyle selectedFoldout;\n        public static GUIStyle foldout;\n        public static GUIStyle toolbarLabel;\n        \n        public static GUIStyle testName;\n\n        private static readonly Color k_SelectedColor = new Color(0.3f, 0.5f, 0.85f);\n\n        static Styles()\n        {\n            info = new GUIStyle(EditorStyles.wordWrappedLabel);\n            info.wordWrap = false;\n            info.stretchHeight = true;\n            info.margin.right = 15;\n\n            testList = new GUIStyle(\"CN Box\");\n            testList.margin.top = 0;\n            testList.padding.left = 3;\n\n            foldout = new GUIStyle(EditorStyles.foldout);\n            selectedFoldout = new GUIStyle(EditorStyles.foldout);\n            selectedFoldout.onFocused.textColor = selectedFoldout.focused.textColor =\n                                                      selectedFoldout.onActive.textColor = selectedFoldout.active.textColor =\n                                                                                               selectedFoldout.onNormal.textColor = selectedFoldout.normal.textColor = k_SelectedColor;\n                                                                                               \n            toolbarLabel = new GUIStyle(EditorStyles.toolbarButton);\n            toolbarLabel.normal.background = null;\n            toolbarLabel.contentOffset = new Vector2(0, -2);\n            \n            testName = new GUIStyle(EditorStyles.label);\n            testName.padding.left += 12;\n            testName.focused.textColor = testName.onFocused.textColor = k_SelectedColor;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/Styles.cs.meta",
    "content": "fileFormatVersion: 2\nguid: a8b92379e11501742b1badcbb08da812\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/TestFilterSettings.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityEditor;\nusing System.Linq;\n\nnamespace UnityTest\n{\n    public class TestFilterSettings\n    {\n        public bool ShowSucceeded;\n        public bool ShowFailed;\n        public bool ShowIgnored;\n        public bool ShowNotRun;\n        \n        public string FilterByName;\n        public int FilterByCategory;\n        \n        private GUIContent _succeededBtn;\n        private GUIContent _failedBtn;\n        private GUIContent _ignoredBtn;\n        private GUIContent _notRunBtn;\n        \n        public string[] AvailableCategories;\n        \n        private readonly string _prefsKey;\n        \n        public TestFilterSettings(string prefsKey)\n        {\n            _prefsKey = prefsKey;\n            Load();\n            UpdateCounters(Enumerable.Empty<ITestResult>());\n        }\n            \n        public void Load()\n        {\n            ShowSucceeded = EditorPrefs.GetBool(_prefsKey + \".ShowSucceeded\", true);\n            ShowFailed = EditorPrefs.GetBool(_prefsKey + \".ShowFailed\", true);\n            ShowIgnored = EditorPrefs.GetBool(_prefsKey + \".ShowIgnored\", true);\n            ShowNotRun = EditorPrefs.GetBool(_prefsKey + \".ShowNotRun\", true);\n            FilterByName = EditorPrefs.GetString(_prefsKey + \".FilterByName\", string.Empty);\n            FilterByCategory = EditorPrefs.GetInt(_prefsKey + \".FilterByCategory\", 0);\n        }\n        \n        public void Save()\n        {\n            EditorPrefs.SetBool(_prefsKey + \".ShowSucceeded\", ShowSucceeded);\n            EditorPrefs.SetBool(_prefsKey + \".ShowFailed\", ShowFailed);\n            EditorPrefs.SetBool(_prefsKey + \".ShowIgnored\", ShowIgnored);\n            EditorPrefs.SetBool(_prefsKey + \".ShowNotRun\", ShowNotRun);\n            EditorPrefs.SetString(_prefsKey + \".FilterByName\", FilterByName);\n            EditorPrefs.SetInt(_prefsKey + \".FilterByCategory\", FilterByCategory);\n        }\n        \n        public void UpdateCounters(IEnumerable<ITestResult> results)\n        {\n            var summary = new ResultSummarizer(results);\n            \n            _succeededBtn = new GUIContent(summary.Passed.ToString(), Icons.SuccessImg, \"Show tests that succeeded\");\n            _failedBtn = new GUIContent((summary.Errors + summary.Failures + summary.Inconclusive).ToString(), Icons.FailImg, \"Show tests that failed\");\n            _ignoredBtn = new GUIContent((summary.Ignored + summary.NotRunnable).ToString(), Icons.IgnoreImg, \"Show tests that are ignored\");\n            _notRunBtn = new GUIContent((summary.TestsNotRun - summary.Ignored - summary.NotRunnable).ToString(), Icons.UnknownImg, \"Show tests that didn't run\");\n        }\n        \n        public string[] GetSelectedCategories()\n        {\n            if(AvailableCategories == null) return new string[0];\n            \n            return AvailableCategories.Where ((c, i) => (FilterByCategory & (1 << i)) != 0).ToArray();\n        }\n        \n        public void OnGUI()\n        {\n            EditorGUI.BeginChangeCheck();\n            \n            FilterByName = GUILayout.TextField(FilterByName, \"ToolbarSeachTextField\", GUILayout.MinWidth(100), GUILayout.MaxWidth(250), GUILayout.ExpandWidth(true));\n            if(GUILayout.Button (GUIContent.none, string.IsNullOrEmpty(FilterByName) ? \"ToolbarSeachCancelButtonEmpty\" : \"ToolbarSeachCancelButton\"))\n                FilterByName = string.Empty;\n            \n            if (AvailableCategories != null && AvailableCategories.Length > 0)\n                FilterByCategory = EditorGUILayout.MaskField(FilterByCategory, AvailableCategories, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(90));\n            \n            ShowSucceeded = GUILayout.Toggle(ShowSucceeded, _succeededBtn, EditorStyles.toolbarButton);\n            ShowFailed = GUILayout.Toggle(ShowFailed, _failedBtn, EditorStyles.toolbarButton);\n            ShowIgnored = GUILayout.Toggle(ShowIgnored, _ignoredBtn, EditorStyles.toolbarButton);\n            ShowNotRun = GUILayout.Toggle(ShowNotRun, _notRunBtn, EditorStyles.toolbarButton);\n            \n            if(EditorGUI.EndChangeCheck()) Save ();\n        }\n        \n        public RenderingOptions BuildRenderingOptions()\n        {\n            var options = new RenderingOptions();\n            options.showSucceeded = ShowSucceeded;\n            options.showFailed = ShowFailed;\n            options.showIgnored = ShowIgnored;\n            options.showNotRunned = ShowNotRun;\n            options.nameFilter = FilterByName;\n            options.categories = GetSelectedCategories();\n            return options;\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/TestFilterSettings.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 5a2d025e58bff433e963d0a4cd7599ef\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/icons/failed.png.meta",
    "content": "fileFormatVersion: 2\nguid: 41488feb372865440b7c01773f04c0cf\nTextureImporter:\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 1\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: 1\n    mipBias: -1\n    wrapMode: 1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  textureType: 2\n  buildTargetSettings: []\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/icons/ignored.png.meta",
    "content": "fileFormatVersion: 2\nguid: 0076bfa6073f17546b3535ac1b456b0b\nTextureImporter:\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 1\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: 1\n    mipBias: -1\n    wrapMode: 1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  textureType: 2\n  buildTargetSettings: []\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/icons/inconclusive.png.meta",
    "content": "fileFormatVersion: 2\nguid: e28761099904678488cdddf7b6be2ceb\nTextureImporter:\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 1\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: 1\n    mipBias: -1\n    wrapMode: 1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  textureType: 2\n  buildTargetSettings: []\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/icons/normal.png.meta",
    "content": "fileFormatVersion: 2\nguid: a9f3c491f4c2f9f43ac33a27c16913dd\nTextureImporter:\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 1\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: 1\n    mipBias: -1\n    wrapMode: 1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  textureType: 2\n  buildTargetSettings: []\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/icons/passed.png.meta",
    "content": "fileFormatVersion: 2\nguid: 31f7928179ee46d4690d274579efb037\nTextureImporter:\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 1\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: 1\n    mipBias: -1\n    wrapMode: 1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  textureType: 2\n  buildTargetSettings: []\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/icons/stopwatch.png.meta",
    "content": "fileFormatVersion: 2\nguid: f73f95ae19d51af47ad56044f2779aa1\nTextureImporter:\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 1\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: 1\n    mipBias: -1\n    wrapMode: 1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  textureType: 2\n  buildTargetSettings: []\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor/icons.meta",
    "content": "fileFormatVersion: 2\nguid: e8bb6eae11352f44da0d6d8a8959b69e\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Editor.meta",
    "content": "fileFormatVersion: 2\nguid: f4ab061d0035ee545a936bdf8f3f8620\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/ITestResult.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityTest;\n\npublic interface ITestResult\n{\n    TestResultState ResultState { get; }\n\n    string Message { get; }\n\n    string Logs { get; }\n\n    bool Executed { get; }\n\n    string Name { get; }\n\n    string FullName { get; }\n\n    string Id { get; }\n\n    bool IsSuccess { get; }\n\n    double Duration { get; }\n\n    string StackTrace { get; }\n    \n    bool IsIgnored { get; }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/ITestResult.cs.meta",
    "content": "fileFormatVersion: 2\nguid: d1e4e2c4d00b3f2469494fc0f67cdeae\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Settings/IntegrationTestsRunnerSettings.asset.meta",
    "content": "fileFormatVersion: 2\nguid: 850c92faffd0f184bbed434fcc031693\ntimeCreated: 1473388709\nlicenseType: Free\nNativeFormatImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/Settings.meta",
    "content": "fileFormatVersion: 2\nguid: 4f7ed47b0666ece469fcd2999dbd701b\nfolderAsset: yes\ntimeCreated: 1473353482\nlicenseType: Free\nDefaultImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/TestResultState.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    public enum TestResultState : byte\n    {\n        Inconclusive = 0,\n\n        /// <summary>\n        /// The test was not runnable.\n        /// </summary>\n        NotRunnable = 1,\n\n        /// <summary>\n        /// The test has been skipped.\n        /// </summary>\n        Skipped = 2,\n\n        /// <summary>\n        /// The test has been ignored.\n        /// </summary>\n        Ignored = 3,\n\n        /// <summary>\n        /// The test succeeded\n        /// </summary>\n        Success = 4,\n\n        /// <summary>\n        /// The test failed\n        /// </summary>\n        Failure = 5,\n\n        /// <summary>\n        /// The test encountered an unexpected exception\n        /// </summary>\n        Error = 6,\n\n        /// <summary>\n        /// The test was cancelled by the user\n        /// </summary>\n        Cancelled = 7\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common/TestResultState.cs.meta",
    "content": "fileFormatVersion: 2\nguid: da3ca54ee4cce064989d27165f3081fb\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Common.meta",
    "content": "fileFormatVersion: 2\nguid: a2caba6436df568499c84c1c607ce766\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Documentation.url",
    "content": "[InternetShortcut]\nURL=https://bitbucket.org/Unity-Technologies/unitytesttools/wiki\nIconIndex=0"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/Documentation.url.meta",
    "content": "fileFormatVersion: 2\nguid: 28f1b62e1364e5a4e88f7bb94dbcf183\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/Libs/Mono.Cecil.Mdb.dll.meta",
    "content": "fileFormatVersion: 2\nguid: 713231d47408a06408a45470c967bae8\ntimeCreated: 1441797177\nlicenseType: Store\nPluginImporter:\n  serializedVersion: 1\n  iconMap: {}\n  executionOrder: {}\n  isPreloaded: 0\n  platformData:\n    Any:\n      enabled: 0\n      settings: {}\n    Editor:\n      enabled: 1\n      settings:\n        DefaultValueInitialized: true\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/Libs/Mono.Cecil.dll.meta",
    "content": "fileFormatVersion: 2\nguid: 28fc22990733f8f4ea1137f15e363609\ntimeCreated: 1441797177\nlicenseType: Store\nPluginImporter:\n  serializedVersion: 1\n  iconMap: {}\n  executionOrder: {}\n  isPreloaded: 0\n  platformData:\n    Any:\n      enabled: 0\n      settings: {}\n    Editor:\n      enabled: 1\n      settings:\n        DefaultValueInitialized: true\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/Libs.meta",
    "content": "fileFormatVersion: 2\nguid: e22ba039de7077c4aa95758ef723b803\nfolderAsset: yes\ntimeCreated: 1445282049\nlicenseType: Store\nDefaultImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/DTOFormatter.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Runtime.Serialization;\nusing System.Text;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n\n    public class DTOFormatter {\n    \n        private interface ITransferInterface\n        {\n            void Transfer(ref ResultDTO.MessageType val);\n            void Transfer(ref TestResultState val);\n            void Transfer(ref byte val);\n            void Transfer(ref bool val);\n            void Transfer(ref int val);\n            void Transfer(ref float val);\n            void Transfer(ref double val);\n            void Transfer(ref string val);\n        }\n        \n        private class Writer : ITransferInterface\n        {\n            private readonly Stream _stream;\n            public Writer(Stream stream) { _stream = stream; }\n        \n            private void WriteConvertedNumber(byte[] bytes)\n            {\n                if(BitConverter.IsLittleEndian)\n                    Array.Reverse(bytes);\n                _stream.Write(bytes, 0, bytes.Length);\n            }\n        \n            public void Transfer(ref ResultDTO.MessageType val) { _stream.WriteByte((byte)val); }\n            public void Transfer(ref TestResultState val) { _stream.WriteByte((byte)val); }\n            public void Transfer(ref byte val) { _stream.WriteByte(val); }\n            public void Transfer(ref bool val) { _stream.WriteByte((byte)(val ? 0x01 : 0x00)); }\n            public void Transfer(ref int val) { WriteConvertedNumber(BitConverter.GetBytes(val)); }\n            public void Transfer(ref float val) { WriteConvertedNumber(BitConverter.GetBytes(val)); }\n            public void Transfer(ref double val) { WriteConvertedNumber(BitConverter.GetBytes(val)); }\n            \n            public void Transfer(ref string val) \n            {\n                var bytes = Encoding.BigEndianUnicode.GetBytes(val);\n                int length = bytes.Length;\n                Transfer(ref length);\n                _stream.Write(bytes, 0, bytes.Length);\n            }\n        }\n    \n        private class Reader : ITransferInterface\n        {\n            private readonly Stream _stream;\n            public Reader(Stream stream) { _stream = stream; }\n            \n            private byte[] ReadConvertedNumber(int size)\n            {\n                byte[] buffer = new byte[size];\n                _stream.Read (buffer, 0, buffer.Length);\n                if(BitConverter.IsLittleEndian)\n                    Array.Reverse(buffer);\n                return buffer;\n            }\n            \n            public void Transfer(ref ResultDTO.MessageType val) { val = (ResultDTO.MessageType)_stream.ReadByte(); }\n            public void Transfer(ref TestResultState val) { val = (TestResultState)_stream.ReadByte(); }\n            public void Transfer(ref byte val) { val = (byte)_stream.ReadByte(); }\n            public void Transfer(ref bool val) { val = (_stream.ReadByte() != 0); }\n            public void Transfer(ref int val) { val = BitConverter.ToInt32(ReadConvertedNumber(4), 0); }\n            public void Transfer(ref float val) { val = BitConverter.ToSingle(ReadConvertedNumber(4), 0); }\n            public void Transfer(ref double val) { val = BitConverter.ToDouble(ReadConvertedNumber(8), 0); }\n            \n            public void Transfer(ref string val) \n            {\n                int length = 0;\n                Transfer (ref length);\n                var bytes = new byte[length];\n                int remain = length;\n                int index = 0;\n                do {\n                    int bytesRead = _stream.Read(bytes, index, remain);\n                    remain -= bytesRead;\n                    index += bytesRead;\n                } while (remain > 0);\n#if !UNITY_WSA\n                val = Encoding.BigEndianUnicode.GetString(bytes);\n#endif\n            }\n        }\n        \n        private void Transfer(ResultDTO dto, ITransferInterface transfer)\n        {\n            transfer.Transfer(ref dto.messageType);\n            \n            transfer.Transfer(ref dto.levelCount);\n            transfer.Transfer(ref dto.loadedLevel);\n            transfer.Transfer(ref dto.loadedLevelName);\n            \n            if(dto.messageType == ResultDTO.MessageType.Ping\n               || dto.messageType == ResultDTO.MessageType.RunStarted\n               || dto.messageType == ResultDTO.MessageType.RunFinished\n               || dto.messageType == ResultDTO.MessageType.RunInterrupted\n               || dto.messageType == ResultDTO.MessageType.AllScenesFinished)\n                return;\n                \n            transfer.Transfer(ref dto.testName);\n            transfer.Transfer(ref dto.testTimeout);\n            \n            if(dto.messageType == ResultDTO.MessageType.TestStarted)\n                return;\n            \n            if(transfer is Reader)\n                dto.testResult = new SerializableTestResult();\n            SerializableTestResult str = (SerializableTestResult)dto.testResult;\n            \n            transfer.Transfer(ref str.resultState);\n            transfer.Transfer(ref str.message);\n            transfer.Transfer(ref str.executed);\n            transfer.Transfer(ref str.name);\n            transfer.Transfer(ref str.fullName);\n            transfer.Transfer(ref str.id);\n            transfer.Transfer(ref str.isSuccess);\n            transfer.Transfer(ref str.duration);\n            transfer.Transfer(ref str.stackTrace);\n        }\n    \n        public void Serialize (Stream stream, ResultDTO dto)\n        {\n            Transfer(dto, new Writer(stream));\n        }\n        \n        public object Deserialize (Stream stream)\n        {\n#if !UNITY_WSA\n            var result = (ResultDTO)FormatterServices.GetSafeUninitializedObject(typeof(ResultDTO));\n            Transfer (result, new Reader(stream));\n            return result;\n#else\n            return null;\n#endif\n        }\n    }\n\n}"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/DTOFormatter.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 7ae2470508a854b1c9df5375d03f8f58\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Batch.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEditorInternal;\nusing UnityEngine;\nusing UnityTest.IntegrationTests;\nusing UnityEditor.SceneManagement;\n\nnamespace UnityTest\n{\n    public static partial class Batch\n    {\n        const string k_ResultFilePathParam = \"-resultFilePath=\";\n        private const string k_TestScenesParam = \"-testscenes=\";\n        private const string k_OtherBuildScenesParam = \"-includeBuildScenes=\";\n        const string k_TargetPlatformParam = \"-targetPlatform=\";\n        const string k_ResultFileDirParam = \"-resultsFileDirectory=\";\n\n        public static int returnCodeTestsOk = 0;\n        public static int returnCodeTestsFailed = 2;\n        public static int returnCodeRunError = 3;\n\n        public static void RunIntegrationTests()\n        {\n            var targetPlatform = GetTargetPlatform();\n            var otherBuildScenes = GetSceneListFromParam (k_OtherBuildScenesParam);\n\n            var testScenes = GetSceneListFromParam(k_TestScenesParam);\n            if (testScenes.Count == 0)\n                testScenes = FindTestScenesInProject();\n\n            RunIntegrationTests(targetPlatform, testScenes, otherBuildScenes);\n        }\n        \n        public static void RunIntegrationTests(BuildTarget ? targetPlatform)\n        {\n            var sceneList = FindTestScenesInProject();\n            RunIntegrationTests(targetPlatform, sceneList, new List<string>());\n        }\n\n\n        public static void RunIntegrationTests(BuildTarget? targetPlatform, List<string> testScenes, List<string> otherBuildScenes)\n        {\n            if (targetPlatform.HasValue)\n                BuildAndRun(targetPlatform.Value, testScenes, otherBuildScenes);\n            else\n                RunInEditor(testScenes,  otherBuildScenes);\n        }\n        \n        private static void BuildAndRun(BuildTarget target, List<string> testScenes, List<string> otherBuildScenes)\n        {\n            var resultFilePath = GetParameterArgument(k_ResultFileDirParam);\n\n            const int port = 0;\n            var ipList = TestRunnerConfigurator.GetAvailableNetworkIPs();\n\n            var config = new PlatformRunnerConfiguration\n            {\n                buildTarget = target,\n                buildScenes = otherBuildScenes,\n                testScenes = testScenes,\n                projectName = \"IntegrationTests\",\n                resultsDir = resultFilePath,\n                sendResultsOverNetwork = InternalEditorUtility.inBatchMode,\n                ipList = ipList,\n                port = port\n            };\n\n            if (Application.isWebPlayer)\n            {\n                config.sendResultsOverNetwork = false;\n                Debug.Log(\"You can't use WebPlayer as active platform for running integration tests. Switching to Standalone\");\n                EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.StandaloneWindows);\n            }\n\n            PlatformRunner.BuildAndRunInPlayer(config);\n        }\n\n        private static void RunInEditor(List<string> testScenes, List<string> otherBuildScenes)\n        {\n            CheckActiveBuildTarget();\n\n            NetworkResultsReceiver.StopReceiver();\n            if (testScenes == null || testScenes.Count == 0)\n            {\n                Debug.Log(\"No test scenes on the list\");\n                EditorApplication.Exit(returnCodeRunError);\n                return;\n            }\n             \n            string previousScenesXml = \"\";\n            var serializer = new System.Xml.Serialization.XmlSerializer(typeof(EditorBuildSettingsScene[]));\n            using(StringWriter textWriter = new StringWriter())\n            {\n                serializer.Serialize(textWriter, EditorBuildSettings.scenes);\n                previousScenesXml = textWriter.ToString();\n            }\n                \n            EditorBuildSettings.scenes = (testScenes.Concat(otherBuildScenes).ToList()).Select(s => new EditorBuildSettingsScene(s, true)).ToArray();\n            EditorSceneManager.OpenScene(testScenes.First());\n            GuiHelper.SetConsoleErrorPause(false);\n\n            var config = new PlatformRunnerConfiguration\n            {\n                resultsDir = GetParameterArgument(k_ResultFileDirParam),\n                ipList = TestRunnerConfigurator.GetAvailableNetworkIPs(),\n                port = PlatformRunnerConfiguration.TryToGetFreePort(),\n                runInEditor = true\n            };\n                    \n            var settings = new PlayerSettingConfigurator(true);\n            settings.AddConfigurationFile(TestRunnerConfigurator.integrationTestsNetwork, string.Join(\"\\n\", config.GetConnectionIPs()));\n            settings.AddConfigurationFile(TestRunnerConfigurator.testScenesToRun, string.Join (\"\\n\", testScenes.ToArray()));\n            settings.AddConfigurationFile(TestRunnerConfigurator.previousScenes, previousScenesXml);\n         \n            NetworkResultsReceiver.StartReceiver(config);\n\n            EditorApplication.isPlaying = true;\n        }\n\n        private static string GetParameterArgument(string parameterName)\n        {\n            foreach (var arg in Environment.GetCommandLineArgs())\n            {\n                if (arg.ToLower().StartsWith(parameterName.ToLower()))\n                {\n                    return arg.Substring(parameterName.Length);\n                }\n            }\n            return null;\n        }\n\n        static void CheckActiveBuildTarget()\n        {\n            var notSupportedPlatforms = new[] { \"MetroPlayer\", \"WebPlayer\", \"WebPlayerStreamed\" };\n            if (notSupportedPlatforms.Contains(EditorUserBuildSettings.activeBuildTarget.ToString()))\n            {\n                Debug.Log(\"activeBuildTarget can not be  \"\n                    + EditorUserBuildSettings.activeBuildTarget + \n                    \" use buildTarget parameter to open Unity.\");\n            }\n        }\n\n        private static BuildTarget ? GetTargetPlatform()\n        {\n            string platformString = null;\n            BuildTarget buildTarget;\n            foreach (var arg in Environment.GetCommandLineArgs())\n            {\n                if (arg.ToLower().StartsWith(k_TargetPlatformParam.ToLower()))\n                {\n                    platformString = arg.Substring(k_ResultFilePathParam.Length);\n                    break;\n                }\n            }\n            try\n            {\n                if (platformString == null) return null;\n                buildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), platformString);\n            }\n            catch\n            {\n                return null;\n            }\n            return buildTarget;\n        }\n\n        private static List<string> FindTestScenesInProject()\n        {\n            var integrationTestScenePattern = \"*Test?.unity\";\n            return Directory.GetFiles(\"Assets\", integrationTestScenePattern, SearchOption.AllDirectories).ToList();\n        }\n\n        private static List<string> GetSceneListFromParam(string param)\n        {\n            var sceneList = new List<string>();\n            foreach (var arg in Environment.GetCommandLineArgs())\n            {\n                if (arg.ToLower().StartsWith(param.ToLower()))\n                {\n                    var scenesFromParam = arg.Substring(param.Length).Split(',');\n                    foreach (var scene in scenesFromParam)\n                    {\n                        var sceneName = scene;\n                        if (!sceneName.EndsWith(\".unity\"))\n                            sceneName += \".unity\";\n                        var foundScenes = Directory.GetFiles(Directory.GetCurrentDirectory(), sceneName, SearchOption.AllDirectories);\n                        if (foundScenes.Length == 1)\n                            sceneList.Add(foundScenes[0].Substring(Directory.GetCurrentDirectory().Length + 1));\n                        else\n                            Debug.Log(sceneName + \" not found or multiple entries found\");\n                    }\n                }\n            }\n            return sceneList.Where(s => !string.IsNullOrEmpty(s)).Distinct().ToList();\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Batch.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 29d4fb050362c5b43aea52342045543a\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/EditorReferencesUtil.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nusing Object = UnityEngine.Object;\n\nnamespace UnityTest\n{\n    public static class EditorReferencesUtil\n    {\n\n        public static List<Object> FindScenesWhichContainAsset(string file)\n        {\n            string assetPath = GetAssetPathFromFileNameAndExtension (file);\n            Object cur = AssetDatabase.LoadAssetAtPath(assetPath, typeof(Object));\n            return AllScenes.Where(a => ADependsOnB(a, cur)).ToList();\n        }\n\n        private static string CleanPathSeparators(string s)\n        {\n            const string forwardSlash = \"/\";\n            const string backSlash = \"\\\\\";\n            return s.Replace(backSlash, forwardSlash);\n        }\n\n        private static string GetRelativeAssetPathFromFullPath(string fullPath)\n        {\n            fullPath = CleanPathSeparators(fullPath);\n            if (fullPath.Contains(Application.dataPath))\n            {\n                return fullPath.Replace(Application.dataPath, \"Assets\");\n            }\n            Debug.LogWarning(\"Path does not point to a location within Assets: \" + fullPath);\n            return null;\n        }\n\n        private static string GetAssetPathFromFileNameAndExtension(string assetName)\n        {\n            string[] assets = AssetDatabase.FindAssets (Path.GetFileNameWithoutExtension (assetName));\n            string assetPath = null;\n            \n            foreach (string guid in assets) {\n                string relativePath = AssetDatabase.GUIDToAssetPath (guid);\n                \n                if (Path.GetFileName (relativePath) == Path.GetFileName (assetName))\n                    assetPath = relativePath;\n            }\n            \n            return assetPath;\n        }\n\n        private static List<FileInfo> DirSearch(DirectoryInfo d, string searchFor)\n        {\n            List<FileInfo> founditems = d.GetFiles(searchFor).ToList();\n            \n            // Add (by recursing) subdirectory items.\n            DirectoryInfo[] dis = d.GetDirectories();\n            foreach (DirectoryInfo di in dis)\n                founditems.AddRange(DirSearch(di, searchFor));\n            \n            return (founditems);\n        }\n\n        private static List<Object> AllScenes\n        {\n            get\n            {\n                // get every single one of the files in the Assets folder.\n                List<FileInfo> files = DirSearch(new DirectoryInfo(Application.dataPath), \"*.unity\");\n                \n                // now make them all into Asset references.\n                List<Object> assetRefs = new List<Object>();\n                \n                foreach (FileInfo fi in files)\n                {\n                    if (fi.Name.StartsWith(\".\"))\n                        continue;   // Unity ignores dotfiles.\n                    assetRefs.Add(AssetDatabase.LoadMainAssetAtPath(GetRelativeAssetPathFromFullPath(fi.FullName)));\n                }\n                return assetRefs;\n            }\n        }\n\n        private static bool ADependsOnB(Object obj, Object selectedObj)\n        {\n            if (selectedObj == null) return false;\n            \n            //optionally, exclude self.\n            if (selectedObj == obj) return false;\n            \n            Object[] dependencies = EditorUtility.CollectDependencies(new Object[1] { obj });\n            if (dependencies.Length < 2) return false;\t // if there's only one, it's us.\n            \n            foreach (Object dep in dependencies)\n                if (dep == selectedObj)\n                    return true;\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/EditorReferencesUtil.cs.meta",
    "content": "fileFormatVersion: 2\nguid: aad501c968b324cf3a8d1c52eb09ca04\ntimeCreated: 1437322927\nlicenseType: Store\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/GuiHelper.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text.RegularExpressions;\nusing Mono.Cecil;\nusing Mono.Cecil.Cil;\nusing Mono.Cecil.Mdb;\nusing Mono.Collections.Generic;\nusing UnityEditor;\nusing UnityEditorInternal;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    public static class GuiHelper\n    {\n        public static bool GetConsoleErrorPause()\n        {\n            Assembly assembly = Assembly.GetAssembly(typeof(SceneView));\n            Type type = assembly.GetType(\"UnityEditorInternal.LogEntries\");\n            PropertyInfo method = type.GetProperty(\"consoleFlags\");\n            var result = (int)method.GetValue(new object(), new object[] { });\n            return (result & (1 << 2)) != 0;\n        }\n\n        public static void SetConsoleErrorPause(bool b)\n        {\n            Assembly assembly = Assembly.GetAssembly(typeof(SceneView));\n            Type type = assembly.GetType(\"UnityEditorInternal.LogEntries\");\n            MethodInfo method = type.GetMethod(\"SetConsoleFlag\");\n            method.Invoke(new object(), new object[] { 1 << 2, b });\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/GuiHelper.cs.meta",
    "content": "fileFormatVersion: 2\nguid: b0b95014154ef554485afc9c0316556d\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/IntegrationTestsHierarchyAnnotation.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\nusing UnityEditor;\n\nnamespace UnityTest\n{\n\n    [InitializeOnLoad]\n    public class IntegrationTestsHierarchyAnnotation {\n    \n        static IntegrationTestsHierarchyAnnotation()\n        {\n            EditorApplication.hierarchyWindowItemOnGUI += DoAnnotationGUI;\n        }\n    \n        public static void DoAnnotationGUI(int id, Rect rect)\n        {\n            var obj = EditorUtility.InstanceIDToObject(id) as GameObject;\n            if(!obj) return;\n            \n            var tc = obj.GetComponent<TestComponent>();\n            if(!tc) return;\n            \n            if (!EditorApplication.isPlayingOrWillChangePlaymode\n                && rect.Contains(Event.current.mousePosition)\n                && Event.current.type == EventType.MouseDown\n                && Event.current.button == 1)\n            {\n                IntegrationTestRendererBase.DrawContextMenu(tc);\n                Event.current.Use ();\n            }\n            \n            EditorGUIUtility.SetIconSize(new Vector2(15, 15));\n            var result = IntegrationTestsRunnerWindow.GetResultForTest(tc);\n            if (result != null)\n            {\n                var icon = result.Executed ? IntegrationTestRendererBase.GetIconForResult(result.resultType) : Icons.UnknownImg;\n                EditorGUI.LabelField(new Rect(rect.xMax - 18, rect.yMin - 2, rect.width, rect.height), new GUIContent(icon));\n            }\n            EditorGUIUtility.SetIconSize(Vector2.zero);\n        }\n    }\n\n}"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/IntegrationTestsHierarchyAnnotation.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 219cdb080b08741948fc5deb8c7d47f0\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/IntegrationTestsRunnerSettings.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityEditor;\n\nnamespace UnityTest\n{\n    public class IntegrationTestsRunnerSettings : ProjectSettingsBase\n    {\n        public bool blockUIWhenRunning = true;\n        public bool pauseOnTestFailure;\n        \n        public void ToggleBlockUIWhenRunning ()\n        {\n            blockUIWhenRunning = !blockUIWhenRunning;\n            Save ();\n        }\n        \n        public void TogglePauseOnTestFailure()\n        {\n            pauseOnTestFailure = !pauseOnTestFailure;\n            Save ();\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/IntegrationTestsRunnerSettings.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 5d01dc4c8f278da489d7d54c83f19cb9\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/IntegrationTestsRunnerWindow.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.RegularExpressions;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityTest.IntegrationTestRunner;\nusing UnityEngine.SceneManagement;\n\nnamespace UnityTest\n{\n    [Serializable]\n    public class IntegrationTestsRunnerWindow : EditorWindow, IHasCustomMenu\n    {\n        #region GUI Contents\n        private readonly GUIContent m_GUICreateNewTest = new GUIContent(\"Create\", \"Create new test\");\n        private readonly GUIContent m_GUIRunSelectedTests = new GUIContent(\"Run Selected\", \"Run selected test(s)\");\n        private readonly GUIContent m_GUIRunAllTests = new GUIContent(\"Run All\", \"Run all tests\");\n        private readonly GUIContent m_GUIBlockUI = new GUIContent(\"Block UI when running\", \"Block UI when running tests\");\n        private readonly GUIContent m_GUIPauseOnFailure = new GUIContent(\"Pause on test failure\");\n        #endregion\n\n        #region runner steerign vars\n        private static IntegrationTestsRunnerWindow s_Instance;\n        [SerializeField] private List<GameObject> m_TestsToRun;\n        [SerializeField] private List<string> m_DynamicTestsToRun;\n        [SerializeField] private bool m_ReadyToRun;\n        private bool m_IsBuilding;\n        public static bool selectedInHierarchy;\n        private float m_HorizontalSplitBarPosition = 200;\n        private Vector2 m_TestInfoScroll, m_TestListScroll;\n        private IntegrationTestRendererBase[] m_TestLines;\n        private string m_CurrectSceneName;\n        private TestFilterSettings m_FilterSettings;\n        \n        Vector2 m_resultTextSize;\n        string m_resultText;\n        GameObject m_lastSelectedGO;\n        int m_resultTestMaxLength = 15000;\n\n        [SerializeField] private GameObject m_SelectedLine;\n        [SerializeField] private List<TestResult> m_ResultList = new List<TestResult>();\n        [SerializeField] private List<GameObject> m_FoldMarkers = new List<GameObject>();\n\n        private IntegrationTestsRunnerSettings m_Settings;\n\n        #endregion\n\n\n        static IntegrationTestsRunnerWindow()\n        {\n            InitBackgroundRunners();\n        }\n\n        private static void InitBackgroundRunners()\n        {\n            EditorApplication.hierarchyWindowItemOnGUI -= OnHierarchyWindowItemDraw;\n            EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyWindowItemDraw;\n            EditorApplication.hierarchyWindowChanged -= OnHierarchyChangeUpdate;\n            EditorApplication.hierarchyWindowChanged += OnHierarchyChangeUpdate;\n            EditorApplication.update -= BackgroundSceneChangeWatch;\n            EditorApplication.update += BackgroundSceneChangeWatch;\n            EditorApplication.playmodeStateChanged -= OnPlaymodeStateChanged;\n            EditorApplication.playmodeStateChanged += OnPlaymodeStateChanged;\n        }\n\n        private static void OnPlaymodeStateChanged()\n        {\n            if (s_Instance && EditorApplication.isPlaying  == EditorApplication.isPlayingOrWillChangePlaymode)\n                s_Instance.RebuildTestList();\n        }\n\n        public void OnDestroy()\n        {\n            EditorApplication.hierarchyWindowItemOnGUI -= OnHierarchyWindowItemDraw;\n            EditorApplication.update -= BackgroundSceneChangeWatch;\n            EditorApplication.hierarchyWindowChanged -= OnHierarchyChangeUpdate;\n            EditorApplication.playmodeStateChanged -= OnPlaymodeStateChanged;\n\n            TestComponent.DestroyAllDynamicTests();\n        }\n\n        private static void BackgroundSceneChangeWatch()\n        {\n            if (!s_Instance) return;\n            var currentScene = SceneManager.GetActiveScene().path;\n            if (s_Instance.m_CurrectSceneName != null && s_Instance.m_CurrectSceneName == currentScene) return;\n            if (EditorApplication.isPlayingOrWillChangePlaymode) return;\n            TestComponent.DestroyAllDynamicTests();\n            s_Instance.m_CurrectSceneName = currentScene;\n            s_Instance.m_ResultList.Clear();\n            s_Instance.RebuildTestList();\n        }\n\n        public void OnEnable()\n        {\n            titleContent = new GUIContent(\"Integration Tests\");\n            s_Instance = this;\n\n            m_Settings = ProjectSettingsBase.Load<IntegrationTestsRunnerSettings>();\n            m_FilterSettings = new TestFilterSettings(\"UnityTest.IntegrationTestsRunnerWindow\");\n\n            InitBackgroundRunners();\n            if (!EditorApplication.isPlayingOrWillChangePlaymode && !m_ReadyToRun) RebuildTestList();\n        }\n\n        public void OnSelectionChange()\n        {\n            if (EditorApplication.isPlayingOrWillChangePlaymode\n                || Selection.objects == null\n                || Selection.objects.Length == 0) return;\n\n            if (Selection.gameObjects.Length == 1)\n            {\n                var go = Selection.gameObjects.Single();\n                var temp = go.transform;\n                while (temp != null)\n                {\n                    var tc = temp.GetComponent<TestComponent>();\n                    if (tc != null) break;\n                    temp = temp.parent;\n                }\n\n                if (temp != null)\n                {\n                    SelectInHierarchy(temp.gameObject);\n                    Selection.activeGameObject = temp.gameObject;\n                    m_SelectedLine = temp.gameObject;\n                }\n            }\n        }\n\n        public static void OnHierarchyChangeUpdate()\n        {\n            if (!s_Instance || s_Instance.m_TestLines == null || EditorApplication.isPlayingOrWillChangePlaymode) return;\n\n            // create a test runner if it doesn't exist\n            TestRunner.GetTestRunner();\n\n            // make tests are not places under a go that is not a test itself\n            foreach (var test in TestComponent.FindAllTestsOnScene())\n            {\n                if (test.gameObject.transform.parent != null && test.gameObject.transform.parent.gameObject.GetComponent<TestComponent>() == null)\n                {\n                    test.gameObject.transform.parent = null;\n                    Debug.LogWarning(\"Tests need to be on top of the hierarchy or directly under another test.\");\n                }\n            }\n            if (selectedInHierarchy) selectedInHierarchy = false;\n            else s_Instance.RebuildTestList();\n        }\n        \n        public static TestResult GetResultForTest(TestComponent tc)\n        {\n            if(!s_Instance) return new TestResult(tc);\n            return s_Instance.m_ResultList.FirstOrDefault(r => r.GameObject == tc.gameObject);\n        }\n\n        public static void OnHierarchyWindowItemDraw(int id, Rect rect)\n        {\n            var o = EditorUtility.InstanceIDToObject(id);\n            if (o is GameObject)\n            {\n                var go = o as GameObject;\n\n                if (Event.current.type == EventType.MouseDown\n                    && Event.current.button == 0\n                    && rect.Contains(Event.current.mousePosition))\n                {\n                    var temp = go.transform;\n                    while (temp != null)\n                    {\n                        var c = temp.GetComponent<TestComponent>();\n                        if (c != null) break;\n                        temp = temp.parent;\n                    }\n                    if (temp != null) SelectInHierarchy(temp.gameObject);\n                }\n            }\n        }\n\n        private static void SelectInHierarchy(GameObject gameObject)\n        {\n            if (!s_Instance) return;\n            if (gameObject == s_Instance.m_SelectedLine && gameObject.activeInHierarchy) return;\n            if (EditorApplication.isPlayingOrWillChangePlaymode) return;\n            if (!gameObject.activeSelf)\n            {\n                selectedInHierarchy = true;\n                gameObject.SetActive(true);\n            }\n\n            var tests = TestComponent.FindAllTestsOnScene();\n            var skipList = gameObject.GetComponentsInChildren(typeof(TestComponent), true).ToList();\n            tests.RemoveAll(skipList.Contains);\n            foreach (var test in tests)\n            {\n                var enable = test.GetComponentsInChildren(typeof(TestComponent), true).Any(c => c.gameObject == gameObject);\n                if (test.gameObject.activeSelf != enable) test.gameObject.SetActive(enable);\n            }\n        }\n\n        private void RunTests(IList<ITestComponent> tests)\n        {\n            if (!tests.Any() || EditorApplication.isCompiling || EditorApplication.isPlayingOrWillChangePlaymode)\n                return;\n            FocusWindowIfItsOpen(GetType());\n\n            var testComponents = tests.Where(t => t is TestComponent).Cast<TestComponent>().ToList();\n            var dynaminTests = testComponents.Where(t => t.dynamic).ToList();\n            m_DynamicTestsToRun = dynaminTests.Select(c => c.dynamicTypeName).ToList();\n            testComponents.RemoveAll(dynaminTests.Contains);\n\n            m_TestsToRun = testComponents.Select( tc => tc.gameObject ).ToList();\n\n            m_ReadyToRun = true;\n            TestComponent.DisableAllTests();\n\n            EditorApplication.isPlaying = true;\n        }\n\n        public void Update()\n        {\n            if (m_ReadyToRun && EditorApplication.isPlaying)\n            {\n                m_ReadyToRun = false;\n                var testRunner = TestRunner.GetTestRunner();\n                testRunner.TestRunnerCallback.Add(new RunnerCallback(this));\n                var testComponents = m_TestsToRun.Select(go => go.GetComponent<TestComponent>()).ToList();\n                testRunner.InitRunner(testComponents, m_DynamicTestsToRun);\n            }\n        }\n        \n        private void RebuildTestList()\n        {\n            m_TestLines = null;\n            if (!TestComponent.AnyTestsOnScene() \n                && !TestComponent.AnyDynamicTestForCurrentScene()) return;\n\n            if (!EditorApplication.isPlayingOrWillChangePlaymode)\n            {\n                var dynamicTestsOnScene = TestComponent.FindAllDynamicTestsOnScene();\n                var dynamicTestTypes = TestComponent.GetTypesWithHelpAttribute(SceneManager.GetActiveScene().path);\n\n                foreach (var dynamicTestType in dynamicTestTypes)\n                {\n                    var existingTests = dynamicTestsOnScene.Where(component => component.dynamicTypeName == dynamicTestType.AssemblyQualifiedName);\n                    if (existingTests.Any())\n                    {\n                        var testComponent = existingTests.Single();\n                        foreach (var c in testComponent.gameObject.GetComponents<Component>())\n                        {\n                            var type = Type.GetType(testComponent.dynamicTypeName);\n                            if (c is TestComponent || c is Transform || type.IsInstanceOfType(c)) continue;\n                            DestroyImmediate(c);\n                        }\n                        dynamicTestsOnScene.Remove(existingTests.Single());\n                        continue;\n                    }\n                    TestComponent.CreateDynamicTest(dynamicTestType);\n                }\n\n                foreach (var testComponent in dynamicTestsOnScene)\n                    DestroyImmediate(testComponent.gameObject);\n            }\n\n            var topTestList = TestComponent.FindAllTopTestsOnScene();\n\n            var newResultList = new List<TestResult>();\n            m_TestLines = ParseTestList(topTestList, newResultList);\n\n            var oldDynamicResults = m_ResultList.Where(result => result.dynamicTest);\n            foreach (var oldResult in m_ResultList)\n            {\n                var result = newResultList.Find(r => r.Id == oldResult.Id);\n                if (result == null) continue;\n                result.Update(oldResult);\n            }\n            newResultList.AddRange(oldDynamicResults.Where(r => !newResultList.Contains(r)));\n            m_ResultList = newResultList;\n\n            IntegrationTestRendererBase.RunTest = RunTests;\n            IntegrationTestGroupLine.FoldMarkers = m_FoldMarkers;\n            IntegrationTestLine.Results = m_ResultList;\n            \n            m_FilterSettings.UpdateCounters(m_ResultList.Cast<ITestResult>());\n\n            m_FoldMarkers.RemoveAll(o => o == null);\n\n            selectedInHierarchy = true;\n            Repaint();\n        }\n\n\n        private IntegrationTestRendererBase[] ParseTestList(List<TestComponent> testList, List<TestResult> results)\n        {\n            var tempList = new List<IntegrationTestRendererBase>();\n            foreach (var testObject in testList)\n            {\n                if (!testObject.IsTestGroup())\n                {\n                    var result = new TestResult(testObject);\n                    if (results != null)\n                        results.Add(result);\n                    tempList.Add(new IntegrationTestLine(testObject.gameObject, result));\n                    continue;\n                }\n                var group = new IntegrationTestGroupLine(testObject.gameObject);\n                var children = testObject.gameObject.GetComponentsInChildren(typeof(TestComponent), true).Cast<TestComponent>().ToList();\n                children = children.Where(c => c.gameObject.transform.parent == testObject.gameObject.transform).ToList();\n                group.AddChildren(ParseTestList(children, results));\n                tempList.Add(group);\n            }\n            tempList.Sort();\n            return tempList.ToArray();\n        }\n\n        public void OnGUI()\n        {\n            if (BuildPipeline.isBuildingPlayer)\n            {\n                m_IsBuilding = true;\n            }\n            else if (m_IsBuilding)\n            {\n                m_IsBuilding = false;\n                Repaint();\n            }\n\n            PrintHeadPanel();\n\n            EditorGUILayout.BeginVertical(Styles.testList);\n            m_TestListScroll = EditorGUILayout.BeginScrollView(m_TestListScroll);\n            bool repaint = PrintTestList(m_TestLines);\n            GUILayout.FlexibleSpace();\n            EditorGUILayout.EndScrollView();\n            EditorGUILayout.EndVertical();\n\n            RenderDetails();\n\n            if (repaint) Repaint();\n        }\n\n        public void PrintHeadPanel()\n        {\n            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);\n            EditorGUI.BeginDisabledGroup(EditorApplication.isPlayingOrWillChangePlaymode);\n            if (GUILayout.Button(m_GUIRunAllTests, EditorStyles.toolbarButton))\n            {\n                RunTests(TestComponent.FindAllTestsOnScene().Cast<ITestComponent>().ToList());\n            }\n            EditorGUI.BeginDisabledGroup(!Selection.gameObjects.Any (t => t.GetComponent(typeof(ITestComponent))));\n            if (GUILayout.Button(m_GUIRunSelectedTests, EditorStyles.toolbarButton))\n            {\n                RunTests(Selection.gameObjects.Select(t => t.GetComponent(typeof(TestComponent))).Cast<ITestComponent>().ToList());\n            }\n            EditorGUI.EndDisabledGroup();\n            if (GUILayout.Button(m_GUICreateNewTest, EditorStyles.toolbarButton))\n            {\n                var test = TestComponent.CreateTest();\n                if (Selection.gameObjects.Length == 1\n                    && Selection.activeGameObject != null\n                    && Selection.activeGameObject.GetComponent<TestComponent>())\n                {\n                    test.transform.parent = Selection.activeGameObject.transform.parent;\n                }\n                Selection.activeGameObject = test;\n                RebuildTestList();\n            }\n            EditorGUI.EndDisabledGroup();\n            \n            GUILayout.FlexibleSpace ();\n            \n            m_FilterSettings.OnGUI ();\n            \n            EditorGUILayout.EndHorizontal ();\n        }\n        \n        public void AddItemsToMenu(GenericMenu menu)\n        {\n            menu.AddItem(m_GUIBlockUI, m_Settings.blockUIWhenRunning, m_Settings.ToggleBlockUIWhenRunning);\n            menu.AddItem(m_GUIPauseOnFailure, m_Settings.pauseOnTestFailure, m_Settings.TogglePauseOnTestFailure);\n        }\n        \n        private bool PrintTestList(IntegrationTestRendererBase[] renderedLines)\n        {\n            if (renderedLines == null) return false;\n\n            var filter = m_FilterSettings.BuildRenderingOptions();\n\n            bool repaint = false;\n            foreach (var renderedLine in renderedLines)\n            {\n                repaint |= renderedLine.Render(filter);\n            }\n            return repaint;\n        }\n\n        private void RenderDetails()\n        {\n            var ctrlId = GUIUtility.GetControlID(FocusType.Passive);\n\n            Rect rect = GUILayoutUtility.GetLastRect();\n            rect.y = rect.height + rect.y - 1;\n            rect.height = 3;\n\n            EditorGUIUtility.AddCursorRect(rect, MouseCursor.ResizeVertical);\n            var e = Event.current;\n            switch (e.type)\n            {\n                case EventType.MouseDown:\n                    if (GUIUtility.hotControl == 0 && rect.Contains(e.mousePosition))\n                        GUIUtility.hotControl = ctrlId;\n                    break;\n                case EventType.MouseDrag:\n                    if (GUIUtility.hotControl == ctrlId)\n                    {\n                        m_HorizontalSplitBarPosition -= e.delta.y;\n                        if (m_HorizontalSplitBarPosition < 20) m_HorizontalSplitBarPosition = 20;\n                        Repaint();\n                    }\n                    break;\n                case EventType.MouseUp:\n                    if (GUIUtility.hotControl == ctrlId)\n                        GUIUtility.hotControl = 0;\n                    break;\n            }\n\n            m_TestInfoScroll = EditorGUILayout.BeginScrollView(m_TestInfoScroll, GUILayout.MinHeight(m_HorizontalSplitBarPosition));\n\n            if (m_SelectedLine != null)\n                UpdateResultText(m_SelectedLine);\n\n            EditorGUILayout.SelectableLabel(m_resultText, Styles.info, \n                                            GUILayout.ExpandHeight(true), \n                                            GUILayout.ExpandWidth(true), \n                                            GUILayout.MinWidth(m_resultTextSize.x), \n                                            GUILayout.MinHeight(m_resultTextSize.y));\n            EditorGUILayout.EndScrollView();\n        }\n\n        private void UpdateResultText(GameObject go)\n        {\n            if(go == m_lastSelectedGO) return;\n            m_lastSelectedGO = go;\n            var result = m_ResultList.Find(r => r.GameObject == go);\n            if (result == null)\n            {\n                m_resultText = string.Empty;\n                m_resultTextSize = Styles.info.CalcSize(new GUIContent(string.Empty));\n                return;\n            }\n            var sb = new StringBuilder(result.Name.Trim());\n            if (!string.IsNullOrEmpty(result.messages))\n            {\n                sb.Append(\"\\n---\\n\");\n                sb.Append(result.messages.Trim());\n            }\n            if (!string.IsNullOrEmpty(result.stacktrace))\n            {\n                sb.Append(\"\\n---\\n\");\n                sb.Append(result.stacktrace.Trim());\n            }\n            if(sb.Length>m_resultTestMaxLength)\n            {\n                sb.Length = m_resultTestMaxLength;\n                sb.AppendFormat(\"...\\n\\n---MESSAGE TRUNCATED AT {0} CHARACTERS---\", m_resultTestMaxLength);\n            }\n            m_resultText = sb.ToString().Trim();\n            m_resultTextSize = Styles.info.CalcSize(new GUIContent(m_resultText));\n        }\n\n        public void OnInspectorUpdate()\n        {\n            if (focusedWindow != this) Repaint();\n        }\n\n        private void SetCurrentTest(TestComponent tc)\n        {\n            foreach (var line in m_TestLines)\n                line.SetCurrentTest(tc);\n        }\n\n        class RunnerCallback : ITestRunnerCallback\n        {\n            private readonly IntegrationTestsRunnerWindow m_Window;\n            private int m_TestNumber;\n            private int m_CurrentTestNumber;\n\n            private readonly bool m_ConsoleErrorOnPauseValue;\n            private readonly bool m_RunInBackground;\n            private TestComponent m_CurrentTest;\n\n            public RunnerCallback(IntegrationTestsRunnerWindow window)\n            {\n                m_Window = window;\n\n                m_ConsoleErrorOnPauseValue = GuiHelper.GetConsoleErrorPause();\n                GuiHelper.SetConsoleErrorPause(false);\n                m_RunInBackground = PlayerSettings.runInBackground;\n                PlayerSettings.runInBackground = true;\n            }\n\n            public void RunStarted(string platform, List<TestComponent> testsToRun)\n            {\n                EditorApplication.update += OnEditorUpdate;\n                m_TestNumber = testsToRun.Count;\n                foreach (var test in testsToRun)\n                {\n                    var result = m_Window.m_ResultList.Find(r => r.TestComponent == test);\n                    if (result != null) result.Reset();\n                }\n            }\n\n            public void RunFinished(List<TestResult> testResults)\n            {\n                m_Window.SetCurrentTest(null);\n                m_CurrentTest = null;\n                EditorApplication.update -= OnEditorUpdate;\n                EditorApplication.isPlaying = false;\n                EditorUtility.ClearProgressBar();\n                GuiHelper.SetConsoleErrorPause(m_ConsoleErrorOnPauseValue);\n                PlayerSettings.runInBackground = m_RunInBackground;\n            }\n\n            public void AllScenesFinished()\n            {\n\n            }\n\n            public void TestStarted(TestResult test)\n            {\n                m_Window.SetCurrentTest(test.TestComponent);\n                m_CurrentTest = test.TestComponent;\n            }\n\n\n            public void TestFinished(TestResult test)\n            {\n                m_CurrentTestNumber++;\n\n                var result = m_Window.m_ResultList.Find(r => r.Id == test.Id);\n                if (result != null)\n                    result.Update(test);\n                else\n                    m_Window.m_ResultList.Add(test);\n                    \n                if(test.IsFailure && m_Window.m_Settings.pauseOnTestFailure)\n                {\n                    EditorUtility.ClearProgressBar();\n                    EditorApplication.isPaused = true;\n                }\n            }\n\n            public void TestRunInterrupted(List<ITestComponent> testsNotRun)\n            {\n                Debug.Log(\"Test run interrupted\");\n                RunFinished(new List<TestResult>());\n            }\n\n            private void OnEditorUpdate()\n            {\n                if(!EditorApplication.isPlaying) \n                {\n                    TestRunInterrupted(null);\n                    return;\n                }\n\n                if (m_Window.m_Settings.blockUIWhenRunning \n                    && m_CurrentTest != null \n                    && !EditorApplication.isPaused \n                    && EditorUtility.DisplayCancelableProgressBar(\"Integration Test Runner\",\n                                                                  \"Running \" + m_CurrentTest.Name,\n                                                                  (float)m_CurrentTestNumber / m_TestNumber))\n                {\n                    TestRunInterrupted(null);\n                }\n            }\n        }\n\n        [MenuItem(\"Unity Test Tools/Integration Test Runner %#&t\")]\n        public static IntegrationTestsRunnerWindow ShowWindow()\n        {\n            var w = GetWindow(typeof(IntegrationTestsRunnerWindow));\n            w.Show();\n            return w as IntegrationTestsRunnerWindow;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/IntegrationTestsRunnerWindow.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 2c898357efb599944818326bb43ba879\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/NetworkResultsReceiver.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Sockets;\nusing UnityEditor;\nusing UnityEditorInternal;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    [Serializable]\n    public class NetworkResultsReceiver : EditorWindow\n    {\n        public static NetworkResultsReceiver Instance;\n\n        private string m_StatusLabel;\n        private TcpListener m_Listener;\n\n        [SerializeField]\n        private PlatformRunnerConfiguration m_Configuration;\n\n        private List<ITestResult> m_TestResults = new List<ITestResult>();\n\n        #region steering variables\n        private bool m_RunFinished;\n        private bool m_Repaint;\n\n        private TimeSpan m_TestTimeout = TimeSpan.Zero;\n        private DateTime m_LastMessageReceived;\n        private bool m_Running;\n\n        public TimeSpan ReceiveMessageTimeout = TimeSpan.FromSeconds(30);\n        private readonly TimeSpan m_InitialConnectionTimeout = TimeSpan.FromSeconds(300);\n        private bool m_TestFailed;\n        #endregion\n\n        private void AcceptCallback(TcpClient client)\n        {\n            m_Repaint = true;\n            ResultDTO dto;\n            try\n            {\n                m_LastMessageReceived = DateTime.Now;\n                using (var stream = client.GetStream())\n                {\n                    var bf = new DTOFormatter();\n                    dto = (ResultDTO)bf.Deserialize(stream);\n                    stream.Close();\n                }\n                client.Close();\n            }\n            catch (ObjectDisposedException e)\n            {\n                Debug.LogException(e);\n                m_StatusLabel = \"Got disconnected\";\n                return;\n            }\n            catch (Exception e)\n            {\n                Debug.LogException(e);\n                return;\n            }\n\n            switch (dto.messageType)\n            {\n                case ResultDTO.MessageType.TestStarted:\n                    m_StatusLabel = dto.testName;\n                    m_TestTimeout = TimeSpan.FromSeconds(dto.testTimeout);\n                    break;\n                case ResultDTO.MessageType.TestFinished:\n                    m_TestResults.Add(dto.testResult);\n                    m_TestTimeout = TimeSpan.Zero;\n                    if (dto.testResult.Executed && dto.testResult.ResultState != TestResultState.Ignored && !dto.testResult.IsSuccess)\n                        m_TestFailed = true;\n                    break;\n                case ResultDTO.MessageType.RunStarted:\n                    m_TestResults = new List<ITestResult>();\n                    m_StatusLabel = \"Run started: \" + dto.loadedLevelName;\n                    break;\n                case ResultDTO.MessageType.RunFinished:\n                    WriteResultsToLog(dto, m_TestResults);\n                    if (!string.IsNullOrEmpty(m_Configuration.resultsDir))\n                    {\n                        var platform = m_Configuration.runInEditor ? \"Editor\" : m_Configuration.buildTarget.ToString();\n                        var resultWriter = new XmlResultWriter(dto.loadedLevelName, platform, m_TestResults.ToArray());\n                        try\n                        {\n                            if (!Directory.Exists(m_Configuration.resultsDir))\n                            {\n                                Directory.CreateDirectory(m_Configuration.resultsDir);\n                            }\n                            var filePath = Path.Combine(m_Configuration.resultsDir, dto.loadedLevelName + \".xml\");\n                            File.WriteAllText(filePath, resultWriter.GetTestResult());\n                        }\n                        catch (Exception e)\n                        {\n                            Debug.LogException(e);\n                        }\n                    }\n                    break;\n            case ResultDTO.MessageType.AllScenesFinished:\n                m_Running = false;\n                m_RunFinished = true;\n                break;\n            case ResultDTO.MessageType.Ping:\n                    break;\n            }\n        }\n\n        private void WriteResultsToLog(ResultDTO dto, List<ITestResult> list)\n        {\n            string result = \"Run finished for: \" + dto.loadedLevelName;\n            var failCount = list.Count(t => t.Executed && !t.IsSuccess);\n            if (failCount == 0)\n                result += \"\\nAll tests passed\";\n            else\n                result += \"\\n\" + failCount + \" tests failed\";\n\n            if (failCount == 0)\n                Debug.Log(result);\n            else\n                Debug.LogWarning(result);\n        }\n\n        public void Update()\n        {\n            if (EditorApplication.isCompiling\n                && m_Listener != null)\n            {\n                m_Running = false;\n                m_Listener.Stop();\n                return;\n            }\n\n            if (m_Running)\n            {\n                try\n                {\n                    if (m_Listener != null && m_Listener.Pending())\n                    {\n                        using (var client = m_Listener.AcceptTcpClient())\n                        {\n                            AcceptCallback(client);\n                            client.Close();\n                        }\n                    }\n                }\n                catch (InvalidOperationException e)\n                {\n                    m_StatusLabel = \"Exception happened: \" + e.Message;\n                    Repaint();\n                    Debug.LogException(e);\n                }\n            }\n\n            if (m_Running)\n            {\n                var adjustedtestTimeout =  m_TestTimeout.Add(m_TestTimeout);\n                var timeout = ReceiveMessageTimeout > adjustedtestTimeout ? ReceiveMessageTimeout : adjustedtestTimeout;\n                if ((DateTime.Now - m_LastMessageReceived) > timeout)\n                {\n                    Debug.LogError(\"Timeout when waiting for test results\");\n                    m_RunFinished = true;\n                }\n            }\n            if (m_RunFinished)\n            {\n                Close();\n                if (InternalEditorUtility.inBatchMode)\n                    EditorApplication.Exit(m_TestFailed ? Batch.returnCodeTestsFailed : Batch.returnCodeTestsOk);\n            }\n            if (m_Repaint) Repaint();\n        }\n\n        public void OnEnable()\n        {\n            minSize = new Vector2(300, 100);\n            titleContent = new GUIContent(\"Test run monitor\");\n            Instance = this;\n            m_StatusLabel = \"Initializing...\";\n            if (EditorApplication.isCompiling) return;\n            EnableServer();\n        }\n\n        private void EnableServer()\n        {\n            if (m_Configuration == null) throw new Exception(\"No result receiver server configuration.\");\n\n            var ipAddress = IPAddress.Any;\n            if (m_Configuration.ipList != null && m_Configuration.ipList.Count == 1)\n                ipAddress = IPAddress.Parse(m_Configuration.ipList.Single());\n\n            var ipAddStr = Equals(ipAddress, IPAddress.Any) ? \"[All interfaces]\" : ipAddress.ToString();\n            \n            m_Listener = new TcpListener(ipAddress, m_Configuration.port);\n            m_StatusLabel = \"Waiting for connection on: \" + ipAddStr + \":\" + m_Configuration.port;\n            \n            try\n            {\n                m_Listener.Start(100);\n            }\n            catch (SocketException e)\n            {\n                m_StatusLabel = \"Exception happened: \" + e.Message;\n                Repaint();\n                Debug.LogException(e);\n            }\n            m_Running = true;\n            m_LastMessageReceived = DateTime.Now + m_InitialConnectionTimeout;\n        }\n\n        public void OnDisable()\n        {\n            Instance = null;\n            if (m_Listener != null)\n                m_Listener.Stop();\n        }\n\n        public void OnGUI()\n        {\n            EditorGUILayout.LabelField(\"Status:\", EditorStyles.boldLabel);\n            EditorGUILayout.LabelField(m_StatusLabel);\n            GUILayout.FlexibleSpace();\n            if (GUILayout.Button(\"Stop\"))\n            {\n                StopReceiver();\n                if (InternalEditorUtility.inBatchMode)\n                    EditorApplication.Exit(Batch.returnCodeRunError);\n            }\n        }\n\n        public static void StartReceiver(PlatformRunnerConfiguration configuration)\n        {\n            var w = (NetworkResultsReceiver)GetWindow(typeof(NetworkResultsReceiver), false);\n            w.SetConfiguration(configuration);\n            if (!EditorApplication.isCompiling)\n            {\n                w.EnableServer();\n            }\n            w.Show(true);\n        }\n\n        private void SetConfiguration(PlatformRunnerConfiguration configuration)\n        {\n            m_Configuration = configuration;\n        }\n\n        public static void StopReceiver()\n        {\n            if (Instance == null) return;\n            try{\n                Instance.Close();\n            }catch(Exception e){\n                Debug.LogException(e);\n                DestroyImmediate(Instance);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/NetworkResultsReceiver.cs.meta",
    "content": "fileFormatVersion: 2\nguid: ade4197221f35dc44adb7649f99af2e7\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlatformRunner.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Net.Sockets;\nusing UnityEditor;\nusing UnityEditorInternal;\nusing UnityEngine;\nusing System.Linq;\n\nnamespace UnityTest.IntegrationTests\n{\n    public class PlatformRunner\n    {\n        public static BuildTarget defaultBuildTarget\n        {\n            get\n            {\n                var target = EditorPrefs.GetString(\"ITR-platformRunnerBuildTarget\");\n                BuildTarget buildTarget;\n                try\n                {\n                    buildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), target);\n                }\n                catch\n                {\n                    return GetDefaultBuildTarget();\n                }\n                return buildTarget;\n            }\n            set { EditorPrefs.SetString(\"ITR-platformRunnerBuildTarget\", value.ToString()); }\n        }\n\n        [MenuItem(\"Unity Test Tools/Platform Runner/Run current scene %#&r\")]\n        public static void BuildAndRunCurrentScene()\n        {\n            Debug.Log(\"Building and running current test for \" + defaultBuildTarget);\n            BuildAndRunInPlayer(new PlatformRunnerConfiguration(defaultBuildTarget));\n        }\n\n        [MenuItem(\"Unity Test Tools/Platform Runner/Run on platform %#r\")]\n        public static void RunInPlayer()\n        {\n            var w = EditorWindow.GetWindow(typeof(PlatformRunnerSettingsWindow));\n            w.Show();\n        }\n\n        public static void BuildAndRunInPlayer(PlatformRunnerConfiguration configuration)\n        {\n            NetworkResultsReceiver.StopReceiver();\n\n            var settings = new PlayerSettingConfigurator(false);\n\n            if (configuration.sendResultsOverNetwork)\n            {\n                try\n                {\n                    var l = new TcpListener(IPAddress.Any, configuration.port);\n                    l.Start();\n                    configuration.port = ((IPEndPoint)l.Server.LocalEndPoint).Port;\n                    l.Stop();\n                }\n                catch (SocketException e)\n                {\n                    Debug.LogException(e);\n                    if (InternalEditorUtility.inBatchMode)\n                        EditorApplication.Exit(Batch.returnCodeRunError);\n                }\n            }\n\n            if (InternalEditorUtility.inBatchMode)\n                settings.AddConfigurationFile(TestRunnerConfigurator.batchRunFileMarker, \"\");\n\n            if (configuration.sendResultsOverNetwork)\n                settings.AddConfigurationFile(TestRunnerConfigurator.integrationTestsNetwork,\n                                              string.Join(\"\\n\", configuration.GetConnectionIPs()));\n\n            settings.AddConfigurationFile (TestRunnerConfigurator.testScenesToRun, string.Join (\"\\n\", configuration.testScenes.ToArray()));\n\n            settings.ChangeSettingsForIntegrationTests();\n\n            AssetDatabase.Refresh();\n\n            var result = BuildPipeline.BuildPlayer(configuration.testScenes.Concat(configuration.buildScenes).ToArray(),\n                                                   configuration.GetTempPath(),\n                                                   configuration.buildTarget,\n                                                   BuildOptions.AutoRunPlayer | BuildOptions.Development);\n\n            settings.RevertSettingsChanges();\n            settings.RemoveAllConfigurationFiles();\n\n            AssetDatabase.Refresh();\n\n            if (!string.IsNullOrEmpty(result))\n            {\n                if (InternalEditorUtility.inBatchMode)\n                    EditorApplication.Exit(Batch.returnCodeRunError);\n                return;\n            }\n\n            if (configuration.sendResultsOverNetwork)\n                NetworkResultsReceiver.StartReceiver(configuration);\n            else if (InternalEditorUtility.inBatchMode)\n                EditorApplication.Exit(Batch.returnCodeTestsOk);\n        }\n\n        private static BuildTarget GetDefaultBuildTarget()\n        {\n            switch (EditorUserBuildSettings.selectedBuildTargetGroup)\n            {\n                case BuildTargetGroup.Android:\n                    return BuildTarget.Android;\n                default:\n                {\n                    switch (Application.platform)\n                    {\n                        case RuntimePlatform.WindowsPlayer:\n                            return BuildTarget.StandaloneWindows;\n                        case RuntimePlatform.OSXPlayer:\n                            return BuildTarget.StandaloneOSXIntel;\n                        case RuntimePlatform.LinuxPlayer:\n                            return BuildTarget.StandaloneLinux;\n                    }\n                    return BuildTarget.WebGL;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlatformRunner.cs.meta",
    "content": "fileFormatVersion: 2\nguid: a3581fa3f207a8a4c9988b9f59a510d3\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlatformRunnerConfiguration.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Sockets;\nusing UnityEditor;\nusing UnityEngine;\nusing UnityEngine.SceneManagement;\n\n[Serializable]\npublic class PlatformRunnerConfiguration\n{\n    public List<string> buildScenes;\n    public List<string> testScenes;\n    public BuildTarget buildTarget;\n    public bool runInEditor;\n    public string projectName = SceneManager.GetActiveScene().path;\n\n    public string resultsDir = null;\n    public bool sendResultsOverNetwork;\n    public List<string> ipList;\n    public int port;\n\n    public PlatformRunnerConfiguration(BuildTarget buildTarget)\n    {\n        this.buildTarget = buildTarget;\n        projectName = SceneManager.GetActiveScene().path;\n    }\n\n    public PlatformRunnerConfiguration()\n        : this(BuildTarget.StandaloneWindows)\n    {\n    }\n\n    public string GetTempPath()\n    {\n        if (string.IsNullOrEmpty(projectName))\n            projectName = Path.GetTempFileName();\n\n        var path = Path.Combine(\"Temp\", projectName);\n        switch (buildTarget)\n        {\n            case BuildTarget.StandaloneWindows:\n            case BuildTarget.StandaloneWindows64:\n                return path + \".exe\";\n            case BuildTarget.StandaloneOSXIntel:\n            case BuildTarget.StandaloneOSXIntel64:\n            case BuildTarget.StandaloneLinuxUniversal:\n                return path + \".app\";\n            case BuildTarget.Android:\n                return path + \".apk\";\n            default:\n                return path;\n        }\n    }\n\n    public string[] GetConnectionIPs()\n    {\n        return ipList.Select(ip => ip + \":\" + port).ToArray();\n    }\n\n    public static int TryToGetFreePort()\n    {\n        var port = -1;\n        try\n        {\n            var l = new TcpListener(IPAddress.Any, 0);\n            l.Start();\n            port = ((IPEndPoint)l.Server.LocalEndPoint).Port;\n            l.Stop();\n        }\n        catch (SocketException e)\n        {\n            Debug.LogException(e);\n        }\n        return port;\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlatformRunnerConfiguration.cs.meta",
    "content": "fileFormatVersion: 2\nguid: b98fe8c3761da2d4b8cfd8bd6df7050f\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlatformRunnerSettings.cs",
    "content": "using System;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    public class PlatformRunnerSettings : ProjectSettingsBase\n    {\n        public string resultsPath;\n        public bool sendResultsOverNetwork = true;\n        public int port = 0;\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlatformRunnerSettings.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 964f5f0db2c95bb41aa3dc3beba1f06b\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlatformRunnerSettingsWindow.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing UnityEditor;\nusing UnityEngine;\nusing Object = UnityEngine.Object;\nusing UnityEngine.SceneManagement;\n\nnamespace UnityTest.IntegrationTests\n{\n    [Serializable]\n    public class PlatformRunnerSettingsWindow : EditorWindow\n    {\n        private BuildTarget m_BuildTarget;\n\n        private List<string> m_IntegrationTestScenes;\n        private List<string> m_OtherScenesToBuild;\n        private List<string> m_AllScenesInProject;\n\n        private Vector2 m_ScrollPositionIntegrationTests;\n        private Vector2 m_ScrollPositionOtherScenes;\n        private Vector2 m_ScrollPositionAllScenes;\n        private readonly List<string> m_Interfaces = new List<string>();\n        private readonly List<string> m_SelectedScenes = new List<string>();\n\n        private int m_SelectedInterface;\n        [SerializeField]\n        private bool m_AdvancedNetworkingSettings;\n\n        private PlatformRunnerSettings m_Settings;\n\n        private string m_SelectedSceneInAll;\n        private string m_SelectedSceneInTest;\n        private string m_SelectedSceneInBuild;\n\n        readonly GUIContent m_Label = new GUIContent(\"Results target directory\", \"Directory where the results will be saved. If no value is specified, the results will be generated in project's data folder.\");\n        \n        void Awake()\n        {\n            if (m_OtherScenesToBuild == null)\n                m_OtherScenesToBuild = new List<string> ();\n\n            if (m_IntegrationTestScenes == null)\n                m_IntegrationTestScenes = new List<string> ();\n\n            titleContent = new GUIContent(\"Platform runner\");\n            m_BuildTarget = PlatformRunner.defaultBuildTarget;\n            position.Set(position.xMin, position.yMin, 200, position.height);\n            m_AllScenesInProject = Directory.GetFiles(Directory.GetCurrentDirectory(), \"*.unity\", SearchOption.AllDirectories).ToList();\n            m_AllScenesInProject.Sort();\n            var currentScene = (Directory.GetCurrentDirectory() + SceneManager.GetActiveScene().path).Replace(\"\\\\\", \"\").Replace(\"/\", \"\");\n            var currentScenePath = m_AllScenesInProject.Where(s => s.Replace(\"\\\\\", \"\").Replace(\"/\", \"\") == currentScene);\n            m_SelectedScenes.AddRange(currentScenePath);\n\n            m_Interfaces.Add(\"(Any)\");\n            m_Interfaces.AddRange(TestRunnerConfigurator.GetAvailableNetworkIPs());\n            m_Interfaces.Add(\"127.0.0.1\");\n\n            LoadFromPrefereneces ();\n        }\n\n        public void OnEnable()\n        {\n            m_Settings = ProjectSettingsBase.Load<PlatformRunnerSettings>();\n\n            // If not configured pre populate with all scenes that have test components on game objects\n            // This needs to be done outsie of constructor\n            if (m_IntegrationTestScenes.Count == 0)\n                m_IntegrationTestScenes = GetScenesWithTestComponents (m_AllScenesInProject);\n        }\n\n        public void OnGUI()\n        {\n            EditorGUILayout.BeginVertical();\n                GUIContent label;\n\n                /* We have three lists here, The tests to run, supporting scenes to include in the build and the list of all scenes so users can\n                 * pick the scenes they want to include. The motiviation here is that test scenes may require to additively load other scenes as part of the tests\n                 */\n                EditorGUILayout.BeginHorizontal ();\n\n                    // Integration Tests To Run\n                    EditorGUILayout.BeginVertical ();\n\n                    label = new GUIContent(\"Tests:\", \"All Integration Test scenes that you wish to run on the platform\");\n                    EditorGUILayout.LabelField(label, EditorStyles.boldLabel, GUILayout.Height(20f));\n\n                    EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(m_SelectedSceneInTest));\n                        if (GUILayout.Button(\"Remove Integration Test\")) {\n                        m_IntegrationTestScenes.Remove(m_SelectedSceneInTest);\n                        m_SelectedSceneInTest = \"\";\n                    }\n                    EditorGUI.EndDisabledGroup();\n\n                    DrawVerticalSceneList (ref m_IntegrationTestScenes, ref m_SelectedSceneInTest, ref m_ScrollPositionIntegrationTests);\n                    EditorGUILayout.EndVertical ();\n        \n                    // Extra scenes to include in build\n                    EditorGUILayout.BeginVertical ();\n                        label = new GUIContent(\"Other Scenes in Build:\", \"If your Integration Tests additivly load any other scenes then you want to include them here so they are part of the build\");\n                        EditorGUILayout.LabelField(label, EditorStyles.boldLabel, GUILayout.Height(20f));\n\n            \n                    EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(m_SelectedSceneInBuild));\n                    if (GUILayout.Button(\"Remove From Build\")) {\n                        m_OtherScenesToBuild.Remove(m_SelectedSceneInBuild);\n                        m_SelectedSceneInBuild = \"\";\n                    }\n                    EditorGUI.EndDisabledGroup();\n\n                    DrawVerticalSceneList (ref m_OtherScenesToBuild, ref m_SelectedSceneInBuild, ref m_ScrollPositionOtherScenes);\n                    EditorGUILayout.EndVertical ();\n\n                    EditorGUILayout.Separator ();\n\n                    // All Scenes\n                    EditorGUILayout.BeginVertical ();\n                    label = new GUIContent(\"Available Scenes\", \"These are all the scenes within your project, please select some to run tests\");\n                    EditorGUILayout.LabelField(label, EditorStyles.boldLabel, GUILayout.Height(20f));\n\n            \n                    EditorGUILayout.BeginHorizontal ();\n                    EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(m_SelectedSceneInAll));\n                    if (GUILayout.Button(\"Add As Test\")) {\n                        if (!m_IntegrationTestScenes.Contains (m_SelectedSceneInAll) && !m_OtherScenesToBuild.Contains (m_SelectedSceneInAll)) {\n                            m_IntegrationTestScenes.Add(m_SelectedSceneInAll);\n                        }\n                    }\n            \n                    if (GUILayout.Button(\"Add to Build\")) {\n                        if (!m_IntegrationTestScenes.Contains (m_SelectedSceneInAll) && !m_OtherScenesToBuild.Contains (m_SelectedSceneInAll)) {\n                            m_OtherScenesToBuild.Add(m_SelectedSceneInAll);\n                        }\n                    }\n                    EditorGUI.EndDisabledGroup();\n\n                    EditorGUILayout.EndHorizontal ();\n\n                    DrawVerticalSceneList (ref m_AllScenesInProject, ref m_SelectedSceneInAll, ref m_ScrollPositionAllScenes);\n                    EditorGUILayout.EndVertical ();\n                    \n            // ButtoNetworkResultsReceiverns to edit scenes in lists\n                  \n\n                EditorGUILayout.EndHorizontal ();\n                \n                GUILayout.Space(3);\n                \n                // Select target platform\n                m_BuildTarget = (BuildTarget)EditorGUILayout.EnumPopup(\"Build tests for\", m_BuildTarget);\n\n                if (PlatformRunner.defaultBuildTarget != m_BuildTarget)\n                {\n                    if (GUILayout.Button(\"Make default target platform\"))\n                    {\n                    PlatformRunner.defaultBuildTarget = m_BuildTarget;\n                    }\n                }\n                GUI.enabled = true;\n            \n                // Select various Network settings\n                DrawSetting();\n                var build = GUILayout.Button(\"Build and run tests\");\n            EditorGUILayout.EndVertical();\n\n            if (build) \n            {\n                BuildAndRun ();\n            }\n        }\n\n        private void DrawVerticalSceneList(ref List<string> sourceList, ref string selectString, ref Vector2 scrollPosition)\n        {\n\t\t\tscrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, Styles.testList);\n            EditorGUI.indentLevel++;\n            foreach (var scenePath in sourceList)\n            {\n                var path = Path.GetFileNameWithoutExtension(scenePath);\n                var guiContent = new GUIContent(path, scenePath);\n                var rect = GUILayoutUtility.GetRect(guiContent, EditorStyles.label);\n                if (rect.Contains(Event.current.mousePosition))\n                {\n                    if (Event.current.type == EventType.mouseDown && Event.current.button == 0)\n                    {\n                        selectString = scenePath;\n                        Event.current.Use();\n                    }\n                }\n                var style = new GUIStyle(EditorStyles.label);\n \n                if (selectString == scenePath)\n                    style.normal.textColor = new Color(0.3f, 0.5f, 0.85f);\n                EditorGUI.LabelField(rect, guiContent, style);\n            }\n            EditorGUI.indentLevel--;\n            EditorGUILayout.EndScrollView();\n        }\n\n        public static List<string> GetScenesWithTestComponents(List<string> allScenes)\n        {\n            List<Object> results = EditorReferencesUtil.FindScenesWhichContainAsset(\"TestComponent.cs\");    \n            List<string> integrationTestScenes = new List<string>();\n            \n            foreach (Object obj in results) {\n                string result = allScenes.FirstOrDefault(s => s.Contains(obj.name));\n                if (!string.IsNullOrEmpty(result))\n                    integrationTestScenes.Add(result);\n            }\n            \n            return integrationTestScenes;\n        }\n\n        private void DrawSetting()\n        {\n            EditorGUI.BeginChangeCheck();\n\n            EditorGUILayout.BeginHorizontal();\n            m_Settings.resultsPath = EditorGUILayout.TextField(m_Label, m_Settings.resultsPath);\n            if (GUILayout.Button(\"Search\", EditorStyles.miniButton, GUILayout.Width(50)))\n            {\n                var selectedPath = EditorUtility.SaveFolderPanel(\"Result files destination\", m_Settings.resultsPath, \"\");\n                if (!string.IsNullOrEmpty(selectedPath))\n                    m_Settings.resultsPath = Path.GetFullPath(selectedPath);\n            }\n            EditorGUILayout.EndHorizontal();\n\n            if (!string.IsNullOrEmpty(m_Settings.resultsPath))\n            {\n                Uri uri;\n                if (!Uri.TryCreate(m_Settings.resultsPath, UriKind.Absolute, out uri) || !uri.IsFile || uri.IsWellFormedOriginalString())\n                {\n                    EditorGUILayout.HelpBox(\"Invalid URI path\", MessageType.Warning);\n                }\n            }\n\n            m_Settings.sendResultsOverNetwork = EditorGUILayout.Toggle(\"Send results to editor\", m_Settings.sendResultsOverNetwork);\n            EditorGUI.BeginDisabledGroup(!m_Settings.sendResultsOverNetwork);\n            m_AdvancedNetworkingSettings = EditorGUILayout.Foldout(m_AdvancedNetworkingSettings, \"Advanced network settings\");\n            if (m_AdvancedNetworkingSettings)\n            {\n                m_SelectedInterface = EditorGUILayout.Popup(\"Network interface\", m_SelectedInterface, m_Interfaces.ToArray());\n                EditorGUI.BeginChangeCheck();\n                m_Settings.port = EditorGUILayout.IntField(\"Network port\", m_Settings.port);\n                if (EditorGUI.EndChangeCheck())\n                {\n                    if (m_Settings.port > IPEndPoint.MaxPort)\n                        m_Settings.port = IPEndPoint.MaxPort;\n                    else if (m_Settings.port < IPEndPoint.MinPort)\n                        m_Settings.port = IPEndPoint.MinPort;\n                }\n            }\n\n            EditorGUI.EndDisabledGroup();\n\n            if (EditorGUI.EndChangeCheck())\n            {\n                m_Settings.Save();\n            }\n        }\n\n        private void BuildAndRun()\n        {\n            SaveToPreferences ();\n\n            var config = new PlatformRunnerConfiguration\n            {\n                buildTarget = m_BuildTarget,\n                buildScenes = m_OtherScenesToBuild,\n                testScenes = m_IntegrationTestScenes,\n                projectName = m_IntegrationTestScenes.Count > 1 ? \"IntegrationTests\" : Path.GetFileNameWithoutExtension(SceneManager.GetActiveScene().path),\n                resultsDir = m_Settings.resultsPath,\n                sendResultsOverNetwork = m_Settings.sendResultsOverNetwork,\n                ipList = m_Interfaces.Skip(1).ToList(),\n                port = m_Settings.port\n            };\n            \n            if (m_SelectedInterface > 0)\n            config.ipList = new List<string> {m_Interfaces.ElementAt(m_SelectedInterface)};\n            \n            PlatformRunner.BuildAndRunInPlayer(config);\n            Close ();\n        }\n\n        public void OnLostFocus() {\n            SaveToPreferences ();\n        }\n\n        public void OnDestroy() {\n            SaveToPreferences ();\n        }\n\n        private void SaveToPreferences()\n        {\n            EditorPrefs.SetString (Animator.StringToHash (Application.dataPath + \"uttTestScenes\").ToString (), String.Join (\",\",m_IntegrationTestScenes.ToArray()));\n            EditorPrefs.SetString (Animator.StringToHash (Application.dataPath + \"uttBuildScenes\").ToString (), String.Join (\",\",m_OtherScenesToBuild.ToArray()));\n        }\n        \n        private void LoadFromPrefereneces()\n        {\n            string storedTestScenes = EditorPrefs.GetString (Animator.StringToHash (Application.dataPath + \"uttTestScenes\").ToString ());\n            string storedBuildScenes = EditorPrefs.GetString (Animator.StringToHash (Application.dataPath + \"uttBuildScenes\").ToString ());\n            \n            List<string> parsedTestScenes = storedTestScenes.Split (',').ToList ();\n            List<string> parsedBuildScenes = storedBuildScenes.Split (',').ToList ();\n            \n            // Sanity check scenes actually exist\n            foreach (string str in parsedTestScenes) {\n                if (m_AllScenesInProject.Contains(str))\n                    m_IntegrationTestScenes.Add(str);\n            }\n            \n            foreach (string str in parsedBuildScenes) {\n                if (m_AllScenesInProject.Contains(str))\n                    m_OtherScenesToBuild.Add(str);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlatformRunnerSettingsWindow.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 3819282b0887bc742911b89745080acb\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlayerSettingConfigurator.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    class PlayerSettingConfigurator\n    {\n        private string resourcesPath {\n            get { return m_Temp ? k_TempPath : m_ProjectResourcesPath; }\n        }\n\n        private readonly string m_ProjectResourcesPath = Path.Combine(\"Assets\", \"Resources\");\n        const string k_TempPath = \"Temp\";\n        private readonly bool m_Temp;\n\n        private ResolutionDialogSetting m_DisplayResolutionDialog;\n        private bool m_RunInBackground;\n        private bool m_FullScreen;\n        private bool m_ResizableWindow;\n        private readonly List<string> m_TempFileList = new List<string>();\n\n        public PlayerSettingConfigurator(bool saveInTempFolder)\n        {\n            m_Temp = saveInTempFolder;\n        }\n\n        public void ChangeSettingsForIntegrationTests()\n        {\n            m_DisplayResolutionDialog = PlayerSettings.displayResolutionDialog;\n            PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.Disabled;\n\n            m_RunInBackground = PlayerSettings.runInBackground;\n            PlayerSettings.runInBackground = true;\n\n            m_FullScreen = PlayerSettings.defaultIsFullScreen;\n            PlayerSettings.defaultIsFullScreen = false;\n\n            m_ResizableWindow = PlayerSettings.resizableWindow;\n            PlayerSettings.resizableWindow = true;\n        }\n\n        public void RevertSettingsChanges()\n        {\n            PlayerSettings.defaultIsFullScreen = m_FullScreen;\n            PlayerSettings.runInBackground = m_RunInBackground;\n            PlayerSettings.displayResolutionDialog = m_DisplayResolutionDialog;\n            PlayerSettings.resizableWindow = m_ResizableWindow;\n        }\n\n        public void AddConfigurationFile(string fileName, string content)\n        {\n            var resourcesPathExists = Directory.Exists(resourcesPath);\n            if (!resourcesPathExists) AssetDatabase.CreateFolder(\"Assets\", \"Resources\");\n\n            var filePath = Path.Combine(resourcesPath, fileName);\n            File.WriteAllText(filePath, content);\n\n            m_TempFileList.Add(filePath);\n        }\n\n        public void RemoveAllConfigurationFiles()\n        {\n            foreach (var filePath in m_TempFileList)\n                AssetDatabase.DeleteAsset(filePath);\n            if (Directory.Exists(resourcesPath)\n                && Directory.GetFiles(resourcesPath).Length == 0)\n                AssetDatabase.DeleteAsset(resourcesPath);\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner/PlayerSettingConfigurator.cs.meta",
    "content": "fileFormatVersion: 2\nguid: c7adbe43058d54047b6109b2e66894fd\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/PlatformRunner.meta",
    "content": "fileFormatVersion: 2\nguid: c44e9167d633ee94bb6e078238178308\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Renderer/IntegrationTestGroupLine.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    class IntegrationTestGroupLine : IntegrationTestRendererBase\n    {\n        public static List<GameObject> FoldMarkers;\n        private IntegrationTestRendererBase[] m_Children;\n\n        public IntegrationTestGroupLine(GameObject gameObject) : base(gameObject)\n        {\n        }\n\n        protected internal override void DrawLine(Rect rect, GUIContent label, bool isSelected, RenderingOptions options)\n        {\n            EditorGUI.BeginChangeCheck();\n            var isClassFolded = !EditorGUI.Foldout(rect, !Folded, label, isSelected ? Styles.selectedFoldout : Styles.foldout);\n            if (EditorGUI.EndChangeCheck()) Folded = isClassFolded;\n        }\n\n        private bool Folded\n        {\n            get { return FoldMarkers.Contains(m_GameObject); }\n\n            set\n            {\n                if (value) FoldMarkers.Add(m_GameObject);\n                else FoldMarkers.RemoveAll(s => s == m_GameObject);\n            }\n        }\n\n        protected internal override void Render(int indend, RenderingOptions options)\n        {\n            base.Render(indend, options);\n            if (!Folded)\n                foreach (var child in m_Children)\n                    child.Render(indend + 1, options);\n        }\n\n        protected internal override TestResult.ResultType GetResult()\n        {\n            bool ignored = false;\n            bool success = false;\n            foreach (var child in m_Children)\n            {\n                var result = child.GetResult();\n\n                if (result == TestResult.ResultType.Failed || result == TestResult.ResultType.FailedException || result == TestResult.ResultType.Timeout)\n                    return TestResult.ResultType.Failed;\n                if (result == TestResult.ResultType.Success)\n                    success = true;\n                else if (result == TestResult.ResultType.Ignored)\n                    ignored = true;\n                else\n                    ignored = false;\n            }\n            if (success) return TestResult.ResultType.Success;\n            if (ignored) return TestResult.ResultType.Ignored;\n            return TestResult.ResultType.NotRun;\n        }\n\n        protected internal override bool IsVisible(RenderingOptions options)\n        {\n            return m_Children.Any(c => c.IsVisible(options));\n        }\n\n        public override bool SetCurrentTest(TestComponent tc)\n        {\n            m_IsRunning = false;\n            foreach (var child in m_Children)\n                m_IsRunning |= child.SetCurrentTest(tc);\n            return m_IsRunning;\n        }\n\n        public void AddChildren(IntegrationTestRendererBase[] parseTestList)\n        {\n            m_Children = parseTestList;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Renderer/IntegrationTestGroupLine.cs.meta",
    "content": "fileFormatVersion: 2\nguid: f6dc74195aa98ef4da8901199cda4a63\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Renderer/IntegrationTestLine.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEditor;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    class IntegrationTestLine : IntegrationTestRendererBase\n    {\n        public static List<TestResult> Results;\n        protected TestResult m_Result;\n\n        public IntegrationTestLine(GameObject gameObject, TestResult testResult) : base(gameObject)\n        {\n            m_Result = testResult;\n        }\n\n        protected internal override void DrawLine(Rect rect, GUIContent label, bool isSelected, RenderingOptions options)\n        {\n            if(Event.current.type != EventType.repaint)\n                return;\n\n            Styles.testName.Draw (rect, label, false, false, false, isSelected);\n\n            if (m_Result.IsTimeout)\n            {\n                float min, max;\n                Styles.testName.CalcMinMaxWidth(label, out min, out max);\n                var timeoutRect = new Rect(rect);\n                timeoutRect.x += min - 12;\n                Styles.testName.Draw(timeoutRect, s_GUITimeoutIcon, false, false, false, isSelected);\n            }\n        }\n\n        protected internal override TestResult.ResultType GetResult()\n        {\n            if (!m_Result.Executed && test.ignored) return TestResult.ResultType.Ignored;\n            return m_Result.resultType;\n        }\n\n        protected internal override bool IsVisible(RenderingOptions options)\n        {\n            if (!string.IsNullOrEmpty(options.nameFilter) && !m_GameObject.name.ToLower().Contains(options.nameFilter.ToLower())) return false;\n            if (!options.showSucceeded && m_Result.IsSuccess) return false;\n            if (!options.showFailed && m_Result.IsFailure) return false;\n            if (!options.showNotRunned && !m_Result.Executed) return false;\n            if (!options.showIgnored && test.ignored) return false;\n            return true;\n        }\n\n        public override bool SetCurrentTest(TestComponent tc)\n        {\n            m_IsRunning = test == tc;\n            return m_IsRunning;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Renderer/IntegrationTestLine.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 212be02e4a7da194688b08ab0c946fbd\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Renderer/IntegrationTestRendererBase.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nusing Object = UnityEngine.Object;\n\nnamespace UnityTest\n{\n    public abstract class IntegrationTestRendererBase : IComparable<IntegrationTestRendererBase>\n    {\n        public static Action<IList<ITestComponent>> RunTest;\n\n        protected static bool s_Refresh;\n\n        private static readonly GUIContent k_GUIRunSelected = new GUIContent(\"Run Selected\");\n        private static readonly GUIContent k_GUIRun = new GUIContent(\"Run\");\n        private static readonly GUIContent k_GUIDelete = new GUIContent(\"Delete\");\n        private static readonly GUIContent k_GUIDeleteSelected = new GUIContent(\"Delete selected\");\n\n        protected static GUIContent s_GUITimeoutIcon = new GUIContent(Icons.StopwatchImg, \"Timeout\");\n\n        protected GameObject m_GameObject;\n        public TestComponent test;\n        private readonly string m_Name;\n\n        protected IntegrationTestRendererBase(GameObject gameObject)\n        {\n            test = gameObject.GetComponent(typeof(TestComponent)) as TestComponent;\n            if (test == null) throw new ArgumentException(\"Provided GameObject is not a test object\");\n            m_GameObject = gameObject;\n            m_Name = test.Name;\n        }\n\n        public int CompareTo(IntegrationTestRendererBase other)\n        {\n            return test.CompareTo(other.test);\n        }\n\n        public bool Render(RenderingOptions options)\n        {\n            s_Refresh = false;\n            EditorGUIUtility.SetIconSize(new Vector2(15, 15));\n            Render(0, options);\n            EditorGUIUtility.SetIconSize(Vector2.zero);\n            return s_Refresh;\n        }\n\n        protected internal virtual void Render(int indend, RenderingOptions options)\n        {\n            if (!IsVisible(options)) return;\n            EditorGUILayout.BeginHorizontal();\n            GUILayout.Space(indend * 10);\n\n            var tempColor = GUI.color;\n            if (m_IsRunning)\n            {\n                var frame = Mathf.Abs(Mathf.Cos(Time.realtimeSinceStartup * 4)) * 0.6f + 0.4f;\n                GUI.color = new Color(1, 1, 1, frame);\n            }\n\n            var isSelected = Selection.gameObjects.Contains(m_GameObject);\n\n            var value = GetResult();\n            var icon = GetIconForResult(value);\n\n            var label = new GUIContent(m_Name, icon);\n            var labelRect = GUILayoutUtility.GetRect(label, EditorStyles.label, GUILayout.ExpandWidth(true), GUILayout.Height(18));\n\n            OnLeftMouseButtonClick(labelRect);\n            OnContextClick(labelRect);\n            DrawLine(labelRect, label, isSelected, options);\n\n            if (m_IsRunning) GUI.color = tempColor;\n            EditorGUILayout.EndHorizontal();\n        }\n\n        protected void OnSelect()\n        {\n            if (!Event.current.control && !Event.current.command) \n            {\n                Selection.objects = new Object[0];\n                GUIUtility.keyboardControl = 0;\n            }\n\n            if ((Event.current.control || Event.current.command) && Selection.gameObjects.Contains(test.gameObject))\n                Selection.objects = Selection.gameObjects.Where(o => o != test.gameObject).ToArray();\n            else\n                Selection.objects = Selection.gameObjects.Concat(new[] { test.gameObject }).ToArray();\n        }\n\n        protected void OnLeftMouseButtonClick(Rect rect)\n        {\n            if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.mouseDown && Event.current.button == 0)\n            {\n                rect.width = 20;\n                if (rect.Contains(Event.current.mousePosition)) return;\n                Event.current.Use();\n                OnSelect();\n            }\n        }\n\n        protected void OnContextClick(Rect rect)\n        {\n            if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.ContextClick)\n            {\n                DrawContextMenu(test);\n            }\n        }\n\n        public static void DrawContextMenu(TestComponent testComponent)\n        {\n            if (EditorApplication.isPlayingOrWillChangePlaymode) return;\n\n            var selectedTests = Selection.gameObjects.Where(go => go.GetComponent(typeof(TestComponent)));\n            var manySelected = selectedTests.Count() > 1;\n\n            var m = new GenericMenu();\n            if (manySelected)\n            {\n                // var testsToRun\n                m.AddItem(k_GUIRunSelected, false, data => RunTest(selectedTests.Select(o => o.GetComponent(typeof(TestComponent))).Cast<ITestComponent>().ToList()), null);\n            }\n            m.AddItem(k_GUIRun, false, data => RunTest(new[] { testComponent }), null);\n            m.AddSeparator(\"\");\n            m.AddItem(manySelected ? k_GUIDeleteSelected : k_GUIDelete, false, data => RemoveTests(selectedTests.ToArray()), null);\n            m.ShowAsContext();\n        }\n\n        private static void RemoveTests(GameObject[] testsToDelete)\n        {\n            foreach (var t in testsToDelete)\n            {\n                Undo.DestroyObjectImmediate(t);\n            }\n        }\n\n        public static Texture GetIconForResult(TestResult.ResultType resultState)\n        {\n            switch (resultState)\n            {\n                case TestResult.ResultType.Success:\n                    return Icons.SuccessImg;\n                case TestResult.ResultType.Timeout:\n                case TestResult.ResultType.Failed:\n                case TestResult.ResultType.FailedException:\n                    return Icons.FailImg;\n                case TestResult.ResultType.Ignored:\n                    return Icons.IgnoreImg;\n                default:\n                    return Icons.UnknownImg;\n            }\n        }\n\n        protected internal bool m_IsRunning;\n        protected internal abstract void DrawLine(Rect rect, GUIContent label, bool isSelected, RenderingOptions options);\n        protected internal abstract TestResult.ResultType GetResult();\n        protected internal abstract bool IsVisible(RenderingOptions options);\n        public abstract bool SetCurrentTest(TestComponent tc);\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Renderer/IntegrationTestRendererBase.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 604645a3b57179a4d873906b625ef8ec\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Renderer/RenderingOptions.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    public class RenderingOptions\n    {\n        public string nameFilter;\n        public bool showSucceeded;\n        public bool showFailed;\n        public bool showIgnored;\n        public bool showNotRunned;\n        public string[] categories;\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Renderer/RenderingOptions.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 5c0aec4b4a6d1b047a98e8cc213e1a36\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/Renderer.meta",
    "content": "fileFormatVersion: 2\nguid: 5944b82e46f1682439d20b4c3a4f029c\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/TestComponentEditor.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEditor;\nusing UnityEngine;\nusing Object = UnityEngine.Object;\nusing UnityEditor.SceneManagement;\n\nnamespace UnityTest\n{\n    [CanEditMultipleObjects]\n    [CustomEditor(typeof(TestComponent))]\n    public class TestComponentEditor : Editor\n    {\n        private SerializedProperty m_ExpectException;\n        private SerializedProperty m_ExpectedExceptionList;\n        private SerializedProperty m_Ignored;\n        private SerializedProperty m_SucceedAssertions;\n        private SerializedProperty m_SucceedWhenExceptionIsThrown;\n        private SerializedProperty m_Timeout;\n\n        #region GUI Contens\n\n        private readonly GUIContent m_GUIExpectException = new GUIContent(\"Expect exception\", \"Should the test expect an exception\");\n        private readonly GUIContent m_GUIExpectExceptionList = new GUIContent(\"Expected exception list\", \"A comma separated list of exception types which will not fail the test when thrown\");\n        private readonly GUIContent m_GUIIgnore = new GUIContent(\"Ignore\", \"Ignore the tests in runs\");\n        private readonly GUIContent m_GUIIncludePlatforms = new GUIContent(\"Included platforms\", \"Platform on which the test should run\");\n        private readonly GUIContent m_GUISuccedOnAssertions = new GUIContent(\"Succeed on assertions\", \"Succeed after all assertions are executed\");\n        private readonly GUIContent m_GUISucceedWhenExceptionIsThrown = new GUIContent(\"Succeed when exception is thrown\", \"Should the test succeed when an expected exception is thrown\");\n        private readonly GUIContent m_GUITestName = new GUIContent(\"Test name\", \"Name of the test (is equal to the GameObject name)\");\n        private readonly GUIContent m_GUITimeout = new GUIContent(\"Timeout\", \"Number of seconds after which the test will timeout\");\n\n        #endregion\n\n        public void OnEnable()\n        {\n            m_Timeout = serializedObject.FindProperty(\"timeout\");\n            m_Ignored = serializedObject.FindProperty(\"ignored\");\n            m_SucceedAssertions = serializedObject.FindProperty(\"succeedAfterAllAssertionsAreExecuted\");\n            m_ExpectException = serializedObject.FindProperty(\"expectException\");\n            m_ExpectedExceptionList = serializedObject.FindProperty(\"expectedExceptionList\");\n            m_SucceedWhenExceptionIsThrown = serializedObject.FindProperty(\"succeedWhenExceptionIsThrown\");\n        }\n\n        public override void OnInspectorGUI()\n        {\n            var component = (TestComponent)target;\n\n            if (component.dynamic)\n            {\n                if(GUILayout.Button(\"Reload dynamic tests\"))\n                {\n                    TestComponent.DestroyAllDynamicTests();\n                    Selection.objects = new Object[0];\n                    IntegrationTestsRunnerWindow.selectedInHierarchy = false;\n                    GUIUtility.ExitGUI();\n                    return;\n                }\n                EditorGUILayout.HelpBox(\"This is a test generated from code. No changes in the component will be persisted.\", MessageType.Info);\n            }\n\n            if (component.IsTestGroup())\n            {\n                EditorGUI.BeginChangeCheck();\n                var newGroupName = EditorGUILayout.TextField(m_GUITestName, component.name);\n                if (EditorGUI.EndChangeCheck()) component.name = newGroupName;\n\n                serializedObject.ApplyModifiedProperties();\n                return;\n            }\n\n            serializedObject.Update();\n\n            EditorGUI.BeginDisabledGroup(serializedObject.isEditingMultipleObjects);\n\n            EditorGUI.BeginChangeCheck();\n            var newName = EditorGUILayout.TextField(m_GUITestName, component.name);\n            if (EditorGUI.EndChangeCheck()) component.name = newName;\n\n            if (component.platformsToIgnore == null)\n            {\n                component.platformsToIgnore = GetListOfIgnoredPlatforms(Enum.GetNames(typeof(TestComponent.IncludedPlatforms)), (int)component.includedPlatforms);\n            }\n\n            var enumList = Enum.GetNames(typeof(RuntimePlatform));\n            var flags = GetFlagList(enumList, component.platformsToIgnore);\n            flags = EditorGUILayout.MaskField(m_GUIIncludePlatforms, flags, enumList, EditorStyles.popup);\n            var newList = GetListOfIgnoredPlatforms(enumList, flags);\n            if (!component.dynamic)\n                component.platformsToIgnore = newList;\n            EditorGUI.EndDisabledGroup();\n\n            EditorGUILayout.PropertyField(m_Timeout, m_GUITimeout);\n            EditorGUILayout.PropertyField(m_Ignored, m_GUIIgnore);\n            EditorGUILayout.PropertyField(m_SucceedAssertions, m_GUISuccedOnAssertions);\n            EditorGUILayout.PropertyField(m_ExpectException, m_GUIExpectException);\n\n            EditorGUI.BeginDisabledGroup(!m_ExpectException.boolValue);\n            EditorGUILayout.PropertyField(m_ExpectedExceptionList, m_GUIExpectExceptionList);\n            EditorGUILayout.PropertyField(m_SucceedWhenExceptionIsThrown, m_GUISucceedWhenExceptionIsThrown);\n            EditorGUI.EndDisabledGroup();\n\n            if (!component.dynamic)\n                serializedObject.ApplyModifiedProperties();\n            if (GUI.changed)\n                EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());\n        }\n\n        private string[] GetListOfIgnoredPlatforms(string[] enumList, int flags)\n        {\n            var notSelectedPlatforms = new List<string>();\n            for (int i = 0; i < enumList.Length; i++)\n            {\n                var sel = (flags & (1 << i)) != 0;\n                if (!sel) notSelectedPlatforms.Add(enumList[i]);\n            }\n            return notSelectedPlatforms.ToArray();\n        }\n\n        private int GetFlagList(string[] enumList, string[] platformsToIgnore)\n        {\n            int flags = ~0;\n            for (int i = 0; i < enumList.Length; i++)\n                if (platformsToIgnore != null && platformsToIgnore.Any(s => s == enumList[i]))\n                    flags &= ~(1 << i);\n            return flags;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor/TestComponentEditor.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 160889f21f4d5944b9f6fcaf9c33f684\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/Editor.meta",
    "content": "fileFormatVersion: 2\nguid: caee08596a5965747b8edfde19e2f873\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/ITestRunnerCallback.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace UnityTest.IntegrationTestRunner\n{\n    public interface ITestRunnerCallback\n    {\n        void RunStarted(string platform, List<TestComponent> testsToRun);\n        void RunFinished(List<TestResult> testResults);\n        void AllScenesFinished();\n        void TestStarted(TestResult test);\n        void TestFinished(TestResult test);\n        void TestRunInterrupted(List<ITestComponent> testsNotRun);\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/ITestRunnerCallback.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 35af7d395e501a348ae1a0aa3c91dee4\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/IntegrationTest.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UnityEngine;\n\npublic static class IntegrationTest\n{\n    public const string passMessage = \"IntegrationTest Pass\";\n    public const string failMessage = \"IntegrationTest Fail\";\n\n    public static void Pass()\n    {\n        LogResult(passMessage);\n    }\n\n    public static void Pass(GameObject go)\n    {\n        LogResult(go, passMessage);\n    }\n\n    public static void Fail(string reason)\n    {\n        Fail();\n        if (!string.IsNullOrEmpty(reason)) Debug.Log(reason);\n    }\n\n    public static void Fail(GameObject go, string reason)\n    {\n        Fail(go);\n        if (!string.IsNullOrEmpty(reason)) Debug.Log(reason);\n    }\n\n    public static void Fail()\n    {\n        LogResult(failMessage);\n    }\n\n    public static void Fail(GameObject go)\n    {\n        LogResult(go, failMessage);\n    }\n\n    public static void Assert(bool condition)\n    {\n        Assert(condition, \"\");\n    }\n\n    public static void Assert(GameObject go, bool condition)\n    {\n        Assert(go, condition, \"\");\n    }\n\n    public static void Assert(bool condition, string message)\n    {\n        if (!condition) \n            Fail(message);\n    }\n\n    public static void Assert(GameObject go, bool condition, string message)\n    {\n        if (!condition) \n            Fail(go, message);\n    }\n\n    private static void LogResult(string message)\n    {\n        Debug.Log(message);\n    }\n\n    private static void LogResult(GameObject go, string message)\n    {\n        Debug.Log(message + \" (\" + FindTestObject(go).name + \")\", go);\n    }\n\n    private static GameObject FindTestObject(GameObject go)\n    {\n        var temp = go;\n        while (temp.transform.parent != null)\n        {\n            if (temp.GetComponent(\"TestComponent\") != null)\n                return temp;\n            temp = temp.transform.parent.gameObject;\n        }\n        return go;\n    }\n\n    #region Dynamic test attributes\n\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\n    public class ExcludePlatformAttribute : Attribute\n    {\n        public string[] platformsToExclude;\n\n        public ExcludePlatformAttribute(params RuntimePlatform[] platformsToExclude)\n        {\n            this.platformsToExclude = platformsToExclude.Select(platform => platform.ToString()).ToArray();\n        }\n    }\n\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\n    public class ExpectExceptions : Attribute\n    {\n        public string[] exceptionTypeNames;\n        public bool succeedOnException;\n\n        public ExpectExceptions() : this(false)\n        {\n        }\n\n        public ExpectExceptions(bool succeedOnException) : this(succeedOnException, new string[0])\n        {\n        }\n\n        public ExpectExceptions(bool succeedOnException, params string[] exceptionTypeNames)\n        {\n            this.succeedOnException = succeedOnException;\n            this.exceptionTypeNames = exceptionTypeNames;\n        }\n\n        public ExpectExceptions(bool succeedOnException, params Type[] exceptionTypes)\n            : this(succeedOnException, exceptionTypes.Select(type => type.FullName).ToArray())\n        {\n        }\n\n        public ExpectExceptions(params string[] exceptionTypeNames) : this(false, exceptionTypeNames)\n        {\n        }\n\n        public ExpectExceptions(params Type[] exceptionTypes) : this(false, exceptionTypes)\n        {\n        }\n    }\n\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\n    public class IgnoreAttribute : Attribute\n    {\n    }\n\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\n    public class DynamicTestAttribute : Attribute\n    {\n        private readonly string m_SceneName;\n\n        public DynamicTestAttribute(string sceneName)\n        {\n            if (sceneName.EndsWith(\".unity\"))\n                sceneName = sceneName.Substring(0, sceneName.Length - \".unity\".Length);\n            m_SceneName = sceneName;\n        }\n\n        public bool IncludeOnScene(string sceneName)\n        {\n            var fileName = Path.GetFileNameWithoutExtension(sceneName);\n            return fileName == m_SceneName;\n        }\n    }\n\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\n    public class SucceedWithAssertions : Attribute\n    {\n    }\n\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\n    public class TimeoutAttribute : Attribute\n    {\n        public float timeout;\n\n        public TimeoutAttribute(float seconds)\n        {\n            timeout = seconds;\n        }\n    }\n\n    #endregion\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/IntegrationTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: eb367bbc76e489443a4ebc8b0a8642f4\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/IntegrationTestAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing UnityEngine;\n\n[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\npublic class IntegrationTestAttribute : Attribute\n{\n    private readonly string m_Path;\n\n    public IntegrationTestAttribute(string path)\n    {\n        if (path.EndsWith(\".unity\"))\n            path = path.Substring(0, path.Length - \".unity\".Length);\n        m_Path = path;\n    }\n\n    public bool IncludeOnScene(string scenePath)\n    {\n        if (scenePath == m_Path) return true;\n        var fileName = Path.GetFileNameWithoutExtension(scenePath);\n        return fileName == m_Path;\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/IntegrationTestAttribute.cs.meta",
    "content": "fileFormatVersion: 2\nguid: f1a5c61a06ed66e41a6ee1b5f88b5afd\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/IntegrationTestsProvider.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEngine;\n\nnamespace UnityTest.IntegrationTestRunner\n{\n    class IntegrationTestsProvider\n    {\n        internal Dictionary<ITestComponent, HashSet<ITestComponent>> testCollection = new Dictionary<ITestComponent, HashSet<ITestComponent>>();\n        internal ITestComponent currentTestGroup;\n        internal IEnumerable<ITestComponent> testToRun;\n\n        public IntegrationTestsProvider(IEnumerable<ITestComponent> tests)\n        {\n            testToRun = tests;\n            foreach (var test in tests.OrderBy(component => component))\n            {\n                if (test.IsTestGroup())\n                {\n                    throw new Exception(test.Name + \" is test a group\");\n                }\n                AddTestToList(test);\n            }\n            if (currentTestGroup == null)\n            {\n                currentTestGroup = FindInnerTestGroup(TestComponent.NullTestComponent);\n            }\n        }\n\n        private void AddTestToList(ITestComponent test)\n        {\n            var group = test.GetTestGroup();\n            if (!testCollection.ContainsKey(group))\n                testCollection.Add(group, new HashSet<ITestComponent>());\n            testCollection[group].Add(test);\n            if (group == TestComponent.NullTestComponent) return;\n            AddTestToList(group);\n        }\n\n        public ITestComponent GetNextTest()\n        {\n            var test = testCollection[currentTestGroup].First();\n            testCollection[currentTestGroup].Remove(test);\n            test.EnableTest(true);\n            return test;\n        }\n\n        public void FinishTest(ITestComponent test)\n        {\n            try\n            {\n                test.EnableTest(false);\n                currentTestGroup = FindNextTestGroup(currentTestGroup);\n            }\n            catch (MissingReferenceException e)\n            {\n                Debug.LogException(e);\n            }\n        }\n\n        private ITestComponent FindNextTestGroup(ITestComponent testGroup)\n        {\n            if (testGroup == null) \n                throw new Exception (\"No test left\");\n\n            if (testCollection[testGroup].Any())\n            {\n                testGroup.EnableTest(true);\n                return FindInnerTestGroup(testGroup);\n            }\n            testCollection.Remove(testGroup);\n            testGroup.EnableTest(false);\n\n            var parentTestGroup = testGroup.GetTestGroup();\n            if (parentTestGroup == null) return null;\n\n            testCollection[parentTestGroup].Remove(testGroup);\n            return FindNextTestGroup(parentTestGroup);\n        }\n\n        private ITestComponent FindInnerTestGroup(ITestComponent group)\n        {\n            var innerGroups = testCollection[group];\n            foreach (var innerGroup in innerGroups)\n            {\n                if (!innerGroup.IsTestGroup()) continue;\n                innerGroup.EnableTest(true);\n                return FindInnerTestGroup(innerGroup);\n            }\n            return group;\n        }\n\n        public bool AnyTestsLeft()\n        {\n            return testCollection.Count != 0;\n        }\n\n        public List<ITestComponent> GetRemainingTests()\n        {\n            var remainingTests = new List<ITestComponent>();\n            foreach (var test in testCollection)\n            {\n                remainingTests.AddRange(test.Value);\n            }\n            return remainingTests;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/IntegrationTestsProvider.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 21d32637b19ee51489062a66ad922193\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/NetworkResultSender.cs",
    "content": "#if !UNITY_METRO && (UNITY_PRO_LICENSE || !(UNITY_ANDROID || UNITY_IPHONE))\n#define UTT_SOCKETS_SUPPORTED\n#endif\nusing System;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityTest.IntegrationTestRunner;\n\n#if UTT_SOCKETS_SUPPORTED\nusing System.Net.Sockets;\nusing System.Runtime.Serialization.Formatters.Binary;\n#endif\n\nnamespace UnityTest\n{\n    public class NetworkResultSender : ITestRunnerCallback\n    {\n#if UTT_SOCKETS_SUPPORTED\n        private readonly TimeSpan m_ConnectionTimeout = TimeSpan.FromSeconds(5);\n\n        private readonly string m_Ip;\n        private readonly int m_Port;\n#endif\n        private bool m_LostConnection;\n\n        public NetworkResultSender(string ip, int port)\n        {\n#if UTT_SOCKETS_SUPPORTED\n            m_Ip = ip;\n            m_Port = port;\n#endif\n        }\n\n        private bool SendDTO(ResultDTO dto)\n        {\n            if (m_LostConnection) return false;\n#if UTT_SOCKETS_SUPPORTED \n            try\n            {\n                using (var tcpClient = new TcpClient())\n                {\n                    var result = tcpClient.BeginConnect(m_Ip, m_Port, null, null);\n                    var success = result.AsyncWaitHandle.WaitOne(m_ConnectionTimeout);\n                    if (!success)\n                    {\n                        return false;\n                    }\n                    try\n                    {\n                        tcpClient.EndConnect(result);\n                    }\n                    catch (SocketException)\n                    {\n                        m_LostConnection = true;\n                        return false;\n                    }\n\n                    var bf = new DTOFormatter();\n                    bf.Serialize(tcpClient.GetStream(), dto);\n                    tcpClient.GetStream().Close();\n                    tcpClient.Close();\n                    Debug.Log(\"Sent \" + dto.messageType);\n                }\n            }\n            catch (SocketException e)\n            {\n                Debug.LogException(e);\n                m_LostConnection = true;\n                return false;\n            }\n#endif  // if UTT_SOCKETS_SUPPORTED\n            return true;\n        }\n\n        public bool Ping()\n        {\n            var result = SendDTO(ResultDTO.CreatePing());\n            m_LostConnection = false;\n            return result;\n        }\n\n        public void RunStarted(string platform, List<TestComponent> testsToRun)\n        {\n            SendDTO(ResultDTO.CreateRunStarted());\n        }\n\n        public void RunFinished(List<TestResult> testResults)\n        {\n            SendDTO(ResultDTO.CreateRunFinished(testResults));\n        }\n\n        public void TestStarted(TestResult test)\n        {\n            SendDTO(ResultDTO.CreateTestStarted(test));\n        }\n\n        public void TestFinished(TestResult test)\n        {\n            SendDTO(ResultDTO.CreateTestFinished(test));\n        }\n\n        public void AllScenesFinished()\n        {\n            SendDTO (ResultDTO.CreateAllScenesFinished ());\n        }\n\n        public void TestRunInterrupted(List<ITestComponent> testsNotRun)\n        {\n            RunFinished(new List<TestResult>());\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/NetworkResultSender.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 80b91644bbbc487479429368d4e8d596\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/ResultDTO.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityEngine.SceneManagement;\n\nnamespace UnityTest\n{\n    [Serializable]\n    public class ResultDTO\n    {\n        public MessageType messageType;\n        public int levelCount;\n        public int loadedLevel;\n        public string loadedLevelName;\n        public string testName;\n        public float testTimeout;\n        public ITestResult testResult;\n\n        private ResultDTO(MessageType messageType)\n        {\n            this.messageType = messageType;\n            levelCount = UnityEngine.SceneManagement.SceneManager.sceneCount;\n            loadedLevel = UnityEngine.SceneManagement.SceneManager.GetActiveScene().buildIndex;\n            loadedLevelName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name;\n        }\n\n        public enum MessageType : byte\n        {\n            Ping,\n            RunStarted,\n            RunFinished,\n            TestStarted,\n            TestFinished,\n            RunInterrupted,\n            AllScenesFinished\n        }\n\n        public static ResultDTO CreatePing()\n        {\n            var dto = new ResultDTO(MessageType.Ping);\n            return dto;\n        }\n\n        public static ResultDTO CreateRunStarted()\n        {\n            var dto = new ResultDTO(MessageType.RunStarted);\n            return dto;\n        }\n\n        public static ResultDTO CreateRunFinished(List<TestResult> testResults)\n        {\n            var dto = new ResultDTO(MessageType.RunFinished);\n            return dto;\n        }\n\n        public static ResultDTO CreateTestStarted(TestResult test)\n        {\n            var dto = new ResultDTO(MessageType.TestStarted);\n            dto.testName = test.FullName;\n            dto.testTimeout = test.TestComponent.timeout;\n            return dto;\n        }\n\n        public static ResultDTO CreateTestFinished(TestResult test)\n        {\n            var dto = new ResultDTO(MessageType.TestFinished);\n            dto.testName = test.FullName;\n            dto.testResult = GetSerializableTestResult(test);\n            return dto;\n        }\n\n        public static ResultDTO CreateAllScenesFinished()\n        {\n            var dto = new ResultDTO(MessageType.AllScenesFinished);\n            return dto;\n        }\n\n        private static ITestResult GetSerializableTestResult(TestResult test)\n        {\n            var str = new SerializableTestResult();\n\n            str.resultState = test.ResultState;\n            str.message = test.messages;\n            str.executed = test.Executed;\n            str.name = test.Name;\n            str.fullName = test.FullName;\n            str.id = test.id;\n            str.isSuccess = test.IsSuccess;\n            str.duration = test.duration;\n            str.stackTrace = test.stacktrace;\n            str.isIgnored = test.IsIgnored;\n\n            return str;\n        }\n    }\n\n    #region SerializableTestResult\n    [Serializable]\n    internal class SerializableTestResult : ITestResult\n    {\n        public TestResultState resultState;\n        public string message;\n        public bool executed;\n        public string name;\n        public string fullName;\n        public string id;\n        public bool isSuccess;\n        public double duration;\n        public string stackTrace;\n        public bool isIgnored;\n\n        public TestResultState ResultState\n        {\n            get { return resultState; }\n        }\n\n        public string Message\n        {\n            get { return message; }\n        }\n\n        public string Logs\n        {\n            get { return null; }\n        }\n\n        public bool Executed\n        {\n            get { return executed; }\n        }\n\n        public string Name\n        {\n            get { return name; }\n        }\n\n        public string FullName\n        {\n            get { return fullName; }\n        }\n\n        public string Id\n        {\n            get { return id; }\n        }\n\n        public bool IsSuccess\n        {\n            get { return isSuccess; }\n        }\n\n        public double Duration\n        {\n            get { return duration; }\n        }\n\n        public string StackTrace\n        {\n            get { return stackTrace; }\n        }\n        \n        public bool IsIgnored \n        {\n            get { return isIgnored; }\n        }\n    }\n    #endregion\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/ResultDTO.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 37c772b6d1ba4274aa96c83710cb27e8\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestComponent.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing UnityEngine;\nusing UnityEngine.SceneManagement;\n\n#if UNITY_EDITOR\nusing UnityEditor;\n#endif\n\nnamespace UnityTest\n{\n    public interface ITestComponent : IComparable<ITestComponent>\n    {\n        void EnableTest(bool enable);\n        bool IsTestGroup();\n        GameObject gameObject { get; }\n        string Name { get; }\n        ITestComponent GetTestGroup();\n        bool IsExceptionExpected(string exceptionType);\n        bool ShouldSucceedOnException();\n        double GetTimeout();\n        bool IsIgnored();\n        bool ShouldSucceedOnAssertions();\n        bool IsExludedOnThisPlatform();\n    }\n\n    public class TestComponent : MonoBehaviour, ITestComponent\n    {\n        public static ITestComponent NullTestComponent = new NullTestComponentImpl();\n\n        public float timeout = 5;\n        public bool ignored = false;\n        public bool succeedAfterAllAssertionsAreExecuted = false;\n        public bool expectException = false;\n        public string expectedExceptionList = \"\";\n        public bool succeedWhenExceptionIsThrown = false;\n        public IncludedPlatforms includedPlatforms = (IncludedPlatforms) ~0L;\n        public string[] platformsToIgnore = null;\n\n        public bool dynamic;\n        public string dynamicTypeName;\n\n        public bool IsExludedOnThisPlatform()\n        {\n            return platformsToIgnore != null && platformsToIgnore.Any(platform => platform == Application.platform.ToString());\n        }\n\n        static bool IsAssignableFrom(Type a, Type b)\n        {\n#if !UNITY_METRO\n            return a.IsAssignableFrom(b);\n#else\n            return false;\n#endif\n        }\n\n        public bool IsExceptionExpected(string exception)\n        {\n            exception = exception.Trim();\n            if (!expectException) \n                return false;\n            if(string.IsNullOrEmpty(expectedExceptionList.Trim())) \n                return true;\n            foreach (var expectedException in expectedExceptionList.Split(',').Select(e => e.Trim()))\n            {\n                if (exception == expectedException) \n                    return true;\n                var exceptionType = Type.GetType(exception) ?? GetTypeByName(exception);\n                var expectedExceptionType = Type.GetType(expectedException) ?? GetTypeByName(expectedException);\n                if (exceptionType != null && expectedExceptionType != null && IsAssignableFrom(expectedExceptionType, exceptionType))\n                    return true;\n            }\n            return false;\n        }\n\n        public bool ShouldSucceedOnException()\n        {\n            return succeedWhenExceptionIsThrown;\n        }\n\n        public double GetTimeout()\n        {\n            return timeout;\n        }\n\n        public bool IsIgnored()\n        {\n            return ignored;\n        }\n\n        public bool ShouldSucceedOnAssertions()\n        {\n            return succeedAfterAllAssertionsAreExecuted;\n        }\n\n        private static Type GetTypeByName(string className)\n        {\n#if !UNITY_METRO\n            return AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes()).FirstOrDefault(type => type.Name == className);\n#else\n            return null;\n#endif\n        }\n\n        public void OnValidate()\n        {\n            if (timeout < 0.01f) timeout = 0.01f;\n        }\n\n        // Legacy\n        [Flags]\n        public enum IncludedPlatforms\n        {\n            WindowsEditor       = 1 << 0,\n                OSXEditor           = 1 << 1,\n                WindowsPlayer       = 1 << 2,\n                OSXPlayer           = 1 << 3,\n                LinuxPlayer         = 1 << 4,\n                MetroPlayerX86      = 1 << 5,\n                MetroPlayerX64      = 1 << 6,\n                MetroPlayerARM      = 1 << 7,\n                WindowsWebPlayer    = 1 << 8,\n                OSXWebPlayer        = 1 << 9,\n                Android             = 1 << 10,\n// ReSharper disable once InconsistentNaming\n                IPhonePlayer        = 1 << 11,\n                TizenPlayer         = 1 << 12,\n                WP8Player           = 1 << 13,\n                BB10Player          = 1 << 14,\n                NaCl                = 1 << 15,\n                PS3                 = 1 << 16,\n                XBOX360             = 1 << 17,\n                WiiPlayer           = 1 << 18,\n                PSP2                = 1 << 19,\n                PS4                 = 1 << 20,\n                PSMPlayer           = 1 << 21,\n                XboxOne             = 1 << 22,\n        }\n\n        #region ITestComponent implementation\n\n        public void EnableTest(bool enable)\n        {\n            if (enable && dynamic)\n            {\n                Type t = Type.GetType(dynamicTypeName);\n                var s = gameObject.GetComponent(t) as MonoBehaviour;\n                if (s != null)\n                    DestroyImmediate(s);\n\n                gameObject.AddComponent(t);\n            }\n\n            if (gameObject.activeSelf != enable) gameObject.SetActive(enable);\n        }\n\n        public int CompareTo(ITestComponent obj)\n        {\n            if (obj == NullTestComponent)\n                return 1;\n            var result = gameObject.name.CompareTo(obj.gameObject.name);\n            if (result == 0)\n                result = gameObject.GetInstanceID().CompareTo(obj.gameObject.GetInstanceID());\n            return result;\n        }\n\n        public bool IsTestGroup()\n        {\n            for (int i = 0; i < gameObject.transform.childCount; i++)\n            {\n                var childTc = gameObject.transform.GetChild(i).GetComponent(typeof(TestComponent));\n                if (childTc != null)\n                    return true;\n            }\n            return false;\n        }\n\n        public string Name { get { return gameObject == null ? \"\" : gameObject.name; } }\n\n        public ITestComponent GetTestGroup()\n        {\n            var parent = gameObject.transform.parent;\n            if (parent == null)\n                return NullTestComponent;\n            return parent.GetComponent<TestComponent>();\n        }\n\n        public override bool Equals(object o)\n        {\n            if (o is TestComponent)\n                return this == (o as TestComponent);\n            return false;\n        }\n\n        public override int GetHashCode()\n        {\n            return base.GetHashCode();\n        }\n\n        public static bool operator ==(TestComponent a, TestComponent b)\n        {\n            if (ReferenceEquals(a, b))\n                return true;\n            if (((object)a == null) || ((object)b == null))\n                return false;\n            if (a.dynamic && b.dynamic)\n                return a.dynamicTypeName == b.dynamicTypeName;\n            if (a.dynamic || b.dynamic)\n                return false;\n            return a.gameObject == b.gameObject;\n        }\n\n        public static bool operator !=(TestComponent a, TestComponent b)\n        {\n            return !(a == b);\n        }\n\n        #endregion\n\n        #region Static helpers\n\n        public static TestComponent CreateDynamicTest(Type type)\n        {\n            var go = CreateTest(type.Name);\n            go.hideFlags |= HideFlags.DontSave;\n            go.SetActive(false);\n\n            var tc = go.GetComponent<TestComponent>();\n            tc.dynamic = true;\n            tc.dynamicTypeName = type.AssemblyQualifiedName;\n\n#if !UNITY_METRO\n            foreach (var typeAttribute in type.GetCustomAttributes(false))\n            {\n                if (typeAttribute is IntegrationTest.TimeoutAttribute)\n                    tc.timeout = (typeAttribute as IntegrationTest.TimeoutAttribute).timeout;\n                else if (typeAttribute is IntegrationTest.IgnoreAttribute)\n                    tc.ignored = true;\n                else if (typeAttribute is IntegrationTest.SucceedWithAssertions)\n                    tc.succeedAfterAllAssertionsAreExecuted = true;\n                else if (typeAttribute is IntegrationTest.ExcludePlatformAttribute)\n                    tc.platformsToIgnore = (typeAttribute as IntegrationTest.ExcludePlatformAttribute).platformsToExclude;\n                else if (typeAttribute is IntegrationTest.ExpectExceptions)\n                {\n                    var attribute = (typeAttribute as IntegrationTest.ExpectExceptions);\n                    tc.expectException = true;\n                    tc.expectedExceptionList = string.Join(\",\", attribute.exceptionTypeNames);\n                    tc.succeedWhenExceptionIsThrown = attribute.succeedOnException;\n                }\n            }\n            go.AddComponent(type);\n#endif  // if !UNITY_METRO\n            return tc;\n        }\n\n        public static GameObject CreateTest()\n        {\n            return CreateTest(\"New Test\");\n        }\n\n        private static GameObject CreateTest(string name)\n        {\n            var go = new GameObject(name);\n            go.AddComponent<TestComponent>();\n#if UNITY_EDITOR\n            Undo.RegisterCreatedObjectUndo(go, \"Created test\");\n#endif\n            return go;\n        }\n\n        public static List<TestComponent> FindAllTestsOnScene()\n        {\n            var tests = Resources.FindObjectsOfTypeAll (typeof(TestComponent)).Cast<TestComponent> ();\n#if UNITY_EDITOR\n            tests = tests.Where( t => {var p = PrefabUtility.GetPrefabType(t); return p != PrefabType.Prefab && p != PrefabType.ModelPrefab;} );\n\n#endif\n            return tests.ToList ();\n        }\n\n        public static List<TestComponent> FindAllTopTestsOnScene()\n        {\n            return FindAllTestsOnScene().Where(component => component.gameObject.transform.parent == null).ToList();\n        }\n\n        public static List<TestComponent> FindAllDynamicTestsOnScene()\n        {\n            return FindAllTestsOnScene().Where(t => t.dynamic).ToList();\n        }\n\n        public static void DestroyAllDynamicTests()\n        {\n            foreach (var dynamicTestComponent in FindAllDynamicTestsOnScene())\n                DestroyImmediate(dynamicTestComponent.gameObject);\n        }\n\n        public static void DisableAllTests()\n        {\n            foreach (var t in FindAllTestsOnScene()) t.EnableTest(false);\n        }\n\n        public static bool AnyTestsOnScene()\n        {\n            return FindAllTestsOnScene().Any();\n        }\n\n        public static bool AnyDynamicTestForCurrentScene()\n        {\n#if UNITY_EDITOR\n            return TestComponent.GetTypesWithHelpAttribute(SceneManager.GetActiveScene().name).Any();\n#else\n            return TestComponent.GetTypesWithHelpAttribute(SceneManager.GetActiveScene().name).Any();\n#endif\n        }\n\n        #endregion\n\n        private sealed class NullTestComponentImpl : ITestComponent\n        {\n            public int CompareTo(ITestComponent other)\n            {\n                if (other == this) return 0;\n                return -1;\n            }\n\n            public void EnableTest(bool enable)\n            {\n            }\n\n            public bool IsTestGroup()\n            {\n                throw new NotImplementedException();\n            }\n\n            public GameObject gameObject { get; private set; }\n            public string Name { get { return \"\"; } }\n\n            public ITestComponent GetTestGroup()\n            {\n                return null;\n            }\n\n            public bool IsExceptionExpected(string exceptionType)\n            {\n                throw new NotImplementedException();\n            }\n\n            public bool ShouldSucceedOnException()\n            {\n                throw new NotImplementedException();\n            }\n\n            public double GetTimeout()\n            {\n                throw new NotImplementedException();\n            }\n\n            public bool IsIgnored()\n            {\n                throw new NotImplementedException();\n            }\n\n            public bool ShouldSucceedOnAssertions()\n            {\n                throw new NotImplementedException();\n            }\n\n            public bool IsExludedOnThisPlatform()\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public static IEnumerable<Type> GetTypesWithHelpAttribute(string sceneName)\n        {\n#if !UNITY_METRO\n            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())\n            {\n                Type[] types = null;\n\n                try\n                {\n                    types = assembly.GetTypes();\n                }\n                catch (ReflectionTypeLoadException ex)\n                {\n                    Debug.LogError(\"Failed to load types from: \" + assembly.FullName);\n                    foreach (Exception loadEx in ex.LoaderExceptions)\n                        Debug.LogException(loadEx);\n                }\n\n                if (types == null)\n                    continue;\n\n                foreach (Type type in types)\n                {\n                    var attributes = type.GetCustomAttributes(typeof(IntegrationTest.DynamicTestAttribute), true);\n                    if (attributes.Length == 1)\n                    {\n                        var a = attributes.Single() as IntegrationTest.DynamicTestAttribute;\n                        if (a.IncludeOnScene(sceneName)) yield return type;\n                    }\n                }\n            }\n#else   // if !UNITY_METRO\n            yield break;\n#endif  // if !UNITY_METRO\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestComponent.cs.meta",
    "content": "fileFormatVersion: 2\nguid: b1dba0b27b0864740a8720e920aa88c0\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestResult.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    [Serializable]\n    public class TestResult : ITestResult, IComparable<TestResult>\n    {\n        private readonly GameObject m_Go;\n        private string m_Name;\n        public ResultType resultType = ResultType.NotRun;\n        public double duration;\n        public string messages;\n        public string stacktrace;\n        public string id;\n        public bool dynamicTest;\n\n        public TestComponent TestComponent;\n\n        public GameObject GameObject\n        {\n            get { return m_Go; }\n        }\n\n        public TestResult(TestComponent testComponent)\n        {\n            TestComponent = testComponent;\n            m_Go = testComponent.gameObject;\n            id = testComponent.gameObject.GetInstanceID().ToString();\n            dynamicTest = testComponent.dynamic;\n\n            if (m_Go != null) m_Name = m_Go.name;\n\n            if (dynamicTest)\n                id = testComponent.dynamicTypeName;\n        }\n\n        public void Update(TestResult oldResult)\n        {\n            resultType = oldResult.resultType;\n            duration = oldResult.duration;\n            messages = oldResult.messages;\n            stacktrace = oldResult.stacktrace;\n        }\n\n        public enum ResultType\n        {\n            Success,\n            Failed,\n            Timeout,\n            NotRun,\n            FailedException,\n            Ignored\n        }\n\n        public void Reset()\n        {\n            resultType = ResultType.NotRun;\n            duration = 0f;\n            messages = \"\";\n            stacktrace = \"\";\n        }\n\n        #region ITestResult implementation\n        public TestResultState ResultState {\n            get\n            {\n                switch (resultType)\n                {\n                    case ResultType.Success: return TestResultState.Success;\n                    case ResultType.Failed: return TestResultState.Failure;\n                    case ResultType.FailedException: return TestResultState.Error;\n                    case ResultType.Ignored: return TestResultState.Ignored;\n                    case ResultType.NotRun: return TestResultState.Skipped;\n                    case ResultType.Timeout: return TestResultState.Cancelled;\n                    default: throw new Exception();\n                }\n            }\n        }\n        public string Message { get { return messages; } }\n        public string Logs { get { return null; } }\n        public bool Executed { get { return resultType != ResultType.NotRun; } }\n        public string Name { get { if (m_Go != null) m_Name = m_Go.name; return m_Name; } }\n        public string Id { get { return id; } }\n        public bool IsSuccess { get { return resultType == ResultType.Success; } }\n        public bool IsTimeout { get { return resultType == ResultType.Timeout; } }\n        public double Duration { get { return duration; } }\n        public string StackTrace { get { return stacktrace; } }\n        public string FullName {\n            get\n            {\n                var fullName = Name;\n                if (m_Go != null)\n                {\n                    var tempGo = m_Go.transform.parent;\n                    while (tempGo != null)\n                    {\n                        fullName = tempGo.name + \".\" + fullName;\n                        tempGo = tempGo.transform.parent;\n                    }\n                }\n                return fullName;\n            }\n        }\n\n        public bool IsIgnored { get { return resultType == ResultType.Ignored; } }\n        public bool IsFailure\n        {\n            get\n            {\n                return resultType == ResultType.Failed\n                       || resultType == ResultType.FailedException\n                       || resultType == ResultType.Timeout;\n            }\n        }\n        #endregion\n\n        #region IComparable, GetHashCode and Equals implementation\n        public override int GetHashCode()\n        {\n            return id.GetHashCode();\n        }\n\n        public int CompareTo(TestResult other)\n        {\n            var result = Name.CompareTo(other.Name);\n            if (result == 0)\n                result = m_Go.GetInstanceID().CompareTo(other.m_Go.GetInstanceID());\n            return result;\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (obj is TestResult)\n                return GetHashCode() == obj.GetHashCode();\n            return base.Equals(obj);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestResult.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 68740a702763aaa4594e8319a05ae0d3\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestResultRenderer.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing UnityEngine;\n\npublic class TestResultRenderer\n{\n    private static class Styles\n    {\n        public static readonly GUIStyle SucceedLabelStyle;\n        public static readonly GUIStyle FailedLabelStyle;\n        public static readonly GUIStyle FailedMessagesStyle;\n\n        static Styles()\n        {\n            SucceedLabelStyle = new GUIStyle(\"label\");\n            SucceedLabelStyle.normal.textColor = Color.green;\n            SucceedLabelStyle.fontSize = 48;\n\n            FailedLabelStyle = new GUIStyle(\"label\");\n            FailedLabelStyle.normal.textColor = Color.red;\n            FailedLabelStyle.fontSize = 32;\n\n            FailedMessagesStyle = new GUIStyle(\"label\");\n            FailedMessagesStyle.wordWrap = false;\n            FailedMessagesStyle.richText = true;\n        }\n    }\n    private readonly Dictionary<string, List<ITestResult>> m_TestCollection = new Dictionary<string, List<ITestResult>>();\n\n    private bool m_ShowResults;\n    Vector2 m_ScrollPosition;\n    private int m_FailureCount;\n\n    public void ShowResults()\n    {\n        m_ShowResults = true;\n        Cursor.visible = true;\n    }\n\n    public void AddResults(string sceneName, ITestResult result)\n    {\n        if (!m_TestCollection.ContainsKey(sceneName))\n            m_TestCollection.Add(sceneName, new List<ITestResult>());\n        m_TestCollection[sceneName].Add(result);\n        if (result.Executed && !result.IsSuccess)\n            m_FailureCount++;\n    }\n\n    public void Draw()\n    {\n        if (!m_ShowResults) return;\n        if (m_TestCollection.Count == 0)\n        {\n            GUILayout.Label(\"All test succeeded\", Styles.SucceedLabelStyle, GUILayout.Width(600));\n        }\n        else\n        {\n            int count = m_TestCollection.Sum (testGroup => testGroup.Value.Count);\n            GUILayout.Label(count + \" tests failed!\", Styles.FailedLabelStyle);\n\n            m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition, GUILayout.ExpandWidth(true));\n            var text = \"\";\n            foreach (var testGroup in m_TestCollection)\n            {\n                text += \"<b><size=18>\" + testGroup.Key + \"</size></b>\\n\";\n                text += string.Join(\"\\n\", testGroup.Value\n                                    .Where(result => !result.IsSuccess)\n                                    .Select(result => result.Name + \" \" + result.ResultState + \"\\n\" + result.Message)\n                                    .ToArray());\n            }\n            GUILayout.TextArea(text, Styles.FailedMessagesStyle);\n            GUILayout.EndScrollView();\n        }\n        if (GUILayout.Button(\"Close\"))\n            Application.Quit();\n    }\n\n    public int FailureCount()\n    {\n        return m_FailureCount;\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestResultRenderer.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 7ae9d3b4b57cae343b7ff360f9deb628\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestRunner.cs",
    "content": "// #define IMITATE_BATCH_MODE //uncomment if you want to imitate batch mode behaviour in non-batch mode mode run\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing UnityEngine;\nusing UnityTest.IntegrationTestRunner;\nusing System.IO;\nusing UnityEngine.SceneManagement;\n\nnamespace UnityTest\n{\n    [Serializable]\n    public class TestRunner : MonoBehaviour\n    {\n        static private int TestSceneNumber = 0;\n        static private readonly TestResultRenderer k_ResultRenderer = new TestResultRenderer();\n\n        public TestComponent currentTest;\n        private List<TestResult> m_ResultList = new List<TestResult>();\n        private List<TestComponent> m_TestComponents;\n\n        public bool isInitializedByRunner\n        {\n            get\n            {\n#if !IMITATE_BATCH_MODE\n                if (Application.isEditor && !IsBatchMode())\n                    return true;\n#endif\n                return false;\n            }\n        }\n\n        private double m_StartTime;\n        private bool m_ReadyToRun;\n\n        private string m_TestMessages;\n        private string m_Stacktrace;\n        private TestState m_TestState = TestState.Running;\n\n        private TestRunnerConfigurator m_Configurator;\n\n        public TestRunnerCallbackList TestRunnerCallback = new TestRunnerCallbackList();\n        private IntegrationTestsProvider m_TestsProvider;\n\n        private const string k_Prefix = \"IntegrationTest\";\n        private const string k_StartedMessage = k_Prefix + \" Started\";\n        private const string k_FinishedMessage = k_Prefix + \" Finished\";\n        private const string k_TimeoutMessage = k_Prefix + \" Timeout\";\n        private const string k_FailedMessage = k_Prefix + \" Failed\";\n        private const string k_FailedExceptionMessage = k_Prefix + \" Failed with exception\";\n        private const string k_IgnoredMessage = k_Prefix + \" Ignored\";\n        private const string k_InterruptedMessage = k_Prefix + \" Run interrupted\";\n\n\n        public void Awake()\n        {\n            m_Configurator = new TestRunnerConfigurator();\n            if (isInitializedByRunner) return;\n            TestComponent.DisableAllTests();\n        }\n\n        public void Start()\n        {\n            if (isInitializedByRunner) return;\n\n            if (m_Configurator.sendResultsOverNetwork)\n            {\n                var nrs = m_Configurator.ResolveNetworkConnection();\n                if (nrs != null)\n                    TestRunnerCallback.Add(nrs);\n            }\n\n            TestComponent.DestroyAllDynamicTests();\n            var dynamicTestTypes = TestComponent.GetTypesWithHelpAttribute(SceneManager.GetActiveScene().name);\n            foreach (var dynamicTestType in dynamicTestTypes)\n                TestComponent.CreateDynamicTest(dynamicTestType);\n\n            var tests = TestComponent.FindAllTestsOnScene();\n\n            InitRunner(tests, dynamicTestTypes.Select(type => type.AssemblyQualifiedName).ToList());\n        }\n\n        public void InitRunner(List<TestComponent> tests, List<string> dynamicTestsToRun)\n        {\n            Application.logMessageReceived += LogHandler;\n\n            // Init dynamic tests\n            foreach (var typeName in dynamicTestsToRun)\n            {\n                var t = Type.GetType(typeName);\n                if (t == null) continue;\n                var scriptComponents = Resources.FindObjectsOfTypeAll(t) as MonoBehaviour[];\n                if (scriptComponents.Length == 0)\n                {\n                    Debug.LogWarning(t + \" not found. Skipping.\");\n                    continue;\n                }\n                if (scriptComponents.Length > 1) Debug.LogWarning(\"Multiple GameObjects refer to \" + typeName);\n                tests.Add(scriptComponents.First().GetComponent<TestComponent>());\n            }\n            // create test structure\n            m_TestComponents = ParseListForGroups(tests).ToList();\n            // create results for tests\n            m_ResultList = m_TestComponents.Select(component => new TestResult(component)).ToList();\n            // init test provider\n            m_TestsProvider = new IntegrationTestsProvider(m_ResultList.Select(result => result.TestComponent as ITestComponent));\n            m_ReadyToRun = true;\n        }\n\n        private static IEnumerable<TestComponent> ParseListForGroups(IEnumerable<TestComponent> tests)\n        {\n            var results = new HashSet<TestComponent>();\n            foreach (var testResult in tests)\n            {\n                if (testResult.IsTestGroup())\n                {\n                    var childrenTestResult = testResult.gameObject.GetComponentsInChildren(typeof(TestComponent), true)\n                                             .Where(t => t != testResult)\n                                             .Cast<TestComponent>()\n                                             .ToArray();\n                    foreach (var result in childrenTestResult)\n                    {\n                        if (!result.IsTestGroup())\n                            results.Add(result);\n                    }\n                    continue;\n                }\n                results.Add(testResult);\n            }\n            return results;\n        }\n\n        public void Update()\n        {\n            if (m_ReadyToRun  && Time.frameCount > 1)\n            {\n                m_ReadyToRun = false;\n                StartCoroutine(\"StateMachine\");\n            }\n        }\n\n        public void OnDestroy()\n        {\n            if (currentTest != null)\n            {\n                var testResult = m_ResultList.Single(result => result.TestComponent == currentTest);\n                testResult.messages += \"Test run interrupted (crash?)\";\n                LogMessage(k_InterruptedMessage);\n                FinishTest(TestResult.ResultType.Failed);\n            }\n            if (currentTest != null || (m_TestsProvider != null && m_TestsProvider.AnyTestsLeft()))\n            {\n                var remainingTests = m_TestsProvider.GetRemainingTests();\n                TestRunnerCallback.TestRunInterrupted(remainingTests.ToList());\n            }\n            Application.logMessageReceived -= LogHandler;\n        }\n\n        private void LogHandler(string condition, string stacktrace, LogType type)\n        {\n            if (!condition.StartsWith(k_StartedMessage) && !condition.StartsWith(k_FinishedMessage))\n            {\n                var msg = condition;\n                if (msg.StartsWith(k_Prefix)) msg = msg.Substring(k_Prefix.Length + 1);\n                if (currentTest != null && msg.EndsWith(\"(\" + currentTest.name + ')')) msg = msg.Substring(0, msg.LastIndexOf('('));\n                m_TestMessages += msg + \"\\n\";\n            }\n            switch (type)\n            {\n                case LogType.Exception:\n                {\n                    var exceptionType = condition.Substring(0, condition.IndexOf(':'));\n                    if (currentTest != null && currentTest.IsExceptionExpected(exceptionType))\n                    {\n                        m_TestMessages += exceptionType + \" was expected\\n\";\n                        if (currentTest.ShouldSucceedOnException())\n                        {\n                            m_TestState = TestState.Success;\n                        }\n                    }\n                    else\n                    {\n                        m_TestState = TestState.Exception;\n                        m_Stacktrace = stacktrace;\n                    }\n                }\n                    break;\n                case LogType.Assert:\n                case LogType.Error:\n                    m_TestState = TestState.Failure;\n                    m_Stacktrace = stacktrace;\n                    break;\n                case LogType.Log:\n                    if (m_TestState ==  TestState.Running && condition.StartsWith(IntegrationTest.passMessage))\n                    {\n                        m_TestState = TestState.Success;\n                    }\n                    if (condition.StartsWith(IntegrationTest.failMessage))\n                    {\n                        m_TestState = TestState.Failure;\n                    }\n                    break;\n            }\n        }\n\n        public IEnumerator StateMachine()\n        {\n            TestRunnerCallback.RunStarted(Application.platform.ToString(), m_TestComponents);\n            while (true)\n            {\n                if (!m_TestsProvider.AnyTestsLeft() && currentTest == null)\n                {\n                    FinishTestRun();\n                    yield break;\n                }\n                if (currentTest == null)\n                {\n                    StartNewTest();\n                }\n                if (currentTest != null)\n                {\n                    if (m_TestState == TestState.Running)\n                    {\n                        if(currentTest.ShouldSucceedOnAssertions())\n                        {\n                            var assertionsToCheck = currentTest.gameObject.GetComponentsInChildren<AssertionComponent>().Where(a => a.enabled).ToArray();\n                            if (assertionsToCheck.Any () && assertionsToCheck.All(a => a.checksPerformed > 0))\n                            {\n                                IntegrationTest.Pass(currentTest.gameObject);\n                                m_TestState = TestState.Success;\n                            }\n                        }\n                        if (currentTest != null && Time.time > m_StartTime + currentTest.GetTimeout())\n                        {\n                            m_TestState = TestState.Timeout;\n                        }\n                    }\n\n                    switch (m_TestState)\n                    {\n                        case TestState.Success:\n                            LogMessage(k_FinishedMessage);\n                            FinishTest(TestResult.ResultType.Success);\n                            break;\n                        case TestState.Failure:\n                            LogMessage(k_FailedMessage);\n                            FinishTest(TestResult.ResultType.Failed);\n                            break;\n                        case TestState.Exception:\n                            LogMessage(k_FailedExceptionMessage);\n                            FinishTest(TestResult.ResultType.FailedException);\n                            break;\n                        case TestState.Timeout:\n                            LogMessage(k_TimeoutMessage);\n                            FinishTest(TestResult.ResultType.Timeout);\n                            break;\n                        case TestState.Ignored:\n                            LogMessage(k_IgnoredMessage);\n                            FinishTest(TestResult.ResultType.Ignored);\n                            break;\n                    }\n                }\n                yield return null;\n            }\n        }\n\n        private void LogMessage(string message)\n        {\n            if (currentTest != null)\n                Debug.Log(message + \" (\" + currentTest.Name + \")\", currentTest.gameObject);\n            else\n                Debug.Log(message);\n        }\n\n        private void FinishTestRun()\n        {\n            PrintResultToLog();\n            TestRunnerCallback.RunFinished(m_ResultList);\n            LoadNextLevelOrQuit();\n        }\n\n        private void PrintResultToLog()\n        {\n            var resultString = \"\";\n            resultString += \"Passed: \" + m_ResultList.Count(t => t.IsSuccess);\n            if (m_ResultList.Any(result => result.IsFailure))\n            {\n                resultString += \" Failed: \" + m_ResultList.Count(t => t.IsFailure);\n                Debug.Log(\"Failed tests: \" + string.Join(\", \", m_ResultList.Where(t => t.IsFailure).Select(result => result.Name).ToArray()));\n            }\n            if (m_ResultList.Any(result => result.IsIgnored))\n            {\n                resultString += \" Ignored: \" + m_ResultList.Count(t => t.IsIgnored);\n                Debug.Log(\"Ignored tests: \" + string.Join(\", \",\n                                                          m_ResultList.Where(t => t.IsIgnored).Select(result => result.Name).ToArray()));\n            }\n            Debug.Log(resultString);\n        }\n\n        private void LoadNextLevelOrQuit()\n        {\n            if (isInitializedByRunner) return;\n\n\n            TestSceneNumber += 1;\n            string testScene = m_Configurator.GetIntegrationTestScenes(TestSceneNumber);\n\n            if (testScene != null)\n                SceneManager.LoadScene(Path.GetFileNameWithoutExtension(testScene));\n            else\n            {\n                TestRunnerCallback.AllScenesFinished();\n                k_ResultRenderer.ShowResults();\n\n#if UNITY_EDITOR\n                var prevScenes = m_Configurator.GetPreviousScenesToRestore();\n                if(prevScenes!=null)\n                {\n                    UnityEditor.EditorBuildSettings.scenes = prevScenes;\n                }\n#endif\n\n                if (m_Configurator.isBatchRun && m_Configurator.sendResultsOverNetwork)\n                    Application.Quit();\n            }\n        }\n\n        public void OnGUI()\n        {\n            k_ResultRenderer.Draw();\n        }\n\n        private void StartNewTest()\n        {\n            m_TestMessages = \"\";\n            m_Stacktrace = \"\";\n            m_TestState = TestState.Running;\n\n            m_StartTime = Time.time;\n            currentTest = m_TestsProvider.GetNextTest() as TestComponent;\n\n            var testResult = m_ResultList.Single(result => result.TestComponent == currentTest);\n\n            if (currentTest != null && currentTest.IsExludedOnThisPlatform())\n            {\n                m_TestState = TestState.Ignored;\n                Debug.Log(currentTest.gameObject.name + \" is excluded on this platform\");\n            }\n\n            // don't ignore test if user initiated it from the runner and it's the only test that is being run\n            if (currentTest != null\n                && (currentTest.IsIgnored()\n                    && !(isInitializedByRunner && m_ResultList.Count == 1)))\n                m_TestState = TestState.Ignored;\n\n            LogMessage(k_StartedMessage);\n            TestRunnerCallback.TestStarted(testResult);\n        }\n\n        private void FinishTest(TestResult.ResultType result)\n        {\n            m_TestsProvider.FinishTest(currentTest);\n            var testResult = m_ResultList.Single(t => t.GameObject == currentTest.gameObject);\n            testResult.resultType = result;\n            testResult.duration = Time.time - m_StartTime;\n            testResult.messages = m_TestMessages;\n            testResult.stacktrace = m_Stacktrace;\n            TestRunnerCallback.TestFinished(testResult);\n            currentTest = null;\n            if (!testResult.IsSuccess\n                && testResult.Executed\n                && !testResult.IsIgnored) k_ResultRenderer.AddResults(SceneManager.GetActiveScene().name, testResult);\n        }\n\n        #region Test Runner Helpers\n\n        public static TestRunner GetTestRunner()\n        {\n            TestRunner testRunnerComponent = null;\n            var testRunnerComponents = Resources.FindObjectsOfTypeAll(typeof(TestRunner));\n\n            if (testRunnerComponents.Count() > 1)\n                foreach (var t in testRunnerComponents) DestroyImmediate(((TestRunner)t).gameObject);\n            else if (!testRunnerComponents.Any())\n                testRunnerComponent = Create().GetComponent<TestRunner>();\n            else\n                testRunnerComponent = testRunnerComponents.Single() as TestRunner;\n\n            return testRunnerComponent;\n        }\n\n        private static GameObject Create()\n        {\n            var runner = new GameObject(\"TestRunner\");\n            runner.AddComponent<TestRunner>();\n            Debug.Log(\"Created Test Runner\");\n            return runner;\n        }\n\n        private static bool IsBatchMode()\n        {\n#if !UNITY_METRO\n            const string internalEditorUtilityClassName = \"UnityEditorInternal.InternalEditorUtility, UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null\";\n\n            var t = Type.GetType(internalEditorUtilityClassName, false);\n            if (t == null) return false;\n\n            const string inBatchModeProperty = \"inBatchMode\";\n            var prop = t.GetProperty(inBatchModeProperty);\n            return (bool)prop.GetValue(null, null);\n#else   // if !UNITY_METRO\n            return false;\n#endif  // if !UNITY_METRO\n        }\n\n        #endregion\n\n        enum TestState\n        {\n            Running,\n            Success,\n            Failure,\n            Exception,\n            Timeout,\n            Ignored\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestRunner.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 5c3afc1c624179749bcdecf7b0224902\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestRunnerCallbackList.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace UnityTest.IntegrationTestRunner\n{\n    public class TestRunnerCallbackList : ITestRunnerCallback\n    {\n        private readonly List<ITestRunnerCallback> m_CallbackList = new List<ITestRunnerCallback>();\n\n        public void Add(ITestRunnerCallback callback)\n        {\n            m_CallbackList.Add(callback);\n        }\n\n        public void Remove(ITestRunnerCallback callback)\n        {\n            m_CallbackList.Remove(callback);\n        }\n\n        public void RunStarted(string platform, List<TestComponent> testsToRun)\n        {\n            foreach (var unitTestRunnerCallback in m_CallbackList)\n            {\n                unitTestRunnerCallback.RunStarted(platform, testsToRun);\n            }\n        }\n\n        public void RunFinished(List<TestResult> testResults)\n        {\n            foreach (var unitTestRunnerCallback in m_CallbackList)\n            {\n                unitTestRunnerCallback.RunFinished(testResults);\n            }\n        }\n\n        public void AllScenesFinished()\n        {\n            foreach (var unitTestRunnerCallback in m_CallbackList)\n            {\n                unitTestRunnerCallback.AllScenesFinished();\n            }\n        }\n\n        public void TestStarted(TestResult test)\n        {\n            foreach (var unitTestRunnerCallback in m_CallbackList)\n            {\n                unitTestRunnerCallback.TestStarted(test);\n            }\n        }\n\n        public void TestFinished(TestResult test)\n        {\n            foreach (var unitTestRunnerCallback in m_CallbackList)\n            {\n                unitTestRunnerCallback.TestFinished(test);\n            }\n        }\n\n        public void TestRunInterrupted(List<ITestComponent> testsNotRun)\n        {\n            foreach (var unitTestRunnerCallback in m_CallbackList)\n            {\n                unitTestRunnerCallback.TestRunInterrupted(testsNotRun);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestRunnerCallbackList.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 7729da83f7c08d244b5788c870a93780\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestRunnerConfigurator.cs",
    "content": "#if !UNITY_METRO && !UNITY_WEBPLAYER && (UNITY_PRO_LICENSE || !(UNITY_ANDROID || UNITY_IPHONE))\n#define UTT_SOCKETS_SUPPORTED\n#endif\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing UnityEngine;\nusing UnityTest.IntegrationTestRunner;\n#if UTT_SOCKETS_SUPPORTED\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Net.NetworkInformation;\n#endif\n\n#if UNITY_EDITOR\nusing UnityEditorInternal;\n#endif\n\nnamespace UnityTest\n{\n    public class TestRunnerConfigurator\n    {\n        public static string integrationTestsNetwork = \"networkconfig.txt\";\n        public static string batchRunFileMarker = \"batchrun.txt\";\n        public static string testScenesToRun = \"testscenes.txt\";\n        public static string previousScenes = \"previousScenes.txt\";\n\n        public bool isBatchRun { get; private set; }\n\n        public bool sendResultsOverNetwork { get; private set; }\n\n#if UTT_SOCKETS_SUPPORTED\n        private readonly List<IPEndPoint> m_IPEndPointList = new List<IPEndPoint>();\n#endif\n\n        public TestRunnerConfigurator()\n        {\n            CheckForBatchMode();\n            CheckForSendingResultsOverNetwork();\n        }\n\n#if UNITY_EDITOR\n        public UnityEditor.EditorBuildSettingsScene[] GetPreviousScenesToRestore()\n        {\n            string text = null;\n            if (Application.isEditor)\n            {\n                text = GetTextFromTempFile(previousScenes);\n            }\n                \n            if(text != null)\n            {\n                var serializer = new System.Xml.Serialization.XmlSerializer(typeof(UnityEditor.EditorBuildSettingsScene[]));\n                using(var textReader = new StringReader(text))\n                {\n                    try \n                    {\n                        return (UnityEditor.EditorBuildSettingsScene[] )serializer.Deserialize(textReader);\n                    }\n                    catch (System.Xml.XmlException)\n                    {\n                        return null;\n                    }\n                }\n            }\n                \n            return null;\n        }\n#endif\n\n        public string GetIntegrationTestScenes(int testSceneNum)\n        {\n            string text;\n            if (Application.isEditor)\n                text = GetTextFromTempFile(testScenesToRun);\n            else\n                text = GetTextFromTextAsset(testScenesToRun);\n\n            List<string> sceneList = new List<string>();\n            foreach (var line in text.Split(new[] {'\\n'}, StringSplitOptions.RemoveEmptyEntries))\n            {\n                sceneList.Add(line.ToString());\n            }\n\n            if (testSceneNum < sceneList.Count)\n                return sceneList.ElementAt(testSceneNum);\n            else\n                return null;\n        }\n\n        private void CheckForSendingResultsOverNetwork()\n        {\n#if UTT_SOCKETS_SUPPORTED\n            string text;\n            if (Application.isEditor)\n                text = GetTextFromTempFile(integrationTestsNetwork);\n            else\n                text = GetTextFromTextAsset(integrationTestsNetwork);\n\n            if (text == null) return;\n\n            sendResultsOverNetwork = true;\n\n            m_IPEndPointList.Clear();\n\n            foreach (var line in text.Split(new[] {'\\n'}, StringSplitOptions.RemoveEmptyEntries))\n            {\n                var idx = line.IndexOf(':');\n                if (idx == -1) throw new Exception(line);\n                var ip = line.Substring(0, idx);\n                var port = line.Substring(idx + 1);\n                m_IPEndPointList.Add(new IPEndPoint(IPAddress.Parse(ip), Int32.Parse(port)));\n            }\n#endif  // if UTT_SOCKETS_SUPPORTED\n        }\n\n        private static string GetTextFromTextAsset(string fileName)\n        {\n            var nameWithoutExtension = fileName.Substring(0, fileName.LastIndexOf('.'));\n            var resultpathFile = Resources.Load(nameWithoutExtension) as TextAsset;\n            return resultpathFile != null ? resultpathFile.text : null;\n        }\n\n        private static string GetTextFromTempFile(string fileName)\n        {\n            string text = null;\n            try\n            {\n#if UNITY_EDITOR && !UNITY_WEBPLAYER\n                text = File.ReadAllText(Path.Combine(\"Temp\", fileName));\n#endif\n            }\n            catch\n            {\n                return null;\n            }\n            return text;\n        }\n\n        private void CheckForBatchMode()\n        {\n#if IMITATE_BATCH_MODE\n            isBatchRun = true;\n#elif UNITY_EDITOR\n            if (Application.isEditor && InternalEditorUtility.inBatchMode)\n                isBatchRun = true;\n#else\n            if (GetTextFromTextAsset(batchRunFileMarker) != null) isBatchRun = true;\n#endif\n        }\n\n        public static List<string> GetAvailableNetworkIPs()\n        {\n#if UTT_SOCKETS_SUPPORTED\n            if (!NetworkInterface.GetIsNetworkAvailable()) \n                return new List<String>{IPAddress.Loopback.ToString()};\n\n            var ipList = new List<UnicastIPAddressInformation>();\n            var allIpsList = new List<UnicastIPAddressInformation>();\n\n            foreach (var netInterface in NetworkInterface.GetAllNetworkInterfaces())\n            {\n                if (netInterface.NetworkInterfaceType != NetworkInterfaceType.Wireless80211 &&\n                    netInterface.NetworkInterfaceType != NetworkInterfaceType.Ethernet)\n                    continue;\n\n                var ipAdresses = netInterface.GetIPProperties().UnicastAddresses\n                    .Where(a => a.Address.AddressFamily == AddressFamily.InterNetwork);\n                allIpsList.AddRange(ipAdresses);\n\n                if (netInterface.OperationalStatus != OperationalStatus.Up) continue;\n\n                ipList.AddRange(ipAdresses);\n            }\n\n            //On Mac 10.10 all interfaces return OperationalStatus.Unknown, thus this workaround\n            if(!ipList.Any()) return allIpsList.Select(i => i.Address.ToString()).ToList();\n\n            // sort ip list by their masks to predict which ip belongs to lan network\n            ipList.Sort((ip1, ip2) =>\n                        {\n                            var mask1 = BitConverter.ToInt32(ip1.IPv4Mask.GetAddressBytes().Reverse().ToArray(), 0);\n                            var mask2 = BitConverter.ToInt32(ip2.IPv4Mask.GetAddressBytes().Reverse().ToArray(), 0);\n                            return mask2.CompareTo(mask1);\n                        });\n            if (ipList.Count == 0)\n                return new List<String> { IPAddress.Loopback.ToString() };\n            return ipList.Select(i => i.Address.ToString()).ToList();\n#else\n            return new List<string>();\n#endif  // if UTT_SOCKETS_SUPPORTED\n        }\n\n        public ITestRunnerCallback ResolveNetworkConnection()\n        {\n#if UTT_SOCKETS_SUPPORTED\n            var nrsList = m_IPEndPointList.Select(ipEndPoint => new NetworkResultSender(ipEndPoint.Address.ToString(), ipEndPoint.Port)).ToList();\n\n            var timeout = TimeSpan.FromSeconds(30);\n            DateTime startTime = DateTime.Now;\n            while ((DateTime.Now - startTime) < timeout)\n            {\n                foreach (var networkResultSender in nrsList)\n                {\n                    try\n                    {\n                        if (!networkResultSender.Ping()) continue;\n                    }\n                    catch (Exception e)\n                    {\n                        Debug.LogException(e);\n                        sendResultsOverNetwork = false;\n                        return null;\n                    }\n                    return networkResultSender;\n                }\n                Thread.Sleep(500);\n            }\n            Debug.LogError(\"Couldn't connect to the server: \" + string.Join(\", \", m_IPEndPointList.Select(ipep => ipep.Address + \":\" + ipep.Port).ToArray()));\n            sendResultsOverNetwork = false;\n#endif  // if UTT_SOCKETS_SUPPORTED\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner/TestRunnerConfigurator.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 05aae864572254e478ed2f0489cdd335\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestRunner.meta",
    "content": "fileFormatVersion: 2\nguid: da93545c3ab1aa043bcfb22281b1f66c\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/CallTesting.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace UnityTest\n{\n    public class CallTesting : MonoBehaviour\n    {\n        public enum Functions\n        {\n            CallAfterSeconds,\n            CallAfterFrames,\n            Start,\n            Update,\n            FixedUpdate,\n            LateUpdate,\n            OnDestroy,\n            OnEnable,\n            OnDisable,\n            OnControllerColliderHit,\n            OnParticleCollision,\n            OnJointBreak,\n            OnBecameInvisible,\n            OnBecameVisible,\n            OnTriggerEnter,\n            OnTriggerExit,\n            OnTriggerStay,\n            OnCollisionEnter,\n            OnCollisionExit,\n            OnCollisionStay,\n            OnTriggerEnter2D,\n            OnTriggerExit2D,\n            OnTriggerStay2D,\n            OnCollisionEnter2D,\n            OnCollisionExit2D,\n            OnCollisionStay2D,\n        }\n\n        public enum Method\n        {\n            Pass,\n            Fail\n        }\n\n        public int afterFrames = 0;\n        public float afterSeconds = 0.0f;\n        public Functions callOnMethod = Functions.Start;\n\n        public Method methodToCall;\n        private int m_StartFrame;\n        private float m_StartTime;\n\n        private void TryToCallTesting(Functions invokingMethod)\n        {\n            if (invokingMethod == callOnMethod)\n            {\n                if (methodToCall == Method.Pass)\n                    IntegrationTest.Pass(gameObject);\n                else\n                    IntegrationTest.Fail(gameObject);\n\n                afterFrames = 0;\n                afterSeconds = 0.0f;\n                m_StartTime = float.PositiveInfinity;\n                m_StartFrame = int.MinValue;\n            }\n        }\n\n        public void Start()\n        {\n            m_StartTime = Time.time;\n            m_StartFrame = afterFrames;\n            TryToCallTesting(Functions.Start);\n        }\n\n        public void Update()\n        {\n            TryToCallTesting(Functions.Update);\n            CallAfterSeconds();\n            CallAfterFrames();\n        }\n\n        private void CallAfterFrames()\n        {\n            if (afterFrames > 0 && (m_StartFrame + afterFrames) <= Time.frameCount)\n                TryToCallTesting(Functions.CallAfterFrames);\n        }\n\n        private void CallAfterSeconds()\n        {\n            if ((m_StartTime + afterSeconds) <= Time.time)\n                TryToCallTesting(Functions.CallAfterSeconds);\n        }\n\n        public void OnDisable()\n        {\n            TryToCallTesting(Functions.OnDisable);\n        }\n\n        public void OnEnable()\n        {\n            TryToCallTesting(Functions.OnEnable);\n        }\n\n        public void OnDestroy()\n        {\n            TryToCallTesting(Functions.OnDestroy);\n        }\n\n        public void FixedUpdate()\n        {\n            TryToCallTesting(Functions.FixedUpdate);\n        }\n\n        public void LateUpdate()\n        {\n            TryToCallTesting(Functions.LateUpdate);\n        }\n\n        public void OnControllerColliderHit()\n        {\n            TryToCallTesting(Functions.OnControllerColliderHit);\n        }\n\n        public void OnParticleCollision()\n        {\n            TryToCallTesting(Functions.OnParticleCollision);\n        }\n\n        public void OnJointBreak()\n        {\n            TryToCallTesting(Functions.OnJointBreak);\n        }\n\n        public void OnBecameInvisible()\n        {\n            TryToCallTesting(Functions.OnBecameInvisible);\n        }\n\n        public void OnBecameVisible()\n        {\n            TryToCallTesting(Functions.OnBecameVisible);\n        }\n\n        public void OnTriggerEnter()\n        {\n            TryToCallTesting(Functions.OnTriggerEnter);\n        }\n\n        public void OnTriggerExit()\n        {\n            TryToCallTesting(Functions.OnTriggerExit);\n        }\n\n        public void OnTriggerStay()\n        {\n            TryToCallTesting(Functions.OnTriggerStay);\n        }\n        public void OnCollisionEnter()\n        {\n            TryToCallTesting(Functions.OnCollisionEnter);\n        }\n\n        public void OnCollisionExit()\n        {\n            TryToCallTesting(Functions.OnCollisionExit);\n        }\n\n        public void OnCollisionStay()\n        {\n            TryToCallTesting(Functions.OnCollisionStay);\n        }\n\n        public void OnTriggerEnter2D()\n        {\n            TryToCallTesting(Functions.OnTriggerEnter2D);\n        }\n\n        public void OnTriggerExit2D()\n        {\n            TryToCallTesting(Functions.OnTriggerExit2D);\n        }\n\n        public void OnTriggerStay2D()\n        {\n            TryToCallTesting(Functions.OnTriggerStay2D);\n        }\n\n        public void OnCollisionEnter2D()\n        {\n            TryToCallTesting(Functions.OnCollisionEnter2D);\n        }\n\n        public void OnCollisionExit2D()\n        {\n            TryToCallTesting(Functions.OnCollisionExit2D);\n        }\n\n        public void OnCollisionStay2D()\n        {\n            TryToCallTesting(Functions.OnCollisionStay2D);\n        }\n    }\n}\n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/CallTesting.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 0d545b1288d5fc74d8e6c961fb67ab18\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/CubeCollisionFailure.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: d5fc3c3488db1e74689f1fc67c33944a\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/CubeCollisionSuccess.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: 1228dff762eab21488cfefd42792c37b\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/CubeTriggerFailure.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: 616ddafe39e02da4081e56f7f763af3c\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/CubeTriggerSuccess.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: d940e636fd44be84e9b7e8da46f700ef\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/Materials/green.mat.meta",
    "content": "fileFormatVersion: 2\nguid: 43da3275cd08d41429f56675d70c58df\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/Materials/red.mat.meta",
    "content": "fileFormatVersion: 2\nguid: 03f3b4747259a364b800508ac27e1c17\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/Materials.meta",
    "content": "fileFormatVersion: 2\nguid: 8d55f43641ba3c14eaa1156abc0edabd\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/green.png.meta",
    "content": "fileFormatVersion: 2\nguid: 928be703400f4eb48af2f94d55bf3f74\nTextureImporter:\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 1\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 1\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 0\n  autoDetectMinSpriteSize: 4\n  gridPadding: 0\n  gridOffsetX: 0\n  gridOffsetY: 0\n  gridSizeX: 64\n  gridSizeY: 64\n  spriteExtrude: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteAtlasHint: 0\n  spritePixelsToUnits: 100\n  generateSpritePolygon: 0\n  spritePolygonAlphaCutoff: 254\n  spritePolygonDetail: .5\n  alphaIsTransparency: 0\n  textureType: -1\n  buildTargetSettings: []\n  spriteSheet:\n    spriteFrames: []\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets/red.png.meta",
    "content": "fileFormatVersion: 2\nguid: 591632297e74ba34fa4c65d1265d370a\nTextureImporter:\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 1\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 1\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 0\n  autoDetectMinSpriteSize: 4\n  gridPadding: 0\n  gridOffsetX: 0\n  gridOffsetY: 0\n  gridSizeX: 64\n  gridSizeY: 64\n  spriteExtrude: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteAtlasHint: 0\n  spritePixelsToUnits: 100\n  generateSpritePolygon: 0\n  spritePolygonAlphaCutoff: 254\n  spritePolygonDetail: .5\n  alphaIsTransparency: 0\n  textureType: -1\n  buildTargetSettings: []\n  spriteSheet:\n    spriteFrames: []\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework/TestingAssets.meta",
    "content": "fileFormatVersion: 2\nguid: 1d1ccbd729921544dbd71f7e80c405b6\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/IntegrationTestsFramework.meta",
    "content": "fileFormatVersion: 2\nguid: 241054a0fe63fbb4bb51609fce9b3112\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/LICENSE.txt",
    "content": "This software is provided 'as-is', without any express or implied warranty.\n\n\nTHE UNITY TEST TOOLS CONTAIN THE FOLLOWING THIRD PARTY LIBRARIES:\nNSubstitute\tCopyright (c) 2009 Anthony Egerton (nsubstitute@delfish.com) and David Tchepak (dave@davesquared.net). All rights reserved.\nNUnit\tPortions Copyright  2002-2009 Charlie Poole or Copyright  2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright  2000-2002 Philip A. Craig \nCecil\tCopyright (c) 2008 - 2011, Jb Evain\n\n\n\nNSubstitute is open source software, licensed under the BSD License. The modifications made by Unity are available on github.\n\nCopyright (c) 2009 Anthony Egerton (nsubstitute@delfish.com) and David Tchepak (dave@davesquared.net)\nAll rights reserved.\n \nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n \n    * Redistributions of source code must retain the above copyright notice,\n    this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n    and/or other materials provided with the distribution.\n    * Neither the names of the copyright holders nor the names of \n    contributors may be used to endorse or promote products derived from this\n    software without specific prior written permission.\n \nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n[ http://www.opensource.org/licenses/bsd-license.php ]\n\n\n\nNUnit is provided 'as-is', without any express or implied warranty. The modifications made by Unity are available on github.\n\nCopyright  2002-2013 Charlie Poole\nCopyright  2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov\nCopyright  2000-2002 Philip A. Craig\n\nThis software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\n\n1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required.\n\nPortions Copyright  2002-2013 Charlie Poole or Copyright  2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright  2000-2002 Philip A. Craig\n\n2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n\n3. This notice may not be removed or altered from any source distribution.\n\n\n\nCecil is licensed under the MIT/X11.\n\nCopyright (c) 2008 - 2011, Jb Evain\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/LICENSE.txt.meta",
    "content": "fileFormatVersion: 2\nguid: 0d5b4501bf773f349ad95ec34491dc61\nTextScriptImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/UnitTesting/Editor/NSubstitute/NSubstitute.dll.meta",
    "content": "fileFormatVersion: 2\nguid: 3c5e1afc6e0d68849ae6639aff58cfc7\nMonoAssemblyImporter:\n  serializedVersion: 1\n  iconMap: {}\n  executionOrder: {}\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/UnitTesting/Editor/NSubstitute.meta",
    "content": "fileFormatVersion: 2\nguid: 92b38897656771f409e9235955975754\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/UnitTesting/Editor.meta",
    "content": "fileFormatVersion: 2\nguid: 59b47eb3fc62eb44cb73a329a1e6b6cb\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/UnitTesting.meta",
    "content": "fileFormatVersion: 2\nguid: 9a87f1db904f1e948a2385ab9961e3aa\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/changelog.txt",
    "content": "Version 1.5.9\n\n- Updated tools for Unity 5.4\n- Bugfixes\n\nVersion 1.5.8\n\n- Bugfixes\n\nVersion 1.5.7\n\n- Updated tools for Unity 5.3\n\nVersion 1.5.6\n\n- Updated Mono.Cecil.dll and Mono.Cecil.Mdb.dll libraries\n\nVersion 1.5.5\n\n- Unit Tests Runner rendering improvments\n- Platform runner can include auxiliary scenes\n- other improvments and bugfixes  \n\nVersion 1.5.4\n\n- APIs updates\n\nVersion 1.5.3\n\n- Bug fixes \n\nVersion 1.5.2\n\n- Bug fixes \n- Minor improvments\n\nVersion 1.5.1\n\n- removed redundant and not applicable options\n- fixed 5.0 related bugs\n\nVersion 1.5.0\n\n- Unity 5 related compatibility changes\n\nVersion 1.4.6\n\n- Bug fixes \n- Minor improvments\n\nVersion 1.4.5\n\n- Added \"Pause on test failure\" option for integration tests\n- bugfixes and code refactorization\n- fixed UI bug where test details were not refreshed is the label was focused\n\nVersion 1.4.4\n\n- Minimal supported Unity version is now 4.3\n- UI changes\n- code refactoring\n\nVersion 1.4.3\n\n- Remove reference to Resources.LoadAssetAtPath from runtime code\n\nVersion 1.4.2\n\n(assertion component)\n- fixed string comparer bug that prevented updating the value\n\n(unit tests)\n- unit test runner will log to stdout now\n- fixes issues with opening tests in IDEs\n\n(integration tests)\n- transform component is now visible for integration tests components\n- added better support for mac's keyboard\n- fixed 'succeed on assertion' for code generated assertion\n\n(other)\n- minor bugfixes\n- general improvments\n\nVersion 1.4.1\n\n- Fixed platform compilation issues\n- Fixed typos in labels\n- Removed docs and left a link to online docs\n- Added Unity version and target platform to result files\n- Other bugfixes\n\nVersion 1.4\n\n(integration tests)\n- Platform runner will send the results back to the editor via TCP now\n- Added naming convention for running tests in batch mode\n- It's possible to cancel the run in the editor in between the tests now\n- Added message filtering for integration tests results\n- Added check for RegisterLogCallback in case something else overrides it\n- Error messages will now fail integration tests\n- Fixed dynamic integration tests not being properly reset\n- Fixed platform runner for BlackBerry platform\n\n(assertion component)\n- fixed the component editor\n\n(common)\n- Made settings to be saved per project\n- Fixed resolving icons when there are more UnityTestTools folders in the project\n- Fixed process return code when running in batch mode\n\nVersion 1.3.2\n\n- Fixed integration tests performance issues\n\nVersion 1.3.1\n\n- Updated Japanese docs\n\nVersion 1.3\n\nFixes:\n(unit tests)\n- nUnit will no longer change the Environment.CurrentDirectory when running tests\n- fixed issues with asserting GameObject == null \n(integration tests)\n- fix the issue with passing or failing test in first frame\n- fixed bug where ignored tests were still run in ITF\n(assertion component)\n- fixed resolving properties to include derived types \n\nImprovements:\n(unit tests)\n- refactored result renderer\n- reenabled Random attribute\n- added Category filter\n- NSubstitute updated to version 1.7.2\n- result now will be dimmed after recompilation\n- running tests in background will now work without having the window focused\n- all assemblies in the project referencing 'nunit.framework' will now be included in the test list\n(integration tests)\n- updated platform exclusion mechanism\n- refactored result renderer\n- the runner should work even if the runner window is not focused\n- added possibility to create integration tests from code\n- the runner will now always run in background (if the window is not focused)\n(assertion component)\n- added API for creating assertions from code\n- added new example\n(common)\n- GUI improvements\n- you no longer need to change the path to icons when moving the tools to another directory\n- made test details/results resizeable and scrollable\n- added character escape for generated result XML\n\nVersion 1.2.1\n- Fixed Unit Test Batch runner\n\nVersion 1.2\nFixes:\n- Windows Store related compilation issues\n- other\nImprovements:\n(unit tests)\n- unit test runner can run in background now without having the runner window open\n- unit test batch runner can take a result file path as a parameter\n- changed undo system for unit test runner and UnityUnitTest base class\n- execution time in now visible in test details\n- fixed a bug with tests that inherit from a base test class\n(integration tests)\n- added hierarchical structure for integration tests\n- added Player runner to automate running integration tests on platforms\n- Integration tests batch runner can take a result directory as a parameter\n- Integration tests batch runner can run tests on platforms\n- results are rendered in a player\n(assertion component)\n- changed default failure messages\n- it's possible to override failure action on comparer failure\n- added code stripper for assertions.\n- vast performance improvement\n- fixed bugs\nOther:\n- \"Hide in hierarchy\" option was removed from integration test runner\n- \"Focus on selection\" option was removed from integration test runner\n- \"Hide test runner\" option was removed from integration test runner\n- result files for unit tests and integration tests are now not generated when running tests from the editor\n- UI improvements\n- removed UnityScript and Boo examples\n- WP8 compatibility fixes\n\nVersion 1.1.1\nOther:\n- Documentation in Japanese was added\n\nVersion 1.1\nFixes:\n- fixed display error that happened when unit test class inherited from another TestFixture class\n- fixed false positive result when \"Succeed on assertions\" was checked and no assertions were present in the test\n- fixed XmlResultWriter to be generate XML file compatible with XSD scheme\n- XmlResultWriter result writer was rewritten to remove XML libraries dependency\n- Fixed an issue with a check that should be executed once after a specified frame in OnUpdate.\n- added missing file UnityUnitTest.cs\nImprovements:\n- Added Japanese translation of the documentation\n- ErrorPause value will be reverted to previous state after test run finishes\n- Assertion Component will not copy reference to a GameObject if the GameObject is the same as the component is attached to. Instead, it will set the reference to the new GameObject.\n- Integration tests batch runner can now run multiple scenes\n- Unit test runner will now include tests written in UnityScript and Boo\n- Unit tests will not run automatically if the compilation failes\n- Added scene auto-save option to the Unit Test Runner \nOther:\n- changed icons\n- restructured project files\n- moved XmlResultWriter to Common folder\n- added UnityScript and Boo unit tests examples\n- added more unit tests examples\n- Test runners visual adjustments\n\nVersion 1.0\n- Initial release"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools/changelog.txt.meta",
    "content": "fileFormatVersion: 2\nguid: 29b770d9107643740b69cb98b00430aa\nTextScriptImporter:\n  userData: \n"
  },
  {
    "path": "Foundation.Unity/Assets/UnityTestTools.meta",
    "content": "fileFormatVersion: 2\nguid: 32c08a32d8031cd4680782f6fba0785e\nfolderAsset: yes\ntimeCreated: 1473353364\nlicenseType: Free\nDefaultImporter:\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Foundation.Unity/Foundation.Unity.CSharp.Editor.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{EBD395B8-8FDB-2C98-F38F-468B603ED0F2}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AssemblyName>Assembly-CSharp-Editor</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Unity Full v3.5</TargetFrameworkProfile>\n    <CompilerResponseFile></CompilerResponseFile>\n    <UnityProjectType>Editor:5</UnityProjectType>\n    <UnityBuildTarget>StandaloneWindows:5</UnityBuildTarget>\n    <UnityVersion>5.4.0f3</UnityVersion>\n    <RootNamespace></RootNamespace>\n    <LangVersion Condition=\" '$(VisualStudioVersion)' != '10.0' \">4</LangVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Debug\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Debug\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_4_0;UNITY_5_4;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_EDITOR_RETINA;ENABLE_RETINA_GUISTYLES;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU</DefineConstants>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Release\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Release\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_4_0;UNITY_5_4;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_EDITOR_RETINA;ENABLE_RETINA_GUISTYLES;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU</DefineConstants>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"mscorlib\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.XML\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Boo.Lang\" />\n    <Reference Include=\"UnityScript.Lang\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"UnityEngine\">\n      <HintPath>Library\\UnityAssemblies\\UnityEngine.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Advertisements\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.Advertisements.dll</HintPath>\n    </Reference>\n    <Reference Include=\"nunit.framework\">\n      <HintPath>Library\\UnityAssemblies\\nunit.framework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.EditorTestsRunner\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.EditorTestsRunner.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UI\">\n      <HintPath>Library\\UnityAssemblies\\UnityEngine.UI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.UI\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.UI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Networking\">\n      <HintPath>Library\\UnityAssemblies\\UnityEngine.Networking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Networking\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.Networking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.TreeEditor\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.TreeEditor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Graphs\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.Graphs.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.WindowsStandalone.Extensions\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.WindowsStandalone.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SyntaxTree.VisualStudio.Unity.Bridge\">\n      <HintPath>Library\\UnityAssemblies\\SyntaxTree.VisualStudio.Unity.Bridge.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Foundation.Architecture.Unity3d\">\n      <HintPath>Assets\\Plugins\\Foundation.Architecture.Unity3d.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Mono.Cecil\">\n      <HintPath>Assets\\UnityTestTools\\IntegrationTestsFramework\\Libs\\Mono.Cecil.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Mono.Cecil.Mdb\">\n      <HintPath>Assets\\UnityTestTools\\IntegrationTestsFramework\\Libs\\Mono.Cecil.Mdb.dll</HintPath>\n    </Reference>\n    <Reference Include=\"NSubstitute\">\n      <HintPath>Assets\\UnityTestTools\\UnitTesting\\Editor\\NSubstitute\\NSubstitute.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"Foundation.Unity.CSharp.csproj\">\n      <Project>{63114D93-2945-1E5A-8424-E315C5817808}</Project>\n      <Name>Foundation.Unity.CSharp</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\AssertionComponentEditor.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\AssertionExplorerWindow.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\AssertionListRenderer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\AssertionStripper.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\DropDownControl.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\GroupByComparerRenderer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\GroupByExecutionMethodRenderer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\GroupByGORenderer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\GroupByNothingRenderer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\GroupByTestsRenderer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\PropertyPathSelector.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Editor\\PropertyResolver.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Common\\Editor\\Icons.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Common\\Editor\\ProjectSettingsBase.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Common\\Editor\\ResultWriter\\ResultSummarizer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Common\\Editor\\ResultWriter\\StackTraceFilter.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Common\\Editor\\ResultWriter\\XmlResultWriter.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Common\\Editor\\Styles.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Common\\Editor\\TestFilterSettings.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\Batch.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\EditorReferencesUtil.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\GuiHelper.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\IntegrationTestsHierarchyAnnotation.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\IntegrationTestsRunnerSettings.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\IntegrationTestsRunnerWindow.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\PlatformRunner\\NetworkResultsReceiver.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\PlatformRunner\\PlatformRunner.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\PlatformRunner\\PlatformRunnerConfiguration.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\PlatformRunner\\PlatformRunnerSettings.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\PlatformRunner\\PlatformRunnerSettingsWindow.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\PlatformRunner\\PlayerSettingConfigurator.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\Renderer\\IntegrationTestGroupLine.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\Renderer\\IntegrationTestLine.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\Renderer\\IntegrationTestRendererBase.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\Renderer\\RenderingOptions.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\Editor\\TestComponentEditor.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Assets\\UnityTestTools\\LICENSE.txt\" />\n    <None Include=\"Assets\\UnityTestTools\\changelog.txt\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\SyntaxTree\\UnityVS\\2015\\UnityVS.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Foundation.Unity/Foundation.Unity.CSharp.Plugins.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{2E00EE84-877B-C583-6CEC-3B9D59956AA1}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AssemblyName>Assembly-CSharp-firstpass</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Unity Subset v3.5</TargetFrameworkProfile>\n    <CompilerResponseFile></CompilerResponseFile>\n    <UnityProjectType>GamePlugins:3</UnityProjectType>\n    <UnityBuildTarget>StandaloneWindows:5</UnityBuildTarget>\n    <UnityVersion>5.4.0f3</UnityVersion>\n    <RootNamespace></RootNamespace>\n    <LangVersion Condition=\" '$(VisualStudioVersion)' != '10.0' \">4</LangVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Debug\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Debug\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_4_0;UNITY_5_4;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_EDITOR_RETINA;ENABLE_RETINA_GUISTYLES;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU</DefineConstants>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Release\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Release\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_4_0;UNITY_5_4;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_EDITOR_RETINA;ENABLE_RETINA_GUISTYLES;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU</DefineConstants>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"mscorlib\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.XML\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Boo.Lang\" />\n    <Reference Include=\"UnityScript.Lang\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"UnityEngine\">\n      <HintPath>Library\\UnityAssemblies\\UnityEngine.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UI\">\n      <HintPath>Library\\UnityAssemblies\\UnityEngine.UI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Networking\">\n      <HintPath>Library\\UnityAssemblies\\UnityEngine.Networking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Foundation.Architecture.Unity3d\">\n      <HintPath>Assets\\Plugins\\Foundation.Architecture.Unity3d.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Mono.Cecil\">\n      <HintPath>Assets\\UnityTestTools\\IntegrationTestsFramework\\Libs\\Mono.Cecil.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Mono.Cecil.Mdb\">\n      <HintPath>Assets\\UnityTestTools\\IntegrationTestsFramework\\Libs\\Mono.Cecil.Mdb.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample01_ObservableWWW.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample02_ObservableTriggers.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample03_GameObjectAsObservable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample04_ConvertFromUnityCallback.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample05_ConvertFromCoroutine.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample06_ConvertToCoroutine.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample07_OrchestratIEnumerator.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample08_DetectDoubleClick.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample09_EventHandling.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample10_MainThreadDispatcher.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Examples\\Sample11_Logger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Asynchronous\\WebRequestExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\BooleanDisposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\CompositeDisposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\DictionaryDisposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\Disposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\DisposableExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\ICancelable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\MultipleAssignmentDisposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\RefCountDisposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\ScheduledDisposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\SerialDisposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\SingleAssignmentDisposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Disposables\\StableCompositeDisposable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\EventPattern.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\InternalUtil\\AscynLock.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\InternalUtil\\ImmutableList.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\InternalUtil\\ListObserver.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\InternalUtil\\MicroCoroutine.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\InternalUtil\\PriorityQueue.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\InternalUtil\\ReflectionAccessor.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\InternalUtil\\ScheduledItem.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\InternalUtil\\ThreadSafeQueueWorker.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Notification.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Notifiers\\BooleanNotifier.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Notifiers\\CountNotifier.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Notifiers\\MessageBroker.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Notifiers\\ScheduledNotifier.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Aggregate.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Binding.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Blocking.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Concatenate.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Concurrency.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Conversions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Creation.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.ErrorHandling.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Events.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.FromAsync.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Joins.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Paging.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.Time.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Observer.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Aggregate.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Amb.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\AsObservable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\AsSingleUnitObservable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\AsUnitObservable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Buffer.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Cast.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Catch.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\CombineLatest.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Concat.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\ContinueWith.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Create.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\DefaultIfEmpty.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Defer.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Delay.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\DelaySubscription.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Dematerialize.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Distinct.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\DistinctUntilChanged.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Do.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Empty.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Finally.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\First.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\ForEachAsync.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\FromEvent.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\GroupBy.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\IgnoreElements.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Last.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Materialize.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Merge.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Never.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\ObserveOn.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\OfType.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\OperatorObservableBase.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\OperatorObserverBase.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\PairWise.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Range.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\RefCount.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Repeat.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\RepeatSafe.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Return.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Sample.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Scan.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Select.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\SelectMany.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\SelectWhere.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Single.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Skip.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\SkipUntil.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\SkipWhile.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Start.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\StartWith.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\SubscribeOn.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Switch.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Synchronize.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\SynchronizedObserver.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Take.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\TakeLast.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\TakeUntil.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\TakeWhile.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Throttle.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\ThrottleFirst.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Throw.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\TimeInterval.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Timeout.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Timer.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Timestamp.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\ToArray.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\ToList.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\ToObservable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Wait.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\WhenAll.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Where.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\WhereSelect.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\WithLatestFrom.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\Zip.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Operators\\ZipLatest.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Pair.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Schedulers\\CurrentThreadScheduler.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Schedulers\\IScheduler.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Schedulers\\ImmediateScheduler.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Schedulers\\Scheduler.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Schedulers\\ThreadPoolScheduler.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Subjects\\AsyncSubject.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Subjects\\BehaviorSubject.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Subjects\\ConnectableObservable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Subjects\\ISubject.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Subjects\\ReplaySubject.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Subjects\\Subject.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Subjects\\SubjectExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\System\\IObservable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\System\\IObserver.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\System\\IOptimizedObservable.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\System\\IProgress.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\System\\Tuple.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\System\\Unit.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\TimeInterval.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\Timestamped.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\AotSafeExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\AsyncOperationExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\CancellationToken.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Diagnostics\\LogEntry.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Diagnostics\\LogEntryExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Diagnostics\\Logger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Diagnostics\\ObservableDebugExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Diagnostics\\ObservableLogger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Diagnostics\\UnityDebugSink.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\FrameInterval.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\InspectableReactiveProperty.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\InspectorDisplayDrawer.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\LazyTask.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\LifetimeDisposableExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\MainThreadDispatcher.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\MainThreadScheduler.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Observable.Unity.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\ObservableMonoBehaviour.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\ObservableWWW.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\ObserveExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\BatchFrame.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\DelayFrame.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\DelayFrameSubscription.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\FrameInterval.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\FrameTimeInterval.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\FromCoroutine.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\RepeatUntil.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\SampleFrame.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\SubscribeOnMainThread.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\ThrottleFirstFrame.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\ThrottleFrame.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Operators\\TimeoutFrame.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\PresenterBase.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\ReactiveCollection.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\ReactiveCommand.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\ReactiveDictionary.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\ReactiveProperty.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\ScenePlaybackDetector.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Toolkit\\ObjectPool.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableAnimatorTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableBeginDragTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableCancelTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableCanvasGroupChangedTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableCollision2DTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableCollisionTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableDeselectTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableDestroyTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableDragTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableDropTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableEnableTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableEndDragTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableEventTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableFixedUpdateTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableInitializePotentialDragTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableLateUpdateTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableMouseTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableMoveTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableParticleTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservablePointerClickTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservablePointerDownTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservablePointerEnterTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservablePointerExitTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservablePointerUpTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableRectTransformTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableScrollTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableSelectTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableStateMachineTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableSubmitTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableTransformChangedTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableTrigger2DTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableTriggerBase.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableTriggerExtensions.Component.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableTriggerExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableTriggerTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableUpdateSelectedTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableUpdateTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\Triggers\\ObservableVisibleTrigger.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\TypedMonoBehaviour.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\UnityEqualityComparer.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\UnityEventExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\UnityGraphicExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\UnityUIComponentExtensions.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityEngineBridge\\YieldInstructionCache.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityWinRTBridge\\Thread.cs\" />\n    <Compile Include=\"Assets\\Plugins\\UniRx\\Scripts\\UnityWinRTBridge\\ThreadPoolScheduler_UnityWinRT.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Assets\\Plugins\\UniRx\\ReadMe.txt\" />\n    <None Include=\"Assets\\UnityTestTools\\LICENSE.txt\" />\n    <None Include=\"Assets\\UnityTestTools\\changelog.txt\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\SyntaxTree\\UnityVS\\2015\\UnityVS.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Foundation.Unity/Foundation.Unity.CSharp.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{63114D93-2945-1E5A-8424-E315C5817808}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AssemblyName>Assembly-CSharp</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>\n    <TargetFrameworkProfile>Unity Subset v3.5</TargetFrameworkProfile>\n    <CompilerResponseFile></CompilerResponseFile>\n    <UnityProjectType>Game:1</UnityProjectType>\n    <UnityBuildTarget>StandaloneWindows:5</UnityBuildTarget>\n    <UnityVersion>5.4.0f3</UnityVersion>\n    <RootNamespace></RootNamespace>\n    <LangVersion Condition=\" '$(VisualStudioVersion)' != '10.0' \">4</LangVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Debug\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Debug\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_4_0;UNITY_5_4;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_EDITOR_RETINA;ENABLE_RETINA_GUISTYLES;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU</DefineConstants>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Release\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Release\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_4_0;UNITY_5_4;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_EDITOR_RETINA;ENABLE_RETINA_GUISTYLES;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU</DefineConstants>\n    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"mscorlib\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.XML\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"Boo.Lang\" />\n    <Reference Include=\"UnityScript.Lang\" />\n    <Reference Include=\"System.Runtime.Serialization\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"UnityEngine\">\n      <HintPath>Library\\UnityAssemblies\\UnityEngine.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UI\">\n      <HintPath>Library\\UnityAssemblies\\UnityEngine.UI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Networking\">\n      <HintPath>Library\\UnityAssemblies\\UnityEngine.Networking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor\">\n      <HintPath>Library\\UnityAssemblies\\UnityEditor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Foundation.Architecture.Unity3d\">\n      <HintPath>Assets\\Plugins\\Foundation.Architecture.Unity3d.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Mono.Cecil\">\n      <HintPath>Assets\\UnityTestTools\\IntegrationTestsFramework\\Libs\\Mono.Cecil.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Mono.Cecil.Mdb\">\n      <HintPath>Assets\\UnityTestTools\\IntegrationTestsFramework\\Libs\\Mono.Cecil.Mdb.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Assets\\Binding\\BindingComponenet.cs\" />\n    <Compile Include=\"Assets\\Binding\\IViewTarget.cs\" />\n    <Compile Include=\"Assets\\Binding\\View.cs\" />\n    <Compile Include=\"Assets\\Tests\\Assert.cs\" />\n    <Compile Include=\"Assets\\Tests\\BufferHelperTests.cs\" />\n    <Compile Include=\"Assets\\Tests\\DemoTest.cs\" />\n    <Compile Include=\"Assets\\Tests\\DomainEventsTest.cs\" />\n    <Compile Include=\"Assets\\Tests\\InjectorTests.cs\" />\n    <Compile Include=\"Assets\\Tests\\ObjectEventsTest.cs\" />\n    <Compile Include=\"Assets\\Tests\\ObservableTests.cs\" />\n    <Compile Include=\"Assets\\Tests\\TestMethod.cs\" />\n    <Compile Include=\"Assets\\Tests\\ThreadingTests.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\AssertionComponent.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\AssertionException.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Assertions.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\CheckMethod.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\ActionBase.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\BoolComparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\ColliderComparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\ComparerBase.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\FloatComparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\GeneralComparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\IntComparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\IsRenderedByCamera.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\StringComparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\TransformComparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\ValueDoesNotChange.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\Vector2Comparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\Vector3Comparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\Vector4Comparer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\Comparers\\VectorComparerBase.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\InvalidPathException.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Assertions\\MemberResolver.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Common\\ITestResult.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\Common\\TestResultState.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\DTOFormatter.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\ITestRunnerCallback.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\IntegrationTest.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\IntegrationTestAttribute.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\IntegrationTestsProvider.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\NetworkResultSender.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\ResultDTO.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\TestComponent.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\TestResult.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\TestResultRenderer.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\TestRunner.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\TestRunnerCallbackList.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestRunner\\TestRunnerConfigurator.cs\" />\n    <Compile Include=\"Assets\\UnityTestTools\\IntegrationTestsFramework\\TestingAssets\\CallTesting.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Assets\\UnityTestTools\\LICENSE.txt\" />\n    <None Include=\"Assets\\UnityTestTools\\changelog.txt\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\SyntaxTree\\UnityVS\\2015\\UnityVS.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Foundation.Unity/Foundation.Unity.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2015\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Foundation.Unity.CSharp\", \"Foundation.Unity.CSharp.csproj\", \"{63114D93-2945-1E5A-8424-E315C5817808}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Foundation.Unity.CSharp.Editor\", \"Foundation.Unity.CSharp.Editor.csproj\", \"{EBD395B8-8FDB-2C98-F38F-468B603ED0F2}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{63114D93-2945-1E5A-8424-E315C5817808}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{63114D93-2945-1E5A-8424-E315C5817808}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{63114D93-2945-1E5A-8424-E315C5817808}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{63114D93-2945-1E5A-8424-E315C5817808}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{EBD395B8-8FDB-2C98-F38F-468B603ED0F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EBD395B8-8FDB-2C98-F38F-468B603ED0F2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EBD395B8-8FDB-2C98-F38F-468B603ED0F2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EBD395B8-8FDB-2C98-F38F-468B603ED0F2}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Injector.md",
    "content": "#Injector\n\nFor the resolving of dependencies.\n\n### RegisterTransient\n\nA new instance for each get. Must register a factory or a type.\n\n`````\n    //Register a concrete type keyed by an interface\n    Container.RegisterTransient<IWordService, WordService>();\n    \n    //Register a concrete type keyed by its own (concrete) type\n    Container.RegisterTransient<SentanceService>();\n        \n    //Register a concrete type keyed by its own (concrete) type and a custom factory action\n    Container.RegisterTransient<Document>(()=> new Document());\n`````\n\n### RegisterSingleton\n\nA static instance.\n\n`````\n    //Register a concrete type keyed by an interface\n    Container.RegisterSingleton<IWordService, WordService>();\n    \n    //Register a concrete type keyed by its own (concrete) type\n    Container.RegisterSingleton<SentanceService>();\n        \n    //Register a concrete type keyed by its own (concrete) type and a custom factory action\n    Container.RegisterSingleton<Document>(()=> new Document());\n        \n    //Register a concrete type keyed by its own (concrete) type and a pre instantiated instance\n    //All loads are lazy, except this one.\n    var document = new Document();\n    Container.RegisterSingleton<Document>(document);\n`````\n\n### Get\n\nget from the container.\n\n`````\n    Container.RegisterSingleton<IWordService, WordService>();\n    Container.RegisterSingleton<SentanceService>();\n    \n    var words = Container.Get<IWordService>();\n    var sentances = Container.Get<SentanceService>();\n`````\n\n### Inject Into\n\nUses reflection to resolve dependencies. Useful for daisy chaining.\n\n`````\npublic class MyScript\n{\n    [Inject]\n    protected IWordService Words;\n    \n    void Awake()\n    {\n        Container.RegisterSingleton<IWordService, WordService>();\n        Container.InjectInto(this);\n        Asset.IsNotNull(Words);\n    }\n}\n`````\n\n\n### Implementation Details (Gotchas)\n\n- Since we are using a dictionary to key references internally, if you register with an interface you must request with that same interface. If you reference with the concrete type, you must get using that concrete type.\n- All lazy loaded dependencies will pass to the InjectInto method when they generated. That means if they have dependencies, they should be injected for you.\n- Please Register dependencies lowest level first, to minimize the risk of not finding things."
  },
  {
    "path": "LICENSE.md",
    "content": "# License\n\nTHE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE (\"CCPL\" OR \"LICENSE\"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.\n\nBY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.\n\n1. Definitions\n\n\"Adaptation\" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image (\"synching\") will be considered an Adaptation for the purpose of this License.\n\"Collection\" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.\n\"Distribute\" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.\n\"Licensor\" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.\n\"Original Author\" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.\n\"Work\" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.\n\"You\" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.\n\"Publicly Perform\" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.\n\"Reproduce\" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.\n2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.\n\n3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:\n\nto Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and,\nto Distribute and Publicly Perform the Work including as incorporated in Collections.\nThe above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).\n\n4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:\n\nYou may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested.\nYou may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.\nIf You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution (\"Attribution Parties\") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.\nFor the avoidance of doubt:\n\nNon-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;\nWaivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,\nVoluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b).\nExcept as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.\n5. Representations, Warranties and Disclaimer\n\nUNLESS OTHERWISE MUTUALLY AGREED BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.\n\n6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n7. Termination\n\nThis License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.\nSubject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.\n8. Miscellaneous\n\nEach time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.\nIf any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.\nNo term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.\nThis License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.\nThe rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.\n"
  },
  {
    "path": "Logging.md",
    "content": "# Logging\n\nLogService is a light weight wrapper around Console.WriteLine and Debug.Log. It is inteded a a cross platform logging service that can be called on shared code.\n\n````\n    /// <summary>\n    /// Cross platform logging interface\n    /// </summary>\n    public class LogService\n    {\n        /// <summary>\n        ///  extensibility point\n        /// </summary>\n        public static event Action<LogModel> OnLog = delegate { };\n\n        public static void Log(LogModel model);\n\n        public static void Log(string message);\n\n        public static void LogWarning(string message);\n\n        public static void LogError(string message);\n\n        public static void LogException(Exception ex);\n        \n        public static void LogException(string message, Exception ex);\n      }\n````\n"
  },
  {
    "path": "ObjectEvents.md",
    "content": "# Object Events\n\nA object-specific message broker for relaying events routed by the message type. This is a drop-in replacement for GameObject.SendMessage\n\n## Use\n\n`````\n        public void TestObjectRoute()\n        {\n            //define our message, a class\n            var msg = new Msg { Content = MagicString };\n\n            //define our routes (strings or game objects or something else)\n            var route = new GameObject();\n\n            //subscribe using the object reference\n            ObjectEvents<GameObject, Msg>.Subscribe(route, Handler);\n\n            //many ways to send\n            ObjectEvents<GameObject, Msg>.Publish(route, msg);\n            ObjectEvents.Publish(route, msg);\n            ObjectEvents.Publish(route, msg, typeof(GameObject), typeof(Msg));\n\n            //be sure to clean up as we are not using weak references\n            ObjectEvents<GameObject, Msg>.Unsubscribe(route, Handler);\n        }\n\n\n        public void Handler(Msg myMessage)\n        {\n          //Do Something\n        }\n`````\n"
  },
  {
    "path": "Observable.md",
    "content": "# Observables\n\nObservables is a design pattern where objects can listen to other objects for update notification. The most practical use case of this is MVVM, where a view will 'bind' to a view model and redraw itself when that view model changes.\n\n\n## Key components \n\n**IObservable**\nA event broadcaster. Something that can be listened to.\n \n `````\n    /// <summary>\n    /// Data Source. Message Publisher Source\n    /// </summary>\n    /// <typeparam name=\"TModel\"></typeparam>\n    public interface IObservable<TModel> : IDisposable\n    {\n        /// <summary>\n        /// Old School Change Delegate\n        /// </summary>\n        event Action<TModel> OnPublish; \n        \n        /// <summary>\n        /// Will Publish value\n        /// </summary>\n        /// <param name=\"model\"></param>\n        void Publish(TModel model);\n    }\n `````\n \n**MVVMObservable**\n\n `````\n     \n    /// <summary>\n    /// Raises PropertyChange events for the view to listen to.\n    /// </summary>\n    public interface IMvvmObservable : IObservable<PropertyEvent> {}\n \n    /// <summary>\n    /// MVVM Event Arguments\n    /// </summary>\n    public struct PropertyEvent\n    {\n        /// <summary>\n        /// The Model\n        /// </summary>\n        public object Sender;\n\n        /// <summary>\n        /// Member name (property / method)\n        /// </summary>\n        public string Name;\n\n        /// <summary>\n        /// New Value\n        /// </summary>\n        public object Value;\n\n        /// <summary>\n        /// Refresh root\n        /// </summary>\n        public bool IsRefreshAll\n        {\n            get { return string.IsNullOrEmpty(Name); }\n        }\n    }\n `````\n \n**ObservableObject**\n\nImplements IMvvmObservable for poco objects\n \n**ObservableBehaviour**\n\nImplements IMvvmObservable for MonoBehaviours objects\n\n**ObservableCollection**\n\nA specialized list with events for when items are added, removed, or changed.\n\n**ObservableProperty**\n\nAn alternative way of observing an object which does not use magic strings. This object is generic and includes the change event internally.\n\n**ObservableProxy**\n\nReflection is heavy and costly. This class makes it better. As a bonus, acts as a proxy for binding to non MVVM objects.\n\n - Wraps observable's (all of the above) and exposes an easy to use interface that binders can listen to.\n - Heavily cached since reflection is expensive\n - Supports methods and properties\n - Supports Observables and simple DTO's. (Those objects will be not raise change events, however)\n \n\n## Metrics\n\nhere are my current stats for calling a method 1000 times. Time is in StopWatch ticks.\n \n - Normal 81\n - Reflected 1088\n - Cached 82\n - Proxy 182 ( 2 method calls + dictionary lookup. one to proxy, one to instance)\n\n"
  },
  {
    "path": "README.md",
    "content": "# Foundation\r\n\r\nA Framework level library for client / server development. Built with MSN best practices in mind.\r\n\r\n- **Features**\r\n  - Super light weight, under 100kb\r\n  - **Unit tests** for everything\r\n  - Modular with no cross dependencies. Take only what you need.\r\n  - Cross compiles to run in Unity3d, WebGL, .net45, and DotNetCore.\r\n  \r\n[Injector : Service Locator / Inversion of control module](Injector.md) \r\n\r\n[Domain Events : Global Message Broker](DomainEvents.md) \r\n\r\n[Object Events : Routed Message broker / SendMessage replacement](ObjectEvents.md) \r\n\r\n[Observables : Databinding and MVVM Support](Observable.md) \r\n\r\n[Logging : Cross platform debug proxy](Logging.md) \r\n\r\n[Threading : Cross platform timer, update, coroutines and task runniner](Threading.md) \r\n"
  },
  {
    "path": "Threading.md",
    "content": "# Threading\n\nThe threading service is a cross platform service for...\n\n- Doing background work\n- Doing work on the main thread from a background thread\n- Running coroutines\n- Registering 'Unity Style' updates\n- Registering 'Unity Style' coroutines\n- Registering 'Unity Style' delay invoke\n\nIt is cross platform, so you can have time sensitive logic on your client and server running against this common api.\n\n`````\n    /// <summary>\n    /// Main thread / Background thread utility\n    /// </summary>\n    /// <remarks>\n    /// Games need consistent threading / time logic on server and client.\n    /// </remarks>\n    public static class ThreadingService\n    {\n        /// <summary>\n        /// Checks if this is the main thread\n        /// </summary>\n        public static bool IsMainThread {get;}\n\n        /// <summary>\n        /// A long running (continuous) update loop\n        /// </summary>\n        /// <param name=\"callback\">Update Handler with delta time parameter</param>\n        /// <returns></returns>\n        public static IDisposable RunUpdate(Action<double> callback);\n\n        /// <summary>\n        /// Registers a timeout (Wait and Invoke)\n        /// </summary>\n        public static IDisposable RunDelay(Action callback, float seconds = 5);\n      \n        /// <summary>\n        /// A Coroutine. Like an Update Loop, but, execution broken up by yields\n        /// </summary>\n        public static void RunRoutine(IEnumerator routine);\n        \n        /// <summary>\n        /// Executes an action on the main thread\n        /// </summary>\n        public static void RunMainThread(Action action);\n        \n        /// <summary>\n        /// Executes an action on the background thread (if possible - webGl)\n        /// </summary>\n        public static void RunBackgroundThread(Action action);\n\n        /// <summary>\n        /// Run a background job with completion\n        /// </summary>\n        public static void RunBackgroundThread(Action backgroundWork, Action mainWork);\n    }\n`````\n"
  }
]