Permissions module: replace some GenericObjectPermission by GenericObjectPermission on some checks. Note that in some cases behavour is now diferent.

--- OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -728,7 +728,6 @@
                 return returnMask;
             }

-
             UUID taskOwnerID = task.OwnerID;
             UUID spID = sp.UUID;

@@ -878,16 +877,14 @@
         /// <param name="objId">This is a scene object group UUID</param>
         /// <param name="denyOnLocked"></param>
         /// <returns></returns>
-        protected uint GetObjectPermissions(UUID currentUser, UUID objId, bool denyOnLocked)
-        {
-            SceneObjectPart part = m_scene.GetSceneObjectPart(objId);
-            if (part == null)
+        protected uint GetObjectPermissions(UUID currentUser, SceneObjectGroup group, bool denyOnLocked)
+        {
+            if (group == null)
                 return 0;

             if (IsAdministrator(currentUser))
                 return (uint)PermissionMask.AllEffective;

-            SceneObjectGroup group = part.ParentGroup;
             SceneObjectPart root = group.RootPart;
             if (root == null)
                 return 0;
@@ -1193,29 +1190,13 @@
             DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
             if (m_bypassPermissions) return m_bypassPermissionsValue;

-            if (!GenericObjectPermission(owner, objectID, true))
-            {
-                //They can't even edit the object
-                return false;
-            }
-
-            SceneObjectPart part = scene.GetSceneObjectPart(objectID);
-            if (part == null)
-                return false;
-
-            if (part.OwnerID == owner)
-            {
-                if ((part.OwnerMask & PERM_COPY) == 0)
-                    return false;
-            }
-            else if (part.GroupID != UUID.Zero)
-            {
-                if ((part.OwnerID == part.GroupID) && ((owner != part.LastOwnerID) || ((part.GroupMask & PERM_TRANS) == 0)))
-                    return false;
-
-                if ((part.GroupMask & PERM_COPY) == 0)
-                    return false;
-            }
+            SceneObjectGroup sog = scene.GetGroupByPrim(objectID);
+            if (sog == null)
+                return false;
+
+            uint perms = GetObjectPermissions(owner, sog, false);
+            if((perms & (uint)PermissionMask.Copy) == 0)
+                return false;

             //If they can rez, they can duplicate
             return CanRezObject(objectCount, owner, objectPosition, scene);
@@ -1226,7 +1207,14 @@
             DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
             if (m_bypassPermissions) return m_bypassPermissionsValue;

-            return GenericObjectPermission(deleter, objectID, false);
+            SceneObjectGroup sog = scene.GetGroupByPrim(objectID);
+            if (sog == null)
+                return false;
+
+            uint perms = GetObjectPermissions(deleter, sog, false);
+            if((perms & (uint)PermissionMask.Modify) == 0)
+                return false;
+            return true;
         }

         private bool CanEditObject(UUID objectID, UUID editorID, Scene scene)
@@ -1234,7 +1222,14 @@
             DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
             if (m_bypassPermissions) return m_bypassPermissionsValue;

-            return GenericObjectPermission(editorID, objectID, false);
+            SceneObjectGroup sog = scene.GetGroupByPrim(objectID);
+            if (sog == null)
+                return false;
+
+            uint perms = GetObjectPermissions(editorID, sog, true);
+            if((perms & (uint)PermissionMask.Modify) == 0)
+                return false;
+            return true;
         }

         private bool CanEditObjectInventory(UUID objectID, UUID editorID, Scene scene)
@@ -1242,7 +1237,14 @@
             DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
             if (m_bypassPermissions) return m_bypassPermissionsValue;

-            return GenericObjectPermission(editorID, objectID, false);
+            SceneObjectGroup sog = scene.GetGroupByPrim(objectID);
+            if (sog == null)
+                return false;
+
+            uint perms = GetObjectPermissions(editorID, sog, true);
+            if((perms & (uint)PermissionMask.Modify) == 0)
+                return false;
+            return true;
         }

         private bool CanEditParcelProperties(UUID user, ILandObject parcel, GroupPowers p, Scene scene, bool allowManager)
@@ -1314,30 +1316,19 @@
             }
             else // Prim inventory
             {
+                SceneObjectGroup sog = scene.GetGroupByPrim(objectID);
+                if (sog == null)
+                    return false;
+
+                uint perms = GetObjectPermissions(user, sog, true);
+                if((perms & (uint)PermissionMask.Modify) == 0)
+                    return false;
+
                 SceneObjectPart part = scene.GetSceneObjectPart(objectID);
-
                 if (part == null)
                     return false;

-                if (part.OwnerID != user)
-                {
-                    if (part.GroupID == UUID.Zero)
-                        return false;
-
-                    if (!IsGroupMember(part.GroupID, user, 0))
-                        return false;
-
-                    if ((part.GroupMask & (uint)PermissionMask.Modify) == 0)
-                        return false;
-                }
-                else
-                {
-                    if ((part.OwnerMask & (uint)PermissionMask.Modify) == 0)
-                    return false;
-                }
-
                 TaskInventoryItem ti = part.Inventory.GetInventoryItem(notecard);
-
                 if (ti == null)
                     return false;

@@ -1351,14 +1342,10 @@
                 }

                 // Require full perms
-                if ((ti.CurrentPermissions &
-                        ((uint)PermissionMask.Modify |
-                        (uint)PermissionMask.Copy)) !=
-                        ((uint)PermissionMask.Modify |
-                        (uint)PermissionMask.Copy))
+                if ((ti.CurrentPermissions & ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy)) !=
+                        ((uint)PermissionMask.Modify | (uint)PermissionMask.Copy))
                     return false;
             }
-
             return true;
         }

@@ -1407,85 +1394,26 @@
             if (m_bypassPermissions)
             {
                 SceneObjectPart part = scene.GetSceneObjectPart(objectID);
+                if(part == null)
+                    return false;
+
                 if (part.OwnerID != moverID)
                 {
-                    if (!part.ParentGroup.IsDeleted)
-                    {
-                        if (part.ParentGroup.IsAttachment)
+                    if (part.ParentGroup.IsDeleted || part.ParentGroup.IsAttachment)
                             return false;
-                    }
                 }
                 return m_bypassPermissionsValue;
             }

-            bool permission = GenericObjectPermission(moverID, objectID, true);
-            if (!permission)
-            {
-                if (!m_scene.Entities.ContainsKey(objectID))
-                {
-                    return false;
-                }
-
-                // The client
-                // may request to edit linked parts, and therefore, it needs
-                // to also check for SceneObjectPart
-
-                // If it's not an object, we cant edit it.
-                if ((!(m_scene.Entities[objectID] is SceneObjectGroup)))
-                {
-                    return false;
-                }
-
-
-                SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objectID];
-
-
-                // UUID taskOwner = null;
-                // Added this because at this point in time it wouldn't be wise for
-                // the administrator object permissions to take effect.
-                // UUID objectOwner = task.OwnerID;
-
-                // Anyone can move
-                if ((task.RootPart.EveryoneMask & PERM_MOVE) != 0)
-                    permission = true;
-
-                // Locked
-                if ((task.RootPart.OwnerMask & PERM_LOCKED) == 0)
-                    permission = false;
-            }
-            else
-            {
-                bool locked = false;
-                if (!m_scene.Entities.ContainsKey(objectID))
-                {
-                    return false;
-                }
-
-                // If it's not an object, we cant edit it.
-                if ((!(m_scene.Entities[objectID] is SceneObjectGroup)))
-                {
-                    return false;
-                }
-
-                SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[objectID];
-
-                UUID objectOwner = group.OwnerID;
-                locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
-
-                // This is an exception to the generic object permission.
-                // Administrators who lock their objects should not be able to move them,
-                // however generic object permission should return true.
-                // This keeps locked objects from being affected by random click + drag actions by accident
-                // and allows the administrator to grab or delete a locked object.
-
-                // Administrators and estate managers are still able to click+grab locked objects not
-                // owned by them in the scene
-                // This is by design.
-
-                if (locked && (moverID == objectOwner))
-                    return false;
-            }
-            return permission;
+            SceneObjectGroup sog = scene.GetGroupByPrim(objectID);
+            if (sog == null)
+                return false;
+
+            uint perms = GetObjectPermissions(moverID, sog, true);
+            if((perms & (uint)PermissionMask.Move) == 0)
+                return false;
+            // admins exception ?  if needed then should be done at GetObjectPermissions
+            return true;
         }

         private bool CanObjectEntry(UUID objectID, bool enteringRegion, Vector3 newPoint, Scene scene)


try to fix 2 zone pads again

try to fix 2 zone pads again

--- Project-Aurora/Project-Aurora/Devices/SteelSeries/GameSenseSDK.cs
+++ Project-Aurora/Project-Aurora/Devices/SteelSeries/GameSenseSDK.cs
@@ -109,13 +109,15 @@

         public void setMousepadColor(List<Tuple<byte, byte, byte>> colors, GameSensePayloadPeripheryColorEventJSON payload)
         {
-            if(colors.Count == 2)
+            List<string> zones = new List<string>(new string[] { "mpone", "mptwo", "mpthree", "mpfour", "mpfive", "mpsix", "mpseven", "mpeight", "mpnine", "mpten", "mpeleven", "mptwelve" });
+            if (colors[2] == null)
             {
                 payload.data += "\"mousepadtwozone\":{";
-                payload.data += "\"colorone\":[" + colors[0].Item1 + ", " + colors[0].Item2 + ", " + colors[0].Item3 + "],";
-                payload.data += "\"colortwo\":[" + colors[1].Item1 + ", " + colors[1].Item2 + ", " + colors[1].Item3 + "],";
-                payload.data = payload.data.TrimEnd(',');
-                payload.data += "]},";
+
+                for (int i = 0; i < 2; i++)
+                {
+                    payload.data += "\"" + zones[i] + "\": [" + colors[i].Item1 + ", " + colors[i].Item2 + ", " + colors[i].Item3 + "],";
+                }
             }
             else if (colors.Count == 12)
             {
@@ -206,10 +208,10 @@
                 (on-device ""rgb-12-zone"" show-on-zones: colors '(one: two: three: four: five: six: seven: eight: nine: ten: eleven: twelve:))))
         (when (mousepadtwozone:? data)
             (let* ((mousepadtwozone (mousepadtwozone: data))
-                    (colorone (colorone: mousepadtwozone))
-                    (colortwo (colortwo: mousepadtwozone)))
-                (on-device ""indicator"" show-on-zone: colorone one:)
-                (on-device ""indicator"" show-on-zone: colortwo two:)))
+                    (mpone (mpone: mousepadtwozone))
+                    (mptwo (mptwo: mousepadtwozone)))
+                (on-device ""indicator"" show-on-zone: mpone one:)
+                (on-device ""indicator"" show-on-zone: mptwo two:)))
         (when (mouse:? data)
             (let* ((mouse (mouse: data))
                    (color (color: mouse)))


Simplify AddAuthentication call

Simplify AddAuthentication call

--- Samples/ProjectTracker/ProjectTracker.Ui.Blazor.Server/Startup.cs
+++ Samples/ProjectTracker/ProjectTracker.Ui.Blazor.Server/Startup.cs
@@ -30,12 +30,7 @@
     // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
     public void ConfigureServices(IServiceCollection services)
     {
-      services.AddAuthentication(options =>
-      {
-        options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
-        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
-        options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
-      })
+      services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
         .AddCookie();
       services.AddRazorPages();
       services.AddServerSideBlazor();
@@ -73,15 +68,15 @@
         endpoints.MapFallbackToPage("/_Host");
       });

-      // use in-proc data portal
-      app.UseCsla();
-      ConfigurationManager.AppSettings["DalManagerType"] =
-        "ProjectTracker.DalMock.DalManager,ProjectTracker.DalMock";
+      //// use in-proc data portal
+      //app.UseCsla();
+      //ConfigurationManager.AppSettings["DalManagerType"] =
+      //  "ProjectTracker.DalMock.DalManager,ProjectTracker.DalMock";

-      //// use remote data portal server
-      //app.UseCsla(c => c
-      //  .DataPortal()
-      //    .DefaultProxy(typeof(Csla.DataPortalClient.HttpProxy), "http://localhost:8040/api/dataportal/"));
+      // use remote data portal server
+      app.UseCsla(c => c
+        .DataPortal()
+          .DefaultProxy(typeof(Csla.DataPortalClient.HttpProxy), "http://localhost:8040/api/dataportal/"));

       ProjectTracker.Library.RoleList.CacheListAsync();
     }


Fixed documentation

Fixed documentation

--- Sharpex.GameLibrary/Framework/Content/Factory/AnimationFactory.cs
+++ Sharpex.GameLibrary/Framework/Content/Factory/AnimationFactory.cs
@@ -12,7 +12,7 @@
         /// </summary>
         public Type FactoryType { get { return typeof (Animation); } }
         /// <summary>
-        /// Creates a new Sound from the given FilePath.
+        /// Creates a new Animation from the given FilePath.
         /// </summary>
         /// <param name="file">The FilePath.</param>
         /// <returns>Animation</returns>
@@ -24,7 +24,7 @@
             }
         }
         /// <summary>
-        /// Creates a new Sound from the given Stream.
+        /// Creates a new Animation from the given Stream.
         /// </summary>
         /// <param name="stream">The Stream.</param>
         /// <returns>Animation</returns>


Synchrophasor: openPDC Manager (WPF) - Made UI changes so that user with ViewOnly access cannot see Add New Device and Add New Other Device menu items.

git-tfs-id: [https://tfs.codeplex.com/tfs/TFS07]$/openpdc/Synchrophasor/Current Version;C64088

--- Source/Applications/openPDCManager/WPF/MasterLayoutWindow.xaml.cs
+++ Source/Applications/openPDCManager/WPF/MasterLayoutWindow.xaml.cs
@@ -104,9 +104,17 @@
                 Nodes.Visibility = Security.Visibility = Visibility.Collapsed;

             if (((App)Application.Current).Principal.IsInRole("Administrator, Editor"))
+            {
                 ConfigurationWizard.Visibility = Visibility.Visible;
+                AddNew.Visibility = Visibility.Visible;
+                AddOtherDevice.Visibility = Visibility.Visible;
+            }
             else
+            {
                 ConfigurationWizard.Visibility = Visibility.Collapsed;
+                AddNew.Visibility = Visibility.Collapsed;
+                AddOtherDevice.Visibility = Visibility.Collapsed;
+            }

             IsolatedStorageManager.SetDefaultStorage(false);


Remove _mainPage from ApplicationProviderMocks.

--- Source/Xamarin/Prism.Forms.Tests/Mocks/ApplicationProviderMock.cs
+++ Source/Xamarin/Prism.Forms.Tests/Mocks/ApplicationProviderMock.cs
@@ -7,8 +7,6 @@
 {
     public class ApplicationProviderMock : IApplicationProvider
     {
-        private Page _mainPage;
-
         public ApplicationProviderMock()
         {
             MainPage = new ContentPage()


Made the program file more understandable

This update makes the program.cs file more understandable to the non-coding public.

This file will help them understand what this code is doing while it's being used.

--- src/KiraBot/Program.cs
+++ src/KiraBot/Program.cs
@@ -1,21 +1,31 @@
-using System;
+//System Requirements
+using System;
 using System.IO;
 using System.Threading.Tasks;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
-using Discord;
-using Discord.Commands;
-using Discord.WebSocket;
-using KiraBot.Services;
 using NLog;
 using System.Collections.Concurrent;
 using System.Linq;
 using System.Collections.Immutable;
+//Discord Requirements
+using Discord;
+using Discord.Commands;
+using Discord.WebSocket;
+//KiraBot Requirements
+using KiraBot;
+using KiraBot.Services;
+
+//This file is mandatory for KiraBot.
+//This file is the shard code initialization.
+//Without this file, this bot would not be operational with just a few files filled with C# code doing absolute fuck all.
+//Do not remove.

 namespace KiraBot
 {
     public class Program
     {
+	    	//Initializing the logger for the entire program.
 		private Logger _log;

 		public static uint OkColor { get; } = 0x00ff00;
@@ -23,17 +33,17 @@

 		public static CommandService CommandService { get; private set; }
 		public static DiscordShardedClient Client { get; private set; }
-
+		//Initializing the bot sequence.
 		static void Main(string[] args)
             => new Program().Start().GetAwaiter().GetResult();

         private DiscordSocketClient _client;
         private IConfiguration _config;
-
+		//Initializing bot tasks within Shard #1.
 		public async Task Start()
         {
 			_log = LogManager.GetCurrentClassLogger();
-
+		//Logging the startup.
 			_log.Info("Starting KiraBot!");
             _client = new DiscordSocketClient();
             _config = BuildConfig();
@@ -44,12 +54,12 @@

             await _client.LoginAsync(TokenType.Bot, _config["Token"]);
             await _client.StartAsync();
-
+			//Initialization completed.
 			_log.Info("Initialization Completed.");

             await Task.Delay(-1);
 		}
-
+		//Setting the Bot's Shard to display this as the game within the Discord client.
 		public async Task SetGame()
 		{
 			await _client.SetGameAsync("with Wumpus!");
@@ -72,7 +82,7 @@
                 // Add additional services here...
                 .BuildServiceProvider();
         }
-
+	//Grabbing the configuration json file and embedding it within the project.
         private IConfiguration BuildConfig()
         {
             return new ConfigurationBuilder()
@@ -81,4 +91,6 @@
                 .Build();
         }
 	}
-}+}
+
+//Basic initialization completed.


Added IsDirectReplyToCapable property and Direct reply-to capability detection as discussed at https://github.com/rabbitmq/rabbitmq-server/issues/520

--- src/Brokers/RabbitMQ/RestBus.RabbitMQ/ChannelPooling/AmqpChannelPooler.cs
+++ src/Brokers/RabbitMQ/RestBus.RabbitMQ/ChannelPooling/AmqpChannelPooler.cs
@@ -1,6 +1,7 @@
 using RabbitMQ.Client;
 using System;
 using System.Collections.Concurrent;
+using System.Collections.Generic;

 namespace RestBus.RabbitMQ.ChannelPooling
 {
@@ -21,9 +22,12 @@
             get { return _disposed; }
         }

+        public bool IsDirectReplyToCapable { get; }
+
         public AmqpChannelPooler(IConnection conn)
         {
             this.conn = conn;
+            IsDirectReplyToCapable = DetermineDirectReplyToCapability(conn);
         }

         internal AmqpModelContainer GetModel(ChannelFlags flags)
@@ -184,5 +188,54 @@
                 catch { }
             }
         }
+
+        /// <summary>
+        /// Determines if a server has direct reply-to capability.
+        /// </summary>
+        private static bool DetermineDirectReplyToCapability(IConnection conn)
+        {
+            if (conn == null) throw new ArgumentNullException("conn");
+
+            //Check for the 'direct_reply_to' capability as introduced by https://github.com/rabbitmq/rabbitmq-server/issues/520
+
+            if (conn.ServerProperties.ContainsKey("capabilities"))
+            {
+                var capabilities = conn.ServerProperties["capabilities"] as Dictionary<string, object>;
+                if(capabilities != null && capabilities.ContainsKey("direct_reply_to"))
+                {
+                    var directReplyTo = capabilities["direct_reply_to"];
+                    if (directReplyTo is bool && (bool)directReplyTo)
+                    {
+                        return true;
+                    }
+                }
+            }
+
+            //If the capability is not found then parse the version number and check if it's greater than 3.4.0.
+
+            //TODO: In the distant future, say 8 years from now (2023) when v3.4 to v.3.6 are really old versions, you can safely
+            //take out the fallback method below.
+            try
+            {
+                if (conn.ServerProperties.ContainsKey("version"))
+                {
+                    var versionBytes = conn.ServerProperties["version"] as byte[];
+                    if (versionBytes != null && versionBytes.Length > 3)
+                    {
+                        var version = System.Text.Encoding.ASCII.GetString(versionBytes);
+                        var semver = version.Split('.');
+
+                        if (semver.Length > 2 && Int32.Parse(semver[0]) >= 3 && Int32.Parse(semver[1]) >= 4)
+                        {
+                            //Version is greater or equal to than 3.4.x
+                            return true;
+                        }
+                    }
+                }
+            }
+            catch { }
+
+            return false;
+        }
     }
 }


open/focus Code Editor on shift + w

open/focus Code Editor on shift + w

--- src/CodeEditor.Text.UI.Unity.Editor/Implementation/CodeEditorMenuItems.cs
+++ src/CodeEditor.Text.UI.Unity.Editor/Implementation/CodeEditorMenuItems.cs
@@ -4,7 +4,7 @@
 {
 	public static class CodeEditorMenuItems
 	{
-		[MenuItem("Assets/Code Editor")]
+		[MenuItem("Assets/Code Editor #w")]
 		public static void OpenActiveCodeFile()
 		{
 			CodeEditorWindow.OpenWindowFor("");


Fix type in assembly

Fix type in assembly


Fixing doc comments

Fixing doc comments

--- src/Microsoft.AspNet.Mvc.Razor.Host/Directives/ChunkInheritanceUtility.cs
+++ src/Microsoft.AspNet.Mvc.Razor.Host/Directives/ChunkInheritanceUtility.cs
@@ -72,10 +72,11 @@
         }

         /// <summary>
-        /// Merges a list of chunks into the specified <paramref name="codeTree/>.
+        /// Merges a list of chunks into the specified <paramref name="codeTree"/>.
         /// </summary>
-        /// <param name="codeTree">The <see cref="CodeTree"/> to mere</param>
-        /// <param name="inherited">The list of chunks to merge.</param>
+        /// <param name="codeTree">The <see cref="CodeTree"/> to merge.</param>
+        /// <param name="inherited">The <see credit="IReadOnlyList{T}"/> of <see cref="Chunk"/> to merge.</param>
+        /// <param name="defaultModel">The list of chunks to merge.</param>
         public void MergeInheritedChunks([NotNull] CodeTree codeTree,
                                          [NotNull] IReadOnlyList<Chunk> inherited,
                                          string defaultModel)


Don't use Array.prototype.find. IE does not like.

--- AllReadyApp/Web-App/AllReady/Areas/Admin/Views/Skill/Edit.cshtml
+++ AllReadyApp/Web-App/AllReady/Areas/Admin/Views/Skill/Edit.cshtml
@@ -62,7 +62,7 @@
                 this.isValidParent = ko.computed(function () {
                     var id = @(Model != null ? Model.Id : 0);
                     var parentId = this.parentSkillId();
-                    var parent = this.availableSkills().find(function(skill) { return skill.Id === parentId; });
+                    var parent = this.availableSkills().filter(function(skill) { return skill.Id === parentId; })[0];
                     var parentIsValid = true;
                     while (parentIsValid && parent) {
                         parentIsValid = parent.Id !== id;


update android client

update android client

--- AndroidClientVS2017/AndroidClient/Resources/Resource.Designer.cs
+++ AndroidClientVS2017/AndroidClient/Resources/Resource.Designer.cs
@@ -2,7 +2,6 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -15,7 +14,7 @@
 {

-	[System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
+	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
 	public partial class Resource
 	{

@@ -44,17 +43,17 @@
 		public partial class Id
 		{

-			// aapt resource value: 0x7f040001
-			public const int ApiButton = 2130968577;
+			// aapt resource value: 0x7F010000
+			public const int ApiButton = 2130771968;

-			// aapt resource value: 0x7f040000
-			public const int LoginButton = 2130968576;
+			// aapt resource value: 0x7F010001
+			public const int LoginButton = 2130771969;

-			// aapt resource value: 0x7f040003
-			public const int Output = 2130968579;
+			// aapt resource value: 0x7F010002
+			public const int Output = 2130771970;

-			// aapt resource value: 0x7f040002
-			public const int RefreshButton = 2130968578;
+			// aapt resource value: 0x7F010003
+			public const int RefreshButton = 2130771971;

 			static Id()
 			{
@@ -69,7 +68,7 @@
 		public partial class Layout
 		{

-			// aapt resource value: 0x7f020000
+			// aapt resource value: 0x7F020000
 			public const int Main = 2130837504;

 			static Layout()
@@ -85,7 +84,7 @@
 		public partial class String
 		{

-			// aapt resource value: 0x7f030000
+			// aapt resource value: 0x7F030000
 			public const int app_name = 2130903040;

 			static String()


better logging for socket

better logging for socket

--- LibNoDaveConnectionLibrary/Communication/PLCConnection.cs
+++ LibNoDaveConnectionLibrary/Communication/PLCConnection.cs
@@ -175,8 +175,13 @@

         public void socket_Thread()
         {
+            if (Logger != null)
+                Logger("socket thread created");
+
             if (_socketPtr.HasValue)
             {
+                if (Logger != null)
+                    Logger("socket thread - close old socket :" + _socketPtr.ToString());
                 libnodave.closeSocket(_socketPtr.Value);
                 _socketPtr = null;
             }
@@ -201,11 +206,14 @@
             //TcpClient sock = new TcpClient(ip, _configuration.Port);
             //_fds.rfd = sock.Client.Handle;

-
+            if (Logger != null)
+                Logger("socket thread try to connect");
             if (ip != null)
                 _fds.rfd = libnodave.openSocket(_configuration.Port, ip);
             else
                 _fds.rfd = libnodave.openSocket(_configuration.Port, _configuration.CpuIP);
+            if (Logger != null)
+                Logger("socket thread - got socket pointer:" + _socketPtr.ToString());
             _socketPtr = _fds.rfd;
         }


- Fix BlocksOfflineFolder List was always empty!

--- LibNoDaveConnectionLibrary/Projectfiles/Step7ProjectV5.cs
+++ LibNoDaveConnectionLibrary/Projectfiles/Step7ProjectV5.cs
@@ -153,7 +153,17 @@
             set { _s7ProgrammFolders = value; }
         }

-        public List<BlocksOfflineFolder> BlocksOfflineFolders { get; set; }
+        private List<BlocksOfflineFolder> _blocksOfflineFolders;
+        public List<BlocksOfflineFolder> BlocksOfflineFolders
+        {
+            get
+            {
+                if (!_projectLoaded)
+                    LoadProject();
+                return _blocksOfflineFolders;
+            }
+            set { _blocksOfflineFolders = value; }
+        }

         override internal void LoadProject()
         {
@@ -615,6 +625,7 @@
                         x.ID = (int) row["ID"];
                         x.Folder = ProjectFolder + "ombstx" + _DirSeperator + "offline" + _DirSeperator + x.ID.ToString("X").PadLeft(8, '0') + _DirSeperator;
                         tmpBlocksOfflineFolders.Add(x);
+                        _blocksOfflineFolders.Add(x);
                     }
                 }
             }


* Fix a bug that causes the BucketTime th throw an exception at creation time.

--- src/platform/toolkit/metrics/library/core/BucketTimer.cs
+++ src/platform/toolkit/metrics/library/core/BucketTimer.cs
@@ -85,7 +85,7 @@

         Buckets = new long[buckets.Length];
         long last = buckets[0];
-        for (int i = 0; i < buckets.Length; i++) {
+        for (int i = 1; i < buckets.Length; i++) {
           if (buckets[i] <= last) {
             throw new ArgumentException(
               "Buckets must be in ascending order and cannot have duplicates");
@@ -218,12 +218,17 @@
     /// <param name="name">
     /// The name of the timer
     /// </param>
+    /// <param name="buckets">
+    /// The buckets to be used by the timer.
+    /// </param>
     /// <returns>
     /// A <see cref="BucketTimer"/> whose name is <paramref name="name"/> and
     /// uses the default resevoir, time unit and snapshot config.
     /// </returns>
-    public static BucketTimer Create(string name) {
-      return new Builder(new MetricConfig(name)).Build();
+    public static BucketTimer Create(string name, long[] buckets) {
+      return new Builder(new MetricConfig(name))
+        .WithBuckets(buckets)
+        .Build();
     }

     /// <summary>
@@ -234,32 +239,18 @@
     /// The name of the timer
     /// </param>
     /// <param name="unit">
+    /// </param>
+    /// <param name="buckets">
+    /// The buckets to be used by the timer.
     /// </param>
     /// <returns>
     /// A <see cref="BucketTimer"/> whose name is <paramref name="name"/> and
     /// uses the specified time unit and default resevoir and snapshot config.
     /// </returns>
-    public static BucketTimer Create(string name, TimeUnit unit) {
+    public static BucketTimer Create(string name, long[] buckets, TimeUnit unit) {
       return new
         Builder(new MetricConfig(name))
         .WithTimeUnit(unit)
-        .Build();
-    }
-
-    /// <summary>
-    /// Creates a new instance of the <see cref="BucketTimer"/> class by using
-    /// the given metric's name and buckets.
-    /// </summary>
-    /// <param name="name">
-    /// The name of the metric.
-    /// </param>
-    /// <param name="buckets">
-    /// The buckets to be used by the timer.
-    /// </param>
-    /// <returns></returns>
-    public static BucketTimer Create(string name, long[] buckets) {
-      return new
-        Builder(new MetricConfig(name))
         .WithBuckets(buckets)
         .Build();
     }


Whitespace

Whitespace

--- IronSmarkets/Sessions/SeqSession.cs
+++ IronSmarkets/Sessions/SeqSession.cs
@@ -159,7 +159,7 @@

                 throw new LoginFailedException(message, response.EtoPayload.Logout.Reason);
             }
-
+
             if (response.EtoPayload.Type == Eto.PayloadType.PAYLOADLOGINRESPONSE)
             {
                 _sessionId = response.EtoPayload.LoginResponse.Session;
@@ -214,9 +214,9 @@
                         throw new MessageStreamException(
                             "Received null payload while waiting for logout response");
                     }
-
+
                     received.Add(recvPayload);
-
+
                     if (recvPayload.EtoPayload.Type == Eto.PayloadType.PAYLOADLOGOUT)
                     {
                         // TODO: Check Reason -- should be 'confirmation'
@@ -319,13 +319,13 @@
                     _inSequence++;
                     return payload;
                 }
-
+
                 if (payload.EtoPayload.Type == Eto.PayloadType.PAYLOADREPLAY)
                 {
                     // Replay message
                     return payload;
                 }
-
+
                 if (payload.EtoPayload.Seq > _inSequence)
                 {
                     var replayPayload = new Seto.Payload {


Getting rid of the this.

Getting rid of the this.

--- JabbR/Commands/CommandExceptions.cs
+++ JabbR/Commands/CommandExceptions.cs
@@ -19,7 +19,7 @@

         public CommandAmbiguityException(IEnumerable<string> ambiguities)
         {
-            this.Ambiguities = ambiguities;
+            Ambiguities = ambiguities;
         }

         public CommandAmbiguityException(string message) : base(message) { }


ecs/gamestate: make entityManager available inside each gamestate

--- Unity/Assets/GameFramework/Services/GameStateService/GameState.cs
+++ Unity/Assets/GameFramework/Services/GameStateService/GameState.cs
@@ -37,6 +37,8 @@
             /// </summary>
             public Func<bool> func = null;
         }
+
+        protected ECS.IEntityManager entityManager;

         /// <summary>
         /// The gamestateDisposable that get emptied when
@@ -186,6 +188,10 @@
         /// </summary>
         /// <returns></returns>
         public IObservable<bool> DoOnEnter(GSContext ctx=null) {
+            if (entityManager == null) {
+                entityManager = Kernel.Instance.Container.Resolve<ECS.IEntityManager>();
+            }
+
             this.currentContext = ctx==null ? CreateDefaultContext() : ctx;

             CurrentState = GSStatus.starting;


Removed redundant methods and fixed a typo in ProbeGround

--- Assets/SuperCharacterController/Core/SuperCharacterController.cs
+++ Assets/SuperCharacterController/Core/SuperCharacterController.cs
@@ -650,7 +650,7 @@

                     // We contacted the wall of the ledge, rather than the landing. Raycast down
                     // the wall to retrieve the proper landing
-                    if (Vector3.Angle(nearHit.normal, up) > superColType.StandAngle)
+                    if (Vector3.Angle(nearHit.normal, up) > col.StandAngle)
                     {
                         // Retrieve a vector pointing down the slope
                         Vector3 r = Vector3.Cross(nearHit.normal, down);
@@ -797,18 +797,6 @@
             return primaryGround.normal;
         }

-        public Vector3 Normal(bool isGrounded, float distance)
-        {
-            Vector3 n;
-            IsGrounded(isGrounded, distance, out n);
-            return n;
-        }
-
-        public float HitDistance()
-        {
-            return primaryGround.distance;
-        }
-
         public float Distance()
         {
             return primaryGround.distance;


PR feedback

PR feedback

--- Python/Product/Analysis/Pythia/ExpressionWalker.cs
+++ Python/Product/Analysis/Pythia/ExpressionWalker.cs
@@ -24,11 +24,11 @@
     /// AST Expression walker for expression assignments
     /// </summary>
     sealed class ExpressionWalker : PythonWalker {
-        private IList<KeyValuePair> Assignments;
-        private List<KeyValuePair> MethodInvocations;
+        public IList<KeyValuePair> Assignments { get; }
+        public List<KeyValuePair> MethodInvocations { get; }

-        private IList<Tuple<int, int>> ConditionalRanges;
-        private IList<Tuple<int, int>> LoopRanges;
+        public IList<Tuple<int, int>> ConditionalRanges { get; }
+        public IList<Tuple<int, int>> LoopRanges { get; }

         public IDictionary<int, string> EndIndexTypeNameMap { get; }


Remove unnecessary changes

Remove unnecessary changes

--- Mail2Bug/MessageProcessingStrategies/SimpleBugStrategy.cs
+++ Mail2Bug/MessageProcessingStrategies/SimpleBugStrategy.cs
@@ -26,10 +26,10 @@
 		    _ackEmailHandler = new AckEmailHandler(config);
             _messageToWorkItemMapper =
                 new MessageToWorkItemMapper(
-                    this._config.EmailSettings.AppendOnlyEmailTitleRegex,
-                    this._config.EmailSettings.AppendOnlyEmailBodyRegex,
-                    this._workItemManager.WorkItemsCache,
-                    this._config.WorkItemSettings.UseConversationGuidOnly);
+                    _config.EmailSettings.AppendOnlyEmailTitleRegex,
+                    _config.EmailSettings.AppendOnlyEmailBodyRegex,
+                    _workItemManager.WorkItemsCache,
+                    _config.WorkItemSettings.UseConversationGuidOnly);
         }

         public void ProcessInboxMessage(IIncomingEmailMessage message)


show printer name when reporting an error

--- MatterControlLib/ApplicationView/ApplicationController.cs
+++ MatterControlLib/ApplicationView/ApplicationController.cs
@@ -987,16 +987,17 @@
 		{
 			if (line != null)
 			{
-				string message = "Your printer is reporting a HARDWARE ERROR and has been paused. Check the error and cancel the print if required.".Localize()
-					+ "\n"
-					+ "\n"
-					+ "Error Reported".Localize() + ":"
-					+ $" \"{line}\".";
-
 				if (sender is PrinterConnection printerConnection)
 				{
+					string message = "Your printer is reporting a HARDWARE ERROR and has been paused. Check the error and cancel the print if required.".Localize()
+						+ "\n"
+						+ "\n"
+						+ "Error Reported".Localize() + ":"
+						+ $" \"{line}\".";
+
 					UiThread.RunOnIdle(() =>
 					{
+						var prinerName = printerConnection.Printer.Settings.GetValue(SettingsKey.printer_name);
 						var messageBox = new StyledMessageBox.MessageBoxPage((clickedOk) =>
 						{
 							if (clickedOk && printerConnection.Paused)
@@ -1005,7 +1006,7 @@
 							}
 						},
 						message,
-						"Printer Hardware Error".Localize(),
+						prinerName + " is reporting a Hardware Error".Localize(),
 						StyledMessageBox.MessageType.YES_NO,
 						null,
 						400,


DefaultLocation for SignalR.

DefaultLocation for SignalR.

--- src/ResourceManager/SignalR/Commands.SignalR/Cmdlets/NewAzureRmSignalR.cs
+++ src/ResourceManager/SignalR/Commands.SignalR/Cmdlets/NewAzureRmSignalR.cs
@@ -21,7 +21,6 @@
 using System.Management.Automation;
 using System.Threading.Tasks;
 using Microsoft.Azure.Commands.SignalR.Strategies.ResourceManager;
-using System.Threading;
 using Microsoft.Azure.Commands.SignalR.Strategies.SignalRRp;

 namespace Microsoft.Azure.Commands.SignalR.Cmdlets
@@ -88,6 +87,8 @@
                 }
             }

+            public string DefaultLocation => "eastus";
+
             readonly NewAzureRmSignalR _cmdlet;

             public Parameters(NewAzureRmSignalR cmdlet)
@@ -124,7 +125,7 @@
             var parameters = new Parameters(this);

             var result = await client.RunAsync(
-                client.SubscriptionId, parameters, asyncCmdlet, new CancellationToken());
+                client.SubscriptionId, parameters, asyncCmdlet);

             if (result != null)
             {


test(PropertySetter): Add unit test for null/undefined fallback behavior

Ensure that when the props map has a JSON null or undefined value, that the default value is used.

--- ReactNative.Tests/UIManager/PropertySetterTests.cs
+++ ReactNative.Tests/UIManager/PropertySetterTests.cs
@@ -237,6 +237,38 @@
             Assert.AreEqual(true, instance.TestBooleanValue);
         }

+        [TestMethod]
+        public void PropertySetter_DefaultValue_Null()
+        {
+            var method = (MethodInfo)ReflectionHelpers.InfoOf((DefaultTest t) => t.TestBoolean(null, false));
+            var instance = new DefaultTest();
+            Assert.AreEqual(false, instance.TestBooleanValue);
+            var emptyMap = new ReactStylesDiffMap(new JObject
+            {
+                { "TestBoolean", null },
+            });
+
+            var setter = PropertySetter.CreateViewManagerSetters(method).Single();
+            setter.UpdateViewManagerProperty(instance, null, emptyMap);
+            Assert.AreEqual(true, instance.TestBooleanValue);
+        }
+
+        [TestMethod]
+        public void PropertySetter_DefaultValue_Undefined()
+        {
+            var method = (MethodInfo)ReflectionHelpers.InfoOf((DefaultTest t) => t.TestBoolean(null, false));
+            var instance = new DefaultTest();
+            Assert.AreEqual(false, instance.TestBooleanValue);
+            var emptyMap = new ReactStylesDiffMap(new JObject
+            {
+                { "TestBoolean", JValue.CreateUndefined() },
+            });
+
+            var setter = PropertySetter.CreateViewManagerSetters(method).Single();
+            setter.UpdateViewManagerProperty(instance, null, emptyMap);
+            Assert.AreEqual(true, instance.TestBooleanValue);
+        }
+
         class Test : MockViewManager
         {
             #region ViewManager Test Methods


Fixed logout

Fixed logout

--- src/KryBot/formMain.cs
+++ src/KryBot/formMain.cs
@@ -1761,8 +1761,7 @@

         private void btnSteamExit_Click(object sender, EventArgs e)
         {
-            Bot.Steam.Cookies.Sessid = "";
-            Bot.Steam.Cookies.Login = "";
+            Bot.Steam.Cookies = new Steam.SteamCookies();
             Bot.Steam.ProfileLink = "";
             Bot.Steam.Enabled = false;
             BlockTabpage(tabPageSteam, false);
@@ -1774,10 +1773,7 @@

         private void btnSTExit_Click(object sender, EventArgs e)
         {
-            Bot.SteamTrade.Cookies.DleUserId = "";
-            Bot.SteamTrade.Cookies.DlePassword = "";
-            Bot.SteamTrade.Cookies.PassHash = "";
-            Bot.SteamTrade.Cookies.PhpSessId = "";
+            Bot.SteamTrade.Cookies = new SteamTrade.StCookies();
             Bot.SteamTrade.Enabled = false;
             BlockTabpage(tabPageST, false);
             btnSTLogin.Visible = true;
@@ -1788,7 +1784,7 @@

         private void btnSPExit_Click(object sender, EventArgs e)
         {
-            Bot.SteamPortal.Cookies.PhpSessId = "";
+            Bot.SteamPortal.Cookies = new SteamPortal.SpCookies();
             Bot.SteamPortal.Enabled = false;
             BlockTabpage(tabPageSP, false);
             btnSPLogin.Visible = true;
@@ -1799,10 +1795,7 @@

         private void btnSCExit_Click(object sender, EventArgs e)
         {
-            Bot.SteamCompanion.Cookies.PhpSessId = "";
-            Bot.SteamCompanion.Cookies.UserC = "";
-            Bot.SteamCompanion.Cookies.UserId = "";
-            Bot.SteamCompanion.Cookies.UserT = "";
+            Bot.SteamCompanion.Cookies = new SteamCompanion.ScCookies();
             Bot.SteamCompanion.Enabled = false;
             BlockTabpage(tabPageSC, false);
             btnSCLogin.Visible = true;
@@ -1813,7 +1806,7 @@

         private void btnSGExit_Click(object sender, EventArgs e)
         {
-            Bot.SteamGifts.Cookies.PhpSessId = "";
+            Bot.SteamGifts.Cookies = new SteamGifts.SgCookies();
             Bot.SteamGifts.Enabled = false;
             BlockTabpage(tabPageSG, false);
             btnSGLogin.Visible = true;
@@ -1824,8 +1817,8 @@

         private void btnGMExit_Click(object sender, EventArgs e)
         {
-            Bot.GameMiner.Cookies.Token = "";
-            Bot.GameMiner.Cookies.Xsrf = "";
+            Bot.GameMiner.Cookies = new GameMiner.GmCookies();
+            Bot.GameMiner.UserAgent = "";
             Bot.GameMiner.Enabled = false;
             BlockTabpage(tabPageGM, false);
             btnGMLogin.Enabled = true;
@@ -1889,7 +1882,7 @@

         private void btnPBExit_Click(object sender, EventArgs e)
         {
-            Bot.PlayBlink.Cookies.PhpSessId = "";
+            Bot.PlayBlink.Cookies = new PlayBlink.PbCookies();
             Bot.PlayBlink.Enabled = false;
             BlockTabpage(tabPagePB, false);
             btnPBLogin.Enabled = true;


test coverage

test coverage

--- Frost/Size.cs
+++ Frost/Size.cs
@@ -215,6 +215,15 @@

 			Assert.Equal(new Size(10, 10), scaled);

+			Assert.Equal(new Size(50), new Size(10, 10) * new Size(5));
+			Assert.Equal(new Size(15), new Size(10, 10) + new Size(5));
+			Assert.Equal(new Size(05), new Size(10, 10) - new Size(5));
+			Assert.Equal(new Size(02), new Size(10, 10) / new Size(5));
+
+			Assert.Equal(new Size(4), new Size(2).Scale(new Size(2)));
+
+			Assert.Equal<Size>(new Size(3), new Point(3));
+
 			Assert.TestObject(MinValue, MaxValue);
 		}
 #endif


Change check for isTerminating (#625)

Change check for isTerminating (#625)

--- src/MICore/Debugger.cs
+++ src/MICore/Debugger.cs
@@ -286,18 +286,21 @@
             this.ProcessState = ProcessState.Stopped;
             FlushBreakStateData();

-            if (!results.Contains("frame") && !_terminating)
-            {
-                if (ModuleLoadEvent != null)
-                {
-                    ModuleLoadEvent(this, new ResultEventArgs(results));
-                }
-            }
-            else if (BreakModeEvent != null)
-            {
-                BreakRequest request = _requestingRealAsyncBreak;
-                _requestingRealAsyncBreak = BreakRequest.None;
-                BreakModeEvent(this, new StoppingEventArgs(results, request));
+            if (!_terminating)
+            {
+                if (!results.Contains("frame"))
+                {
+                    if (ModuleLoadEvent != null)
+                    {
+                        ModuleLoadEvent(this, new ResultEventArgs(results));
+                    }
+                }
+                else if (BreakModeEvent != null)
+                {
+                    BreakRequest request = _requestingRealAsyncBreak;
+                    _requestingRealAsyncBreak = BreakRequest.None;
+                    BreakModeEvent(this, new StoppingEventArgs(results, request));
+                }
             }
         }


Content change

Content change

--- src/SFA.DAS.EmployerFinance.Web/Views/Transfers/FinancialBreakdown.cshtml
+++ src/SFA.DAS.EmployerFinance.Web/Views/Transfers/FinancialBreakdown.cshtml
@@ -19,7 +19,7 @@

This is calculated every year on 6 April and shows in your account after 20 April.

-            This is the maximum amount of levy funds that you could transfer this financial year using pledges and direct transfer connections.
+            This is the maximum amount of levy funds that you could transfer this financial year using pledges and transfer connections.
             Read more about how transfers work.


Fix uninstallation issue

Fix uninstallation issue

When registering an add-in for uninstall, the list of add-in's files was not stored.

--- Mono.Addins/Mono.Addins.Database/DatabaseConfiguration.cs
+++ Mono.Addins/Mono.Addins.Database/DatabaseConfiguration.cs
@@ -77,11 +77,12 @@
 				return copy;
 			}

-			public AddinStatus AsUninstalled ()
+			public AddinStatus AsUninstalled (ImmutableArray<string> oldAddinFiles)
 			{
 				var copy = Copy ();
 				copy.ConfigEnabled = false;
 				copy.Uninstalled = true;
+				copy.Files = oldAddinFiles;
 				return copy;
 			}

@@ -140,7 +141,7 @@
 			if (!addinStatus.TryGetValue (addinId, out s))
 				s = new AddinStatus (addinId);

-			s = s.AsUninstalled ();
+			s = s.AsUninstalled (ImmutableArray<string>.Empty.AddRange(files));
 			addinStatus = addinStatus.SetItem (addinId, s);
 		}


added event logging

added event logging

--- NotHotdog/NotHotdog/NotHotdog/ViewModels/MainViewModel.cs
+++ NotHotdog/NotHotdog/NotHotdog/ViewModels/MainViewModel.cs
@@ -169,6 +169,8 @@
 			if (!CrossShare.IsSupported)
 				return;

+            Analytics.TrackEvent("Share button");
+
 			await CrossShare.Current.Share(new ShareMessage
 			{
 				Title = "CFood App!",
@@ -185,11 +187,10 @@

 		async Task ExecuteGithubAsync()
 		{
-
-
 			if (!CrossShare.IsSupported)
 				return;

+            Analytics.TrackEvent("open github event");
 			await CrossShare.Current.OpenBrowser("https://github.com/Geertvdc/Xamarin-NotHotdog");
 		}


Reduce the padding on the navigation bar

--- Controls/NavigationBar.cs
+++ Controls/NavigationBar.cs
@@ -141,7 +141,7 @@
             Items.AddRange(new ToolStripItem[] {
                 importComboBox, classComboBox, memberComboBox });
             Name = "NavigationBar";
-            Padding = new Padding(ScaleHelper.Scale(2));
+            Padding = new Padding(0, ScaleHelper.Scale(1), 0, ScaleHelper.Scale(1));
             Stretch = true;
             Visible = false;
             ResumeLayout(false);


2150.1

--- src/Tests/WinFormTestBed2/YourImplementation.WinForms/FormCanvasHelper.cs
+++ src/Tests/WinFormTestBed2/YourImplementation.WinForms/FormCanvasHelper.cs
@@ -205,8 +205,7 @@
         UIMouseEventArgs _mouseEventArgs = new UIMouseEventArgs();
         UIKeyEventArgs _keyEventArgs = new UIKeyEventArgs();
         UIPaintEventArgs _paintEventArgs = new UIPaintEventArgs();
-
-        public IntPtr NativeWindowHwnd => throw new NotImplementedException();
+

         public MyWinFormsControl()
         {
@@ -215,7 +214,8 @@
         {
             _myContext = new GLESContext(this.Handle);
         }
-
+        public IntPtr NativeWindowHwnd => this.Handle;
+
         internal IGpuOpenGLSurfaceView CreateWindowWrapper(AbstractTopWindowBridge topWindowBridge)
         {
             _topWindowBridge = topWindowBridge;


Commit old code

Commit old code

--- Chip8/Chip8.cs
+++ Chip8/Chip8.cs
@@ -2,32 +2,33 @@
 using Microsoft.Xna.Framework.Graphics;
 using Microsoft.Xna.Framework.Input;
 using System;
-using System.Collections.Generic;
 using System.IO;

 namespace Chip8
 {
     public class Chip8 : Game
     {
-        GraphicsDeviceManager graphics;
-        SpriteBatch spriteBatch;
-        Texture2D pixel;
-
-        ushort[] memory;
-        ushort counter;
-
-        ushort[] registers; //Vx
-        ushort addressPointer; //I
-
-        ushort[] stack;
-        ushort stackPointer;
-
-        byte[,] display;
-
-        ushort delay;
-        ushort soundDelay;
-
-        ushort[] font;
+        private GraphicsDeviceManager graphics;
+        private SpriteBatch spriteBatch;
+        private Texture2D pixel;
+
+        private ushort[] memory;
+        private ushort[] registers; //Vx
+
+        private ushort counter;
+        private ushort addressPointer; //I
+
+        private ushort[] stack;
+        private ushort stackPointer;
+
+        private byte[,] display;
+        private byte[] keys;
+        private int[] keyBuffer;
+
+        private ushort delay;
+        private ushort soundDelay;
+
+        private ushort[] font;

         public Chip8()
             : base()
@@ -35,6 +36,7 @@
             graphics = new GraphicsDeviceManager(this);
             graphics.PreferredBackBufferWidth = 1024;
             graphics.PreferredBackBufferHeight = 512;
+
             Content.RootDirectory = "Content";
             memory = new ushort[4096];
             counter = 0x200;
@@ -42,7 +44,7 @@
             registers = new ushort[16];
             addressPointer = (char)0x0;

-            stack = new ushort[12];
+            stack = new ushort[16];
             stackPointer = 0;

             display = new byte[64, 32];
@@ -50,23 +52,26 @@
             delay = 0;
             soundDelay = 0;

-            font = new ushort[]{
+            keys = new byte[16];
+
+
+            font = new ushort[]{
                 0xF0, 0x90, 0x90, 0x90, 0xF0, // 0
-                0x20, 0x60, 0x20, 0x20, 0x70, // 1
-                0xF0, 0x10, 0xF0, 0x80, 0xF0, // 2
-                0xF0, 0x10, 0xF0, 0x10, 0xF0, // 3
-                0x90, 0x90, 0xF0, 0x10, 0x10, // 4
-                0xF0, 0x80, 0xF0, 0x10, 0xF0, // 5
-                0xF0, 0x80, 0xF0, 0x90, 0xF0, // 6
-                0xF0, 0x10, 0x20, 0x40, 0x40, // 7
-                0xF0, 0x90, 0xF0, 0x90, 0xF0, // 8
-                0xF0, 0x90, 0xF0, 0x10, 0xF0, // 9
-                0xF0, 0x90, 0xF0, 0x90, 0x90, // A
-                0xE0, 0x90, 0xE0, 0x90, 0xE0, // B
-                0xF0, 0x80, 0x80, 0x80, 0xF0, // C
-                0xE0, 0x90, 0x90, 0x90, 0xE0, // D
-                0xF0, 0x80, 0xF0, 0x80, 0xF0, // E
-                0xF0, 0x80, 0xF0, 0x80, 0x80  // F
+			    0x20, 0x60, 0x20, 0x20, 0x70, // 1
+			    0xF0, 0x10, 0xF0, 0x80, 0xF0, // 2
+			    0xF0, 0x10, 0xF0, 0x10, 0xF0, // 3
+			    0x90, 0x90, 0xF0, 0x10, 0x10, // 4
+			    0xF0, 0x80, 0xF0, 0x10, 0xF0, // 5
+		        0xF0, 0x80, 0xF0, 0x90, 0xF0, // 6
+			    0xF0, 0x10, 0x20, 0x40, 0x40, // 7
+			    0xF0, 0x90, 0xF0, 0x90, 0xF0, // 8
+			    0xF0, 0x90, 0xF0, 0x10, 0xF0, // 9
+			    0xF0, 0x90, 0xF0, 0x90, 0x90, // A
+			    0xE0, 0x90, 0xE0, 0x90, 0xE0, // B
+			    0xF0, 0x80, 0x80, 0x80, 0xF0, // C
+			    0xE0, 0x90, 0x90, 0x90, 0xE0, // D
+			    0xF0, 0x80, 0xF0, 0x80, 0xF0, // E
+			    0xF0, 0x80, 0xF0, 0x80, 0x80  // F
             };

             for (int i = 0; i < font.Length; i++)
@@ -97,12 +102,7 @@
         {
             spriteBatch = new SpriteBatch(GraphicsDevice);
             pixel = Content.Load<Texture2D>("pixel");
-            LoadFile("pong.c8");
-        }
-
-        protected override void UnloadContent()
-        {
-
+            LoadFile("tetris.c8");
         }

         protected override void Update(GameTime gameTime)
@@ -119,7 +119,7 @@
             //The second part ORs the second half of the opcode on, leaving us with 0xXXXX
             ushort opcode = (ushort)(memory[counter] << 8 | memory[counter + 1]);

-            Console.WriteLine(counter + "::" + (opcode & 0xFFFF).ToString("x"));
+            //Console.WriteLine(counter + "::" + (opcode & 0xFFFF).ToString("x"));
             switch (opcode & 0xF000)
             {
                 case 0x0000:
@@ -260,9 +260,8 @@
                                 }
                             case 0x0006:
                                 {
-                                    ushort bit = (ushort)(registers[x] & 0x1);
                                     registers[x] = (ushort)(registers[x] >> 1);
-                                    registers[0xF] = bit;
+                                    registers[0xF] = (ushort)(registers[x] & 0x1);
                                     counter += 2;
                                     break;
                                 }
@@ -357,7 +356,7 @@
                             case 0x00A1:
                                 {
                                     //TODO: Check if key up
-                                    counter+=4;
+                                    counter += 4;
                                     break;
                                 }
                         }
@@ -425,7 +424,7 @@
                             case 0x0055:
                                 {
                                     int x = opcode & 0x0F00 >> 8;
-                                    for (int i = 0; i < x; i++)
+                                    for (int i = 0; i <= x; i++)
                                     {
                                         memory[addressPointer + i] = registers[i];
                                     }
@@ -436,7 +435,7 @@
                             case 0x0065:
                                 {
                                     int x = opcode & 0x0F00 >> 8;
-                                    for (int i = 0; i < x; i++)
+                                    for (int i = 0; i <= x; i++)
                                     {
                                         registers[i] = memory[addressPointer + i];
                                     }


Added the C-Style bool attribute

Added the C-Style bool attribute

--- binding/Binding/SkiaApi.cs
+++ binding/Binding/SkiaApi.cs
@@ -1065,8 +1065,10 @@
 		[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
 		public extern static gr_glinterface_t gr_glinterface_clone (gr_glinterface_t glInterface);
 		[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
+		[return: MarshalAs(UnmanagedType.I1)]
 		public extern static bool gr_glinterface_validate (gr_glinterface_t glInterface);
 		[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
+		[return: MarshalAs(UnmanagedType.I1)]
 		public extern static bool gr_glinterface_has_extension (gr_glinterface_t glInterface, string extension);

 	}


Fix overwiriting data

Fix overwiriting data

--- GPConnect.Provider.AcceptanceTests/Steps/RegisterPatientSteps.cs
+++ GPConnect.Provider.AcceptanceTests/Steps/RegisterPatientSteps.cs
@@ -619,35 +619,36 @@

         private void ValidateReferenceRequest(string reference, GpConnectInteraction interaction)
         {
-            if (!ResourceReferenceHelper.IsRelOrAbsReference(reference)) return;
-
-            _httpSteps.ConfigureRequest(interaction);
-
-            _httpContext.HttpRequestConfiguration.RequestUrl = reference;
-
-            _httpSteps.MakeRequest(interaction);
-
-            _httpResponseSteps.ThenTheResponseStatusCodeShouldIndicateSuccess();
-
-            if (interaction.Equals(GpConnectInteraction.OrganizationRead))
-            {
-                StoreTheOrganization();
-                var returnedReference = _fhirResourceRepository.Organization.Meta.Profile.FirstOrDefault();
-                returnedReference.ShouldBe(FhirConst.StructureDefinitionSystems.kOrganisation);
-            }
-            else if (interaction.Equals(GpConnectInteraction.PractitionerRead))
-            {
-                StoreThePractitioner();
-                var returnedReference = _fhirResourceRepository.Practitioner.Meta.Profile.FirstOrDefault();
-                returnedReference.ShouldBe(FhirConst.StructureDefinitionSystems.kPractitioner);
-            }
-            else if (interaction.Equals(GpConnectInteraction.LocationRead))
-            {
-                StoreTheLocation();
-                var returnedReference = _fhirResourceRepository.Location.Meta.Profile.FirstOrDefault();
-                returnedReference.ShouldBe(FhirConst.StructureDefinitionSystems.kLocation);
-            }
-
+            if (reference.StartsWith("Location/"))
+            {
+                var location = _httpSteps.GetResourceForRelativeUrl(GpConnectInteraction.LocationRead, reference);
+
+                location.ShouldNotBeNull(
+                    $"The Reference {reference} returned a null Location.");
+                location.GetType()
+                    .ShouldBe(typeof(Location),
+                        $"The reference {reference} returned a {location.GetType().ToString()}.");
+            }
+            else if (reference.StartsWith("Organization/"))
+            {
+                var organization = _httpSteps.GetResourceForRelativeUrl(GpConnectInteraction.OrganizationRead, reference);
+
+                organization.ShouldNotBeNull(
+                    $"The Reference {reference} returned a null Location.");
+                organization.GetType()
+                    .ShouldBe(typeof(Location),
+                        $"The reference {reference} returned a {organization.GetType().ToString()}.");
+            }
+            else if (reference.StartsWith("Practitioner/"))
+            {
+                var practitioner = _httpSteps.GetResourceForRelativeUrl(GpConnectInteraction.PractitionerRead, reference);
+
+                practitioner.ShouldNotBeNull(
+                    $"The Reference {reference} returned a null Location.");
+                practitioner.GetType()
+                    .ShouldBe(typeof(Location),
+                        $"The reference {reference} returned a {practitioner.GetType().ToString()}.");
+            }
         }

         private void StoreTheOrganization()


Changed ComVisible to false.

Changed ComVisible to false.

--- Lunatic/ASCOM.Lunatic.TelescopeServer/Properties/AssemblyInfo.cs
+++ Lunatic/ASCOM.Lunatic.TelescopeServer/Properties/AssemblyInfo.cs
@@ -15,7 +15,7 @@
 // Setting ComVisible to false makes the types in this assembly not visible
 // to COM components.  If you need to access a type in this assembly from
 // COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(true)]
+[assembly: ComVisible(false)]

 //In order to begin building localizable applications, set
 //<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file


Value/class type handling on placeholde return variables.

--- Meridian.InterSproc/Meridian.InterSproc/StubAssemblyGenerator.cs
+++ Meridian.InterSproc/Meridian.InterSproc/StubAssemblyGenerator.cs
@@ -113,14 +113,24 @@
             if (returnType != typeof(void))
             {
                 // Generate return type placeholder variables.
-                CodePrimitiveExpression nullReference =
-                    new CodePrimitiveExpression(null);
+                CodeExpression initialisationValue = null;
+
+                if (returnType.IsValueType)
+                {
+                    initialisationValue = new CodeDefaultValueExpression(
+                        new CodeTypeReference(returnType));
+                }
+                else
+                {
+                    // Class type initialises to null.
+                    initialisationValue = new CodePrimitiveExpression(null);
+                }

                 CodeVariableDeclarationStatement returnPlaceholderVariable =
                     new CodeVariableDeclarationStatement(
                         returnType,
                         "toReturn",
-                        nullReference);
+                        initialisationValue);

                 toReturn.Statements.Add(returnPlaceholderVariable);


populated constructor data

populated constructor data

--- VisaCheckout/VisaHelper/Options/VisaUpdateImageOptions.cs
+++ VisaCheckout/VisaHelper/Options/VisaUpdateImageOptions.cs
@@ -36,6 +36,13 @@
         /// <param name="currencyCode">The currency code value</param>
         public VisaUpdateImageOptions(string sharedKey, string callId, EventTypes eventType, string apiKey, decimal subtotal, decimal total, CurrencyCodes currencyCode)
         {
+            SharedKey = sharedKey;
+            CallID = callId;
+            EventType = eventType;
+            ApiKey = apiKey;
+            Subtotal = subtotal;
+            Total = total;
+            CurrencyCode = currencyCode;
         }

         /// <summary>
@@ -47,6 +54,30 @@
         /// <param name="paymentRequestOptions">The <see cref="PaymentRequestOptions"/> to populate the properties from</param>
         public VisaUpdateImageOptions(string sharedKey, string callId, EventTypes eventType, PaymentRequestOptions paymentRequestOptions)
         {
+            if (paymentRequestOptions == null)
+            {
+                throw new ArgumentNullException("paymentRequestOptions", "value cannot be null");
+            }
+
+            if (!paymentRequestOptions.Total.HasValue)
+            {
+                throw new ArgumentNullException("Total cannot be null");
+            }
+
+            SharedKey = sharedKey;
+            CallID = callId;
+            EventType = eventType;
+
+            CurrencyCode = paymentRequestOptions.CurrencyCode;
+            Discount = paymentRequestOptions.Discount;
+            GiftWrap = paymentRequestOptions.GiftWrap;
+            Misc = paymentRequestOptions.Misc;
+            OrderID = paymentRequestOptions.OrderID;
+            PromoCode = paymentRequestOptions.PromoCodes;
+            ShippingHandling = paymentRequestOptions.ShippingHandling;
+            Subtotal = paymentRequestOptions.Subtotal;
+            Tax = paymentRequestOptions.Tax;
+            Total = paymentRequestOptions.Total.Value;
         }

         /// <summary>


Change MemberData to public

Change MemberData to public

--- Vostok.Core.Tests/Logging/Logs/LogEventFormatter_Tests.cs
+++ Vostok.Core.Tests/Logging/Logs/LogEventFormatter_Tests.cs
@@ -21,7 +21,7 @@
             LogEventFormatter.FormatProperties(properties).Should().Be(expected);
         }

-        private static IEnumerable<object[]> FormatMessage_Cases()
+        public static IEnumerable<object[]> FormatMessage_Cases()
         {
             yield return new object[] {string.Empty, Array.Empty<object>(), string.Empty};
             yield return new object[] {"Hello", Array.Empty<object>(), "Hello"};
@@ -33,7 +33,7 @@
             yield return new object[] {"{0}. James {0}", new object[] {"Bond"}, "Bond. James Bond"};
         }

-        private static IEnumerable<object[]> FormatProperties_Cases()
+        public static IEnumerable<object[]> FormatProperties_Cases()
         {
             yield return new object[] {new Dictionary<string, object>(), "{}"};
             yield return new object[] {new Dictionary<string, object> {{"Key", "Value"}}, "{Key: Value}"};


send a full object update out to avatars when a media texture is initially set

this allows other avatars to see it, but still only after they've clicked on the face
still not handling navigation yet

--- OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
+++ OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
@@ -208,12 +208,8 @@

             m_log.DebugFormat("[MOAP]: Storing media url [{0}] in prim {1} {2}", part.MediaUrl, part.Name, part.UUID);

-            // I know this has to end with the last avatar to edit and the version code shouldn't always be 16.  Just trying
-            // to minimally satisfy for now to get something working
-            //resp.Version = "x-mv:0000000016/" + UUID.Random();
-
-            // TODO: schedule full object update for all other avatars.  This will trigger them to send an
-            // ObjectMediaRequest once they see that the MediaUrl is different.
+            // Arguably we don't need to send a full update to the avatar that just changed the texture.
+            part.ScheduleFullUpdate();

             return string.Empty;
         }


Fix Send/Address box behavior according to AutoCopy setting

--- WalletWasabi.Gui/Behaviors/PasteAddressOnClickBehavior.cs
+++ WalletWasabi.Gui/Behaviors/PasteAddressOnClickBehavior.cs
@@ -95,6 +95,12 @@
 			Disposables.Add(
 				AssociatedObject.GetObservable(TextBox.PointerReleasedEvent).Subscribe(async pointer =>
 				{
+					var uiConfig = Application.Current.Resources[Global.UiConfigResourceKey] as UiConfig;
+					if (!(uiConfig.Autocopy is true))
+					{
+						return;
+					}
+
 					switch (MyTextBoxState)
 					{
 						case TextBoxState.AddressInsert:
@@ -125,6 +131,12 @@
 			Disposables.Add(
 				AssociatedObject.GetObservable(TextBox.PointerEnterEvent).Subscribe(async pointerEnter =>
 				{
+					var uiConfig = Application.Current.Resources[Global.UiConfigResourceKey] as UiConfig;
+					if (!(uiConfig.Autocopy is true))
+					{
+						return;
+					}
+
 					if (!AssociatedObject.IsFocused && MyTextBoxState == TextBoxState.NormalTextBoxOperation)
 					{
 						MyTextBoxState = TextBoxState.None;


Changed response to show up in javascript alert, for better experience on 2 sequential requests

--- PART/Source/CprBroker/Web/Views/RemovePerson/Index.cshtml
+++ PART/Source/CprBroker/Web/Views/RemovePerson/Index.cshtml
@@ -21,9 +21,6 @@
                 <input type="submit" value="Remove" id="removePersonButton" class="btn btn-danger">
             </form>

-

-

-


Removed Useless Constructor From The Cat Class

--- OOP/ObjectOrientedProgrammingPrinciplesPart1/AnimalSystem/Cat.cs
+++ OOP/ObjectOrientedProgrammingPrinciplesPart1/AnimalSystem/Cat.cs
@@ -2,9 +2,5 @@
 {
     internal abstract class Cat : Animal
     {
-        public Cat(string name, int age, Sex sex)
-            : base(name, age, sex)
-        {
-        }
     }
-}+}


Fix typo in misplaced assembly rule solution

--- PackageViewModel/PackageAnalyzer/MisplacedAssemblyRule.cs
+++ PackageViewModel/PackageAnalyzer/MisplacedAssemblyRule.cs
@@ -65,7 +65,7 @@
                 "Assembly outside known folders",
                 "The assembly '" + target +
                 $"' is not inside the '{folder}' folder and hence it won't be used when the package is installed into a project",
-                "Move it into a known folder folder."
+                "Move it into a known folder."
                 );
         }
     }


Fixed constructors

Fixed constructors

--- Owin.Security.Providers/Gitter/GitterAuthenticationExtensions.cs
+++ Owin.Security.Providers/Gitter/GitterAuthenticationExtensions.cs
@@ -4,7 +4,7 @@
 {
     public static class GitterAuthenticationExtensions
     {
-        public static IAppBuilder UseGooglePlusAuthentication(this IAppBuilder app,
+        public static IAppBuilder UseGitterAuthentication(this IAppBuilder app,
             GitterAuthenticationOptions options)
         {
             if (app == null)
@@ -19,7 +19,7 @@

         public static IAppBuilder UseGitterAuthentication(this IAppBuilder app, string clientId, string clientSecret)
         {
-            return app.UseGooglePlusAuthentication(new GitterAuthenticationOptions
+            return app.UseGitterAuthentication(new GitterAuthenticationOptions
             {
                 ClientId = clientId,
                 ClientSecret = clientSecret


mainline: fixed return type issue of IRequestInfoParser

--- mainline/SocketBase/Protocol/IRequestInfoParser.cs
+++ mainline/SocketBase/Protocol/IRequestInfoParser.cs
@@ -16,6 +16,6 @@
         /// </summary>
         /// <param name="source">The source.</param>
         /// <returns></returns>
-        StringRequestInfo ParseRequestInfo(string source);
+        TRequestInfo ParseRequestInfo(string source);
     }
 }


Fixed missing extensions

Fixed missing extensions

--- Library/TabsterFileSystemLibrary.cs
+++ Library/TabsterFileSystemLibrary.cs
@@ -67,7 +67,7 @@
         {
             if (fileInfo == null)
             {
-                var path = GenerateUniqueFilename(TablatureDirectory, file.ToFriendlyString());
+                var path = GenerateUniqueFilename(TablatureDirectory, string.Format("{0}{1}", file.ToFriendlyString(), Constants.TablatureFileExtension));
                 file.Save(path);
                 fileInfo = new FileInfo(path);
             }
@@ -98,7 +98,7 @@
         {
             if (fileInfo == null)
             {
-                var path = GenerateUniqueFilename(TablatureDirectory, file.Name);
+                var path = GenerateUniqueFilename(PlaylistDirectory, string.Format("{0}{1}", file.Name, Constants.TablaturePlaylistFileExtension));
                 file.Save(path);
                 fileInfo = new FileInfo(path);
             }


to polygon3d

to polygon3d

--- src/Circle3D.cs
+++ src/Circle3D.cs
@@ -83,13 +83,13 @@
                 Line3D lp = null;
                 if (t1.LineContainsPoint(tol_len, p)) lp = t1;
                 else if (t2.LineContainsPoint(tol_len, p)) lp = t2;
-                else throw new Exception($"circle 2 tan 1 point : pt must contained in one of given tan");
+                else throw new Exception($"circle 2 tan 1 point : pt must contained in one of given tan");

                 var lpp = new Line3D(p, lp.V.RotateAboutAxis(t1.V.CrossProduct(t2.V), PI / 2), Line3DConstructMode.PointAndVector);
                 var c = lpp.Intersect(tol_len, t3);

                 Radius = p.Distance(c);
-                CS = new CoordinateSystem3D(c, lpp.V, t2.Perpendicular(tol_len, c).V);
+                CS = new CoordinateSystem3D(c, lpp.V, t2.V);// t2.Perpendicular(tol_len, c).V);
             }

             public double Area { get { return PI * Radius * Radius; } }
@@ -101,6 +101,15 @@
             {
                 return pt.ToUCS(CS).Z.EqualsTol(tol, 0) && pt.Distance(CS.Origin).LessThanOrEqualsTol(tol, Radius);
             }
+
+            public IEnumerable<Line3D> ToPolygon3D(double tol_len)
+            {
+                var pts = Polygon.EllipseToPolygon2D(Vector3D.Zero, 2 * Radius, 2 * Radius, tol_len);
+
+                return pts.RepeatFirstAtEnd()
+                    .Select(w => CS.ToWCS(w))
+                    .Segments();
+            }

         }
     }


Game tree- Fix tree layout not correct after expanding node

--- Source/Editor/AGS.Editor/GameView/GameDebugTree.cs
+++ Source/Editor/AGS.Editor/GameView/GameDebugTree.cs
@@ -95,6 +95,7 @@
             _editor.Game.State.Rooms.OnListChanged.Subscribe(onRoomsChanged);
             _editor.Game.Events.OnRoomChanging.Subscribe(onRoomChanged);
             subscribeRooms(_editor.Game.State.Rooms);
+            _treeView.Expand(_treeView.Tree);
             return Task.CompletedTask;
         }

@@ -320,7 +321,6 @@
             }

             _treeView.Tree = root;
-            _treeView.Expand(root);
         }

         private void addRoomToTree(IRoom room, ITreeStringNode parent)


Follow unit test name conventions

Follow unit test name conventions

--- Source/LibWhipLruTests/Cache/TestStorageManager.cs
+++ Source/LibWhipLruTests/Cache/TestStorageManager.cs
@@ -80,7 +80,7 @@
 		#region Ctor

 		[Test]
-		public void TestCtorDoesNotThrow() {
+		public void TestStorageManager_Ctor_DoesNotThrow() {
 			Assert.DoesNotThrow(() => new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -96,7 +96,7 @@
 		#region Putting assets

 		[Test]
-		public void TestStoreAssetAssetNullThrowsArgNullException() {
+		public void TestStorageManager_StoreAsset_AssetNull_ArgumentNullException() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -108,7 +108,7 @@
 		}

 		[Test]
-		public void TestStoreAssetEmptyIdThrowsArgException() {
+		public void TestStorageManager_StoreAsset_EmptyId_ArgumentException() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -124,7 +124,7 @@
 		}

 		[Test]
-		public void TestStoreAssetDoesntThrowFirstTime() {
+		public void TestStorageManager_StoreAsset_DoesntThrowFirstTime() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -140,7 +140,7 @@
 		}

 		[Test]
-		public void TestStoreAssetDoesntThrowDuplicate() {
+		public void TestStorageManager_StoreAsset_DoesntThrowDuplicate() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -157,7 +157,7 @@
 		}

 		[Test]
-		public void TestStoreAssetDoesntThrowMultiple() {
+		public void TestStorageManager_StoreAsset_DoesntThrowMultiple() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -184,7 +184,7 @@
 		#region Get Assets

 		[Test]
-		public void TestGetAssetEmptyIdThrowsArgException() {
+		public void TestStorageManager_GetAsset_EmptyId_ArgumentException() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -196,7 +196,7 @@
 		}

 		[Test]
-		public void TestGetAssetUnknownDoesntThrow() {
+		public void TestStorageManager_GetAsset_Unknown_DoesntThrow() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -208,7 +208,7 @@
 		}

 		[Test]
-		public void TestGetAssetUnknownIsNull() {
+		public void TestStorageManager_GetAsset_Unknown_IsNull() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -220,7 +220,7 @@
 		}

 		[Test]
-		public void TestGetAssetKnownDoesntThrow() {
+		public void TestStorageManager_GetAsset_Known_DoesntThrow() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -238,7 +238,7 @@
 		}

 		[Test]
-		public void TestGetAssetKnownIsNotNull() {
+		public void TestStorageManager_GetAsset_Known_IsNotNull() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -258,7 +258,7 @@
 		}

 		[Test]
-		public void TestGetAssetKnownHasSameId() {
+		public void TestStorageManager_GetAsset_Known_HasSameId() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),
@@ -278,7 +278,7 @@
 		}

 		[Test]
-		public void TestGetAssetKnownIsIdentical() {
+		public void TestStorageManager_GetAsset_Known_IsIdentical() {
 			var mgr = new StorageManager(
 				_readerCache,
 				TimeSpan.FromMinutes(2),


Removes a temporary delay.

Removes a temporary delay.

--- Source/Slinqy.Test.Functional/Models/WebBrowser.cs
+++ Source/Slinqy.Test.Functional/Models/WebBrowser.cs
@@ -74,8 +74,6 @@
             this.webBrowserDriver
                 .Navigate()
                 .GoToUrl(fullyQualifiedUri);
-
-            Thread.Sleep(2000); // TODO: REMOVE (Temporary: This is to test if there are timing issues w/ filling out the form)

             return this.GetCurrentPageAs<TPage>();
         }


fixed a C&P error in the PDF417 decoder

fixed a C&P error in the PDF417 decoder

git-tfs-id: [https://tfs.codeplex.com/tfs/TFS05/]$/ZXingNet/trunk;C88439

--- Source/lib/pdf417/decoder/PDF417ScanningDecoder.cs
+++ Source/lib/pdf417/decoder/PDF417ScanningDecoder.cs
@@ -515,7 +515,7 @@
          codeword = detectionResult.DetectionResultColumns[barcodeColumn].getCodewordNearby(imageRow);
          if (codeword != null)
          {
-            return leftToRight ? codeword.EndX : codeword.StartX;
+            return leftToRight ? codeword.StartX : codeword.EndX;
          }
          if (isValidBarcodeColumn(detectionResult, barcodeColumn - offset))
          {


Fix bug in repeated password handling.

Fix bug in repeated password handling.

--- StopGuessing/Controllers/LoginAttemptController.cs
+++ StopGuessing/Controllers/LoginAttemptController.cs
@@ -411,7 +411,8 @@
                 ? account.ComputePhase1Hash(passwordProvidedByClient)
                 : ExpensiveHashFunctionFactory.Get(_options.DefaultExpensiveHashingFunction)(
                     passwordProvidedByClient,
-                    Encoding.UTF8.GetBytes(loginAttempt.AddressOfClientInitiatingRequest.ToString()),
+                    ManagedSHA256.Hash(Encoding.UTF8.GetBytes(loginAttempt.UsernameOrAccountId)),
+//                    Encoding.UTF8.GetBytes(loginAttempt.AddressOfClientInitiatingRequest.ToString()),
                     _options.ExpensiveHashingFunctionIterations);
             string phase1HashOfProvidedPasswordAsString = Convert.ToBase64String(phase1HashOfProvidedPassword);

@@ -421,7 +422,9 @@
             // to guess passwords even if we'd blocked their IPs.
             IpHistory ip = await ipHistoryGetTask;

-            bool didSketchIndicateThatTheSameGuessHasBeenMadeRecently = _recentIncorrectPasswords.AddMember(phase1HashOfProvidedPasswordAsString);
+            bool didSketchIndicateThatTheSameGuessHasBeenMadeRecently =
+                account == null &&
+                _recentIncorrectPasswords.AddMember(phase1HashOfProvidedPasswordAsString + loginAttempt.UsernameOrAccountId);

             // Get the popularity of the password provided by the client among incorrect passwords submitted in the past,
             // as we are most concerned about frequently-guessed passwords.


implemented GroupByUntil () (untested).

implemented GroupByUntil () (untested).

--- System.Reactive/System.Reactive.Linq/Observable.cs
+++ System.Reactive/System.Reactive.Linq/Observable.cs
@@ -755,21 +755,27 @@
 			this IObservable<TSource> source,
 			Func<TSource, TKey> keySelector,
 			Func<IGroupedObservable<TKey, TSource>, IObservable<TDuration>> durationSelector)
-		{ throw new NotImplementedException (); }
+		{
+			return source.GroupByUntil (keySelector, durationSelector, EqualityComparer<TKey>.Default);
+		}

 		public static IObservable<IGroupedObservable<TKey, TSource>> GroupByUntil<TSource, TKey, TDuration> (
 			this IObservable<TSource> source,
 			Func<TSource, TKey> keySelector,
 			Func<IGroupedObservable<TKey, TSource>, IObservable<TDuration>> durationSelector,
 			IEqualityComparer<TKey> comparer)
-		{ throw new NotImplementedException (); }
+		{
+			return GroupByUntil<TSource, TKey, TSource, TDuration> (source, keySelector, s => s, durationSelector, comparer);
+		}

 		public static IObservable<IGroupedObservable<TKey, TElement>> GroupByUntil<TSource, TKey, TElement, TDuration> (
 			this IObservable<TSource> source,
 			Func<TSource, TKey> keySelector,
 			Func<TSource, TElement> elementSelector,
 			Func<IGroupedObservable<TKey, TElement>, IObservable<TDuration>> durationSelector)
-		{ throw new NotImplementedException (); }
+		{
+			return source.GroupByUntil (keySelector, elementSelector, durationSelector, EqualityComparer<TKey>.Default);
+		}

 		public static IObservable<IGroupedObservable<TKey, TElement>> GroupByUntil<TSource, TKey, TElement, TDuration> (
 			this IObservable<TSource> source,
@@ -777,7 +783,43 @@
 			Func<TSource, TElement> elementSelector,
 			Func<IGroupedObservable<TKey, TElement>, IObservable<TDuration>> durationSelector,
 			IEqualityComparer<TKey> comparer)
-		{ throw new NotImplementedException (); }
+		{
+			IDisposable dis = null;
+			var sub = new Subject<IGroupedObservable<TKey, TElement>> ();
+			var dic = new Dictionary<TKey, GroupedSubject<TKey, TElement>> (comparer);
+			dis = source.Subscribe (Observer.Create<TSource> ((TSource s) => {
+				try {
+					var k = keySelector (s);
+					GroupedSubject<TKey, TElement> g;
+					if (!dic.TryGetValue (k, out g)) {
+						g = new GroupedSubject<TKey, TElement> (k);
+						var dur = durationSelector (g);
+						IDisposable ddis = null;
+						// after the duration, it removes the GroupedSubject from the dictionary by key.
+						Action action = () => { if (ddis != null) ddis.Dispose (); dic.Remove (k); };
+						ddis = dur.Subscribe (Observer.Create<TDuration> ((TDuration dummy) => { g.OnCompleted (); action (); }, ex => { g.OnError (ex); action (); }, () => action ()));
+						// FIXME: it is possible that the duration observable never sends events and ddis is never disposed...
+						dic.Add (k, g);
+						sub.OnNext (g);
+					}
+					g.OnNext (elementSelector (s));
+				} catch (Exception ex) {
+					sub.OnError (ex);
+					// FIXME: should we handle OnError() in groups too?
+				}
+			}, () => {
+				try {
+					// note that those groups that received expiration from durationSelector are already invoked OnCompleted().
+					foreach (var g in dic.Values)
+						g.OnCompleted ();
+					sub.OnCompleted ();
+				} catch (Exception ex) {
+					sub.OnError (ex);
+					// FIXME: should we handle OnError() in groups too?
+				}
+			}));
+			return new WrappedSubject<IGroupedObservable<TKey, TElement>> (sub, dis);
+		}

 		public static IObservable<TResult> GroupJoin<TLeft, TRight, TLeftDuration, TRightDuration, TResult> (
 			this IObservable<TLeft> left,


Minor cleanup.

Minor cleanup.

--- Console.cs
+++ Console.cs
@@ -54,9 +54,9 @@

         Dictionary<LogType, bool> logTypeFilters = new Dictionary<LogType, bool>
         {
-            { LogType.Assert, true},
+            { LogType.Assert, true },
             { LogType.Error, true },
-            { LogType.Exception,true},
+            { LogType.Exception, true },
             { LogType.Log, true },
             { LogType.Warning, true },
         };
@@ -136,23 +136,23 @@
                 // Iterate through the recorded logs.
                 for (var i = 0; i < logs.Count; i++) {
                     var log = logs[i];
-                    //If is not filtered, can be drawn.
-                    if (logTypeFilters[log.type])
-                    {
-                        // Combine identical messages if collapse option is chosen.
-                        if (collapse && i > 0)
-                        {
-                            var previousMessage = logs[i - 1].message;
-
-                            if (log.message == previousMessage)
-                            {
-                                continue;
-                            }
+
+                    // Skip logs that are filtered out.
+                    if (!logTypeFilters[log.type]) {
+                        return;
+                    }
+
+                    // Combine identical messages if collapse option is chosen.
+                    if (collapse && i > 0) {
+                        var previousMessage = logs[i - 1].message;
+
+                        if (log.message == previousMessage) {
+                            continue;
                         }
-
-                        GUI.contentColor = logTypeColors[log.type];
-                        GUILayout.Label(log.message);
                     }
+
+                    GUI.contentColor = logTypeColors[log.type];
+                    GUILayout.Label(log.message);
                 }

             GUILayout.EndVertical();
@@ -180,11 +180,13 @@
                     logs.Clear();
                 }

-                for (int i = 0; i<5; i++)
-                {
-                    LogType actualType = (LogType) i;
-                    logTypeFilters[actualType] = GUILayout.Toggle(logTypeFilters[actualType], new GUIContent(actualType.ToString(), actualType.ToString() + " toggle filter"), ToggleLayoutOptions);
+                foreach (LogType logType in Enum.GetValues(typeof(LogType))) {
+                    var currentState = logTypeFilters[logType];
+                    var label = logType.ToString();
+                    logTypeFilters[logType] = GUILayout.Toggle(currentState, label, GUILayout.ExpandWidth(false));
+                    GUILayout.Space(20);
                 }
+
                 collapse = GUILayout.Toggle(collapse, collapseLabel, GUILayout.ExpandWidth(false));

             GUILayout.EndHorizontal();
@@ -253,16 +255,5 @@

             logs.RemoveRange(0, amountToRemove);
         }
-
-
-
-        public static GUILayoutOption[] ToggleLayoutOptions
-        {
-            get
-            {
-                return new GUILayoutOption[] { GUILayout.MaxWidth(100) };
-            }
-        }
-
     }
 }


Specify default frame (RTN) instead of hard coded. Vertical white space between GUI control lines. Bigger control segment color box.

--- src/Controls.cs
+++ src/Controls.cs
@@ -46,20 +46,20 @@
 	public Navigator navigator;

 	// Static fields
-	public static float defaultCone = 90f;
-	public static float defaultClock = 0f;
-	public static float defaultFlatspin = 0f;
+	// Defaults
 	public static float defaultThrottle = 0f;
 	public static bool defaultSailon = true;
+	public static string defaultFrame = "RTN";
+	public static double defaultDuration = 10 * SecondsPerDay;
+	public static int defaultiwarp = 10; // Warp level index
+	// Time Conversion
 	public static double SecondsPerDay = 21600.0;
 	public static double SecondsPerHour = 3600.0;
 	public static double SecondsPerMinute = 60.0;
 	public static double HoursPerDay = 6.0;
-	public static double defaultDuration = 10 * SecondsPerDay;
 	public static double[] warpLevels = { 1, 2, 3, 4, 5, 10, 50, 100, 1000, 10000, 100000 };
-	public static int defaultiwarp = 10;
-
-	// New mod function
+
+	// Modulous function (instead of % operator, which is remainder)
 	float Mod (float a, float b) {
 	    return a - b * (float)Math.Floor(a / b);
 	}
@@ -74,8 +74,13 @@
 	}

 	// Angle controls
-	public void GUIAngle (ref float angle, ref string angle_str) {
+	public void GUIAngle (ref float angle, ref string angle_str, string name) {
 	    // Text field
+	    GUILayout.BeginVertical();
+	    // Name of angle over top
+	    GUILayout.Label(name, GUILayout.Width(80));
+	    GUILayout.BeginHorizontal();
+	    // Text field & buttons below
 	    string new_str = GUILayout.TextField(angle_str, GUILayout.Width(30));
 	    if (new_str != angle_str) {
 		angle_str = new_str;
@@ -96,6 +101,9 @@
 		angle_str = angle.ToString();
 		controls.Update();
 	    }
+	    // End GUI
+	    GUILayout.EndHorizontal();
+	    GUILayout.EndVertical();
 	}

 	// Throttle controls
@@ -208,7 +216,7 @@
 		hours_str = new_hours_str;
 		int parsedHours;
 		if (Int32.TryParse(hours_str, out parsedHours)) {
-		    if (parsedHours >= 0 && parsedHours <= 6) {
+		    if (parsedHours >= 0 && parsedHours <= HoursPerDay) {
 			hours = (double)parsedHours;
 			duration = SecondsPerDay * days + SecondsPerHour * hours;
 			controls.Update();
@@ -246,16 +254,19 @@
 	    cstyle.normal.background = ctx;
 	    ctx.SetPixel(1,1,color);
 	    ctx.Apply();
-	    GUILayout.Label(" ", cstyle, GUILayout.Width(30));
+	    GUILayout.Label(" ", cstyle, GUILayout.Width(30), GUILayout.Height(30));
 	}

 	// GUI line
 	public void GUILine (Color color, int i) {
+	    // Vertical space
+	    GUILayout.Space(5);
+
 	    GUILayout.BeginHorizontal();

-	    GUIAngle(ref cone, ref cone_str);
-	    GUIAngle(ref clock, ref clock_str);
-	    GUIAngle(ref flatspin, ref flatspin_str);
+	    GUIAngle(ref cone, ref cone_str, frame.names[0]);
+	    GUIAngle(ref clock, ref clock_str, frame.names[1]);
+	    GUIAngle(ref flatspin, ref flatspin_str, frame.names[2]);
 	    GUIThrottle();
 	    GUITime();
 	    GUIColor(color);
@@ -265,6 +276,9 @@
 	    if (GUILayout.Button("DEL")) { controls.Remove(i); };

 	    GUILayout.EndHorizontal();
+
+	    // Vertical space
+	    GUILayout.Space(5);
 	}

 	// Parse a string to a single
@@ -343,8 +357,8 @@
 	}

 	public static Control Default (Navigator navigator, Controls controls) {
-	    var frame = Frame.Frames["RTN"];
-	    return new Control(navigator, controls, frame.defaults[0], frame.defaults[1], frame.defaults[2], defaultThrottle, defaultSailon, defaultDuration, defaultiwarp, "RTN");
+	    var frame = Frame.Frames[defaultFrame];
+	    return new Control(navigator, controls, frame.defaults[0], frame.defaults[1], frame.defaults[2], defaultThrottle, defaultSailon, defaultDuration, defaultiwarp, defaultFrame);
 	}
     }

@@ -483,9 +497,9 @@

 	    // Controls
 	    GUILayout.BeginHorizontal();
-	    GUILayout.Label("Cone", GUILayout.Width(80));
-	    GUILayout.Label("Clock", GUILayout.Width(80));
-	    GUILayout.Label("Flatspin", GUILayout.Width(80));
+	    GUILayout.Label("Angle 1", GUILayout.Width(80));
+	    GUILayout.Label("Angle 2", GUILayout.Width(80));
+	    GUILayout.Label("Angle 3", GUILayout.Width(80));
 	    GUILayout.Label("Throttle", GUILayout.Width(80));
 	    GUILayout.Label("Days", GUILayout.Width(120));
 	    GUILayout.Label("Hours", GUILayout.Width(65));
@@ -502,7 +516,7 @@

 		// Draw individual GUIs
 		control.GUILine(colorMap[icolor], i);
-
+
 		// Update total duration
 		durationTotal += control.duration;


fixed redundant concat

fixed redundant concat

--- MSOE.MediaComplete/Settings.xaml.cs
+++ MSOE.MediaComplete/Settings.xaml.cs
@@ -141,7 +141,7 @@

             if (!Directory.Exists(SettingWrapper.GetMusicDir()))
-                Directory.CreateDirectory(homeDir + SettingWrapper.GetMusicDir());
+                Directory.CreateDirectory(SettingWrapper.GetMusicDir());
             Close();
         }


Scope and limit parameter to IBeatmapSkin

--- osu.Game.Rulesets.Osu.Tests/TestSceneSkinFallbacks.cs
+++ osu.Game.Rulesets.Osu.Tests/TestSceneSkinFallbacks.cs
@@ -29,7 +29,7 @@
     public class TestSceneSkinFallbacks : TestSceneOsuPlayer
     {
         private readonly TestSource testUserSkin;
-        private readonly TestSource testBeatmapSkin;
+        private readonly BeatmapTestSource testBeatmapSkin;

         public TestSceneSkinFallbacks()
         {
@@ -80,18 +80,15 @@

         public class CustomSkinWorkingBeatmap : ClockBackedTestWorkingBeatmap
         {
-            private readonly ISkinSource skinSource;
+            private readonly IBeatmapSkin skin;

-            public CustomSkinWorkingBeatmap(IBeatmap beatmap, Storyboard storyboard, IFrameBasedClock frameBasedClock, AudioManager audio, ISkinSource skin)
+            public CustomSkinWorkingBeatmap(IBeatmap beatmap, Storyboard storyboard, IFrameBasedClock frameBasedClock, AudioManager audio, IBeatmapSkin skin)
                 : base(beatmap, storyboard, frameBasedClock, audio)
             {
-                if (!(skin is IBeatmapSkin))
-                    throw new ArgumentException("The provided skin source must be of type IBeatmapSkin.");
-
-                skinSource = skin;
+                this.skin = skin;
             }

-            protected override IBeatmapSkin GetSkin() => (IBeatmapSkin)skinSource;
+            protected override IBeatmapSkin GetSkin() => skin;
         }

         public class SkinProvidingPlayer : TestPlayer
@@ -115,7 +112,7 @@
             }
         }

-        public class BeatmapTestSource : TestSource, IBeatmapSkin
+        private class BeatmapTestSource : TestSource, IBeatmapSkin
         {
             public BeatmapTestSource()
                 : base("beatmap")


Add test for object move

Add test for object move

--- osu.Game.Tests/Visual/Gameplay/TestSceneSkinEditor.cs
+++ osu.Game.Tests/Visual/Gameplay/TestSceneSkinEditor.cs
@@ -1,7 +1,5 @@
 // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
 // See the LICENCE file in the repository root for full licence text.
-
-#nullable disable

 using System.Linq;
 using NUnit.Framework;
@@ -22,7 +20,7 @@
 {
     public class TestSceneSkinEditor : PlayerTestScene
     {
-        private SkinEditor skinEditor;
+        private SkinEditor skinEditor = null!;

         protected override bool Autoplay => true;

@@ -54,7 +52,7 @@
         [Test]
         public void TestEditComponent()
         {
-            BarHitErrorMeter hitErrorMeter = null;
+            BarHitErrorMeter hitErrorMeter = null!;

             AddStep("select bar hit error blueprint", () =>
             {
@@ -64,6 +62,10 @@
                 skinEditor.SelectedComponents.Clear();
                 skinEditor.SelectedComponents.Add(blueprint.Item);
             });
+
+            AddStep("move by keyboard", () => InputManager.Key(Key.Right));
+
+            AddAssert("hitErrorMeter moved", () => hitErrorMeter.X != 0);

             AddAssert("value is default", () => hitErrorMeter.JudgementLineThickness.IsDefault);


Reduce size of participants tiles

Reduce size of participants tiles

--- osu.Game/Screens/Multi/Components/ParticipantsList.cs
+++ osu.Game/Screens/Multi/Components/ParticipantsList.cs
@@ -18,7 +18,7 @@
 {
     public class ParticipantsList : MultiplayerComposite
     {
-        public const float TILE_SIZE = 70;
+        public const float TILE_SIZE = 35;

         public override Axes RelativeSizeAxes
         {
@@ -113,7 +113,7 @@
             public UserTile(User user)
             {
                 this.user = user;
-                Size = new Vector2(70f);
+                Size = new Vector2(TILE_SIZE);
                 CornerRadius = 5f;
                 Masking = true;


Delegate interface to valid target

Delegate interface to valid target

--- osu.Game/Screens/Play/MasterGameplayClockContainer.cs
+++ osu.Game/Screens/Play/MasterGameplayClockContainer.cs
@@ -8,6 +8,7 @@
 using osu.Framework.Audio.Track;
 using osu.Framework.Bindables;
 using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
 using osu.Framework.Timing;
 using osu.Game.Beatmaps;
 using osu.Game.Beatmaps.ControlPoints;
@@ -57,6 +58,11 @@
         private double? actualStopTime;

         /// <summary>
+        /// Maintained solely to delegate <see cref="IAdjustableAudioComponent"/> pieces to (to maintain parent lookups).
+        /// </summary>
+        private readonly AudioContainer audioContainer;
+
+        /// <summary>
         /// Create a new master gameplay clock container.
         /// </summary>
         /// <param name="beatmap">The beatmap to be used for time and metadata references.</param>
@@ -69,6 +75,8 @@
             this.skipTargetTime = skipTargetTime;

             StartTime = findEarliestStartTime();
+
+            AddInternal(audioContainer = new AudioContainer());
         }

         private double findEarliestStartTime()
@@ -238,25 +246,32 @@
             track.RemoveAdjustment(type, adjustBindable);
         }

+        void IAdjustableAudioComponent.RemoveAllAdjustments(AdjustableProperty type) => audioContainer.RemoveAllAdjustments(type);
+
+        void IAdjustableAudioComponent.BindAdjustments(IAggregateAudioAdjustment component) => audioContainer.BindAdjustments(component);
+
+        void IAdjustableAudioComponent.UnbindAdjustments(IAggregateAudioAdjustment component) => audioContainer.UnbindAdjustments(component);
+
+        BindableNumber<double> IAdjustableAudioComponent.Volume => audioContainer.Volume;
+
+        BindableNumber<double> IAdjustableAudioComponent.Balance => audioContainer.Balance;
+
+        BindableNumber<double> IAdjustableAudioComponent.Frequency => audioContainer.Frequency;
+
+        BindableNumber<double> IAdjustableAudioComponent.Tempo => audioContainer.Tempo;
+
         public override void ResetSpeedAdjustments()
         {
             track.RemoveAllAdjustments(AdjustableProperty.Frequency);
             track.RemoveAllAdjustments(AdjustableProperty.Tempo);
         }

-        public void RemoveAllAdjustments(AdjustableProperty type) => throw new NotImplementedException();
-
-        public void BindAdjustments(IAggregateAudioAdjustment component) => throw new NotImplementedException();
-        public void UnbindAdjustments(IAggregateAudioAdjustment component) => throw new NotImplementedException();
-
-        public BindableNumber<double> Volume => throw new NotImplementedException();
-        public BindableNumber<double> Balance => throw new NotImplementedException();
-        public BindableNumber<double> Frequency => throw new NotImplementedException();
-        public BindableNumber<double> Tempo => throw new NotImplementedException();
-
-        public IBindable<double> AggregateVolume => throw new NotImplementedException();
-        public IBindable<double> AggregateBalance => throw new NotImplementedException();
-        public IBindable<double> AggregateFrequency => throw new NotImplementedException();
-        public IBindable<double> AggregateTempo => throw new NotImplementedException();
+        IBindable<double> IAggregateAudioAdjustment.AggregateVolume => audioContainer.AggregateVolume;
+
+        IBindable<double> IAggregateAudioAdjustment.AggregateBalance => audioContainer.AggregateBalance;
+
+        IBindable<double> IAggregateAudioAdjustment.AggregateFrequency => audioContainer.AggregateFrequency;
+
+        IBindable<double> IAggregateAudioAdjustment.AggregateTempo => audioContainer.AggregateTempo;
     }
 }