Align Windowed test names

Align Windowed test names

Windowed was renamed from SlidingWindow[1].

[1] See 2a8148cc800540a635069859a9e8abf58ca8cc7a

--- MoreLinq.Test/WindowedTest.cs
+++ MoreLinq.Test/WindowedTest.cs
@@ -5,25 +5,25 @@
 namespace MoreLinq.Test
 {
     /// <summary>
-    /// Verify the behavior of the SlidingWindow operator
+    /// Verify the behavior of the Windowed operator
     /// </summary>
     [TestFixture]
     public class WindowedTests
     {
         /// <summary>
-        /// Verify that SlidingWindow behaves in a lazy manner
+        /// Verify that Windowed behaves in a lazy manner
         /// </summary>
         [Test]
-        public void TestSlidingWindowIsLazy()
+        public void TestWindowedIsLazy()
         {
             new BreakingSequence<int>().Windowed(1);
         }

         /// <summary>
-        /// Verify that invoking SlidingWindow on a <c>null</c> sequence results in an exception
+        /// Verify that invoking Windowed on a <c>null</c> sequence results in an exception
         /// </summary>
         [Test]
-        public void TestSlidingWindowNullSequenceException()
+        public void TestWindowedNullSequenceException()
         {
             const IEnumerable<int> sequence = null;
             Assert.ThrowsArgumentNullException("source", () =>
@@ -34,7 +34,7 @@
         /// Verify that a negative window size results in an exception
         /// </summary>
         [Test]
-        public void TestSlidingWindowNegativeWindowSizeException()
+        public void TestWindowedNegativeWindowSizeException()
         {
             var sequence = Enumerable.Repeat(1, 10);

@@ -47,7 +47,7 @@
         /// is an empty sequence
         /// </summary>
         [Test]
-        public void TestSlidingWindowEmptySequence()
+        public void TestWindowedEmptySequence()
         {
             var sequence = Enumerable.Empty<int>();
             var result = sequence.Windowed(5);
@@ -60,7 +60,7 @@
         /// degenerates to the original sequence.
         /// </summary>
         [Test]
-        public void TestSlidingWindowOfSingleElement()
+        public void TestWindowedOfSingleElement()
         {
             const int count = 100;
             var sequence = Enumerable.Range(1, count);
@@ -79,7 +79,7 @@
         /// in a empty sequence.
         /// </summary>
         [Test]
-        public void TestSlidingWindowLargerThanSequence()
+        public void TestWindowedLargerThanSequence()
         {
             const int count = 100;
             var sequence = Enumerable.Range(1, count);
@@ -95,7 +95,7 @@
         /// in N sequences, where N = (source.Count() - windowSize) + 1.
         /// </summary>
         [Test]
-        public void TestSlidingWindowSmallerThanSequence()
+        public void TestWindowedSmallerThanSequence()
         {
             const int count = 100;
             const int windowSize = count / 3;


Remove unused

Remove unused

--- src/SilentHunter.Core/Formats/ControllerReaderExtensions.cs
+++ src/SilentHunter.Core/Formats/ControllerReaderExtensions.cs
@@ -1,5 +1,4 @@
 using System;
-using System.Globalization;
 using System.IO;
 using System.Reflection;
 using SilentHunter.Dat;
@@ -76,99 +75,5 @@
 			// Property must be skipped.
 			return true;
 		}
-
-		public static bool ReadString(this BinaryReader reader, ICustomAttributeProvider member, long expectedEndPosition, out string result)
-		{
-			int fixedLength = member.GetAttribute<FixedStringAttribute>()?.Length ?? -1;
-			if (reader.BaseStream.Position == expectedEndPosition || reader.BaseStream.Position == reader.BaseStream.Length)
-			{
-				result = null;
-				if (fixedLength == -1)
-				{
-					return true;
-				}
-			}
-
-			if (fixedLength > 0)
-			{
-				string s = reader.ReadString(fixedLength);
-				// Take care of possible nullchar in middle of string.
-				string[] arr = s.Split(new[]
-				{
-					'\0'
-				}, 2, StringSplitOptions.None);
-
-				result = arr.Length == 0 ? null : arr[0];
-			}
-			else
-			{
-				result = reader.ReadNullTerminatedString();
-
-				// If there are bytes left for this field, move to last byte...
-				if (reader.BaseStream.Position < expectedEndPosition)
-				{
-					reader.BaseStream.Position = expectedEndPosition;
-				}
-			}
-
-			return result != null && (expectedEndPosition == -1 || reader.BaseStream.Position == expectedEndPosition);
-		}
-
-		public static bool ReadBoolean(this BinaryReader reader, ICustomAttributeProvider member, long expectedEndPosition, out bool result)
-		{
-			long boolLen = (expectedEndPosition == -1 ? reader.BaseStream.Length : expectedEndPosition) - reader.BaseStream.Position;
-			switch (boolLen)
-			{
-				case 1:
-					result = reader.ReadByte() > 0;
-					return true;
-				case 4:
-					// Some files have int32 stored as boolean. This seems like a bug and we should resave the file properly.
-					result = reader.ReadInt32() > 0;
-					return true;
-				default:
-					result = false;
-					return false;
-			}
-		}
-
-		public static bool ReadDateTime(this BinaryReader reader, ICustomAttributeProvider member, long expectedEndPosition, out DateTime date)
-		{
-			date = DateTime.MinValue;
-
-			string sDate = reader.ReadInt32().ToString();
-			bool success = expectedEndPosition == -1 || reader.BaseStream.Position == expectedEndPosition;
-			if (!success)
-			{
-				return false;
-			}
-
-			if (DateTime.TryParseExact(sDate, DateFormat, null, DateTimeStyles.None, out date))
-			{
-				return true;
-			}
-
-			// If a parse error occurred, this most like is because the days of month are 31, for instance for april, or 30-31 for feb, or even 29 if not a leap year. Correct this by attempting to parse by lowering the days.
-			int days = int.Parse(sDate.Substring(6, 2));
-			sDate = sDate.Remove(6);
-
-			// 3 extra attempts max.
-			for (var i = 0; i < 3; i++)
-			{
-				days--;
-				if (DateTime.TryParseExact(sDate + days, DateFormat, null, DateTimeStyles.None, out date))
-				{
-					// We are successful.
-					return true;
-				}
-			}
-
-			return false;
-		}
-
-		public static object ReadValue(this BinaryReader reader, Type type)
-		{
-			return null;
-		}
 	}
 }


added exception-eating for invalid format string passed to one of the logging methods

--- NLog/src/NLog/LogEventInfo.cs
+++ NLog/src/NLog/LogEventInfo.cs
@@ -94,12 +94,23 @@
             _layoutCache = null;
             _sequenceID = Interlocked.Increment(ref _globalSequenceID);
             _callContext = callContext;
-            if (_parameters == null || _parameters.Length == 0)
-                _formattedMessage = _message;
-            else if (_formatProvider != null)
-                _formattedMessage = String.Format(_formatProvider, _message, _parameters);
-            else
-                _formattedMessage = String.Format(_message, _parameters);
+
+            try
+            {
+                if (_parameters == null || _parameters.Length == 0)
+                    _formattedMessage = _message;
+                else if (_formatProvider != null)
+                    _formattedMessage = String.Format(_formatProvider, _message, _parameters);
+                else
+                    _formattedMessage = String.Format(_message, _parameters);
+            }
+            catch (Exception ex)
+            {
+                if (LogManager.ThrowExceptions)
+                    throw;
+                else
+                    _formattedMessage = _message;
+            }

 #if !NETCF
             _stackTrace = null;


#791 Gary reconfig responsive grid html on events

--- src/StockportWebapp/Views/stockportgov/Events/Detail.cshtml
+++ src/StockportWebapp/Views/stockportgov/Events/Detail.cshtml
@@ -21,14 +21,18 @@

@Model.Title

-

+

+                        @if (!string.IsNullOrEmpty(Model.ImageUrl))
+                        {
+

+                        }

-

+

-

+

Date and time

                                         @Model.EventDate.ToString("dddd dd MMMM yyyy") @Model.StartTime - @Model.EndTime

@@ -36,10 +40,10 @@

-

+

-

+

                                             Price

@@ -48,10 +52,10 @@

-

+

-

+

                                             Location

@@ -60,10 +64,10 @@

-

+

-

+

                                             Submitted by

@@ -73,69 +77,12 @@

-

+
+

-
-

-

-

-
-

-

-

-

-
-

-

-
Date and time

-                                        @Model.EventDate.ToString("dddd dd MMMM yyyy") @Model.StartTime - @Model.EndTime
-

-

-

-
-

-

-
-

-

-

-                                            Price
-

-                                        @Model.Fee
-

-

-

-

-

-
-

-

-

-                                            Location
-

-                                        @Html.Raw(Model.Location)
-

-

-

-

-

-
-

-

-

-                                            Submitted by
-

-                                        @Model.SubmittedBy
-

-

-

-

-

-

-

-
Description

+
Description

                             @Html.Raw(Model.Description)


Stop using RedirectUrl in test (#2527)

Stop using RedirectUrl in test (#2527)

--- src/StripeTests/Services/LoginLinks/LoginLinkServiceTest.cs
+++ src/StripeTests/Services/LoginLinks/LoginLinkServiceTest.cs
@@ -21,10 +21,7 @@
         {
             this.service = new LoginLinkService(this.StripeClient);

-            this.createOptions = new LoginLinkCreateOptions
-            {
-                RedirectUrl = "https://stripe.com/redirect?param=value",
-            };
+            this.createOptions = new LoginLinkCreateOptions();
         }

         [Fact]


Updade docs.

Updade docs.

--- Netcached/Netcached-Server.cs
+++ Netcached/Netcached-Server.cs
@@ -18,7 +18,7 @@
         /// That is: if a key1 has priority 0 and key2 has priority 1 -> key1 will be evicted first, should
         /// the need arise (due to lack of memory).
         /// Keys with the same priority are ordered according to the time stamp of their last use.</param>
-        /// <returns></returns>
+        /// <returns>Wheter the operation was successful</returns>
         public bool Set(string key, byte[] data, int priority = 0)
         {
             return false;
@@ -28,7 +28,7 @@
         /// Delete the entry the specified key.
         /// </summary>
         /// <param name="key"></param>
-        /// <returns></returns>
+        /// <returns>Wheter the operation was successful</returns</returns>
         public bool Delete(string key)
         {
             return false;


Adding error message letting the user know they need to install PSDSC for Linux

--- src/System.Management.Automation/DscSupport/CimDSCParser.cs
+++ src/System.Management.Automation/DscSupport/CimDSCParser.cs
@@ -645,7 +645,10 @@
                 var dscConfigurationDirectory = Environment.GetEnvironmentVariable("DSC_HOME") ??
                                                 "/etc/opt/omi/conf/dsc/configuration";

-                Debug.Assert(Directory.Exists(dscConfigurationDirectory), dscConfigurationDirectory + " does not exist.");
+                if (!Directory.Exists(dscConfigurationDirectory))
+                {
+                    throw new DirectoryNotFoundException("Unable to find DSC schema store at " + dscConfigurationDirectory + ". Please ensure PS DSC for Linux is installed.");
+                }

                 var resourceBaseFile = Path.Combine(dscConfigurationDirectory, "baseregistration/baseresource.schema.mof");
                 ImportClasses(resourceBaseFile, s_defaultModuleInfoForResource, errors);


ItemsCollection nullcheck fix

ItemsCollection nullcheck fix

--- src/TeamStore.Keeper/Services/ApplicationIdentityService.cs
+++ src/TeamStore.Keeper/Services/ApplicationIdentityService.cs
@@ -69,7 +69,8 @@
             //if (_itemsCollection.ContainsKey(CURRENTUSERKEY) == false) return null;

             // 1. Check context Item for Application User
-            if (_itemsCollection[CURRENTUSERKEY] != null &&
+            if (_itemsCollection.ContainsKey(CURRENTUSERKEY) &&
+                _itemsCollection[CURRENTUSERKEY] != null &&
                 _itemsCollection[CURRENTUSERKEY] is ApplicationUser applicationUser)
                 return applicationUser;

@@ -201,7 +202,7 @@
         /// <returns>A Task with the ApplicationUser as a result</returns>
         public async Task<ApplicationUser> EnsureUserByObjectIdAsync(string azureAdObjectIdentifier)
         {
-            // TODO: implement with Func!!
+            // TODO: implement EnsureUserByUpnAsync and EnsureUserByObjectIdAsync with Func!!
             var existingUser = await FindUserAsync(ai => ai.AzureAdObjectIdentifier == azureAdObjectIdentifier);
             if (existingUser != null)
             {
@@ -230,7 +231,7 @@
         /// <returns>A Task with the ApplicationUser as a result</returns>
         public async Task<ApplicationUser> EnsureUserByUpnAsync(string upn)
         {
-            // TODO: implement with Func!!
+            // TODO: implement EnsureUserByUpnAsync and EnsureUserByObjectIdAsync with Func!!
             var existingUser = await FindUserAsync(ai=>((ApplicationUser)ai).Upn == upn);
             if (existingUser != null)
             {


Provides local implementation of event.

Provides local implementation of event.

--- src/Wave.Extensions.Esri/System/Windows/CommandReference.cs
+++ src/Wave.Extensions.Esri/System/Windows/CommandReference.cs
@@ -14,12 +14,12 @@
         /// <summary>
         ///     The command parameters property
         /// </summary>
-        public static readonly DependencyProperty CommandParameterProperty = DependencyProperty.Register("CommandParameter", typeof (object), typeof (CommandReference), new UIPropertyMetadata(null));
+        public static readonly DependencyProperty CommandParameterProperty = DependencyProperty.Register("CommandParameter", typeof(object), typeof(CommandReference), new UIPropertyMetadata(null));

         /// <summary>
         ///     The command property
         /// </summary>
-        public static readonly DependencyProperty CommandProperty = DependencyProperty.Register("Command", typeof (ICommand), typeof (CommandReference), new PropertyMetadata(OnCommandChanged));
+        public static readonly DependencyProperty CommandProperty = DependencyProperty.Register("Command", typeof(ICommand), typeof(CommandReference), new PropertyMetadata(OnCommandChanged));

         #endregion

@@ -31,6 +31,15 @@
         public CommandReference()
         {
         }
+
+        #endregion
+
+        #region Events
+
+        /// <summary>
+        ///     Occurs when changes occur that affect whether or not the command should execute.
+        /// </summary>
+        public event EventHandler CanExecuteChanged;

         #endregion

@@ -93,11 +102,6 @@
             Command.Execute(parameter);
         }

-        /// <summary>
-        ///     Occurs when changes occur that affect whether or not the command should execute.
-        /// </summary>
-        public event EventHandler CanExecuteChanged;
-
         #endregion

         #region Protected Methods
@@ -113,6 +117,17 @@
         protected override Freezable CreateInstanceCore()
         {
             throw new NotImplementedException();
+        }
+
+        /// <summary>
+        ///     Raises the <see cref="E:CanExecuteChanged" /> event.
+        /// </summary>
+        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
+        protected virtual void OnCanExecuteChanged(EventArgs e)
+        {
+            var eventHandler = CanExecuteChanged;
+            if (eventHandler != null)
+                eventHandler(this, e);
         }

         #endregion


added HttpApiError property to HttpApiRequestException

--- src/WebApiDoodle.Net.Http.Client/HttpApiRequestException.cs
+++ src/WebApiDoodle.Net.Http.Client/HttpApiRequestException.cs
@@ -1,9 +1,6 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Net;
 using System.Net.Http;
-using System.Text;

 namespace WebApiDoodle.Net.Http.Client {

@@ -17,6 +14,16 @@
             StatusCode = httpStatusCode;
         }

+        public HttpApiRequestException(
+            string message,
+            HttpStatusCode httpStatusCode,
+            HttpApiError httpError) : base(message) {
+
+            StatusCode = httpStatusCode;
+            HttpError = httpError;
+        }
+
         public HttpStatusCode StatusCode { get; private set; }
+        public HttpApiError HttpError { get; private set; }
     }
 }


Implement ILGenerator on Unix to use System.Console.dll

The System.Console type in mscorlib on Unix is internal and lacks any ability to write out.  As such, System.Reflection.Emit.ILGenerator.EmitWriteLine needs to use the System.Console from System.Console.dll.

--- src/mscorlib/src/System/Reflection/Emit/ILGenerator.cs
+++ src/mscorlib/src/System/Reflection/Emit/ILGenerator.cs
@@ -1174,6 +1174,17 @@
             this.Emit(OpCodes.Throw);
         }

+        private static Type GetConsoleType()
+        {
+#if FEATURE_LEGACYSURFACE
+            return typeof(Console);
+#else
+            return Type.GetType(
+                "System.Console, System.Console, Version=4.0.0.0, Culture=neutral, PublicKeyToken=" + AssemblyRef.MicrosoftPublicKeyToken,
+                throwOnError: true);
+#endif
+        }
+
         public virtual void EmitWriteLine(String value)
         {
             // Emits the IL to call Console.WriteLine with a string.
@@ -1181,7 +1192,7 @@
             Emit(OpCodes.Ldstr, value);
             Type[] parameterTypes = new Type[1];
             parameterTypes[0] = typeof(String);
-            MethodInfo mi = typeof(Console).GetMethod("WriteLine", parameterTypes);
+            MethodInfo mi = GetConsoleType().GetMethod("WriteLine", parameterTypes);
             Emit(OpCodes.Call, mi);
         }

@@ -1198,7 +1209,7 @@
                 throw new ArgumentException(Environment.GetResourceString("InvalidOperation_BadILGeneratorUsage"));
             }

-            MethodInfo prop = typeof(Console).GetMethod("get_Out");
+            MethodInfo prop = GetConsoleType().GetMethod("get_Out");
             Emit(OpCodes.Call, prop);
             Emit(OpCodes.Ldloc, localBuilder);
             Type[] parameterTypes = new Type[1];
@@ -1230,7 +1241,7 @@
             }
             Contract.EndContractBlock();

-            MethodInfo prop = typeof(Console).GetMethod("get_Out");
+            MethodInfo prop = GetConsoleType().GetMethod("get_Out");
             Emit(OpCodes.Call, prop);

             if ((fld.Attributes & FieldAttributes.Static)!=0) {


Incremented patch version

Incremented patch version

in order to indicate that a message of UriFormatException is shown on
the web page.


minor

minor

--- src/biz.dfch.CS.Entity.LifeCycleManager/LifeCycleManager.cs
+++ src/biz.dfch.CS.Entity.LifeCycleManager/LifeCycleManager.cs
@@ -24,11 +24,9 @@

         private IStateMachineConfigLoader _stateMachineConfigLoader;

-        // DFTODO Access entity to change/revert state over an URI passed to the constructor
-        public LifeCycleManager(IStateMachineConfigLoader stateMachineConfigLoader)
+        public LifeCycleManager()
         {
             _stateMachine = new StateMachine.StateMachine();
-            _stateMachineConfigLoader = stateMachineConfigLoader;
             //_stateMachineConfigLoader.LoadConfiguration(typeof(T));
         }
     }


Update MethodBuilder.cs

Update MethodBuilder.cs

--- src/Natasha/Builder/MethodBuilder.cs
+++ src/Natasha/Builder/MethodBuilder.cs
@@ -189,7 +189,6 @@
             if (!Exception.HasError)
             {
                 S @delegate = AssemblyBuilder.GetDelegateFromShortName<S>(_oopHandler.NameScript, NameScript, binder);
-                var a = @delegate.GetHashCode();
                 if (@delegate == null)
                 {
                     Exception = AssemblyBuilder.Exceptions[0];


#208 adding validation for BigInteger unit values

--- src/Nethereum.Util/UnitConversion.cs
+++ src/Nethereum.Util/UnitConversion.cs
@@ -144,13 +144,21 @@
             throw new NotImplementedException();
         }

-        public BigInteger ToWei(decimal amount, BigInteger fromUnit)
+
+        public bool TryValidateUnitValue(BigInteger ethUnit)
+        {
+            if (ethUnit.ToString().Trim('0') == "1") return true;
+            throw new Exception("Invalid unit value, it should be a power of 10 ");
+        }
+
+        private BigInteger ToWei(decimal amount, BigInteger fromUnit)
         {
             return ToWei((BigDecimal)amount, fromUnit);
         }

         public BigInteger ToWei(BigDecimal amount, BigInteger fromUnit)
         {
+            TryValidateUnitValue(fromUnit);
             var bigDecimalFromUnit = new BigDecimal(fromUnit, 0);
             var conversion = amount * bigDecimalFromUnit;
             return conversion.Floor().Mantissa;
@@ -163,19 +171,23 @@

         public BigInteger ToWei(BigDecimal amount, int decimalPlacesFromUnit)
         {
+            if (decimalPlacesFromUnit == 0) ToWei(amount, 1);
             return ToWei(amount, BigInteger.Pow(10, decimalPlacesFromUnit));
         }

+        public BigInteger ToWei(decimal amount, int decimalPlacesFromUnit)
+        {
+            if (decimalPlacesFromUnit == 0) ToWei(amount, 1);
+            return ToWei(amount, BigInteger.Pow(10, decimalPlacesFromUnit));
+        }
+

         public BigInteger ToWei(decimal amount, EthUnit fromUnit = EthUnit.Ether)
         {
             return ToWei(amount, GetEthUnitValue(fromUnit));
         }

-        public BigInteger ToWei(decimal amount, int decimalPlacesFromUnit)
-        {
-            return ToWei(amount, BigInteger.Pow(10, decimalPlacesFromUnit));
-        }
+

         public BigInteger ToWei(BigInteger value, EthUnit fromUnit = EthUnit.Ether)
         {


CancelCommand wrapper ignore OperationCanceledExceptions.

--- src/Nito.Mvvm.Async/CancelCommand.cs
+++ src/Nito.Mvvm.Async/CancelCommand.cs
@@ -107,7 +107,7 @@
         }

         /// <summary>
-        /// Wraps a delegate so that it registers with this cancel command. The delegate is passed the <see cref="CancellationToken"/> of this cancel command.
+        /// Wraps a delegate so that it registers with this cancel command. The delegate is passed the <see cref="CancellationToken"/> of this cancel command. Any <see cref="OperationCanceledException"/> exceptions raised by the delegate are silently ignored.
         /// </summary>
         /// <param name="executeAsync">The cancelable delegate.</param>
         public Func<object, Task> WrapDelegate(Func<object, CancellationToken, Task> executeAsync)
@@ -115,7 +115,16 @@
             return async parameter =>
             {
                 using (StartOperation())
-                    await executeAsync(parameter, CancellationToken);
+                {
+                    try
+                    {
+                        await executeAsync(parameter, CancellationToken);
+                    }
+                    catch (OperationCanceledException)
+                    {
+                        // We cannot use `when (ex.CancellationToken == cancellationToken)` on the catch block because the user delegate may be cancelled by a linked CancellationToken.
+                    }
+                }
             };
         }


Formatting

Formatting

--- src/Polarize/JsonFilterSerializer.cs
+++ src/Polarize/JsonFilterSerializer.cs
@@ -15,12 +15,17 @@
             return typeof(JsonFilter).IsAssignableFrom(objectType);
         }

-        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        public override object ReadJson(
+            JsonReader reader,
+            Type objectType,
+            object existingValue,
+            JsonSerializer serializer)
         {
             throw new NotImplementedException();
         }

-        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        public override void WriteJson(
+            JsonWriter writer, object value, JsonSerializer serializer)
         {
             JsonFilter jsf = (JsonFilter)value;
             if (null == jsf.Fields || jsf.Fields.Length == 0)


some css adjustments

some css adjustments

--- Bddify/Reporters/HtmlReport.cshtml
+++ Bddify/Reporters/HtmlReport.cshtml
@@ -41,19 +41,17 @@

 			#summaryDiv
 			{
-			  height:200px;
+			  height:230px;
 			  margin:5px;
 			  padding:5px;
 			}

 			#resultSummary
 			{
-				float:left;
 			}

 			#coverageSummary
 			{
-				float:left;
 				margin-left:50px;
 			}

@@ -61,10 +59,9 @@
 			{
 			  margin:5px;
 			  padding:5px;
-				float:none;
-			}
-
-			#testResult table
+			}
+
+			#testResult>table
 			{
         background-color:White;
         color:Black;
@@ -130,9 +127,7 @@

 			tr.namespaceResultSummary
 			{
-			    height:20px;
-			    background-color:black;
-			    color:White;
+			    height:17px;
 			}

 			tr.hasException
@@ -178,7 +173,9 @@

 			table.summaryTable
 			{
-				width:250px;
+				width:200px;
+				background-color:#101010;
+				color:#fff;
 				border-collapse:collapse;
 			}

@@ -201,9 +198,14 @@

 			tr.namespace
 			{
+				height:35px;
+				background-color:#303030;
+			}
+
+			table.namespace
+			{
 				background-color:#303030;
 				color:White;
-				height:35px;
 			}

 			tr.step
@@ -254,6 +256,11 @@

+

+
+							      Namespaces
+							      @Model.GroupBy(b => b.Object.GetType().Namespace).Count()
+

                     Passed
@@ -273,26 +280,10 @@

 							      Not Implemented
 							      @Model.Count(b => b.Result == Bddify.Core.StepExecutionResult.NotImplemented)
-

+

 							      Not Executed
-							      @Model.Count(b => b.Result == Bddify.Core.StepExecutionResult.NotExecuted)
-

-

-

-

-
-

-

-

-

-							      Namespaces
-							      @Model.GroupBy(b => b.Object.GetType().Namespace).Count()
-

-

-							      Test Classes
-							      @Model.Count()

@@ -317,7 +308,7 @@
       {

-

+

                       @group.Key


GetChunks switched to internal, should not use because data might not be valid after the call

--- BlobCache/BlobCache/BlobStorage.cs
+++ BlobCache/BlobCache/BlobStorage.cs
@@ -469,7 +469,7 @@
             Dispose();
         }

-        public Task<IReadOnlyList<StorageChunk>> GetChunks()
+        internal Task<IReadOnlyList<StorageChunk>> GetChunks()
         {
             return Task.Run(() =>
             {


Changed default background of surfaces from transparent to black

--- src/SadConsole.Shared/CellSurface.cs
+++ src/SadConsole.Shared/CellSurface.cs
@@ -44,7 +44,7 @@
         /// <summary>
         /// The default background for glyphs on this surface.
         /// </summary>
-        public Color DefaultBackground { get; set; } = Color.Transparent;
+        public Color DefaultBackground { get; set; } = Color.Black;

         /// <summary>
         /// How many cells wide the surface is.
@@ -85,7 +85,7 @@
         }

         /// <summary>
-        /// Creates a new surface with the specified width and height, with <see cref="Color.Transparent"/> for the background and <see cref="Color.White"/> for the foreground.
+        /// Creates a new surface with the specified width and height, with <see cref="Color.Black"/> for the background and <see cref="Color.White"/> for the foreground.
         /// </summary>
         /// <param name="width">The width of the surface in cells.</param>
         /// <param name="height">The height of the surface in cells.</param>
@@ -95,7 +95,7 @@
         }

         /// <summary>
-        /// Creates a new surface with the specified width and height, with <see cref="Color.Transparent"/> for the background and <see cref="Color.White"/> for the foreground.
+        /// Creates a new surface with the specified width and height, with <see cref="Color.Black"/> for the background and <see cref="Color.White"/> for the foreground.
         /// </summary>
         /// <param name="width">The width of the surface in cells.</param>
         /// <param name="height">The height of the surface in cells.</param>
@@ -143,4 +143,4 @@
         /// <returns>An enumerator for <see cref="Cells"/>.</returns>
         System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => Cells.GetEnumerator();
     }
-}+}


Call "clear()" after changing anti-alias filter on/off Call "clear()" after changing anti-alias filter on/off to prefill buffers appropriately.

--- src/SoundTouch.Net/RateTransposer.cs
+++ src/SoundTouch.Net/RateTransposer.cs
@@ -109,6 +109,7 @@
 #if !SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER
             // Disable Anti-alias filter if desirable to avoid click at rate change zero value crossover
             _useAAFilter = newMode;
+            Clear();
 #endif
         }


Change: context menu

Change: context menu

--- src/Taabus/UserInterface/CardView.cs
+++ src/Taabus/UserInterface/CardView.cs
@@ -18,20 +18,20 @@
             _parent = parent;
             AutoSize = true;
             Text = item.Title;
-            Click += (s, e) => OnClick((MouseEventArgs) e);
             _itemFunctions = new[]
             {
                 new UserInteraction("Count", OnGetCount, text: "get count")
             };
+            ContextMenuStrip = CreateContextMenu();
         }

         void OnGetCount() { Text = _item.Title + " " + _item.Count.Format3Digits(); }

-        void OnClick(MouseEventArgs args)
+        ContextMenuStrip CreateContextMenu()
         {
             var menu = new ContextMenuStrip();
             menu.Items.AddRange(_itemFunctions.Select(f => f.MenuItem).ToArray());
-            menu.Show(this, args.X, args.Y);
+            return menu;
         }
     }
 }


Update src/Take.Blip.Builder/FlowManager.cs

Co-Authored-By: nickbom <d38161afe125f7fd79e29e26a98e39ae9741086e@hotmail.com>

--- src/Take.Blip.Builder/FlowManager.cs
+++ src/Take.Blip.Builder/FlowManager.cs
@@ -367,7 +367,7 @@

                     try
                     {
-                        var isValidOutput = await EvaluateConditionCollectionAsync(output.Conditions, lazyInput, context, cancellationToken);
+                         var isValidOutput = await EvaluateConditionsAsync(output.Conditions, lazyInput, context, cancellationToken);

                         if (isValidOutput)
                         {


fixes serialization issue in agent actor

--- src/Thirst.Core/Actors/AgentActor.cs
+++ src/Thirst.Core/Actors/AgentActor.cs
@@ -26,7 +26,7 @@
                     requestedServices = processes.Intersect(m.ServiceNames);
                 }

-                var runningServices = new RunningServices(Environment.MachineName, requestedServices);
+                var runningServices = new RunningServices(Environment.MachineName, requestedServices.ToList());

                 Sender.Tell(runningServices);
             });


Better entry sorting

Better entry sorting

--- CacheViewer/CacheViewer/Program.cs
+++ CacheViewer/CacheViewer/Program.cs
@@ -1,5 +1,4 @@
 using System;
-using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using System.Threading;
@@ -144,10 +143,10 @@
 				Console.Write(column * 22 + 6, 0, ConsoleColor.Gray, "{0}", ch.Name);
 				Console.Write(column * 22 + 0, 1, ConsoleColor.Gray, "{0,5:D}/{1,5:D} {2,3:D}/{3,3:D}", ch.MaxFreeData - ch.SizeFreeData, ch.MaxFreeData, ch.NumUsedEntry, ch.NumMaxEntry);

-				//Array.Sort(entries, 0, numUsedEntry, comparer);
 				int row = 0;
 				foreach (var entry in ch.Entries.Values
-				         .OrderByDescending(x => x.Time)
+				         .OrderByDescending(x => x.Time / 60)
+				         .ThenByDescending(x => x.StartTicks)
 				         .ThenByDescending(x => x.Id))
 				{
 					var color = ConsoleColor.Gray;


Provide a way to get the signature of a Type in the API layer

--- Mapper.cs
+++ Mapper.cs
@@ -372,5 +372,10 @@
 		{
 			this.Name = name;
 		}
+
+		public static string GetSignatureString (Type type)
+		{
+			return Signature.GetSig (type).Value;
+		}
 	}
 }


Add Q191

Add Q191


Added Append(Stringbuilder,int,int) and Append(StringBuilder) overlaod apis (#15786)

Added Append(Stringbuilder,int,int) and Append(StringBuilder) overlaod apis

--- src/mscorlib/shared/System/Text/StringBuilder.cs
+++ src/mscorlib/shared/System/Text/StringBuilder.cs
@@ -423,53 +423,12 @@
             }

             AssertInvariants();
-
-            StringBuilder chunk = this;
-            int sourceEndIndex = startIndex + length;
-
             string result = string.FastAllocateString(length);
-            int curDestIndex = length;
             unsafe
             {
                 fixed (char* destinationPtr = result)
                 {
-                    while (curDestIndex > 0)
-                    {
-                        int chunkEndIndex = sourceEndIndex - chunk.m_ChunkOffset;
-                        if (chunkEndIndex >= 0)
-                        {
-                            chunkEndIndex = Math.Min(chunkEndIndex, chunk.m_ChunkLength);
-
-                            int countLeft = curDestIndex;
-                            int chunkCount = countLeft;
-                            int chunkStartIndex = chunkEndIndex - countLeft;
-                            if (chunkStartIndex < 0)
-                            {
-                                chunkCount += chunkStartIndex;
-                                chunkStartIndex = 0;
-                            }
-                            curDestIndex -= chunkCount;
-
-                            if (chunkCount > 0)
-                            {
-                                // Work off of local variables so that they are stable even in the presence of race conditions
-                                char[] sourceArray = chunk.m_ChunkChars;
-
-                                // Check that we will not overrun our boundaries.
-                                if ((uint)(chunkCount + curDestIndex) <= (uint)length && (uint)(chunkCount + chunkStartIndex) <= (uint)sourceArray.Length)
-                                {
-                                    fixed (char* sourcePtr = &sourceArray[chunkStartIndex])
-                                        string.wstrcpy(destinationPtr + curDestIndex, sourcePtr, chunkCount);
-                                }
-                                else
-                                {
-                                    throw new ArgumentOutOfRangeException(nameof(chunkCount), SR.ArgumentOutOfRange_Index);
-                                }
-                            }
-                        }
-                        chunk = chunk.m_ChunkPrevious;
-                    }
-
+                    this.CopyTo(startIndex, new Span<char>(destinationPtr, length), length);
                     return result;
                 }
             }
@@ -788,6 +747,79 @@
                     return this;
                 }
             }
+        }
+
+        public StringBuilder Append(StringBuilder value)
+        {
+            if (value != null && value.Length != 0)
+            {
+                return AppendCore(value, 0, value.Length);
+            }
+            return this;
+        }
+
+        public StringBuilder Append(StringBuilder value, int startIndex, int count)
+        {
+            if (startIndex < 0)
+            {
+                throw new ArgumentOutOfRangeException(nameof(startIndex), SR.ArgumentOutOfRange_Index);
+            }
+
+            if (count < 0)
+            {
+                throw new ArgumentOutOfRangeException(nameof(count), SR.ArgumentOutOfRange_GenericPositive);
+            }
+
+            if (value == null)
+            {
+                if (startIndex == 0 && count == 0)
+                {
+                    return this;
+                }
+                throw new ArgumentNullException(nameof(value));
+            }
+
+            if (count == 0)
+            {
+                return this;
+            }
+
+            if (count > value.Length - startIndex)
+            {
+                throw new ArgumentOutOfRangeException(nameof(startIndex), SR.ArgumentOutOfRange_Index);
+            }
+
+            return AppendCore(value, startIndex, count);
+        }
+
+        private StringBuilder AppendCore(StringBuilder value, int startIndex, int count)
+        {
+            if (value == this)
+                return Append(value.ToString(startIndex, count));
+
+            int newLength = Length + count;
+
+            if ((uint)newLength > (uint)m_MaxCapacity)
+            {
+                throw new ArgumentOutOfRangeException(nameof(Capacity), SR.ArgumentOutOfRange_Capacity);
+            }
+
+            while (count > 0)
+            {
+                int length = Math.Min(m_ChunkChars.Length - m_ChunkLength, count);
+                if (length == 0)
+                {
+                    ExpandByABlock(count);
+                    length = Math.Min(m_ChunkChars.Length - m_ChunkLength, count);
+                }
+                value.CopyTo(startIndex, new Span<char>(m_ChunkChars, m_ChunkLength, length), length);
+
+                m_ChunkLength += length;
+                startIndex += length;
+                count -= length;
+            }
+
+            return this;
         }

         public StringBuilder AppendLine() => Append(Environment.NewLine);


Switch useless Java InetAddress.GetByName out with HttpClient

--- Connectivity/Droid/Connectivity.cs
+++ Connectivity/Droid/Connectivity.cs
@@ -21,9 +21,9 @@
 using Android.Content;
 using Android.Net;
 using Android.Runtime;
-using Java.Net;
 using MvvmCross.Platform;
 using MvvmCross.Platform.Droid;
+using System.Net.Http;

 namespace Cheesebaron.MvxPlugins.Connectivity.Droid
 {
@@ -49,20 +49,20 @@
                 info.Type == ConnectivityType.Mobile, fireMissiles);
         }

-        public override Task<bool> GetHostReachableAsync(string host, CancellationToken token = default(CancellationToken))
+        private static readonly HttpClient HttpClient = new HttpClient();
+        public override async Task<bool> GetHostReachableAsync(string host,
+            CancellationToken token = default(CancellationToken))
         {
-            return Task.Run(() =>
-            {
-                if (string.IsNullOrEmpty(host))
-                    throw new ArgumentNullException(nameof(host));
+            if (!IsConnected) return false;

-                try {
-                    return InetAddress.GetByName(host).IsReachable(5000);
-                }
-                catch (UnknownHostException) {
-                    return false;
-                }
-            }, token);
+            if (!host.StartsWith("http"))
+                host = "http://" + host;
+
+            HttpClient.DefaultRequestHeaders.Add("User-Agent", "Cheesebaron.MvxPlugins");
+            HttpClient.DefaultRequestHeaders.ConnectionClose = true;
+
+            var response = await HttpClient.GetAsync(host, token).ConfigureAwait(false);
+            return response.IsSuccessStatusCode;
         }
     }


Edited Code

Edited Code

--- ConsoleApp1/ConsoleApp1/Program.cs
+++ ConsoleApp1/ConsoleApp1/Program.cs
@@ -11,6 +11,7 @@
         static void Main(string[] args)
         {
             //Code was edited in GitHub
+            //Code was added in VS
         }
     }
 }


Update Program.cs

Update Program.cs

--- ConsoleApp1/ConsoleApp1/Program.cs
+++ ConsoleApp1/ConsoleApp1/Program.cs
@@ -11,6 +11,7 @@
         static void Main(string[] args)
         {
             // This remark was inserted using GitHub
+            // Another remark inserted using GitHub
         }
     }
 }


Added SwapShape method

Added SwapShape method

--- Core2D/Editor/ProjectExtensions.cs
+++ Core2D/Editor/ProjectExtensions.cs
@@ -382,6 +382,29 @@
             {
                 var builder = layer.Shapes.ToBuilder();
                 builder[index] = shape;
+
+                var previous = layer.Shapes;
+                var next = builder.ToImmutable();
+                project.History.Snapshot(previous, next, (p) => layer.Shapes = p);
+                layer.Shapes = next;
+            }
+        }
+
+        /// <summary>
+        /// Swap shape at specified indexes.
+        /// </summary>
+        /// <param name="project">The project instance.</param>
+        /// <param name="layer">The layer instance.</param>
+        /// <param name="shape">The shape instance.</param>
+        /// <param name="insertIndex">The shape insert index.</param>
+        /// <param name="removeIndex">The shape remove index.</param>
+        public static void SwapShape(this Project project, Layer layer, BaseShape shape, int insertIndex, int removeIndex)
+        {
+            if (layer != null && shape != null && insertIndex >= 0 && removeIndex >= 0)
+            {
+                var builder = layer.Shapes.ToBuilder();
+                builder.Insert(insertIndex, shape);
+                builder.RemoveAt(removeIndex);

                 var previous = layer.Shapes;
                 var next = builder.ToImmutable();


improved reliability

improved reliability

--- AgentService/AgentServiceClass.cs
+++ AgentService/AgentServiceClass.cs
@@ -247,21 +247,28 @@

 		private void EnsurePluginStarted(PluginInfo plugin)
 		{
-			if (plugin.Process != null)
-				return;
-
-			ReportEvent("Start plugin: " + plugin.Name);
-
-			var exePath = Const.GetPluginExePath(plugin.Name);
-			var startInfo = new ProcessStartInfo(exePath)
-				{
-					UseShellExecute = false,
-					RedirectStandardOutput = true,
-					CreateNoWindow = true,
-					RedirectStandardInput = true,
-				};
-			var process = Process.Start(startInfo);
-			plugin.Process = process;
+			try
+			{
+				if (plugin.Process != null)
+					return;
+
+				ReportEvent("Start plugin: " + plugin.Name);
+
+				var exePath = Const.GetPluginExePath(plugin.Name);
+				var startInfo = new ProcessStartInfo(exePath)
+					{
+						UseShellExecute = false,
+						RedirectStandardOutput = true,
+						CreateNoWindow = true,
+						RedirectStandardInput = true,
+					};
+				var process = Process.Start(startInfo);
+				plugin.Process = process;
+			}
+			catch (Exception exc)
+			{
+				Report(exc);
+			}
 		}

 		private void StopPlugin(PluginInfo plugin)


Fix animatedGO field serialization

Fix animatedGO field serialization

--- Animator/Editor/AnimatorEditor.cs
+++ Animator/Editor/AnimatorEditor.cs
@@ -281,11 +281,15 @@
         }

         protected virtual void DrawAnimatedGOField() {
+            serializedObject.Update();
+
             EditorGUILayout.PropertyField(
                 animatedGO,
                 new GUIContent(
                     "Animated Object",
                     "Object to animate."));
+
+            serializedObject.ApplyModifiedProperties();
         }

         protected virtual void DrawAnimationTimeControl() {


LIBOMV-685 : Unblock downloads sooner when packets arrive out of order
Signal when header is received
Use ManualResetEvent instead of Auto since once signaled we never need to wait for the same header again

git-svn-id: e915c4f8b2ea2a6e63cbe989b51c0994a698cc26@3105 52acb1d6-8a22-11de-b505-999d5b087335

--- OpenMetaverse/AssetManager.cs
+++ OpenMetaverse/AssetManager.cs
@@ -196,7 +196,7 @@
         public float Priority;
         public Simulator Simulator;
         public AssetManager.AssetReceivedCallback Callback;
-        internal AutoResetEvent HeaderReceivedEvent = new AutoResetEvent(false);
+        internal ManualResetEvent HeaderReceivedEvent = new ManualResetEvent(false);

         public AssetDownload()
             : base()
@@ -234,7 +234,7 @@
         public int DiscardLevel;
         public float Priority;
         internal int InitialDataSize;
-        internal AutoResetEvent HeaderReceivedEvent = new AutoResetEvent(false);
+        internal ManualResetEvent HeaderReceivedEvent = new ManualResetEvent(false);

         public ImageDownload()
             : base()
@@ -1158,6 +1158,7 @@
                             Helpers.LogLevel.Warning, Client);
                     }
                 }
+                download.HeaderReceivedEvent.Set();
             }
             else
             {


Add deprecation warning for GetInventory

--- ArchiSteamFarm/ArchiWebHandler.cs
+++ ArchiSteamFarm/ArchiWebHandler.cs
@@ -131,6 +131,8 @@
 				return null;
 			}

+			Bot.ArchiLogger.LogGenericWarning(string.Format(Strings.WarningDeprecated, nameof(GetInventory) + " (" + nameof(Plugins) + ")", nameof(GetInventoryAsync)));
+
 			try {
 				return await GetInventoryAsync(steamID, appID, contextID).Where(
 					item =>


Set event time after app time in ThresholdReactorTests

--- test/Seq.App.Thresholds.Tests/ThresholdReactorTests.cs
+++ test/Seq.App.Thresholds.Tests/ThresholdReactorTests.cs
@@ -16,13 +16,11 @@
     public class ThresholdReactorTests
     {
         private Mock<ILogger> _logger;
-        private DateTime _testStartTime;

         [SetUp]
         public void SetUp()
         {
             _logger = new Mock<ILogger>();
-            _testStartTime = Some.UtcTimestamp();
         }

         [Test]
@@ -71,7 +69,7 @@
         }

         [Test]
-        public void when_reset_disabled_and_threshold_exceeded_should_only_3_message()
+        public void when_reset_disabled_and_threshold_exceeded_should_log_only_3_message()
         {
             const int ExpectLogs = 3;
             const int SecondsBetweenLogs = 0;
@@ -118,9 +116,11 @@

         private void SendXEventsNSecondsApart(ISubscribeTo<LogEventData> sut, int numberOfEvents, int secondsBetweenEvents = 0)
         {
+            var firstEventTime = Some.UtcTimestamp();
+
             for (var i = 0; i < numberOfEvents; i++)
             {
-                var eventTime = _testStartTime + TimeSpan.FromSeconds(i * secondsBetweenEvents);
+                var eventTime = firstEventTime + TimeSpan.FromSeconds(i * secondsBetweenEvents);
                 var @event = Some.LogEvent(timestamp: eventTime);
                 sut.On(@event);
             }


Fix CategoryDiscoverer first-chance exception while debugging (#5710)

--- test/TestInfrastructure/TestExtensions/TestCategory.cs
+++ test/TestInfrastructure/TestExtensions/TestCategory.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using Xunit.Abstractions;
@@ -25,6 +25,10 @@

 public class CategoryDiscoverer : ITraitDiscoverer
 {
+    public CategoryDiscoverer(IMessageSink diagnosticMessageSink)
+    {
+    }
+
     public IEnumerable<KeyValuePair<string, string>> GetTraits(IAttributeInfo traitAttribute)
     {
         var ctorArgs = traitAttribute.GetConstructorArguments().ToList();


Remove unused using statements.

Remove unused using statements.

--- test/Wangkanai.Detection.Test/DetectionServiceTests.cs
+++ test/Wangkanai.Detection.Test/DetectionServiceTests.cs
@@ -1,7 +1,6 @@

 using Microsoft.AspNetCore.Http;
 using System;
-using System.IO;
 using Xunit;

 namespace Wangkanai.Detection.Test


re-arrange new api tests to match documentation

--- tests/ServiceStack.OrmLite.Tests/ApiExpressionTests.cs
+++ tests/ServiceStack.OrmLite.Tests/ApiExpressionTests.cs
@@ -44,7 +44,7 @@
             dbCmd = dbConn.CreateCommand();
             dbCmd.CreateTable<Person>(overwrite: true);

-            People.ToList().ForEach(x => dbCmd.Insert(x));
+            //People.ToList().ForEach(x => dbCmd.Insert(x));
         }

         [TearDown]
@@ -55,54 +55,80 @@
         }

         [Test]
-        public void API_Expression_Examples()
-        {
+        public void API_Expression_Examples()
+        {
+            dbCmd.Insert(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27 });
+            Console.WriteLine(dbCmd.GetLastSql());
+
+
+            dbCmd.Update(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age = 27});
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'Jimi',\"LastName\" = 'Hendrix',\"Age\" = 27 WHERE \"Id\" = 1"));
+            Console.WriteLine(dbCmd.GetLastSql());
+
+            dbCmd.Update(new Person { Id = 1, FirstName = "JJ" }, p => p.LastName == "Hendrix");
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"Id\" = 1,\"FirstName\" = 'JJ',\"LastName\" = NULL,\"Age\" = NULL WHERE (\"LastName\" = 'Hendrix')"));
+            Console.WriteLine(dbCmd.GetLastSql());
+
+            dbCmd.Update<Person>(new { FirstName = "JJ" }, p => p.LastName == "Hendrix");
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ' WHERE (\"LastName\" = 'Hendrix')"));
+            Console.WriteLine(dbCmd.GetLastSql());
+
+            dbCmd.UpdateNonDefaults(new Person { FirstName = "JJ" }, p => p.LastName == "Hendrix");
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ' WHERE (\"LastName\" = 'Hendrix')"));
+            Console.WriteLine(dbCmd.GetLastSql());
+
+
+            dbCmd.UpdateOnly(new Person { FirstName = "JJ" }, p => p.FirstName);
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ'"));
+            Console.WriteLine(dbCmd.GetLastSql());
+
+            dbCmd.UpdateOnly(new Person { FirstName = "JJ" }, p => p.FirstName, p => p.LastName == "Hendrix");
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ' WHERE (\"LastName\" = 'Hendrix')"));
+            Console.WriteLine(dbCmd.GetLastSql());
+
+
+            dbCmd.UpdateOnly(new Person { FirstName = "JJ", LastName = "Hendo" }, ev => ev.Update(p => p.FirstName));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ'"));
+            Console.WriteLine(dbCmd.GetLastSql());
+
             dbCmd.UpdateOnly(new Person { FirstName = "JJ" }, ev => ev.Update(p => p.FirstName).Where(x => x.FirstName == "Jimi"));
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ' WHERE (\"FirstName\" = 'Jimi')"));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ' WHERE (\"FirstName\" = 'Jimi')"));
+            Console.WriteLine(dbCmd.GetLastSql());

-            dbCmd.UpdateOnly(new Person { FirstName = "JJ", LastName = "Hendo" }, ev => ev.Update(p => p.FirstName));
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ'"));
-
-            dbCmd.UpdateOnly(new Person { FirstName = "JJ" }, p => p.FirstName, p => p.LastName == "Hendrix");
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ' WHERE (\"LastName\" = 'Hendrix')"));
-
-            dbCmd.UpdateOnly(new Person { FirstName = "JJ" }, p => p.FirstName);
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ'"));
-
-            dbCmd.UpdateNonDefaults(new Person { FirstName = "JJ" }, p => p.LastName == "Hendrix");
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ' WHERE (\"LastName\" = 'Hendrix')"));
-
-            dbCmd.Update(new Person { Id = 1, FirstName = "JJ" }, p => p.LastName == "Hendrix");
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"Id\" = 1,\"FirstName\" = 'JJ',\"LastName\" = NULL,\"Age\" = NULL WHERE (\"LastName\" = 'Hendrix')"));
-
-            dbCmd.Update<Person>(new { FirstName = "JJ" }, p => p.LastName == "Hendrix");
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET \"FirstName\" = 'JJ' WHERE (\"LastName\" = 'Hendrix')"));

             dbCmd.Update<Person>(set: "FirstName = {0}".Params("JJ"), where: "LastName = {0}".Params("Hendrix"));
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET FirstName = 'JJ' WHERE LastName = 'Hendrix'"));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET FirstName = 'JJ' WHERE LastName = 'Hendrix'"));
+            Console.WriteLine(dbCmd.GetLastSql());

             dbCmd.Update(table: "Person", set: "FirstName = {0}".Params("JJ"), where: "LastName = {0}".Params("Hendrix"));
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET FirstName = 'JJ' WHERE LastName = 'Hendrix'"));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("UPDATE \"Person\" SET FirstName = 'JJ' WHERE LastName = 'Hendrix'"));
+            Console.WriteLine(dbCmd.GetLastSql());

             dbCmd.InsertOnly(new Person { FirstName = "Amy" }, ev => ev.Insert(p => new { p.FirstName }));
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("INSERT INTO \"Person\" (\"FirstName\") VALUES ('Amy')"));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("INSERT INTO \"Person\" (\"FirstName\") VALUES ('Amy')"));
+            Console.WriteLine(dbCmd.GetLastSql());

             dbCmd.Delete<Person>(p => p.Age == 27);
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE (\"Age\" = 27)"));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE (\"Age\" = 27)"));
+            Console.WriteLine(dbCmd.GetLastSql());

             dbCmd.Delete<Person>(ev => ev.Where(p => p.Age == 27));
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE (\"Age\" = 27)"));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE (\"Age\" = 27)"));
+            Console.WriteLine(dbCmd.GetLastSql());

             dbCmd.Delete(OrmLiteConfig.DialectProvider.ExpressionVisitor<Person>().Where(p => p.Age == 27));
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE (\"Age\" = 27)"));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE (\"Age\" = 27)"));
+            Console.WriteLine(dbCmd.GetLastSql());

             dbCmd.Delete<Person>(where: "Age = {0}".Params(27));
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE Age = 27"));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE Age = 27"));
+            Console.WriteLine(dbCmd.GetLastSql());

             dbCmd.Delete(table: "Person", where: "Age = {0}".Params(27));
-            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE Age = 27"));
+            Assert.That(dbCmd.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE Age = 27"));
+            Console.WriteLine(dbCmd.GetLastSql());
         }

     }


Bug: Result should provide all categories

--- src/reni2/Feature/FeatureContainer.cs
+++ src/reni2/Feature/FeatureContainer.cs
@@ -35,7 +35,7 @@
                     ? Feature
                     .Function
                     .Result(valueCategory, RootContext.VoidType)
-                    .ReplaceArg(RootContext.VoidType.Result(valueCategory))
+                    .ReplaceArg(RootContext.VoidType.Result(Category.All))
                     : null;

             if(right == null)


The AI now buys colony and platinum if available.

--- Dominion.GameHost/AI/BigMoneyAI.cs
+++ Dominion.GameHost/AI/BigMoneyAI.cs
@@ -10,7 +10,7 @@

         protected override void DiscardCards(int count, GameViewModel currentState)
         {
-            var discardPreference = new List<string> { "Estate", "Duchy", "Province", "Curse", "Copper", "Silver", "Gold" };
+            var discardPreference = new List<string> { "Estate", "Duchy", "Province", "Curse", "Colony", "Copper", "Silver", "Gold", "Platinum" };
             var orderedHand = currentState.Hand
                 .OrderBy(c => discardPreference.IndexOf(c.Name)).ToList();
             var cardIdsToDiscard = orderedHand.Take(count).Select(c => c.Id).ToArray();
@@ -20,9 +20,9 @@

         protected virtual IList<string> GetPriorities(GameViewModel state)
         {
-            var priorities = new List<string> {"Province", "Gold", "Silver", "Copper"};
+            var priorities = new List<string> {"Colony", "Platinum", "Province", "Gold", "Silver", "Copper"};
             if(state.Bank.Single(p => p.Name == "Province").Count < 7)
-                priorities.Insert(1, "Duchy");
+                priorities.Insert(3, "Duchy");

             return priorities;
         }
@@ -45,6 +45,9 @@
             if(pile.Name == "Province")
                 _client.SendChatMessage("Province muthafucka!");

+            if(pile.Name == "Colony")
+                _client.SendChatMessage("COLONY! SUCK IT!");
+
             return new BuyCardMessage(_client.PlayerId, pile.Id);
         }


Workaround for Documentum

Workaround for Documentum

--- DotCMIS/binding/atompub/atompub.cs
+++ DotCMIS/binding/atompub/atompub.cs
@@ -436,7 +436,14 @@

             if (resp.StatusCode != HttpStatusCode.OK)
             {
-                throw ConvertToCmisException(resp);
+//                // Workaround for Documentum, see https://github.com/aegif/CmisSync/issues/607
+//                string documentumWorkaroundUrl = url.ToString().Replace("cmis:path,", "");
+//                resp = HttpUtils.InvokeGET(new UrlBuilder(documentumWorkaroundUrl), Session);
+//
+//                if (resp.StatusCode != HttpStatusCode.OK)
+//                {
+                    throw ConvertToCmisException(resp);
+//                }
             }

             return resp;


Added NameConstraintViolation detection to atompub binding

--- DotCMIS/binding/atompub/atompub.cs
+++ DotCMIS/binding/atompub/atompub.cs
@@ -369,7 +369,12 @@
                 exception = new CmisNotSupportedException(message, errorContent, e);
                 break;
             case HttpStatusCode.Conflict:
-                exception = new CmisConstraintException(message, errorContent, e);
+                if (string.Equals(message, "nameConstraintViolation", StringComparison.OrdinalIgnoreCase)) {
+                    exception = new CmisNameConstraintViolationException(message, errorContent, e);
+                } else {
+                    exception = new CmisConstraintException(message, errorContent, e);
+                }
+
                 break;
             default:
                 exception = new CmisRuntimeException(message, errorContent, e);


fixes wrong name space

fixes wrong name space

--- Examples/Wpf/Home/HomeViewModel.cs
+++ Examples/Wpf/Home/HomeViewModel.cs
@@ -37,6 +37,7 @@
 using Wpf.CartesianChart.StepLine;
 using Wpf.CartesianChart.ThreadSafe;
 using Wpf.CartesianChart.UIElements;
+using Wpf.CartesianChart.ZoomingAndPanning;
 using Wpf.Gauges;
 using Wpf.Maps;
 using Wpf.PieChart;


Fix some rendering fallout from the previous changes.

Since polygon centers were more correctly getting set as "infinity",
this rendering code didn't work.  It needs to use a large finite vector
instead.

--- R3/R3.Core/Drawing/GLUtils.cs
+++ R3/R3.Core/Drawing/GLUtils.cs
@@ -227,7 +227,10 @@
 			// Create our stencil, tracking max/min
 			//

-			Vector3D min = p.Center, max = p.Center;
+			Vector3D cen = p.Center;
+			if( Infinity.IsInfinite( cen ) )
+				cen = Infinity.LargeFiniteVector;
+			Vector3D min = cen, max = cen;

 			// Turn coloring off.
 			GL.ColorMask( false, false, false, false );
@@ -235,7 +238,7 @@
 			GL.PolygonMode( MaterialFace.FrontAndBack, PolygonMode.Fill );
 			GL.Begin( BeginMode.TriangleFan );
 			{
-				GL.Vertex2( p.Center.X, p.Center.Y );
+				GL.Vertex2( cen.X, cen.Y );

 				Vector3D[] edgePoints = p.EdgePoints;
 				for( int i = 0; i < edgePoints.Length; i++ )


cleanup

cleanup

--- Raven.TimeZones/Extensions.cs
+++ Raven.TimeZones/Extensions.cs
@@ -36,8 +36,8 @@
             var point = string.Format(CultureInfo.InvariantCulture, "POINT ({0} {1})", longitude, latitude);

             var results = session.Query<ZoneShape, ZoneShapesIndex>()
-                                .Customize(x => x.RelatesToShape("location", point, SpatialRelation.Intersects))
-                                .ToList();
+                                 .Customize(x => x.RelatesToShape("location", point, SpatialRelation.Intersects))
+                                 .ToList();

             foreach (var x in results)
                 Debug.WriteLine(x.Zone);


changed some string building entrys to string.Format syntax and added translation

--- RelicModManager/MainWindow.cs
+++ RelicModManager/MainWindow.cs
@@ -153,9 +153,11 @@
             //convert the total seconds to mins and seconds
             int actualTimeMins = (int)actualTimeRemain / 60;
             int actualTimeSecs = (int)actualTimeRemain % 60;
-            string downloadStatus = "";
-            downloadStatus = Translations.getTranslatedString("Downloading") + " " + currentModDownloadingShort + " (" + Math.Round(MBytesIn, 1) + " MB" + " of " + Math.Round(MBytesTotal, 1) + " MB)";
-            downloadStatus = downloadStatus + "\n" + totalSpeedLabel + " " + actualTimeMins + " mins " + actualTimeSecs + " secs ";
+            // string downloadStatus = "";
+            // downloadStatus = Translations.getTranslatedString("Downloading") + " " + currentModDownloadingShort + " (" + Math.Round(MBytesIn, 1) + " MB" + " of " + Math.Round(MBytesTotal, 1) + " MB)";
+            // downloadStatus = downloadStatus + "\n" + totalSpeedLabel + " " + actualTimeMins + " mins " + actualTimeSecs + " ";
+            string downloadStatus = string.Format("{0} {1} ({2} MB {3} {4} MB)\n{5} {6} mins {7} secs",
+                Translations.getTranslatedString("Downloading"), currentModDownloadingShort, Math.Round(MBytesIn, 1), Translations.getTranslatedString("of"), Math.Round(MBytesTotal, 1), totalSpeedLabel, actualTimeMins, actualTimeSecs);
             //totalSpeedLabel =
             downloadProgress.Text = downloadStatus;
             //speedLabel.Text = totalSpeedLabel;


added macro "onlineFolder" at startAdress, removed tempOldDownload string and using now userToken at Async donwload for information, changed handling of failed mods downloads

--- RelicModManager/MainWindow.cs
+++ RelicModManager/MainWindow.cs
@@ -56,7 +56,7 @@
         public static List<string> usedFilesList;
         //counter for Utils.exception calls
         public static int errorCounter = 0;
-        string tempOldDownload;
+        // string tempOldDownload; => using userToken at Async download
         private List<Mod> userMods;
         private FirstLoadHelper helper;
         string helperText;
@@ -176,11 +176,21 @@
                 return;
             }
             downloadTimer.Enabled = false;
+            // We must find a way for a localisation, e.g. message on a german system: Der Remoteserver hat einen Fehler zurückgegeben: (500) Interner Serverfehler.
             if (e != null && e.Error != null && e.Error.Message.Equals("The remote server returned an error: (404) Not Found."))
             {
                 //404
-                Utils.AppendToLog(string.Format("ERROR: {0} failed to download", tempOldDownload));
-                MessageBox.Show(string.Format("{0}\n{1}\n\n{2}", Translations.getTranslatedString("failedToDownload_1"), tempOldDownload, Translations.getTranslatedString("failedToDownload_2")));
+                Utils.AppendToLog(string.Format("ERROR: {0} failed to download", Path.GetFileName(e.UserState.ToString())));
+                MessageBox.Show(string.Format("{0}\n{1}\n\n{2}", Translations.getTranslatedString("failedToDownload_1"), Path.GetFileName(e.UserState.ToString()), Translations.getTranslatedString("failedToDownload_2")));
+                Application.Exit();
+            }
+            if (e != null && e.Error != null)
+            {
+                if (Program.testMode)
+                    Utils.ExceptionLog("downloader_DownloadFileCompleted", "downloaded file: " + e.UserState.ToString(), e.Error);
+                else
+                    Utils.ExceptionLog("downloader_DownloadFileCompleted", "downloaded file: " + Path.GetFileName(e.UserState.ToString()), e.Error);
+                MessageBox.Show(string.Format("{0}\n{1}\n\n{2}", Translations.getTranslatedString("failedToDownload_1"), Path.GetFileName(e.UserState.ToString()), Translations.getTranslatedString("failedToDownload_2")));
                 Application.Exit();
             }
             if (downloadQueue.Count != 0)
@@ -204,9 +214,10 @@
                 actualTimeRemain = 0;
                 sw.Reset();
                 sw.Start();
-                downloader.DownloadFileAsync(downloadQueue[0].URL, downloadQueue[0].zipFile);
-                tempOldDownload = Path.GetFileName(downloadQueue[0].zipFile);
-                Utils.AppendToLog("downloading " + tempOldDownload);
+                downloader.DownloadFileAsync(downloadQueue[0].URL, downloadQueue[0].zipFile, downloadQueue[0].URL);
+                // tempOldDownload = Path.GetFileName(downloadQueue[0].zipFile);
+                // Utils.AppendToLog("downloading " + tempOldDownload);
+                Utils.AppendToLog("downloading " + Path.GetFileName(downloadQueue[0].zipFile));
                 currentModDownloading = Path.GetFileNameWithoutExtension(downloadQueue[0].zipFile);
                 if (currentModDownloading.Length >= 200)
                 {
@@ -1074,28 +1085,28 @@
             {
                 if (d.downloadFlag)
                 {
-                    downloadQueue.Add(new DownloadItem(new Uri(d.startAddress + d.dependencyZipFile + d.endAddress), Path.Combine(localFilesDir, d.dependencyZipFile)));
+                    downloadQueue.Add(new DownloadItem(new Uri(Utils.ReplaceMacro(d.startAddress, "onlineFolder", Settings.tanksOnlineFolderVersion) + d.dependencyZipFile + d.endAddress), Path.Combine(localFilesDir, d.dependencyZipFile)));
                 }
             }
             foreach (Dependency d in dependenciesToInstall)
             {
                 if (d.downloadFlag)
                 {
-                    downloadQueue.Add(new DownloadItem(new Uri(d.startAddress + d.dependencyZipFile + d.endAddress), Path.Combine(localFilesDir, d.dependencyZipFile)));
+                    downloadQueue.Add(new DownloadItem(new Uri(Utils.ReplaceMacro(d.startAddress, "onlineFolder", Settings.tanksOnlineFolderVersion) + d.dependencyZipFile + d.endAddress), Path.Combine(localFilesDir, d.dependencyZipFile)));
                 }
             }
             foreach (Dependency d in appendedDependenciesToInstall)
             {
                 if (d.downloadFlag)
                 {
-                    downloadQueue.Add(new DownloadItem(new Uri(d.startAddress + d.dependencyZipFile + d.endAddress), Path.Combine(localFilesDir, d.dependencyZipFile)));
+                    downloadQueue.Add(new DownloadItem(new Uri(Utils.ReplaceMacro(d.startAddress, "onlineFolder", Settings.tanksOnlineFolderVersion) + d.dependencyZipFile + d.endAddress), Path.Combine(localFilesDir, d.dependencyZipFile)));
                 }
             }
             foreach (LogicalDependnecy ld in logicalDependenciesToInstall)
             {
                 if (ld.downloadFlag)
                 {
-                    downloadQueue.Add(new DownloadItem(new Uri(ld.startAddress + ld.dependencyZipFile + ld.endAddress), Path.Combine(localFilesDir, ld.dependencyZipFile)));
+                    downloadQueue.Add(new DownloadItem(new Uri(Utils.ReplaceMacro(ld.startAddress, "onlineFolder", Settings.tanksOnlineFolderVersion) + ld.dependencyZipFile + ld.endAddress), Path.Combine(localFilesDir, ld.dependencyZipFile)));
                 }
             }
             foreach (DatabaseObject dbo in modsConfigsToInstall)
@@ -1103,7 +1114,7 @@
                 if (dbo.downloadFlag)
                 {
                     //crc's don't match, need to re-download
-                    downloadQueue.Add(new DownloadItem(new Uri(dbo.startAddress + dbo.zipFile + dbo.endAddress), Path.Combine(localFilesDir, dbo.zipFile)));
+                    downloadQueue.Add(new DownloadItem(new Uri(Utils.ReplaceMacro(dbo.startAddress, "onlineFolder", Settings.tanksOnlineFolderVersion) + dbo.zipFile + dbo.endAddress), Path.Combine(localFilesDir, dbo.zipFile)));
                 }
             }

@@ -1762,7 +1773,7 @@
             }
             catch (Exception ex)
             {
-                Utils.ExceptionLog("SameDatabaseVersions", "ex", ex);
+                Utils.ExceptionLog("SameDatabaseVersions", ex);
                 return false;
             }
         }


Reacted to the addition of client method invocation

--- samples/EchoConsoleClient/Program.cs
+++ samples/EchoConsoleClient/Program.cs
@@ -7,6 +7,12 @@
     public static void Main(string[] args)
     {
         StartConnectionAsync();
+
+        _connection.On("receiveMessage", (arguments) =>
+        {
+            Console.WriteLine($"{arguments[0]} said: {arguments[1]}");
+        });
+
         Console.ReadLine();
         StopConnectionAsync();
     }


fix SetSelfModified

fix SetSelfModified

--- Signum.Entities/Modifiable.cs
+++ Signum.Entities/Modifiable.cs
@@ -44,7 +44,7 @@

         protected internal virtual void SetSelfModified()
         {
-            modified = ModifiedState.SelfModified;
+            Modified = ModifiedState.SelfModified;
         }

         protected internal virtual void PreSaving(ref bool graphModified)


Delete API.cs

Delete API.cs

Unnecessary

--- SpotifyLocalAPIExample/API.cs
+++ SpotifyLocalAPIExample/API.cs
@@ -1,41 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Runtime.InteropServices;
-
-namespace SpotifyAPI_Example
-{
-    public class API
-    {
-        [DllImport("API.dll", EntryPoint = "API_AddChatMessage", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_AddChatMessage(UInt32 color, string text);
-        [DllImport("API.dll", EntryPoint = "API_GetChatLine", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_GetChatLine(int line, ref String text);
-        [DllImport("API.dll", EntryPoint = "API_BoxCreate", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_BoxCreate(int x, int y, int width, int height, UInt32 color, Boolean show);
-        [DllImport("API.dll", EntryPoint = "API_BoxSetPos", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_BoxSetPos(int id, int x, int y);
-        [DllImport("API.dll", EntryPoint = "API_BoxSetWidth", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_BoxSetWidth(int id, int width);
-        [DllImport("API.dll", EntryPoint = "API_BoxSetHeight", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_BoxSetHeight(int id, int height);
-        [DllImport("API.dll", EntryPoint = "API_BoxSetBorderColor", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_BoxSetBorderColor(int id, UInt32 color);
-        [DllImport("API.dll", EntryPoint = "API_BoxShow", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_BoxShow(int id);
-        [DllImport("API.dll", EntryPoint = "API_DestroyAllVisual", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_DestroyAllVisual();
-        [DllImport("API.dll", EntryPoint = "API_BoxSetColor", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_BoxSetColor(int id, UInt32 color);
-        [DllImport("API.dll", EntryPoint = "API_TextCreate", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_TextCreate(String Font, int size, Boolean italic, Boolean bold, int x, int y, UInt32 color, String text, Boolean show);
-        [DllImport("API.dll", EntryPoint = "API_TextSetString", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_TextSetString(int id, String text);
-        [DllImport("API.dll", EntryPoint = "API_TextSetColor", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_TextSetColor(int id, UInt32 color);
-        [DllImport("API.dll", EntryPoint = "API_TextSetShown", CallingConvention = CallingConvention.Cdecl)]
-        public static extern int API_TextSetShown(int id, Boolean show);
-    }
-}


cleanup

cleanup

--- Staxel.Trace/TraceRecorder.cs
+++ Staxel.Trace/TraceRecorder.cs
@@ -1,14 +1,14 @@
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Drawing;
 using System.Globalization;
 using System.IO;
 using System.Linq;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 using System.Threading;
-using Color = Microsoft.Xna.Framework.Color;
+using Gearset;
+using Microsoft.Xna.Framework;

 namespace Staxel.Trace {
     public class TraceRecorder {
@@ -66,8 +66,8 @@
         [Conditional("TRACE")]
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public static void Enter(TraceKey trace){
-            if(Gearset.Gs.Console != null && Gearset.Gs.Console.Profiler.FrameStarted)
-                Gearset.Gs.Console.BeginMark(trace.Code, new Color(trace.Color.R, trace.Color.G, trace.Color.B));
+            if(Gs.Console != null && Gs.Console.Profiler.FrameStarted)
+                Gs.Console.BeginMark(trace.Code, new Color(trace.Color.R, trace.Color.G, trace.Color.B));
             trace.LiveDuration = Stopwatch.GetTimestamp();
             if (_file == null)
                 return;
@@ -91,8 +91,8 @@
         [Conditional("TRACE")]
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public static void Leave(TraceKey trace){
-            if(Gearset.Gs.Console != null && Gearset.Gs.Console.Profiler.FrameStarted)
-                Gearset.Gs.Console.EndMark(trace.Code);
+            if(Gs.Console != null && Gs.Console.Profiler.FrameStarted)
+                Gs.Console.EndMark(trace.Code);
             trace.LiveDuration = Stopwatch.GetTimestamp() - trace.LiveDuration;
             if (_file == null)
                 return;


[Modify] Polish it

[Modify] Polish it


Improved formatting and alignment when outputing colours.

--- colour.cs
+++ colour.cs
@@ -327,8 +327,8 @@
 							for(int x = 0; x <= 7; ++x)
 							{
 								LCH q = new LCH();
-								q.c = origch.c + v * ((x & 1) == 0 ? 1 : -1);
-								q.l = origch.l + u * (((x >> 1) & 1) == 0 ? 1 : -1);
+								q.c = Math.Max(0, Math.Min(230, origch.c + v * ((x & 1) == 0 ? 1 : -1)));
+								q.l = Math.Max(0, Math.Min(100, origch.l + u * (((x >> 1) & 1) == 0 ? 1 : -1)));
 								q.h = origch.h + t * (((x >> 2) & 1) == 0 ? 1 : -1);
 								while(q.h < 0)
 								{
@@ -994,6 +994,7 @@
 		public readonly LAB lab;
 		public readonly LCH lch;
         public readonly string name;
+		public readonly object spec;

 		public string keyword
 		{
@@ -1061,6 +1062,7 @@
 			lab = new LAB(xyz);
 			lch = new LCH(lab);
 			name = name_ ?? Find(rgb);
+			spec = rgb;
         }

         public override int GetHashCode()
@@ -1092,6 +1094,7 @@
 				lab = new LAB();
 				lch = new LCH();
 				name = name_;
+				spec = null;
 				return;
 			}
 			else if(arg is RGB)
@@ -1103,6 +1106,7 @@
 				lab = new LAB(xyz);
 				lch = new LCH(lab);
 				name = name_ ?? Find(rgb);
+				spec = rgb;
 			}
 			else if(arg is HSL)
 			{
@@ -1113,6 +1117,7 @@
 				lab = new LAB(xyz);
 				lch = new LCH(lab);
 				name = name_ ?? Find(rgb);
+				spec = hsl;
 			}
 			else if(arg is HWB)
 			{
@@ -1123,6 +1128,7 @@
 				lab = new LAB(xyz);
 				lch = new LCH(lab);
 				name = name_ ?? Find(rgb);
+				spec = hwb;
 			}
 			else if(arg is XYZ)
 			{
@@ -1133,6 +1139,7 @@
 				hsl = new HSL(rgb);
 				hwb = new HWB(rgb);
 				name = name_ ?? Find(rgb);
+				spec = xyz;
 			}
 			else if(arg is LAB)
 			{
@@ -1143,6 +1150,7 @@
 				hsl = new HSL(rgb);
 				hwb = new HWB(rgb);
 				name = name_ ?? Find(rgb);
+				spec = lab;
 			}
 			else if(arg is LCH)
 			{
@@ -1153,6 +1161,7 @@
 				hsl = new HSL(rgb);
 				hwb = new HWB(rgb);
 				name = name_ ?? Find(rgb);
+				spec = lch;
 			}
 			else
 			{
@@ -1165,6 +1174,7 @@
 					lab = new LAB(xyz);
 					lch = new LCH(lab);
 					name = name_ ?? Find(rgb);
+					spec = rgb;
 				}
 				else if(HSL.TryParse(input, out hsl))
 				{
@@ -1174,6 +1184,7 @@
 					lab = new LAB(xyz);
 					lch = new LCH(lab);
 					name = name_ ?? Find(rgb);
+					spec = hsl;
 				}
 				else if(HWB.TryParse(input, out hwb))
 				{
@@ -1183,6 +1194,7 @@
 					lab = new LAB(xyz);
 					lch = new LCH(lab);
 					name = Find(rgb);
+					spec = hwb;
 				}
 				else if(XYZ.TryParse(input, out xyz))
 				{
@@ -1192,6 +1204,7 @@
 					hsl = new HSL(rgb);
 					hwb = new HWB(rgb);
 					name = name_ ?? Find(rgb);
+					spec = xyz;
 				}
 				else if(LAB.TryParse(input, out lab))
 				{
@@ -1201,6 +1214,7 @@
 					hsl = new HSL(rgb);
 					hwb = new HWB(rgb);
 					name = name_ ?? Find(rgb);
+					spec = lab;
 				}
 				else if(LCH.TryParse(input, out lch))
 				{
@@ -1210,6 +1224,7 @@
 					hsl = new HSL(rgb);
 					hwb = new HWB(rgb);
 					name = name_ ?? Find(rgb);
+					spec = lch;
 				}
 				else
 				{
@@ -1225,6 +1240,7 @@
 							lab = c.lab;
 							lch = c.lch;
 							name = name_ ?? c.name;
+							spec = input ?? string.Empty;
 							return;
 						}
 					}
@@ -1387,8 +1403,51 @@
 		}

 #if COLOUR_INCLUDE_MAIN
-	static string format(Colour c, string TAB = "\t", string NL = "")
+	static string pad(string s, int width = 36)
 	{
+		if(s.Length < width)
+		{
+			return s + new string(' ', width - s.Length);
+		}
+		else
+		{
+			return s;
+		}
+	}
+	static string format(Colour c, object spec, string TAB = "    ", string NL = "")
+	{
+		RGB? rgbspec = null;
+		XYZ? xyzspec = null;
+		LAB? labspec = null;
+		LCH? lchspec = null;
+		if(spec is LCH)
+		{
+			lchspec = (LCH) spec;
+			labspec = lchspec.Value.ToLAB();
+			xyzspec = labspec.Value.ToXYZ();
+			rgbspec = xyzspec.Value.ToRGB();
+		}
+		else if(spec is LAB)
+		{
+			labspec = (LAB) spec;
+			lchspec = new LCH(labspec.Value);
+			xyzspec = labspec.Value.ToXYZ();
+			rgbspec = xyzspec.Value.ToRGB();
+		}
+		else if(spec is XYZ)
+		{
+			xyzspec = (XYZ) spec;
+			labspec = new LAB(xyzspec.Value);
+			lchspec = new LCH(labspec.Value);
+			rgbspec = xyzspec.Value.ToRGB();
+		}
+		else if(spec is RGB)
+		{
+			rgbspec = (RGB) spec;
+			xyzspec = new XYZ(rgbspec.Value);
+			labspec = new LAB(xyzspec.Value);
+			lchspec = new LCH(labspec.Value);
+		}
 		StringBuilder buf = new StringBuilder();
 		buf.Append(TAB);
 		buf.Append(c.rgb.ToHexString());
@@ -1397,25 +1456,86 @@
 		buf.Append(c.rgb.ToDecimalString());
 		buf.Append(NL);
 		buf.Append(TAB);
-		buf.Append(c.rgb.ToPercentageString());
-		buf.Append(NL);
-		buf.Append(TAB);
 		buf.Append(c.hsl.ToString());
 		buf.Append(NL);
 		buf.Append(TAB);
 		buf.Append(c.hwb.ToString());
 		buf.Append(NL);
 		buf.Append(TAB);
-		buf.Append("D65: ");
-		buf.Append(c.xyz.ToString());
-		buf.Append(", D50: ");
-		buf.Append(c.xyz.ToD50().ToString());
+		if(rgbspec.HasValue)
+		{
+			buf.Append(pad(c.rgb.ToPercentageString()));
+			double[] d = c.rgb % rgbspec.Value;
+			double D = c.rgb - rgbspec.Value;
+			buf.Append(TAB);
+			buf.Append(pad(string.Format(CultureInfo.InvariantCulture,
+				"[R{0:\"+\"0.000;\"-\"0.###}%,G{1:\"+\"0.###;\"-\"0.###}%,B{2:\"+\"0.###;\"-\"0.###}%]",
+				d[0] * 100, d[1] * 100, d[2] * 100
+			)));
+			buf.Append(TAB);
+			buf.Append(string.Format(CultureInfo.InvariantCulture,
+				"±{0:0.###}",
+				D
+			));
+		}
+		else
+		{
+			buf.Append(c.rgb.ToPercentageString());
+		}
 		buf.Append(NL);
 		buf.Append(TAB);
-		buf.Append(c.lab.ToString());
+		if(xyzspec.HasValue)
+		{
+			buf.Append(pad(c.xyz.ToString()));
+			buf.Append(TAB);
+			double[] d = c.xyz % xyzspec.Value;
+			buf.Append(string.Format(CultureInfo.InvariantCulture,
+				"[X{0:\"+\"0.000;\"-\"0.###},Y{1:\"+\"0.###;\"-\"0.###},Z{2:\"+\"0.###;\"-\"0.###}]",
+				d[0], d[1], d[2]
+			));
+		}
+		else
+		{
+			buf.Append(c.xyz.ToString());
+		}
 		buf.Append(NL);
 		buf.Append(TAB);
-		buf.Append(c.lch.ToString());
+		if(labspec.HasValue)
+		{
+			buf.Append(pad(c.lab.ToString()));
+			double[] d = c.lab % labspec.Value;
+			double D = c.lab - labspec.Value;
+			buf.Append(TAB);
+			buf.Append(pad(string.Format(CultureInfo.InvariantCulture,
+				"[L*{0:\"+\"0.000;\"-\"0.###},a*{1:\"+\"0.###;\"-\"0.###},b*{2:\"+\"0.###;\"-\"0.###}]",
+				d[0], d[1], d[2]
+			)));
+			buf.Append(TAB);
+			buf.Append(string.Format(CultureInfo.InvariantCulture,
+				"±{0:0.###}",
+				D
+			));
+		}
+		else
+		{
+			buf.Append(c.lab.ToString());
+		}
+		buf.Append(NL);
+		buf.Append(TAB);
+		if(lchspec.HasValue)
+		{
+			buf.Append(pad(c.lch.ToString()));
+			buf.Append(TAB);
+			double[] d = c.lch % lchspec.Value;
+			buf.Append(pad(string.Format(CultureInfo.InvariantCulture,
+				"[L*{0:\"+\"0.000;\"-\"0.###},C*{1:\"+\"0.###;\"-\"0.###},h°{2:\"+\"0.###;\"-\"0.###}]",
+				d[0], d[1], d[2]
+			)));
+		}
+		else
+		{
+			buf.Append(c.lch.ToString());
+		}
 		if(!string.IsNullOrWhiteSpace(c.name))
 		{
 			buf.Append(NL);
@@ -1426,23 +1546,30 @@
 		{
 			buf.Append(NL);
 			buf.Append(TAB);
-			buf.Append("Nearest standard colour: ");
 			Colour a = c.Approximate();
 			double[] d = a.lch % c.lch;
 			double D = a.lab - c.lab;
+			buf.Append(pad(string.Format(CultureInfo.InvariantCulture,
+				"≅ {0} ({1})",
+				a.keyword,
+				a.rgb.ToString()
+			)));
+			buf.Append(TAB);
+			buf.Append(pad(string.Format(CultureInfo.InvariantCulture,
+				"[L*{0:\"+\"0.###;\"-\"0.###},C*{1:\"+\"0.###;\"-\"0.###},h°{2:\"+\"0.###;\"-\"0.###}]",
+				d[0], d[1], d[2]
+			)));
+			buf.Append(TAB);
 			buf.Append(string.Format(CultureInfo.InvariantCulture,
-				"{0} ({1}) [L{2:\"+\"0.000;\"-\"0.000},C{3:\"+\"0.000;\"-\"0.000},H{4:\"+\"0.000;\"-\"0.000}] Lab±{5:0.000}",
-				a.rgb.ToString(),
-				a.keyword,
-				d[0], d[1], d[2],
+				"±{0:0.###}",
 				D
 			));
 		}
 		return buf.ToString();
 	}
-	static void print(string a, Colour c, string TAB = "\t", string NL1 = "\n", string NL2 = "\n")
+	static void print(string a, Colour c, object spec, string TAB = "    ", string NL1 = "\n", string NL2 = "\n")
 	{
-		Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0}:{1}{2}", a, NL1, format(c, TAB, NL2)));
+		Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0}:{1}{2}", a, NL1, format(c, spec, TAB, NL2)));
 	}
 	static readonly string[] Unclipped = new string[]{ "/unclip", "/unclipped", "--unclip", "--unclipped", "-u", "/u" };
 	static readonly string[] Fixed = new string[]{ "/fix", "/fixed", "--fix", "--fixed", "-f", "/f" };
@@ -1517,12 +1644,14 @@
             {
 				try
 				{
-	                Colour c = rectify(new Colour(a, null), clip, fix);
-					print(a, c);
+					Colour cs = new Colour(a, null);
+	                Colour c = rectify(cs, clip, fix);
+					print(a, c, cs.rgb.IsValid ? null : cs.spec);
 	                bool pc = true;
 	                if (op == '+')
 	                {
-	                    current = rectify(Colour.Interpolate(current.Value, c, q), clip, fix);
+						cs = Colour.Interpolate(current.Value, c, q);
+	                    current = rectify(cs, clip, fix);
 	                    q = double.NaN;
 	                    op = '\0';
 	                }
@@ -1533,7 +1662,7 @@
 	                }
 	                if (pc)
 	                {
-						print(pop, current.Value);
+						print(pop, current.Value, cs.rgb.IsValid ? null : cs.spec);
 	                }
 				}
 				catch(Exception e)


Win conditions can now be checked

Win conditions can now be checked


Made the zoom more smoothly

Made the zoom more smoothly


Improve texture evaluation through better du and dv usage.

This is necessary to properly evaluate textures that have
huge images assigned. Without the proper du and dv high
resolution images will become very blocky.

#RH-34377


agrego de script

agrego de script

--- Assets/Script/ButtonController.cs
+++ Assets/Script/ButtonController.cs
@@ -40,6 +40,11 @@
 		} else if (nextScreen == ScreenToGo.AR_SCREEN) {
 			Application.LoadLevel("0.2AR");
 		}
+
+		if (previousScreen == ScreenToGo.PLAYERS) {
+			deactivate.SetActive (false);
+			activate.SetActive (true);
+		}
 	}

 }


Disable JobPanel SE after decided

Disable JobPanel SE after decided

--- Assets/Scripts/Canvas/JobPanel.cs
+++ Assets/Scripts/Canvas/JobPanel.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
+using UnityEngine.EventSystems;

 namespace Bunashibu.Kikan {
   public class JobPanel : Photon.MonoBehaviour {
@@ -55,7 +56,6 @@

       int team = (int)PhotonNetwork.player.CustomProperties["Team"];
       photonView.RPC("SyncDecideRPC", PhotonTargets.All, _curPick, team);
-      _decideButton.interactable = false;
       DisableAllButtons();
     }

@@ -68,13 +68,23 @@
     }

     private void EnableAllButtons() {
-      foreach (Button button in _buttons)
+      foreach (Button button in _buttons) {
         button.interactable = true;
+        button.gameObject.GetComponent<EventTrigger>().enabled = true;
+      }
+
+      _decideButton.interactable = true;
+      _decideButton.gameObject.GetComponent<EventTrigger>().enabled = true;
     }

     private void DisableAllButtons() {
-      foreach (Button button in _buttons)
+      foreach (Button button in _buttons) {
         button.interactable = false;
+        button.gameObject.GetComponent<EventTrigger>().enabled = false;
+      }
+
+      _decideButton.interactable = false;
+      _decideButton.gameObject.GetComponent<EventTrigger>().enabled = false;
     }

     [SerializeField] private StartUpInstantiator _instantiator;


Adds score window.

Adds score window.

--- Assets/Scripts/LevelController.cs
+++ Assets/Scripts/LevelController.cs
@@ -2,6 +2,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;

 public class LevelController : MonoBehaviour
 {
@@ -156,4 +157,21 @@
             }
         }
     }
+
+    public int CurrentScore (WorldState state)
+    {
+        Dictionary<IslandComponent, int> population = new Dictionary<IslandComponent, int> ();
+        foreach (CharacterComponent character in state.characters) {
+            int lastPopulation = 0;
+            population.TryGetValue (character.island, out lastPopulation);
+            population.Add (character.island, lastPopulation + 1);
+        }
+        return population.Values.Max ();
+    }
+
+    public void OnGUI ()
+    {
+        WorldState state = this.FindState ();
+        GUI.Box (new Rect (10, 10, 200, 25), String.Format ("Current Score: {0}", this.CurrentScore (state)));
+    }
 }


Allow camera frustum to say active on the screen by clicking on it Add parallel line near frustrum

--- Assets/Scripts/Room/RoomLoader.cs
+++ Assets/Scripts/Room/RoomLoader.cs
@@ -133,12 +133,6 @@
 					box.gameObject.SetActive(showcolliders && (showallrooms || currentRoom));
 					box.Alpha = (byte)((showallroomstransparent && !currentRoom) ? 40 : 255);
 				}
-
-				if (box.name == "Camera")
-				{
-					var camera = box.transform.GetChild(0).gameObject.GetComponent<Box>();
-					camera.gameObject.SetActive(box.HighLight && ShowAdditionalInfo.BoolValue);
-				}
 			}
 			roomIndex++;
 		}
@@ -530,8 +524,7 @@
 					HighLightedBox.HighLight = false;
 					if(HighLightedBox.name == "Camera")
 					{
-						HighLightedBox.GetComponent<Renderer>().sharedMaterial.renderQueue = 3000;
-						SetCameraVisibility(HighLightedBox, false);
+						HighLightedBox.GetComponent<Renderer>().sharedMaterial.renderQueue = 3000;
 					}
 				}

@@ -540,7 +533,6 @@
 				if(box.name == "Camera")
 				{
 					box.GetComponent<Renderer>().sharedMaterial.renderQueue = 3500;
-					SetCameraVisibility(box, true);
 				}

 				HighLightedBox = box;
@@ -560,7 +552,6 @@
 		}
 		else if (HighLightedBox != null)
 		{
-			SetCameraVisibility(HighLightedBox, false);
 			HighLightedBox.HighLight = false;
 			HighLightedBox = null;
 			BoxInfo.Clear(true);
@@ -576,11 +567,14 @@
 		{
 			if (SelectedBox != HighLightedBox)
 			{
+				SetCameraVisibility(SelectedBox, false);
+				SetCameraVisibility(HighLightedBox, true);
 				SelectedBox = HighLightedBox;
 				SelectedBoxId = HighLightedBox.ID;
 			}
 			else
 			{
+				SetCameraVisibility(SelectedBox, false);
 				SelectedBox = null;
 				defaultBoxSelectionTimer.Restart();
 			}
@@ -588,6 +582,7 @@

 		if (!DosBoxEnabled)
 		{
+			SetCameraVisibility(SelectedBox, false);
 			SelectedBox = null;
 		}

@@ -801,7 +796,6 @@

 			case KeyCode.E:
 				ShowAdditionalInfo.BoolValue = !ShowAdditionalInfo.BoolValue;
-				SetRoomObjectsVisibility(room);
 				break;

 			case KeyCode.Mouse2:
@@ -905,10 +899,10 @@

 	void SetCameraVisibility(Box box, bool visible)
 	{
-		if (box.name == "Camera")
+		if (box != null && box.name == "Camera")
 		{
 			var camera = box.transform.GetChild(0).gameObject.GetComponent<Box>();
-			camera.gameObject.SetActive(visible && ShowAdditionalInfo.BoolValue);
+			camera.gameObject.SetActive(visible && DosBoxEnabled);
 		}
 	}

@@ -962,6 +956,7 @@
 		addLine(quad[5], quad[6]);
 		addLine(quad[6], quad[7]);
 		addLine(quad[7], quad[4]);
+		addLine(new Vector3(-500.0f, 0.0f, 0.0f), new Vector3(500.0f, 0.0f, 0.0f));

 		Mesh mesh = new Mesh();
 		mesh.vertices = vertices.ToArray();


Download game's image and save it to install directory.

--- Assets/Scripts/System/GameSync.cs
+++ Assets/Scripts/System/GameSync.cs
@@ -105,6 +105,18 @@

                         //Starts the unzip coroutine and waits till it's done
                         zip.ExtractZip(zipFile, game.installDirectory, null);
+
+
+                        // Download the image
+                        WWW imageDownload = new WWW(game.imageURL);
+                        while (!imageDownload.isDone) {
+                            SyncText("Downloading cover image");
+                            yield return null;
+                        }
+
+                        System.Uri uri = new System.Uri(game.imageURL);
+                        string imageFilename = Path.GetFileName(uri.AbsolutePath);
+                        File.WriteAllBytes(game.installDirectory + "/" + imageFilename, imageDownload.bytes);

                         game.writeMetadataFile();
                         File.Delete(zipFile);
@@ -268,7 +280,6 @@
             Debug.Log("writing to " + filename + ": " + installationMetadata.ToString());
             System.IO.File.WriteAllText(filename, installationMetadata.ToString());
         }
-
     }
 }


hotfix: fix object null behaviour

hotfix: fix object null behaviour

--- Assets/src/Gestures/Classifier.cs
+++ Assets/src/Gestures/Classifier.cs
@@ -60,7 +60,7 @@
                     newGesture = null;
                     break;
             }
-			if (_activeGestureSequence.GetType() == newGesture)
+			if (_activeGestureSequence != null && _activeGestureSequence.GetType() == newGesture)
 				newGesture = null;

             _activeGestureSequence = _gestures.Find(g => g.GetType() == newGesture);
@@ -69,7 +69,8 @@
         // Update is called once per frame
         private void Update()
         {
-            _activeGestureSequence.Update();
+			if (_activeGestureSequence != null)
+	            _activeGestureSequence.Update();
         }
     }
 }


[Core] Issue #58. Relative path documentation

--- Bam.Core/RelativePathUtilities.cs
+++ Bam.Core/RelativePathUtilities.cs
@@ -29,8 +29,16 @@
 #endregion // License
 namespace Bam.Core
 {
+    /// <summary>
+    /// Static utility class to convert paths to relative paths.
+    /// </summary>
     public static class RelativePathUtilities
     {
+        /// <summary>
+        /// Is the specified path absolute?
+        /// </summary>
+        /// <returns><c>true</c> if is path absolute the specified path; otherwise, <c>false</c>.</returns>
+        /// <param name="path">Path.</param>
         public static bool
         IsPathAbsolute(
             string path)
@@ -40,6 +48,12 @@
             return isAbsolute;
         }

+        /// <summary>
+        /// Get a relative path between two URIs.
+        /// </summary>
+        /// <returns>The path.</returns>
+        /// <param name="pathUri">Path URI.</param>
+        /// <param name="relativeToUri">Relative to URI.</param>
         public static string
         GetPath(
             System.Uri pathUri,
@@ -48,6 +62,13 @@
             return GetPath(pathUri, relativeToUri, null);
         }

+        /// <summary>
+        /// Get a relative path between two URIs.
+        /// </summary>
+        /// <returns>The path.</returns>
+        /// <param name="pathUri">Path URI.</param>
+        /// <param name="relativeToUri">Relative to URI.</param>
+        /// <param name="relativePrefix">Relative prefix.</param>
         public static string
         GetPath(
             System.Uri pathUri,
@@ -76,6 +97,13 @@
             }
         }

+        /// <summary>
+        /// Get a relative path between a string and a URI.
+        /// </summary>
+        /// <returns>The path.</returns>
+        /// <param name="path">Path.</param>
+        /// <param name="relativeToUri">Relative to URI.</param>
+        /// <param name="relativePrefix">Relative prefix.</param>
         public static string
         GetPath(
             string path,
@@ -98,6 +126,12 @@
             return GetPath(pathUri, relativeToUri, relativePrefix);
         }

+        /// <summary>
+        /// Get a relative path.
+        /// </summary>
+        /// <returns>The path.</returns>
+        /// <param name="path">Path.</param>
+        /// <param name="relativeToUri">Relative to URI.</param>
         public static string
         GetPath(
             string path,
@@ -106,6 +140,13 @@
             return GetPath(path, relativeToUri, null);
         }

+        /// <summary>
+        /// Get a relative path between two strings.
+        /// </summary>
+        /// <returns>The path.</returns>
+        /// <param name="path">Path.</param>
+        /// <param name="relativeToString">Relative to string.</param>
+        /// <param name="relativePrefix">Relative prefix.</param>
         public static string
         GetPath(
             string path,
@@ -117,6 +158,12 @@
             return relativePath;
         }

+        /// <summary>
+        /// Get a relative path between two strings.
+        /// </summary>
+        /// <returns>The path.</returns>
+        /// <param name="path">Path.</param>
+        /// <param name="relativeToString">Relative to string.</param>
         public static string
         GetPath(
             string path,
@@ -127,6 +174,11 @@
             return relativePath;
         }

+        /// <summary>
+        /// Get a path relative to the working directory.
+        /// </summary>
+        /// <returns>The relative path absolute to working dir.</returns>
+        /// <param name="relativePath">Relative path.</param>
         public static string
         MakeRelativePathAbsoluteToWorkingDir(
             string relativePath)
@@ -134,6 +186,12 @@
             return MakeRelativePathAbsoluteTo(relativePath, Graph.Instance.ProcessState.WorkingDirectory);
         }

+        /// <summary>
+        /// Get a relative path.
+        /// </summary>
+        /// <returns>The relative path absolute to.</returns>
+        /// <param name="relativePath">Relative path.</param>
+        /// <param name="basePath">Base path.</param>
         public static string
         MakeRelativePathAbsoluteTo(
             string relativePath,
@@ -156,6 +214,12 @@
             return absolutePath;
         }

+        /// <summary>
+        /// Find the common root path between two paths.
+        /// </summary>
+        /// <returns>The common root.</returns>
+        /// <param name="path1">Path1.</param>
+        /// <param name="path2">Path2.</param>
         public static string
         GetCommonRoot(
             string path1,


LDLTSolve progressing.

LDLTSolve progressing.

--- BepuUtilities/Symmetric6x6Wide.cs
+++ BepuUtilities/Symmetric6x6Wide.cs
@@ -71,5 +71,51 @@
             result1.Y = v0.X * m.B.X.Y + v0.Y * m.B.Y.Y + v0.Z * m.B.Z.Y + v1.X * m.D.YX + v1.Y * m.D.YY + v1.Z * m.D.ZY;
             result1.Z = v0.X * m.B.X.Z + v0.Y * m.B.Y.Z + v0.Z * m.B.Z.Z + v1.X * m.D.ZX + v1.Y * m.D.ZY + v1.Z * m.D.ZZ;
         }
+
+        /// <summary>
+        /// Solves [vLower, vUpper] = [resultLower, resultUpper] * [[a, b], [bT, d]] for [resultLower, resultUpper] using LDLT decomposition.
+        /// [[a, b], [bT, d]] should be positive semidefinite.
+        /// </summary>
+        /// <param name="v0">First 3 values of the 6 component input vector.</param>
+        /// <param name="v1">Second 3 values of the 6 component input vector.</param>
+        /// <param name="a">Upper left 3x3 region of the matrix.</param>
+        /// <param name="b">Upper right 3x3 region of the matrix. Also the lower left 3x3 region of the matrix, transposed.</param>
+        /// <param name="d">Lower right 3x3 region of the matrix.</param>
+        /// <param name="result0">First 3 values of the result vector.</param>
+        /// <param name="result1">Second 3 values of the result vector.</param>
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public static void LDLTSolve(
+            in Vector3Wide v0, in Vector3Wide v1, in Symmetric3x3Wide a, in Matrix3x3Wide b, in Symmetric3x3Wide d, out Vector3Wide result0, out Vector3Wide result1)
+        {
+            var d1 = a.XX;
+            var inverseD1 = Vector<float>.One / d1;
+            var l21 = inverseD1 * a.YX;
+            var l31 = inverseD1 * a.ZX;
+            var l41 = inverseD1 * b.X.X;
+            var l51 = inverseD1 * b.X.Y;
+            var l61 = inverseD1 * b.X.Z;
+            var d2 = a.YY - l21 * l21;
+            var inverseD2 = Vector<float>.One / d2;
+            var l32 = inverseD2 * (a.ZY - l31 * l21 * d1);
+            var l42 = inverseD2 * (b.Y.X - l41 * l21 * d1);
+            var l52 = inverseD2 * (b.Y.Y - l51 * l21 * d1);
+            var l62 = inverseD2 * (b.Y.Z - l61 * l21 * d1);
+            var d3 = a.ZZ - l31 * l31 * d1 - l32 * l32 * d2;
+            var inverseD3 = Vector<float>.One / d3;
+            var l43 = inverseD3 * (b.Z.X - l41 * l31 * d1 - l42 * l32 * d2);
+            var l53 = inverseD3 * (b.Z.Y - l51 * l31 * d1 - l52 * l32 * d2);
+            var l63 = inverseD3 * (b.Z.Y - l61 * l31 * d1 - l62 * l32 * d2);
+            var d4 = d.XX - l41 * l41 * d1 - l42 * l42 * d2 - l43 * l43 * d3;
+            var inverseD4 = Vector<float>.One / d4;
+            var l54 = inverseD4 * (d.YX - l51 * l41 * d1 - l52 * l42 * d2 - l53 * l43 * d3);
+            var l64 = inverseD4 * (d.ZX - l61 * l41 * d1 - l62 * l42 * d2 - l63 * l43 * d3);
+            var d5 = d.YY - l51 * l51 * d1 - l52 * l52 * d2 - l53 * l53 * d3 - l54 * l54 * d4;
+            var inverseD5 = Vector<float>.One / d5;
+            var l65 = inverseD5 * (d.ZY - l61 * l51 * d1 - l62 * l52 * d2 - l63 * l53 * d3 - l64 * l54 * d4);
+            var d6 = d.ZZ - l61 * l61 * d1 - l62 * l62 * d2 - l63 * l63 * d3 - l64 * l64 * d4 - l65 * l65 * d5;
+            var inverseD6 = Vector<float>.One / d6;
+
+            //We now have the components of L and D, so substitute.
+        }
     }
 }