Minor awesomeness!

Minor awesomeness!

* Disposed a disposable object.

--- Easy.Compression/LZ4Compressor.cs
+++ Easy.Compression/LZ4Compressor.cs
@@ -129,6 +129,7 @@
         /// </summary>
         public void Dispose()
         {
+            _copyBuffer.Dispose();
             _streamIn.Dispose();
             _streamOut.Dispose();
             _compressorStandard.Dispose();


The "SongFinished" event of the AudioPlayer class, now has the SongEventArgs class as event argument

--- Espera/Espera.Core/AudioPlayer.cs
+++ Espera/Espera.Core/AudioPlayer.cs
@@ -14,6 +14,11 @@
         private WaveChannel32 inputStream;
         private readonly Timer songFinishedTimer;
         private float volume;
+
+        /// <summary>
+        /// Occurs when the song has been finished.
+        /// </summary>
+        public event EventHandler<SongEventArgs> SongFinished;

         /// <summary>
         /// Gets the playback state.
@@ -84,11 +89,6 @@
         }

         /// <summary>
-        /// Occurs when the song has been finished.
-        /// </summary>
-        public event EventHandler SongFinished;
-
-        /// <summary>
         /// Initializes a new instance of the <see cref="AudioPlayer"/> class.
         /// </summary>
         public AudioPlayer()
@@ -293,7 +293,7 @@
             if (this.CurrentTime >= this.TotalTime)
             {
                 this.Stop();
-                this.SongFinished.RaiseSafe(this, e);
+                this.SongFinished.RaiseSafe(this, new SongEventArgs(this.LoadedSong));
             }
         }
     }


Adding batched move item.

Adding batched move item.

--- ExampleScripts/UOErebor/items.csx
+++ ExampleScripts/UOErebor/items.csx
@@ -8,6 +8,51 @@
     public static void Pickup(Item item)
     {
         UO.TryMoveItem(item, UO.Me.BackPack);
+    }
+
+    public static void BatchedMove(int totalAmount, int batchSize)
+    {
+        UO.Log("Select item to move");
+        var itemTemplate = UO.AskForItem();
+        if (itemTemplate == null)
+        {
+            UO.Log("Moving cancelled");
+            return;
+        }
+
+        UO.Log("Select target container");
+        var targetContainer = UO.AskForItem();
+        if (targetContainer == null)
+        {
+            UO.Log("Moving cancelled");
+            return;
+        }
+
+        while (totalAmount > 0)
+        {
+            var itemsToMove = UO.Items.OfColor(itemTemplate.Color).OfType(itemTemplate.Type);
+            if (itemTemplate.ContainerId.HasValue)
+            {
+                itemsToMove = itemsToMove.InContainer(itemTemplate.ContainerId.Value);
+            }
+
+            var itemsToMoveOnSamePosition = itemsToMove.Where(x => x.Location == itemTemplate.Location).ToArray();
+            if (itemsToMoveOnSamePosition.Any())
+                itemsToMove = itemsToMoveOnSamePosition;
+
+            var itemToMove = itemsToMove.FirstOrDefault();
+            if (itemToMove == null)
+            {
+                UO.Log("No item to move found");
+                break;
+            }
+            var amount = batchSize > totalAmount ? totalAmount : batchSize;
+            amount = amount > itemToMove.Amount ? itemToMove.Amount : amount;
+
+            UO.Log($"Moving {amount}, {totalAmount} to move");
+            Items.MoveItems(itemsToMove, (ushort)amount, targetContainer);
+            totalAmount -= amount;
+        }
     }

     public static void MoveItems(IEnumerable<Item> items, Item targetContainer)


Loading relevant files directly to base necro file.

--- ExampleScripts/UOErebor/necro.csx
+++ ExampleScripts/UOErebor/necro.csx
@@ -1,7 +1,36 @@
 #load "Specs.csx"
+#load "colors.csx"
+#load "sounds.csx"
 #load "party.csx"
 #load "TwoStateAbility.csx"
 #load "summons.csx"
+#load "watchdog.csx"
+#load "hpnotify.csx"
+#load "looting.csx"
+#load "targeting.csx"
+#load "eating.csx"
+#load "hiding.csx"
+#load "questarrow.csx"
+#load "party.csx"
+#load "doors.csx"
+#load "combattext.csx"
+#load "potions.csx"
+#load "phantoms.csx"
+#load "title.csx"
+#load "explevel.csx"
+#load "walls.csx"
+#load "provocation.csx"
+#load "healing.csx"
+#load "counter.csx"
+#load "startup.csx"
+#load "tracking.csx"
+#load "screenshot.csx"
+#load "vetesnik.csx"
+#load "banking.csx"
+#load "inscription.csx"
+#load "uoam.csx"
+#load "warehouse.csx"
+#load "EquipSet.csx"

 using System;


add a view for the post text.

add a view for the post text.

--- FacebookPagesApp/PagesActivity.cs
+++ FacebookPagesApp/PagesActivity.cs
@@ -106,6 +106,12 @@
                         return firstVisibleItem + visibleItemCount >= (totalItemCount - 4);
                     }).InvokeCommand(this.ViewModel.LoadMorePosts));

+            subscription.Add(
+                this.ViewModel.Posts.BindTo(
+                    posts,
+                    (parent) => new TextView(parent.Context),
+                    (viewModel, view) => { view.Text = viewModel.message; }));
+
             this.subscription = subscription;
         }


- Changed Data property of SecurityContext to autoproperty.

--- FluentSecurity/SecurityContext.cs
+++ FluentSecurity/SecurityContext.cs
@@ -7,13 +7,13 @@
 {
 	public class SecurityContext : ISecurityContext
 	{
-		private readonly ExpandoObject _data;
 		private readonly ISecurityRuntime _runtime;

 		private SecurityContext(ISecurityRuntime runtime)
 		{
 			Id = Guid.NewGuid();
-			_data = new ExpandoObject();
+			Data = new ExpandoObject();
+
 			_runtime = runtime;

 			var modifyer = runtime.SecurityContextModifyer;
@@ -21,11 +21,7 @@
 		}

 		public Guid Id { get; private set; }
-
-		public dynamic Data
-		{
-			get { return _data; }
-		}
+		public dynamic Data { get; private set; }

 		public bool CurrentUserIsAuthenticated()
 		{


build fix

build fix

--- GridDomain.Node/GridDomainNode.cs
+++ GridDomain.Node/GridDomainNode.cs
@@ -212,16 +212,6 @@
             return await _commandExecutor.Execute(plan);
         }

-        public async Task<object> Execute(CommandPlan plan)
-        {
-            return await _commandExecutor.Execute(plan);
-        }
-
-        public async Task<T> Execute<T>(CommandPlan<T> plan)
-        {
-            return await _commandExecutor.Execute(plan);
-        }
-
         public void Execute<T>(T command, IMessageMetadata metadata) where T : ICommand
         {
             _commandExecutor.Execute(command, metadata);


Add settings for EnableAutoFilter in GriddlyExcelResult

--- Griddly.Mvc/GriddlyExcelResult.cs
+++ Griddly.Mvc/GriddlyExcelResult.cs
@@ -9,6 +9,8 @@
 {
     public class GriddlyExcelResult<T> : ActionResult
     {
+        public static bool EnableAutoFilter { get; set; } = true;
+
         IEnumerable<T> _data;
         GriddlySettings _settings;
         string _name;
@@ -91,7 +93,8 @@
                         ws.Column(i + 1).AutoFit();
                 }

-                ws.Cells[1, 1, 1 + y, columns.Count].AutoFilter = true;
+                if (EnableAutoFilter)
+                    ws.Cells[1, 1, 1 + y, columns.Count].AutoFilter = true;

                 context.HttpContext.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                 context.HttpContext.Response.AddHeader("content-disposition", "attachment;  filename=" + _name + ".xlsx");


OverlayAdorner tweak filtering

OverlayAdorner tweak filtering

Start: PreviewStylusInRange
Stop: StylusOutOfRange
This all has potential to be horribly annoying bad.

--- Gu.Wpf.ToolTips/OverlayAdorner.cs
+++ Gu.Wpf.ToolTips/OverlayAdorner.cs
@@ -96,9 +96,9 @@
                 IsTabStopProperty.OverrideMetadata(typeof(TouchOnlyControl), new FrameworkPropertyMetadata(false));
                 FocusableProperty.OverrideMetadata(typeof(TouchOnlyControl), new FrameworkPropertyMetadata(false));

-                InputManager.Current.PreNotifyInput += (sender, args) =>
+                InputManager.Current.PreProcessInput += (sender, args) =>
                 {
-                    if (args.StagingItem.Input is { RoutedEvent: { Name: "TouchEnter" }, Source: TouchOnlyControl _ })
+                    if (args.StagingItem.Input is { RoutedEvent: { Name: "PreviewStylusInRange" } })
                     {
                         currentInput = InputType.Touch;
                     }
@@ -107,31 +107,27 @@
                         currentInput = InputType.Other;
                     }

-                    //Dump("PreNotifyInput", args);
+                    Dump("PreProcessInput", args);
                 };
-
-                InputManager.Current.PostNotifyInput += (sender, args) =>
+                InputManager.Current.PostProcessInput += (sender, args) =>
                 {
-                    if (args.StagingItem.Input is { RoutedEvent: { Name: "TouchLeave" }, Source: TouchOnlyControl _ })
-                    {
-                        currentInput = InputType.None;
-                    }
-                    else if (currentInput != InputType.Touch)
+                    if (args.StagingItem.Input is { RoutedEvent: { Name: "StylusOutOfRange" } } ||
+                        currentInput != InputType.Touch)
                     {
                         currentInput = InputType.None;
                     }

-                    //Dump("PostNotifyInput", args);
+                    //Dump("PostProcessInput", args);
                 };

-                //static void Dump(string name, NotifyInputEventArgs args)
-                //{
-                //    if (args.StagingItem.Input is { } inputEventArgs)
-                //    {
-                //        Debug.WriteLine($"{name,-15} currentInput: {currentInput,-5} RoutedEvent: {inputEventArgs.RoutedEvent.Name}");
-                //        // Debug.WriteLine($"{name} RoutedEvent: {inputEventArgs.RoutedEvent.Name} Device: {inputEventArgs.Device?.GetType().Name ?? "null"} Source: {inputEventArgs.Source} currentInput: {currentInput}");
-                //    }
-                //}
+                static void Dump(string name, NotifyInputEventArgs args)
+                {
+                    if (args.StagingItem.Input is { } inputEventArgs)
+                    {
+                        Debug.WriteLine($"{name,-16} {inputEventArgs.GetType().Name,-21} {inputEventArgs.Device?.GetType().Name ?? "null",-21} {inputEventArgs.RoutedEvent.Name}");
+                        // Debug.WriteLine($"{name} RoutedEvent: {inputEventArgs.RoutedEvent.Name} Device: {inputEventArgs.Device?.GetType().Name ?? "null"} Source: {inputEventArgs.Source} currentInput: {currentInput}");
+                    }
+                }
             }

             private enum InputType


Added multiply Matrix with scalar operator in Matrix2D class

--- ISAAR.MSolve.Matrices/Matrix2D.cs
+++ ISAAR.MSolve.Matrices/Matrix2D.cs
@@ -170,6 +170,18 @@
                 for (int j = 0; j < A.Columns; j++)
                     c[i] += AA[i, j] * b[j];
             return new Vector<double>(c);
+        }
+
+        public static Matrix2D<double> operator *(Matrix2D<T> A, double b)
+        {
+            if (!(typeof(T) == typeof(double))) throw new InvalidOperationException("Cannot multiply for types other than double");
+
+            Matrix2D<double> AA = new Matrix2D<double>(A.data as double[,]);
+            for (int i = 0; i < A.Rows; i++)
+                for (int j = 0; j < A.Columns; j++)
+                    AA[i, j] = AA[i, j] * b;
+            return AA;
+
         }

         public void SVD(double[] w, double[,] v)


Okay. Got it so it can flip Svg to the other layers in a more proper fashion.

--- ImageTracerGui/MainWindow.xaml.cs
+++ ImageTracerGui/MainWindow.xaml.cs
@@ -256,10 +256,10 @@
         {
             if (!_part1Complete)
             {
-                SaveTracedImage(new[] { @"..\..\Images\Chrono Trigger2.png", "outfilename", @"Chrono Trigger2.svg", "ltres", "0.1", "qtres", "1", "scale", "44", "numberofcolors", "256", "pathomit", "0" });
+                SaveTracedImage(new[] { @"..\..\Images\1.png", "outfilename", @"1.svg", "ltres", "0.1", "qtres", "1", "scale", "44", "numberofcolors", "256", "pathomit", "0" });
                 _part1Complete = true;
             }
-            SvgViewer.UnloadDiagrams();
+            CanvasScroller.Visibility = Visibility.Hidden;
             ImageDisplay.Source = BitmapToImageSource(_loadedImage);
         }

@@ -271,7 +271,7 @@
                 ImageToSvg2();
                 _part2Complete = true;
             }
-            SvgViewer.UnloadDiagrams();
+            CanvasScroller.Visibility = Visibility.Hidden;
             ImageDisplay.Source = BitmapToImageSource(_paletteImage);
         }

@@ -329,7 +329,7 @@
                 }
             }
             LayerPixelCount.Content = pixelCount;
-            SvgViewer.UnloadDiagrams();
+            CanvasScroller.Visibility = Visibility.Hidden;
             ImageDisplay.Source = BitmapToImageSource(image);
         }

@@ -348,7 +348,7 @@
                 Part4ComboBox.ItemsSource = paths.Select((cp, i) => new ColorSelectionItem(cp.Color, i)).ToList();
                 PathCount.Content = paths.Count;
             }
-            SvgViewer.UnloadDiagrams();
+            CanvasScroller.Visibility = Visibility.Hidden;
             ImageDisplay.Source = BitmapToImageSource(_pathPointImage);
         }

@@ -469,7 +469,7 @@
             var color = path.Color.Color;
             var image = DrawPointsImage(path.Points, _loadedImage.Width + 1, _loadedImage.Height + 1, color);
             PathPointsCount.Content = path.Points.Count;
-            SvgViewer.UnloadDiagrams();
+            CanvasScroller.Visibility = Visibility.Hidden;
             ImageDisplay.Source = BitmapToImageSource(image);

             LineGrid.Children.Clear();
@@ -500,7 +500,7 @@
             {
                 _interpolationPointLayers = _pathPointLayers.ToDictionary(cp => cp.Key, cp => Interpolation.Convert(cp.Value));
                 var paths = _interpolationPointLayers.SelectMany(cl => cl.Value.Paths.Select(p => new { Color = cl.Key, p.Points })).ToList();
-                if (false)
+                if (true)
                 {
                     double gridWidth = _loadedImage.Width;
                     double gridHeight = _loadedImage.Height;
@@ -517,9 +517,9 @@
                         var pathLines = CreateOverlayLines(points, offset, brush, 10.0, false);
                         lines.AddRange(pathLines);
                     }
-                }
-                //_interpLines = lines;
-                _interpLines = new List<UIElement>();
+                    _interpLines = lines;
+                }
+                //_interpLines = new List<UIElement>();
                 _part5Compete = true;
                 InterpCount.Content = paths.Count;
             }
@@ -528,7 +528,7 @@
             LineGrid.Width = _gridWidth;
             LineGrid.Height = _gridHeight;
             LineGrid.Children.AddRange(_interpLines);
-            SvgViewer.UnloadDiagrams();
+            CanvasScroller.Visibility = Visibility.Hidden;
             ImageDisplay.Source = BitmapToImageSource(CreateTransparentBitmap(_loadedImage.Width + 1, _loadedImage.Height + 1));
         }

@@ -609,7 +609,7 @@
             LineGrid.Width = gridWidth;
             LineGrid.Height = gridHeight;
             LineGrid.Children.AddRange(lines);
-            SvgViewer.UnloadDiagrams();
+            CanvasScroller.Visibility = Visibility.Hidden;
             ImageDisplay.Source = BitmapToImageSource(CreateTransparentBitmap(_loadedImage.Width + 1, _loadedImage.Height + 1));
         }

@@ -633,7 +633,7 @@
                 _part7Complete = true;
             }

-            if (false)
+            if (true)
             {
                 LineGrid.Children.Clear();
                 double gridWidth = _loadedImage.Width;
@@ -642,11 +642,12 @@

                 var indices = _segmentLayers.SelectMany(cl => cl.Value.Paths.SelectMany(p => p.Segments)).ToList();
                 var segmentLines = indices.SelectMany((s, i) => CreateSegmentLines(i, offset, false));
-                ImageDisplay.Source = BitmapToImageSource(CreateTransparentBitmap(_loadedImage.Width + 1, _loadedImage.Height + 1));
-
+
                 LineGrid.Width = gridWidth;
                 LineGrid.Height = gridHeight;
                 LineGrid.Children.AddRange(segmentLines);
+                CanvasScroller.Visibility = Visibility.Hidden;
+                ImageDisplay.Source = BitmapToImageSource(CreateTransparentBitmap(_loadedImage.Width + 1, _loadedImage.Height + 1));
             }

@@ -736,7 +737,7 @@

             LineGrid.Children.Clear();
             var segmentLines = CreateSegmentLines(index, offset);
-            SvgViewer.UnloadDiagrams();
+            CanvasScroller.Visibility = Visibility.Hidden;
             ImageDisplay.Source = BitmapToImageSource(CreateTransparentBitmap(_loadedImage.Width + 1, _loadedImage.Height + 1));

             LineGrid.Width = gridWidth;
@@ -773,24 +774,29 @@
                     //CanvasScroller.Visibility = Visibility.Visible;
                 }

+                //SvgViewer.UnloadDiagrams();
+
+
+                CanvasScroller.Visibility = Visibility.Hidden;
+                SvgViewer.RenderDiagrams(_renderedSvg);
+
+                Rect bounds = SvgViewer.Bounds;
+                if (bounds.IsEmpty)
+                {
+                    bounds = new Rect(0, 0, CanvasScroller.ActualWidth, CanvasScroller.ActualHeight);
+                }
+
+                ZoomPanControl.AnimatedZoomTo(bounds);
+
                 _part8Complete = true;
                 //Part8Button.IsEnabled = false;
             }
-
-            SvgViewer.UnloadDiagrams();
+            else
+            {
+                CanvasScroller.Visibility = Visibility.Visible;
+            }
+
             ImageDisplay.Source = BitmapToImageSource(CreateTransparentBitmap(_loadedImage.Width + 1, _loadedImage.Height + 1));
-
-            CanvasScroller.Visibility = Visibility.Hidden;
-            SvgViewer.RenderDiagrams(_renderedSvg);
-
-            Rect bounds = SvgViewer.Bounds;
-            if (bounds.IsEmpty)
-            {
-                bounds = new Rect(0, 0, CanvasScroller.ActualWidth, CanvasScroller.ActualHeight);
-            }
-
-            ZoomPanControl.AnimatedZoomTo(bounds);
-
         }

         // Converting tracedata to an SVG string, paths are drawn according to a Z-index


Fix commit d2481f19eb81a42ef57bf6716759397b35403365

--- Algo/Storages/MarketDataStorage.cs
+++ Algo/Storages/MarketDataStorage.cs
@@ -54,9 +54,6 @@

 		private readonly DataType _dataType;
 		DataType IMarketDataStorage.DataType => _dataType;
-
-		private IExchangeInfoProvider _exchangeInfoProvider;
-		private TimeSpan? _tzOffset;

 		public SecurityId SecurityId { get; }


Improved token jumping

Improved token jumping

--- AngleSharp/Parser/Css/CssParser.cs
+++ AngleSharp/Parser/Css/CssParser.cs
@@ -693,7 +693,12 @@
             while (tokens.Current.Type == CssTokenType.Comma && tokens.MoveNext());

             if (tokens.Current.Type != CssTokenType.CurlyBracketOpen)
+            {
+                if (tokens.Current.Type == CssTokenType.RoundBracketClose)
+                    tokens.MoveNext();
+
                 JumpToEndOfDeclaration(tokens);
+            }

             return list;
         }
@@ -750,7 +755,10 @@
             var token = tokens.Current;

             if (token.Type != CssTokenType.Ident)
+            {
+                JumpToClosedArguments(tokens);
                 return null;
+            }

             value.Reset();
             var feature = ((CssKeywordToken)token).Data;
@@ -1057,99 +1065,109 @@

         static void JumpToEndOfDeclaration(IEnumerator<CssToken> tokens)
         {
-            JumpTo(tokens, CssTokenType.Semicolon, CssTokenType.CurlyBracketClose);
-        }
-
-        static void JumpToNextSemicolon(IEnumerator<CssToken> tokens)
-        {
-            JumpTo(tokens, CssTokenType.Semicolon);
-        }
-
-        static void JumpToClosedArguments(IEnumerator<CssToken> tokens)
-        {
-            JumpTo(tokens, CssTokenType.RoundBracketClose);
-        }
-
-        static void JumpTo(IEnumerator<CssToken> tokens, CssTokenType target)
-        {
             var round = 0;
             var curly = 0;
             var square = 0;
-            var canBeFound = true;

             do
             {
-                if (canBeFound && tokens.Current.Type == target)
-                    break;
-
                 switch (tokens.Current.Type)
                 {
                     case CssTokenType.CurlyBracketClose:
                         curly--;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
-                        break;
+                        goto case CssTokenType.Semicolon;
                     case CssTokenType.CurlyBracketOpen:
                         curly++;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
                         break;
                     case CssTokenType.RoundBracketClose:
                         round--;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
                         break;
                     case CssTokenType.RoundBracketOpen:
                         round++;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
                         break;
                     case CssTokenType.SquareBracketClose:
                         square--;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
                         break;
                     case CssTokenType.SquareBracketOpen:
                         square++;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
+                        break;
+                    case CssTokenType.Semicolon:
+                        if (round == 0 && curly == 0 && square == 0)
+                            return;
                         break;
                 }
             }
             while (tokens.MoveNext());
         }

-        static void JumpTo(IEnumerator<CssToken> tokens, CssTokenType target1, CssTokenType target2)
+        static void JumpToNextSemicolon(IEnumerator<CssToken> tokens)
         {
             var round = 0;
             var curly = 0;
             var square = 0;
-            var canBeFound = true;

             do
             {
-                if (canBeFound && (tokens.Current.Type == target1 || tokens.Current.Type == target2))
-                    break;
-
                 switch (tokens.Current.Type)
                 {
                     case CssTokenType.CurlyBracketClose:
                         curly--;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
                         break;
                     case CssTokenType.CurlyBracketOpen:
                         curly++;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
                         break;
                     case CssTokenType.RoundBracketClose:
                         round--;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
                         break;
                     case CssTokenType.RoundBracketOpen:
                         round++;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
                         break;
                     case CssTokenType.SquareBracketClose:
                         square--;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
                         break;
                     case CssTokenType.SquareBracketOpen:
                         square++;
-                        canBeFound = round == 0 && curly == 0 && square == 0;
+                        break;
+                    case CssTokenType.Semicolon:
+                        if (round == 0 && curly == 0 && square == 0)
+                            return;
+
+                        break;
+                }
+            }
+            while (tokens.MoveNext());
+        }
+
+        static void JumpToClosedArguments(IEnumerator<CssToken> tokens)
+        {
+            var round = 0;
+            var curly = 0;
+            var square = 0;
+
+            do
+            {
+                switch (tokens.Current.Type)
+                {
+                    case CssTokenType.CurlyBracketClose:
+                        curly--;
+                        break;
+                    case CssTokenType.CurlyBracketOpen:
+                        curly++;
+                        break;
+                    case CssTokenType.RoundBracketClose:
+                        if (round == 0 && curly == 0 && square == 0)
+                            return;
+
+                        round--;
+                        break;
+                    case CssTokenType.RoundBracketOpen:
+                        round++;
+                        break;
+                    case CssTokenType.SquareBracketClose:
+                        square--;
+                        break;
+                    case CssTokenType.SquareBracketOpen:
+                        square++;
                         break;
                 }
             }


Error Formatting

Error Formatting

--- Anlab.Mvc/Views/Error/Error.cshtml
+++ Anlab.Mvc/Views/Error/Error.cshtml
@@ -1,10 +1,9 @@
-@{
+@{
     ViewData["Title"] = "Error Detected";
 }
-
-
Error.

-
An error occurred while processing your request.

-
-
If the problem persists please contact us.

-
-
+

+
Error.

+
An error occurred while processing your request.

+
If the problem persists please contact us.

+
+


fixes issue 567

fixes issue 567

git-svn-id: c32cf1ecefca26b8770d7b0740bc0c5c174087e4@1482 c754d5e9-d413-0410-bcdf-9574c9dba6b7

--- libsecondlife/AppearanceManager.cs
+++ libsecondlife/AppearanceManager.cs
@@ -839,13 +839,16 @@

                 foreach (WearableData data in Wearables.Values)
                 {
-                    foreach (KeyValuePair<TextureIndex, LLUUID> texture in data.Asset.Textures)
-                    {
-                        LLObject.TextureEntryFace face = te.CreateFace((uint)texture.Key);
-                        face.TextureID = texture.Value;
-
-                        Client.DebugLog("Setting texture " + ((TextureIndex)texture.Key).ToString() + " to " +
-                            texture.Value.ToStringHyphenated());
+                    if (data.Asset != null)
+                    {
+                        foreach (KeyValuePair<TextureIndex, LLUUID> texture in data.Asset.Textures)
+                        {
+                            LLObject.TextureEntryFace face = te.CreateFace((uint)texture.Key);
+                            face.TextureID = texture.Value;
+
+                            Client.DebugLog("Setting texture " + ((TextureIndex)texture.Key).ToString() + " to " +
+                                texture.Value.ToStringHyphenated());
+                        }
                     }
                 }


Added viscosity

Added viscosity

--- MKM_Labs/MKM_Labs/ViewModels/PendulumModeling/PendulumModelingViewModel.cs
+++ MKM_Labs/MKM_Labs/ViewModels/PendulumModeling/PendulumModelingViewModel.cs
@@ -206,10 +206,12 @@
             if (!IsStep) steporn = N;
             double g = 9.81;

+            double k = 0.4;
+
             Func<double, double, double, double> Fa = delegate (double alfa, double w, double dt)
             {
-                if (IsAnyAngleEquation) { return -g / barLength * Math.Sin(alfa); }
-                else { return -g / barLength * alfa; }
+                if (IsAnyAngleEquation) { return -g / barLength * Math.Sin(alfa) - k / Mass * w * barLength; }
+                else { return -g / barLength * alfa - k / Mass * w * barLength; }
             };

             Func<double, double, double> Fe = delegate (double alfa, double w)


First -> Single

First -> Single

--- osu.Framework/Graphics/Containers/CompositeDrawable.cs
+++ osu.Framework/Graphics/Containers/CompositeDrawable.cs
@@ -88,7 +88,7 @@
         /// <param name="cancellation">An optional cancellation token.</param>
         /// <returns>The task which is used for loading and callbacks.</returns>
         protected Task LoadComponentAsync<TLoadable>(TLoadable component, Action<TLoadable> onLoaded = null, CancellationToken cancellation = default(CancellationToken)) where TLoadable : Drawable
-            => LoadComponentsAsync(component.Yield(), l => onLoaded?.Invoke(l.First()), cancellation);
+            => LoadComponentsAsync(component.Yield(), l => onLoaded?.Invoke(l.Single()), cancellation);

         private static readonly ThreadedTaskScheduler threaded_scheduler = new ThreadedTaskScheduler(4);


Reverse the children list inside of the function

--- osu.Framework/Graphics/Cursor/CursorEffectContainer.cs
+++ osu.Framework/Graphics/Cursor/CursorEffectContainer.cs
@@ -109,6 +109,7 @@
             findTargetChildren();

             List<TTarget> result = new List<TTarget>(targetChildren);
+            result.Reverse();

             // Clean up
             childDrawables.Clear();


Revert localisation of spectate/watch button

--- osu.Game/Overlays/Dashboard/CurrentlyPlayingDisplay.cs
+++ osu.Game/Overlays/Dashboard/CurrentlyPlayingDisplay.cs
@@ -139,7 +139,7 @@
                             new PurpleTriangleButton
                             {
                                 RelativeSizeAxes = Axes.X,
-                                Text = CommonStrings.ButtonsWatchTo1,
+                                Text = "Spectate",
                                 Anchor = Anchor.TopCentre,
                                 Origin = Anchor.TopCentre,
                                 Action = () => performer?.PerformFromScreen(s => s.Push(new SoloSpectator(User))),


Use beatmap directly in ReadyButton

Use beatmap directly in ReadyButton

--- osu.Game/Screens/Multi/Match/Components/ReadyButton.cs
+++ osu.Game/Screens/Multi/Match/Components/ReadyButton.cs
@@ -10,7 +10,6 @@
 using osu.Game.Graphics;
 using osu.Game.Graphics.UserInterface;
 using osu.Game.Online.Multiplayer;
-using osu.Game.Overlays;

 namespace osu.Game.Screens.Multi.Match.Components
 {
@@ -26,9 +25,6 @@

         [Resolved]
         private BeatmapManager beatmaps { get; set; }
-
-        [Resolved]
-        private MusicController musicController { get; set; }

         private bool hasBeatmap;

@@ -104,7 +100,7 @@
                 return;
             }

-            bool hasEnoughTime = DateTimeOffset.UtcNow.AddSeconds(30).AddMilliseconds(musicController.CurrentTrack.Length) < endDate.Value;
+            bool hasEnoughTime = DateTimeOffset.UtcNow.AddSeconds(30).AddMilliseconds(gameBeatmap.Value.Track.Length) < endDate.Value;

             Enabled.Value = hasBeatmap && hasEnoughTime;
         }


LIBOMV-851: part II - change serialization to reflect the new deserialization

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

--- OpenMetaverse/Messages/LindenMessages.cs
+++ OpenMetaverse/Messages/LindenMessages.cs
@@ -2965,11 +2965,11 @@
                 OSDMap infoMap = new OSDMap(4);
                 infoMap["can_voice_chat"] = OSD.FromBoolean((bool)Updates[i].CanVoiceChat);
                 infoMap["is_moderator"] = OSD.FromBoolean((bool)Updates[i].IsModerator);
+                infoMap["mutes"] = mutesMap;

                 OSDMap imap = new OSDMap(1);
                 imap["info"] = infoMap;
                 imap["transition"] = OSD.FromString(Updates[i].Transition);
-                imap.Add("mutes", mutesMap);

                 agent_updatesMap.Add(Updates[i].AgentID.ToString(), imap);
             }


Fix registration.

Fix registration.

--- Praktikum_MVC/Models/User.cs
+++ Praktikum_MVC/Models/User.cs
@@ -81,7 +81,7 @@
             var connection = new SqlConnection(connStr);
             var query = @"
                     INSERT [dbo].[Benutzer] ([Nickname], [Vorname], [Nachname], [Passwort], [Email])
-                    VALUES (@username, @vorname, @nachname, HASHBYTES('MD5', @password),
+                    VALUES (@username, @vorname, @nachname, HASHBYTES('MD5', '" + password + @"'),
                     @email)";
             var sqlcmd = new SqlCommand(query, connection);
             sqlcmd.Parameters.AddWithValue("@username", username);
@@ -98,7 +98,7 @@
                 sqlcmd.Parameters.AddWithValue("@nachname", nachname);
             }
             sqlcmd.Parameters.AddWithValue("@email", email);
-            sqlcmd.Parameters.AddWithValue("@password", password);
+            //sqlcmd.Parameters.AddWithValue("@password", password);
             connection.Open();
             SqlDataReader reader = sqlcmd.ExecuteReader();
             reader.Read();


Introduced GenerationStep.DalInterfaceDto tha runs just after Business

--- trunk/Solutions/CslaGenFork/CodeGen/GenerationStep.cs
+++ trunk/Solutions/CslaGenFork/CodeGen/GenerationStep.cs
@@ -6,6 +6,7 @@
     public enum GenerationStep
     {
         Business,
+        DalInterfaceDto,
         DalInterface,
         DalObject
     }


Removed excessive logging of assembly resolve events.

--- Prototype/NetrunnerPlugin.cs
+++ Prototype/NetrunnerPlugin.cs
@@ -33,7 +33,7 @@
 			// Libraries referenced by our plugin are embedded in our DLL as resources.
 			// We must manually load them because they are not in the .NET search path.
 			AppDomain.CurrentDomain.AssemblyResolve += (sender, ea) => {
-				API.Instance.Log("NetrunnerPlugin resolving assembly {0}", ea.Name);
+				//API.Instance.Log("NetrunnerPlugin resolving assembly {0}", ea.Name);
 				var resName = "NetrunnerOBS.Properties." + ea.Name.Split(',')[0] + ".dll";
 				using (Stream input = Assembly.GetExecutingAssembly().GetManifestResourceStream(resName)) {
 					return input != null


Make Pusher defaults vars public

Make Pusher defaults vars public

--- PusherClientDotNet/Pusher.cs
+++ PusherClientDotNet/Pusher.cs
@@ -313,15 +313,15 @@
         }

         // Pusher defaults
-        const string VERSION = "1.8.3";
-
-        static string host = "ws.pusherapp.com";
-        static int ws_port = 80;
-        static int wss_port = 443;
-        static string channel_auth_endpoint = "/pusher/auth";
-        static int connection_timeout = 5000;
-        static string cdn_http = "http://js.pusherapp.com/";
-        static string cdn_https = "https://d3ds63zw57jt09.cloudfront.net/";
+        public const string VERSION = "1.8.3";
+
+        public static string host = "ws.pusherapp.com";
+        public static int ws_port = 80;
+        public static int wss_port = 443;
+        public static string channel_auth_endpoint = "/pusher/auth";
+        public static int connection_timeout = 5000;
+        public static string cdn_http = "http://js.pusherapp.com/";
+        public static string cdn_https = "https://d3ds63zw57jt09.cloudfront.net/";

         public static event PusherLogHandler OnLog;
         private static void Log(string message, params object[] additional)


modify: Sequencer#RecalcTickTimeをexpression-bodiedな記述に修正

--- src/Sequencer/Sequencer.cs
+++ src/Sequencer/Sequencer.cs
@@ -354,11 +354,9 @@

         private void OutputEvents(IEnumerable<Event> events) => this.OnTrackEvent?.Invoke(this, new TrackEventArgs(events));

-        private void RecalcTickTime()
-        {
-            this.tickTime = 1.0 / (Stopwatch.Frequency *
-                                   ((60.0 / (this.tempo * this.tempoFactor)) / this.Sequence.Resolution));
-        }
+        private void RecalcTickTime() => this.tickTime = 1.0 / (Stopwatch.Frequency *
+                                                                ((60.0 / (this.Tempo * this.tempoFactor)) / this.Sequence.Resolution));
+
         #endregion
     }


git-svn-id: https://jumony.svn.codeplex.com/svn/trunk@79088 2327b42d-5241-43d6-9e2a-de5ac946f064

--- Ivony.Html.Parser/JumonyReader.cs
+++ Ivony.Html.Parser/JumonyReader.cs
@@ -24,18 +24,21 @@

     private static bool _isWarmedUp = false;

+    /// <summary>
+    /// 调用此方法通知进行预热 JumonyReader
+    /// </summary>
     public static void WarmUp()
     {
       if ( !_isWarmedUp )
       {
-        tagRegex.Match( "" );
+        tagRegex.IsMatch( "" );
         _isWarmedUp = true;
       }
     }

     /// <summary>
-    /// 创建一个 JumonyReader对象
+    /// 创建一个 JumonyReader 对象
     /// </summary>
     /// <param name="htmlText"></param>
     public JumonyReader( string htmlText )


Reduce the complexity of DisassembleInstructionInternal

--- JAGBE/GB/Assembly/Disassembler.cs
+++ JAGBE/GB/Assembly/Disassembler.cs
@@ -21,7 +21,7 @@
             "JR NZ,r8", "LD HL,d16", "LD (HL+),A", "INC HL", "INC H", "DEC H", "LD H,d8", "DAA",
             "JR Z,r8", "ADD HL,HL", "LD A,(HL+)", "DEC HL", "INC L", "DEC L", "LD L,d8", "CPL",
             "JR NC,r8", "LD SP,d16", "LD (HL-),A", "INC SP", "INC (HL)", "DEC (HL)", "LD (HL),d8", "SCF",
-            "JR C,r8"    , "ADD HL,SP", "LD A,(HL-)", "DEC SP", "INC A"   , "DEC A"   , "LD A,d8"   , "CCF",
+            "JR C,r8" , "ADD HL,SP", "LD A,(HL-)", "DEC SP", "INC A"   , "DEC A"   , "LD A,d8"   , "CCF",

             // 0x40
             "", "", "" ,"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
@@ -49,26 +49,26 @@
         private static string DisassembleInstructionInternal(GbMemory memory)
         {
             byte b = memory.GetMappedMemory(memory.R.Pc);
+            if (b >= 0x40 && b < 0xC0)
+            {
+                if (b < 0x80)
+                {
+                    if (b == 0x76)
+                    {
+                        return "HALT";
+                    }
+
+                    int dest = ((b >> 3) & 7);
+                    int src = (b & 7);
+                    return "LD " + GetR8(dest) + "," + GetR8(src);
+                }
+
+                return DisassembleInstructionArith(b);
+            }
+
             if (b == 0xCB)
             {
                 return DisassembleInstructionCb(memory.GetMappedMemory(memory.R.Pc + 1));
-            }
-
-            if (b == 0x76)
-            {
-                return "HALT";
-            }
-
-            if (b >= 0x40 && b < 0x80)
-            {
-                int dest = ((b >> 3) & 7);
-                int src = (b & 7);
-                return "LD " + GetR8(dest) + "," + GetR8(src);
-            }
-
-            if (b >= 80 && b < 0xC0)
-            {
-                return DisassembleInstructionArith(b);
             }

             return nmOpStrings[b];


Fixed test assert message

Fixed test assert message

--- Manager/ManagerTest/ManagerControllerValidationWithCustomJobManagerTest.cs
+++ Manager/ManagerTest/ManagerControllerValidationWithCustomJobManagerTest.cs
@@ -41,7 +41,7 @@

             var httpActionResult = Target.JobFailed(jobFailed);
             var exceptionResult = httpActionResult as ExceptionResult;
-            exceptionResult.Exception.InnerException.Message.Should().Be("CreateJobDetail");
+            exceptionResult.Exception.InnerException.Message.Should().Contain("JobFailed");
         }

         [Test]


Improving zoom

Improving zoom

--- MatterControlLib/PartPreviewWindow/View3D/TrackballTumbleWidgetExtended.cs
+++ MatterControlLib/PartPreviewWindow/View3D/TrackballTumbleWidgetExtended.cs
@@ -29,11 +29,10 @@
 		public TrackBallTransformType TransformState { get; set; }

 		// tracks the displacement of the camera to accurately rotate, translate and zoom
-		public Vector3 DisplacementVec = Vector3.Zero;
+		public Vector3 bedCenter = Vector3.Zero;

 		private bool isRotating = false;
 		private Vector3 lastRotationOrigin = Vector3.Zero;
-		private Vector3 lastTranslationOrigin = Vector3.Zero;
 		private Vector2 lastScaleMousePosition = Vector2.Zero;
 		private Vector3 rotateVec = Vector3.Zero;
 		private Vector3 rotateVecOriginal = Vector3.Zero;
@@ -147,14 +146,14 @@
 				double zoomDelta = 1;
 				if (mouseDelta.Y < 0)
 				{
-					zoomDelta = -(-1 * mouseDelta.Y / 100);
+					zoomDelta = -1 * mouseDelta.Y / 100;
 				}
 				else if (mouseDelta.Y > 0)
 				{
-					zoomDelta = +(1 * mouseDelta.Y / 100);
-				}
-
-				ZoomToScreenPosition(-mouseDownWorldPosition, zoomDelta);
+					zoomDelta = -1 * mouseDelta.Y / 100;
+				}
+
+				ZoomToWorldPosition(mouseDownWorldPosition, zoomDelta);
 				lastScaleMousePosition = currentMousePosition;
 			}
 		}
@@ -214,7 +213,7 @@
 					hitPos = IntersectXYPlane(rayToCenter.origin, new Vector3(rayToCenter.directionNormal).GetNormal());
 				}

-				ZoomToScreenPosition(hitPos, mouseEvent.WheelDelta > 0 ? -ZoomDelta : ZoomDelta);
+				ZoomToWorldPosition(hitPos, mouseEvent.WheelDelta > 0 ? -ZoomDelta : ZoomDelta);
 			}
 		}

@@ -242,7 +241,7 @@

 			isRotating = true;

-			rotateVec = -mouseDownWorldPosition - DisplacementVec;
+			rotateVec = -mouseDownWorldPosition - bedCenter;
 			rotateVecOriginal = rotateVec;
 			lastRotationOrigin = -mouseDownWorldPosition;
 		}
@@ -270,7 +269,7 @@
 			if (isRotating)
 			{
 				isRotating = false;
-				DisplacementVec += rotateVecOriginal - rotateVec;
+				bedCenter += rotateVecOriginal - rotateVec;
 				Invalidate();
 			}
 		}
@@ -301,17 +300,16 @@
 			double distanceToCenter = (-mouseDownWorldPosition - Vector3Ex.Transform(Vector3.Zero, world.InverseModelviewMatrix)).Length;
 			Vector2 mouseDelta = position - mouseDownPosition;
 			var offset = new Vector3(mouseDelta.X, mouseDelta.Y, 0);
-			offset = Vector3Ex.TransformPosition(offset, Matrix4X4.Invert(world.RotationMatrix));
+			offset = offset.TransformPosition(Matrix4X4.Invert(world.RotationMatrix));
 			offset *= distanceToCenter / 1000;
-			DisplacementVec += offset;
+			bedCenter += offset;
 			world.Translate(offset);

 			mouseDownPosition = position;
-			lastTranslationOrigin = -mouseDownWorldPosition;
 			Invalidate();
 		}

-		public void ZoomToScreenPosition(Vector3 worldPosition, double zoomDelta)
+		public void ZoomToWorldPosition(Vector3 worldPosition, double zoomDelta)
 		{
 			if (isRotating)
 			{
@@ -323,22 +321,21 @@
 			// calculate the vector between the camera and the intersection position and move the camera along it by ZoomDelta, then set it's direction
 			Vector3 zoomVec = (worldPosition - world.EyePosition) * zoomDelta * Math.Min(unitsPerPixel * 100, 1);

-			DisplacementVec += zoomVec;
+			bedCenter += zoomVec;
 			world.Translate(zoomVec);

 			Invalidate();
 		}

-		public void Reset(Vector3 BedCenter)
+		public void Reset(Vector3 bedCenter)
 		{
 			ZeroVelocity();
-			DisplacementVec = Vector3.Zero;
 			lastRotationOrigin = Vector3.Zero;
-			lastTranslationOrigin = Vector3.Zero;
 			rotateVec = Vector3.Zero;
 			rotateVecOriginal = Vector3.Zero;
 			mouseDownPosition = Vector2.Zero;
-			DisplacementVec = BedCenter;
+			this.bedCenter = Vector3.Zero;
+			this.bedCenter = bedCenter;
 		}

 		public delegate void NearFarAction(out double zNear, out double zFar);


Comments for ItemPage.xaml.cs

Comments for ItemPage.xaml.cs

--- wallabag/wallabag.WindowsPhone/Views/ItemPage.xaml.cs
+++ wallabag/wallabag.WindowsPhone/Views/ItemPage.xaml.cs
@@ -14,17 +14,20 @@
         {
             this.InitializeComponent();

+            // To handle the share events (Share charm), we load the DataTransferManager.
             var dataTransferManager = DataTransferManager.GetForCurrentView();
             dataTransferManager.DataRequested += dataTransferManager_DataRequested;
         }

         protected override async void OnNavigatedTo(NavigationEventArgs e)
         {
+            // When navigated to the page, we set the DataContext of this page to a new type called ItemPageViewModel with the parameter.
             if (e.Parameter != null)
                 this.DataContext = new ItemPageViewModel(e.Parameter as ItemViewModel);

             base.OnNavigatedTo(e);

+            // Hide the status bar (clock, battery, connection informations, etc.)
             var statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView();
             await statusBar.HideAsync();
         }
@@ -33,9 +36,9 @@
         {
             DataRequest request = args.Request;
             ItemViewModel item = (this.DataContext as ItemPageViewModel).Item as ItemViewModel;
-            request.Data.Properties.Title = item.Title;
-            request.Data.SetWebLink(item.Url);
-            request.Data.SetHtmlFormat(item.Content);
+            request.Data.Properties.Title = item.Title; // The title of the shared information.
+            request.Data.SetWebLink(item.Url); // Setting the Web link to the URL of the saved article.
+            request.Data.SetHtmlFormat(item.Content); // If the target app supports it, it is also possible to send the content.
         }

         private async void webView_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)


Facebook sharing added (will improve later)

--- Assets/Scripts/GUI/LevelOverGUI.cs
+++ Assets/Scripts/GUI/LevelOverGUI.cs
@@ -224,12 +224,23 @@
         GUILayout.Label(overMessage, GUI.skin.GetStyle("over message"));
         GUILayout.FlexibleSpace();

+        GUILayout.BeginHorizontal();
+        GUILayout.FlexibleSpace();
+
         if (GUILayout.Button("Twitter"))
         {
             ShareToTwitter("I, #HandyMD, just cured a patient with clean hands!", "http://handymd-game.appspot.com");
         }

         GUILayout.FlexibleSpace();
+
+        if (GUILayout.Button("Facebook"))
+        {
+            ShareToFacebook("I, #HandyMD, just cured a patient with clean hands!", "http://handymd-game.appspot.com");
+        }
+
+        GUILayout.FlexibleSpace();
+        GUILayout.EndHorizontal();

         GUILayout.BeginHorizontal();
         GUILayout.FlexibleSpace();
@@ -312,4 +323,9 @@
         Application.OpenURL("http://twitter.com/intent/tweet?text=" + WWW.EscapeURL(textToDisplay) + "&url=" + WWW.EscapeURL(urlToDisplay) + "&lang=en");
     }

+    void ShareToFacebook(string textToDisplay, string urlToDisplay)
+    {
+        // Sample text doesn't work for now.
+        Application.OpenURL("http://www.facebook.com/sharer/sharer.php?u=" + WWW.EscapeURL(urlToDisplay) + "&t=" + WWW.EscapeURL(textToDisplay));
+    }
 }


Fix the core dump regex

Fix the core dump regex

--- dotnet/Azure/DevOps.Util.DotNet/HelixUtil.cs
+++ dotnet/Azure/DevOps.Util.DotNet/HelixUtil.cs
@@ -93,7 +93,7 @@
                 {
                     consoleUri = (await reader.ReadLineAsync()).Trim();
                 }
-                else if (Regex.IsMatch(line, @"core\.:"))
+                else if (Regex.IsMatch(line, @"core\..*:"))
                 {
                     coreUri = (await reader.ReadLineAsync()).Trim();
                 }


Fixed vbo code. added color to hd face.

Fixed vbo code.
added color to hd face.

--- Authentication/PointCloudWindow.cs
+++ Authentication/PointCloudWindow.cs
@@ -9,8 +9,12 @@
   using System.Web.Script.Serialization;

   public class PointCloudWindow : GameWindow {
-    private int vbo;
-    private int verticeCount;
+    private int vbo_depth;
+    private int vbo_depth_colors;
+    private int vbo_hdface;
+    private int vbo_hdface_colors;
+    private int depth_verticeCount;
+    private int hdface_verticeCount;
     private Matrix4 cameraMatrix;
     private float[] mouseSpeed = new float[2];
     private Vector2 mouseDelta;
@@ -28,6 +32,9 @@
     private bool leftdown = false;
     private bool rightdown = false;
     private Vector3[] depthVectors;
+    private Vector3[] hdFaceVectors;
+    private int[] depthColors;
+    private int[] hdFaceColors;
     private TextWriter tw;

@@ -108,16 +115,32 @@
       GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
       GL.LoadMatrix(ref cameraMatrix);

-      //GL.EnableVertexAttribArray(0);
-      //GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
-      //GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 10, 0);
+
+      // Draw hd face
+      GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_hdface_colors);
+      GL.ColorPointer(4, ColorPointerType.UnsignedByte, sizeof(int), IntPtr.Zero);
+      GL.EnableClientState(ArrayCap.ColorArray);
+
       GL.EnableClientState(ArrayCap.VertexArray);
-      GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
+      GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_hdface);
       GL.VertexPointer(3, VertexPointerType.Float, Vector3.SizeInBytes, new IntPtr(0));
-      GL.DrawArrays(PrimitiveType.Points, 0, verticeCount);
-
-      //GL.DisableVertexAttribArray(0);
+      GL.DrawArrays(PrimitiveType.Points, 0, hdface_verticeCount);
+
+
+      // Draw point cloud
+      GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_depth_colors);
+      GL.ColorPointer(4, ColorPointerType.UnsignedByte, sizeof(int), IntPtr.Zero);
+      GL.EnableClientState(ArrayCap.ColorArray);
+
+      GL.EnableClientState(ArrayCap.VertexArray);
+      GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_depth);
+      GL.VertexPointer(3, VertexPointerType.Float, Vector3.SizeInBytes, new IntPtr(0));
+      GL.DrawArrays(PrimitiveType.Points, 0, depth_verticeCount);
+
+
+      // Draw text
       tw.Draw();
+

       SwapBuffers();
     }
@@ -189,85 +212,138 @@
     private void Overlay_OnVerticesUpdated(CameraSpacePoint[] cameraSpacePoints) {
       var length = cameraSpacePoints.Length;
       if (depthVectors == null) {
+        #region setup
         depthVectors = new Vector3[length];
-        verticeCount = depthVectors.Length;
+        depthColors = new int[length];
+        depth_verticeCount = length;
         for (int i = 0; i < length; i++) {
           depthVectors[i] = new Vector3(cameraSpacePoints[i].X, cameraSpacePoints[i].Y, cameraSpacePoints[i].Z);
+          // this is in BGR format for some reason
+          depthColors[i] = 0xffffff;
         }
-        GL.GenBuffers(1, out vbo);
-        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
-        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
-                               new IntPtr(depthVectors.Length * Vector3.SizeInBytes),
+        #endregion
+
+        // start editing   vbo_depth   buffer
+        GL.GenBuffers(1, out vbo_depth);
+        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_depth);
+        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
+                               new IntPtr(depthVectors.Length * BlittableValueType.StrideOf(depthVectors)),
                                depthVectors, BufferUsageHint.StaticDraw);
+
+
+        // start editing   vbo_depth_colors   buffer
+        //*
+        GL.GenBuffers(1, out vbo_depth_colors);
+        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_depth_colors);
+        GL.BufferData(BufferTarget.ArrayBuffer,
+                      new IntPtr(depthColors.Length * 4),
+                      depthColors, BufferUsageHint.StaticDraw);
+        //*/
       } else {
+        #region asdf
         for (int i = 0; i < length; i++) {
           depthVectors[i].X = cameraSpacePoints[i].X;
           depthVectors[i].Y = cameraSpacePoints[i].Y;
           depthVectors[i].Z = cameraSpacePoints[i].Z;
         }
+
+        // start editing   vbo_depth   buffer
+        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_depth);
         // clear out old memory. I think this is what allows us to redraw every time we get a new array of CameraSpacePoints
         GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
-                         IntPtr.Zero,
-                         depthVectors, BufferUsageHint.StaticDraw);
-        var ptr = GL.MapBuffer(BufferTarget.ArrayBuffer, BufferAccess.ReadWrite);
-        GL.ColorPointer(4, ColorPointerType.UnsignedByte, sizeof(int), IntPtr.Zero);
-        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
-                         new IntPtr(depthVectors.Length * Vector3.SizeInBytes),
-                         depthVectors, BufferUsageHint.StaticDraw);
+                               IntPtr.Zero,
+                               depthVectors, BufferUsageHint.StaticDraw);
+        GL.MapBuffer(BufferTarget.ArrayBuffer, BufferAccess.ReadWrite);
+        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
+                               new IntPtr(depthVectors.Length * BlittableValueType.StrideOf(depthVectors)),
+                               depthVectors, BufferUsageHint.StaticDraw);
+
+        // start editing   vbo_depth_colors   buffer
+        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_depth_colors);
+        // clear out old memory. I think this is what allows us to redraw every time we get a new array of CameraSpacePoints
+        GL.BufferData(BufferTarget.ArrayBuffer,
+                               IntPtr.Zero,
+                               depthColors, BufferUsageHint.StaticDraw);
+        GL.MapBuffer(BufferTarget.ArrayBuffer, BufferAccess.ReadWrite);
+        GL.BufferData(BufferTarget.ArrayBuffer,
+                               new IntPtr(depthColors.Length * 4),
+                               depthColors, BufferUsageHint.StaticDraw);
+        #endregion
       }
     }

     private void Overlay_OnHdFaceUpdated(CameraSpacePoint[] cameraSpacePoints) {
       var length = cameraSpacePoints.Length;
-      if (depthVectors == null) {
-        depthVectors = new Vector3[length];
-        verticeCount = depthVectors.Length;
+      if (hdFaceVectors == null) {
+        hdFaceVectors = new Vector3[length];
+        hdFaceColors = new int[length];
+        hdface_verticeCount = length;
         for (int i = 0; i < length; i++) {
-          depthVectors[i] = new Vector3(cameraSpacePoints[i].X, cameraSpacePoints[i].Y, cameraSpacePoints[i].Z);
+          hdFaceVectors[i] = new Vector3(cameraSpacePoints[i].X, cameraSpacePoints[i].Y, cameraSpacePoints[i].Z);
+          // this is in BGR format for some reason
+          hdFaceColors[i] = 0xff0000;
         }
-        GL.GenBuffers(1, out vbo);
-        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
-        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
-                               new IntPtr(depthVectors.Length * BlittableValueType.StrideOf(depthVectors)),
-                               depthVectors, BufferUsageHint.StaticDraw);
+
+        // start editing   vbo_hdface   buffer
+        GL.GenBuffers(1, out vbo_hdface);
+        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_hdface);
+        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
+                               new IntPtr(hdFaceVectors.Length * BlittableValueType.StrideOf(hdFaceVectors)),
+                               hdFaceVectors, BufferUsageHint.StaticDraw);
+
+
+        // start editing   vbo_hdface_colors   buffer
+        GL.GenBuffers(1, out vbo_hdface_colors);
+        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_hdface_colors);
+        GL.BufferData(BufferTarget.ArrayBuffer,
+                new IntPtr(hdFaceColors.Length * 4),
+                hdFaceColors, BufferUsageHint.StaticDraw);
       } else {
         for (int i = 0; i < length; i++) {
           if (float.IsInfinity(cameraSpacePoints[i].X) || float.IsNaN(cameraSpacePoints[i].X)) continue;
           if (float.IsInfinity(cameraSpacePoints[i].Y) || float.IsNaN(cameraSpacePoints[i].Y)) continue;
           if (float.IsInfinity(cameraSpacePoints[i].Z) || float.IsNaN(cameraSpacePoints[i].Z)) continue;
-          depthVectors[i].X = cameraSpacePoints[i].X;
-          depthVectors[i].Y = cameraSpacePoints[i].Y;
-          depthVectors[i].Z = cameraSpacePoints[i].Z;
+          hdFaceVectors[i].X = cameraSpacePoints[i].X;
+          hdFaceVectors[i].Y = cameraSpacePoints[i].Y;
+          hdFaceVectors[i].Z = cameraSpacePoints[i].Z;
         }
+
+        // start editing   vbo_hdface   buffer
+        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_hdface);
         // clear out old memory. I think this is what allows us to redraw every time we get a new array of CameraSpacePoints
         GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
                                IntPtr.Zero,
-                               depthVectors, BufferUsageHint.StaticDraw);
-        var ptr = GL.MapBuffer(BufferTarget.ArrayBuffer, BufferAccess.ReadWrite);
-        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
-                               new IntPtr(depthVectors.Length * BlittableValueType.StrideOf(depthVectors)),
-                               depthVectors, BufferUsageHint.StaticDraw);
+                               hdFaceVectors, BufferUsageHint.StaticDraw);
+        GL.MapBuffer(BufferTarget.ArrayBuffer, BufferAccess.ReadWrite);
+        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
+                               new IntPtr(hdFaceVectors.Length * BlittableValueType.StrideOf(hdFaceVectors)),
+                               hdFaceVectors, BufferUsageHint.StaticDraw);
+
+
+        // start editing   vbo_hdface_colors   buffer
+        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_hdface_colors);
+        // clear out old memory. I think this is what allows us to redraw every time we get a new array of CameraSpacePoints
+        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
+                               IntPtr.Zero,
+                               hdFaceVectors, BufferUsageHint.StaticDraw);
+        GL.MapBuffer(BufferTarget.ArrayBuffer, BufferAccess.ReadWrite);
+        GL.BufferData(BufferTarget.ArrayBuffer,
+                               new IntPtr(hdFaceColors.Length * 4),
+                               hdFaceColors, BufferUsageHint.StaticDraw);
       }
     }

     // Methods
-    private void LoadFml(string path) {
+    private Vector3[] LoadFml(string path) {
       var jss = new JavaScriptSerializer();

-      if (!File.Exists(path)) return;
+      if (!File.Exists(path)) return new Vector3[0];
       using (var file = new StreamReader(path)) {
         var data = file.ReadLine();
-        if (string.IsNullOrWhiteSpace(data)) return;
-        var vectors = jss.Deserialize<Vector3[]>(data);
-
-        GL.GenBuffers(1, out vbo);
-        GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
-        GL.BufferData<Vector3>(BufferTarget.ArrayBuffer,
-                               new IntPtr(vectors.Length * BlittableValueType.StrideOf(vectors)),
-                               depthVectors, BufferUsageHint.StaticDraw);
-
+        if (string.IsNullOrWhiteSpace(data)) return new Vector3[0];
+        return jss.Deserialize<Vector3[]>(data);
       }
     }


Revert "Don't re-retrieve sit part in SP.HandleAgentSit() when we already have it."

This reverts commit 2c00b73cd27a7183a5c105b4e2865f11e4a00d98.

Wrong code change

--- OpenSim/Region/ClientStack/Linden/Caps/Tests/WebFetchInvDescModuleTests.cs
+++ OpenSim/Region/ClientStack/Linden/Caps/Tests/WebFetchInvDescModuleTests.cs
@@ -117,9 +117,7 @@
             PollServiceEventArgs pseArgs;
             userCaps.TryGetPollHandler("FetchInventoryDescendents2", out pseArgs);
             req.UriPath = pseArgs.Url;
-            Console.WriteLine("req.UriPath:{0}", req.UriPath);
             req.Uri = new Uri(req.UriPath);
-            Console.WriteLine("req.Uri:{0}", req.Uri);

             // Retrieve root folder details directly so that we can request
             InventoryFolderBase folder = scene.InventoryService.GetRootFolder(ua.PrincipalID);


* Table creation now checks if the table already exists before building it.

--- OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
+++ OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
@@ -860,9 +860,33 @@
             SqliteCommand scmd = new SqliteCommand(createShapes, conn);
             SqliteCommand tcmd = new SqliteCommand(createTerrain, conn);
             conn.Open();
-            pcmd.ExecuteNonQuery();
-            scmd.ExecuteNonQuery();
-            tcmd.ExecuteNonQuery();
+
+            try
+            {
+                pcmd.ExecuteNonQuery();
+            }
+            catch (SqliteSyntaxException) {
+                MainLog.Instance.Warn("SQLITE","Primitives Table Already Exists");
+            }
+
+            try
+            {
+                scmd.ExecuteNonQuery();
+            }
+            catch (SqliteSyntaxException)
+            {
+                MainLog.Instance.Warn("SQLITE", "Shapes Table Already Exists");
+            }
+
+            try
+            {
+                tcmd.ExecuteNonQuery();
+            }
+            catch (SqliteSyntaxException)
+            {
+                MainLog.Instance.Warn("SQLITE", "Terrain Table Already Exists");
+            }
+
             conn.Close();
         }


Fixed max boost value

Fixed max boost value

now 1.0 instead of 100

--- Project-Aurora/Project-Aurora/Profiles/RocketLeague/RocketLeagueProfile.cs
+++ Project-Aurora/Project-Aurora/Profiles/RocketLeague/RocketLeagueProfile.cs
@@ -34,7 +34,7 @@
                         _BlinkThreshold = 0.0,
                         _BlinkDirection = false,
                         _VariablePath = "Player/Boost",
-                        _MaxVariablePath = "100",
+                        _MaxVariablePath = "1",
                     },
                 }),
                 new Layer("Boost Indicator (Peripheral)", new PercentGradientLayerHandler()
@@ -47,7 +47,7 @@
                         _BlinkThreshold = 0.0,
                         _BlinkDirection = false,
                         _VariablePath = "Player/Boost",
-                        _MaxVariablePath = "100"
+                        _MaxVariablePath = "1"
                     },
                 }),
                 new Layer("Goal Explosion", new RocketLeagueGoalExplosionLayerHandler()),


Less noise in logs

Less noise in logs

--- RequestLogger.AzureTable/src/RequestLogger.AzureTable/AzureTableService.cs
+++ RequestLogger.AzureTable/src/RequestLogger.AzureTable/AzureTableService.cs
@@ -90,7 +90,7 @@
         {
             while (true)
             {
-                logger.LogInformation("Try to save log to Azure Table");
+                logger.LogDebug("Try to save log to Azure Table");
                 try
                 {
                     if (logEntities.Any())


Added locking and logging to DisposablePlugin.

Uses a RWLock to protect us from disposing on multiple threads. Typically
this can happen if you kill the container and release and individual
object on a thread.

--- Source/Container/Machine.Container/Plugins/Disposition/DisposablePlugin.cs
+++ Source/Container/Machine.Container/Plugins/Disposition/DisposablePlugin.cs
@@ -1,14 +1,18 @@
 using System;
 using System.Collections.Generic;
+using System.Threading;

 using Machine.Container.Model;
 using Machine.Container.Services;
+using Machine.Core.Utility;

 namespace Machine.Container.Plugins.Disposition
 {
   public class DisposablePlugin : AbstractServiceContainerListener, IServiceContainerPlugin
   {
+    private readonly log4net.ILog _log = log4net.LogManager.GetLogger(typeof(DisposablePlugin));
     private readonly List<IDisposable> _disposables = new List<IDisposable>();
+    private readonly ReaderWriterLock _lock = new ReaderWriterLock();

     #region IServiceContainerListener Members
     public virtual void Initialize(PluginServices services)
@@ -28,11 +32,12 @@
     {
       IDisposable disposable = activation.Instance as IDisposable;
       if (disposable == null) return;
-      /* Get Reader Lock */
-      if (!_disposables.Contains(disposable))
+      using (RWLock.AsReader(_lock))
       {
-        /* Get Writer Lock */
-        _disposables.Add(disposable);
+        if (RWLock.UpgradeToWriterIf(_lock, () => { return !_disposables.Contains(disposable); }))
+        {
+          _disposables.Add(disposable);
+        }
       }
     }

@@ -40,23 +45,35 @@
     {
       IDisposable disposable = deactivation.Instance as IDisposable;
       if (disposable == null) return;
-      /* Get Writer Lock */
-      disposable.Dispose();
-      _disposables.Remove(disposable);
+      using (RWLock.AsWriter(_lock))
+      {
+        if (_disposables.Contains(disposable))
+        {
+          DisposeOf(disposable);
+        }
+      }
     }
     #endregion

     #region IDisposable Members
     public override void Dispose()
     {
-      /* Get Writer Lock */
-      _disposables.Reverse();
-      while (_disposables.Count > 0)
+      using (RWLock.AsWriter(_lock))
       {
-        _disposables[0].Dispose();
-        _disposables.RemoveAt(0);
+        _disposables.Reverse();
+        while (_disposables.Count > 0)
+        {
+          DisposeOf(_disposables[0]);
+        }
       }
     }
     #endregion
+
+    private void DisposeOf(IDisposable disposable)
+    {
+      _log.Info("Disposing: " + disposable);
+      disposable.Dispose();
+      _disposables.Remove(disposable);
+    }
   }
 }


--- src/Yarhl/IO/DataStream.cs
+++ src/Yarhl/IO/DataStream.cs
@@ -541,6 +541,37 @@
         }

         /// <summary>
+        /// Writes a defined length stream into another DataStream starting in a defined position.
+        /// </summary>
+        /// <param name="start">Defined starting position.</param>
+        /// /// <param name="length">Defined length to be written.</param>
+        /// <param name="stream">Output DataStream.</param>
+        public void WriteSegmentTo(long start, long length, DataStream stream)
+        {
+            if (Disposed)
+                throw new ObjectDisposedException(nameof(DataStream));
+
+            if (stream == null)
+                throw new ArgumentNullException(nameof(stream));
+            if (stream.Disposed)
+                throw new ObjectDisposedException(nameof(stream));
+
+            long currPos = Position;
+            Seek(start, SeekMode.Start);
+
+            const int BufferSize = 70 * 1024;
+            byte[] buffer = new byte[length];
+
+            while (!EndOfStream)
+            {
+                int read = BlockRead(this, buffer);
+                stream.Write(buffer, 0, read);
+            }
+
+            Seek(currPos, SeekMode.Start);
+        }
+
+        /// <summary>
         /// Compare the content of the stream with another one.
         /// </summary>
         /// <returns>The result of the comparaison.</returns>


ADDED: Interaction - Playing animation, if available.

--- Unity/Rituals/Assets/Game/Scripts/Interaction/Systems/InteractionSystem.cs
+++ Unity/Rituals/Assets/Game/Scripts/Interaction/Systems/InteractionSystem.cs
@@ -15,6 +15,8 @@
     using Rituals.Interaction.Events;
     using Rituals.Objectives.Events;
     using Rituals.Physics.Events;
+
+    using UnityEngine;

     public class InteractionSystem : RitualsBehaviour
     {
@@ -143,6 +145,14 @@
                 return;
             }

+            // Play animation, if available.
+            var interactionAnimation = this.selectedInteractable.GetComponent<Animation>();
+            if (interactionAnimation != null)
+            {
+                interactionAnimation.Play();
+            }
+
+            // Notify listeners.
             this.EventManager.OnInteractableUsed(
                 this,
                 new InteractableUsedEventArgs { GameObject = this.selectedInteractable.gameObject });


Buffer input for better performance.

Buffer input for better performance.

--- shared/SevenZip/Decoders/PpmdDecoder.cs
+++ shared/SevenZip/Decoders/PpmdDecoder.cs
@@ -35,6 +35,9 @@
         private kStatus mDecoderStatus = kStatus.NeedInit;
         private enum HRESULT { S_OK, S_FALSE, E_FAIL }
         private long mPosition;
+        private byte[] mInputBuffer = new byte[0x4000];
+        private int mInputOffset;
+        private int mInputEnding;

         public PpmdArchiveDecoder(ImmutableArray<byte> settings, long length)
         {
@@ -60,15 +63,7 @@

             mRangeDecoder = new PPMD.CPpmd7z_RangeDec();
             PPMD.Ppmd7z_RangeDec_CreateVTable(mRangeDecoder);
-            mRangeDecoder.Stream = new PPMD.IByteIn {
-                Read = x => {
-                    var buffer = new byte[1];
-                    if (mInput.Read(buffer, 0, 1) == 1)
-                        return buffer[0];
-                    mExceededInput = true;
-                    return 0;
-                },
-            };
+            mRangeDecoder.Stream = new PPMD.IByteIn { Read = x => ReadByte() };

             PPMD.Ppmd7_Construct(mState);
             if (!PPMD.Ppmd7_Alloc(mState, mSettingMemory, mAlloc))
@@ -104,6 +99,27 @@
                 throw new ArgumentOutOfRangeException(nameof(index));

             return mOutput;
+        }
+
+        private byte ReadByte()
+        {
+            return mInputOffset < mInputEnding ? mInputBuffer[mInputOffset++] : ReadByteSlow();
+        }
+
+        private byte ReadByteSlow()
+        {
+            if (!mExceededInput)
+            {
+                mInputOffset = 0;
+                mInputEnding = mInput.Read(mInputBuffer, 0, mInputBuffer.Length);
+
+                if (mInputEnding != 0)
+                    return mInputBuffer[mInputOffset++];
+
+                mExceededInput = true;
+            }
+
+            return 0;
         }

         private void Skip(int count)


Support for reading chunks into streams in ReadChunks

--- BlobCache/BlobCache/BlobStorage.cs
+++ BlobCache/BlobCache/BlobStorage.cs
@@ -16,6 +16,11 @@

         private Stream _mainLock;

+        /// <summary>
+        ///     Initializes a new instance of the <see cref="BlobStorage" /> class
+        /// </summary>
+        /// <param name="fileName">Blob storage file name</param>
+        /// <param name="handler">Concurrency mode to use</param>
         public BlobStorage(string fileName, ConcurrencyHandler handler)
         {
             Info = new FileInfo(fileName);
@@ -24,9 +29,16 @@

         private ConcurrencyHandler ConcurrencyHandler { get; }

+        /// <summary>
+        ///     Gets the blob storage file info
+        /// </summary>
         protected internal FileInfo Info { get; }
+
         private Guid Id { get; set; }

+        /// <summary>
+        ///     Disposes the storage
+        /// </summary>
         public void Dispose()
         {
             _mainLock?.Close();
@@ -35,6 +47,10 @@
             GC.SuppressFinalize(this);
         }

+        /// <summary>
+        ///     Initialize the storage
+        /// </summary>
+        /// <returns>True if initialization successful, otherwise false</returns>
         public async Task<bool> Initialize()
         {
             try
@@ -96,6 +112,13 @@
             });
         }

+        /// <summary>
+        ///     Adds a chunk to the blob
+        /// </summary>
+        /// <param name="chunkType">Chunk type</param>
+        /// <param name="userData">Chunk user data</param>
+        /// <param name="data">bytes to add</param>
+        /// <returns>StorageChunk of the added chunk</returns>
         public async Task<StorageChunk> AddChunk(int chunkType, uint userData, byte[] data)
         {
             using (var ms = new MemoryStream(data))
@@ -104,6 +127,13 @@
             }
         }

+        /// <summary>
+        ///     Adds a chunk to the blob
+        /// </summary>
+        /// <param name="chunkType">Chunk type</param>
+        /// <param name="userData">Chunk user data</param>
+        /// <param name="data">Stream to add</param>
+        /// <returns>StorageChunk of the added chunk</returns>
         public Task<StorageChunk> AddChunk(int chunkType, uint userData, Stream data)
         {
             return Task.Run(async () =>
@@ -142,7 +172,8 @@
                             {
                                 // if chunk size equals with the free space size, replace free space with chunk
                                 chunk = new StorageChunk(free.Id, userData, chunkType, position,
-                                    size) {Changing = true};
+                                        size)
+                                    {Changing = true};
                                 info.Chunks[info.Chunks.IndexOf(free)] = chunk;
                                 free = default(StorageChunk);
                             }
@@ -229,6 +260,14 @@
             return id;
         }

+        /// <summary>
+        ///     Removes a chunk from the blob
+        /// </summary>
+        /// <param name="selector">
+        ///     Selector to choose which chunk to remove, input: available chunks, chunk data version, output:
+        ///     chunk to remove (null to cancel)
+        /// </param>
+        /// <returns>Task</returns>
         public Task RemoveChunk(Func<IReadOnlyList<StorageChunk>, ulong, StorageChunk?> selector)
         {
             if (selector == null)
@@ -328,8 +367,42 @@
             });
         }

-        public Task<IReadOnlyList<(StorageChunk Chunk, byte[] Data)>> ReadChunks(
+        /// <summary>
+        ///     Reads chunks from the blob
+        /// </summary>
+        /// <param name="selector">
+        ///     Selector to choose which chunks to read, input: available chunks, chunk data version, output:
+        ///     chunks to read
+        /// </param>
+        /// <param name="streamCreator">
+        ///     Stream creator to create the output streams for the data, input: chunk read, output: stream
+        ///     to use, value indicating whether the stream should be closed or not
+        /// </param>
+        /// <returns></returns>
+        public async Task<IReadOnlyList<(StorageChunk Chunk, Stream Data)>> ReadChunks(
+            Func<IReadOnlyList<StorageChunk>, ulong, IEnumerable<StorageChunk>> selector,
+            Func<StorageChunk, (Stream, bool)> streamCreator)
+        {
+            return (await ReadChunksInternal(selector, streamCreator)).Select(r => (r.Chunk, r.Stream)).ToList();
+        }
+
+        /// <summary>
+        ///     Reads chunks from the blob
+        /// </summary>
+        /// <param name="selector">
+        ///     Selector to choose which chunks to read, input: available chunks, chunk data version, output:
+        ///     chunks to read
+        /// </param>
+        /// <returns>List of chunk, byte[] pairs</returns>
+        public async Task<IReadOnlyList<(StorageChunk Chunk, byte[] Data)>> ReadChunks(
             Func<IReadOnlyList<StorageChunk>, ulong, IEnumerable<StorageChunk>> selector)
+        {
+            return (await ReadChunksInternal(selector, null)).Select(r => (r.Chunk, r.Data)).ToList();
+        }
+
+        private Task<List<(StorageChunk Chunk, byte[] Data, Stream Stream)>> ReadChunksInternal(
+            Func<IReadOnlyList<StorageChunk>, ulong, IEnumerable<StorageChunk>> selector,
+            Func<StorageChunk, (Stream, bool)> streamCreator)
         {
             if (selector == null)
                 throw new ArgumentNullException(nameof(selector));
@@ -337,7 +410,7 @@
             return Task.Run(async () =>
             {
                 List<StorageChunk> chunksToRead;
-                var res = new List<(StorageChunk, byte[])>();
+                var res = new List<(StorageChunk, byte[], Stream)>();

                 using (WriteLock(ConcurrencyHandler.Timeout))
                 {
@@ -363,7 +436,22 @@
                 try
                 {
                     foreach (var r in chunksToRead)
-                        res.Add((r, await ReadChunk(r)));
+                    {
+                        Stream stream = null;
+                        var close = false;
+
+                        if (streamCreator != null)
+                            (stream, close) = streamCreator.Invoke(r);
+                        try
+                        {
+                            res.Add(await ReadChunk(r, stream));
+                        }
+                        finally
+                        {
+                            if (close)
+                                stream?.Close();
+                        }
+                    }
                 }
                 finally
                 {
@@ -387,27 +475,30 @@
                 if (finishedOne)
                     ConcurrencyHandler.SignalReadFinish();

-                return (IReadOnlyList<(StorageChunk, byte[])>) res;
+                return res;
             });
         }

-        private async Task<byte[]> ReadChunk(StorageChunk chunk)
+        private async Task<(StorageChunk, byte[], Stream)> ReadChunk(StorageChunk chunk, Stream target)
         {
             using (var f = Open())
             {
-                var res = new byte[chunk.Size];
+                var res = new byte[target == null ? chunk.Size : Math.Min(chunk.Size, 64 * 1024)];
                 f.Position = chunk.Position + StorageChunk.ChunkHeaderSize;

                 var position = 0;
                 var read = 1;

-                while (position < res.Length && read != 0)
-                {
-                    read = await f.ReadAsync(res, position, res.Length - position);
+                while (position < chunk.Size && read != 0)
+                {
+                    read = await f.ReadAsync(res, position, (int) Math.Min(res.Length, chunk.Size - position));
                     position += read;
-                }
-
-                return res;
+
+                    if (target != null)
+                        await target.WriteAsync(res, 0, read);
+                }
+
+                return (chunk, res, target);
             }
         }

@@ -484,6 +575,10 @@
             });
         }

+        /// <summary>
+        ///     Gets the free chunk sizes
+        /// </summary>
+        /// <returns>Free chunk sizes in the blob</returns>
         public async Task<IReadOnlyList<uint>> GetFreeChunkSizes()
         {
             var chunks = await GetChunks();


breakout batch for custom overloading

breakout batch for custom overloading

--- King.Service/Data/DequeueBatch.cs
+++ King.Service/Data/DequeueBatch.cs
@@ -1,10 +1,11 @@
 namespace King.Service.Data
 {
+    using King.Azure.Data;
+    using King.Service.Timing;
+    using System.Collections.Generic;
     using System.Diagnostics;
     using System.Linq;
     using System.Threading.Tasks;
-    using King.Azure.Data;
-    using King.Service.Timing;

     /// <summary>
     /// Dequeue Batch Task for Queues
@@ -67,10 +68,7 @@

                 Trace.TraceInformation("{0} messages dequeued for processing by: {1}.", messages.Count(), base.processor.GetType());

-                foreach (var msg in messages.Where(m => m != null))
-                {
-                    await this.Process(msg);
-                }
+                await this.Process(messages);
             }
             else
             {
@@ -80,6 +78,19 @@

             return workDone;
         }
+
+        /// <summary>
+        /// Process Messages
+        /// </summary>
+        /// <param name="msgs">Messages</param>
+        /// <returns>Task</returns>
+        protected virtual async Task Process(IEnumerable<IQueued<T>> msgs)
+        {
+            foreach (var msg in msgs.Where(m => m != null))
+            {
+                await this.Process(msg);
+            }
+        }
         #endregion
     }
 }


Update Core

Update Core

--- PhoneBook.Core/App_Start/BundleConfig.cs
+++ PhoneBook.Core/App_Start/BundleConfig.cs
@@ -23,8 +23,6 @@
                 "~/Scripts/respond.js"));

             bundles.Add(new StyleBundle("~/Content/css").Include(
-                "~/Content/bootstrap.min.css",
-                "~/Content/bootstrap-theme.min.css",
                 "~/Content/site.css",
                 "~/Scripts/dropzone/basic.min.css",
                 "~/Scripts/dropzone/dropzone.min.css"));
@@ -40,6 +38,21 @@
                 "~/Scripts/views/ProfilePage.jsx",
                 "~/Scripts/views/SearchPage.jsx"
                 ));
+
+            bundles.Add(new StyleBundle("~/Creative/css").Include(
+                "~/Content/creative/bootstrap.min.css",
+                "~/Content/creative/animate.min.css",
+                "~/Content/creative/creative.css"
+                ));
+
+            bundles.Add(new ScriptBundle("~/Creative/js").Include(
+    "~/Scripts/Parallax.js",
+    "~/Content/creative/bootstrap.min.js",
+    "~/Content/creative/jquery.easing.min.js",
+    "~/Content/creative/jquery.fittext.js",
+    "~/Content/creative/wow.min.js",
+    "~/Content/creative/creative.js"
+    ));
         }
     }
 }


瞎改改，结果就把五小龙删了

瞎改改，结果就把五小龙删了

--- BlackJackLib/Game.cs
+++ BlackJackLib/Game.cs
@@ -9,6 +9,8 @@
 	public class Game
 	{
 		private const int DEFAULT_BALANCE = 1000;
+		private const int MAX_PLAYER = 6;
+		private const int MIN_PLAYER = 1;

 		private Dealer dealer;
 		private List<Player> players;
@@ -16,8 +18,8 @@

 		public Game(int playerNumber = 1)
 		{
-			if (playerNumber < 1)
-				throw new ArgumentOutOfRangeException("playerNumber", "playerNumber should be a positive integer");
+			if (playerNumber < MIN_PLAYER || playerNumber > MAX_PLAYER)
+				throw new ArgumentOutOfRangeException("playerNumber", $"playerNumber should between {MIN_PLAYER} and {MAX_PLAYER}");

 			dealer = new Dealer(DEFAULT_BALANCE);
 			players = new List<Player>(playerNumber);
@@ -126,26 +128,7 @@
 			{
 				do
 				{
-                    //判断玩家是否五小龙
-                    if(player.HandCards.Count==5)
-                    {
-                        Console.WriteLine($"{player.name}已经有五张手牌：{player.HandCardsToString()}");
-                        int if_five_dragon = 0;
-                        foreach (var cards in player.HandCards)
-                        {
-                            if_five_dragon += (int)cards.Rank;
-                        }
-
-                        if (if_five_dragon<21)
-                        {
-                            Console.WriteLine($"{player.name}五小龙了！");
-                            PlayerWin(player);
-                        }
-                    }
-
-
-
-					Console.WriteLine($"{player.Id}号玩家请选择：1.拿牌	2.停牌");
+                   	Console.WriteLine($"{player.Id}号玩家请选择：1.拿牌	2.停牌");
 					int input = int.Parse(Console.ReadLine());
 					// 拿牌
 					if (input == 1)
@@ -165,10 +148,13 @@
 			}

 			Console.WriteLine("-----------------------------------------------------------");
-
-			// 庄家亮暗牌，并持续拿牌直到点数不小于17
+
+			// 庄家亮暗牌
+			// 若还有玩家未结算，则庄家持续拿牌直到点数不小于17
 			dealer_BlindCard.Seen_Blind = true;
-			while (dealer.SumPoint < 17 && dealer.HandCards.Count<5)    //最多只能摸五张牌
+			if (players.Where(player => !player.Finish).Count() == 0)
+				return;
+			while (dealer.SumPoint < 17 && dealer.HandCards.Count < 5)    //最多只能摸五张牌
 				dealer.AchieveCard(deck.DrawACard());

 			Console.WriteLine("-----------------------------------------------------------");
@@ -181,27 +167,24 @@
                 foreach (var player in players.Where(player => !player.Finish))
                     PlayerWin(player); // 玩家赢
             }
-            else // 否则先判断五小龙，再比大小
+            else // 否则比大小
             {
-                if (dealer.HandCards.Count == 5 && dealer.SumPoint < 21)  //判断庄家五小龙
+                foreach (var player in players.Where(player => !player.Finish))
                 {
-                    Console.WriteLine($"{dealer.name}五小龙了！玩家全都炸了");
-                    foreach (var player in players)
-                    {
-                        DealerWin(player);
-                    }
-                }
-
-                foreach (var player in players.Where(player => !player.Finish))  //庄家没有五小龙，依次比大小
-                {
-                    if (player.SumPoint > dealer.SumPoint)
-                        PlayerWin(player);
-                    else if (player.SumPoint < dealer.SumPoint)
-                        DealerWin(player);
-                    else
-                        Draw(player);
-                }
-
+					// 优先点数大的赢
+					if (player.SumPoint > dealer.SumPoint)
+						PlayerWin(player);
+					else if (player.SumPoint < dealer.SumPoint)
+						DealerWin(player);
+					// 相同则牌少的赢
+					else if (player.HandCards.Count > dealer.HandCards.Count)
+						DealerWin(player);
+					else if (player.HandCards.Count < dealer.HandCards.Count)
+						PlayerWin(player);
+					// 平局
+					else
+						Draw(player);
+				}
             }

 			Console.WriteLine("-----------------------------------------------------------");


Demo: Set Y axis tickmarks to 'nice' (1, 2 or 5 in some power of ten) intervals

--- Demos/UI/Graph.cs
+++ Demos/UI/Graph.cs
@@ -208,9 +208,9 @@
             var yDataSpan = maxY - minY;
             var yIntervalCount = description.TargetVerticalTickCount + 1;
             var rawIntervalLength = yDataSpan / yIntervalCount;
-            var roundingOffset = 0.5 * Math.Pow(0.1, description.VerticalIntervalLabelRounding);
-            yDataSpan =  Math.Round(rawIntervalLength * description.VerticalIntervalValueScale + roundingOffset, description.VerticalIntervalLabelRounding) *
-                (yIntervalCount / description.VerticalIntervalValueScale);
+            var scale = (int)Math.Log10(rawIntervalLength);
+            var withinScale = rawIntervalLength * Math.Pow(0.1, scale);
+            yDataSpan = yIntervalCount * Math.Pow(10, scale) * (withinScale < 0.2 ? 0.2 : withinScale < 0.5 ? 0.5 : 1); // 1, 2 or 5 within the power of 10

             //Draw the graph body axes.
             var lowerLeft = description.BodyMinimum + new Vector2(0, description.BodySpan.Y);
@@ -264,7 +264,7 @@
                 }
             }
             {
-                var yDataIntervalSize = yDataSpan / (description.TargetVerticalTickCount + 1f);
+                var yDataIntervalSize = yDataSpan / yIntervalCount;
                 var previousTickValue = double.MinValue;
                 //Note the inclusion of the scale. Rounding occurs post-scale; moving back to pixels requires undoing the scale.
                 var valueToPixels = description.BodySpan.Y / (yDataSpan * description.VerticalIntervalValueScale);


Fixing fromDate on the new Tests

Fixing fromDate on the new Tests

--- tests/DateTimeExtensions.Tests/SLNaturalTimeTests.cs
+++ tests/DateTimeExtensions.Tests/SLNaturalTimeTests.cs
@@ -18,6 +18,7 @@
     public class SLNaturalTimeTests
     {
         private readonly NaturalTextCultureInfo culture;
+        private DateTime fromTime = new DateTime(2016, 6, 21, 10, 28, 0);

         public SLNaturalTimeTests()
         {
@@ -32,8 +33,7 @@
         [Test]
         public void can_tranlate_to_natural_text()
         {
-            var fromTime = DateTime.Now;
-            var toTime = DateTime.Now.AddHours(2).AddMinutes(45);
+            var toTime = fromTime.AddHours(2).AddMinutes(45);

             var naturalText = fromTime.ToNaturalText(toTime, false, this.culture);

@@ -45,7 +45,6 @@
         [Test]
         public void can_tranlate_to_natural_text_rounded()
         {
-            var fromTime = DateTime.Now;
             var toTime = fromTime.AddHours(2).AddMinutes(45);

             var naturalText = fromTime.ToNaturalText(toTime, true, this.culture);
@@ -59,8 +58,7 @@
         [Test]
         public void can_tranlate_to_exact_natural_text()
         {
-            var fromTime = DateTime.Now;
-            var toTime = DateTime.Now.AddHours(2).AddMinutes(30);
+            var toTime = fromTime.AddHours(2).AddMinutes(30);

             var naturalText = fromTime.ToExactNaturalText(toTime, this.culture);

@@ -72,7 +70,6 @@
         [Test]
         public void can_tranlate_to_exact_natural_text_full()
         {
-            var fromTime = DateTime.Now;
             var toTime = fromTime.AddSeconds(6).AddMinutes(5).AddHours(4).AddDays(3).AddMonths(2).AddYears(2);

             var naturalText = fromTime.ToExactNaturalText(toTime, this.culture);
@@ -85,7 +82,6 @@
         [Test]
         public void are_orderless()
         {
-            var fromTime = DateTime.Now;
             var toTime = fromTime.AddSeconds(6).AddMinutes(5).AddHours(4).AddDays(3).AddMonths(2).AddYears(2);

             var naturalText = fromTime.ToExactNaturalText(toTime, this.culture);
@@ -102,7 +98,6 @@
         [Test]
         public void can_pluralize_years()
         {
-            var fromTime = DateTime.Now;
             var toTime_plural = fromTime.AddYears(2);
             var toTime_plural3 = fromTime.AddYears(3);
             var toTime_plural4 = fromTime.AddYears(4);
@@ -130,7 +125,6 @@
         [Test]
         public void can_pluralize_months()
         {
-            var fromTime = DateTime.Now;
             var toTime_plural = fromTime.AddMonths(2);
             var toTime_plural3 = fromTime.AddMonths(3);
             var toTime_plural4 = fromTime.AddMonths(4);
@@ -158,7 +152,6 @@
         [Test]
         public void can_pluralize()
         {
-            var fromTime = DateTime.Now;
             var toTime_plural = fromTime.AddDays(2).AddHours(2).AddMinutes(2).AddSeconds(2);
             var toTime_plural3 = fromTime.AddDays(3).AddHours(3).AddMinutes(3).AddSeconds(3);
             var toTime_plural4 = fromTime.AddDays(4).AddHours(4).AddMinutes(4).AddSeconds(4);


add some more tests

add some more tests

--- tests/DateTimeExtensions.Tests/SLNaturalTimeTests.cs
+++ tests/DateTimeExtensions.Tests/SLNaturalTimeTests.cs
@@ -104,15 +104,25 @@
         {
             var fromTime = DateTime.Now;
             var toTime_plural = fromTime.AddYears(2);
+            var toTime_plural3 = fromTime.AddYears(3);
+            var toTime_plural4 = fromTime.AddYears(4);
             var toTime_single = fromTime.AddYears(1);

             var naturalText_plural = fromTime.ToNaturalText(toTime_plural, true, this.culture);
+            var naturalText_plural3 = fromTime.ToNaturalText(toTime_plural3, true, this.culture);
+            var naturalText_plural4 = fromTime.ToNaturalText(toTime_plural4, true, this.culture);
             var naturalText_single = fromTime.ToNaturalText(toTime_single, true, this.culture);

             Assert.IsNotNull(naturalText_plural);
             Assert.IsNotEmpty(naturalText_plural);
+            Assert.IsNotNull(naturalText_plural3);
+            Assert.IsNotEmpty(naturalText_plural3);
+            Assert.IsNotNull(naturalText_plural4);
+            Assert.IsNotEmpty(naturalText_plural4);
             Assert.IsNotNull(naturalText_single);
             Assert.IsNotEmpty(naturalText_single);
+            Assert.AreEqual("4 let", naturalText_plural4);
+            Assert.AreEqual("3 leta", naturalText_plural3);
             Assert.AreEqual("2 leti", naturalText_plural);
             Assert.AreEqual("1 leto", naturalText_single);
         }
@@ -122,15 +132,25 @@
         {
             var fromTime = DateTime.Now;
             var toTime_plural = fromTime.AddMonths(2);
+            var toTime_plural3 = fromTime.AddMonths(3);
+            var toTime_plural4 = fromTime.AddMonths(4);
             var toTime_single = fromTime.AddMonths(1);

             var naturalText_plural = fromTime.ToNaturalText(toTime_plural, true, this.culture);
+            var naturalText_plural3 = fromTime.ToNaturalText(toTime_plural3, true, this.culture);
+            var naturalText_plural4 = fromTime.ToNaturalText(toTime_plural4, true, this.culture);
             var naturalText_single = fromTime.ToNaturalText(toTime_single, true, this.culture);

             Assert.IsNotNull(naturalText_plural);
             Assert.IsNotEmpty(naturalText_plural);
+            Assert.IsNotNull(naturalText_plural3);
+            Assert.IsNotEmpty(naturalText_plural3);
+            Assert.IsNotNull(naturalText_plural4);
+            Assert.IsNotEmpty(naturalText_plural4);
             Assert.IsNotNull(naturalText_single);
             Assert.IsNotEmpty(naturalText_single);
+            Assert.AreEqual("4 mescev", naturalText_plural4);
+            Assert.AreEqual("3 mesci", naturalText_plural3);
             Assert.AreEqual("2 mesca", naturalText_plural);
             Assert.AreEqual("1 mesec", naturalText_single);
         }
@@ -140,16 +160,26 @@
         {
             var fromTime = DateTime.Now;
             var toTime_plural = fromTime.AddDays(2).AddHours(2).AddMinutes(2).AddSeconds(2);
+            var toTime_plural3 = fromTime.AddDays(3).AddHours(3).AddMinutes(3).AddSeconds(3);
+            var toTime_plural4 = fromTime.AddDays(4).AddHours(4).AddMinutes(4).AddSeconds(4);
             var toTime_single = fromTime.AddDays(1).AddHours(1).AddMinutes(1).AddSeconds(1);

             var naturalText_plural = fromTime.ToExactNaturalText(toTime_plural, this.culture);
+            var naturalText_plural3 = fromTime.ToExactNaturalText(toTime_plural3, this.culture);
+            var naturalText_plural4 = fromTime.ToExactNaturalText(toTime_plural4, this.culture);
             var naturalText_single = fromTime.ToExactNaturalText(toTime_single, this.culture);

             Assert.IsNotNull(naturalText_plural);
             Assert.IsNotEmpty(naturalText_plural);
+            Assert.IsNotNull(naturalText_plural3);
+            Assert.IsNotEmpty(naturalText_plural3);
+            Assert.IsNotNull(naturalText_plural4);
+            Assert.IsNotEmpty(naturalText_plural4);
             Assert.IsNotNull(naturalText_single);
             Assert.IsNotEmpty(naturalText_single);
             Assert.AreEqual("2 dni, 2 uri, 2 minuti, 2 sekundi", naturalText_plural);
+            Assert.AreEqual("3 dni, 3 ure, 3 minute, 3 sekunde", naturalText_plural3);
+            Assert.AreEqual("4 dni, 4 ur, 4 minut, 4 sekund", naturalText_plural4);
             Assert.AreEqual("1 dan, 1 ura, 1 minuta, 1 sekunda", naturalText_single);
         }
     }


Fixes #465 Analyzer does not follow .pth files when a library path is provided Expands path files when handling the fallback case of a library path being passed to the analyzer.

--- Python/Product/Analyzer/PyLibAnalyzer.cs
+++ Python/Product/Analyzer/PyLibAnalyzer.cs
@@ -333,6 +333,8 @@
                     var sitePackagesDir = Path.Combine(value, "site-packages");
                     if (Directory.Exists(sitePackagesDir)) {
                         library.Add(new PythonLibraryPath(sitePackagesDir, false, null));
+                        library.AddRange(ModulePath.ExpandPathFiles(sitePackagesDir)
+                            .Select(p => new PythonLibraryPath(p, false, null)));
                     }
                 }
             }


- Refactored to work with multiple sets of attribute names.

--- CR_XMLNav/PlugIn1.cs
+++ CR_XMLNav/PlugIn1.cs
@@ -12,6 +12,7 @@
 {
     public partial class PlugIn1 : StandardPlugIn
     {
+        private List<string> _Attributes;
         // DXCore-generated code...
         #region InitializePlugIn
         public override void InitializePlugIn()
@@ -56,7 +57,21 @@
             if (!(Element is XmlAttribute))
                 return;
             // Allow search to start if Attribute
-            ea.Available = new string[] { "id", "ref" }.Contains(((XmlAttribute)Element).Name);
+
+            string AttributeName = ((XmlAttribute)Element).Name;
+
+            List<List<string>> AttributeCollections = new List<List<string>>();
+            AttributeCollections.Add("id|ref".Split('|').ToList());
+            AttributeCollections.Add("id1|ref1".Split('|').ToList());
+            _Attributes = null;
+            foreach (List<string> attributes in AttributeCollections)
+            {
+                if (attributes.Contains(AttributeName))
+                {
+                    _Attributes = attributes;
+                }
+            }
+            ea.Available = _Attributes != null;
         }
         private void XMLRefSearch_SearchReferences(Object Sender, DevExpress.CodeRush.Core.SearchEventArgs ea)
         {
@@ -71,7 +86,7 @@
                 foreach (SourceFile sourceFile in project.AllFiles)
                 {
                     SourceFile activeFile = CodeRush.Source.ActiveSourceFile;
-                    ElementEnumerable Enumerator = new ElementEnumerable(sourceFile, new XMLAttributeFilter(StartValue), true);
+                    ElementEnumerable Enumerator = new ElementEnumerable(sourceFile, new XMLAttributeFilter(StartValue, _Attributes), true);
                     foreach (XmlAttribute CurrentAttribute in Enumerator)
                     {
                         ea.AddRange(new FileSourceRange(CurrentAttribute.FileNode, CurrentAttribute.ValueRange));
@@ -83,8 +98,10 @@
     public class XMLAttributeFilter : IElementFilter
     {
         private readonly string _startValue;
-        public XMLAttributeFilter(string StartValue)
+        private readonly List<string> _attributes;
+        public XMLAttributeFilter(string StartValue, List<string> Attributes)
         {
+            _attributes = Attributes;
             _startValue = StartValue;
         }
         public bool Apply(IElement element)
@@ -100,12 +117,12 @@
             XmlAttribute CurrentAttribute = (XmlAttribute)element;

             // Skip attribute if it doesn't have the correct name.
-            if (CurrentAttribute.Name != "id" && CurrentAttribute.Name != "ref")
+            if (!(_attributes.Contains(CurrentAttribute.Name)))
                 return false;

             // Skip the attribute if it doesn't have the same value as start point.
             if (CurrentAttribute.Value != _startValue)
-                return false;
+                return false;

             return true;
         }


DeleteBuffers

DeleteBuffers

--- CSharpGL/OpenGLAPI/GL_Functions.cs
+++ CSharpGL/OpenGLAPI/GL_Functions.cs
@@ -579,6 +579,20 @@
             if (ptr != IntPtr.Zero)
             {
                 glDeleteTextures(n, textures);
+            }
+        }
+
+        /// <summary>
+        /// This function deletes a set of vertex buffer objects.
+        /// </summary>
+        /// <param name="n">Number of textures to delete.</param>
+        /// <param name="buffers">The array containing the names of the buffers to delete.</param>
+        public static void DeleteBuffers(int n, uint[] buffers)
+        {
+            IntPtr ptr = Win32.wglGetCurrentContext();
+            if (ptr != IntPtr.Zero)
+            {
+                GL.GetDelegateFor<GL.glDeleteBuffers>()(n, buffers);
             }
         }


It was not accessible where required.

It was not accessible where required.

--- yafsrc/YAF.Classes/YAF.Classes.Utils/YafSystemInfo.cs
+++ yafsrc/YAF.Classes/YAF.Classes.Utils/YafSystemInfo.cs
@@ -6,7 +6,7 @@
    /// <summary>
    /// The class gets common system info. Used in data layers other than MSSQL.
    /// </summary>
-    internal static class Platform
+    public static class Platform
     {
         private static bool inited;
         private static bool isMono;