diff --git a/src/Benchmarking/project.lock.json b/src/Benchmarking/project.lock.json index d0a78a86555..6b147df4615 100644 --- a/src/Benchmarking/project.lock.json +++ b/src/Benchmarking/project.lock.json @@ -7652,7 +7652,7 @@ "Microsoft.Win32.Registry/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "z54NYVj7y4jGC2EWn5QLqaokMOws5NAjZYbEgUDNCtJE5gkpRR1JnDWU1Kjuvu3mmro2K9/C1TposmHB8cAtmg==", + "sha512": "1UxMko0bXvk98vNVwbgHNZ+soSvK4LXy9nMUYW67MHdZXAfp0hbJIMj6MnRpMoKExZLCz6a7/0Kq112y+sbGxQ==", "files": [ "lib/DNXCore50/Microsoft.Win32.Registry.dll", "lib/net46/Microsoft.Win32.Registry.dll", @@ -7698,7 +7698,7 @@ "runtime.any.System.Linq.Expressions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "4sPxQCjllMJ1uZNlwz/EataPyHSH+AqSDlOIPPqcy/88R2B+abfhPPC78rd7gvHp8KmMX4qbJF6lcCeDIQpmVg==", + "sha512": "P5nzo1Ye0GxB4BYdWian6Y427eTrhn1JS3jLWZq5bMWVn8hS/OIfyylASN0A/qqeLn4rGA0fOzmJSYqFSKvxgQ==", "files": [ "lib/DNXCore50/System.Linq.Expressions.dll", "lib/MonoAndroid10/_._", @@ -7720,7 +7720,7 @@ "runtime.win7.System.Console/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "pfQrTtnYcWOtI3RrpqjAzwT3I55ivTVZFpbKYG59dYTTvaLFGbs2njc/mrXHij6GylyJ2YjekS/9r6I8X3LV1A==", + "sha512": "TJZhrw44Bf7sYqne+CX5II/PaNf5L7oKVfl0FLkr4pj76KS8hSsJzsKL0IvxC+bi4d51+wTbv91kF1kgPyHMVw==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Console.4.0.0-beta-23516.nupkg", @@ -7733,7 +7733,7 @@ "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "TxSgeP23B6bPfE0QFX8u4/1p1jP6Ugn993npTRf3e9F3y61BIQeCkt5Im0gGdjz0dxioHkuTr+C2m4ELsMos8Q==", + "sha512": "pQVXtEmY+07qltXqaKnRMPlnLZPnVzBcXYQyhELWKL8Gjz/2TEcuaV7Meypg2Q54T14635SkCYcV7IzeU+buXA==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Diagnostics.Debug.4.0.11-beta-23516.nupkg", @@ -7747,7 +7747,7 @@ "runtime.win7.System.Diagnostics.Process/4.1.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "qCCXX+OG6430kLtN/wyjeLTTiJvOIKB2G+qBvhSqVLWe5ZTiEiSnweKUzdi7raXL0te0WfPE5tf8FuKcEKPnIA==", + "sha512": "IDp4dljG6NkpMP9UzrtuvLZ0wfeOHphStOsVLmUTj2g3UH28L5Lo9481/fAXVPs2GEVMRwAvSwph90EcNfV/jQ==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Diagnostics.Process.4.1.0-beta-23516.nupkg", @@ -7764,7 +7764,7 @@ "runtime.win7.System.Diagnostics.TraceSource/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "hpD0T6zOEU/1qUSPitKSgIdsL4tZlZz7CUCu6PP7BYf8CM3vPkSEzN38kX6PnH8F6kvOqxEwzPYhZCK3PJkh/Q==", + "sha512": "6YSh7+vRI2ptFNPTWE100MNz0sRAVuBjwU0znK3kzd5GYQgLjvtWn8rT9DvJQA4R6OmC5Q+OgXzb/nibxcbtbA==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Diagnostics.TraceSource.4.0.0-beta-23516.nupkg", @@ -7781,7 +7781,7 @@ "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "UOHEVg3jQwsvy3b+8zhDk7BQ9GhHY1KcjHSuqArzIl7oemcM/+D7OfS5iOA96ydjEv9FmIKV3knkXMge+cUD0Q==", + "sha512": "PwsqcwAui7Ld6Ad32RjoHF3wBSEkEzvv5ka605IsaWxHSCfmmwevJnIbNgwJgBTao/uR+wSO9yoyvfrB109BfQ==", "files": [ "ref/dotnet/_._", "runtime.win7.System.IO.FileSystem.4.0.1-beta-23516.nupkg", @@ -7798,7 +7798,7 @@ "runtime.win7.System.Net.Primitives/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "V4bv5VTaBcy0FekQbKgJKP+c+RJhNxOacpngLGADf9kUqoNkSJLj083d4I0L5iTKMWALlAN/tfzAlRm0VxiDeA==", + "sha512": "WmcWc3b5xNFdik+yWrFPy/WWwsfNAdMebJNzVqbPd4OlVQ7TWhO7VR5TN2M+3Ji0OAV9scHZ6atCWyBycz6+nA==", "files": [ "lib/DNXCore50/System.Net.Primitives.dll", "ref/dotnet/_._", @@ -7824,7 +7824,7 @@ "runtime.win7.System.Net.Sockets/4.1.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "4FbyzvLhWFFv3OrgkPmd3cXoKUb+oB+rp51ke6nMqR+MjN3sWs/w3C0Jbx84UM6zg9a3JiD72ThjgDnet3QS3w==", + "sha512": "NRBFPlDd/ZdflYqJ++i3+jAxWHjLpCn6CUfJFBJXF1k0uZUCuTc13O+6Q4UhaPnWsQ+xlBk5TE8aFU7jRqR2QA==", "files": [ "lib/DNXCore50/System.Net.Sockets.dll", "lib/netcore50/System.Net.Sockets.dll", @@ -7838,7 +7838,7 @@ "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "Jm+LAzN7CZl1BZSxz4TsMBNy1rHNqyY/1+jxZf3BpF7vkPlWRXa/vSfY0lZJZdy4Doxa893bmcCf9pZNsJU16Q==", + "sha512": "V4HbLYv2m4LaL+Kl+x6wz8Xl9TyrHBpA/lYq+w6J35mYY9ACCVV+YkHRJdNuRd3Qe3DEz9X8D1S8uWnKMyHvvg==", "files": [ "lib/DNXCore50/System.Runtime.Extensions.dll", "lib/netcore50/System.Runtime.Extensions.dll", @@ -7852,7 +7852,7 @@ "runtime.win7.System.Security.Cryptography.Algorithms/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "MRAq2N94D6wKC5UFbUZVWcOz8YpknDj6ttOpF5R3sxBdZJWI6qUngnGdHE2eYAuCerHlLV/0m4WJxoSaQHDNTA==", + "sha512": "a6mTJ7ZxRoiKRoC0YdFRB3XgEUekqkvCet39yqzWdZukmZG2J/oXzHdynrDWiiT14KkZUajmQr9W4P9nWVjjhg==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Security.Cryptography.Algorithms.4.0.0-beta-23516.nupkg", @@ -8054,7 +8054,7 @@ "System.Collections.Concurrent/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "e4FscEk9ugPXPKEIQFYBS/i+0KAkKf/IEe26fiOnqk8JVZQuCLO3gJmJ+IiVD1TxJjvVmh+tayQuo2svVzZV7g==", + "sha512": "K+n6bC3jL5nRzwm8IM5WHxPScCnrVoPCJjpkBEmoBYY8/3j4RJdqIng/NYcpGcjvP/GIF6tAwZlh54ao2pWOvQ==", "files": [ "lib/dotnet5.4/System.Collections.Concurrent.dll", "lib/MonoAndroid10/_._", @@ -8182,7 +8182,7 @@ "System.ComponentModel/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "PdAC1M7yT9EBtLpXICbOtPDpDjYSlV2RXyQ7AiKyBD7mV1DNTIK7tcM1056GIOlMoJDDdxU5Z3otBeAM8v5PAg==", + "sha512": "PWlAKIWFtb0ahyK9mXkvW+8WzKfXd9n5NAtRDduoE2JETVZtWL2jUM08lVKWU+oZr3ZGBdRPPLVbUD/K9i4uzw==", "files": [ "lib/dotnet5.4/System.ComponentModel.dll", "lib/net45/_._", @@ -8304,7 +8304,7 @@ "System.Console/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "0YTzoNamTU+6qfZEYtMuGjtkJHB1MEDyFsZ5L/x97GkZO3Bw91uwdPh0DkFwQ6E8KaQTgZAecSXoboUHAcdSLA==", + "sha512": "tzF4Dbbv+5bcbQ7GHuuKafkaDZThiUiwxqCc1ngewnMWZ5YmIgjQZjs+E1DNhoMVAvkH0tSmLJvsDlx9dFg+Aw==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -8384,7 +8384,7 @@ "System.Diagnostics.Debug/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "wK52HdO2OW7P6hVk/Q9FCnKE9WcTDA3Yio1D8xmeE+6nfOqwWw6d+jVjgn5TSuDghudJK9xq77wseiGa6i7OTQ==", + "sha512": "eVfSsVOIlL2tZwA24PKduDIGrPXH1OdAnRPhU4q5nGA35kX+vnFtE+IyGfiyShwlC0ldnssmQRAm9mPKmgOpyA==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -8544,7 +8544,7 @@ "System.Diagnostics.TraceSource/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "OIWB5pvMqOdCraAtiJBhRahrsnP2sNaXbCZNdAadzwiPLzRI7EvLTc7/NlkFDxm3I6YKVGxnJ5aO+YJ/XPC8yw==", + "sha512": "gvJNxObthiaV07AKZYjQV69xRBKRR7gTpEVe4qXF4Mta/2zD7sI+Zm//rRCQenLYBuL8nBxVzomtYJ4eT7w8QQ==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -8610,7 +8610,7 @@ "System.Dynamic.Runtime/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "ypkxS0e+yUw7F6JEwuB22u0qqruMeZFOmtcImh2efDHpTAuhF2FOqCDJ7f4qLf9yomVvB4kjkZ6xGunbIQryxQ==", + "sha512": "C2GXB20I5vMcO4wemZr5pEjwwEb6H6zVkwF12JSUhripKBIKgI0YKpfp9glyDSL903cYgIXAztMQDajwCR0PmA==", "files": [ "lib/DNXCore50/System.Dynamic.Runtime.dll", "lib/MonoAndroid10/_._", @@ -8720,7 +8720,7 @@ "System.Globalization/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "htoF4cS3WhCkU3HloMj3mz+h2FHnF8Hz0po/26otT5e46LlJ8p7LpFpxckxVviyYg9Fab9gr8aIB0ZDN9Cjpig==", + "sha512": "jctanC1VveBFsgOysiqFN/HH0qX+EvLNelcBU6Fb4w7m3BBu827k8RCNiwW+uAC5f5XZBTRpsXZk4cI15RCdYQ==", "files": [ "lib/DNXCore50/System.Globalization.dll", "lib/MonoAndroid10/_._", @@ -8839,7 +8839,7 @@ "System.IO/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "dR1DaWrF0zsV2z/GVs8xVvMds6xu0ykuwv+VPou8wbpJ1XxGBK9g6v5F84DWL8Q1qi+6Kyb56wbZYdYQO8OMew==", + "sha512": "6nJmAk4vYjN+5/haenkKk/BDGCOKw5pk5EjXAOvBnUM5PFIfO8JwUxGbcveOD4vV5Vb6TAxrmRmts/7F+BEuEw==", "files": [ "lib/DNXCore50/System.IO.dll", "lib/MonoAndroid10/_._", @@ -8963,7 +8963,7 @@ "System.IO.FileSystem/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "KOYNQ6FeLQh0HdHVlp6IRjRGPCjyFvZRKfhYSDFi7DR0EHY3cC2rvfVj5HWJEW5KlSaa01Ct25m06yVnqSxwOQ==", + "sha512": "xggWMgLzKnBisYTx5HW3og8qRR7TjmorQAdsAQOaMcY4I9CQA6JUxw0r2AvCC1+ToXh0CuO7J6dymX33pkmwbA==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -9093,7 +9093,7 @@ "System.Linq.Expressions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "YEl5oyF5fifLbHHP099cvb/6f2r2h1QVHzoaoINPHOZtpNec+RfqvzETXcYDIdHT7l+bBAYsBuVUkBgfQEoYfQ==", + "sha512": "FtKytB13HabzrSvrAgBgOOnG2uxJO4s7zvP5Sk0NS3bwbJUyb5AP1p4897UWnLiB6C95jI4nIkZps51sa9In8g==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -9206,7 +9206,7 @@ "System.Net.Primitives/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "lEMwORLJNk7tEAO+4RJ/aPjF2KlismwYxCYgqJZza3ArRznAqrzKeCpcnBlo3zJPHjR1tSNhRWk9SLRGGV2K3Q==", + "sha512": "e6bYgPSmo1n/+Ccef2OxFm5gyvhGvw/+Zvsh09iOfLNOutr/2ker4IsxC+3VMVDZc/3/glc4iOfuB5x59HzzHQ==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -9348,7 +9348,7 @@ "System.Net.Sockets/4.1.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "Q2D1ew24ZIH4kOE4ZJCrtvNfSSiea3yOeqow2jsgEPJ9Gafu8atlU5EGfXM0LQvtsIeQ9i1YwqdyZQHaL/RySg==", + "sha512": "hJQxXC5OcecCG49Wg9PreHFC2tDZFwpqiGhRnQMK47eo8ozvOMl2XqISanclj1cjCIUZDUSn0XxggVC7Z2WppA==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -9455,7 +9455,7 @@ "System.Private.Networking/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "YjBc3HcJBVtoeFNe9cY33dyTGME2T7B5mwuh/wBpxuGuvBMBWqrRKWkSOmnUT7ON7/U2SkpVeM5FCeqE3QRMNw==", + "sha512": "x1STivE/maJG95AY82H5A7K5LbEOj4hzjGEGt2p1oEM4NIG0HBqXFauWHRRRQDZI0851wjBwgxHNid/56hHOhg==", "files": [ "lib/DNXCore50/System.Private.Networking.dll", "lib/netcore50/System.Private.Networking.dll", @@ -9670,7 +9670,7 @@ "System.Reflection.Extensions/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "CiaYbkU2dzOSTSB7X/xLvlae3rop8xz62XjflUSnyCaRPB5XaQR4JasHW07/lRKJowt67Km7K1LMpYEmoRku8w==", + "sha512": "Ph0ELqqqz218bGEtnfQ1xegANVQ3v0S/hU12AHpb4HEw8SESssbNCKWEVjeI3y2xDYaVx1aVjM4hZ1QXa4IonQ==", "files": [ "lib/DNXCore50/System.Reflection.Extensions.dll", "lib/net45/_._", @@ -9869,7 +9869,7 @@ "System.Resources.ResourceManager/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "d1PiB1k57GP5EJZJKnJ+LgrOQCgHPnn5oySQAy4pL2MpEDDpTyTPKv+q9aRWUA25ICXaHkWJzeTkj898ePteWQ==", + "sha512": "KLzhgVk6aZDbU3jU+zGN3gGIU6hlhPyA8hwGqB1FmJRs/lJl7o9td34+5xm3Mk1va5vHEO8+cRj7te9WdNalHQ==", "files": [ "lib/DNXCore50/System.Resources.ResourceManager.dll", "lib/net45/_._", @@ -10032,7 +10032,7 @@ "System.Runtime.Extensions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "HX4wNPrcCV9D+jpbsJCRPuVJbcDM+JobSotQWKq40lCq0WJbJi+0lNQ/T1zHEdWcf4W2PmtMkug1rW7yKW9PiQ==", + "sha512": "mpKQVIySlFSvgQkeb9qvXxHOY3jV7H9x5DmPSeNac0APFOG9ROufrMozY3VP/GxBWu4AVS/HDG1lUxg/riE4ew==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -10126,7 +10126,7 @@ "System.Runtime.InteropServices/4.0.21-beta-23516": { "type": "package", "serviceable": true, - "sha512": "XRWX4yFPKQ3t3hbPReLB9d2ViTuGqMLYHGcuWteIYgoIaKtHp7Uae2xHjiUG/QZbVN6vUp+KnL04aIi5dOj8lQ==", + "sha512": "3QodORMX/J/HMQgeBf62yYLESn4g+Gl9XGKEoFNCHGUb03yWqpSVPOD0gSksyb661kRdxR5K4/7I9xjz/GxkRg==", "files": [ "lib/DNXCore50/System.Runtime.InteropServices.dll", "lib/MonoAndroid10/_._", @@ -10252,7 +10252,7 @@ "System.Security.Cryptography.Algorithms/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "yvMpzC6Cd/UBHB3LU4z4jorW8nuitQfG171R8INxoUtNTZPBUmVhW4MW4adQYmwZ9IJ5C5rxnXKNfsvF5g9eog==", + "sha512": "h0t6XvR47THFihonJfk2aC3m2YQ94hzF0bFBE9Zgs4td+G+NgIuRmIdGQMFKv3sH7jX5ItOLq/K7uX9M6dvlgQ==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -10318,7 +10318,7 @@ "System.Security.Cryptography.Primitives/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "YEHmq6x6u2grEuZFAX9au+6uY8SCIkA6lu4wbrt2C71RFQKWEyO5G9+pk1v0QcNPqay/38aSm9v/BoTFNQii1Q==", + "sha512": "ztiLIQf2hl0ljLzaUeCx5tk+TU8TrHwrEatuKgSl2KoZXxeOCeXnB+oE07xQO7RnnMlPLtX7/ucHQtteh9du7A==", "files": [ "lib/dotnet5.4/System.Security.Cryptography.Primitives.dll", "lib/MonoAndroid10/_._", @@ -10395,7 +10395,7 @@ "System.Text.Encoding/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "gk4da/Y3VReZpIeQ3UDTCknbkO/FuYKOJtP+5+Vtc07mTcPHvhgbZLXEGTTneP6yWPDWTTh20nZZMF/19YsRtA==", + "sha512": "OnM2cqPXeOKF8cwgIAygYeCSKsJL7gjBDi3tI8lEaJSdnt4nM3/k4i1+p73oXn8a8tEcFRNvrvNuqsdqxYixXQ==", "files": [ "lib/DNXCore50/System.Text.Encoding.dll", "lib/MonoAndroid10/_._", @@ -10538,7 +10538,7 @@ "System.Text.RegularExpressions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "Iz3942FXA47VxsuJTBq4aA/gevsbdMhyUnQD6Y0aHt57oP6KAwZLaxVtrRzB03yxh6oGBlvQfxBlsXWnLLj4gg==", + "sha512": "ZtarWBvDF7R6pRqo1jxo+uV46Rzxht8rRTe+qSHrr6SLLiZRL4RMncU+mDEn81wF+WL+v81ug20lnssHNHlV+Q==", "files": [ "lib/dotnet5.4/System.Text.RegularExpressions.dll", "lib/MonoAndroid10/_._", @@ -10648,7 +10648,7 @@ "System.Threading.Tasks/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "xjN0l+GsHEdV3G2lKF7DnH7kEM2OXoWq56jcvByNaiirrs1om5RyI6gwX7F4rTbkf8eZk1pjg01l4CI3nLyTKg==", + "sha512": "kO+GZsJrZO+G7DA4xSuDZXaE1haJWia6TdzMt3xt9oTgh5GQ4bwI6UqBUVKhdTKxC3TI+snsbHXPy2+Qmd6i0g==", "files": [ "lib/DNXCore50/System.Threading.Tasks.dll", "lib/MonoAndroid10/_._", @@ -10710,7 +10710,7 @@ "System.Threading.Thread/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "2a5k/EmBXNiIoQZ8hk32KjoCVs1E5OdQtqJCHcW4qThmk+m/siQgB7zYamlRBeQ5zJs7c1l4oN/y5+YRq8oQ2Q==", + "sha512": "/yo7KuZ9zLrB3hdWARrvus3YTAdvvuqHWf2oMNpyG1mpoVlmhRwkZ9JqYRC+TL3hSFHa7mvHa8EItA+BBahlsA==", "files": [ "lib/DNXCore50/System.Threading.Thread.dll", "lib/MonoAndroid10/_._", @@ -10742,7 +10742,7 @@ "System.Threading.ThreadPool/4.0.10-beta-23516": { "type": "package", "serviceable": true, - "sha512": "xDTdxmxDAfIMrbANWXQih80yOTbyXhU5z/2P15n3EuyJOetqKKVWEXouoD8bV25RzJHuB2rHMTZhUmbtLmEpwA==", + "sha512": "s7KzGX8skWrj2raEEWt/qbMUPZJuHlwW6XP1fC4yltuX+6FqPA/D5fag8Q0/TsbcCcC8Q50+fULuHjlCNeblow==", "files": [ "lib/DNXCore50/System.Threading.ThreadPool.dll", "lib/MonoAndroid10/_._", @@ -10837,7 +10837,7 @@ "System.Xml.XDocument/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "sVbIsIQ8c3UnhnV9a8/J1boDVLpfqVsolNJ/nIvrU4g3TE0RpC2yFkivPmXYpwllsa1b6ajxZcZ+ItMhhXy8vA==", + "sha512": "1WwmI3yKK0f65rpVlP0f43LGu8aQ4mhdvkoJ9EjdL38jQuKKdTa5WIm4LlHiM9IM8BRTcwSY1yr6ardFqGGJGQ==", "files": [ "lib/dotnet5.4/System.Xml.XDocument.dll", "lib/MonoAndroid10/_._", diff --git a/src/CodeGeneration/Nest.Litterateur/project.lock.json b/src/CodeGeneration/Nest.Litterateur/project.lock.json index a05b271d168..90deab026e4 100644 --- a/src/CodeGeneration/Nest.Litterateur/project.lock.json +++ b/src/CodeGeneration/Nest.Litterateur/project.lock.json @@ -3089,7 +3089,7 @@ "Microsoft.CSharp/4.0.1-beta-23409": { "type": "package", "serviceable": true, - "sha512": "GGOOJF47WzXZoka0JHCToQxzSguIy1UeXZywUjA1NPqvKAWVwbSbZ2VxyeIL3jyTV1BHEbBX8FPL6vweUON2aw==", + "sha512": "I1jsSsyK89VfNebrnx2eiBD5YT6zp+DcX2v6AxZ/IosS38QYmA9YKVmssMd5yhRkXwr1f8MfgZTxF1Cli90JEQ==", "files": [ "lib/dotnet/de/Microsoft.CSharp.xml", "lib/dotnet/es/Microsoft.CSharp.xml", diff --git a/src/Elasticsearch.Net/ConnectionPool/StickyConnectionPool.cs b/src/Elasticsearch.Net/ConnectionPool/StickyConnectionPool.cs new file mode 100644 index 00000000000..4fa0b0ba29f --- /dev/null +++ b/src/Elasticsearch.Net/ConnectionPool/StickyConnectionPool.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; + +namespace Elasticsearch.Net +{ + public class StickyConnectionPool : IConnectionPool + { + protected IDateTimeProvider DateTimeProvider { get; } + + protected List InternalNodes { get; set; } + + public bool UsingSsl { get; } + public bool SniffedOnStartup { get; set; } + + public IReadOnlyCollection Nodes => this.InternalNodes; + + public int MaxRetries => this.InternalNodes.Count - 1; + + public bool SupportsReseeding => false; + + public bool SupportsPinging => true; + + public DateTime LastUpdate { get; protected set; } + + public StickyConnectionPool(IEnumerable uris, IDateTimeProvider dateTimeProvider = null) + : this(uris.Select(uri => new Node(uri)), dateTimeProvider) + { } + + public StickyConnectionPool(IEnumerable nodes, IDateTimeProvider dateTimeProvider = null) + { + nodes.ThrowIfEmpty(nameof(nodes)); + + this.DateTimeProvider = dateTimeProvider ?? Elasticsearch.Net.DateTimeProvider.Default; + + var nn = nodes.ToList(); + var uris = nn.Select(n => n.Uri).ToList(); + if (uris.Select(u => u.Scheme).Distinct().Count() > 1) + throw new ArgumentException("Trying to instantiate a connection pool with mixed URI Schemes"); + + this.UsingSsl = uris.Any(uri => uri.Scheme == "https"); + + this.InternalNodes = nn + .DistinctBy(n => n.Uri) + .ToList(); + + this.LastUpdate = this.DateTimeProvider.Now(); + } + + protected int GlobalCursor = -1; + + public IEnumerable CreateView(Action audit = null) + { + var now = this.DateTimeProvider.Now(); + var nodes = this.InternalNodes.Where(n => n.IsAlive || n.DeadUntil <= now) + .ToList(); + var count = nodes.Count; + Node node; + + if (count == 0) + { + var globalCursor = Interlocked.Increment(ref GlobalCursor); + //could not find a suitable node retrying on first node off globalCursor + audit?.Invoke(AuditEvent.AllNodesDead, null); + node = this.InternalNodes[globalCursor % this.InternalNodes.Count]; + node.IsResurrected = true; + audit?.Invoke(AuditEvent.Resurrection, node); + yield return node; + yield break; + } + + // If the cursor is greater than the default then it's been + // set already but we now have a live node so we should reset it + if (GlobalCursor > -1) + { + Interlocked.Exchange(ref GlobalCursor, -1); + } + + var localCursor = 0; + + for (var attempts = 0; attempts < count; attempts++) + { + node = nodes[localCursor]; + localCursor = (localCursor + 1) % count; + //if this node is not alive or no longer dead mark it as resurrected + if (!node.IsAlive) + { + audit?.Invoke(AuditEvent.Resurrection, node); + node.IsResurrected = true; + } + yield return node; + } + } + + public void Reseed(IEnumerable nodes) { } + + void IDisposable.Dispose() => this.DisposeManagedResources(); + + protected virtual void DisposeManagedResources() { } + } +} diff --git a/src/Elasticsearch.Net/project.lock.json b/src/Elasticsearch.Net/project.lock.json index 12c034d90a3..e07c61c3abc 100644 --- a/src/Elasticsearch.Net/project.lock.json +++ b/src/Elasticsearch.Net/project.lock.json @@ -2025,7 +2025,7 @@ "System.Dynamic.Runtime/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "ypkxS0e+yUw7F6JEwuB22u0qqruMeZFOmtcImh2efDHpTAuhF2FOqCDJ7f4qLf9yomVvB4kjkZ6xGunbIQryxQ==", + "sha512": "C2GXB20I5vMcO4wemZr5pEjwwEb6H6zVkwF12JSUhripKBIKgI0YKpfp9glyDSL903cYgIXAztMQDajwCR0PmA==", "files": [ "lib/DNXCore50/System.Dynamic.Runtime.dll", "lib/MonoAndroid10/_._", diff --git a/src/Nest/project.lock.json b/src/Nest/project.lock.json index 2011aaff951..96ebf085d08 100644 --- a/src/Nest/project.lock.json +++ b/src/Nest/project.lock.json @@ -2037,7 +2037,7 @@ "runtime.any.System.Linq.Expressions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "4sPxQCjllMJ1uZNlwz/EataPyHSH+AqSDlOIPPqcy/88R2B+abfhPPC78rd7gvHp8KmMX4qbJF6lcCeDIQpmVg==", + "sha512": "P5nzo1Ye0GxB4BYdWian6Y427eTrhn1JS3jLWZq5bMWVn8hS/OIfyylASN0A/qqeLn4rGA0fOzmJSYqFSKvxgQ==", "files": [ "lib/DNXCore50/System.Linq.Expressions.dll", "lib/MonoAndroid10/_._", @@ -2345,7 +2345,7 @@ "System.Dynamic.Runtime/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "ypkxS0e+yUw7F6JEwuB22u0qqruMeZFOmtcImh2efDHpTAuhF2FOqCDJ7f4qLf9yomVvB4kjkZ6xGunbIQryxQ==", + "sha512": "C2GXB20I5vMcO4wemZr5pEjwwEb6H6zVkwF12JSUhripKBIKgI0YKpfp9glyDSL903cYgIXAztMQDajwCR0PmA==", "files": [ "lib/DNXCore50/System.Dynamic.Runtime.dll", "lib/MonoAndroid10/_._", @@ -2599,7 +2599,7 @@ "System.Linq.Expressions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "YEl5oyF5fifLbHHP099cvb/6f2r2h1QVHzoaoINPHOZtpNec+RfqvzETXcYDIdHT7l+bBAYsBuVUkBgfQEoYfQ==", + "sha512": "FtKytB13HabzrSvrAgBgOOnG2uxJO4s7zvP5Sk0NS3bwbJUyb5AP1p4897UWnLiB6C95jI4nIkZps51sa9In8g==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", diff --git a/src/Tests/ClientConcepts/ConnectionPooling/Sticky/SkipDeadNodes.doc.cs b/src/Tests/ClientConcepts/ConnectionPooling/Sticky/SkipDeadNodes.doc.cs new file mode 100644 index 00000000000..85570af1d4b --- /dev/null +++ b/src/Tests/ClientConcepts/ConnectionPooling/Sticky/SkipDeadNodes.doc.cs @@ -0,0 +1,237 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Threading.Tasks; +using Elasticsearch.Net; +using FluentAssertions; +using Tests.Framework; +using static Tests.Framework.TimesHelper; +using static Elasticsearch.Net.AuditEvent; + +namespace Tests.ClientConcepts.ConnectionPooling.Sticky +{ + public class SkipDeadNodes + { + /** Sticky - Skipping Dead Nodes + * When selecting nodes the connection pool will try and skip all the nodes that are marked dead. + */ + + protected int NumberOfNodes = 3; + + [U] public void EachViewDoesNotSkip() + { + var seeds = Enumerable.Range(9200, NumberOfNodes).Select(p => new Node(new Uri("http://localhost:" + p))).ToList(); + var pool = new StickyConnectionPool(seeds); + for (var i = 0; i < 20; i++) + { + var node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9200); + node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9200); + node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9200); + } + } + + [U] public void EachViewSeesNextButSkipsTheDeadNode() + { + var seeds = Enumerable.Range(9200, NumberOfNodes).Select(p => new Node(new Uri("http://localhost:" + p))).ToList(); + seeds.First().MarkDead(DateTime.Now.AddDays(1)); + var pool = new StickyConnectionPool(seeds); + for (var i = 0; i < 20; i++) + { + var node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9201); + node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9201); + } + /** After we marke the first node alive again we expect it to be hit again*/ + seeds.First().MarkAlive(); + for (var i = 0; i < 20; i++) + { + var node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9200); + node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9200); + node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9200); + } + } + + [U] public void ViewSeesResurrectedNodes() + { + var dateTimeProvider = new TestableDateTimeProvider(); + var seeds = Enumerable.Range(9200, NumberOfNodes).Select(p => new Node(new Uri("http://localhost:" + p))).ToList(); + seeds.First().MarkDead(dateTimeProvider.Now().AddDays(1)); + var pool = new StickyConnectionPool(seeds, dateTimeProvider: dateTimeProvider); + for (var i = 0; i < 20; i++) + { + var node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9201); + node = pool.CreateView().First(); + node.Uri.Port.Should().Be(9201); + } + /** If we forward our clock 2 days the node that was marked dead until tomorrow (or yesterday!) should be resurrected */ + dateTimeProvider.ChangeTime(d => d.AddDays(2)); + var n = pool.CreateView().First(); + n.Uri.Port.Should().Be(9200); + n = pool.CreateView().First(); + n.Uri.Port.Should().Be(9200); + n = pool.CreateView().First(); + n.Uri.Port.Should().Be(9200); + n.IsResurrected.Should().BeTrue(); + } + + [U, SuppressMessage("AsyncUsage", "AsyncFixer001:Unnecessary async/await usage", Justification = "Its a test")] + public async Task FallsOverDeadNodes() + { + /** A cluster with 2 nodes where the second node fails on ping */ + var audit = new Auditor(() => Framework.Cluster + .Nodes(4) + .ClientCalls(p => p.Succeeds(Always)) + .ClientCalls(p => p.OnPort(9200).FailAlways()) + .ClientCalls(p => p.OnPort(9201).FailAlways()) + .StickyConnectionPool() + .Settings(p => p.DisablePing()) + ); + + await audit.TraceCalls( + /** The first call goes to 9200 which succeeds */ + new ClientCall { + { BadResponse, 9200}, + { BadResponse, 9201}, + { HealthyResponse, 9202}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(2) } + }, + /** The 2nd call does a ping on 9201 because its used for the first time. + * It fails so we wrap over to node 9202 */ + new ClientCall { + { HealthyResponse, 9202}, + /** Finally we assert that the connectionpool has one node that is marked as dead */ + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(2) } + }, + new ClientCall { + { HealthyResponse, 9202}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(2) } + } + ); + } + + [U(Skip = "Not sure how to trace this chain"), SuppressMessage("AsyncUsage", "AsyncFixer001:Unnecessary async/await usage", Justification = "Its a test")] + public async Task FallsOverDeadNodesWithRecoverResetToPrimary() + { + /** A cluster with 2 nodes where the second node fails on ping */ + var audit = new Auditor(() => Framework.Cluster + .Nodes(3) + .ClientCalls(p => p.OnPort(9200).Fails(Twice)) + .ClientCalls(p => p.OnPort(9200).Succeeds(Once)) + .ClientCalls(p => p.OnPort(9201).Succeeds(Once)) + .ClientCalls(p => p.OnPort(9201).Fails(Once)) + .ClientCalls(p => p.OnPort(9202).FailAlways()) + .StickyConnectionPool() + .Settings(p => p.DisablePing()) + ); + + await audit.TraceCalls( + /** The first call goes to 9200 which fails, so we wrap to 9201 */ + new ClientCall { + { BadResponse, 9200}, + { HealthyResponse, 9201}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(1) } + }, + /** The 2nd call does a ping on 9201 which is healthy */ + new ClientCall { + { HealthyResponse, 9201}, + /** Finally we assert that the connectionpool has one node that is marked as dead */ + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(1) } + }, + /** The 3rd call does a ping on 9201 which fails, then 9202 and 9203 as all fail */ + new ClientCall { + { BadResponse, 9201}, + { BadResponse, 9202}, + { MaxRetriesReached }, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(4) } + }, + /** Try to resurrect first node 9200, which fails */ + new ClientCall { + { AllNodesDead }, + { Resurrection, 9200}, + { BadResponse, 9200}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(4) } + }, + /** Try to ressurect second node 9201 which succeeds */ + new ClientCall { + { AllNodesDead }, + { Resurrection, 9201}, + { HealthyResponse, 9201}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(3) } + }, + /** The ping on 9201 which returns a bad response leaving all nodes dead */ + new ClientCall { + { BadResponse, 9201}, + { MaxRetriesReached }, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(4) } + }, + /** Try ressurect from 9201 again which succeeded */ + new ClientCall { + { AllNodesDead }, + { Resurrection, 9200}, + { HealthyResponse, 9200}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(3) } + } + ); + } + + [U, SuppressMessage("AsyncUsage", "AsyncFixer001:Unnecessary async/await usage", Justification = "Its a test")] + public async Task PicksADifferentNodeEachTimeAnodeIsDown() + { + /** A cluster with 2 nodes where the second node fails on ping */ + var audit = new Auditor(() => Framework.Cluster + .Nodes(4) + .ClientCalls(p => p.Fails(Always)) + .StickyConnectionPool() + .Settings(p => p.DisablePing()) + ); + + await audit.TraceCalls( + /** All the calls fail */ + new ClientCall { + { BadResponse, 9200}, + { BadResponse, 9201}, + { BadResponse, 9202}, + { BadResponse, 9203}, + { MaxRetriesReached }, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(4) } + }, + /** After all our registered nodes are marked dead we want to sample a single dead node + * each time to quickly see if the cluster is back up. We do not want to retry all 4 + * nodes + */ + new ClientCall { + { AllNodesDead }, + { Resurrection, 9200}, + { BadResponse, 9200}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(4) } + }, + new ClientCall { + { AllNodesDead }, + { Resurrection, 9201}, + { BadResponse, 9201}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(4) } + }, + new ClientCall { + { AllNodesDead }, + { Resurrection, 9202}, + { BadResponse, 9202}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(4) } + }, + new ClientCall { + { AllNodesDead }, + { Resurrection, 9203}, + { BadResponse, 9203}, + { pool => pool.Nodes.Where(n=>!n.IsAlive).Should().HaveCount(4) } + } + ); + } + } +} diff --git a/src/Tests/ClientConcepts/ConnectionPooling/Sticky/Sticky.doc.cs b/src/Tests/ClientConcepts/ConnectionPooling/Sticky/Sticky.doc.cs new file mode 100644 index 00000000000..2e734343c0a --- /dev/null +++ b/src/Tests/ClientConcepts/ConnectionPooling/Sticky/Sticky.doc.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using Elasticsearch.Net; +using FluentAssertions; +using Tests.Framework; + +namespace Tests.ClientConcepts.ConnectionPooling.Sticky +{ + public class Sticky + { + /** Sticky + * Each connection pool returns the first `live` node so that it is sticky between requests + */ + + protected int NumberOfNodes = 10; + + [U] public void EachViewStartsAtNextPositionAndWrapsOver() + { + var uris = Enumerable.Range(9200, NumberOfNodes).Select(p => new Uri("http://localhost:" + p)); + var staticPool = new StickyConnectionPool(uris); + + this.AssertCreateView(staticPool); + } + + public void AssertCreateView(StickyConnectionPool pool) + { + /** + * Here we have setup a static connection pool seeded with 10 nodes. + * So what order we expect? Imagine the following: + * + * Thread A calls GetNext and gets returned the first live node + * Thread B calls GetNext() and gets returned the same node as it's still the first live. + */ + + var startingPositions = Enumerable.Range(0, NumberOfNodes) + .Select(i => pool.CreateView().First()) + .Select(n => n.Uri.Port) + .ToList(); + + var expectedOrder = Enumerable.Repeat(9200, NumberOfNodes); + startingPositions.Should().ContainInOrder(expectedOrder); + } + } +} diff --git a/src/Tests/Framework/VirtualClustering/VirtualCluster.cs b/src/Tests/Framework/VirtualClustering/VirtualCluster.cs index 08fd96c0014..228e124b728 100644 --- a/src/Tests/Framework/VirtualClustering/VirtualCluster.cs +++ b/src/Tests/Framework/VirtualClustering/VirtualCluster.cs @@ -78,6 +78,12 @@ public SealedVirtualCluster SniffingConnectionPool(Func, IEnumerable var nodes = seedNodesSelector?.Invoke(this._nodes) ?? this._nodes; return new SealedVirtualCluster(this, new SniffingConnectionPool(nodes, randomize: false, dateTimeProvider: this.DateTimeProvider), this.DateTimeProvider); } - } + + public SealedVirtualCluster StickyConnectionPool(Func, IEnumerable> seedNodesSelector = null) + { + var nodes = seedNodesSelector?.Invoke(this._nodes) ?? this._nodes; + return new SealedVirtualCluster(this, new StickyConnectionPool(nodes, dateTimeProvider: this.DateTimeProvider), this.DateTimeProvider); + } + } } \ No newline at end of file diff --git a/src/Tests/project.lock.json b/src/Tests/project.lock.json index cb383b55399..86fa81df548 100644 --- a/src/Tests/project.lock.json +++ b/src/Tests/project.lock.json @@ -6269,7 +6269,7 @@ "Microsoft.Win32.Registry/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "z54NYVj7y4jGC2EWn5QLqaokMOws5NAjZYbEgUDNCtJE5gkpRR1JnDWU1Kjuvu3mmro2K9/C1TposmHB8cAtmg==", + "sha512": "1UxMko0bXvk98vNVwbgHNZ+soSvK4LXy9nMUYW67MHdZXAfp0hbJIMj6MnRpMoKExZLCz6a7/0Kq112y+sbGxQ==", "files": [ "lib/DNXCore50/Microsoft.Win32.Registry.dll", "lib/net46/Microsoft.Win32.Registry.dll", @@ -6315,7 +6315,7 @@ "runtime.win7.System.Console/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "pfQrTtnYcWOtI3RrpqjAzwT3I55ivTVZFpbKYG59dYTTvaLFGbs2njc/mrXHij6GylyJ2YjekS/9r6I8X3LV1A==", + "sha512": "TJZhrw44Bf7sYqne+CX5II/PaNf5L7oKVfl0FLkr4pj76KS8hSsJzsKL0IvxC+bi4d51+wTbv91kF1kgPyHMVw==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Console.4.0.0-beta-23516.nupkg", @@ -6328,7 +6328,7 @@ "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "TxSgeP23B6bPfE0QFX8u4/1p1jP6Ugn993npTRf3e9F3y61BIQeCkt5Im0gGdjz0dxioHkuTr+C2m4ELsMos8Q==", + "sha512": "pQVXtEmY+07qltXqaKnRMPlnLZPnVzBcXYQyhELWKL8Gjz/2TEcuaV7Meypg2Q54T14635SkCYcV7IzeU+buXA==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Diagnostics.Debug.4.0.11-beta-23516.nupkg", @@ -6342,7 +6342,7 @@ "runtime.win7.System.Diagnostics.Process/4.1.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "qCCXX+OG6430kLtN/wyjeLTTiJvOIKB2G+qBvhSqVLWe5ZTiEiSnweKUzdi7raXL0te0WfPE5tf8FuKcEKPnIA==", + "sha512": "IDp4dljG6NkpMP9UzrtuvLZ0wfeOHphStOsVLmUTj2g3UH28L5Lo9481/fAXVPs2GEVMRwAvSwph90EcNfV/jQ==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Diagnostics.Process.4.1.0-beta-23516.nupkg", @@ -6359,7 +6359,7 @@ "runtime.win7.System.Diagnostics.TraceSource/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "hpD0T6zOEU/1qUSPitKSgIdsL4tZlZz7CUCu6PP7BYf8CM3vPkSEzN38kX6PnH8F6kvOqxEwzPYhZCK3PJkh/Q==", + "sha512": "6YSh7+vRI2ptFNPTWE100MNz0sRAVuBjwU0znK3kzd5GYQgLjvtWn8rT9DvJQA4R6OmC5Q+OgXzb/nibxcbtbA==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Diagnostics.TraceSource.4.0.0-beta-23516.nupkg", @@ -6376,7 +6376,7 @@ "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "UOHEVg3jQwsvy3b+8zhDk7BQ9GhHY1KcjHSuqArzIl7oemcM/+D7OfS5iOA96ydjEv9FmIKV3knkXMge+cUD0Q==", + "sha512": "PwsqcwAui7Ld6Ad32RjoHF3wBSEkEzvv5ka605IsaWxHSCfmmwevJnIbNgwJgBTao/uR+wSO9yoyvfrB109BfQ==", "files": [ "ref/dotnet/_._", "runtime.win7.System.IO.FileSystem.4.0.1-beta-23516.nupkg", @@ -6393,7 +6393,7 @@ "runtime.win7.System.Net.Primitives/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "V4bv5VTaBcy0FekQbKgJKP+c+RJhNxOacpngLGADf9kUqoNkSJLj083d4I0L5iTKMWALlAN/tfzAlRm0VxiDeA==", + "sha512": "WmcWc3b5xNFdik+yWrFPy/WWwsfNAdMebJNzVqbPd4OlVQ7TWhO7VR5TN2M+3Ji0OAV9scHZ6atCWyBycz6+nA==", "files": [ "lib/DNXCore50/System.Net.Primitives.dll", "ref/dotnet/_._", @@ -6419,7 +6419,7 @@ "runtime.win7.System.Net.Sockets/4.1.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "4FbyzvLhWFFv3OrgkPmd3cXoKUb+oB+rp51ke6nMqR+MjN3sWs/w3C0Jbx84UM6zg9a3JiD72ThjgDnet3QS3w==", + "sha512": "NRBFPlDd/ZdflYqJ++i3+jAxWHjLpCn6CUfJFBJXF1k0uZUCuTc13O+6Q4UhaPnWsQ+xlBk5TE8aFU7jRqR2QA==", "files": [ "lib/DNXCore50/System.Net.Sockets.dll", "lib/netcore50/System.Net.Sockets.dll", @@ -6433,7 +6433,7 @@ "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "Jm+LAzN7CZl1BZSxz4TsMBNy1rHNqyY/1+jxZf3BpF7vkPlWRXa/vSfY0lZJZdy4Doxa893bmcCf9pZNsJU16Q==", + "sha512": "V4HbLYv2m4LaL+Kl+x6wz8Xl9TyrHBpA/lYq+w6J35mYY9ACCVV+YkHRJdNuRd3Qe3DEz9X8D1S8uWnKMyHvvg==", "files": [ "lib/DNXCore50/System.Runtime.Extensions.dll", "lib/netcore50/System.Runtime.Extensions.dll", @@ -6447,7 +6447,7 @@ "runtime.win7.System.Security.Cryptography.Algorithms/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "MRAq2N94D6wKC5UFbUZVWcOz8YpknDj6ttOpF5R3sxBdZJWI6qUngnGdHE2eYAuCerHlLV/0m4WJxoSaQHDNTA==", + "sha512": "a6mTJ7ZxRoiKRoC0YdFRB3XgEUekqkvCet39yqzWdZukmZG2J/oXzHdynrDWiiT14KkZUajmQr9W4P9nWVjjhg==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Security.Cryptography.Algorithms.4.0.0-beta-23516.nupkg", @@ -6460,7 +6460,7 @@ "runtime.win7.System.Threading/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "paSNXQ5Y6Exu3OpekooyMJFQ8mitn69fGO5Br3XLIfQ1KiMYVmRf+o6dMprC0SpPROVCiCxdUaJx5XkDEVL3uA==", + "sha512": "kKQ9uUB1g3S9eyK5njdwh5LO0HxJ9CN6cF9dXtp7uzdZvh2UoTgAZ0Jf+/TvzWcUsfcKIPQUGPPLOBLaQpXASg==", "files": [ "ref/dotnet/_._", "runtime.win7.System.Threading.4.0.11-beta-23516.nupkg", @@ -6615,7 +6615,7 @@ "System.Collections.Concurrent/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "e4FscEk9ugPXPKEIQFYBS/i+0KAkKf/IEe26fiOnqk8JVZQuCLO3gJmJ+IiVD1TxJjvVmh+tayQuo2svVzZV7g==", + "sha512": "K+n6bC3jL5nRzwm8IM5WHxPScCnrVoPCJjpkBEmoBYY8/3j4RJdqIng/NYcpGcjvP/GIF6tAwZlh54ao2pWOvQ==", "files": [ "lib/dotnet5.4/System.Collections.Concurrent.dll", "lib/MonoAndroid10/_._", @@ -6743,7 +6743,7 @@ "System.ComponentModel/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "PdAC1M7yT9EBtLpXICbOtPDpDjYSlV2RXyQ7AiKyBD7mV1DNTIK7tcM1056GIOlMoJDDdxU5Z3otBeAM8v5PAg==", + "sha512": "PWlAKIWFtb0ahyK9mXkvW+8WzKfXd9n5NAtRDduoE2JETVZtWL2jUM08lVKWU+oZr3ZGBdRPPLVbUD/K9i4uzw==", "files": [ "lib/dotnet5.4/System.ComponentModel.dll", "lib/net45/_._", @@ -6865,7 +6865,7 @@ "System.Console/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "0YTzoNamTU+6qfZEYtMuGjtkJHB1MEDyFsZ5L/x97GkZO3Bw91uwdPh0DkFwQ6E8KaQTgZAecSXoboUHAcdSLA==", + "sha512": "tzF4Dbbv+5bcbQ7GHuuKafkaDZThiUiwxqCc1ngewnMWZ5YmIgjQZjs+E1DNhoMVAvkH0tSmLJvsDlx9dFg+Aw==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -6897,7 +6897,7 @@ "System.Diagnostics.Debug/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "wK52HdO2OW7P6hVk/Q9FCnKE9WcTDA3Yio1D8xmeE+6nfOqwWw6d+jVjgn5TSuDghudJK9xq77wseiGa6i7OTQ==", + "sha512": "eVfSsVOIlL2tZwA24PKduDIGrPXH1OdAnRPhU4q5nGA35kX+vnFtE+IyGfiyShwlC0ldnssmQRAm9mPKmgOpyA==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -7057,7 +7057,7 @@ "System.Diagnostics.TraceSource/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "OIWB5pvMqOdCraAtiJBhRahrsnP2sNaXbCZNdAadzwiPLzRI7EvLTc7/NlkFDxm3I6YKVGxnJ5aO+YJ/XPC8yw==", + "sha512": "gvJNxObthiaV07AKZYjQV69xRBKRR7gTpEVe4qXF4Mta/2zD7sI+Zm//rRCQenLYBuL8nBxVzomtYJ4eT7w8QQ==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -7123,7 +7123,7 @@ "System.Dynamic.Runtime/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "ypkxS0e+yUw7F6JEwuB22u0qqruMeZFOmtcImh2efDHpTAuhF2FOqCDJ7f4qLf9yomVvB4kjkZ6xGunbIQryxQ==", + "sha512": "C2GXB20I5vMcO4wemZr5pEjwwEb6H6zVkwF12JSUhripKBIKgI0YKpfp9glyDSL903cYgIXAztMQDajwCR0PmA==", "files": [ "lib/DNXCore50/System.Dynamic.Runtime.dll", "lib/MonoAndroid10/_._", @@ -7185,7 +7185,7 @@ "System.Globalization/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "htoF4cS3WhCkU3HloMj3mz+h2FHnF8Hz0po/26otT5e46LlJ8p7LpFpxckxVviyYg9Fab9gr8aIB0ZDN9Cjpig==", + "sha512": "jctanC1VveBFsgOysiqFN/HH0qX+EvLNelcBU6Fb4w7m3BBu827k8RCNiwW+uAC5f5XZBTRpsXZk4cI15RCdYQ==", "files": [ "lib/DNXCore50/System.Globalization.dll", "lib/MonoAndroid10/_._", @@ -7304,7 +7304,7 @@ "System.IO/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "dR1DaWrF0zsV2z/GVs8xVvMds6xu0ykuwv+VPou8wbpJ1XxGBK9g6v5F84DWL8Q1qi+6Kyb56wbZYdYQO8OMew==", + "sha512": "6nJmAk4vYjN+5/haenkKk/BDGCOKw5pk5EjXAOvBnUM5PFIfO8JwUxGbcveOD4vV5Vb6TAxrmRmts/7F+BEuEw==", "files": [ "lib/DNXCore50/System.IO.dll", "lib/MonoAndroid10/_._", @@ -7428,7 +7428,7 @@ "System.IO.FileSystem/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "KOYNQ6FeLQh0HdHVlp6IRjRGPCjyFvZRKfhYSDFi7DR0EHY3cC2rvfVj5HWJEW5KlSaa01Ct25m06yVnqSxwOQ==", + "sha512": "xggWMgLzKnBisYTx5HW3og8qRR7TjmorQAdsAQOaMcY4I9CQA6JUxw0r2AvCC1+ToXh0CuO7J6dymX33pkmwbA==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -7492,7 +7492,7 @@ "System.Linq/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "uNxm2RB+kMeiKnY26iPvOtJLzTzNaAF4A2qqyzev6j8x8w2Dr+gg7LF7BHCwC55N7OirhHrAWUb3C0n4oi9qYw==", + "sha512": "AJaoyeAHLpurbTWnmvOhK/QC2sswKJrIA5RlPea+UdfXpHOw3srPNEPpseZDMV/EviVqAwUfFNkc5QxpGZtsLA==", "files": [ "lib/dotnet5.4/System.Linq.dll", "lib/net45/_._", @@ -7534,7 +7534,7 @@ "System.Linq.Expressions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "YEl5oyF5fifLbHHP099cvb/6f2r2h1QVHzoaoINPHOZtpNec+RfqvzETXcYDIdHT7l+bBAYsBuVUkBgfQEoYfQ==", + "sha512": "FtKytB13HabzrSvrAgBgOOnG2uxJO4s7zvP5Sk0NS3bwbJUyb5AP1p4897UWnLiB6C95jI4nIkZps51sa9In8g==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -7647,7 +7647,7 @@ "System.Net.Primitives/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "lEMwORLJNk7tEAO+4RJ/aPjF2KlismwYxCYgqJZza3ArRznAqrzKeCpcnBlo3zJPHjR1tSNhRWk9SLRGGV2K3Q==", + "sha512": "e6bYgPSmo1n/+Ccef2OxFm5gyvhGvw/+Zvsh09iOfLNOutr/2ker4IsxC+3VMVDZc/3/glc4iOfuB5x59HzzHQ==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -7789,7 +7789,7 @@ "System.Net.Sockets/4.1.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "Q2D1ew24ZIH4kOE4ZJCrtvNfSSiea3yOeqow2jsgEPJ9Gafu8atlU5EGfXM0LQvtsIeQ9i1YwqdyZQHaL/RySg==", + "sha512": "hJQxXC5OcecCG49Wg9PreHFC2tDZFwpqiGhRnQMK47eo8ozvOMl2XqISanclj1cjCIUZDUSn0XxggVC7Z2WppA==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -7896,7 +7896,7 @@ "System.Private.Networking/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "YjBc3HcJBVtoeFNe9cY33dyTGME2T7B5mwuh/wBpxuGuvBMBWqrRKWkSOmnUT7ON7/U2SkpVeM5FCeqE3QRMNw==", + "sha512": "x1STivE/maJG95AY82H5A7K5LbEOj4hzjGEGt2p1oEM4NIG0HBqXFauWHRRRQDZI0851wjBwgxHNid/56hHOhg==", "files": [ "lib/DNXCore50/System.Private.Networking.dll", "lib/netcore50/System.Private.Networking.dll", @@ -8029,7 +8029,7 @@ "System.Reflection.Extensions/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "CiaYbkU2dzOSTSB7X/xLvlae3rop8xz62XjflUSnyCaRPB5XaQR4JasHW07/lRKJowt67Km7K1LMpYEmoRku8w==", + "sha512": "Ph0ELqqqz218bGEtnfQ1xegANVQ3v0S/hU12AHpb4HEw8SESssbNCKWEVjeI3y2xDYaVx1aVjM4hZ1QXa4IonQ==", "files": [ "lib/DNXCore50/System.Reflection.Extensions.dll", "lib/net45/_._", @@ -8194,7 +8194,7 @@ "System.Resources.ResourceManager/4.0.1-beta-23516": { "type": "package", "serviceable": true, - "sha512": "d1PiB1k57GP5EJZJKnJ+LgrOQCgHPnn5oySQAy4pL2MpEDDpTyTPKv+q9aRWUA25ICXaHkWJzeTkj898ePteWQ==", + "sha512": "KLzhgVk6aZDbU3jU+zGN3gGIU6hlhPyA8hwGqB1FmJRs/lJl7o9td34+5xm3Mk1va5vHEO8+cRj7te9WdNalHQ==", "files": [ "lib/DNXCore50/System.Resources.ResourceManager.dll", "lib/net45/_._", @@ -8261,7 +8261,7 @@ "System.Runtime.Extensions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "HX4wNPrcCV9D+jpbsJCRPuVJbcDM+JobSotQWKq40lCq0WJbJi+0lNQ/T1zHEdWcf4W2PmtMkug1rW7yKW9PiQ==", + "sha512": "mpKQVIySlFSvgQkeb9qvXxHOY3jV7H9x5DmPSeNac0APFOG9ROufrMozY3VP/GxBWu4AVS/HDG1lUxg/riE4ew==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -8355,7 +8355,7 @@ "System.Runtime.InteropServices/4.0.21-beta-23516": { "type": "package", "serviceable": true, - "sha512": "XRWX4yFPKQ3t3hbPReLB9d2ViTuGqMLYHGcuWteIYgoIaKtHp7Uae2xHjiUG/QZbVN6vUp+KnL04aIi5dOj8lQ==", + "sha512": "3QodORMX/J/HMQgeBf62yYLESn4g+Gl9XGKEoFNCHGUb03yWqpSVPOD0gSksyb661kRdxR5K4/7I9xjz/GxkRg==", "files": [ "lib/DNXCore50/System.Runtime.InteropServices.dll", "lib/MonoAndroid10/_._", @@ -8481,7 +8481,7 @@ "System.Security.Cryptography.Algorithms/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "yvMpzC6Cd/UBHB3LU4z4jorW8nuitQfG171R8INxoUtNTZPBUmVhW4MW4adQYmwZ9IJ5C5rxnXKNfsvF5g9eog==", + "sha512": "h0t6XvR47THFihonJfk2aC3m2YQ94hzF0bFBE9Zgs4td+G+NgIuRmIdGQMFKv3sH7jX5ItOLq/K7uX9M6dvlgQ==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -8547,7 +8547,7 @@ "System.Security.Cryptography.Primitives/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "YEHmq6x6u2grEuZFAX9au+6uY8SCIkA6lu4wbrt2C71RFQKWEyO5G9+pk1v0QcNPqay/38aSm9v/BoTFNQii1Q==", + "sha512": "ztiLIQf2hl0ljLzaUeCx5tk+TU8TrHwrEatuKgSl2KoZXxeOCeXnB+oE07xQO7RnnMlPLtX7/ucHQtteh9du7A==", "files": [ "lib/dotnet5.4/System.Security.Cryptography.Primitives.dll", "lib/MonoAndroid10/_._", @@ -8624,7 +8624,7 @@ "System.Text.Encoding/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "gk4da/Y3VReZpIeQ3UDTCknbkO/FuYKOJtP+5+Vtc07mTcPHvhgbZLXEGTTneP6yWPDWTTh20nZZMF/19YsRtA==", + "sha512": "OnM2cqPXeOKF8cwgIAygYeCSKsJL7gjBDi3tI8lEaJSdnt4nM3/k4i1+p73oXn8a8tEcFRNvrvNuqsdqxYixXQ==", "files": [ "lib/DNXCore50/System.Text.Encoding.dll", "lib/MonoAndroid10/_._", @@ -8719,7 +8719,7 @@ "System.Text.RegularExpressions/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "Iz3942FXA47VxsuJTBq4aA/gevsbdMhyUnQD6Y0aHt57oP6KAwZLaxVtrRzB03yxh6oGBlvQfxBlsXWnLLj4gg==", + "sha512": "ZtarWBvDF7R6pRqo1jxo+uV46Rzxht8rRTe+qSHrr6SLLiZRL4RMncU+mDEn81wF+WL+v81ug20lnssHNHlV+Q==", "files": [ "lib/dotnet5.4/System.Text.RegularExpressions.dll", "lib/MonoAndroid10/_._", @@ -8780,7 +8780,7 @@ "System.Threading/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "AiuvOzOo6CZpIIw3yGJZcs3IhiCZcy0P/ThubazmWExERHJZoOnD/jB+Bn2gxTAD0rc/ytrRdBur9PuX6DvvvA==", + "sha512": "vZNXMOIwejg9jS/AkkCs43BIDrzONbT43yhU7X2217Ypi9EZN5X16DwtqBD7eMjDBsA23IRZxuugzUnV8icaxQ==", "files": [ "lib/MonoAndroid10/_._", "lib/MonoTouch10/_._", @@ -8865,7 +8865,7 @@ "System.Threading.Tasks/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "xjN0l+GsHEdV3G2lKF7DnH7kEM2OXoWq56jcvByNaiirrs1om5RyI6gwX7F4rTbkf8eZk1pjg01l4CI3nLyTKg==", + "sha512": "kO+GZsJrZO+G7DA4xSuDZXaE1haJWia6TdzMt3xt9oTgh5GQ4bwI6UqBUVKhdTKxC3TI+snsbHXPy2+Qmd6i0g==", "files": [ "lib/DNXCore50/System.Threading.Tasks.dll", "lib/MonoAndroid10/_._", @@ -8927,7 +8927,7 @@ "System.Threading.Thread/4.0.0-beta-23516": { "type": "package", "serviceable": true, - "sha512": "2a5k/EmBXNiIoQZ8hk32KjoCVs1E5OdQtqJCHcW4qThmk+m/siQgB7zYamlRBeQ5zJs7c1l4oN/y5+YRq8oQ2Q==", + "sha512": "/yo7KuZ9zLrB3hdWARrvus3YTAdvvuqHWf2oMNpyG1mpoVlmhRwkZ9JqYRC+TL3hSFHa7mvHa8EItA+BBahlsA==", "files": [ "lib/DNXCore50/System.Threading.Thread.dll", "lib/MonoAndroid10/_._", @@ -8959,7 +8959,7 @@ "System.Threading.ThreadPool/4.0.10-beta-23516": { "type": "package", "serviceable": true, - "sha512": "xDTdxmxDAfIMrbANWXQih80yOTbyXhU5z/2P15n3EuyJOetqKKVWEXouoD8bV25RzJHuB2rHMTZhUmbtLmEpwA==", + "sha512": "s7KzGX8skWrj2raEEWt/qbMUPZJuHlwW6XP1fC4yltuX+6FqPA/D5fag8Q0/TsbcCcC8Q50+fULuHjlCNeblow==", "files": [ "lib/DNXCore50/System.Threading.ThreadPool.dll", "lib/MonoAndroid10/_._", @@ -9054,7 +9054,7 @@ "System.Xml.XDocument/4.0.11-beta-23516": { "type": "package", "serviceable": true, - "sha512": "sVbIsIQ8c3UnhnV9a8/J1boDVLpfqVsolNJ/nIvrU4g3TE0RpC2yFkivPmXYpwllsa1b6ajxZcZ+ItMhhXy8vA==", + "sha512": "1WwmI3yKK0f65rpVlP0f43LGu8aQ4mhdvkoJ9EjdL38jQuKKdTa5WIm4LlHiM9IM8BRTcwSY1yr6ardFqGGJGQ==", "files": [ "lib/dotnet5.4/System.Xml.XDocument.dll", "lib/MonoAndroid10/_._",