From b2685719070983f1ec6c28cab2b8df779eb61497 Mon Sep 17 00:00:00 2001 From: Eauldane Date: Fri, 24 Oct 2025 03:04:11 +0100 Subject: [PATCH] Syncshell and user ID colours --- MareAPI/MareSynchronosAPI/Data/GroupData.cs | 6 +- MareAPI/MareSynchronosAPI/Data/UserData.cs | 4 +- MareSynchronos/MareSynchronos.csproj | 13 +- MareSynchronos/PlayerData/Pairs/Pair.cs | 3 + MareSynchronos/UI/CompactUI.cs | 12 +- MareSynchronos/UI/Components/GroupPanel.cs | 2 +- .../UI/Handlers/UidDisplayHandler.cs | 7 +- .../WebAPI/SignalR/ApiController.cs | 2 + MareSynchronos/packages.lock.json | 410 +++++++++--------- SnowcloakSync/Utils/Colours.cs | 21 +- 10 files changed, 260 insertions(+), 220 deletions(-) diff --git a/MareAPI/MareSynchronosAPI/Data/GroupData.cs b/MareAPI/MareSynchronosAPI/Data/GroupData.cs index 877bb44..a2a6607 100644 --- a/MareAPI/MareSynchronosAPI/Data/GroupData.cs +++ b/MareAPI/MareSynchronosAPI/Data/GroupData.cs @@ -3,8 +3,10 @@ namespace MareSynchronos.API.Data; [MessagePackObject(keyAsPropertyName: true)] -public record GroupData(string GID, string? Alias = null) +public record GroupData(string GID, string? Alias = null, string? HexString = null) { [IgnoreMember] public string AliasOrGID => string.IsNullOrWhiteSpace(Alias) ? GID : Alias; -} + [IgnoreMember] + public string? DisplayColour => string.IsNullOrWhiteSpace(HexString) ? null : HexString; +} \ No newline at end of file diff --git a/MareAPI/MareSynchronosAPI/Data/UserData.cs b/MareAPI/MareSynchronosAPI/Data/UserData.cs index 3bc74cf..1452c7d 100644 --- a/MareAPI/MareSynchronosAPI/Data/UserData.cs +++ b/MareAPI/MareSynchronosAPI/Data/UserData.cs @@ -3,8 +3,10 @@ namespace MareSynchronos.API.Data; [MessagePackObject(keyAsPropertyName: true)] -public record UserData(string UID, string? Alias = null) +public record UserData(string UID, string? Alias = null, string? HexString = null) { [IgnoreMember] public string AliasOrUID => string.IsNullOrWhiteSpace(Alias) ? UID : Alias; + [IgnoreMember] + public string? DisplayColour => string.IsNullOrWhiteSpace(HexString) ? null : HexString; } \ No newline at end of file diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index c3a3efb..a396dd2 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -15,18 +15,18 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + all @@ -34,7 +34,8 @@ - + + diff --git a/MareSynchronos/PlayerData/Pairs/Pair.cs b/MareSynchronos/PlayerData/Pairs/Pair.cs index 33ad18a..4051488 100644 --- a/MareSynchronos/PlayerData/Pairs/Pair.cs +++ b/MareSynchronos/PlayerData/Pairs/Pair.cs @@ -15,6 +15,7 @@ using MareSynchronos.Services.ServerConfiguration; using MareSynchronos.Utils; using Microsoft.Extensions.Logging; using System.Collections.Concurrent; +using System.Numerics; namespace MareSynchronos.PlayerData.Pairs; @@ -27,6 +28,7 @@ public class Pair : DisposableMediatorSubscriberBase private readonly ServerConfigurationManager _serverConfigurationManager; private CancellationTokenSource _applicationCts = new(); private OnlineUserIdentDto? _onlineUserIdentDto = null; + public Vector4 PairColour; public Pair(ILogger logger, UserData userData, PairHandlerFactory cachedPlayerFactory, MareMediator mediator, MareConfigService mareConfig, ServerConfigurationManager serverConfigurationManager) @@ -38,6 +40,7 @@ public class Pair : DisposableMediatorSubscriberBase _serverConfigurationManager = serverConfigurationManager; UserData = userData; + PairColour = SnowcloakSync.Utils.Colours.Hex2Vector4(UserData.DisplayColour); Mediator.SubscribeKeyed(this, UserData.UID, (msg) => HoldApplication(msg.Source)); Mediator.SubscribeKeyed(this, UserData.UID, (msg) => UnholdApplication(msg.Source)); diff --git a/MareSynchronos/UI/CompactUI.cs b/MareSynchronos/UI/CompactUI.cs index cc95edc..98e4273 100644 --- a/MareSynchronos/UI/CompactUI.cs +++ b/MareSynchronos/UI/CompactUI.cs @@ -697,11 +697,21 @@ public class CompactUi : WindowMediatorSubscriberBase private Vector4 GetUidColor() { + var uidCol = _apiController.DisplayColour; + Vector4 uidColour; + if (uidCol.IsNullOrEmpty()) + { + uidColour = UiSharedService.AccentColor; + } else + { + uidColour = SnowcloakSync.Utils.Colours.Hex2Vector4(uidCol); + } return _apiController.ServerState switch { + ServerState.Connecting => ImGuiColors.DalamudYellow, ServerState.Reconnecting => ImGuiColors.DalamudRed, - ServerState.Connected => UiSharedService.AccentColor, + ServerState.Connected => uidColour, ServerState.Disconnected => ImGuiColors.DalamudYellow, ServerState.Disconnecting => ImGuiColors.DalamudYellow, ServerState.Unauthorized => ImGuiColors.DalamudRed, diff --git a/MareSynchronos/UI/Components/GroupPanel.cs b/MareSynchronos/UI/Components/GroupPanel.cs index fea6124..4039284 100644 --- a/MareSynchronos/UI/Components/GroupPanel.cs +++ b/MareSynchronos/UI/Components/GroupPanel.cs @@ -250,7 +250,7 @@ internal sealed class GroupPanel } if (textIsGid) ImGui.PushFont(UiBuilder.MonoFont); ImGui.SameLine(); - ImGui.TextUnformatted(groupName); + ImGui.TextColored(SnowcloakSync.Utils.Colours.Hex2Vector4(groupDto.Group.DisplayColour), groupName); if (textIsGid) ImGui.PopFont(); UiSharedService.AttachToolTip("Left click to switch between GID display and comment" + Environment.NewLine + "Right click to change comment for " + groupName + Environment.NewLine + Environment.NewLine diff --git a/MareSynchronos/UI/Handlers/UidDisplayHandler.cs b/MareSynchronos/UI/Handlers/UidDisplayHandler.cs index e4e506e..5aa885a 100644 --- a/MareSynchronos/UI/Handlers/UidDisplayHandler.cs +++ b/MareSynchronos/UI/Handlers/UidDisplayHandler.cs @@ -1,11 +1,13 @@ using Dalamud.Bindings.ImGui; using Dalamud.Interface; using Dalamud.Interface.Utility.Raii; +using Lumina.Data.Parsing; using MareSynchronos.MareConfiguration; using MareSynchronos.PlayerData.Pairs; using MareSynchronos.Services.Mediator; using MareSynchronos.Services.ServerConfiguration; using MareSynchronos.UI.Components; +using System.Numerics; namespace MareSynchronos.UI.Handlers; @@ -63,9 +65,8 @@ public class UidDisplayHandler if (!string.Equals(_editNickEntry, pair.UserData.UID, StringComparison.Ordinal)) { ImGui.SetCursorPosY(originalY); - - using (ImRaii.PushFont(UiBuilder.MonoFont, textIsUid)) ImGui.TextUnformatted(playerText); - + Vector4 pairColour = SnowcloakSync.Utils.Colours.Hex2Vector4(pair.UserData.DisplayColour); + using (ImRaii.PushFont(UiBuilder.MonoFont, textIsUid)) ImGui.TextColored(pairColour, playerText); if (ImGui.IsItemHovered()) { if (!string.Equals(_lastMouseOverUid, id)) diff --git a/MareSynchronos/WebAPI/SignalR/ApiController.cs b/MareSynchronos/WebAPI/SignalR/ApiController.cs index 0e46e98..c64ddf4 100644 --- a/MareSynchronos/WebAPI/SignalR/ApiController.cs +++ b/MareSynchronos/WebAPI/SignalR/ApiController.cs @@ -73,6 +73,8 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM public Version CurrentClientVersion => _connectionDto?.CurrentClientVersion ?? new Version(0, 0, 0); public string DisplayName => _connectionDto?.User.AliasOrUID ?? string.Empty; + public string DisplayColour => _connectionDto?.User.DisplayColour ?? string.Empty; + public bool IsConnected => ServerState == ServerState.Connected; diff --git a/MareSynchronos/packages.lock.json b/MareSynchronos/packages.lock.json index 021b5ab..ad6a8b3 100644 --- a/MareSynchronos/packages.lock.json +++ b/MareSynchronos/packages.lock.json @@ -16,9 +16,9 @@ }, "DotNet.ReproducibleBuilds": { "type": "Direct", - "requested": "[1.2.25, )", - "resolved": "1.2.25", - "contentHash": "xCXiw7BCxHJ8pF6wPepRUddlh2dlQlbr81gXA72hdk4FLHkKXas7EH/n+fk5UCA/YfMqG1Z6XaPiUjDbUNBUzg==" + "requested": "[1.2.39, )", + "resolved": "1.2.39", + "contentHash": "fcFN01tDTIQqDuTwr1jUQK/geofiwjG5DycJQOnC72i1SsLAk1ELe+apBOuZ11UMQG8YKFZG1FgvjZPbqHyatg==" }, "Downloader": { "type": "Direct", @@ -31,9 +31,9 @@ }, "Glamourer.Api": { "type": "Direct", - "requested": "[2.6.0, )", - "resolved": "2.6.0", - "contentHash": "zysCZgNBRm3k3qvibyw/31MmEckX0Uh0ZsT+Sax3ZHnYIRELr9Qhbz3cjJz7u0RHGIrNJiRpktu/LxgHEqDItw==" + "requested": "[2.7.0, )", + "resolved": "2.7.0", + "contentHash": "H4yRNEhdSQ+YkZlnE7qRM67GaNieb9Xe9Vpj3rvHvcSB0eWgMF1nHqCvkBNb4L38AV4WyWTzwtXh6+Rv5GuVTw==" }, "K4os.Compression.LZ4.Legacy": { "type": "Direct", @@ -74,58 +74,58 @@ }, "Meziantou.Analyzer": { "type": "Direct", - "requested": "[2.0.219, )", - "resolved": "2.0.219", - "contentHash": "vknqxTO59DkRmsuyA3GoQ8zLODHTVrt2enVozcRLY22D3LRJm3qRNYIkpFl1lfejOsahrMwObtYzKLmWf7/XTQ==" + "requested": "[2.0.231, )", + "resolved": "2.0.231", + "contentHash": "h5FQkDk22R291JofPXFDxrgNyk1RGCqeIQKcrCRXYz+p5v2Ade2C9PpRiatasVqSDPyFk2q/B5AflWM2a9TVwQ==" }, "Microsoft.AspNetCore.SignalR.Client": { "type": "Direct", - "requested": "[9.0.9, )", - "resolved": "9.0.9", - "contentHash": "xx1VCb/cxdOgKg+dQuTpZ3xR2/qpKvwD4iLIjFD+gDgsanVFtm/hEyfRg2nUUqF0UD9kyW0YUz2dsEL3GKjCGg==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "TQDXsU5mTtI1el77bS55FoNYi1CPIuPoKUDp6W/j22FA/ajHMjgmeikC87UPiZkdiJDjNyCehj91YMGNi3xCDg==", "dependencies": { - "Microsoft.AspNetCore.Http.Connections.Client": "9.0.9", - "Microsoft.AspNetCore.SignalR.Client.Core": "9.0.9" + "Microsoft.AspNetCore.Http.Connections.Client": "9.0.10", + "Microsoft.AspNetCore.SignalR.Client.Core": "9.0.10" } }, "Microsoft.AspNetCore.SignalR.Protocols.MessagePack": { "type": "Direct", - "requested": "[9.0.9, )", - "resolved": "9.0.9", - "contentHash": "OgsyQ8NgbWvkMV+Gqr0gVhOXw2AQuIZk/wN2KdnIyzj4I7qImHLPzGh31gc2Hns8T3n0UaJgBayFWLOOHV81mg==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "VXD6Blc5YIqi/ZwJhkaD7wWIdcq2mIe2vuj9aqbQPVLlAKU/t/l/zf4ZqXAacyUMRTPGuHXQJzsRWQ6bytVQFQ==", "dependencies": { "MessagePack": "2.5.187", - "Microsoft.AspNetCore.SignalR.Common": "9.0.9" + "Microsoft.AspNetCore.SignalR.Common": "9.0.10" } }, "Microsoft.Extensions.Hosting": { "type": "Direct", - "requested": "[9.0.9, )", - "resolved": "9.0.9", - "contentHash": "DmRsWH3g8yZGho/pLQ79hxhM2ctE1eDTZ/HbAnrD/uw8m+P2pRRJOoBVxlrhbhMP3/y3oAJoy0yITasfmilbTg==", + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "63yDlitelCBNl1unJsnEWVUCZHOtxbVTbTODi7cszQJBG9bIfdPYIpB9w0UIcoqVSP1C9P6THXgukx8APWRzMw==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.9", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", - "Microsoft.Extensions.Configuration.Binder": "9.0.9", - "Microsoft.Extensions.Configuration.CommandLine": "9.0.9", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.9", - "Microsoft.Extensions.Configuration.FileExtensions": "9.0.9", - "Microsoft.Extensions.Configuration.Json": "9.0.9", - "Microsoft.Extensions.Configuration.UserSecrets": "9.0.9", - "Microsoft.Extensions.DependencyInjection": "9.0.9", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Diagnostics": "9.0.9", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", - "Microsoft.Extensions.FileProviders.Physical": "9.0.9", - "Microsoft.Extensions.Hosting.Abstractions": "9.0.9", - "Microsoft.Extensions.Logging": "9.0.9", - "Microsoft.Extensions.Logging.Abstractions": "9.0.9", - "Microsoft.Extensions.Logging.Configuration": "9.0.9", - "Microsoft.Extensions.Logging.Console": "9.0.9", - "Microsoft.Extensions.Logging.Debug": "9.0.9", - "Microsoft.Extensions.Logging.EventLog": "9.0.9", - "Microsoft.Extensions.Logging.EventSource": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9" + "Microsoft.Extensions.Configuration": "9.0.10", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10", + "Microsoft.Extensions.Configuration.Binder": "9.0.10", + "Microsoft.Extensions.Configuration.CommandLine": "9.0.10", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.10", + "Microsoft.Extensions.Configuration.FileExtensions": "9.0.10", + "Microsoft.Extensions.Configuration.Json": "9.0.10", + "Microsoft.Extensions.Configuration.UserSecrets": "9.0.10", + "Microsoft.Extensions.DependencyInjection": "9.0.10", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Diagnostics": "9.0.10", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.10", + "Microsoft.Extensions.FileProviders.Physical": "9.0.10", + "Microsoft.Extensions.Hosting.Abstractions": "9.0.10", + "Microsoft.Extensions.Logging": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Logging.Configuration": "9.0.10", + "Microsoft.Extensions.Logging.Console": "9.0.10", + "Microsoft.Extensions.Logging.Debug": "9.0.10", + "Microsoft.Extensions.Logging.EventLog": "9.0.10", + "Microsoft.Extensions.Logging.EventSource": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Penumbra.Api": { @@ -152,9 +152,9 @@ }, "System.IO.Pipelines": { "type": "Direct", - "requested": "[9.0.9, )", - "resolved": "9.0.9", - "contentHash": "VySjpsCLprojvat550Flrm3NQB982CPuDzILajqjQihFmrQXZPdQyktIbcpVPJyaExFYtAfY1DpwMdWQuS0kbw==" + "requested": "[9.0.10, )", + "resolved": "9.0.10", + "contentHash": "lwI0mhHcCxMtNSxB5ate9Gc9petWovRBUprtjz2yiIDDZPGBIaUiqNzQHJzjPuzTnvNbEMilpAXjDguKsU/2Fg==" }, "K4os.Compression.LZ4": { "type": "Transitive", @@ -173,313 +173,313 @@ }, "Microsoft.AspNetCore.Connections.Abstractions": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "bb9kWEjwFHfOxcflTdFjcYY0Cnvc0iqnEt5qQ3O73iKPx8v1jkc/LU5wohOCzIrhWsXREaLtQV1Y15SBISNJiA==", + "resolved": "9.0.10", + "contentHash": "z0sD3sBAgWNZ0omLYUvEO5vmec5NV7tvfMBfrhByRfLd7YLkzGxOZN/KvEWzH4Ifg6dBcHLZ+4cbJoFJHXrUUA==", "dependencies": { - "Microsoft.Extensions.Features": "9.0.9" + "Microsoft.Extensions.Features": "9.0.10" } }, "Microsoft.AspNetCore.Http.Connections.Client": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "Ciahjlswi4hylLMfI/gNhNYPuBp0BMP2E/vcG3J7U+wZqSSq8tEeHahEG6h9RF5zPFEISroGOIM6l1uxCP1BfA==", + "resolved": "9.0.10", + "contentHash": "wHXxSYZnXYom4sHWZMzGgngIpHBIG0M1/i5HfLF6tQjBpx399OdTwC+BO1yYjbTr6RyWHx4UglRGYNs+6fpUkA==", "dependencies": { - "Microsoft.AspNetCore.Http.Connections.Common": "9.0.9", - "Microsoft.Extensions.Logging.Abstractions": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9", - "System.Net.ServerSentEvents": "9.0.9" + "Microsoft.AspNetCore.Http.Connections.Common": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10", + "System.Net.ServerSentEvents": "9.0.10" } }, "Microsoft.AspNetCore.Http.Connections.Common": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "S9ssCBd7Kc0sZN5kiHgvikyNqSI5bMyWYxrfl/Hu1S8ymwEhXFiDf2yFhgkapIiIHOXHjF7mgma2Gqmglivo5g==", + "resolved": "9.0.10", + "contentHash": "EARfS3nepXK/b3P3ROPKV4euaHuBRFpa63dmy9TSN0qS8Dp/lQAR+RB/Yhlm5CMXvvyr42Ue1QV/dN8XeGXD3w==", "dependencies": { - "Microsoft.AspNetCore.Connections.Abstractions": "9.0.9" + "Microsoft.AspNetCore.Connections.Abstractions": "9.0.10" } }, "Microsoft.AspNetCore.SignalR.Client.Core": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "DRSFXVLcgCkYGBb6vtBgYUec+QnCbtQnMabk4p5zbtrqsJ19Uvfk36zNeJKgsBGmNt5HouWPuuB7KJP+IHDAOw==", + "resolved": "9.0.10", + "contentHash": "LxnasvhMSG7L+asb88VN7Z6yr0PJTdOdN8UnGtZClySbiSIQGMtsaoCNmQxT9AA6Yvb7QBA0/H+4AGDrT34Xew==", "dependencies": { - "Microsoft.AspNetCore.SignalR.Common": "9.0.9", - "Microsoft.AspNetCore.SignalR.Protocols.Json": "9.0.9", - "Microsoft.Extensions.DependencyInjection": "9.0.9", - "Microsoft.Extensions.Logging": "9.0.9", - "System.Threading.Channels": "9.0.9" + "Microsoft.AspNetCore.SignalR.Common": "9.0.10", + "Microsoft.AspNetCore.SignalR.Protocols.Json": "9.0.10", + "Microsoft.Extensions.DependencyInjection": "9.0.10", + "Microsoft.Extensions.Logging": "9.0.10", + "System.Threading.Channels": "9.0.10" } }, "Microsoft.AspNetCore.SignalR.Common": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "Fv/0TLXCOSpLsgHvL/tMJh4RpU/Ew7p9xET5VGOFjyCLkeZTNeZivzdZ0lHgKpSsQPmxvS45Csuj3qbr1O8zSw==", + "resolved": "9.0.10", + "contentHash": "jwoS5gG0GNwSXX8Fyn7m1sEUzeH/W9q8wqAJs4v2a6ffKBnqjcG4YiiPZDyN7UhJCWAjeU2low+XjJ3YfN7iHQ==", "dependencies": { - "Microsoft.AspNetCore.Connections.Abstractions": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9" + "Microsoft.AspNetCore.Connections.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Microsoft.AspNetCore.SignalR.Protocols.Json": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "8X46a+p6AHdMDs1gNxTzQ+8rzb+/GetBmWgymUCbS8sNi2XQLlPg2jNRWykhIxqIh3UbDYV9cKe4SDLsFYSRtw==", + "resolved": "9.0.10", + "contentHash": "AhBUSG98Us2LLW3FjhtAaa6x0zL1jyjjYYZ0CSCoi9fmIuOLl/5WxXOP48VsrChi6NpZ3C31yHpScl4vqLdPcA==", "dependencies": { - "Microsoft.AspNetCore.SignalR.Common": "9.0.9" + "Microsoft.AspNetCore.SignalR.Common": "9.0.10" } }, "Microsoft.Extensions.Configuration": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "w87wF/90/VI0ZQBhf4rbMEeyEy0vi2WKjFmACsNAKNaorY+ZlVz7ddyXkbADvaWouMKffNmR0yQOGcrvSSvKGg==", + "resolved": "9.0.10", + "contentHash": "UAm3SLGAMlJdowbN+/xnh2UGJkdJoXVm4MsdhZ60dAMS8jteoyCx5WfIab5DKv0TCYpdhVecLJVUjEO3abs9UQ==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", - "Microsoft.Extensions.Primitives": "9.0.9" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "p5RKAY9POvs3axwA/AQRuJeM8AHuE8h4qbP1NxQeGm0ep46aXz1oCLAp/oOYxX1GsjStgdhHrN3XXLLXr0+b3w==", + "resolved": "9.0.10", + "contentHash": "ad3JxmFj0uxuFa1CT6oxTCC1lQ0xeRuOvzBRFT/I/ofIXVOnNsH/v2GZkAJWhlpZqKUvSexQZzp3EEAB2CdtJg==", "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.9" + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Configuration.Binder": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "6SIp/6Bngk4jm2W36JekZbiIbFPdE/eMUtrJEqIqHGpd1zar3jvgnwxnpWQfzUiGrkyY8q8s6V82zkkEZozghA==", + "resolved": "9.0.10", + "contentHash": "D6Kng+9I+w1SQPxJybc6wzw9nnnyUQPutycjtI0svv1RHaWOpUk9PPlwIRfhhoQZ3yihejkEI2wNv/7VnVtkGA==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10" } }, "Microsoft.Extensions.Configuration.CommandLine": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "9bzGOcHoTi8ijrj0MHh5qUY6n9CuittZUqEOj5iE0ZJoSCfG0BI9nhcpd8MC9bOOgjZW5OeizKO8rgta9lSVyA==", + "resolved": "9.0.10", + "contentHash": "Sg400UyKl33kOpqklEg1MIM3lpY/aWi7QZTB2JfFpKgxnSRQl9J6tHiKYll+Rd603P+71YsDy/zqBYUE/3Xeag==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.9", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9" + "Microsoft.Extensions.Configuration": "9.0.10", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10" } }, "Microsoft.Extensions.Configuration.EnvironmentVariables": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "AB8suTh4STAMGDkPer5vL0YNp09eplvbkIbOfFJ1z8D1zOiFF8Hipk9FhCLU4Ea6TosWmGrK30ZIUO9KvAeFcg==", + "resolved": "9.0.10", + "contentHash": "Nje8x5JDRi7uzf2q3NpXiBleRRJAxJMnHcJTi0tLyqd6eGIICRuF6qxgZssMS1r8xXDoaUr/2ZLQ6Cui1Io+Qw==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.9", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9" + "Microsoft.Extensions.Configuration": "9.0.10", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10" } }, "Microsoft.Extensions.Configuration.FileExtensions": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "fvgubCs++wTowHWuQ5TAyZV0S6ldA59U+tBVqFr4/WLd0oEf6ESbdBN2CFaVdn4sZqnarqMnl2O3++RG/Jrf/w==", + "resolved": "9.0.10", + "contentHash": "kYWY9VRoCKQJCLKAA4Wqn74FVnytqosF7vFq1chJ8st9mGZS6SQrkoZg7GmcpqrRRUWmWDOZI4nFdoFnxsI/Ug==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.9", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", - "Microsoft.Extensions.FileProviders.Physical": "9.0.9", - "Microsoft.Extensions.Primitives": "9.0.9" + "Microsoft.Extensions.Configuration": "9.0.10", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.10", + "Microsoft.Extensions.FileProviders.Physical": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Configuration.Json": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "PiPYo1GTinR2ECM80zYdZUIFmde6jj5DryXUcOJg3yIjh+KQMQr42e+COD03QUsUiqNkJk511wVTnVpTm2AVZA==", + "resolved": "9.0.10", + "contentHash": "bn+qnwuOaDelax8PUw30UTjLOuEd0lGWqUG4Z+oVr4D/gEWouCWOyvCVkyn+PWbftPlnmAmWxd4J+7ljwE8wVw==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.9", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", - "Microsoft.Extensions.Configuration.FileExtensions": "9.0.9", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9" + "Microsoft.Extensions.Configuration": "9.0.10", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10", + "Microsoft.Extensions.Configuration.FileExtensions": "9.0.10", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.10" } }, "Microsoft.Extensions.Configuration.UserSecrets": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "bFaNxfU8gQJX3K/Dd6XT0YIJ5ZVihdAY6Z02p2nVTUHjUsaWflLIucZOgB/ecSNnN3zbbBEf1oFC7q5NHTZIHw==", + "resolved": "9.0.10", + "contentHash": "l7em+qNfEdGlwRm8Qk2rkzqjT8xWb/EosoQeTvJ3kZYiRo5inMj0nNcZw51dUKwGO/LW7uNMdqNNU3P0pB5JqA==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", - "Microsoft.Extensions.Configuration.Json": "9.0.9", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", - "Microsoft.Extensions.FileProviders.Physical": "9.0.9" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10", + "Microsoft.Extensions.Configuration.Json": "9.0.10", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.10", + "Microsoft.Extensions.FileProviders.Physical": "9.0.10" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "zQV2WOSP+3z1EuK91ULxfGgo2Y75bTRnmJHp08+w/YXAyekZutX/qCd88/HOMNh35MDW9mJJJxPpMPS+1Rww8A==", + "resolved": "9.0.10", + "contentHash": "iEtXCkNd5XhjNJAOb/wO4IhDRdLIE2CsPxZggZQWJ/q2+sa8dmEPC393nnsiqdH8/4KV8Xn25IzgKPR1UEQ0og==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "/hymojfWbE9AlDOa0mczR44m00Jj+T3+HZO0ZnVTI032fVycI0ZbNOVFP6kqZMcXiLSYXzR2ilcwaRi6dzeGyA==" + "resolved": "9.0.10", + "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" }, "Microsoft.Extensions.Diagnostics": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "gtzl9SD6CvFYOb92qEF41Z9rICzYniM342TWbbJwN3eLS6a5fCLFvO1pQGtpMSnP3h1zHXupMEeKSA9musWYCQ==", + "resolved": "9.0.10", + "contentHash": "01x2vz0AbIdfNUzEVYFq2HSeq1BmrSDpiG7nTmwjfd0d39sahQ8T7dhSXhH+YnZyaLWyMBudOq0vVa/voyNWjg==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.9", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.9", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.9" + "Microsoft.Extensions.Configuration": "9.0.10", + "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.10", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.10" } }, "Microsoft.Extensions.Diagnostics.Abstractions": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "YHGmxccrVZ2Ar3eI+/NdbOHkd1/HzrHvmQ5yBsp0Gl7jTyBe6qcXNYjUt9v9JIO+Z14la44+YYEe63JSqs1fYg==", + "resolved": "9.0.10", + "contentHash": "iwVnYi+gNKrr5riw8YFCoLCN4s0dmHtzfUmV99RIhrz8R4d6C/bsKzXhIhZWDIxJOhVzB+idSOQeRGj1/oMF+Q==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Microsoft.Extensions.Features": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "0MPp/tJ9cFsJCzEKG5g4fUSpwG7bAt9JGADPx5eAThWa9ii2wfOa6f3yxi1IoXWsWqVcq4xlRGrdUAZlpIYalw==" + "resolved": "9.0.10", + "contentHash": "/94E6QLu+0jOWRzcaq80a0/7EmOzuwDWDNOyVYezMTeX4BzhXCfAsUrZi9Lg+4VP2J+21sTa+AaCgMdXiG/cpw==" }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "M1ZhL9QkBQ/k6l/Wjgcli5zrV86HzytQ+gQiNtk9vs9Ge1fb17KKZil9T6jd15p2x/BGfXpup7Hg55CC0kkfig==", + "resolved": "9.0.10", + "contentHash": "3+cLxZKUWBbpfIXLLuKcEok9C91PsV1h5xxfUsEnLSXXLNMiPDfrhpb1xajNFcejFPs9Ck/Fi3z71hYDqFBwYg==", "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.9" + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.FileProviders.Physical": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "sRrPtEwbK23OCFOQ36Xn6ofiB0/nl54/BOdR7lJ/Vwg3XlyvUdmyXvFUS1EU5ltn+sQtbcPuy1l0hsysO8++SQ==", + "resolved": "9.0.10", + "contentHash": "Eg3YOEMpHWZzAgPD9YvGkQSv97AtG3II6maRQV/voDRORh4bRiyl0mVtT2PKnu1JoD9rJeYgjGCwRvVWMBaqgQ==", "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", - "Microsoft.Extensions.FileSystemGlobbing": "9.0.9", - "Microsoft.Extensions.Primitives": "9.0.9" + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.10", + "Microsoft.Extensions.FileSystemGlobbing": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.FileSystemGlobbing": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "iQAgORaVIlkhcpxFnVEfjqNWfQCwBEEH7x2IanTwGafA6Tb4xiBoDWySTxUo3MV2NUV/PmwS/8OhT/elPnJCnw==" + "resolved": "9.0.10", + "contentHash": "KdZAM2YMYBipVp/4tSEWPLnrocd17SL4iaXdgXjR5/nheBXbfR5QfPWYoTyh6C6IW3uKR7TRMwQr2qCvtaCTiA==" }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "ORA4dICNz7cuwupPkjXpSuoiK6GMg0aygInBIQCCFEimwoHntRKdJqB59faxq2HHJuTPW3NsZm5EjN5P5Zh6nQ==", + "resolved": "9.0.10", + "contentHash": "spfXydiEQENFwxdgr3Y57wwys/FRjfmq5VjHGPh6ct1FJK7X+qNEWYbnZJCMqq0B0oJTMvnItAReOv4mi2Idog==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.9", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", - "Microsoft.Extensions.Logging.Abstractions": "9.0.9" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.10", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "MaCB0Y9hNDs4YLu3HCJbo199WnJT8xSgajG1JYGANz9FkseQ5f3v/llu3HxLI6mjDlu7pa7ps9BLPWjKzsAAzQ==", + "resolved": "9.0.10", + "contentHash": "UBXHqE9vyptVhaFnT1R7YJKCve7TqVI10yjjUZBNGMlW2lZ4c031Slt9hxsOzWCzlpPxxIFyf1Yk4a6Iubxx7w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.9", - "Microsoft.Extensions.Logging.Abstractions": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9" + "Microsoft.Extensions.DependencyInjection": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "FEgpSF+Z9StMvrsSViaybOBwR0f0ZZxDm8xV5cSOFiXN/t+ys+rwAlTd/6yG7Ld1gfppgvLcMasZry3GsI9lGA==", + "resolved": "9.0.10", + "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10" } }, "Microsoft.Extensions.Logging.Configuration": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "Abuo+S0Sg+Ke6vzSh5Ell+lwJJM+CEIqg1ImtWnnqF6a/ibJkQnmFJi4/ekEw/0uAcdFKJXtGV7w6cFN0nyXeg==", + "resolved": "9.0.10", + "contentHash": "qwTRpxrmLOXZrbgQHRZ9wS2AtVa/61DFIYk8k1rBCCgA5qW0MBxxQC4BjkaI0wSoHHOv/IUXBeFNK+Y59qe/Ug==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.9", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", - "Microsoft.Extensions.Configuration.Binder": "9.0.9", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Logging": "9.0.9", - "Microsoft.Extensions.Logging.Abstractions": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.9" + "Microsoft.Extensions.Configuration": "9.0.10", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10", + "Microsoft.Extensions.Configuration.Binder": "9.0.10", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Logging": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.10" } }, "Microsoft.Extensions.Logging.Console": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "x3+W7IfW9Tg3sV+sU9N1039M4CqklaAecwhz9qNtjOCBdmg7h96JaL+NAvhYgZgweVJTJaxAvuO8I+ZZehE7Pg==", + "resolved": "9.0.10", + "contentHash": "ponA8k4E4S0LlQ8J4ce4Yp1NND8rxww0lbADK9yL3omRpnnawiENb7W/CTgZUIZVJxKcmIwhm1IbUCRk6RLocQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Logging": "9.0.9", - "Microsoft.Extensions.Logging.Abstractions": "9.0.9", - "Microsoft.Extensions.Logging.Configuration": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Logging": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Logging.Configuration": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10" } }, "Microsoft.Extensions.Logging.Debug": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "q8IbjIzTjfaGfuf9LAuG3X9BytAWj2hWhLU61rEkit847oaSSbcdx/yybY3yL9RgVG1u9ctk7kbCv18M+7Fi6Q==", + "resolved": "9.0.10", + "contentHash": "Uj4YMaMMLawIkpHYnDWsR2/pufV/8X3dDT1/RNhkmt8RRf6/SriyA2gxH6I6bj4gFx6yMuFWZhCgFLy3wcSGTw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Logging": "9.0.9", - "Microsoft.Extensions.Logging.Abstractions": "9.0.9" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Logging": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10" } }, "Microsoft.Extensions.Logging.EventLog": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "1SX5+mv16SBb5NrtLNxIvUt8PHbdvDloZazQdxz1CNM39jG7yeF6olH3sceQ4ONF0oVD5mVUsTag0iVX4xgyog==", + "resolved": "9.0.10", + "contentHash": "Son+9zr7gnuYv1CcuZ8b6XhZK/UQRG88Ku1iSUvAQSZ1cFjYC+lDYRD6nBVXF2QIQyv0jhjt/MPKD7sA+323TQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Logging": "9.0.9", - "Microsoft.Extensions.Logging.Abstractions": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9", - "System.Diagnostics.EventLog": "9.0.9" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Logging": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10", + "System.Diagnostics.EventLog": "9.0.10" } }, "Microsoft.Extensions.Logging.EventSource": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "rGQi5mImot7tTFxj1tQWknWjOBHX1+gsX1WLmQNl5WHr4Sx1kXUBGDuRUjfx4c8pe/hcYHdalAmgk7RdusW6Jw==", + "resolved": "9.0.10", + "contentHash": "qhqkUWsf/CVyQ9V98n5uWSQcvy7HbyRkhyhpK75OKojWuaNKoEIfBmrHRiahmdGJDuh2Qz/nDpFOjQOi/ERtZQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Logging": "9.0.9", - "Microsoft.Extensions.Logging.Abstractions": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9", - "Microsoft.Extensions.Primitives": "9.0.9" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Logging": "9.0.10", + "Microsoft.Extensions.Logging.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "loxGGHE1FC2AefwPHzrjPq7X92LQm64qnU/whKfo6oWaceewPUVYQJBJs3S3E2qlWwnCpeZ+dGCPTX+5dgVAuQ==", + "resolved": "9.0.10", + "contentHash": "zMNABt8eBv0B0XrWjFy9nZNgddavaOeq3ZdaD5IlHhRH65MrU7HM+Hd8GjWE3e2VDGFPZFfSAc6XVXC17f9fOA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Primitives": "9.0.9" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Options.ConfigurationExtensions": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "n4DCdnn2qs6V5U06Sx62FySEAZsJiJJgOzrPHDh9hPK7c2W8hEabC76F3Re3tGPjpiKa02RvB6FxZyxo8iICzg==", + "resolved": "9.0.10", + "contentHash": "wLsf2TyVFFxWQPv0PRJj365it1ngIt8utlHJWSZ9OJ2k+NDa/PtBIRsGlF/NkoLwm1m+1vOePNl2MiKfk6lYfQ==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", - "Microsoft.Extensions.Configuration.Binder": "9.0.9", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", - "Microsoft.Extensions.Options": "9.0.9", - "Microsoft.Extensions.Primitives": "9.0.9" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.10", + "Microsoft.Extensions.Configuration.Binder": "9.0.10", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", + "Microsoft.Extensions.Options": "9.0.10", + "Microsoft.Extensions.Primitives": "9.0.10" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "z4pyMePOrl733ltTowbN565PxBw1oAr8IHmIXNDiDqd22nFpYltX9KhrNC/qBWAG1/Zx5MHX+cOYhWJQYCO/iw==" + "resolved": "9.0.10", + "contentHash": "3pl8D1O5ZwMpDkZAT2uXrhQ6NipkwEgDLMFuURiHTf72TvkoMP61QYH3Vk1yrzVHnHBdNZk3cQACz8Zc7YGNhQ==" }, "Microsoft.IdentityModel.Abstractions": { "type": "Transitive", @@ -518,18 +518,18 @@ }, "System.Diagnostics.EventLog": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "wpsUfnyv8E5K4WQaok6weewvAbQhcLwXFcHBm5U0gdEaBs85N//ssuYvRPFWwz2rO/9/DFP3A1sGMzUFBj8y3w==" + "resolved": "9.0.10", + "contentHash": "Jc+az1pTMujPLDn2j5eqSfzlO7j/T1K/LB7THxdfRWOxujE4zaitUqBs7sv1t6/xmmvpU6Xx3IofCs4owYH0yQ==" }, "System.Net.ServerSentEvents": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "zEISfefh8BYD5m+GMsYJnodiTaz2fDBEOrLgYH7VsQhMIzNkcuSsg9Df/d3zywYX5ohCyCJ5AOax50XLKnXyjw==" + "resolved": "9.0.10", + "contentHash": "PuUpJ0Hl37jY8lTY9+A1zyE+KxHIkomBJ9K8iMoDEeHiSN4BKModSeC6mopzEsw7hdhEv6upSpuT+wKE6HGuHw==" }, "System.Threading.Channels": { "type": "Transitive", - "resolved": "9.0.9", - "contentHash": "AEgG1sVSp3H7oNYoXi350GeUnZdnP38EQHNK0kN5HCC6KoVoEkuTVr40lrVag99pd/NBr3tdNjPFElLLPI5BQg==" + "resolved": "9.0.10", + "contentHash": "2skUPYIRYwMyOg+BQkHaUDc3mOjHmIqT6U67+oIiRJVVtDrkCG2GZxceui6bos18kosyIE0Eg6FyJWgNsc+6og==" }, "maresynchronos.api": { "type": "Project", diff --git a/SnowcloakSync/Utils/Colours.cs b/SnowcloakSync/Utils/Colours.cs index 014d2d6..ce10b98 100644 --- a/SnowcloakSync/Utils/Colours.cs +++ b/SnowcloakSync/Utils/Colours.cs @@ -1,9 +1,28 @@ -using System.Numerics; +using System.Globalization; +using System.Numerics; namespace SnowcloakSync.Utils { public static class Colours { public static readonly Vector4 _snowcloakOnline = new(0.4275f, 0.6863f, 1f, 1f); + + public static Vector4 Hex2Vector4(string? hex) + { + if (hex == null || hex.Length != 6) + { + return new Vector4(255f, 255f, 255f, 1f); + } + else + { + byte r = byte.Parse(hex.Substring(0, 2), NumberStyles.HexNumber); + byte g = byte.Parse(hex.Substring(2, 2), NumberStyles.HexNumber); + byte b = byte.Parse(hex.Substring(4, 2), NumberStyles.HexNumber); + + return new Vector4(r / 255f, g / 255f, b / 255f, 1f); + } + } } + + }