From adabe4e1b99bc57f0381fb0a5bb3192ac0fdff18 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Mon, 16 Mar 2020 14:32:39 +0200 Subject: Working on FSE/PPC FileSystem Provider/Service. --- .../FileSystem/DefaultFileSystemService.cs | 202 +++++++++++++++++++++ .../FileSystem/IFileSystemService.cs | 13 ++ 2 files changed, 215 insertions(+) create mode 100644 Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs create mode 100644 Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/IFileSystemService.cs (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem') diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs new file mode 100644 index 000000000..ffbba2e7a --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs @@ -0,0 +1,202 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core; +using Tango.Core.DI; +using Tango.FileSystem; +using Tango.FileSystem.Network; +using Tango.Integration.ExternalBridge; +using Tango.PPC.Common.ExternalBridge; +using Tango.Transport; + +namespace Tango.PPC.Common.FileSystem +{ + [TangoCreateWhenRegistered] + public class DefaultFileSystemService : ExtendedObject, IFileSystemService, IExternalBridgeRequestHandler + { + private enum FileSystemOperationMode + { + Upload, + Download + } + + private class FileSystemOperation + { + public FileSystemOperationMode Mode { get; set; } + public String Id { get; set; } + public String Path { get; set; } + + public FileSystemOperation(FileSystemOperationMode mode, String path) + { + Mode = mode; + Id = Guid.NewGuid().ToString(); + Path = path; + } + } + + private FileSystemManager _manager; + private Dictionary _operations; + + public bool Enabled { get; set; } = true; + + public DefaultFileSystemService(IPPCExternalBridgeService externalBridge) + { + _manager = new FileSystemManager(); + _operations = new Dictionary(); + externalBridge.RegisterRequestHandler(this); + } + + [ExternalBridgeRequestHandlerMethod(typeof(GetFileSystemItemRequest))] + public async void OnGetFileSystemItemRequest(GetFileSystemItemRequest request, String token, ExternalBridgeReceiver receiver) + { + try + { + FileSystemItemDTO dto = _manager.GetFolder(request); + await receiver.SendGenericResponse(new GetFileSystemItemResponse() { FileSystemItem = dto }, token); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + + [ExternalBridgeRequestHandlerMethod(typeof(FileUploadRequest))] + public async void OnFileUploadRequest(FileUploadRequest request, String token, ExternalBridgeReceiver receiver) + { + try + { + using (var stream = new FileStream(request.Path, FileMode.Create)) { } + + FileSystemOperation operation = new FileSystemOperation(FileSystemOperationMode.Upload, request.Path); + _operations.Add(operation.Id, operation); + + await receiver.SendGenericResponse(new FileUploadResponse() { OperationId = operation.Id }, token); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + + [ExternalBridgeRequestHandlerMethod(typeof(FileDownloadRequest))] + public async void OnFileDownloadRequest(FileDownloadRequest request, String token, ExternalBridgeReceiver receiver) + { + try + { + if (!File.Exists(request.Path)) + { + await receiver.SendErrorResponse(new FileNotFoundException("Could not find the specified file."), token); + return; + } + + FileSystemOperation operation = new FileSystemOperation(FileSystemOperationMode.Download, request.Path); + + _operations.Add(operation.Id, operation); + + await receiver.SendGenericResponse(new FileDownloadResponse() + { + OperationId = operation.Id, + Length = new FileInfo(request.Path).Length + }, token); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + + [ExternalBridgeRequestHandlerMethod(typeof(ChunkUploadRequest))] + public async void OnChunkUploadRequest(ChunkUploadRequest request, String token, ExternalBridgeReceiver receiver) + { + try + { + FileSystemOperation operation; + _operations.TryGetValue(request.OperationId, out operation); + + if (operation == null) + { + await receiver.SendErrorResponse(new ArgumentException("Invalid operation id."), token); + return; + } + + using (var stream = new FileStream(operation.Path, FileMode.Append)) + { + stream.Write(request.Data, 0, request.Data.Length); + } + + await receiver.SendGenericResponse(new ChunkUploadResponse(), token); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + + [ExternalBridgeRequestHandlerMethod(typeof(ChunkDownloadRequest))] + public async void OnChunkDownloadRequest(ChunkDownloadRequest request, String token, ExternalBridgeReceiver receiver) + { + FileSystemOperation operation; + _operations.TryGetValue(request.OperationId, out operation); + + if (operation == null) + { + await receiver.SendErrorResponse(new ArgumentException("Invalid operation id."), token); + return; + } + + using (FileStream stream = new FileStream(operation.Path, FileMode.Open)) + { + stream.Position = request.Position; + byte[] data = new byte[Math.Min(request.MaxChunkSize, stream.Length - stream.Position)]; + await stream.ReadAsync(data, 0, data.Length); + await receiver.SendGenericResponse(new ChunkDownloadResponse() + { + Data = data + }, token); + } + } + + [ExternalBridgeRequestHandlerMethod(typeof(AbortOperationRequest))] + public async void OnAbortOperationRequest(AbortOperationRequest request, String token, ExternalBridgeReceiver receiver) + { + FileSystemOperation operation; + _operations.TryGetValue(request.OperationId, out operation); + + if (operation == null) + { + await receiver.SendErrorResponse(new ArgumentException("Invalid operation id."), token); + return; + } + + try + { + if (operation.Mode == FileSystemOperationMode.Upload) + { + if (File.Exists(operation.Path)) + { + File.Delete(operation.Path); + } + else if (Directory.Exists(operation.Path)) + { + Directory.Delete(operation.Path, true); + } + } + + await receiver.SendGenericResponse(new AbortOperationResponse(), token); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + + public void OnReceiverDisconnected(ExternalBridgeReceiver receiver) + { + + } + } +} diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/IFileSystemService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/IFileSystemService.cs new file mode 100644 index 000000000..050bb1cd6 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/IFileSystemService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.PPC.Common.FileSystem +{ + public interface IFileSystemService + { + bool Enabled { get; set; } + } +} -- cgit v1.3.1 From d0dba9752d0a8e787d9ae1d4d25542bd4b386df6 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Fri, 20 Mar 2020 04:03:05 +0200 Subject: Implemented priority queues for Transport Layer. Working on file/folder download. --- .../ViewModels/FileSystemViewVM.cs | 96 +- .../Tango.FSE.PPCConsole/Views/FileSystemView.xaml | 165 +- .../FileSystem/FileSystemHandler.cs | 46 +- .../FileSystem/FileSystemHandlerStatus.cs | 1 + .../FileSystem/DefaultFileSystemProvider.cs | 89 +- .../FileSystem/DefaultFileSystemService.cs | 41 + .../SideChains/Priority Queue/FastPriorityQueue.cs | 593 ++++ .../Priority Queue/FastPriorityQueueNode.cs | 25 + .../Priority Queue/GenericPriorityQueue.cs | 602 ++++ .../Priority Queue/GenericPriorityQueueNode.cs | 29 + .../Priority Queue/IFixedSizePriorityQueue.cs | 31 + .../SideChains/Priority Queue/IPriorityQueue.cs | 55 + .../Priority Queue/Priority Queue.csproj | 89 + .../Priority Queue/Priority Queue.nuspec | 42 + .../Priority Queue/Properties/AssemblyInfo.cs | 38 + .../Priority Queue/SimplePriorityQueue.cs | 588 ++++ .../Priority Queue/StablePriorityQueue.cs | 587 ++++ .../Priority Queue/StablePriorityQueueNode.cs | 10 + .../Tango.Core/PriorityProducerConsumerQueue.cs | 63 + .../Visual_Studio/Tango.Core/Tango.Core.csproj | 3 +- .../Tango.Transport/TransportMessageBase.cs | 2 + .../Tango.Transport/TransportRequestConfig.cs | 2 + .../Tango.Transport/TransportResponseConfig.cs | 2 + .../Tango.Transport/TransporterBase.cs | 28 +- Software/Visual_Studio/Tango.sln | 3225 +++++++++++++++++++- 25 files changed, 6396 insertions(+), 56 deletions(-) create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/FastPriorityQueue.cs create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/FastPriorityQueueNode.cs create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/GenericPriorityQueue.cs create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/GenericPriorityQueueNode.cs create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/IFixedSizePriorityQueue.cs create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/IPriorityQueue.cs create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/Priority Queue.csproj create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/Priority Queue.nuspec create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/Properties/AssemblyInfo.cs create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/SimplePriorityQueue.cs create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/StablePriorityQueue.cs create mode 100644 Software/Visual_Studio/SideChains/Priority Queue/StablePriorityQueueNode.cs create mode 100644 Software/Visual_Studio/Tango.Core/PriorityProducerConsumerQueue.cs (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem') diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs index 20a960243..cba25303e 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; using System.IO; using System.Linq; using System.Text; @@ -9,6 +11,7 @@ using Tango.Core.Commands; using Tango.FileSystem; using Tango.FSE.Common; using Tango.FSE.Common.Connection; +using Tango.FSE.Common.FileSystem; using static Tango.SharedUI.Controls.NavigationControl; namespace Tango.FSE.PPCConsole.ViewModels @@ -36,20 +39,36 @@ namespace Tango.FSE.PPCConsole.ViewModels set { _drives = value; RaisePropertyChangedAuto(); } } + public ObservableCollection SelectedItems { get; set; } + public ObservableCollection FileSystemHandlers { get; set; } public RelayCommand NavigateCommand { get; set; } public RelayCommand OpenItemCommand { get; set; } public RelayCommand BackCommand { get; set; } public RelayCommand NavigateSpecialFolderCommand { get; set; } public RelayCommand NavigateToFolderCommand { get; set; } + public RelayCommand> DeleteCommand { get; set; } + public RelayCommand> DropCommand { get; set; } + public RelayCommand> DragCommand { get; set; } + public RelayCommand DeleteFileSystemHandlerCommand { get; set; } + public RelayCommand OpenFileSystemHandlerDestinationCommand { get; set; } + public RelayCommand RetryFailedFileSystemHandlerCommand { get; set; } + public FileSystemViewVM() { + SelectedItems = new ObservableCollection(); + FileSystemHandlers = new ObservableCollection(); NavigateCommand = new RelayCommand(NavigateToCurrentPath); OpenItemCommand = new RelayCommand(OpenFileSystemItem); BackCommand = new RelayCommand(NavigateBack, () => !(CurrentItem is FolderItem) || !(CurrentItem as FolderItem).IsRoot); NavigateSpecialFolderCommand = new RelayCommand(NavigateToSpecialFolder); - NavigateToFolderCommand = new RelayCommand(async (x) => await Navigate(x)); + NavigateToFolderCommand = new RelayCommand(async (x) => await Navigate(x)); + DeleteCommand = new RelayCommand>(DeleteSelectedItems); + DragCommand = new RelayCommand>(OnItemsDraggedOut); + DeleteFileSystemHandlerCommand = new RelayCommand(DeleteFileSystemHandler); + OpenFileSystemHandlerDestinationCommand = new RelayCommand(OpenFileSystemHandlerDestination); + RetryFailedFileSystemHandlerCommand = new RelayCommand(RetryFailedFileSystemHandler); } private async void NavigateBack() @@ -88,10 +107,83 @@ namespace Tango.FSE.PPCConsole.ViewModels private async void OpenFileSystemItem(FileSystemItem item) { - if (item != null) + if (item == null) return; + + if (item.Type == FileSystemItemType.Folder || item.Type == FileSystemItemType.Drive) { await Navigate(item.Path); } + else if (item.Type == FileSystemItemType.File) + { + //TODO: Download/Open file?... + } + } + + private async void DeleteSelectedItems(IList items) + { + if (items != null && items.Count > 0) + { + if (await NotificationProvider.ShowWarningQuestion("Are you sure you want to delete the selected files/folders?", "DELETE")) + { + //TODO: Delete items + } + } + } + + private async void OnItemsDraggedOut(List items) + { + foreach (var item in items.Where(x => x.FileSystemItem.Type != FileSystemItemType.Drive)) + { + Debug.WriteLine($"Dropped out: {item.FileSystemItem.Name} => {item.Destination}"); + var handler = await FileSystemProvider.Download(item.FileSystemItem, item.Destination); + FileSystemHandlers.Insert(0, handler); + } + } + + private async void DeleteFileSystemHandler(FileSystemHandler handler) + { + if (handler.Status != FileSystemHandlerStatus.Completed && handler.Status != FileSystemHandlerStatus.Failed) + { + if (await NotificationProvider.ShowWarningQuestion($"This item is currently {handler.Status}. Do you wish to abort and delete this item?")) + { + try + { + handler.Abort(); + } + catch { } + + FileSystemHandlers.Remove(handler); + } + } + else + { + FileSystemHandlers.Remove(handler); + } + } + + private void OpenFileSystemHandlerDestination(FileSystemHandler handler) + { + String destination = String.Empty; + + if (File.Exists(handler.Destination) || Directory.Exists(handler.Destination)) + { + destination = handler.Destination; + Process.Start("explorer.exe", string.Format("/select,\"{0}\"", destination)); + } + else + { + destination = Path.GetDirectoryName(handler.Destination); + Process.Start("explorer.exe", destination); + } + } + + private async void RetryFailedFileSystemHandler(FileSystemHandler handler) + { + if (handler.Status == FileSystemHandlerStatus.Failed) + { + var newHandler = await FileSystemProvider.Download(handler.FileSystemItem, Path.GetDirectoryName(handler.Destination)); + FileSystemHandlers.Replace(handler, newHandler); + } } private async void NavigateToSpecialFolder(string folder) diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml index ecc344324..8038ea905 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml @@ -114,10 +114,167 @@ - + + + + + + + + + + + + + + + + Transfer Queue + + () + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs index 1b1e5f747..48fb35c0f 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs @@ -4,12 +4,14 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; +using Tango.FileSystem; namespace Tango.FSE.Common.FileSystem { public class FileSystemHandler : ExtendedObject { private Action _abortAction; + private FileSystemHandlerStatus _statusBeforePause; public FileSystemHandlerType Type { get; set; } @@ -19,9 +21,31 @@ namespace Tango.FSE.Common.FileSystem get { return _status; } set { - if (_status != value) + _status = value; + RaisePropertyChangedAuto(); + } + } + + private bool _isPaused; + public bool IsPaused + { + get { return _isPaused; } + set + { + if (_isPaused != value) { - _status = value; + _isPaused = value; + + if (_isPaused) + { + _statusBeforePause = Status; + Status = FileSystemHandlerStatus.Paused; + } + else + { + Status = _statusBeforePause; + } + RaisePropertyChangedAuto(); } } @@ -48,12 +72,13 @@ namespace Tango.FSE.Common.FileSystem set { _failedException = value; RaisePropertyChangedAuto(); } } - public String Name { get; set; } + public FileSystemItem FileSystemItem { get; set; } public String Destination { get; set; } + public String OperationId { get; set; } - public FileSystemHandler(String name, String destination, Action abortAction) + public FileSystemHandler(FileSystemItem fileSystemItem, String destination, Action abortAction) { - Name = name; + FileSystemItem = fileSystemItem; Destination = destination; _abortAction = abortAction; } @@ -62,7 +87,11 @@ namespace Tango.FSE.Common.FileSystem { Position = position; Length = length; - Status = (Type == FileSystemHandlerType.FileDownload || Type == FileSystemHandlerType.FolderDownload) ? FileSystemHandlerStatus.Downloading : FileSystemHandlerStatus.Uploading; + + if (!IsPaused) + { + Status = (Type == FileSystemHandlerType.FileDownload || Type == FileSystemHandlerType.FolderDownload) ? FileSystemHandlerStatus.Downloading : FileSystemHandlerStatus.Uploading; + } } internal void RaiseFailed(Exception exception) @@ -71,6 +100,11 @@ namespace Tango.FSE.Common.FileSystem FailedException = exception; } + internal void RaiseAborted() + { + Status = FileSystemHandlerStatus.Aborted; + } + internal void RaiseCompleted() { Status = FileSystemHandlerStatus.Completed; diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandlerStatus.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandlerStatus.cs index fe3a030a1..c495b5dc0 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandlerStatus.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandlerStatus.cs @@ -11,6 +11,7 @@ namespace Tango.FSE.Common.FileSystem Pending, Downloading, Uploading, + Paused, Failed, Aborted, Completed diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs index f9f08c6a4..6eb05b70d 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs @@ -4,6 +4,7 @@ using System.IO; using System.IO.Compression; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using Tango.Core; using Tango.Core.Threading; @@ -63,46 +64,26 @@ namespace Tango.FSE.UI.FileSystem return FileSystemItem.FromDTO(response.FileSystemItem) as IFileSystemContainer; } - public async Task Download(FileSystemItem item, string localTargetFolder) + public Task Download(FileSystemItem item, string localTargetFolder) { String operationId = String.Empty; String destination = String.Empty; long downloadLength = 0; + bool aborted = false; + + FileSystemHandler handler = null; if (item.Type == FileSystemItemType.File) { destination = Path.Combine(localTargetFolder, item.Name); - - var response = await _machineProvider.MachineOperator.SendGenericRequest( - new FileDownloadRequest() - { - Path = item.Path - }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(20) }); - - operationId = response.OperationId; - downloadLength = response.Length; } - else if (item.Type == FileSystemItemType.Folder) + else if (item.Type == FileSystemItemType.File) { destination = Path.Combine(localTargetFolder, item.Name); - - var response = await _machineProvider.MachineOperator.SendGenericRequest( - new FolderDownloadRequest() - { - Path = item.Path - }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(20) }); - - operationId = response.OperationId; - downloadLength = response.Length; - } - else - { - throw new NotSupportedException("The requested file system item is not supported for downloading."); } - bool aborted = false; - FileSystemHandler handler = new FileSystemHandler(item.Name, destination, async () => + handler = new FileSystemHandler(item, destination, async () => { if (!aborted) { @@ -119,25 +100,73 @@ namespace Tango.FSE.UI.FileSystem { LogManager.Log(ex, "Error aborting the download operation."); } + finally + { + handler.RaiseAborted(); + } } }); - long position = 0; - ThreadFactory.StartNew(async () => { + try + { + if (item.Type == FileSystemItemType.File) + { + var response = await _machineProvider.MachineOperator.SendGenericRequest( + new FileDownloadRequest() + { + Path = item.Path + }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(20) }); + + operationId = response.OperationId; + downloadLength = response.Length; + handler.OperationId = operationId; + } + else if (item.Type == FileSystemItemType.Folder) + { + var response = await _machineProvider.MachineOperator.SendGenericRequest( + new FolderDownloadRequest() + { + Path = item.Path + }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(60) }); + + operationId = response.OperationId; + downloadLength = response.Length; + handler.OperationId = operationId; + } + else + { + throw new NotSupportedException("The requested file system item is not supported for downloading."); + } + } + catch (Exception ex) + { + handler.RaiseFailed(ex); + return; + } + + long position = 0; + var tempFile = TemporaryManager.CreateFile(); while (position < downloadLength && !aborted) { + if (handler.IsPaused) + { + Thread.Sleep(1000); + continue; + } + try { var response = await _machineProvider.MachineOperator.SendGenericRequest( new ChunkDownloadRequest() { + MaxChunkSize = 1024 * 10, OperationId = operationId, Position = position, - }); + }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(30), Priority = QueuePriority.Low }); using (FileStream fs = new FileStream(tempFile, FileMode.Append)) { @@ -176,7 +205,7 @@ namespace Tango.FSE.UI.FileSystem handler.RaiseCompleted(); }); - return handler; + return Task.FromResult(handler); } public Task Upload(string sourcePath, string remoteTargetFolder) diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs index ffbba2e7a..804ad0036 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs @@ -7,6 +7,7 @@ using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.Core.DI; +using Tango.Core.IO; using Tango.FileSystem; using Tango.FileSystem.Network; using Tango.Integration.ExternalBridge; @@ -29,6 +30,7 @@ namespace Tango.PPC.Common.FileSystem public FileSystemOperationMode Mode { get; set; } public String Id { get; set; } public String Path { get; set; } + public bool IsPathTempZip { get; set; } public FileSystemOperation(FileSystemOperationMode mode, String path) { @@ -109,6 +111,38 @@ namespace Tango.PPC.Common.FileSystem } } + [ExternalBridgeRequestHandlerMethod(typeof(FolderDownloadRequest))] + public async void OnFolderDownloadRequest(FolderDownloadRequest request, String token, ExternalBridgeReceiver receiver) + { + try + { + if (!Directory.Exists(request.Path)) + { + await receiver.SendErrorResponse(new FileNotFoundException("Could not find the specified directory."), token); + return; + } + + var tempFile = TemporaryManager.CreateImaginaryFile(); + + ZipFile.CreateFromDirectory(request.Path, tempFile); + + FileSystemOperation operation = new FileSystemOperation(FileSystemOperationMode.Download, tempFile); + operation.IsPathTempZip = true; + + _operations.Add(operation.Id, operation); + + await receiver.SendGenericResponse(new FileDownloadResponse() + { + OperationId = operation.Id, + Length = new FileInfo(request.Path).Length + }, token); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + [ExternalBridgeRequestHandlerMethod(typeof(ChunkUploadRequest))] public async void OnChunkUploadRequest(ChunkUploadRequest request, String token, ExternalBridgeReceiver receiver) { @@ -185,6 +219,13 @@ namespace Tango.PPC.Common.FileSystem Directory.Delete(operation.Path, true); } } + else if (operation.IsPathTempZip) + { + if (File.Exists(operation.Path)) + { + File.Delete(operation.Path); + } + } await receiver.SendGenericResponse(new AbortOperationResponse(), token); } diff --git a/Software/Visual_Studio/SideChains/Priority Queue/FastPriorityQueue.cs b/Software/Visual_Studio/SideChains/Priority Queue/FastPriorityQueue.cs new file mode 100644 index 000000000..927a20d41 --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/FastPriorityQueue.cs @@ -0,0 +1,593 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace Priority_Queue +{ + /// + /// An implementation of a min-Priority Queue using a heap. Has O(1) .Contains()! + /// See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more information + /// + /// The values in the queue. Must extend the FastPriorityQueueNode class + public sealed class FastPriorityQueue : IFixedSizePriorityQueue + where T : FastPriorityQueueNode + { + private int _numNodes; + private T[] _nodes; + + /// + /// Instantiate a new Priority Queue + /// + /// The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) + public FastPriorityQueue(int maxNodes) + { +#if DEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("New queue size cannot be smaller than 1"); + } +#endif + + _numNodes = 0; + _nodes = new T[maxNodes + 1]; + } + + /// + /// Returns the number of nodes in the queue. + /// O(1) + /// + public int Count + { + get + { + return _numNodes; + } + } + + /// + /// Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), + /// attempting to enqueue another item will cause undefined behavior. O(1) + /// + public int MaxSize + { + get + { + return _nodes.Length - 1; + } + } + + /// + /// Removes every node from the queue. + /// O(n) (So, don't do this often!) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Clear() + { + Array.Clear(_nodes, 1, _numNodes); + _numNodes = 0; + } + + /// + /// Returns (in O(1)!) whether the given node is in the queue. + /// If node is or has been previously added to another queue, the result is undefined unless oldQueue.ResetNode(node) has been called + /// O(1) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool Contains(T node) + { +#if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.Contains was called on a node from another queue. Please call originalQueue.ResetNode() first"); + } + if(node.QueueIndex < 0 || node.QueueIndex >= _nodes.Length) + { + throw new InvalidOperationException("node.QueueIndex has been corrupted. Did you change it manually? Or add this node to another queue?"); + } +#endif + + return (_nodes[node.QueueIndex] == node); + } + + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken arbitrarily. + /// If the queue is full, the result is undefined. + /// If the node is already enqueued, the result is undefined. + /// If node is or has been previously added to another queue, the result is undefined unless oldQueue.ResetNode(node) has been called + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Enqueue(T node, float priority) + { +#if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if(_numNodes >= _nodes.Length - 1) + { + throw new InvalidOperationException("Queue is full - node cannot be added: " + node); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.Enqueue was called on a node from another queue. Please call originalQueue.ResetNode() first"); + } + if (Contains(node)) + { + throw new InvalidOperationException("Node is already enqueued: " + node); + } + node.Queue = this; +#endif + + node.Priority = priority; + _numNodes++; + _nodes[_numNodes] = node; + node.QueueIndex = _numNodes; + CascadeUp(node); + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void CascadeUp(T node) + { + //aka Heapify-up + int parent; + if(node.QueueIndex > 1) + { + parent = node.QueueIndex >> 1; + T parentNode = _nodes[parent]; + if(HasHigherOrEqualPriority(parentNode, node)) + return; + + //Node has lower priority value, so move parent down the heap to make room + _nodes[node.QueueIndex] = parentNode; + parentNode.QueueIndex = node.QueueIndex; + + node.QueueIndex = parent; + } + else + { + return; + } + while(parent > 1) + { + parent >>= 1; + T parentNode = _nodes[parent]; + if(HasHigherOrEqualPriority(parentNode, node)) + break; + + //Node has lower priority value, so move parent down the heap to make room + _nodes[node.QueueIndex] = parentNode; + parentNode.QueueIndex = node.QueueIndex; + + node.QueueIndex = parent; + } + _nodes[node.QueueIndex] = node; + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void CascadeDown(T node) + { + //aka Heapify-down + int finalQueueIndex = node.QueueIndex; + int childLeftIndex = 2 * finalQueueIndex; + + // If leaf node, we're done + if(childLeftIndex > _numNodes) + { + return; + } + + // Check if the left-child is higher-priority than the current node + int childRightIndex = childLeftIndex + 1; + T childLeft = _nodes[childLeftIndex]; + if(HasHigherPriority(childLeft, node)) + { + // Check if there is a right child. If not, swap and finish. + if(childRightIndex > _numNodes) + { + node.QueueIndex = childLeftIndex; + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + _nodes[childLeftIndex] = node; + return; + } + // Check if the left-child is higher-priority than the right-child + T childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childLeft, childRight)) + { + // left is highest, move it up and continue + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + finalQueueIndex = childLeftIndex; + } + else + { + // right is even higher, move it up and continue + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + } + // Not swapping with left-child, does right-child exist? + else if(childRightIndex > _numNodes) + { + return; + } + else + { + // Check if the right-child is higher-priority than the current node + T childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childRight, node)) + { + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + // Neither child is higher-priority than current, so finish and stop. + else + { + return; + } + } + + while(true) + { + childLeftIndex = 2 * finalQueueIndex; + + // If leaf node, we're done + if(childLeftIndex > _numNodes) + { + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + + // Check if the left-child is higher-priority than the current node + childRightIndex = childLeftIndex + 1; + childLeft = _nodes[childLeftIndex]; + if(HasHigherPriority(childLeft, node)) + { + // Check if there is a right child. If not, swap and finish. + if(childRightIndex > _numNodes) + { + node.QueueIndex = childLeftIndex; + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + _nodes[childLeftIndex] = node; + break; + } + // Check if the left-child is higher-priority than the right-child + T childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childLeft, childRight)) + { + // left is highest, move it up and continue + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + finalQueueIndex = childLeftIndex; + } + else + { + // right is even higher, move it up and continue + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + } + // Not swapping with left-child, does right-child exist? + else if(childRightIndex > _numNodes) + { + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + else + { + // Check if the right-child is higher-priority than the current node + T childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childRight, node)) + { + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + // Neither child is higher-priority than current, so finish and stop. + else + { + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + } + } + } + + /// + /// Returns true if 'higher' has higher priority than 'lower', false otherwise. + /// Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private bool HasHigherPriority(T higher, T lower) + { + return (higher.Priority < lower.Priority); + } + + /// + /// Returns true if 'higher' has higher priority than 'lower', false otherwise. + /// Note that calling HasHigherOrEqualPriority(node, node) (ie. both arguments the same node) will return true + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private bool HasHigherOrEqualPriority(T higher, T lower) + { + return (higher.Priority <= lower.Priority); + } + + /// + /// Removes the head of the queue and returns it. + /// If queue is empty, result is undefined + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public T Dequeue() + { +#if DEBUG + if(_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + } + + if(!IsValidQueue()) + { + throw new InvalidOperationException("Queue has been corrupted (Did you update a node priority manually instead of calling UpdatePriority()?" + + "Or add the same node to two different queues?)"); + } +#endif + + T returnMe = _nodes[1]; + //If the node is already the last node, we can remove it immediately + if(_numNodes == 1) + { + _nodes[1] = null; + _numNodes = 0; + return returnMe; + } + + //Swap the node with the last node + T formerLastNode = _nodes[_numNodes]; + _nodes[1] = formerLastNode; + formerLastNode.QueueIndex = 1; + _nodes[_numNodes] = null; + _numNodes--; + + //Now bubble formerLastNode (which is no longer the last node) down + CascadeDown(formerLastNode); + return returnMe; + } + + /// + /// Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + /// Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior + /// O(n) + /// + public void Resize(int maxNodes) + { +#if DEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("Queue size cannot be smaller than 1"); + } + + if (maxNodes < _numNodes) + { + throw new InvalidOperationException("Called Resize(" + maxNodes + "), but current queue contains " + _numNodes + " nodes"); + } +#endif + + T[] newArray = new T[maxNodes + 1]; + int highestIndexToCopy = Math.Min(maxNodes, _numNodes); + Array.Copy(_nodes, newArray, highestIndexToCopy + 1); + _nodes = newArray; + } + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// If the queue is empty, behavior is undefined. + /// O(1) + /// + public T First + { + get + { +#if DEBUG + if(_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call .First on an empty queue"); + } +#endif + + return _nodes[1]; + } + } + + /// + /// This method must be called on a node every time its priority changes while it is in the queue. + /// Forgetting to call this method will result in a corrupted queue! + /// Calling this method on a node not in the queue results in undefined behavior + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void UpdatePriority(T node, float priority) + { +#if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.UpdatePriority was called on a node from another queue"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call UpdatePriority() on a node which is not enqueued: " + node); + } +#endif + + node.Priority = priority; + OnNodeUpdated(node); + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void OnNodeUpdated(T node) + { + //Bubble the updated node up or down as appropriate + int parentIndex = node.QueueIndex >> 1; + + if(parentIndex > 0 && HasHigherPriority(node, _nodes[parentIndex])) + { + CascadeUp(node); + } + else + { + //Note that CascadeDown will be called if parentNode == node (that is, node is the root) + CascadeDown(node); + } + } + + /// + /// Removes a node from the queue. The node does not need to be the head of the queue. + /// If the node is not in the queue, the result is undefined. If unsure, check Contains() first + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Remove(T node) + { +#if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.Remove was called on a node from another queue"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call Remove() on a node which is not enqueued: " + node); + } +#endif + + //If the node is already the last node, we can remove it immediately + if(node.QueueIndex == _numNodes) + { + _nodes[_numNodes] = null; + _numNodes--; + return; + } + + //Swap the node with the last node + T formerLastNode = _nodes[_numNodes]; + _nodes[node.QueueIndex] = formerLastNode; + formerLastNode.QueueIndex = node.QueueIndex; + _nodes[_numNodes] = null; + _numNodes--; + + //Now bubble formerLastNode (which is no longer the last node) up or down as appropriate + OnNodeUpdated(formerLastNode); + } + + /// + /// By default, nodes that have been previously added to one queue cannot be added to another queue. + /// If you need to do this, please call originalQueue.ResetNode(node) before attempting to add it in the new queue + /// If the node is currently in the queue or belongs to another queue, the result is undefined + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void ResetNode(T node) + { +#if DEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.ResetNode was called on a node from another queue"); + } + if (Contains(node)) + { + throw new InvalidOperationException("node.ResetNode was called on a node that is still in the queue"); + } + + node.Queue = null; +#endif + + node.QueueIndex = 0; + } + + public IEnumerator GetEnumerator() + { +#if NET_VERSION_4_5 // ArraySegment does not implement IEnumerable before 4.5 + IEnumerable e = new ArraySegment(_nodes, 1, _numNodes); + return e.GetEnumerator(); +#else + for(int i = 1; i <= _numNodes; i++) + yield return _nodes[i]; +#endif + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Should not be called in production code. + /// Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. + /// + public bool IsValidQueue() + { + for(int i = 1; i < _nodes.Length; i++) + { + if(_nodes[i] != null) + { + int childLeftIndex = 2 * i; + if(childLeftIndex < _nodes.Length && _nodes[childLeftIndex] != null && HasHigherPriority(_nodes[childLeftIndex], _nodes[i])) + return false; + + int childRightIndex = childLeftIndex + 1; + if(childRightIndex < _nodes.Length && _nodes[childRightIndex] != null && HasHigherPriority(_nodes[childRightIndex], _nodes[i])) + return false; + } + } + return true; + } + } +} \ No newline at end of file diff --git a/Software/Visual_Studio/SideChains/Priority Queue/FastPriorityQueueNode.cs b/Software/Visual_Studio/SideChains/Priority Queue/FastPriorityQueueNode.cs new file mode 100644 index 000000000..54b0573ec --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/FastPriorityQueueNode.cs @@ -0,0 +1,25 @@ +using System; + +namespace Priority_Queue +{ + public class FastPriorityQueueNode + { + /// + /// The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, in the node's constructor). + /// Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead + /// + public float Priority { get; protected internal set; } + + /// + /// Represents the current position in the queue + /// + public int QueueIndex { get; internal set; } + +#if DEBUG + /// + /// The queue this node is tied to. Used only for debug builds. + /// + public object Queue { get; internal set; } +#endif + } +} diff --git a/Software/Visual_Studio/SideChains/Priority Queue/GenericPriorityQueue.cs b/Software/Visual_Studio/SideChains/Priority Queue/GenericPriorityQueue.cs new file mode 100644 index 000000000..7687ba213 --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/GenericPriorityQueue.cs @@ -0,0 +1,602 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace Priority_Queue +{ + /// + /// A copy of StablePriorityQueue which also has generic priority-type + /// + /// The values in the queue. Must extend the GenericPriorityQueueNode class + /// The priority-type. Must extend IComparable<TPriority> + public sealed class GenericPriorityQueue : IFixedSizePriorityQueue + where TItem : GenericPriorityQueueNode + where TPriority : IComparable + { + private int _numNodes; + private TItem[] _nodes; + private long _numNodesEverEnqueued; + private readonly Comparison _comparer; + + /// + /// Instantiate a new Priority Queue + /// + /// The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) + public GenericPriorityQueue(int maxNodes) : this(maxNodes, Comparer.Default) { } + + /// + /// Instantiate a new Priority Queue + /// + /// The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) + /// The comparer used to compare TPriority values. + public GenericPriorityQueue(int maxNodes, IComparer comparer) : this(maxNodes, comparer.Compare) { } + + /// + /// Instantiate a new Priority Queue + /// + /// The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) + /// The comparison function to use to compare TPriority values + public GenericPriorityQueue(int maxNodes, Comparison comparer) + { +#if DEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("New queue size cannot be smaller than 1"); + } +#endif + + _numNodes = 0; + _nodes = new TItem[maxNodes + 1]; + _numNodesEverEnqueued = 0; + _comparer = comparer; + } + + /// + /// Returns the number of nodes in the queue. + /// O(1) + /// + public int Count + { + get + { + return _numNodes; + } + } + + /// + /// Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), + /// attempting to enqueue another item will cause undefined behavior. O(1) + /// + public int MaxSize + { + get + { + return _nodes.Length - 1; + } + } + + /// + /// Removes every node from the queue. + /// O(n) (So, don't do this often!) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Clear() + { + Array.Clear(_nodes, 1, _numNodes); + _numNodes = 0; + } + + /// + /// Returns (in O(1)!) whether the given node is in the queue. + /// If node is or has been previously added to another queue, the result is undefined unless oldQueue.ResetNode(node) has been called + /// O(1) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool Contains(TItem node) + { +#if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.Contains was called on a node from another queue. Please call originalQueue.ResetNode() first"); + } + if (node.QueueIndex < 0 || node.QueueIndex >= _nodes.Length) + { + throw new InvalidOperationException("node.QueueIndex has been corrupted. Did you change it manually?"); + } +#endif + + return (_nodes[node.QueueIndex] == node); + } + + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. + /// If the queue is full, the result is undefined. + /// If the node is already enqueued, the result is undefined. + /// If node is or has been previously added to another queue, the result is undefined unless oldQueue.ResetNode(node) has been called + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Enqueue(TItem node, TPriority priority) + { +#if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if(_numNodes >= _nodes.Length - 1) + { + throw new InvalidOperationException("Queue is full - node cannot be added: " + node); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.Enqueue was called on a node from another queue. Please call originalQueue.ResetNode() first"); + } + if (Contains(node)) + { + throw new InvalidOperationException("Node is already enqueued: " + node); + } + node.Queue = this; +#endif + + node.Priority = priority; + _numNodes++; + _nodes[_numNodes] = node; + node.QueueIndex = _numNodes; + node.InsertionIndex = _numNodesEverEnqueued++; + CascadeUp(node); + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void CascadeUp(TItem node) + { + //aka Heapify-up + int parent; + if (node.QueueIndex > 1) + { + parent = node.QueueIndex >> 1; + TItem parentNode = _nodes[parent]; + if(HasHigherPriority(parentNode, node)) + return; + + //Node has lower priority value, so move parent down the heap to make room + _nodes[node.QueueIndex] = parentNode; + parentNode.QueueIndex = node.QueueIndex; + + node.QueueIndex = parent; + } + else + { + return; + } + while(parent > 1) + { + parent >>= 1; + TItem parentNode = _nodes[parent]; + if(HasHigherPriority(parentNode, node)) + break; + + //Node has lower priority value, so move parent down the heap to make room + _nodes[node.QueueIndex] = parentNode; + parentNode.QueueIndex = node.QueueIndex; + + node.QueueIndex = parent; + } + _nodes[node.QueueIndex] = node; + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void CascadeDown(TItem node) + { + //aka Heapify-down + int finalQueueIndex = node.QueueIndex; + int childLeftIndex = 2 * finalQueueIndex; + + // If leaf node, we're done + if(childLeftIndex > _numNodes) + { + return; + } + + // Check if the left-child is higher-priority than the current node + int childRightIndex = childLeftIndex + 1; + TItem childLeft = _nodes[childLeftIndex]; + if(HasHigherPriority(childLeft, node)) + { + // Check if there is a right child. If not, swap and finish. + if(childRightIndex > _numNodes) + { + node.QueueIndex = childLeftIndex; + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + _nodes[childLeftIndex] = node; + return; + } + // Check if the left-child is higher-priority than the right-child + TItem childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childLeft, childRight)) + { + // left is highest, move it up and continue + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + finalQueueIndex = childLeftIndex; + } + else + { + // right is even higher, move it up and continue + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + } + // Not swapping with left-child, does right-child exist? + else if(childRightIndex > _numNodes) + { + return; + } + else + { + // Check if the right-child is higher-priority than the current node + TItem childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childRight, node)) + { + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + // Neither child is higher-priority than current, so finish and stop. + else + { + return; + } + } + + while(true) + { + childLeftIndex = 2 * finalQueueIndex; + + // If leaf node, we're done + if(childLeftIndex > _numNodes) + { + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + + // Check if the left-child is higher-priority than the current node + childRightIndex = childLeftIndex + 1; + childLeft = _nodes[childLeftIndex]; + if(HasHigherPriority(childLeft, node)) + { + // Check if there is a right child. If not, swap and finish. + if(childRightIndex > _numNodes) + { + node.QueueIndex = childLeftIndex; + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + _nodes[childLeftIndex] = node; + break; + } + // Check if the left-child is higher-priority than the right-child + TItem childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childLeft, childRight)) + { + // left is highest, move it up and continue + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + finalQueueIndex = childLeftIndex; + } + else + { + // right is even higher, move it up and continue + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + } + // Not swapping with left-child, does right-child exist? + else if(childRightIndex > _numNodes) + { + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + else + { + // Check if the right-child is higher-priority than the current node + TItem childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childRight, node)) + { + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + // Neither child is higher-priority than current, so finish and stop. + else + { + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + } + } + } + + /// + /// Returns true if 'higher' has higher priority than 'lower', false otherwise. + /// Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private bool HasHigherPriority(TItem higher, TItem lower) + { + var cmp = _comparer(higher.Priority, lower.Priority); + return (cmp < 0 || (cmp == 0 && higher.InsertionIndex < lower.InsertionIndex)); + } + + /// + /// Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. + /// If queue is empty, result is undefined + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public TItem Dequeue() + { +#if DEBUG + if(_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + } + + if(!IsValidQueue()) + { + throw new InvalidOperationException("Queue has been corrupted (Did you update a node priority manually instead of calling UpdatePriority()?" + + "Or add the same node to two different queues?)"); + } +#endif + + TItem returnMe = _nodes[1]; + //If the node is already the last node, we can remove it immediately + if(_numNodes == 1) + { + _nodes[1] = null; + _numNodes = 0; + return returnMe; + } + + //Swap the node with the last node + TItem formerLastNode = _nodes[_numNodes]; + _nodes[1] = formerLastNode; + formerLastNode.QueueIndex = 1; + _nodes[_numNodes] = null; + _numNodes--; + + //Now bubble formerLastNode (which is no longer the last node) down + CascadeDown(formerLastNode); + return returnMe; + } + + /// + /// Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + /// Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior + /// O(n) + /// + public void Resize(int maxNodes) + { +#if DEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("Queue size cannot be smaller than 1"); + } + + if (maxNodes < _numNodes) + { + throw new InvalidOperationException("Called Resize(" + maxNodes + "), but current queue contains " + _numNodes + " nodes"); + } +#endif + + TItem[] newArray = new TItem[maxNodes + 1]; + int highestIndexToCopy = Math.Min(maxNodes, _numNodes); + Array.Copy(_nodes, newArray, highestIndexToCopy + 1); + _nodes = newArray; + } + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// If the queue is empty, behavior is undefined. + /// O(1) + /// + public TItem First + { + get + { +#if DEBUG + if(_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call .First on an empty queue"); + } +#endif + + return _nodes[1]; + } + } + + /// + /// This method must be called on a node every time its priority changes while it is in the queue. + /// Forgetting to call this method will result in a corrupted queue! + /// Calling this method on a node not in the queue results in undefined behavior + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void UpdatePriority(TItem node, TPriority priority) + { +#if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.UpdatePriority was called on a node from another queue"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call UpdatePriority() on a node which is not enqueued: " + node); + } +#endif + + node.Priority = priority; + OnNodeUpdated(node); + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void OnNodeUpdated(TItem node) + { + //Bubble the updated node up or down as appropriate + int parentIndex = node.QueueIndex >> 1; + + if(parentIndex > 0 && HasHigherPriority(node, _nodes[parentIndex])) + { + CascadeUp(node); + } + else + { + //Note that CascadeDown will be called if parentNode == node (that is, node is the root) + CascadeDown(node); + } + } + + /// + /// Removes a node from the queue. The node does not need to be the head of the queue. + /// If the node is not in the queue, the result is undefined. If unsure, check Contains() first + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Remove(TItem node) + { +#if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.Remove was called on a node from another queue"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call Remove() on a node which is not enqueued: " + node); + } +#endif + + //If the node is already the last node, we can remove it immediately + if(node.QueueIndex == _numNodes) + { + _nodes[_numNodes] = null; + _numNodes--; + return; + } + + //Swap the node with the last node + TItem formerLastNode = _nodes[_numNodes]; + _nodes[node.QueueIndex] = formerLastNode; + formerLastNode.QueueIndex = node.QueueIndex; + _nodes[_numNodes] = null; + _numNodes--; + + //Now bubble formerLastNode (which is no longer the last node) up or down as appropriate + OnNodeUpdated(formerLastNode); + } + + /// + /// By default, nodes that have been previously added to one queue cannot be added to another queue. + /// If you need to do this, please call originalQueue.ResetNode(node) before attempting to add it in the new queue + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void ResetNode(TItem node) + { +#if DEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.ResetNode was called on a node from another queue"); + } + if (Contains(node)) + { + throw new InvalidOperationException("node.ResetNode was called on a node that is still in the queue"); + } + + node.Queue = null; +#endif + + node.QueueIndex = 0; + } + + + public IEnumerator GetEnumerator() + { +#if NET_VERSION_4_5 // ArraySegment does not implement IEnumerable before 4.5 + IEnumerable e = new ArraySegment(_nodes, 1, _numNodes); + return e.GetEnumerator(); +#else + for(int i = 1; i <= _numNodes; i++) + yield return _nodes[i]; +#endif + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Should not be called in production code. + /// Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. + /// + public bool IsValidQueue() + { + for(int i = 1; i < _nodes.Length; i++) + { + if(_nodes[i] != null) + { + int childLeftIndex = 2 * i; + if(childLeftIndex < _nodes.Length && _nodes[childLeftIndex] != null && HasHigherPriority(_nodes[childLeftIndex], _nodes[i])) + return false; + + int childRightIndex = childLeftIndex + 1; + if(childRightIndex < _nodes.Length && _nodes[childRightIndex] != null && HasHigherPriority(_nodes[childRightIndex], _nodes[i])) + return false; + } + } + return true; + } + } +} diff --git a/Software/Visual_Studio/SideChains/Priority Queue/GenericPriorityQueueNode.cs b/Software/Visual_Studio/SideChains/Priority Queue/GenericPriorityQueueNode.cs new file mode 100644 index 000000000..5a53ed24e --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/GenericPriorityQueueNode.cs @@ -0,0 +1,29 @@ +namespace Priority_Queue +{ + public class GenericPriorityQueueNode + { + /// + /// The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, in the node's constructor). + /// Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead + /// + public TPriority Priority { get; protected internal set; } + + /// + /// Represents the current position in the queue + /// + public int QueueIndex { get; internal set; } + + /// + /// Represents the order the node was inserted in + /// + public long InsertionIndex { get; internal set; } + + +#if DEBUG + /// + /// The queue this node is tied to. Used only for debug builds. + /// + public object Queue { get; internal set; } +#endif + } +} diff --git a/Software/Visual_Studio/SideChains/Priority Queue/IFixedSizePriorityQueue.cs b/Software/Visual_Studio/SideChains/Priority Queue/IFixedSizePriorityQueue.cs new file mode 100644 index 000000000..e95f7c29b --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/IFixedSizePriorityQueue.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Priority_Queue +{ + /// + /// A helper-interface only needed to make writing unit tests a bit easier (hence the 'internal' access modifier) + /// + internal interface IFixedSizePriorityQueue : IPriorityQueue + where TPriority : IComparable + { + /// + /// Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + /// Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior + /// + void Resize(int maxNodes); + + /// + /// Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), + /// attempting to enqueue another item will cause undefined behavior. + /// + int MaxSize { get; } + + /// + /// By default, nodes that have been previously added to one queue cannot be added to another queue. + /// If you need to do this, please call originalQueue.ResetNode(node) before attempting to add it in the new queue + /// + void ResetNode(TItem node); + } +} diff --git a/Software/Visual_Studio/SideChains/Priority Queue/IPriorityQueue.cs b/Software/Visual_Studio/SideChains/Priority Queue/IPriorityQueue.cs new file mode 100644 index 000000000..a5053e955 --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/IPriorityQueue.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; + +namespace Priority_Queue +{ + /// + /// The IPriorityQueue interface. This is mainly here for purists, and in case I decide to add more implementations later. + /// For speed purposes, it is actually recommended that you *don't* access the priority queue through this interface, since the JIT can + /// (theoretically?) optimize method calls from concrete-types slightly better. + /// + public interface IPriorityQueue : IEnumerable + where TPriority : IComparable + { + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. + /// See implementation for how duplicates are handled. + /// + void Enqueue(TItem node, TPriority priority); + + /// + /// Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. + /// + TItem Dequeue(); + + /// + /// Removes every node from the queue. + /// + void Clear(); + + /// + /// Returns whether the given node is in the queue. + /// + bool Contains(TItem node); + + /// + /// Removes a node from the queue. The node does not need to be the head of the queue. + /// + void Remove(TItem node); + + /// + /// Call this method to change the priority of a node. + /// + void UpdatePriority(TItem node, TPriority priority); + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// + TItem First { get; } + + /// + /// Returns the number of nodes in the queue. + /// + int Count { get; } + } +} diff --git a/Software/Visual_Studio/SideChains/Priority Queue/Priority Queue.csproj b/Software/Visual_Studio/SideChains/Priority Queue/Priority Queue.csproj new file mode 100644 index 000000000..8b02157f1 --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/Priority Queue.csproj @@ -0,0 +1,89 @@ + + + + + Debug + AnyCPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651} + Library + Properties + Priority_Queue + Priority Queue + v4.6.1 + 512 + NET_VERSION_4_5 + $(DefineConstants);$(CustomConstants) + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + NET_VERSION_4_5 + $(DefineConstants);$(CustomConstants) + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + NET_VERSION_4_5 + $(DefineConstants);$(CustomConstants) + false + + + pdbonly + true + TRACE;NET_VERSION_4_5 + prompt + 4 + false + bin\Release\net45\ + v4.5 + bin\Release\net45\Priority Queue.xml + + + pdbonly + true + TRACE + prompt + 4 + false + bin\Release\net20\ + v2.0 + bin\Release\net20\Priority Queue.xml + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/SideChains/Priority Queue/Priority Queue.nuspec b/Software/Visual_Studio/SideChains/Priority Queue/Priority Queue.nuspec new file mode 100644 index 000000000..94ab70f4d --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/Priority Queue.nuspec @@ -0,0 +1,42 @@ + + + + OptimizedPriorityQueue + 4.2.0 + Highly Optimized Priority Queue + BlueRaja + BlueRaja + https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/blob/master/LICENSE.txt + https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp + false + A highly optimized Priority Queue for path-finding and related applications + Speed improvements; added ResetNode(); included IEqualityComparer in SimplePriorityQueue to avoid boxing + Copyright 2018 + C# priority-queue pathfinding optimized + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/Visual_Studio/SideChains/Priority Queue/Properties/AssemblyInfo.cs b/Software/Visual_Studio/SideChains/Priority Queue/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..7143261f2 --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Highly Optimized Priority Queue")] +[assembly: AssemblyDescription("A highly optimized Priority Queue for path-finding and related applications")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Highly Optimized Priority Queue")] +[assembly: AssemblyCopyright("Copyright © BlueRaja 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3eee6b54-af8a-494b-9121-3d46ed09a58b")] + +[assembly: InternalsVisibleToAttribute("Priority Queue Tests")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("4.2.0")] +[assembly: AssemblyFileVersion("4.2.0")] \ No newline at end of file diff --git a/Software/Visual_Studio/SideChains/Priority Queue/SimplePriorityQueue.cs b/Software/Visual_Studio/SideChains/Priority Queue/SimplePriorityQueue.cs new file mode 100644 index 000000000..0d35ff1ac --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/SimplePriorityQueue.cs @@ -0,0 +1,588 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Priority_Queue +{ + /// + /// A simplified priority queue implementation. Is stable, auto-resizes, and thread-safe, at the cost of being slightly slower than + /// FastPriorityQueue + /// Methods tagged as O(1) or O(log n) are assuming there are no duplicates. Duplicates may increase the algorithmic complexity. + /// + /// The type to enqueue + /// The priority-type to use for nodes. Must extend IComparable<TPriority> + public class SimplePriorityQueue : IPriorityQueue + where TPriority : IComparable + { + private class SimpleNode : GenericPriorityQueueNode + { + public TItem Data { get; private set; } + + public SimpleNode(TItem data) + { + Data = data; + } + } + + private const int INITIAL_QUEUE_SIZE = 10; + private readonly GenericPriorityQueue _queue; + private readonly Dictionary> _itemToNodesCache; + private readonly IList _nullNodesCache; + + #region Constructors + /// + /// Instantiate a new Priority Queue + /// + public SimplePriorityQueue() : this(Comparer.Default, EqualityComparer.Default) { } + + /// + /// Instantiate a new Priority Queue + /// + /// The comparer used to compare TPriority values. Defaults to Comparer<TPriority>.default + public SimplePriorityQueue(IComparer priorityComparer) : this(priorityComparer.Compare, EqualityComparer.Default) { } + + /// + /// Instantiate a new Priority Queue + /// + /// The comparison function to use to compare TPriority values + public SimplePriorityQueue(Comparison priorityComparer) : this(priorityComparer, EqualityComparer.Default) { } + + /// + /// Instantiate a new Priority Queue + /// + /// The equality comparison function to use to compare TItem values + public SimplePriorityQueue(IEqualityComparer itemEquality) : this(Comparer.Default, itemEquality) { } + + /// + /// Instantiate a new Priority Queue + /// + /// The comparer used to compare TPriority values. Defaults to Comparer<TPriority>.default + /// The equality comparison function to use to compare TItem values + public SimplePriorityQueue(IComparer priorityComparer, IEqualityComparer itemEquality) : this(priorityComparer.Compare, itemEquality) { } + + /// + /// Instantiate a new Priority Queue + /// + /// The comparison function to use to compare TPriority values + /// The equality comparison function to use to compare TItem values + public SimplePriorityQueue(Comparison priorityComparer, IEqualityComparer itemEquality) + { + _queue = new GenericPriorityQueue(INITIAL_QUEUE_SIZE, priorityComparer); + _itemToNodesCache = new Dictionary>(itemEquality); + _nullNodesCache = new List(); + } + #endregion + + /// + /// Given an item of type T, returns the existing SimpleNode in the queue + /// + private SimpleNode GetExistingNode(TItem item) + { + if (item == null) + { + return _nullNodesCache.Count > 0 ? _nullNodesCache[0] : null; + } + + IList nodes; + if (!_itemToNodesCache.TryGetValue(item, out nodes)) + { + return null; + } + return nodes[0]; + } + + /// + /// Adds an item to the Node-cache to allow for many methods to be O(1) or O(log n) + /// + private void AddToNodeCache(SimpleNode node) + { + if (node.Data == null) + { + _nullNodesCache.Add(node); + return; + } + + IList nodes; + if (!_itemToNodesCache.TryGetValue(node.Data, out nodes)) + { + nodes = new List(); + _itemToNodesCache[node.Data] = nodes; + } + nodes.Add(node); + } + + /// + /// Removes an item to the Node-cache to allow for many methods to be O(1) or O(log n) (assuming no duplicates) + /// + private void RemoveFromNodeCache(SimpleNode node) + { + if (node.Data == null) + { + _nullNodesCache.Remove(node); + return; + } + + IList nodes; + if (!_itemToNodesCache.TryGetValue(node.Data, out nodes)) + { + return; + } + nodes.Remove(node); + if (nodes.Count == 0) + { + _itemToNodesCache.Remove(node.Data); + } + } + + /// + /// Returns the number of nodes in the queue. + /// O(1) + /// + public int Count + { + get + { + lock(_queue) + { + return _queue.Count; + } + } + } + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// Throws an exception when the queue is empty. + /// O(1) + /// + public TItem First + { + get + { + lock(_queue) + { + if(_queue.Count <= 0) + { + throw new InvalidOperationException("Cannot call .First on an empty queue"); + } + + return _queue.First.Data; + } + } + } + + /// + /// Removes every node from the queue. + /// O(n) + /// + public void Clear() + { + lock(_queue) + { + _queue.Clear(); + _itemToNodesCache.Clear(); + _nullNodesCache.Clear(); + } + } + + /// + /// Returns whether the given item is in the queue. + /// O(1) + /// + public bool Contains(TItem item) + { + lock(_queue) + { + return item == null ? _nullNodesCache.Count > 0 : _itemToNodesCache.ContainsKey(item); + } + } + + /// + /// Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. + /// If queue is empty, throws an exception + /// O(log n) + /// + public TItem Dequeue() + { + lock(_queue) + { + if(_queue.Count <= 0) + { + throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + } + + SimpleNode node =_queue.Dequeue(); + RemoveFromNodeCache(node); + return node.Data; + } + } + + /// + /// Enqueue the item with the given priority, without calling lock(_queue) or AddToNodeCache(node) + /// + /// + /// + /// + private SimpleNode EnqueueNoLockOrCache(TItem item, TPriority priority) + { + SimpleNode node = new SimpleNode(item); + if (_queue.Count == _queue.MaxSize) + { + _queue.Resize(_queue.MaxSize * 2 + 1); + } + _queue.Enqueue(node, priority); + return node; + } + + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. + /// This queue automatically resizes itself, so there's no concern of the queue becoming 'full'. + /// Duplicates and null-values are allowed. + /// O(log n) + /// + public void Enqueue(TItem item, TPriority priority) + { + lock(_queue) + { + IList nodes; + if (item == null) + { + nodes = _nullNodesCache; + } + else if (!_itemToNodesCache.TryGetValue(item, out nodes)) + { + nodes = new List(); + _itemToNodesCache[item] = nodes; + } + SimpleNode node = EnqueueNoLockOrCache(item, priority); + nodes.Add(node); + } + } + + /// + /// Enqueue a node to the priority queue if it doesn't already exist. Lower values are placed in front. Ties are broken by first-in-first-out. + /// This queue automatically resizes itself, so there's no concern of the queue becoming 'full'. Null values are allowed. + /// Returns true if the node was successfully enqueued; false if it already exists. + /// O(log n) + /// + public bool EnqueueWithoutDuplicates(TItem item, TPriority priority) + { + lock(_queue) + { + IList nodes; + if (item == null) + { + if (_nullNodesCache.Count > 0) + { + return false; + } + nodes = _nullNodesCache; + } + else if (_itemToNodesCache.ContainsKey(item)) + { + return false; + } + else + { + nodes = new List(); + _itemToNodesCache[item] = nodes; + } + SimpleNode node = EnqueueNoLockOrCache(item, priority); + nodes.Add(node); + return true; + } + } + + /// + /// Removes an item from the queue. The item does not need to be the head of the queue. + /// If the item is not in the queue, an exception is thrown. If unsure, check Contains() first. + /// If multiple copies of the item are enqueued, only the first one is removed. + /// O(log n) + /// + public void Remove(TItem item) + { + lock(_queue) + { + SimpleNode removeMe; + IList nodes; + if (item == null) + { + if (_nullNodesCache.Count == 0) + { + throw new InvalidOperationException("Cannot call Remove() on a node which is not enqueued: " + item); + } + removeMe = _nullNodesCache[0]; + nodes = _nullNodesCache; + } + else + { + if (!_itemToNodesCache.TryGetValue(item, out nodes)) + { + throw new InvalidOperationException("Cannot call Remove() on a node which is not enqueued: " + item); + } + removeMe = nodes[0]; + if (nodes.Count == 1) + { + _itemToNodesCache.Remove(item); + } + } + _queue.Remove(removeMe); + nodes.Remove(removeMe); + } + } + + /// + /// Call this method to change the priority of an item. + /// Calling this method on a item not in the queue will throw an exception. + /// If the item is enqueued multiple times, only the first one will be updated. + /// (If your requirements are complex enough that you need to enqueue the same item multiple times and be able + /// to update all of them, please wrap your items in a wrapper class so they can be distinguished). + /// O(log n) + /// + public void UpdatePriority(TItem item, TPriority priority) + { + lock (_queue) + { + SimpleNode updateMe = GetExistingNode(item); + if (updateMe == null) + { + throw new InvalidOperationException("Cannot call UpdatePriority() on a node which is not enqueued: " + item); + } + _queue.UpdatePriority(updateMe, priority); + } + } + + /// + /// Returns the priority of the given item. + /// Calling this method on a item not in the queue will throw an exception. + /// If the item is enqueued multiple times, only the priority of the first will be returned. + /// (If your requirements are complex enough that you need to enqueue the same item multiple times and be able + /// to query all their priorities, please wrap your items in a wrapper class so they can be distinguished). + /// O(1) + /// + public TPriority GetPriority(TItem item) + { + lock (_queue) + { + SimpleNode findMe = GetExistingNode(item); + if(findMe == null) + { + throw new InvalidOperationException("Cannot call GetPriority() on a node which is not enqueued: " + item); + } + return findMe.Priority; + } + } + + #region Try* methods for multithreading + /// Get the head of the queue, without removing it (use TryDequeue() for that). + /// Useful for multi-threading, where the queue may become empty between calls to Contains() and First + /// Returns true if successful, false otherwise + /// O(1) + public bool TryFirst(out TItem first) + { + if (_queue.Count > 0) + { + lock (_queue) + { + if (_queue.Count > 0) + { + first = _queue.First.Data; + return true; + } + } + } + + first = default(TItem); + return false; + } + + /// + /// Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and sets it to first. + /// Useful for multi-threading, where the queue may become empty between calls to Contains() and Dequeue() + /// Returns true if successful; false if queue was empty + /// O(log n) + /// + public bool TryDequeue(out TItem first) + { + if (_queue.Count > 0) + { + lock (_queue) + { + if (_queue.Count > 0) + { + SimpleNode node = _queue.Dequeue(); + first = node.Data; + RemoveFromNodeCache(node); + return true; + } + } + } + + first = default(TItem); + return false; + } + + /// + /// Attempts to remove an item from the queue. The item does not need to be the head of the queue. + /// Useful for multi-threading, where the queue may become empty between calls to Contains() and Remove() + /// Returns true if the item was successfully removed, false if it wasn't in the queue. + /// If multiple copies of the item are enqueued, only the first one is removed. + /// O(log n) + /// + public bool TryRemove(TItem item) + { + lock(_queue) + { + SimpleNode removeMe; + IList nodes; + if (item == null) + { + if (_nullNodesCache.Count == 0) + { + return false; + } + removeMe = _nullNodesCache[0]; + nodes = _nullNodesCache; + } + else + { + if (!_itemToNodesCache.TryGetValue(item, out nodes)) + { + return false; + } + removeMe = nodes[0]; + if (nodes.Count == 1) + { + _itemToNodesCache.Remove(item); + } + } + _queue.Remove(removeMe); + nodes.Remove(removeMe); + return true; + } + } + + /// + /// Call this method to change the priority of an item. + /// Useful for multi-threading, where the queue may become empty between calls to Contains() and UpdatePriority() + /// If the item is enqueued multiple times, only the first one will be updated. + /// (If your requirements are complex enough that you need to enqueue the same item multiple times and be able + /// to update all of them, please wrap your items in a wrapper class so they can be distinguished). + /// Returns true if the item priority was updated, false otherwise. + /// O(log n) + /// + public bool TryUpdatePriority(TItem item, TPriority priority) + { + lock(_queue) + { + SimpleNode updateMe = GetExistingNode(item); + if(updateMe == null) + { + return false; + } + _queue.UpdatePriority(updateMe, priority); + return true; + } + } + + /// + /// Attempt to get the priority of the given item. + /// Useful for multi-threading, where the queue may become empty between calls to Contains() and GetPriority() + /// If the item is enqueued multiple times, only the priority of the first will be returned. + /// (If your requirements are complex enough that you need to enqueue the same item multiple times and be able + /// to query all their priorities, please wrap your items in a wrapper class so they can be distinguished). + /// Returns true if the item was found in the queue, false otherwise + /// O(1) + /// + public bool TryGetPriority(TItem item, out TPriority priority) + { + lock(_queue) + { + SimpleNode findMe = GetExistingNode(item); + if(findMe == null) + { + priority = default(TPriority); + return false; + } + priority = findMe.Priority; + return true; + } + } + #endregion + + public IEnumerator GetEnumerator() + { + List queueData = new List(); + lock (_queue) + { + //Copy to a separate list because we don't want to 'yield return' inside a lock + foreach(var node in _queue) + { + queueData.Add(node.Data); + } + } + + return queueData.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public bool IsValidQueue() + { + lock(_queue) + { + // Check all items in cache are in the queue + foreach (IList nodes in _itemToNodesCache.Values) + { + foreach (SimpleNode node in nodes) + { + if (!_queue.Contains(node)) + { + return false; + } + } + } + + // Check all items in queue are in cache + foreach (SimpleNode node in _queue) + { + if (GetExistingNode(node.Data) == null) + { + return false; + } + } + + // Check queue structure itself + return _queue.IsValidQueue(); + } + } + } + + /// + /// A simplified priority queue implementation. Is stable, auto-resizes, and thread-safe, at the cost of being slightly slower than + /// FastPriorityQueue + /// This class is kept here for backwards compatibility. It's recommended you use SimplePriorityQueue<TItem, TPriority> + /// + /// The type to enqueue + public class SimplePriorityQueue : SimplePriorityQueue + { + /// + /// Instantiate a new Priority Queue + /// + public SimplePriorityQueue() { } + + /// + /// Instantiate a new Priority Queue + /// + /// The comparer used to compare priority values. Defaults to Comparer<float>.default + public SimplePriorityQueue(IComparer comparer) : base(comparer) { } + + /// + /// Instantiate a new Priority Queue + /// + /// The comparison function to use to compare priority values + public SimplePriorityQueue(Comparison comparer) : base(comparer) { } + } +} \ No newline at end of file diff --git a/Software/Visual_Studio/SideChains/Priority Queue/StablePriorityQueue.cs b/Software/Visual_Studio/SideChains/Priority Queue/StablePriorityQueue.cs new file mode 100644 index 000000000..442b2dbcc --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/StablePriorityQueue.cs @@ -0,0 +1,587 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace Priority_Queue +{ + /// + /// A copy of FastPriorityQueue which is also stable - that is, when two nodes are enqueued with the same priority, they + /// are always dequeued in the same order. + /// See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more information + /// + /// The values in the queue. Must extend the StablePriorityQueueNode class + public sealed class StablePriorityQueue : IFixedSizePriorityQueue + where T : StablePriorityQueueNode + { + private int _numNodes; + private T[] _nodes; + private long _numNodesEverEnqueued; + + /// + /// Instantiate a new Priority Queue + /// + /// The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) + public StablePriorityQueue(int maxNodes) + { + #if DEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("New queue size cannot be smaller than 1"); + } + #endif + + _numNodes = 0; + _nodes = new T[maxNodes + 1]; + _numNodesEverEnqueued = 0; + } + + /// + /// Returns the number of nodes in the queue. + /// O(1) + /// + public int Count + { + get + { + return _numNodes; + } + } + + /// + /// Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), + /// attempting to enqueue another item will cause undefined behavior. O(1) + /// + public int MaxSize + { + get + { + return _nodes.Length - 1; + } + } + + /// + /// Removes every node from the queue. + /// O(n) (So, don't do this often!) + /// + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + public void Clear() + { + Array.Clear(_nodes, 1, _numNodes); + _numNodes = 0; + } + + /// + /// Returns (in O(1)!) whether the given node is in the queue. + /// If node is or has been previously added to another queue, the result is undefined unless oldQueue.ResetNode(node) has been called + /// O(1) + /// + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + public bool Contains(T node) + { + #if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.Contains was called on a node from another queue. Please call originalQueue.ResetNode() first"); + } + if (node.QueueIndex < 0 || node.QueueIndex >= _nodes.Length) + { + throw new InvalidOperationException("node.QueueIndex has been corrupted. Did you change it manually?"); + } + #endif + + return (_nodes[node.QueueIndex] == node); + } + + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. + /// If the queue is full, the result is undefined. + /// If the node is already enqueued, the result is undefined. + /// If node is or has been previously added to another queue, the result is undefined unless oldQueue.ResetNode(node) has been called + /// O(log n) + /// + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + public void Enqueue(T node, float priority) + { + #if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if(_numNodes >= _nodes.Length - 1) + { + throw new InvalidOperationException("Queue is full - node cannot be added: " + node); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.Enqueue was called on a node from another queue. Please call originalQueue.ResetNode() first"); + } + if (Contains(node)) + { + throw new InvalidOperationException("Node is already enqueued: " + node); + } + node.Queue = this; + #endif + + node.Priority = priority; + _numNodes++; + _nodes[_numNodes] = node; + node.QueueIndex = _numNodes; + node.InsertionIndex = _numNodesEverEnqueued++; + CascadeUp(node); + } + + //Performance appears to be slightly better when this is NOT inlined o_O + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + private void CascadeUp(T node) + { + //aka Heapify-up + int parent; + if(node.QueueIndex > 1) + { + parent = node.QueueIndex >> 1; + T parentNode = _nodes[parent]; + if(HasHigherPriority(parentNode, node)) + return; + + //Node has lower priority value, so move parent down the heap to make room + _nodes[node.QueueIndex] = parentNode; + parentNode.QueueIndex = node.QueueIndex; + + node.QueueIndex = parent; + } + else + { + return; + } + while(parent > 1) + { + parent >>= 1; + T parentNode = _nodes[parent]; + if(HasHigherPriority(parentNode, node)) + break; + + //Node has lower priority value, so move parent down the heap to make room + _nodes[node.QueueIndex] = parentNode; + parentNode.QueueIndex = node.QueueIndex; + + node.QueueIndex = parent; + } + _nodes[node.QueueIndex] = node; + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void CascadeDown(T node) + { + //aka Heapify-down + int finalQueueIndex = node.QueueIndex; + int childLeftIndex = 2 * finalQueueIndex; + + // If leaf node, we're done + if(childLeftIndex > _numNodes) + { + return; + } + + // Check if the left-child is higher-priority than the current node + int childRightIndex = childLeftIndex + 1; + T childLeft = _nodes[childLeftIndex]; + if(HasHigherPriority(childLeft, node)) + { + // Check if there is a right child. If not, swap and finish. + if(childRightIndex > _numNodes) + { + node.QueueIndex = childLeftIndex; + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + _nodes[childLeftIndex] = node; + return; + } + // Check if the left-child is higher-priority than the right-child + T childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childLeft, childRight)) + { + // left is highest, move it up and continue + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + finalQueueIndex = childLeftIndex; + } + else + { + // right is even higher, move it up and continue + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + } + // Not swapping with left-child, does right-child exist? + else if(childRightIndex > _numNodes) + { + return; + } + else + { + // Check if the right-child is higher-priority than the current node + T childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childRight, node)) + { + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + // Neither child is higher-priority than current, so finish and stop. + else + { + return; + } + } + + while(true) + { + childLeftIndex = 2 * finalQueueIndex; + + // If leaf node, we're done + if(childLeftIndex > _numNodes) + { + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + + // Check if the left-child is higher-priority than the current node + childRightIndex = childLeftIndex + 1; + childLeft = _nodes[childLeftIndex]; + if(HasHigherPriority(childLeft, node)) + { + // Check if there is a right child. If not, swap and finish. + if(childRightIndex > _numNodes) + { + node.QueueIndex = childLeftIndex; + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + _nodes[childLeftIndex] = node; + break; + } + // Check if the left-child is higher-priority than the right-child + T childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childLeft, childRight)) + { + // left is highest, move it up and continue + childLeft.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childLeft; + finalQueueIndex = childLeftIndex; + } + else + { + // right is even higher, move it up and continue + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + } + // Not swapping with left-child, does right-child exist? + else if(childRightIndex > _numNodes) + { + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + else + { + // Check if the right-child is higher-priority than the current node + T childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childRight, node)) + { + childRight.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = childRight; + finalQueueIndex = childRightIndex; + } + // Neither child is higher-priority than current, so finish and stop. + else + { + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + } + } + } + + /// + /// Returns true if 'higher' has higher priority than 'lower', false otherwise. + /// Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + private bool HasHigherPriority(T higher, T lower) + { + return (higher.Priority < lower.Priority || + (higher.Priority == lower.Priority && higher.InsertionIndex < lower.InsertionIndex)); + } + + /// + /// Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. + /// If queue is empty, result is undefined + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public T Dequeue() + { + #if DEBUG + if(_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + } + + if(!IsValidQueue()) + { + throw new InvalidOperationException("Queue has been corrupted (Did you update a node priority manually instead of calling UpdatePriority()?" + + "Or add the same node to two different queues?)"); + } + #endif + + T returnMe = _nodes[1]; + //If the node is already the last node, we can remove it immediately + if(_numNodes == 1) + { + _nodes[1] = null; + _numNodes = 0; + return returnMe; + } + + //Swap the node with the last node + T formerLastNode = _nodes[_numNodes]; + _nodes[1] = formerLastNode; + formerLastNode.QueueIndex = 1; + _nodes[_numNodes] = null; + _numNodes--; + + //Now bubble formerLastNode (which is no longer the last node) down + CascadeDown(formerLastNode); + return returnMe; + } + + /// + /// Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + /// Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior + /// O(n) + /// + public void Resize(int maxNodes) + { + #if DEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("Queue size cannot be smaller than 1"); + } + + if (maxNodes < _numNodes) + { + throw new InvalidOperationException("Called Resize(" + maxNodes + "), but current queue contains " + _numNodes + " nodes"); + } + #endif + + T[] newArray = new T[maxNodes + 1]; + int highestIndexToCopy = Math.Min(maxNodes, _numNodes); + Array.Copy(_nodes, newArray, highestIndexToCopy + 1); + _nodes = newArray; + } + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// If the queue is empty, behavior is undefined. + /// O(1) + /// + public T First + { + get + { + #if DEBUG + if(_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call .First on an empty queue"); + } + #endif + + return _nodes[1]; + } + } + + /// + /// This method must be called on a node every time its priority changes while it is in the queue. + /// Forgetting to call this method will result in a corrupted queue! + /// Calling this method on a node not in the queue results in undefined behavior + /// O(log n) + /// + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + public void UpdatePriority(T node, float priority) + { + #if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.UpdatePriority was called on a node from another queue"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call UpdatePriority() on a node which is not enqueued: " + node); + } + #endif + + node.Priority = priority; + OnNodeUpdated(node); + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void OnNodeUpdated(T node) + { + //Bubble the updated node up or down as appropriate + int parentIndex = node.QueueIndex >> 1; + + if(parentIndex > 0 && HasHigherPriority(node, _nodes[parentIndex])) + { + CascadeUp(node); + } + else + { + //Note that CascadeDown will be called if parentNode == node (that is, node is the root) + CascadeDown(node); + } + } + + /// + /// Removes a node from the queue. The node does not need to be the head of the queue. + /// If the node is not in the queue, the result is undefined. If unsure, check Contains() first + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Remove(T node) + { +#if DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.Remove was called on a node from another queue"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call Remove() on a node which is not enqueued: " + node); + } +#endif + + //If the node is already the last node, we can remove it immediately + if(node.QueueIndex == _numNodes) + { + _nodes[_numNodes] = null; + _numNodes--; + return; + } + + //Swap the node with the last node + T formerLastNode = _nodes[_numNodes]; + _nodes[node.QueueIndex] = formerLastNode; + formerLastNode.QueueIndex = node.QueueIndex; + _nodes[_numNodes] = null; + _numNodes--; + + //Now bubble formerLastNode (which is no longer the last node) up or down as appropriate + OnNodeUpdated(formerLastNode); + } + + /// + /// By default, nodes that have been previously added to one queue cannot be added to another queue. + /// If you need to do this, please call originalQueue.ResetNode(node) before attempting to add it in the new queue + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void ResetNode(T node) + { +#if DEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (node.Queue != null && !Equals(node.Queue)) + { + throw new InvalidOperationException("node.ResetNode was called on a node from another queue"); + } + if (Contains(node)) + { + throw new InvalidOperationException("node.ResetNode was called on a node that is still in the queue"); + } + + node.Queue = null; +#endif + + node.QueueIndex = 0; + } + + + public IEnumerator GetEnumerator() + { +#if NET_VERSION_4_5 // ArraySegment does not implement IEnumerable before 4.5 + IEnumerable e = new ArraySegment(_nodes, 1, _numNodes); + return e.GetEnumerator(); +#else + for(int i = 1; i <= _numNodes; i++) + yield return _nodes[i]; +#endif + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Should not be called in production code. + /// Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. + /// + public bool IsValidQueue() + { + for(int i = 1; i < _nodes.Length; i++) + { + if(_nodes[i] != null) + { + int childLeftIndex = 2 * i; + if(childLeftIndex < _nodes.Length && _nodes[childLeftIndex] != null && HasHigherPriority(_nodes[childLeftIndex], _nodes[i])) + return false; + + int childRightIndex = childLeftIndex + 1; + if(childRightIndex < _nodes.Length && _nodes[childRightIndex] != null && HasHigherPriority(_nodes[childRightIndex], _nodes[i])) + return false; + } + } + return true; + } + } +} \ No newline at end of file diff --git a/Software/Visual_Studio/SideChains/Priority Queue/StablePriorityQueueNode.cs b/Software/Visual_Studio/SideChains/Priority Queue/StablePriorityQueueNode.cs new file mode 100644 index 000000000..c794aa0d0 --- /dev/null +++ b/Software/Visual_Studio/SideChains/Priority Queue/StablePriorityQueueNode.cs @@ -0,0 +1,10 @@ +namespace Priority_Queue +{ + public class StablePriorityQueueNode : FastPriorityQueueNode + { + /// + /// Represents the order the node was inserted in + /// + public long InsertionIndex { get; internal set; } + } +} diff --git a/Software/Visual_Studio/Tango.Core/PriorityProducerConsumerQueue.cs b/Software/Visual_Studio/Tango.Core/PriorityProducerConsumerQueue.cs new file mode 100644 index 000000000..dcc71a4ef --- /dev/null +++ b/Software/Visual_Studio/Tango.Core/PriorityProducerConsumerQueue.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Core +{ + public enum QueuePriority + { + Standard, + High, + Low + } + + public class PriorityProducerConsumerQueue + { + private ProducerConsumerQueue _lowPriorityCollection; + private ProducerConsumerQueue _standardPriorityCollection; + private ProducerConsumerQueue _highPriorityCollection; + private ProducerConsumerQueue[] _collections; + + public PriorityProducerConsumerQueue() + { + _lowPriorityCollection = new ProducerConsumerQueue(); + _standardPriorityCollection = new ProducerConsumerQueue(); + _highPriorityCollection = new ProducerConsumerQueue(); + _collections = new ProducerConsumerQueue[] { _highPriorityCollection, _standardPriorityCollection, _lowPriorityCollection }; + } + + /// + /// Enqueues the specified item. + /// + /// The item. + public void BlockEnqueue(T item, QueuePriority priority = QueuePriority.Standard) + { + switch (priority) + { + case QueuePriority.Low: + _lowPriorityCollection.Add(item); + break; + case QueuePriority.Standard: + _standardPriorityCollection.Add(item); + break; + case QueuePriority.High: + _highPriorityCollection.Add(item); + break; + } + } + + /// + /// Blocks until an item is available for dequeuing. + /// + /// + public T BlockDequeue() + { + T item; + int index = BlockingCollection.TakeFromAny(_collections, out item); + return item; + } + } +} diff --git a/Software/Visual_Studio/Tango.Core/Tango.Core.csproj b/Software/Visual_Studio/Tango.Core/Tango.Core.csproj index b4496a368..d37259b58 100644 --- a/Software/Visual_Studio/Tango.Core/Tango.Core.csproj +++ b/Software/Visual_Studio/Tango.Core/Tango.Core.csproj @@ -98,6 +98,7 @@ + @@ -207,7 +208,7 @@ - + diff --git a/Software/Visual_Studio/Tango.Transport/TransportMessageBase.cs b/Software/Visual_Studio/Tango.Transport/TransportMessageBase.cs index 7e22c7b46..d35ad108f 100644 --- a/Software/Visual_Studio/Tango.Transport/TransportMessageBase.cs +++ b/Software/Visual_Studio/Tango.Transport/TransportMessageBase.cs @@ -17,6 +17,8 @@ namespace Tango.Transport public String TransportComponentName { get; set; } + public QueuePriority Priority { get; set; } + /// /// Gets or sets a value indicating whether this instance is multi response. /// diff --git a/Software/Visual_Studio/Tango.Transport/TransportRequestConfig.cs b/Software/Visual_Studio/Tango.Transport/TransportRequestConfig.cs index 255a566a7..3910745dc 100644 --- a/Software/Visual_Studio/Tango.Transport/TransportRequestConfig.cs +++ b/Software/Visual_Studio/Tango.Transport/TransportRequestConfig.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.Core; namespace Tango.Transport { @@ -11,5 +12,6 @@ namespace Tango.Transport public TimeSpan? Timeout { get; set; } public bool ShouldLog { get; set; } public bool Immediate { get; set; } + public QueuePriority Priority { get; set; } } } diff --git a/Software/Visual_Studio/Tango.Transport/TransportResponseConfig.cs b/Software/Visual_Studio/Tango.Transport/TransportResponseConfig.cs index 44115d99a..79940757d 100644 --- a/Software/Visual_Studio/Tango.Transport/TransportResponseConfig.cs +++ b/Software/Visual_Studio/Tango.Transport/TransportResponseConfig.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.Core; using Tango.PMR.Common; namespace Tango.Transport @@ -14,5 +15,6 @@ namespace Tango.Transport public String ErrorMessage { get; set; } public bool ShouldLog { get; set; } public bool Immediate { get; set; } + public QueuePriority Priority { get; set; } } } diff --git a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs index 73f573fc7..3672baf63 100644 --- a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs +++ b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs @@ -41,7 +41,7 @@ namespace Tango.Transport } private const int MESSAGE_TOKEN_LENGTH = 36; - private ProducerConsumerQueue _sendingQueue; + private PriorityProducerConsumerQueue _sendingQueue; private ConcurrentList _pendingRequests; private ProducerConsumerQueue _arrivedResponses; private Thread _pushThread; @@ -202,7 +202,7 @@ namespace Tango.Transport _pendingRequests.Clear(); _pendingResponses.Clear(); _arrivedResponses = new ProducerConsumerQueue(); - _sendingQueue = new ProducerConsumerQueue(); + _sendingQueue = new PriorityProducerConsumerQueue(); } if (oldAdapter != null) @@ -457,7 +457,7 @@ namespace Tango.Transport ComponentName = "Not Set"; Encoder = new ProtoEncoder(); _pendingResponses = new Dictionary(); - _sendingQueue = new ProducerConsumerQueue(); + _sendingQueue = new PriorityProducerConsumerQueue(); _pendingRequests = new ConcurrentList(); _arrivedResponses = new ProducerConsumerQueue(); _requestHandlers = new List(); @@ -485,7 +485,7 @@ namespace Tango.Transport /// public void ClearQueues() { - _sendingQueue = new ProducerConsumerQueue(); + _sendingQueue = new PriorityProducerConsumerQueue(); _pendingRequests = new ConcurrentList(); _arrivedResponses = new ProducerConsumerQueue(); } @@ -559,6 +559,7 @@ namespace Tango.Transport TransportMessage message = new TransportMessage(container.Token, request, TransportMessageDirection.Request, () => container.ToByteArray(), source); message.ShouldLog = config.ShouldLog; message.Immidiate = config.Immediate; + message.Priority = config.Priority; message.TransportComponentName = GetExtendedComponentName(); message.ActivateTimeout = () => @@ -608,6 +609,7 @@ namespace Tango.Transport TransportMessage message = new TransportMessage(container.Token, container, TransportMessageDirection.Request, () => container.ToByteArray(), source); message.ShouldLog = config.ShouldLog; message.Immidiate = config.Immediate; + message.Priority = config.Priority; message.TransportComponentName = GetExtendedComponentName(); message.ActivateTimeout = () => @@ -659,6 +661,7 @@ namespace Tango.Transport TransportMessage> message = new TransportMessage>(request.Container.Token, request, TransportMessageDirection.Request, () => Encoder.Encode(request), source); message.ShouldLog = config.ShouldLog; message.Immidiate = config.Immediate; + message.Priority = config.Priority; message.TransportComponentName = GetExtendedComponentName(); message.ActivateTimeout = () => @@ -719,6 +722,7 @@ namespace Tango.Transport ContinuesResponseSubject = subject, ShouldLog = config.ShouldLog, Immidiate = config.Immediate, + Priority = config.Priority, TransportComponentName = GetExtendedComponentName(), }; @@ -781,6 +785,7 @@ namespace Tango.Transport ContinuesResponseSubject = subject, ShouldLog = config.ShouldLog, Immidiate = config.Immediate, + Priority = config.Priority, TransportComponentName = GetExtendedComponentName(), }; @@ -863,6 +868,7 @@ namespace Tango.Transport ContinuesResponseSubject = subject, ShouldLog = config.ShouldLog, Immidiate = config.Immediate, + Priority = config.Priority, TransportComponentName = GetExtendedComponentName(), }; @@ -1176,6 +1182,7 @@ namespace Tango.Transport TransportMessage message = new TransportMessage(token, response, TransportMessageDirection.Response, () => Encoder.Encode(response), source); message.ShouldLog = config.ShouldLog; message.Immidiate = config.Immediate; + message.Priority = config.Priority; EnqueueMessageOut(message); return source.Task; } @@ -1278,7 +1285,7 @@ namespace Tango.Transport /// The message. private void EnqueueMessageOut(TransportMessageBase message) { - _sendingQueue.BlockEnqueue(message); + _sendingQueue.BlockEnqueue(message, message.Priority); } /// @@ -1575,7 +1582,10 @@ namespace Tango.Transport LogManager.Log($"{GetExtendedComponentName()}: Submitting keep alive response...", LogCategory.Debug); try { - SendResponse(new KeepAliveResponse(), container.Token); + SendResponse(new KeepAliveResponse(), container.Token, new TransportResponseConfig() + { + Priority = QueuePriority.High + }); } catch { } } @@ -1638,7 +1648,11 @@ namespace Tango.Transport if (_arrivedResponses.Count == 0) { retryCounter--; - var response = SendRequest(new KeepAliveRequest(), new TransportRequestConfig() { Timeout = KeepAliveTimeout }).Result; + var response = SendRequest(new KeepAliveRequest(), new TransportRequestConfig() + { + Timeout = KeepAliveTimeout, + Priority = QueuePriority.High + }).Result; retryCounter = KeepAliveRetries; } else diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln index 476ebe1fd..42e7d8f3d 100644 --- a/Software/Visual_Studio/Tango.sln +++ b/Software/Visual_Studio/Tango.sln @@ -369,6 +369,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.SystemInfo", "Tango.S EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.FileSystem", "Tango.FileSystem\Tango.FileSystem.csproj", "{C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Priority Queue", "SideChains\Priority Queue\Priority Queue.csproj", "{1531C1EA-BD53-41D1-A34B-CFCDF79D2651}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution AppVeyor|Any CPU = AppVeyor|Any CPU @@ -386,6 +388,16 @@ Global DefaultBuild|ARM64 = DefaultBuild|ARM64 DefaultBuild|x64 = DefaultBuild|x64 DefaultBuild|x86 = DefaultBuild|x86 + Release 2.0|Any CPU = Release 2.0|Any CPU + Release 2.0|ARM = Release 2.0|ARM + Release 2.0|ARM64 = Release 2.0|ARM64 + Release 2.0|x64 = Release 2.0|x64 + Release 2.0|x86 = Release 2.0|x86 + Release 4.5|Any CPU = Release 4.5|Any CPU + Release 4.5|ARM = Release 4.5|ARM + Release 4.5|ARM64 = Release 4.5|ARM64 + Release 4.5|x64 = Release 4.5|x64 + Release 4.5|x86 = Release 4.5|x86 Release|Any CPU = Release|Any CPU Release|ARM = Release|ARM Release|ARM64 = Release|ARM64 @@ -423,6 +435,26 @@ Global {40073806-914E-4E78-97AB-FA9639308EBE}.DefaultBuild|x64.Build.0 = Debug|Any CPU {40073806-914E-4E78-97AB-FA9639308EBE}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {40073806-914E-4E78-97AB-FA9639308EBE}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|ARM.Build.0 = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|x64.Build.0 = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 2.0|x86.Build.0 = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|ARM.Build.0 = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|x64.Build.0 = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {40073806-914E-4E78-97AB-FA9639308EBE}.Release 4.5|x86.Build.0 = Release|Any CPU {40073806-914E-4E78-97AB-FA9639308EBE}.Release|Any CPU.ActiveCfg = Release|Any CPU {40073806-914E-4E78-97AB-FA9639308EBE}.Release|Any CPU.Build.0 = Release|Any CPU {40073806-914E-4E78-97AB-FA9639308EBE}.Release|ARM.ActiveCfg = Release|Any CPU @@ -463,6 +495,26 @@ Global {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.DefaultBuild|x64.Build.0 = Debug|Any CPU {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|ARM.Build.0 = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|x64.Build.0 = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 2.0|x86.Build.0 = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|ARM.Build.0 = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|x64.Build.0 = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release 4.5|x86.Build.0 = Release|Any CPU {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release|Any CPU.ActiveCfg = Release|Any CPU {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release|Any CPU.Build.0 = Release|Any CPU {A34EE0F0-649D-41C8-8489-B6F1CC6924EE}.Release|ARM.ActiveCfg = Release|Any CPU @@ -503,6 +555,26 @@ Global {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.DefaultBuild|x64.Build.0 = Debug|Any CPU {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|ARM.Build.0 = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|x64.Build.0 = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 2.0|x86.Build.0 = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|ARM.Build.0 = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|x64.Build.0 = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release 4.5|x86.Build.0 = Release|Any CPU {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release|Any CPU.ActiveCfg = Release|Any CPU {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release|Any CPU.Build.0 = Release|Any CPU {37E45CE1-A0F6-4ED7-9791-A1BED947602F}.Release|ARM.ActiveCfg = Release|Any CPU @@ -543,6 +615,26 @@ Global {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.DefaultBuild|x64.Build.0 = Debug|Any CPU {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|ARM.Build.0 = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|x64.Build.0 = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 2.0|x86.Build.0 = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|ARM.Build.0 = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|x64.Build.0 = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release 4.5|x86.Build.0 = Release|Any CPU {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release|Any CPU.Build.0 = Release|Any CPU {DE5AB980-A9AD-4273-8272-C4E1E062E3EC}.Release|ARM.ActiveCfg = Release|Any CPU @@ -583,6 +675,26 @@ Global {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.DefaultBuild|x64.Build.0 = Debug|Any CPU {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|ARM.Build.0 = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|x64.Build.0 = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 2.0|x86.Build.0 = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|ARM.Build.0 = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|x64.Build.0 = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release 4.5|x86.Build.0 = Release|Any CPU {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release|Any CPU.ActiveCfg = Release|Any CPU {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release|Any CPU.Build.0 = Release|Any CPU {BC932DBD-7CDB-488C-99E4-F02CF441F55E}.Release|ARM.ActiveCfg = Release|Any CPU @@ -623,6 +735,26 @@ Global {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.DefaultBuild|x64.Build.0 = Debug|Any CPU {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|ARM.Build.0 = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|x64.Build.0 = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 2.0|x86.Build.0 = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|ARM.Build.0 = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|x64.Build.0 = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release 4.5|x86.Build.0 = Release|Any CPU {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release|ARM.ActiveCfg = Release|Any CPU {FB82AA6B-1652-452C-8235-4FB2E524FBC0}.Release|ARM.Build.0 = Release|Any CPU @@ -662,6 +794,26 @@ Global {E4927038-348D-4295-AAF4-861C58CB3943}.DefaultBuild|x64.Build.0 = Debug|Any CPU {E4927038-348D-4295-AAF4-861C58CB3943}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {E4927038-348D-4295-AAF4-861C58CB3943}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|ARM.Build.0 = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|x64.Build.0 = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 2.0|x86.Build.0 = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|ARM.Build.0 = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|x64.Build.0 = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {E4927038-348D-4295-AAF4-861C58CB3943}.Release 4.5|x86.Build.0 = Release|Any CPU {E4927038-348D-4295-AAF4-861C58CB3943}.Release|Any CPU.ActiveCfg = Release|Any CPU {E4927038-348D-4295-AAF4-861C58CB3943}.Release|Any CPU.Build.0 = Release|Any CPU {E4927038-348D-4295-AAF4-861C58CB3943}.Release|ARM.ActiveCfg = Release|Any CPU @@ -702,6 +854,26 @@ Global {74E700B0-1156-4126-BE40-EE450D3C3026}.DefaultBuild|x64.Build.0 = Debug|Any CPU {74E700B0-1156-4126-BE40-EE450D3C3026}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {74E700B0-1156-4126-BE40-EE450D3C3026}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|ARM.Build.0 = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|x64.Build.0 = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 2.0|x86.Build.0 = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|ARM.Build.0 = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|x64.Build.0 = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {74E700B0-1156-4126-BE40-EE450D3C3026}.Release 4.5|x86.Build.0 = Release|Any CPU {74E700B0-1156-4126-BE40-EE450D3C3026}.Release|Any CPU.ActiveCfg = Release|Any CPU {74E700B0-1156-4126-BE40-EE450D3C3026}.Release|Any CPU.Build.0 = Release|Any CPU {74E700B0-1156-4126-BE40-EE450D3C3026}.Release|ARM.ActiveCfg = Release|Any CPU @@ -742,6 +914,26 @@ Global {63561E19-FF5A-414B-A5EF-E30711543E1D}.DefaultBuild|x64.Build.0 = Debug|Any CPU {63561E19-FF5A-414B-A5EF-E30711543E1D}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {63561E19-FF5A-414B-A5EF-E30711543E1D}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|ARM.Build.0 = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|x64.Build.0 = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 2.0|x86.Build.0 = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|ARM.Build.0 = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|x64.Build.0 = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release 4.5|x86.Build.0 = Release|Any CPU {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release|Any CPU.ActiveCfg = Release|Any CPU {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release|Any CPU.Build.0 = Release|Any CPU {63561E19-FF5A-414B-A5EF-E30711543E1D}.Release|ARM.ActiveCfg = Release|Any CPU @@ -782,6 +974,26 @@ Global {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.DefaultBuild|x64.Build.0 = Debug|Any CPU {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|ARM.Build.0 = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|x64.Build.0 = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 2.0|x86.Build.0 = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|ARM.Build.0 = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|x64.Build.0 = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release 4.5|x86.Build.0 = Release|Any CPU {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release|Any CPU.ActiveCfg = Release|Any CPU {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release|Any CPU.Build.0 = Release|Any CPU {1971345A-0627-4428-88AA-1CCC4BFAEF4B}.Release|ARM.ActiveCfg = Release|Any CPU @@ -822,6 +1034,26 @@ Global {1981B537-39E9-4E7D-8430-27466481AEEE}.DefaultBuild|x64.Build.0 = Debug|Any CPU {1981B537-39E9-4E7D-8430-27466481AEEE}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {1981B537-39E9-4E7D-8430-27466481AEEE}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|ARM.Build.0 = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|x64.Build.0 = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 2.0|x86.Build.0 = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|ARM.Build.0 = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|x64.Build.0 = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {1981B537-39E9-4E7D-8430-27466481AEEE}.Release 4.5|x86.Build.0 = Release|Any CPU {1981B537-39E9-4E7D-8430-27466481AEEE}.Release|Any CPU.ActiveCfg = Release|Any CPU {1981B537-39E9-4E7D-8430-27466481AEEE}.Release|Any CPU.Build.0 = Release|Any CPU {1981B537-39E9-4E7D-8430-27466481AEEE}.Release|ARM.ActiveCfg = Release|Any CPU @@ -863,6 +1095,26 @@ Global {35397DDA-DDC7-46BE-A802-3B722B6858E9}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {35397DDA-DDC7-46BE-A802-3B722B6858E9}.DefaultBuild|x86.Build.0 = Debug|Win32 {35397DDA-DDC7-46BE-A802-3B722B6858E9}.DefaultBuild|x86.Deploy.0 = Debug|Win32 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|ARM.Build.0 = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|ARM64.Build.0 = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|x64.ActiveCfg = Release|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|x64.Build.0 = Release|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|x86.ActiveCfg = Release|Win32 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 2.0|x86.Build.0 = Release|Win32 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|ARM.Build.0 = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|ARM64.Build.0 = Debug|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|x64.ActiveCfg = Release|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|x64.Build.0 = Release|x64 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|x86.ActiveCfg = Release|Win32 + {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release 4.5|x86.Build.0 = Release|Win32 {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release|Any CPU.ActiveCfg = Release|Win32 {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release|ARM.ActiveCfg = Release|Win32 {35397DDA-DDC7-46BE-A802-3B722B6858E9}.Release|ARM64.ActiveCfg = Release|Win32 @@ -900,6 +1152,26 @@ Global {37EE62DF-A988-45AF-BB30-DD3245164188}.DefaultBuild|x64.Build.0 = Debug|Any CPU {37EE62DF-A988-45AF-BB30-DD3245164188}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {37EE62DF-A988-45AF-BB30-DD3245164188}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|ARM.Build.0 = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|x64.Build.0 = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 2.0|x86.Build.0 = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|ARM.Build.0 = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|x64.Build.0 = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {37EE62DF-A988-45AF-BB30-DD3245164188}.Release 4.5|x86.Build.0 = Release|Any CPU {37EE62DF-A988-45AF-BB30-DD3245164188}.Release|Any CPU.ActiveCfg = Release|Any CPU {37EE62DF-A988-45AF-BB30-DD3245164188}.Release|Any CPU.Build.0 = Release|Any CPU {37EE62DF-A988-45AF-BB30-DD3245164188}.Release|ARM.ActiveCfg = Release|Any CPU @@ -940,6 +1212,26 @@ Global {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.DefaultBuild|x64.Build.0 = Debug|Any CPU {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|ARM.Build.0 = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|x64.Build.0 = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 2.0|x86.Build.0 = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|ARM.Build.0 = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|x64.Build.0 = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release 4.5|x86.Build.0 = Release|Any CPU {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release|Any CPU.Build.0 = Release|Any CPU {3F09B230-5AAC-4651-BA7A-19F3BDFCF701}.Release|ARM.ActiveCfg = Release|Any CPU @@ -980,6 +1272,26 @@ Global {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.DefaultBuild|x64.Build.0 = Debug|Any CPU {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|ARM.Build.0 = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|x64.Build.0 = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 2.0|x86.Build.0 = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|ARM.Build.0 = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|x64.Build.0 = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release 4.5|x86.Build.0 = Release|Any CPU {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release|Any CPU.Build.0 = Release|Any CPU {7ADA4E86-CAD7-4968-A210-3A8A9E5153AB}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1020,6 +1332,26 @@ Global {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.DefaultBuild|x64.Build.0 = Debug|Any CPU {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|ARM.Build.0 = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|x64.Build.0 = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 2.0|x86.Build.0 = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|ARM.Build.0 = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|x64.Build.0 = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release 4.5|x86.Build.0 = Release|Any CPU {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release|Any CPU.ActiveCfg = Release|Any CPU {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release|Any CPU.Build.0 = Release|Any CPU {ADDEEDAF-B45C-4681-8FB7-1C0A0DC63B4B}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1060,6 +1392,26 @@ Global {38197109-8610-4D3F-92B9-16D48DF94D7C}.DefaultBuild|x64.Build.0 = Debug|Any CPU {38197109-8610-4D3F-92B9-16D48DF94D7C}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {38197109-8610-4D3F-92B9-16D48DF94D7C}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|ARM.Build.0 = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|x64.Build.0 = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 2.0|x86.Build.0 = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|ARM.Build.0 = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|x64.Build.0 = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release 4.5|x86.Build.0 = Release|Any CPU {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release|Any CPU.ActiveCfg = Release|Any CPU {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release|Any CPU.Build.0 = Release|Any CPU {38197109-8610-4D3F-92B9-16D48DF94D7C}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1100,6 +1452,26 @@ Global {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.DefaultBuild|x64.Build.0 = Debug|Any CPU {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|ARM.Build.0 = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|x64.Build.0 = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 2.0|x86.Build.0 = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|ARM.Build.0 = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|x64.Build.0 = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release 4.5|x86.Build.0 = Release|Any CPU {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release|Any CPU.ActiveCfg = Release|Any CPU {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release|Any CPU.Build.0 = Release|Any CPU {0E0EEF3E-8F4E-4F23-9D19-479FD8D76C12}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1140,6 +1512,26 @@ Global {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.DefaultBuild|x64.Build.0 = Debug|Any CPU {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|ARM.Build.0 = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|x64.Build.0 = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 2.0|x86.Build.0 = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|ARM.Build.0 = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|x64.Build.0 = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release 4.5|x86.Build.0 = Release|Any CPU {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release|Any CPU.ActiveCfg = Release|Any CPU {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release|Any CPU.Build.0 = Release|Any CPU {D8F1AD85-526A-4F50-B6DC-D437AF63D8D8}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1180,6 +1572,26 @@ Global {22F87980-E990-4686-BE81-BE63D562C4D5}.DefaultBuild|x64.Build.0 = Debug|Any CPU {22F87980-E990-4686-BE81-BE63D562C4D5}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {22F87980-E990-4686-BE81-BE63D562C4D5}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|ARM.Build.0 = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|x64.Build.0 = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 2.0|x86.Build.0 = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|ARM.Build.0 = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|x64.Build.0 = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {22F87980-E990-4686-BE81-BE63D562C4D5}.Release 4.5|x86.Build.0 = Release|Any CPU {22F87980-E990-4686-BE81-BE63D562C4D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {22F87980-E990-4686-BE81-BE63D562C4D5}.Release|Any CPU.Build.0 = Release|Any CPU {22F87980-E990-4686-BE81-BE63D562C4D5}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1220,6 +1632,26 @@ Global {CAEDAE94-11ED-473C-888A-268A6D38CD20}.DefaultBuild|x64.Build.0 = Debug|Any CPU {CAEDAE94-11ED-473C-888A-268A6D38CD20}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {CAEDAE94-11ED-473C-888A-268A6D38CD20}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|ARM.Build.0 = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|x64.Build.0 = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 2.0|x86.Build.0 = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|ARM.Build.0 = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|x64.Build.0 = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release 4.5|x86.Build.0 = Release|Any CPU {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release|Any CPU.ActiveCfg = Release|Any CPU {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release|Any CPU.Build.0 = Release|Any CPU {CAEDAE94-11ED-473C-888A-268A6D38CD20}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1260,6 +1692,26 @@ Global {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.DefaultBuild|x64.Build.0 = Debug|Any CPU {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|ARM.Build.0 = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|x64.Build.0 = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 2.0|x86.Build.0 = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|ARM.Build.0 = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|x64.Build.0 = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release 4.5|x86.Build.0 = Release|Any CPU {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release|Any CPU.ActiveCfg = Release|Any CPU {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release|Any CPU.Build.0 = Release|Any CPU {BCD0C108-FC90-4537-8B80-ABBD201FECA3}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1300,6 +1752,26 @@ Global {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.DefaultBuild|x64.Build.0 = Debug|Any CPU {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|ARM.Build.0 = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|x64.Build.0 = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 2.0|x86.Build.0 = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|ARM.Build.0 = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|x64.Build.0 = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release 4.5|x86.Build.0 = Release|Any CPU {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release|Any CPU.ActiveCfg = Release|Any CPU {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release|Any CPU.Build.0 = Release|Any CPU {FC0FB4A1-360E-42B1-8372-9208A3098B2A}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1340,6 +1812,26 @@ Global {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.DefaultBuild|x64.Build.0 = Debug|Any CPU {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|ARM.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|x64.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 2.0|x86.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|ARM.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|x64.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release 4.5|x86.Build.0 = Release|Any CPU {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.Build.0 = Release|Any CPU {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1380,6 +1872,26 @@ Global {401989E7-AE1E-4002-B0EE-9A9F63740B97}.DefaultBuild|x64.Build.0 = Debug|Any CPU {401989E7-AE1E-4002-B0EE-9A9F63740B97}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {401989E7-AE1E-4002-B0EE-9A9F63740B97}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|ARM.Build.0 = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|x64.Build.0 = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 2.0|x86.Build.0 = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|ARM.Build.0 = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|x64.Build.0 = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release 4.5|x86.Build.0 = Release|Any CPU {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release|Any CPU.ActiveCfg = Release|Any CPU {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release|Any CPU.Build.0 = Release|Any CPU {401989E7-AE1E-4002-B0EE-9A9F63740B97}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1420,6 +1932,26 @@ Global {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.DefaultBuild|x64.Build.0 = Debug|Any CPU {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|ARM.Build.0 = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|x64.Build.0 = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 2.0|x86.Build.0 = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|ARM.Build.0 = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|x64.Build.0 = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release 4.5|x86.Build.0 = Release|Any CPU {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release|Any CPU.ActiveCfg = Release|Any CPU {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release|Any CPU.Build.0 = Release|Any CPU {8491D07B-C1F6-4B62-A412-41B9FD2D6538}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1460,6 +1992,26 @@ Global {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.DefaultBuild|x64.Build.0 = Debug|Any CPU {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|ARM.Build.0 = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|x64.Build.0 = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 2.0|x86.Build.0 = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|ARM.Build.0 = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|x64.Build.0 = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release 4.5|x86.Build.0 = Release|Any CPU {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release|Any CPU.ActiveCfg = Release|Any CPU {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release|ARM.ActiveCfg = Release|Any CPU {EBB7CB9F-6AF2-456B-A5DD-1B136B605D90}.Release|ARM.Build.0 = Release|Any CPU @@ -1499,6 +2051,26 @@ Global {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.DefaultBuild|x64.Build.0 = Debug|Any CPU {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|ARM.Build.0 = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|x64.Build.0 = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 2.0|x86.Build.0 = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|ARM.Build.0 = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|x64.Build.0 = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release 4.5|x86.Build.0 = Release|Any CPU {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release|Any CPU.ActiveCfg = Release|Any CPU {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release|Any CPU.Build.0 = Release|Any CPU {116DFDB0-7681-46FE-8BAD-FE8AE09BB076}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1539,6 +2111,26 @@ Global {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.DefaultBuild|x64.Build.0 = Debug|Any CPU {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|ARM.Build.0 = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|x64.Build.0 = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 2.0|x86.Build.0 = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|ARM.Build.0 = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|x64.Build.0 = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release 4.5|x86.Build.0 = Release|Any CPU {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release|Any CPU.ActiveCfg = Release|Any CPU {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release|Any CPU.Build.0 = Release|Any CPU {CB0B0AA2-BB24-4BCA-A720-45E397684E12}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1579,6 +2171,26 @@ Global {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.DefaultBuild|x64.Build.0 = Debug|Any CPU {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|ARM.Build.0 = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|x64.Build.0 = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 2.0|x86.Build.0 = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|ARM.Build.0 = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|x64.Build.0 = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release 4.5|x86.Build.0 = Release|Any CPU {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release|Any CPU.ActiveCfg = Release|Any CPU {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release|Any CPU.Build.0 = Release|Any CPU {CE4A0D11-08A2-4CD6-9908-D6C62E80D805}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1619,6 +2231,26 @@ Global {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.DefaultBuild|x64.Build.0 = Debug|Any CPU {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|ARM.Build.0 = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|x64.Build.0 = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 2.0|x86.Build.0 = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|ARM.Build.0 = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|x64.Build.0 = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release 4.5|x86.Build.0 = Release|Any CPU {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release|Any CPU.ActiveCfg = Release|Any CPU {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release|Any CPU.Build.0 = Release|Any CPU {A2F5AF44-29FF-45D6-9D25-ECDA5CCE88B5}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1659,6 +2291,26 @@ Global {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.DefaultBuild|x64.Build.0 = Debug|Any CPU {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|ARM.Build.0 = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|x64.Build.0 = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 2.0|x86.Build.0 = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|ARM.Build.0 = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|x64.Build.0 = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release 4.5|x86.Build.0 = Release|Any CPU {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release|Any CPU.ActiveCfg = Release|Any CPU {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release|Any CPU.Build.0 = Release|Any CPU {BB2ABB74-BA58-4812-83AA-EC8171F42DF4}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1699,6 +2351,26 @@ Global {4206AC58-3B57-4699-8835-90BF6DB01A61}.DefaultBuild|x64.Build.0 = Debug|Any CPU {4206AC58-3B57-4699-8835-90BF6DB01A61}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {4206AC58-3B57-4699-8835-90BF6DB01A61}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|ARM.Build.0 = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|x64.Build.0 = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 2.0|x86.Build.0 = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|ARM.Build.0 = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|x64.Build.0 = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release 4.5|x86.Build.0 = Release|Any CPU {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release|Any CPU.ActiveCfg = Release|Any CPU {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release|Any CPU.Build.0 = Release|Any CPU {4206AC58-3B57-4699-8835-90BF6DB01A61}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1739,6 +2411,26 @@ Global {22C2AA72-9493-4D0D-B421-8EF9789FB192}.DefaultBuild|x64.Build.0 = Debug|Any CPU {22C2AA72-9493-4D0D-B421-8EF9789FB192}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {22C2AA72-9493-4D0D-B421-8EF9789FB192}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|ARM.Build.0 = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|x64.Build.0 = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 2.0|x86.Build.0 = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|ARM.Build.0 = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|x64.Build.0 = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release 4.5|x86.Build.0 = Release|Any CPU {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release|Any CPU.ActiveCfg = Release|Any CPU {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release|Any CPU.Build.0 = Release|Any CPU {22C2AA72-9493-4D0D-B421-8EF9789FB192}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1779,6 +2471,26 @@ Global {D0CE8122-077D-42A2-9490-028AE4769B52}.DefaultBuild|x64.Build.0 = Debug|Any CPU {D0CE8122-077D-42A2-9490-028AE4769B52}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {D0CE8122-077D-42A2-9490-028AE4769B52}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|ARM.Build.0 = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|x64.Build.0 = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 2.0|x86.Build.0 = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|ARM.Build.0 = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|x64.Build.0 = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {D0CE8122-077D-42A2-9490-028AE4769B52}.Release 4.5|x86.Build.0 = Release|Any CPU {D0CE8122-077D-42A2-9490-028AE4769B52}.Release|Any CPU.ActiveCfg = Release|Any CPU {D0CE8122-077D-42A2-9490-028AE4769B52}.Release|Any CPU.Build.0 = Release|Any CPU {D0CE8122-077D-42A2-9490-028AE4769B52}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1819,6 +2531,26 @@ Global {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.DefaultBuild|x64.Build.0 = Debug|Any CPU {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|ARM.Build.0 = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|x64.Build.0 = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 2.0|x86.Build.0 = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|ARM.Build.0 = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|x64.Build.0 = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release 4.5|x86.Build.0 = Release|Any CPU {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release|Any CPU.ActiveCfg = Release|Any CPU {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release|Any CPU.Build.0 = Release|Any CPU {B112D89A-A106-41AE-A0C1-4ABC84C477F5}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1859,6 +2591,26 @@ Global {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.DefaultBuild|x64.Build.0 = Debug|Any CPU {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|ARM.Build.0 = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|x64.Build.0 = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 2.0|x86.Build.0 = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|ARM.Build.0 = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|x64.Build.0 = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release 4.5|x86.Build.0 = Release|Any CPU {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release|Any CPU.Build.0 = Release|Any CPU {5D39C1E1-3ECD-4634-BD1B-2BCF71C54A15}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1898,6 +2650,26 @@ Global {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.DefaultBuild|x64.Build.0 = Debug|Any CPU {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|ARM.Build.0 = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|x64.Build.0 = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 2.0|x86.Build.0 = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|ARM.Build.0 = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|x64.Build.0 = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release 4.5|x86.Build.0 = Release|Any CPU {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release|ARM.ActiveCfg = Release|Any CPU {8A03ADC0-991B-4DA8-8A19-E1D03F92E81C}.Release|ARM.Build.0 = Release|Any CPU @@ -1937,6 +2709,26 @@ Global {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.DefaultBuild|x64.Build.0 = Debug|Any CPU {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|ARM.Build.0 = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|x64.Build.0 = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 2.0|x86.Build.0 = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|ARM.Build.0 = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|x64.Build.0 = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release 4.5|x86.Build.0 = Release|Any CPU {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release|Any CPU.ActiveCfg = Release|Any CPU {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release|Any CPU.Build.0 = Release|Any CPU {37E4CEAB-B54B-451F-B535-04CF7DA9C459}.Release|ARM.ActiveCfg = Release|Any CPU @@ -1977,6 +2769,26 @@ Global {9652F972-2BD1-4283-99CB-FC6240434C17}.DefaultBuild|x64.Build.0 = Debug|Any CPU {9652F972-2BD1-4283-99CB-FC6240434C17}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {9652F972-2BD1-4283-99CB-FC6240434C17}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|ARM.Build.0 = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|x64.Build.0 = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 2.0|x86.Build.0 = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|ARM.Build.0 = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|x64.Build.0 = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {9652F972-2BD1-4283-99CB-FC6240434C17}.Release 4.5|x86.Build.0 = Release|Any CPU {9652F972-2BD1-4283-99CB-FC6240434C17}.Release|Any CPU.ActiveCfg = Release|Any CPU {9652F972-2BD1-4283-99CB-FC6240434C17}.Release|Any CPU.Build.0 = Release|Any CPU {9652F972-2BD1-4283-99CB-FC6240434C17}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2017,6 +2829,26 @@ Global {5B954D98-4020-4AC6-939F-C52B5646E8E6}.DefaultBuild|x64.Build.0 = Debug|Any CPU {5B954D98-4020-4AC6-939F-C52B5646E8E6}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {5B954D98-4020-4AC6-939F-C52B5646E8E6}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|ARM.Build.0 = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|x64.Build.0 = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 2.0|x86.Build.0 = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|ARM.Build.0 = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|x64.Build.0 = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release 4.5|x86.Build.0 = Release|Any CPU {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release|ARM.ActiveCfg = Release|Any CPU {5B954D98-4020-4AC6-939F-C52B5646E8E6}.Release|ARM.Build.0 = Release|Any CPU @@ -2056,6 +2888,26 @@ Global {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.DefaultBuild|x64.Build.0 = Debug|Any CPU {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|ARM.Build.0 = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|x64.Build.0 = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 2.0|x86.Build.0 = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|ARM.Build.0 = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|x64.Build.0 = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release 4.5|x86.Build.0 = Release|Any CPU {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release|Any CPU.Build.0 = Release|Any CPU {DE2F2B86-025B-4F26-83A4-38BD48224ED5}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2096,6 +2948,26 @@ Global {CF7C0FF4-9440-42CF-83B8-C060772792D4}.DefaultBuild|x64.Build.0 = Debug|Any CPU {CF7C0FF4-9440-42CF-83B8-C060772792D4}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {CF7C0FF4-9440-42CF-83B8-C060772792D4}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|ARM.Build.0 = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|x64.Build.0 = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 2.0|x86.Build.0 = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|ARM.Build.0 = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|x64.Build.0 = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release 4.5|x86.Build.0 = Release|Any CPU {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release|Any CPU.Build.0 = Release|Any CPU {CF7C0FF4-9440-42CF-83B8-C060772792D4}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2136,6 +3008,26 @@ Global {FC337A7F-1214-41D8-9992-78092A3B961E}.DefaultBuild|x64.Build.0 = Debug|Any CPU {FC337A7F-1214-41D8-9992-78092A3B961E}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {FC337A7F-1214-41D8-9992-78092A3B961E}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|ARM.Build.0 = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|x64.Build.0 = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 2.0|x86.Build.0 = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|ARM.Build.0 = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|x64.Build.0 = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {FC337A7F-1214-41D8-9992-78092A3B961E}.Release 4.5|x86.Build.0 = Release|Any CPU {FC337A7F-1214-41D8-9992-78092A3B961E}.Release|Any CPU.ActiveCfg = Release|Any CPU {FC337A7F-1214-41D8-9992-78092A3B961E}.Release|Any CPU.Build.0 = Release|Any CPU {FC337A7F-1214-41D8-9992-78092A3B961E}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2176,6 +3068,26 @@ Global {844787CE-F409-4F18-BCCC-F3809ECB86F3}.DefaultBuild|x64.Build.0 = Debug|Any CPU {844787CE-F409-4F18-BCCC-F3809ECB86F3}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {844787CE-F409-4F18-BCCC-F3809ECB86F3}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|ARM.Build.0 = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|x64.Build.0 = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 2.0|x86.Build.0 = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|ARM.Build.0 = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|x64.Build.0 = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release 4.5|x86.Build.0 = Release|Any CPU {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release|Any CPU.ActiveCfg = Release|Any CPU {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release|Any CPU.Build.0 = Release|Any CPU {844787CE-F409-4F18-BCCC-F3809ECB86F3}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2216,6 +3128,26 @@ Global {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.DefaultBuild|x64.Build.0 = Debug|Any CPU {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|ARM.Build.0 = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|x64.Build.0 = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 2.0|x86.Build.0 = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|ARM.Build.0 = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|x64.Build.0 = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release 4.5|x86.Build.0 = Release|Any CPU {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release|Any CPU.ActiveCfg = Release|Any CPU {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release|Any CPU.Build.0 = Release|Any CPU {9A477128-25A1-4B27-AAAB-7421F8ED2B9D}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2252,6 +3184,26 @@ Global {BD30C7BD-9230-4ED7-B581-11F14041909D}.DefaultBuild|x64.Build.0 = Release|Win32 {BD30C7BD-9230-4ED7-B581-11F14041909D}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {BD30C7BD-9230-4ED7-B581-11F14041909D}.DefaultBuild|x86.Build.0 = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|Any CPU.ActiveCfg = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|Any CPU.Build.0 = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|ARM.ActiveCfg = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|ARM.Build.0 = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|ARM64.ActiveCfg = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|ARM64.Build.0 = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|x64.ActiveCfg = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|x64.Build.0 = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|x86.ActiveCfg = Release|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 2.0|x86.Build.0 = Release|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|Any CPU.ActiveCfg = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|Any CPU.Build.0 = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|ARM.ActiveCfg = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|ARM.Build.0 = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|ARM64.ActiveCfg = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|ARM64.Build.0 = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|x64.ActiveCfg = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|x64.Build.0 = Debug|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|x86.ActiveCfg = Release|Win32 + {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release 4.5|x86.Build.0 = Release|Win32 {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release|Any CPU.ActiveCfg = Release|Win32 {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release|Any CPU.Build.0 = Release|Win32 {BD30C7BD-9230-4ED7-B581-11F14041909D}.Release|ARM.ActiveCfg = Release|Win32 @@ -2286,6 +3238,26 @@ Global {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.DefaultBuild|x64.Build.0 = Debug|x64 {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.DefaultBuild|x86.Build.0 = Debug|Win32 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|ARM.Build.0 = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|ARM64.Build.0 = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|x64.ActiveCfg = Release|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|x64.Build.0 = Release|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|x86.ActiveCfg = Release|Win32 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 2.0|x86.Build.0 = Release|Win32 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|ARM.Build.0 = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|ARM64.Build.0 = Debug|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|x64.ActiveCfg = Release|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|x64.Build.0 = Release|x64 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|x86.ActiveCfg = Release|Win32 + {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release 4.5|x86.Build.0 = Release|Win32 {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release|Any CPU.ActiveCfg = Release|Win32 {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release|ARM.ActiveCfg = Release|Win32 {0565AEEC-ED1B-4F0E-A277-D33F852207BC}.Release|ARM64.ActiveCfg = Release|Win32 @@ -2323,6 +3295,26 @@ Global {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.DefaultBuild|x64.Build.0 = Debug|Any CPU {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|ARM.Build.0 = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|x64.Build.0 = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 2.0|x86.Build.0 = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|ARM.Build.0 = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|x64.Build.0 = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release 4.5|x86.Build.0 = Release|Any CPU {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release|Any CPU.ActiveCfg = Release|Any CPU {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release|Any CPU.Build.0 = Release|Any CPU {69DB0564-268C-4B3C-B5D6-A3CDC7D14EAE}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2363,6 +3355,26 @@ Global {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.DefaultBuild|x64.Build.0 = Debug|Any CPU {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|ARM.Build.0 = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|x64.Build.0 = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 2.0|x86.Build.0 = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|ARM.Build.0 = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|x64.Build.0 = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release 4.5|x86.Build.0 = Release|Any CPU {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release|Any CPU.ActiveCfg = Release|Any CPU {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release|Any CPU.Build.0 = Release|Any CPU {5AFD5B7D-757A-400C-B0C9-118834F5D67E}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2403,6 +3415,26 @@ Global {F441FEEE-322A-4943-B566-110E12FD3B72}.DefaultBuild|x64.Build.0 = Debug|Any CPU {F441FEEE-322A-4943-B566-110E12FD3B72}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {F441FEEE-322A-4943-B566-110E12FD3B72}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|ARM.Build.0 = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|x64.Build.0 = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 2.0|x86.Build.0 = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|ARM.Build.0 = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|x64.Build.0 = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {F441FEEE-322A-4943-B566-110E12FD3B72}.Release 4.5|x86.Build.0 = Release|Any CPU {F441FEEE-322A-4943-B566-110E12FD3B72}.Release|Any CPU.ActiveCfg = Release|Any CPU {F441FEEE-322A-4943-B566-110E12FD3B72}.Release|Any CPU.Build.0 = Release|Any CPU {F441FEEE-322A-4943-B566-110E12FD3B72}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2440,6 +3472,26 @@ Global {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.DefaultBuild|x64.Build.0 = Debug|x64 {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.DefaultBuild|x86.Build.0 = Debug|Win32 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|ARM.Build.0 = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|ARM64.Build.0 = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|x64.ActiveCfg = Release|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|x64.Build.0 = Release|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|x86.ActiveCfg = Release|Win32 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 2.0|x86.Build.0 = Release|Win32 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|ARM.Build.0 = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|ARM64.Build.0 = Debug|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|x64.ActiveCfg = Release|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|x64.Build.0 = Release|x64 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|x86.ActiveCfg = Release|Win32 + {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release 4.5|x86.Build.0 = Release|Win32 {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release|Any CPU.ActiveCfg = Release|Win32 {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release|Any CPU.Build.0 = Release|Win32 {A37247ED-B26B-42EE-9F3B-EF0FDEB381F1}.Release|ARM.ActiveCfg = Release|Win32 @@ -2478,6 +3530,26 @@ Global {793FBFC1-549E-458B-A52F-784BD4F28586}.DefaultBuild|x64.Build.0 = Debug|Any CPU {793FBFC1-549E-458B-A52F-784BD4F28586}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {793FBFC1-549E-458B-A52F-784BD4F28586}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|ARM.Build.0 = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|x64.Build.0 = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 2.0|x86.Build.0 = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|ARM.Build.0 = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|x64.Build.0 = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {793FBFC1-549E-458B-A52F-784BD4F28586}.Release 4.5|x86.Build.0 = Release|Any CPU {793FBFC1-549E-458B-A52F-784BD4F28586}.Release|Any CPU.ActiveCfg = Release|Any CPU {793FBFC1-549E-458B-A52F-784BD4F28586}.Release|Any CPU.Build.0 = Release|Any CPU {793FBFC1-549E-458B-A52F-784BD4F28586}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2518,6 +3590,26 @@ Global {40085232-ACED-4CBE-945B-90BA8153C151}.DefaultBuild|x64.Build.0 = Debug|Any CPU {40085232-ACED-4CBE-945B-90BA8153C151}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {40085232-ACED-4CBE-945B-90BA8153C151}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|ARM.Build.0 = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|x64.Build.0 = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 2.0|x86.Build.0 = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|ARM.Build.0 = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|x64.Build.0 = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {40085232-ACED-4CBE-945B-90BA8153C151}.Release 4.5|x86.Build.0 = Release|Any CPU {40085232-ACED-4CBE-945B-90BA8153C151}.Release|Any CPU.ActiveCfg = Release|Any CPU {40085232-ACED-4CBE-945B-90BA8153C151}.Release|Any CPU.Build.0 = Release|Any CPU {40085232-ACED-4CBE-945B-90BA8153C151}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2558,6 +3650,26 @@ Global {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|x64.Build.0 = Debug|Any CPU {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {88028F14-0028-4DED-B119-19B8EE23CF32}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|ARM.Build.0 = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|x64.Build.0 = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 2.0|x86.Build.0 = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|ARM.Build.0 = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|x64.Build.0 = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {88028F14-0028-4DED-B119-19B8EE23CF32}.Release 4.5|x86.Build.0 = Release|Any CPU {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|Any CPU.ActiveCfg = Release|Any CPU {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|Any CPU.Build.0 = Release|Any CPU {88028F14-0028-4DED-B119-19B8EE23CF32}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2598,6 +3710,26 @@ Global {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|x64.Build.0 = Debug|Any CPU {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|ARM.Build.0 = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|x64.Build.0 = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 2.0|x86.Build.0 = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|ARM.Build.0 = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|x64.Build.0 = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release 4.5|x86.Build.0 = Release|Any CPU {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|Any CPU.Build.0 = Release|Any CPU {6EFD5895-177B-4BBB-AF52-29F4D53B3FBD}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2638,6 +3770,26 @@ Global {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.DefaultBuild|x64.Build.0 = Debug|Any CPU {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|ARM.Build.0 = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|x64.Build.0 = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 2.0|x86.Build.0 = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|ARM.Build.0 = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|x64.Build.0 = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release 4.5|x86.Build.0 = Release|Any CPU {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release|Any CPU.ActiveCfg = Release|Any CPU {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release|Any CPU.Build.0 = Release|Any CPU {1674F726-0E66-414F-B9FD-C6F20D7F07C7}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2677,6 +3829,26 @@ Global {12CC222B-D0F5-4048-B790-D283235F540D}.DefaultBuild|x64.Build.0 = Debug|Any CPU {12CC222B-D0F5-4048-B790-D283235F540D}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {12CC222B-D0F5-4048-B790-D283235F540D}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|ARM.Build.0 = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|x64.Build.0 = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 2.0|x86.Build.0 = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|ARM.Build.0 = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|x64.Build.0 = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {12CC222B-D0F5-4048-B790-D283235F540D}.Release 4.5|x86.Build.0 = Release|Any CPU {12CC222B-D0F5-4048-B790-D283235F540D}.Release|Any CPU.ActiveCfg = Release|Any CPU {12CC222B-D0F5-4048-B790-D283235F540D}.Release|Any CPU.Build.0 = Release|Any CPU {12CC222B-D0F5-4048-B790-D283235F540D}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2717,6 +3889,26 @@ Global {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.DefaultBuild|x64.Build.0 = Debug|Any CPU {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|ARM.Build.0 = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|x64.Build.0 = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 2.0|x86.Build.0 = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|ARM.Build.0 = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|x64.Build.0 = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release 4.5|x86.Build.0 = Release|Any CPU {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release|Any CPU.ActiveCfg = Release|Any CPU {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release|Any CPU.Build.0 = Release|Any CPU {CA87A608-7B17-4C98-88F2-42ABEE10F4C1}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2757,6 +3949,26 @@ Global {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.DefaultBuild|x64.Build.0 = Debug|Any CPU {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|ARM.Build.0 = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|x64.Build.0 = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 2.0|x86.Build.0 = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|ARM.Build.0 = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|x64.Build.0 = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release 4.5|x86.Build.0 = Release|Any CPU {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release|Any CPU.ActiveCfg = Release|Any CPU {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release|Any CPU.Build.0 = Release|Any CPU {998F8471-DC1B-41B6-9D96-354E1B4E7A32}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2797,6 +4009,26 @@ Global {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.DefaultBuild|x64.Build.0 = Debug|Any CPU {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|ARM.Build.0 = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|x64.Build.0 = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 2.0|x86.Build.0 = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|ARM.Build.0 = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|x64.Build.0 = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release 4.5|x86.Build.0 = Release|Any CPU {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release|Any CPU.Build.0 = Release|Any CPU {C8F14D59-B18D-469C-8B1B-2D23072ED16A}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2836,6 +4068,26 @@ Global {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.DefaultBuild|x64.Build.0 = Debug|Any CPU {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|ARM.Build.0 = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|x64.Build.0 = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 2.0|x86.Build.0 = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|ARM.Build.0 = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|x64.Build.0 = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release 4.5|x86.Build.0 = Release|Any CPU {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release|Any CPU.ActiveCfg = Release|Any CPU {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release|Any CPU.Build.0 = Release|Any CPU {43A25F41-EE8C-4A29-94D2-4CBC603E6B29}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2875,6 +4127,26 @@ Global {90B53209-C60C-4655-B28D-A1B3E1044BA3}.DefaultBuild|x64.Build.0 = Debug|Any CPU {90B53209-C60C-4655-B28D-A1B3E1044BA3}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {90B53209-C60C-4655-B28D-A1B3E1044BA3}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|ARM.Build.0 = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|x64.Build.0 = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 2.0|x86.Build.0 = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|ARM.Build.0 = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|x64.Build.0 = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release 4.5|x86.Build.0 = Release|Any CPU {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release|Any CPU.ActiveCfg = Release|Any CPU {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release|Any CPU.Build.0 = Release|Any CPU {90B53209-C60C-4655-B28D-A1B3E1044BA3}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2914,6 +4186,26 @@ Global {F079FB0A-A8ED-4216-B6A5-345756751A04}.DefaultBuild|x64.Build.0 = Debug|Any CPU {F079FB0A-A8ED-4216-B6A5-345756751A04}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {F079FB0A-A8ED-4216-B6A5-345756751A04}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|ARM.Build.0 = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|x64.Build.0 = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 2.0|x86.Build.0 = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|ARM.Build.0 = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|x64.Build.0 = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release 4.5|x86.Build.0 = Release|Any CPU {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release|Any CPU.ActiveCfg = Release|Any CPU {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release|Any CPU.Build.0 = Release|Any CPU {F079FB0A-A8ED-4216-B6A5-345756751A04}.Release|ARM.ActiveCfg = Release|Any CPU @@ -2951,6 +4243,26 @@ Global {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.DefaultBuild|x64.Build.0 = Debug|x64 {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.DefaultBuild|x86.Build.0 = Debug|Win32 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|ARM.Build.0 = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|ARM64.Build.0 = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|x64.ActiveCfg = Release|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|x64.Build.0 = Release|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|x86.ActiveCfg = Release|Win32 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 2.0|x86.Build.0 = Release|Win32 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|ARM.Build.0 = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|ARM64.Build.0 = Debug|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|x64.ActiveCfg = Release|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|x64.Build.0 = Release|x64 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|x86.ActiveCfg = Release|Win32 + {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release 4.5|x86.Build.0 = Release|Win32 {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release|Any CPU.ActiveCfg = Release|Win32 {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release|ARM.ActiveCfg = Release|Win32 {43ECCD8D-EE54-44EF-A51A-D77E3DF7263F}.Release|ARM64.ActiveCfg = Release|Win32 @@ -2988,6 +4300,26 @@ Global {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.DefaultBuild|x64.Build.0 = Debug|Any CPU {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|ARM.Build.0 = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|x64.Build.0 = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 2.0|x86.Build.0 = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|ARM.Build.0 = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|x64.Build.0 = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release 4.5|x86.Build.0 = Release|Any CPU {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release|Any CPU.ActiveCfg = Release|Any CPU {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release|Any CPU.Build.0 = Release|Any CPU {FD86424C-6E84-491B-8DF9-3D0F5C236A2A}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3027,6 +4359,26 @@ Global {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.DefaultBuild|x64.Build.0 = Debug|Any CPU {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|ARM.Build.0 = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|x64.Build.0 = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 2.0|x86.Build.0 = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|ARM.Build.0 = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|x64.Build.0 = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release 4.5|x86.Build.0 = Release|Any CPU {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release|Any CPU.ActiveCfg = Release|Any CPU {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release|Any CPU.Build.0 = Release|Any CPU {09EE4BC6-F1C6-46DD-B4FE-918377A4EF02}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3067,6 +4419,26 @@ Global {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.DefaultBuild|x64.Build.0 = Debug|Any CPU {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|ARM.Build.0 = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|x64.Build.0 = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 2.0|x86.Build.0 = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|ARM.Build.0 = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|x64.Build.0 = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release 4.5|x86.Build.0 = Release|Any CPU {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release|Any CPU.Build.0 = Release|Any CPU {0BE74EEE-22CB-4DBA-B896-793B9E1A3AC0}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3107,6 +4479,26 @@ Global {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.DefaultBuild|x64.Build.0 = Debug|Any CPU {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|ARM.Build.0 = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|x64.Build.0 = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 2.0|x86.Build.0 = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|ARM.Build.0 = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|x64.Build.0 = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release 4.5|x86.Build.0 = Release|Any CPU {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release|Any CPU.ActiveCfg = Release|Any CPU {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release|Any CPU.Build.0 = Release|Any CPU {654BEDA3-16FB-44FF-ADE7-B52E50B02E63}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3147,6 +4539,26 @@ Global {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.DefaultBuild|x64.Build.0 = Debug|Any CPU {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|ARM.Build.0 = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|x64.Build.0 = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 2.0|x86.Build.0 = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|ARM.Build.0 = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|x64.Build.0 = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release 4.5|x86.Build.0 = Release|Any CPU {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release|Any CPU.ActiveCfg = Release|Any CPU {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release|Any CPU.Build.0 = Release|Any CPU {4FD16878-1A44-4CCE-9589-5FC630FACDE9}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3187,6 +4599,26 @@ Global {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.DefaultBuild|x64.Build.0 = Debug|Any CPU {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|ARM.Build.0 = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|x64.Build.0 = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 2.0|x86.Build.0 = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|ARM.Build.0 = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|x64.Build.0 = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release 4.5|x86.Build.0 = Release|Any CPU {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release|Any CPU.ActiveCfg = Release|Any CPU {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release|Any CPU.Build.0 = Release|Any CPU {096F16C8-6D06-4B5F-9496-B9D2DF2D94A3}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3226,6 +4658,26 @@ Global {0440A135-0DF0-4232-AB3C-98B9283123B3}.DefaultBuild|x64.Build.0 = Debug|Any CPU {0440A135-0DF0-4232-AB3C-98B9283123B3}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {0440A135-0DF0-4232-AB3C-98B9283123B3}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|ARM.Build.0 = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|x64.Build.0 = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 2.0|x86.Build.0 = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|ARM.Build.0 = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|x64.Build.0 = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release 4.5|x86.Build.0 = Release|Any CPU {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release|Any CPU.ActiveCfg = Release|Any CPU {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release|Any CPU.Build.0 = Release|Any CPU {0440A135-0DF0-4232-AB3C-98B9283123B3}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3266,6 +4718,26 @@ Global {942134AC-6EA2-4500-8F22-0F739B70A05F}.DefaultBuild|x64.Build.0 = Debug|Any CPU {942134AC-6EA2-4500-8F22-0F739B70A05F}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {942134AC-6EA2-4500-8F22-0F739B70A05F}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|ARM.Build.0 = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|x64.Build.0 = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 2.0|x86.Build.0 = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|ARM.Build.0 = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|x64.Build.0 = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release 4.5|x86.Build.0 = Release|Any CPU {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release|Any CPU.ActiveCfg = Release|Any CPU {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release|Any CPU.Build.0 = Release|Any CPU {942134AC-6EA2-4500-8F22-0F739B70A05F}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3305,6 +4777,26 @@ Global {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.DefaultBuild|x64.Build.0 = Debug|Any CPU {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|ARM.Build.0 = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|x64.Build.0 = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 2.0|x86.Build.0 = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|ARM.Build.0 = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|x64.Build.0 = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release 4.5|x86.Build.0 = Release|Any CPU {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release|Any CPU.ActiveCfg = Release|Any CPU {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release|Any CPU.Build.0 = Release|Any CPU {808E47B6-BAA7-4D23-83CB-40C53DC4B38A}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3345,6 +4837,26 @@ Global {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.DefaultBuild|x64.Build.0 = Debug|Any CPU {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|ARM.Build.0 = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|x64.Build.0 = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 2.0|x86.Build.0 = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|ARM.Build.0 = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|x64.Build.0 = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release 4.5|x86.Build.0 = Release|Any CPU {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release|Any CPU.ActiveCfg = Release|Any CPU {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release|Any CPU.Build.0 = Release|Any CPU {D129789C-3096-4D0B-8DD7-FE24A4DF4B21}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3385,6 +4897,26 @@ Global {91B70E9B-66A7-4873-AE10-400E71CF404F}.DefaultBuild|x64.Build.0 = Debug|Any CPU {91B70E9B-66A7-4873-AE10-400E71CF404F}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {91B70E9B-66A7-4873-AE10-400E71CF404F}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|ARM.Build.0 = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|x64.Build.0 = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 2.0|x86.Build.0 = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|ARM.Build.0 = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|x64.Build.0 = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release 4.5|x86.Build.0 = Release|Any CPU {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release|Any CPU.ActiveCfg = Release|Any CPU {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release|Any CPU.Build.0 = Release|Any CPU {91B70E9B-66A7-4873-AE10-400E71CF404F}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3425,6 +4957,26 @@ Global {58E8825F-0C96-449C-B320-1E82B0AA876B}.DefaultBuild|x64.Build.0 = Debug|x64 {58E8825F-0C96-449C-B320-1E82B0AA876B}.DefaultBuild|x86.ActiveCfg = Debug|x86 {58E8825F-0C96-449C-B320-1E82B0AA876B}.DefaultBuild|x86.Build.0 = Debug|x86 + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|ARM.Build.0 = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|x64.ActiveCfg = Release|x64 + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|x64.Build.0 = Release|x64 + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|x86.ActiveCfg = Release|x86 + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 2.0|x86.Build.0 = Release|x86 + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|ARM.Build.0 = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|x64.ActiveCfg = Release|x64 + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|x64.Build.0 = Release|x64 + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|x86.ActiveCfg = Release|x86 + {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release 4.5|x86.Build.0 = Release|x86 {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release|Any CPU.ActiveCfg = Release|Any CPU {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release|Any CPU.Build.0 = Release|Any CPU {58E8825F-0C96-449C-B320-1E82B0AA876B}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3465,6 +5017,26 @@ Global {E1E66ED9-597D-45FA-8048-DE90A6930484}.DefaultBuild|x64.Build.0 = Debug|Any CPU {E1E66ED9-597D-45FA-8048-DE90A6930484}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {E1E66ED9-597D-45FA-8048-DE90A6930484}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|ARM.Build.0 = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|x64.Build.0 = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 2.0|x86.Build.0 = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|ARM.Build.0 = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|x64.Build.0 = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release 4.5|x86.Build.0 = Release|Any CPU {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release|Any CPU.ActiveCfg = Release|Any CPU {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release|Any CPU.Build.0 = Release|Any CPU {E1E66ED9-597D-45FA-8048-DE90A6930484}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3505,6 +5077,26 @@ Global {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.DefaultBuild|x64.Build.0 = Debug|Any CPU {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|ARM.Build.0 = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|x64.Build.0 = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 2.0|x86.Build.0 = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|ARM.Build.0 = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|x64.Build.0 = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release 4.5|x86.Build.0 = Release|Any CPU {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release|Any CPU.ActiveCfg = Release|Any CPU {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release|Any CPU.Build.0 = Release|Any CPU {D0E71A4D-9EEA-4F07-983F-EEB4416C587F}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3545,6 +5137,26 @@ Global {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.DefaultBuild|x64.Build.0 = Debug|Any CPU {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|ARM.Build.0 = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|x64.Build.0 = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 2.0|x86.Build.0 = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|ARM.Build.0 = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|x64.Build.0 = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release 4.5|x86.Build.0 = Release|Any CPU {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release|Any CPU.ActiveCfg = Release|Any CPU {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release|Any CPU.Build.0 = Release|Any CPU {0BDA9B52-9879-4C5E-84E3-81D00B75DACC}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3585,6 +5197,26 @@ Global {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.DefaultBuild|x64.Build.0 = Debug|Any CPU {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|ARM.Build.0 = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|x64.Build.0 = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 2.0|x86.Build.0 = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|ARM.Build.0 = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|x64.Build.0 = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release 4.5|x86.Build.0 = Release|Any CPU {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release|Any CPU.ActiveCfg = Release|Any CPU {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release|Any CPU.Build.0 = Release|Any CPU {BDBBE284-F564-4F51-AF41-3DF0434CEC62}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3625,6 +5257,26 @@ Global {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.DefaultBuild|x64.Build.0 = Debug|Any CPU {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|ARM.Build.0 = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|x64.Build.0 = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 2.0|x86.Build.0 = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|ARM.Build.0 = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|x64.Build.0 = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release 4.5|x86.Build.0 = Release|Any CPU {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release|Any CPU.ActiveCfg = Release|Any CPU {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release|Any CPU.Build.0 = Release|Any CPU {6AA425C9-EA6A-4B01-AAED-5FF122E8B663}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3665,6 +5317,26 @@ Global {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.DefaultBuild|x64.Build.0 = Debug|Any CPU {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|ARM.Build.0 = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|x64.Build.0 = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 2.0|x86.Build.0 = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|ARM.Build.0 = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|x64.Build.0 = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release 4.5|x86.Build.0 = Release|Any CPU {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release|Any CPU.ActiveCfg = Release|Any CPU {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release|Any CPU.Build.0 = Release|Any CPU {D0186AC0-0FCF-4D3B-9619-54812B6E524B}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3704,6 +5376,26 @@ Global {72E591D6-8F83-4D8C-8F67-9C325E623234}.DefaultBuild|x64.Build.0 = Debug|Any CPU {72E591D6-8F83-4D8C-8F67-9C325E623234}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {72E591D6-8F83-4D8C-8F67-9C325E623234}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|ARM.Build.0 = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|x64.Build.0 = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 2.0|x86.Build.0 = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|ARM.Build.0 = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|x64.Build.0 = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release 4.5|x86.Build.0 = Release|Any CPU {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release|Any CPU.ActiveCfg = Release|Any CPU {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release|Any CPU.Build.0 = Release|Any CPU {72E591D6-8F83-4D8C-8F67-9C325E623234}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3744,6 +5436,26 @@ Global {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.DefaultBuild|x64.Build.0 = Debug|Any CPU {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|ARM.Build.0 = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|x64.Build.0 = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 2.0|x86.Build.0 = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|ARM.Build.0 = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|x64.Build.0 = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release 4.5|x86.Build.0 = Release|Any CPU {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release|Any CPU.Build.0 = Release|Any CPU {8A65AD6A-A9B4-48C0-9301-4B7434B712F8}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3784,6 +5496,26 @@ Global {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.DefaultBuild|x64.Build.0 = Debug|Any CPU {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|ARM.Build.0 = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|x64.Build.0 = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 2.0|x86.Build.0 = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|ARM.Build.0 = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|x64.Build.0 = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release 4.5|x86.Build.0 = Release|Any CPU {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release|Any CPU.ActiveCfg = Release|Any CPU {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release|Any CPU.Build.0 = Release|Any CPU {4399AF76-DB52-4CFB-8020-6F85BDB29FD5}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3824,6 +5556,26 @@ Global {4EDCF067-E377-42CB-A18C-8368CF484577}.DefaultBuild|x64.Build.0 = Debug|Any CPU {4EDCF067-E377-42CB-A18C-8368CF484577}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {4EDCF067-E377-42CB-A18C-8368CF484577}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|ARM.Build.0 = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|x64.Build.0 = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 2.0|x86.Build.0 = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|ARM.Build.0 = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|x64.Build.0 = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {4EDCF067-E377-42CB-A18C-8368CF484577}.Release 4.5|x86.Build.0 = Release|Any CPU {4EDCF067-E377-42CB-A18C-8368CF484577}.Release|Any CPU.ActiveCfg = Release|Any CPU {4EDCF067-E377-42CB-A18C-8368CF484577}.Release|Any CPU.Build.0 = Release|Any CPU {4EDCF067-E377-42CB-A18C-8368CF484577}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3864,6 +5616,26 @@ Global {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.DefaultBuild|x64.Build.0 = Debug|Any CPU {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|ARM.Build.0 = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|x64.Build.0 = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 2.0|x86.Build.0 = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|ARM.Build.0 = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|x64.Build.0 = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release 4.5|x86.Build.0 = Release|Any CPU {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release|Any CPU.ActiveCfg = Release|Any CPU {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release|Any CPU.Build.0 = Release|Any CPU {04FEBB02-F782-4B96-B47D-F6902AFA43BE}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3904,6 +5676,26 @@ Global {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.DefaultBuild|x64.Build.0 = Debug|Any CPU {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|ARM.Build.0 = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|x64.Build.0 = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 2.0|x86.Build.0 = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|ARM.Build.0 = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|x64.Build.0 = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release 4.5|x86.Build.0 = Release|Any CPU {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release|Any CPU.ActiveCfg = Release|Any CPU {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release|Any CPU.Build.0 = Release|Any CPU {A8077B3E-8DD6-4572-8EC4-A27BDC91B70A}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3944,6 +5736,26 @@ Global {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.DefaultBuild|x64.Build.0 = Debug|Any CPU {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|ARM.Build.0 = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|x64.Build.0 = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 2.0|x86.Build.0 = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|ARM.Build.0 = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|x64.Build.0 = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release 4.5|x86.Build.0 = Release|Any CPU {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release|Any CPU.ActiveCfg = Release|Any CPU {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release|Any CPU.Build.0 = Release|Any CPU {5991F6B5-EA4E-41E9-A4F6-7D3A50010FD6}.Release|ARM.ActiveCfg = Release|Any CPU @@ -3984,6 +5796,26 @@ Global {43135FB9-41DB-4F87-9771-CF2C762027C0}.DefaultBuild|x64.Build.0 = Debug|Any CPU {43135FB9-41DB-4F87-9771-CF2C762027C0}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {43135FB9-41DB-4F87-9771-CF2C762027C0}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|ARM.Build.0 = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|x64.Build.0 = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 2.0|x86.Build.0 = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|ARM.Build.0 = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|x64.Build.0 = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release 4.5|x86.Build.0 = Release|Any CPU {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release|Any CPU.ActiveCfg = Release|Any CPU {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release|Any CPU.Build.0 = Release|Any CPU {43135FB9-41DB-4F87-9771-CF2C762027C0}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4024,6 +5856,26 @@ Global {7E5E4BED-538C-4566-A005-DCC070AF8715}.DefaultBuild|x64.Build.0 = Debug|Any CPU {7E5E4BED-538C-4566-A005-DCC070AF8715}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {7E5E4BED-538C-4566-A005-DCC070AF8715}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|ARM.Build.0 = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|x64.Build.0 = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 2.0|x86.Build.0 = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|ARM.Build.0 = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|x64.Build.0 = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release 4.5|x86.Build.0 = Release|Any CPU {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release|Any CPU.ActiveCfg = Release|Any CPU {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release|Any CPU.Build.0 = Release|Any CPU {7E5E4BED-538C-4566-A005-DCC070AF8715}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4064,6 +5916,26 @@ Global {5001990F-977B-48FF-B217-0236A5022AD8}.DefaultBuild|x64.Build.0 = Debug|Any CPU {5001990F-977B-48FF-B217-0236A5022AD8}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {5001990F-977B-48FF-B217-0236A5022AD8}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|ARM.Build.0 = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|x64.Build.0 = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 2.0|x86.Build.0 = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|ARM.Build.0 = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|x64.Build.0 = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {5001990F-977B-48FF-B217-0236A5022AD8}.Release 4.5|x86.Build.0 = Release|Any CPU {5001990F-977B-48FF-B217-0236A5022AD8}.Release|Any CPU.ActiveCfg = Release|Any CPU {5001990F-977B-48FF-B217-0236A5022AD8}.Release|Any CPU.Build.0 = Release|Any CPU {5001990F-977B-48FF-B217-0236A5022AD8}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4104,6 +5976,26 @@ Global {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.DefaultBuild|x64.Build.0 = Debug|Any CPU {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|ARM.Build.0 = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|x64.Build.0 = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 2.0|x86.Build.0 = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|ARM.Build.0 = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|x64.Build.0 = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release 4.5|x86.Build.0 = Release|Any CPU {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release|Any CPU.ActiveCfg = Release|Any CPU {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release|Any CPU.Build.0 = Release|Any CPU {F69DA3A8-F823-461E-87CF-A9275ABC0B15}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4141,6 +6033,26 @@ Global {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.DefaultBuild|x64.Build.0 = Debug|x64 {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.DefaultBuild|x86.Build.0 = Debug|Win32 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|ARM.Build.0 = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|ARM64.Build.0 = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|x64.ActiveCfg = Release|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|x64.Build.0 = Release|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|x86.ActiveCfg = Release|Win32 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 2.0|x86.Build.0 = Release|Win32 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|ARM.Build.0 = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|ARM64.Build.0 = Debug|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|x64.ActiveCfg = Release|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|x64.Build.0 = Release|x64 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|x86.ActiveCfg = Release|Win32 + {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release 4.5|x86.Build.0 = Release|Win32 {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release|Any CPU.ActiveCfg = Debug|Win32 {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release|Any CPU.Build.0 = Debug|Win32 {DB79FB33-CE7A-49CF-AA89-F697E5CDB0F6}.Release|ARM.ActiveCfg = Release|Win32 @@ -4179,6 +6091,26 @@ Global {280267F5-A19E-4B96-999D-C13D293ECA45}.DefaultBuild|x64.Build.0 = Debug|Any CPU {280267F5-A19E-4B96-999D-C13D293ECA45}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {280267F5-A19E-4B96-999D-C13D293ECA45}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|ARM.Build.0 = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|x64.Build.0 = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 2.0|x86.Build.0 = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|ARM.Build.0 = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|x64.Build.0 = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {280267F5-A19E-4B96-999D-C13D293ECA45}.Release 4.5|x86.Build.0 = Release|Any CPU {280267F5-A19E-4B96-999D-C13D293ECA45}.Release|Any CPU.ActiveCfg = Release|Any CPU {280267F5-A19E-4B96-999D-C13D293ECA45}.Release|Any CPU.Build.0 = Release|Any CPU {280267F5-A19E-4B96-999D-C13D293ECA45}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4219,6 +6151,26 @@ Global {25D7CC4D-A11C-4065-A797-4A1944F636C0}.DefaultBuild|x64.Build.0 = Debug|Any CPU {25D7CC4D-A11C-4065-A797-4A1944F636C0}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {25D7CC4D-A11C-4065-A797-4A1944F636C0}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|ARM.Build.0 = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|x64.Build.0 = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 2.0|x86.Build.0 = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|ARM.Build.0 = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|x64.Build.0 = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release 4.5|x86.Build.0 = Release|Any CPU {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release|Any CPU.ActiveCfg = Release|Any CPU {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release|Any CPU.Build.0 = Release|Any CPU {25D7CC4D-A11C-4065-A797-4A1944F636C0}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4259,6 +6211,26 @@ Global {6F924F92-611B-41CF-A6E6-443E69D4CA83}.DefaultBuild|x64.Build.0 = Debug|Any CPU {6F924F92-611B-41CF-A6E6-443E69D4CA83}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {6F924F92-611B-41CF-A6E6-443E69D4CA83}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|ARM.Build.0 = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|x64.Build.0 = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 2.0|x86.Build.0 = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|ARM.Build.0 = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|x64.Build.0 = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release 4.5|x86.Build.0 = Release|Any CPU {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release|Any CPU.ActiveCfg = Release|Any CPU {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release|Any CPU.Build.0 = Release|Any CPU {6F924F92-611B-41CF-A6E6-443E69D4CA83}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4299,6 +6271,26 @@ Global {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.DefaultBuild|x64.Build.0 = Debug|Any CPU {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|ARM.Build.0 = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|x64.Build.0 = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 2.0|x86.Build.0 = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|ARM.Build.0 = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|x64.Build.0 = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release 4.5|x86.Build.0 = Release|Any CPU {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release|Any CPU.ActiveCfg = Release|Any CPU {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release|Any CPU.Build.0 = Release|Any CPU {E711CD86-89C1-432C-9C60-BFF30BBBFB3A}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4339,6 +6331,26 @@ Global {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.DefaultBuild|x64.Build.0 = Debug|Any CPU {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|ARM.Build.0 = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|x64.Build.0 = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 2.0|x86.Build.0 = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|ARM.Build.0 = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|x64.Build.0 = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release 4.5|x86.Build.0 = Release|Any CPU {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release|Any CPU.ActiveCfg = Release|Any CPU {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release|Any CPU.Build.0 = Release|Any CPU {FABA6A2B-C7EA-4C58-A125-150FA5B4C72F}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4379,6 +6391,26 @@ Global {E470673E-AEC8-4555-9136-D2F66B02DBFB}.DefaultBuild|x64.Build.0 = Debug|Any CPU {E470673E-AEC8-4555-9136-D2F66B02DBFB}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {E470673E-AEC8-4555-9136-D2F66B02DBFB}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|ARM.Build.0 = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|x64.Build.0 = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 2.0|x86.Build.0 = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|ARM.Build.0 = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|x64.Build.0 = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release 4.5|x86.Build.0 = Release|Any CPU {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release|Any CPU.ActiveCfg = Release|Any CPU {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release|Any CPU.Build.0 = Release|Any CPU {E470673E-AEC8-4555-9136-D2F66B02DBFB}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4419,6 +6451,26 @@ Global {C5DF1816-34E5-4700-824C-29623A1BAA22}.DefaultBuild|x64.Build.0 = Debug|Any CPU {C5DF1816-34E5-4700-824C-29623A1BAA22}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {C5DF1816-34E5-4700-824C-29623A1BAA22}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|ARM.Build.0 = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|x64.Build.0 = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 2.0|x86.Build.0 = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|ARM.Build.0 = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|x64.Build.0 = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release 4.5|x86.Build.0 = Release|Any CPU {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release|Any CPU.ActiveCfg = Release|Any CPU {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release|Any CPU.Build.0 = Release|Any CPU {C5DF1816-34E5-4700-824C-29623A1BAA22}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4459,6 +6511,26 @@ Global {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|x64.Build.0 = Debug|Any CPU {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {8435223D-DB6B-45E3-A08B-45B7416F8481}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|ARM.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|x64.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 2.0|x86.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|ARM.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|x64.Build.0 = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release 4.5|x86.Build.0 = Release|Any CPU {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|Any CPU.ActiveCfg = Release|Any CPU {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|Any CPU.Build.0 = Release|Any CPU {8435223D-DB6B-45E3-A08B-45B7416F8481}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4499,6 +6571,26 @@ Global {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|x64.Build.0 = Debug|Any CPU {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {D2EE865B-B006-487A-9487-60A663636AC3}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|ARM.Build.0 = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|x64.Build.0 = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 2.0|x86.Build.0 = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|ARM.Build.0 = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|x64.Build.0 = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {D2EE865B-B006-487A-9487-60A663636AC3}.Release 4.5|x86.Build.0 = Release|Any CPU {D2EE865B-B006-487A-9487-60A663636AC3}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2EE865B-B006-487A-9487-60A663636AC3}.Release|Any CPU.Build.0 = Release|Any CPU {D2EE865B-B006-487A-9487-60A663636AC3}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4539,6 +6631,26 @@ Global {F209FAE8-73F9-441B-97F4-0844A0279390}.DefaultBuild|x64.Build.0 = Debug|Any CPU {F209FAE8-73F9-441B-97F4-0844A0279390}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {F209FAE8-73F9-441B-97F4-0844A0279390}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|ARM.Build.0 = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|x64.Build.0 = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 2.0|x86.Build.0 = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|ARM.Build.0 = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|x64.Build.0 = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {F209FAE8-73F9-441B-97F4-0844A0279390}.Release 4.5|x86.Build.0 = Release|Any CPU {F209FAE8-73F9-441B-97F4-0844A0279390}.Release|Any CPU.ActiveCfg = Release|Any CPU {F209FAE8-73F9-441B-97F4-0844A0279390}.Release|Any CPU.Build.0 = Release|Any CPU {F209FAE8-73F9-441B-97F4-0844A0279390}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4576,6 +6688,26 @@ Global {862328A4-8632-43AF-B466-55825C7962FE}.DefaultBuild|x64.Build.0 = Debug|x64 {862328A4-8632-43AF-B466-55825C7962FE}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {862328A4-8632-43AF-B466-55825C7962FE}.DefaultBuild|x86.Build.0 = Debug|Win32 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|ARM.Build.0 = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|ARM64.Build.0 = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|x64.ActiveCfg = Release|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|x64.Build.0 = Release|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|x86.ActiveCfg = Release|Win32 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 2.0|x86.Build.0 = Release|Win32 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|ARM.Build.0 = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|ARM64.Build.0 = Debug|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|x64.ActiveCfg = Release|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|x64.Build.0 = Release|x64 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|x86.ActiveCfg = Release|Win32 + {862328A4-8632-43AF-B466-55825C7962FE}.Release 4.5|x86.Build.0 = Release|Win32 {862328A4-8632-43AF-B466-55825C7962FE}.Release|Any CPU.ActiveCfg = Debug|Win32 {862328A4-8632-43AF-B466-55825C7962FE}.Release|ARM.ActiveCfg = Release|Win32 {862328A4-8632-43AF-B466-55825C7962FE}.Release|ARM64.ActiveCfg = Release|Win32 @@ -4613,6 +6745,26 @@ Global {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.DefaultBuild|x64.Build.0 = Debug|Any CPU {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|ARM.Build.0 = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|x64.Build.0 = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 2.0|x86.Build.0 = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|ARM.Build.0 = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|x64.Build.0 = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release 4.5|x86.Build.0 = Release|Any CPU {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release|Any CPU.ActiveCfg = Release|Any CPU {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release|Any CPU.Build.0 = Release|Any CPU {BA9D572D-FFBF-480A-921F-9E4B00D22D41}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4650,6 +6802,26 @@ Global {401FB878-646C-4230-821E-16DCAE6D56F5}.DefaultBuild|x64.Build.0 = Debug|x64 {401FB878-646C-4230-821E-16DCAE6D56F5}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {401FB878-646C-4230-821E-16DCAE6D56F5}.DefaultBuild|x86.Build.0 = Debug|Win32 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|ARM.Build.0 = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|ARM64.Build.0 = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|x64.ActiveCfg = Release|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|x64.Build.0 = Release|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|x86.ActiveCfg = Release|Win32 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 2.0|x86.Build.0 = Release|Win32 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|ARM.Build.0 = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|ARM64.Build.0 = Debug|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|x64.ActiveCfg = Release|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|x64.Build.0 = Release|x64 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|x86.ActiveCfg = Release|Win32 + {401FB878-646C-4230-821E-16DCAE6D56F5}.Release 4.5|x86.Build.0 = Release|Win32 {401FB878-646C-4230-821E-16DCAE6D56F5}.Release|Any CPU.ActiveCfg = Release|Win32 {401FB878-646C-4230-821E-16DCAE6D56F5}.Release|ARM.ActiveCfg = Release|Win32 {401FB878-646C-4230-821E-16DCAE6D56F5}.Release|ARM64.ActiveCfg = Release|Win32 @@ -4684,6 +6856,26 @@ Global {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.DefaultBuild|x64.Build.0 = Debug|x64 {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.DefaultBuild|x86.Build.0 = Debug|Win32 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|ARM.Build.0 = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|ARM64.Build.0 = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|x64.ActiveCfg = Release|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|x64.Build.0 = Release|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|x86.ActiveCfg = Release|Win32 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 2.0|x86.Build.0 = Release|Win32 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|ARM.Build.0 = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|ARM64.Build.0 = Debug|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|x64.ActiveCfg = Release|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|x64.Build.0 = Release|x64 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|x86.ActiveCfg = Release|Win32 + {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release 4.5|x86.Build.0 = Release|Win32 {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release|Any CPU.ActiveCfg = Debug|Win32 {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release|ARM.ActiveCfg = Release|Win32 {09B2CCD8-9EEE-4837-A6BC-B5AF3DF0557E}.Release|ARM64.ActiveCfg = Release|Win32 @@ -4721,6 +6913,26 @@ Global {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.DefaultBuild|x64.Build.0 = Debug|Any CPU {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|ARM.Build.0 = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|x64.Build.0 = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 2.0|x86.Build.0 = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|ARM.Build.0 = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|x64.Build.0 = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release 4.5|x86.Build.0 = Release|Any CPU {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release|Any CPU.Build.0 = Release|Any CPU {5D0D4053-CAB3-4A4A-929E-37A76483BC22}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4758,6 +6970,26 @@ Global {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.DefaultBuild|x64.Build.0 = Debug|x64 {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.DefaultBuild|x86.Build.0 = Debug|Win32 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|ARM.Build.0 = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|ARM64.Build.0 = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|x64.ActiveCfg = Release|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|x64.Build.0 = Release|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|x86.ActiveCfg = Release|Win32 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 2.0|x86.Build.0 = Release|Win32 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|ARM.Build.0 = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|ARM64.Build.0 = Debug|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|x64.ActiveCfg = Release|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|x64.Build.0 = Release|x64 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|x86.ActiveCfg = Release|Win32 + {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release 4.5|x86.Build.0 = Release|Win32 {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release|Any CPU.ActiveCfg = Debug|Win32 {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release|ARM.ActiveCfg = Release|Win32 {DD19A7B3-E4B0-444E-98D4-D1C346442E63}.Release|ARM64.ActiveCfg = Release|Win32 @@ -4795,6 +7027,26 @@ Global {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.DefaultBuild|x64.Build.0 = Debug|Any CPU {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|ARM.Build.0 = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|x64.Build.0 = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 2.0|x86.Build.0 = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|ARM.Build.0 = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|x64.Build.0 = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release 4.5|x86.Build.0 = Release|Any CPU {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release|Any CPU.ActiveCfg = Release|Any CPU {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release|Any CPU.Build.0 = Release|Any CPU {1B87CA53-50BD-4C48-A8C7-FBB9F1419AFF}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4832,6 +7084,26 @@ Global {BB268536-9E03-46A4-9B11-6025211D87F0}.DefaultBuild|x64.Build.0 = Debug|x64 {BB268536-9E03-46A4-9B11-6025211D87F0}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {BB268536-9E03-46A4-9B11-6025211D87F0}.DefaultBuild|x86.Build.0 = Debug|Win32 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|ARM.Build.0 = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|ARM64.Build.0 = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|x64.ActiveCfg = Release|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|x64.Build.0 = Release|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|x86.ActiveCfg = Release|Win32 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 2.0|x86.Build.0 = Release|Win32 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|ARM.Build.0 = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|ARM64.Build.0 = Debug|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|x64.ActiveCfg = Release|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|x64.Build.0 = Release|x64 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|x86.ActiveCfg = Release|Win32 + {BB268536-9E03-46A4-9B11-6025211D87F0}.Release 4.5|x86.Build.0 = Release|Win32 {BB268536-9E03-46A4-9B11-6025211D87F0}.Release|Any CPU.ActiveCfg = Debug|Win32 {BB268536-9E03-46A4-9B11-6025211D87F0}.Release|ARM.ActiveCfg = Release|Win32 {BB268536-9E03-46A4-9B11-6025211D87F0}.Release|ARM64.ActiveCfg = Release|Win32 @@ -4869,6 +7141,26 @@ Global {1E938FD2-C669-4738-98C9-77F96CE4D451}.DefaultBuild|x64.Build.0 = Debug|Any CPU {1E938FD2-C669-4738-98C9-77F96CE4D451}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {1E938FD2-C669-4738-98C9-77F96CE4D451}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|ARM.Build.0 = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|x64.Build.0 = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 2.0|x86.Build.0 = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|ARM.Build.0 = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|x64.Build.0 = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release 4.5|x86.Build.0 = Release|Any CPU {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release|Any CPU.ActiveCfg = Release|Any CPU {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release|Any CPU.Build.0 = Release|Any CPU {1E938FD2-C669-4738-98C9-77F96CE4D451}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4909,6 +7201,26 @@ Global {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.DefaultBuild|x64.Build.0 = Debug|Any CPU {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|ARM.Build.0 = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|x64.Build.0 = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 2.0|x86.Build.0 = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|ARM.Build.0 = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|x64.Build.0 = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release 4.5|x86.Build.0 = Release|Any CPU {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release|Any CPU.Build.0 = Release|Any CPU {DA62FA39-668B-47A6-B0F2-D2C1DAF777B0}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4949,6 +7261,26 @@ Global {C9F60285-91FB-4293-BCF5-164D76755CDD}.DefaultBuild|x64.Build.0 = Debug|Any CPU {C9F60285-91FB-4293-BCF5-164D76755CDD}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {C9F60285-91FB-4293-BCF5-164D76755CDD}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|ARM.Build.0 = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|x64.Build.0 = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 2.0|x86.Build.0 = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|ARM.Build.0 = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|x64.Build.0 = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release 4.5|x86.Build.0 = Release|Any CPU {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release|Any CPU.ActiveCfg = Release|Any CPU {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release|Any CPU.Build.0 = Release|Any CPU {C9F60285-91FB-4293-BCF5-164D76755CDD}.Release|ARM.ActiveCfg = Release|Any CPU @@ -4989,6 +7321,26 @@ Global {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.DefaultBuild|x64.Build.0 = Debug|Any CPU {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|ARM.Build.0 = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|x64.Build.0 = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 2.0|x86.Build.0 = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|ARM.Build.0 = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|x64.Build.0 = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release 4.5|x86.Build.0 = Release|Any CPU {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release|Any CPU.Build.0 = Release|Any CPU {B0EFE7A0-7039-4DC4-8B39-465E521299F6}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5029,6 +7381,26 @@ Global {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.DefaultBuild|x64.Build.0 = Debug|Any CPU {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|ARM.Build.0 = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|x64.Build.0 = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 2.0|x86.Build.0 = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|ARM.Build.0 = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|x64.Build.0 = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release 4.5|x86.Build.0 = Release|Any CPU {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release|Any CPU.ActiveCfg = Release|Any CPU {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release|Any CPU.Build.0 = Release|Any CPU {1066BC62-F167-4FC3-8F8B-982A9F632B4A}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5069,6 +7441,26 @@ Global {F13A489C-80EE-4CD0-BDD4-92D959215646}.DefaultBuild|x64.Build.0 = Debug|Any CPU {F13A489C-80EE-4CD0-BDD4-92D959215646}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {F13A489C-80EE-4CD0-BDD4-92D959215646}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|ARM.Build.0 = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|x64.Build.0 = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 2.0|x86.Build.0 = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|ARM.Build.0 = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|x64.Build.0 = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release 4.5|x86.Build.0 = Release|Any CPU {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release|Any CPU.ActiveCfg = Release|Any CPU {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release|Any CPU.Build.0 = Release|Any CPU {F13A489C-80EE-4CD0-BDD4-92D959215646}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5109,6 +7501,26 @@ Global {6B9774F7-960D-438E-AD81-C6B9BE328D50}.DefaultBuild|x64.Build.0 = Debug|Any CPU {6B9774F7-960D-438E-AD81-C6B9BE328D50}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {6B9774F7-960D-438E-AD81-C6B9BE328D50}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|ARM.Build.0 = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|x64.Build.0 = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 2.0|x86.Build.0 = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|ARM.Build.0 = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|x64.Build.0 = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release 4.5|x86.Build.0 = Release|Any CPU {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release|Any CPU.Build.0 = Release|Any CPU {6B9774F7-960D-438E-AD81-C6B9BE328D50}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5149,6 +7561,26 @@ Global {B822CBD9-1113-4668-85C9-22AA9C24CE60}.DefaultBuild|x64.Build.0 = Debug|Any CPU {B822CBD9-1113-4668-85C9-22AA9C24CE60}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {B822CBD9-1113-4668-85C9-22AA9C24CE60}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|ARM.Build.0 = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|x64.Build.0 = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 2.0|x86.Build.0 = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|ARM.Build.0 = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|x64.Build.0 = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release 4.5|x86.Build.0 = Release|Any CPU {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release|Any CPU.ActiveCfg = Release|Any CPU {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release|Any CPU.Build.0 = Release|Any CPU {B822CBD9-1113-4668-85C9-22AA9C24CE60}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5189,6 +7621,26 @@ Global {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.DefaultBuild|x64.Build.0 = Debug|Any CPU {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|ARM.Build.0 = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|x64.Build.0 = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 2.0|x86.Build.0 = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|ARM.Build.0 = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|x64.Build.0 = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release 4.5|x86.Build.0 = Release|Any CPU {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release|Any CPU.ActiveCfg = Release|Any CPU {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release|Any CPU.Build.0 = Release|Any CPU {0C596287-D63B-4BB7-A3D7-B682DD9EC60B}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5229,6 +7681,26 @@ Global {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.DefaultBuild|x64.Build.0 = Debug|Any CPU {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|ARM.Build.0 = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|x64.Build.0 = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 2.0|x86.Build.0 = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|ARM.Build.0 = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|x64.Build.0 = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release 4.5|x86.Build.0 = Release|Any CPU {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release|Any CPU.ActiveCfg = Release|Any CPU {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release|Any CPU.Build.0 = Release|Any CPU {CC6D5193-434D-410F-B0F3-BE2017D86FCE}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5269,6 +7741,26 @@ Global {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.DefaultBuild|x64.Build.0 = Debug|Any CPU {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|ARM.Build.0 = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|x64.Build.0 = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 2.0|x86.Build.0 = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|ARM.Build.0 = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|x64.Build.0 = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release 4.5|x86.Build.0 = Release|Any CPU {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release|Any CPU.ActiveCfg = Release|Any CPU {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release|Any CPU.Build.0 = Release|Any CPU {B4FE6485-4161-4B36-BC08-67E0B53D01B7}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5309,6 +7801,26 @@ Global {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.DefaultBuild|x64.Build.0 = Debug|Any CPU {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|ARM.Build.0 = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|x64.Build.0 = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 2.0|x86.Build.0 = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|ARM.Build.0 = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|x64.Build.0 = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release 4.5|x86.Build.0 = Release|Any CPU {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release|Any CPU.Build.0 = Release|Any CPU {7D0FCE3C-9A37-439C-9F9F-B26CFD6A8A33}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5349,6 +7861,26 @@ Global {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.DefaultBuild|x64.Build.0 = Debug|Any CPU {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|ARM.Build.0 = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|x64.Build.0 = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 2.0|x86.Build.0 = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|ARM.Build.0 = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|x64.Build.0 = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release 4.5|x86.Build.0 = Release|Any CPU {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release|Any CPU.ActiveCfg = Release|Any CPU {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release|Any CPU.Build.0 = Release|Any CPU {8146FA0A-0725-4A1A-82E6-696C58F33A2B}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5389,6 +7921,26 @@ Global {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.DefaultBuild|x64.Build.0 = Debug|Any CPU {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|ARM.Build.0 = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|x64.Build.0 = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 2.0|x86.Build.0 = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|ARM.Build.0 = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|x64.Build.0 = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release 4.5|x86.Build.0 = Release|Any CPU {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release|Any CPU.Build.0 = Release|Any CPU {C421E1D8-9B67-4A87-8E9F-8214721FA9AD}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5429,6 +7981,26 @@ Global {50119E79-5012-4B36-8438-953DD5FC06E6}.DefaultBuild|x64.Build.0 = Debug|Any CPU {50119E79-5012-4B36-8438-953DD5FC06E6}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {50119E79-5012-4B36-8438-953DD5FC06E6}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|ARM.Build.0 = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|x64.Build.0 = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 2.0|x86.Build.0 = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|ARM.Build.0 = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|x64.Build.0 = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {50119E79-5012-4B36-8438-953DD5FC06E6}.Release 4.5|x86.Build.0 = Release|Any CPU {50119E79-5012-4B36-8438-953DD5FC06E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {50119E79-5012-4B36-8438-953DD5FC06E6}.Release|Any CPU.Build.0 = Release|Any CPU {50119E79-5012-4B36-8438-953DD5FC06E6}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5466,6 +8038,26 @@ Global {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.DefaultBuild|x64.Build.0 = Debug|x64 {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.DefaultBuild|x86.Build.0 = Debug|Win32 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|ARM.Build.0 = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|ARM64.Build.0 = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|x64.ActiveCfg = Release|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|x64.Build.0 = Release|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|x86.ActiveCfg = Release|Win32 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 2.0|x86.Build.0 = Release|Win32 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|ARM.Build.0 = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|ARM64.Build.0 = Debug|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|x64.ActiveCfg = Release|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|x64.Build.0 = Release|x64 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|x86.ActiveCfg = Release|Win32 + {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release 4.5|x86.Build.0 = Release|Win32 {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release|Any CPU.ActiveCfg = Release|Win32 {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release|ARM.ActiveCfg = Release|Win32 {CF4C66B0-CD13-4D31-8133-339A01E7E6F2}.Release|ARM64.ActiveCfg = Release|Win32 @@ -5500,6 +8092,26 @@ Global {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.DefaultBuild|x64.Build.0 = Debug|x64 {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.DefaultBuild|x86.Build.0 = Debug|Win32 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|ARM.Build.0 = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|ARM64.Build.0 = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|x64.ActiveCfg = Release|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|x64.Build.0 = Release|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|x86.ActiveCfg = Release|Win32 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 2.0|x86.Build.0 = Release|Win32 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|ARM.Build.0 = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|ARM64.Build.0 = Debug|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|x64.ActiveCfg = Release|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|x64.Build.0 = Release|x64 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|x86.ActiveCfg = Release|Win32 + {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release 4.5|x86.Build.0 = Release|Win32 {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release|Any CPU.ActiveCfg = Release|Win32 {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release|ARM.ActiveCfg = Release|Win32 {1A3FC7FB-403C-4B3D-B705-28FCE11317DD}.Release|ARM64.ActiveCfg = Release|Win32 @@ -5534,6 +8146,26 @@ Global {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.DefaultBuild|x64.Build.0 = Debug|x64 {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.DefaultBuild|x86.Build.0 = Debug|Win32 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|ARM.Build.0 = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|ARM64.Build.0 = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|x64.ActiveCfg = Release|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|x64.Build.0 = Release|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|x86.ActiveCfg = Release|Win32 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 2.0|x86.Build.0 = Release|Win32 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|ARM.Build.0 = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|ARM64.Build.0 = Debug|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|x64.ActiveCfg = Release|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|x64.Build.0 = Release|x64 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|x86.ActiveCfg = Release|Win32 + {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release 4.5|x86.Build.0 = Release|Win32 {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release|Any CPU.ActiveCfg = Release|Win32 {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release|ARM.ActiveCfg = Release|Win32 {A3A8ADA0-C150-4E30-A60D-11F291FDBF7A}.Release|ARM64.ActiveCfg = Release|Win32 @@ -5571,6 +8203,26 @@ Global {011470AC-6BD6-4366-B5F2-C82C065D4A84}.DefaultBuild|x64.Build.0 = Debug|Any CPU {011470AC-6BD6-4366-B5F2-C82C065D4A84}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {011470AC-6BD6-4366-B5F2-C82C065D4A84}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|ARM.Build.0 = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|x64.Build.0 = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 2.0|x86.Build.0 = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|ARM.Build.0 = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|x64.Build.0 = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release 4.5|x86.Build.0 = Release|Any CPU {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release|Any CPU.ActiveCfg = Release|Any CPU {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release|Any CPU.Build.0 = Release|Any CPU {011470AC-6BD6-4366-B5F2-C82C065D4A84}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5611,6 +8263,26 @@ Global {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.DefaultBuild|x64.Build.0 = Debug|Any CPU {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|ARM.Build.0 = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|x64.Build.0 = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 2.0|x86.Build.0 = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|ARM.Build.0 = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|x64.Build.0 = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release 4.5|x86.Build.0 = Release|Any CPU {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release|Any CPU.ActiveCfg = Release|Any CPU {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release|Any CPU.Build.0 = Release|Any CPU {BC2753F8-C0F7-48F5-A85C-149EC7A2F8C7}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5651,6 +8323,26 @@ Global {D74893F2-9E39-4C72-BDD4-937404E1FC37}.DefaultBuild|x64.Build.0 = Debug|Any CPU {D74893F2-9E39-4C72-BDD4-937404E1FC37}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {D74893F2-9E39-4C72-BDD4-937404E1FC37}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|ARM.Build.0 = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|x64.Build.0 = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 2.0|x86.Build.0 = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|ARM.Build.0 = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|x64.Build.0 = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release 4.5|x86.Build.0 = Release|Any CPU {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release|Any CPU.ActiveCfg = Release|Any CPU {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release|Any CPU.Build.0 = Release|Any CPU {D74893F2-9E39-4C72-BDD4-937404E1FC37}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5691,6 +8383,26 @@ Global {2CD12594-3522-4658-A65F-190EE58B6AFA}.DefaultBuild|x64.Build.0 = Debug|Any CPU {2CD12594-3522-4658-A65F-190EE58B6AFA}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {2CD12594-3522-4658-A65F-190EE58B6AFA}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|ARM.Build.0 = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|x64.Build.0 = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 2.0|x86.Build.0 = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|ARM.Build.0 = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|x64.Build.0 = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release 4.5|x86.Build.0 = Release|Any CPU {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release|Any CPU.ActiveCfg = Release|Any CPU {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release|Any CPU.Build.0 = Release|Any CPU {2CD12594-3522-4658-A65F-190EE58B6AFA}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5731,6 +8443,26 @@ Global {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.DefaultBuild|x64.Build.0 = Debug|Any CPU {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|ARM.Build.0 = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|x64.Build.0 = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 2.0|x86.Build.0 = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|ARM.Build.0 = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|x64.Build.0 = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release 4.5|x86.Build.0 = Release|Any CPU {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release|Any CPU.Build.0 = Release|Any CPU {DA391B02-AE28-4EA1-A80F-D0F4C8029FFA}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5771,6 +8503,26 @@ Global {F3746F2B-E4AE-498B-9D42-74F95D992460}.DefaultBuild|x64.Build.0 = Debug|Any CPU {F3746F2B-E4AE-498B-9D42-74F95D992460}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {F3746F2B-E4AE-498B-9D42-74F95D992460}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|ARM.Build.0 = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|x64.Build.0 = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 2.0|x86.Build.0 = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|ARM.Build.0 = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|x64.Build.0 = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release 4.5|x86.Build.0 = Release|Any CPU {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release|Any CPU.ActiveCfg = Release|Any CPU {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release|Any CPU.Build.0 = Release|Any CPU {F3746F2B-E4AE-498B-9D42-74F95D992460}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5811,6 +8563,26 @@ Global {F02EAA84-AD59-465B-99A2-4422C13BFB72}.DefaultBuild|x64.Build.0 = Debug|Any CPU {F02EAA84-AD59-465B-99A2-4422C13BFB72}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {F02EAA84-AD59-465B-99A2-4422C13BFB72}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|ARM.Build.0 = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|x64.ActiveCfg = Release|x64 + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|x64.Build.0 = Release|x64 + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 2.0|x86.Build.0 = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|ARM.Build.0 = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|x64.ActiveCfg = Release|x64 + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|x64.Build.0 = Release|x64 + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release 4.5|x86.Build.0 = Release|Any CPU {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release|Any CPU.ActiveCfg = Release|Any CPU {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release|Any CPU.Build.0 = Release|Any CPU {F02EAA84-AD59-465B-99A2-4422C13BFB72}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5851,6 +8623,26 @@ Global {DF64460A-6617-4338-872A-DC43FD994C48}.DefaultBuild|x64.Build.0 = Debug|Any CPU {DF64460A-6617-4338-872A-DC43FD994C48}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {DF64460A-6617-4338-872A-DC43FD994C48}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|ARM.Build.0 = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|x64.Build.0 = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 2.0|x86.Build.0 = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|ARM.Build.0 = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|x64.Build.0 = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {DF64460A-6617-4338-872A-DC43FD994C48}.Release 4.5|x86.Build.0 = Release|Any CPU {DF64460A-6617-4338-872A-DC43FD994C48}.Release|Any CPU.ActiveCfg = Release|Any CPU {DF64460A-6617-4338-872A-DC43FD994C48}.Release|Any CPU.Build.0 = Release|Any CPU {DF64460A-6617-4338-872A-DC43FD994C48}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5891,6 +8683,26 @@ Global {18A27902-9881-4556-8163-F6DF2236A14D}.DefaultBuild|x64.Build.0 = Debug|Any CPU {18A27902-9881-4556-8163-F6DF2236A14D}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {18A27902-9881-4556-8163-F6DF2236A14D}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|ARM.Build.0 = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|x64.Build.0 = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 2.0|x86.Build.0 = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|ARM.Build.0 = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|x64.Build.0 = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {18A27902-9881-4556-8163-F6DF2236A14D}.Release 4.5|x86.Build.0 = Release|Any CPU {18A27902-9881-4556-8163-F6DF2236A14D}.Release|Any CPU.ActiveCfg = Release|Any CPU {18A27902-9881-4556-8163-F6DF2236A14D}.Release|Any CPU.Build.0 = Release|Any CPU {18A27902-9881-4556-8163-F6DF2236A14D}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5931,6 +8743,26 @@ Global {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x64.Build.0 = Debug|Any CPU {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|ARM.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|x64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 2.0|x86.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|ARM.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|x64.Build.0 = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release 4.5|x86.Build.0 = Release|Any CPU {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|Any CPU.ActiveCfg = Release|Any CPU {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|Any CPU.Build.0 = Release|Any CPU {447ECB9F-F730-47D6-8DF8-D232BF4A0315}.Release|ARM.ActiveCfg = Release|Any CPU @@ -5971,6 +8803,26 @@ Global {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.DefaultBuild|x64.Build.0 = Debug|Any CPU {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|ARM.Build.0 = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|x64.Build.0 = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 2.0|x86.Build.0 = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|ARM.Build.0 = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|x64.Build.0 = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release 4.5|x86.Build.0 = Release|Any CPU {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release|Any CPU.ActiveCfg = Release|Any CPU {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release|Any CPU.Build.0 = Release|Any CPU {511A8AD7-6BA2-4BB5-A20A-1454196C5503}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6011,6 +8863,26 @@ Global {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.DefaultBuild|x64.Build.0 = Debug|Any CPU {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|ARM.Build.0 = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|x64.Build.0 = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 2.0|x86.Build.0 = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|ARM.Build.0 = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|x64.Build.0 = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release 4.5|x86.Build.0 = Release|Any CPU {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release|Any CPU.ActiveCfg = Release|Any CPU {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release|Any CPU.Build.0 = Release|Any CPU {4A6B97E5-5EBA-4702-A016-6F4004F14B08}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6051,6 +8923,26 @@ Global {DF378E50-F0F8-46BF-A410-36DB02F2A742}.DefaultBuild|x64.Build.0 = Debug|Any CPU {DF378E50-F0F8-46BF-A410-36DB02F2A742}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {DF378E50-F0F8-46BF-A410-36DB02F2A742}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|ARM.Build.0 = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|x64.Build.0 = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 2.0|x86.Build.0 = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|ARM.Build.0 = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|x64.Build.0 = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release 4.5|x86.Build.0 = Release|Any CPU {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release|Any CPU.ActiveCfg = Release|Any CPU {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release|Any CPU.Build.0 = Release|Any CPU {DF378E50-F0F8-46BF-A410-36DB02F2A742}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6091,6 +8983,26 @@ Global {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.DefaultBuild|x64.Build.0 = Debug|Any CPU {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|ARM.Build.0 = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|x64.Build.0 = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 2.0|x86.Build.0 = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|ARM.Build.0 = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|x64.Build.0 = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release 4.5|x86.Build.0 = Release|Any CPU {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release|Any CPU.ActiveCfg = Release|Any CPU {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release|Any CPU.Build.0 = Release|Any CPU {0F5F28AD-81B9-43A0-9BA7-CFB74F37202C}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6131,6 +9043,26 @@ Global {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.DefaultBuild|x64.Build.0 = Debug|Any CPU {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|ARM.Build.0 = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|x64.Build.0 = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 2.0|x86.Build.0 = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|ARM.Build.0 = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|x64.Build.0 = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release 4.5|x86.Build.0 = Release|Any CPU {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release|Any CPU.ActiveCfg = Release|Any CPU {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release|Any CPU.Build.0 = Release|Any CPU {26C54A4F-315D-4B79-B163-EDDDE8F93A86}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6171,6 +9103,26 @@ Global {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.DefaultBuild|x64.Build.0 = Debug|Any CPU {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|ARM.Build.0 = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|x64.Build.0 = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 2.0|x86.Build.0 = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|ARM.Build.0 = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|x64.Build.0 = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release 4.5|x86.Build.0 = Release|Any CPU {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release|Any CPU.ActiveCfg = Release|Any CPU {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release|Any CPU.Build.0 = Release|Any CPU {BC37CCCB-7392-4F78-8D1C-E9629E6E046E}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6211,6 +9163,26 @@ Global {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.DefaultBuild|x64.Build.0 = Debug|Any CPU {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|ARM.Build.0 = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|x64.Build.0 = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 2.0|x86.Build.0 = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|ARM.Build.0 = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|x64.Build.0 = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release 4.5|x86.Build.0 = Release|Any CPU {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release|Any CPU.ActiveCfg = Release|Any CPU {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release|Any CPU.Build.0 = Release|Any CPU {8CFFA4FC-F46F-475D-A270-DAFBFB532BC8}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6251,6 +9223,26 @@ Global {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.DefaultBuild|x64.Build.0 = Debug|Any CPU {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|ARM.Build.0 = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|x64.Build.0 = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 2.0|x86.Build.0 = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|ARM.Build.0 = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|x64.Build.0 = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release 4.5|x86.Build.0 = Release|Any CPU {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release|Any CPU.ActiveCfg = Release|Any CPU {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release|Any CPU.Build.0 = Release|Any CPU {D6F7D31D-7F8C-45E2-AE0A-FBBD1F5F9D5F}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6291,6 +9283,26 @@ Global {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.DefaultBuild|x64.Build.0 = Debug|Any CPU {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|ARM.Build.0 = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|x64.Build.0 = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 2.0|x86.Build.0 = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|ARM.Build.0 = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|x64.Build.0 = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release 4.5|x86.Build.0 = Release|Any CPU {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release|Any CPU.ActiveCfg = Release|Any CPU {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release|Any CPU.Build.0 = Release|Any CPU {834C81C3-09B5-45D7-BE12-E7D1E6655A7C}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6331,6 +9343,26 @@ Global {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|x64.Build.0 = Debug|Any CPU {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {866B916A-207C-43F0-B403-7C4A820C2E11}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|ARM.Build.0 = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|x64.Build.0 = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 2.0|x86.Build.0 = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|ARM.Build.0 = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|x64.Build.0 = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {866B916A-207C-43F0-B403-7C4A820C2E11}.Release 4.5|x86.Build.0 = Release|Any CPU {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|Any CPU.ActiveCfg = Release|Any CPU {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|Any CPU.Build.0 = Release|Any CPU {866B916A-207C-43F0-B403-7C4A820C2E11}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6371,6 +9403,26 @@ Global {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|x64.Build.0 = Debug|Any CPU {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {199E8359-CAD3-433D-9EED-2027652B24A4}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|ARM.Build.0 = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|x64.Build.0 = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 2.0|x86.Build.0 = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|ARM.Build.0 = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|x64.Build.0 = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {199E8359-CAD3-433D-9EED-2027652B24A4}.Release 4.5|x86.Build.0 = Release|Any CPU {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|Any CPU.ActiveCfg = Release|Any CPU {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|Any CPU.Build.0 = Release|Any CPU {199E8359-CAD3-433D-9EED-2027652B24A4}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6411,6 +9463,26 @@ Global {A78068D4-2061-4376-8EDE-583D8D880DEC}.DefaultBuild|x64.Build.0 = Debug|Any CPU {A78068D4-2061-4376-8EDE-583D8D880DEC}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {A78068D4-2061-4376-8EDE-583D8D880DEC}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|ARM.Build.0 = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|x64.Build.0 = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 2.0|x86.Build.0 = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|ARM.Build.0 = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|x64.Build.0 = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release 4.5|x86.Build.0 = Release|Any CPU {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release|Any CPU.ActiveCfg = Release|Any CPU {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release|Any CPU.Build.0 = Release|Any CPU {A78068D4-2061-4376-8EDE-583D8D880DEC}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6449,6 +9521,26 @@ Global {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.DefaultBuild|x64.Build.0 = Debug|x64 {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.DefaultBuild|x86.ActiveCfg = Debug|Win32 {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.DefaultBuild|x86.Build.0 = Debug|Win32 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|Any CPU.ActiveCfg = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|Any CPU.Build.0 = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|ARM.ActiveCfg = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|ARM.Build.0 = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|ARM64.ActiveCfg = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|ARM64.Build.0 = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|x64.ActiveCfg = Release|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|x64.Build.0 = Release|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|x86.ActiveCfg = Release|Win32 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 2.0|x86.Build.0 = Release|Win32 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|Any CPU.ActiveCfg = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|Any CPU.Build.0 = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|ARM.ActiveCfg = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|ARM.Build.0 = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|ARM64.ActiveCfg = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|ARM64.Build.0 = Debug|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|x64.ActiveCfg = Release|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|x64.Build.0 = Release|x64 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|x86.ActiveCfg = Release|Win32 + {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release 4.5|x86.Build.0 = Release|Win32 {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release|Any CPU.ActiveCfg = Debug|Win32 {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release|Any CPU.Build.0 = Debug|Win32 {A07E6CB4-0132-4EB1-9A38-C8C057884DC2}.Release|ARM.ActiveCfg = Release|Win32 @@ -6487,6 +9579,26 @@ Global {09F81A12-0F77-4336-854D-9E0A74A17F9E}.DefaultBuild|x64.Build.0 = Debug|Any CPU {09F81A12-0F77-4336-854D-9E0A74A17F9E}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {09F81A12-0F77-4336-854D-9E0A74A17F9E}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|ARM.Build.0 = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|x64.Build.0 = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 2.0|x86.Build.0 = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|ARM.Build.0 = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|x64.Build.0 = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release 4.5|x86.Build.0 = Release|Any CPU {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release|Any CPU.ActiveCfg = Release|Any CPU {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release|Any CPU.Build.0 = Release|Any CPU {09F81A12-0F77-4336-854D-9E0A74A17F9E}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6527,6 +9639,26 @@ Global {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.DefaultBuild|x64.Build.0 = Debug|Any CPU {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|ARM.Build.0 = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|x64.Build.0 = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 2.0|x86.Build.0 = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|ARM.Build.0 = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|x64.Build.0 = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release 4.5|x86.Build.0 = Release|Any CPU {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release|Any CPU.ActiveCfg = Release|Any CPU {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release|Any CPU.Build.0 = Release|Any CPU {997A961C-BEDA-4B56-AA0F-C39E532F7FFA}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6567,6 +9699,26 @@ Global {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.DefaultBuild|x64.Build.0 = Debug|Any CPU {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|Any CPU.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|Any CPU.Build.0 = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|ARM.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|ARM.Build.0 = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|ARM64.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|ARM64.Build.0 = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|x64.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|x64.Build.0 = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|x86.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 2.0|x86.Build.0 = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|Any CPU.Build.0 = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|ARM.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|ARM.Build.0 = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|ARM64.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|ARM64.Build.0 = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|x64.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|x64.Build.0 = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|x86.ActiveCfg = Release|Any CPU + {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release 4.5|x86.Build.0 = Release|Any CPU {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release|Any CPU.Build.0 = Release|Any CPU {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release|ARM.ActiveCfg = Release|Any CPU @@ -6577,6 +9729,66 @@ Global {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release|x64.Build.0 = Release|Any CPU {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release|x86.ActiveCfg = Release|Any CPU {C6EBBBBE-2123-44DC-AEF7-A0D47D736AC0}.Release|x86.Build.0 = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|Any CPU.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|Any CPU.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|ARM.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|ARM.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|ARM64.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|ARM64.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|x64.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|x64.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|x86.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.AppVeyor|x86.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|ARM.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|ARM.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|ARM64.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|x64.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|x64.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|x86.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Debug|x86.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|Any CPU.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|Any CPU.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|ARM.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|ARM.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|ARM64.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|ARM64.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|x64.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|x64.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|x86.ActiveCfg = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.DefaultBuild|x86.Build.0 = Debug|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|Any CPU.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|Any CPU.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|ARM.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|ARM.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|ARM64.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|ARM64.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|x64.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|x64.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|x86.ActiveCfg = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 2.0|x86.Build.0 = Release 2.0|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|Any CPU.ActiveCfg = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|Any CPU.Build.0 = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|ARM.ActiveCfg = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|ARM.Build.0 = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|ARM64.ActiveCfg = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|ARM64.Build.0 = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|x64.ActiveCfg = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|x64.Build.0 = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|x86.ActiveCfg = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release 4.5|x86.Build.0 = Release 4.5|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|Any CPU.Build.0 = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|ARM.ActiveCfg = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|ARM.Build.0 = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|ARM64.ActiveCfg = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|ARM64.Build.0 = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|x64.ActiveCfg = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|x64.Build.0 = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|x86.ActiveCfg = Release|Any CPU + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -6699,14 +9911,15 @@ Global {834C81C3-09B5-45D7-BE12-E7D1E6655A7C} = {004337EB-0761-4D30-B9F5-AE6E1CFC6013} {866B916A-207C-43F0-B403-7C4A820C2E11} = {4EE6DBA1-71BC-49E2-8DC7-266487E61050} {A07E6CB4-0132-4EB1-9A38-C8C057884DC2} = {EC62BC9C-F2FE-4333-B7E4-110E38D43958} + {1531C1EA-BD53-41D1-A34B-CFCDF79D2651} = {EC62BC9C-F2FE-4333-B7E4-110E38D43958} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - BuildVersion_UseGlobalSettings = False - BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs - BuildVersion_StartDate = 2000/1/1 - BuildVersion_UpdateFileVersion = False - BuildVersion_UpdateAssemblyVersion = True - BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6} + BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear + BuildVersion_UpdateAssemblyVersion = True + BuildVersion_UpdateFileVersion = False + BuildVersion_StartDate = 2000/1/1 + BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs + BuildVersion_UseGlobalSettings = False EndGlobalSection EndGlobal -- cgit v1.3.1 From 509677081604e9a0c972f6a5e5215b7e86e3fed6 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Fri, 20 Mar 2020 04:12:02 +0200 Subject: FileSystemService. --- .../PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem') diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs index 804ad0036..30d473677 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs @@ -131,7 +131,7 @@ namespace Tango.PPC.Common.FileSystem _operations.Add(operation.Id, operation); - await receiver.SendGenericResponse(new FileDownloadResponse() + await receiver.SendGenericResponse(new FolderDownloadResponse() { OperationId = operation.Id, Length = new FileInfo(request.Path).Length @@ -162,7 +162,7 @@ namespace Tango.PPC.Common.FileSystem stream.Write(request.Data, 0, request.Data.Length); } - await receiver.SendGenericResponse(new ChunkUploadResponse(), token); + await receiver.SendGenericResponse(new ChunkUploadResponse(), token, new TransportResponseConfig() { Priority = QueuePriority.Low }); } catch (Exception ex) { @@ -190,7 +190,7 @@ namespace Tango.PPC.Common.FileSystem await receiver.SendGenericResponse(new ChunkDownloadResponse() { Data = data - }, token); + }, token, new TransportResponseConfig() { Priority = QueuePriority.Low }); } } -- cgit v1.3.1 From 1b9f835cb035e365808c1d0d9d85672d0614cbbd Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Fri, 20 Mar 2020 04:49:45 +0200 Subject: Folder download --- .../PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem') diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs index 30d473677..cf7a21e13 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs @@ -134,7 +134,7 @@ namespace Tango.PPC.Common.FileSystem await receiver.SendGenericResponse(new FolderDownloadResponse() { OperationId = operation.Id, - Length = new FileInfo(request.Path).Length + Length = new FileInfo(tempFile).Length }, token); } catch (Exception ex) -- cgit v1.3.1 From d48b2d23515d06a21ad241380986bf8f31773195 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Sun, 22 Mar 2020 00:04:44 +0200 Subject: Implemented WebRtcTransportAdapter. Implemented FileSystem via WebRTC. Improved FileSystemControl keyboard control. Implemented FileSystemControl context menu. Improved Transported custom request handler registration. Implemented FS copy/move/delete. Implemented InputBox. --- .../ViewModels/FileSystemViewVM.cs | 146 +++++++- .../ViewModels/RemoteDesktopViewVM.cs | 6 + .../Tango.FSE.PPCConsole/Views/FileSystemView.xaml | 61 ++-- .../Connection/MachineConnectedEventArgs.cs | 1 + .../Controls/FileSystemControl.xaml | 72 +++- .../FileSystem/FileSystemHandler.cs | 28 ++ .../FileSystem/IFileSystemProvider.cs | 6 + .../Notifications/INotificationProvider.cs | 26 +- .../Notifications/InputBoxResult.cs | 14 + .../Tango.FSE.Common/Notifications/InputBoxVM.cs | 34 ++ .../FSE/Tango.FSE.Common/Tango.FSE.Common.csproj | 2 + .../Connection/DefaultMachineProvider.cs | 5 + .../FileSystem/DefaultFileSystemProvider.cs | 195 ++++++++++- .../Navigation/DefaultNavigationManager.cs | 13 +- .../Notifications/DefaultNotificationProvider.cs | 65 ++++ .../RemoteDesktop/DefaultRemoteDesktopProvider.cs | 2 +- .../SystemInfo/DefaultSystemInfoProvider.cs | 2 +- .../FSE/Tango.FSE.UI/ViewModels/LayoutViewVM.cs | 6 + .../FSE/Tango.FSE.UI/Views/LayoutView.xaml | 2 +- .../FSE/Tango.FSE.UI/Views/MainView.xaml | 71 ++++ .../FSE/Tango.FSE.UI/Views/MainView.xaml.cs | 45 +++ .../FileSystem/DefaultFileSystemService.cs | 117 ++++++- .../FileSystem/IFileSystemService.cs | 1 + .../SideChains/WebRtc.NET/src/conductor.cc | 2 +- .../Tango.FileSystem/FileExplorerControl.cs | 380 ++++++++++++++++++++- .../Tango.FileSystem/FileSystemItem.cs | 10 +- .../Tango.FileSystem/FileSystemManager.cs | 46 +++ .../Tango.FileSystem/Network/CopyRequest.cs | 14 + .../Tango.FileSystem/Network/CopyResponse.cs | 12 + .../Tango.FileSystem/Network/DeleteRequest.cs | 13 + .../Tango.FileSystem/Network/DeleteResponse.cs | 12 + .../Tango.FileSystem/Network/InitWebRtcRequest.cs | 13 + .../Tango.FileSystem/Network/InitWebRtcResponse.cs | 12 + .../Tango.FileSystem/Network/MoveRequest.cs | 14 + .../Tango.FileSystem/Network/MoveResponse.cs | 12 + .../Tango.FileSystem/Tango.FileSystem.csproj | 8 + .../Tango.FileSystem/Themes/Generic.xaml | 17 +- .../Tango.SharedUI/Controls/NavigationControl.cs | 6 +- .../Visual_Studio/Tango.SystemInfo/WMIReader.cs | 8 +- .../Visual_Studio/Tango.Transport/ITransporter.cs | 2 +- .../Tango.Transport/TransporterBase.cs | 10 +- .../Tango.WebRTC/Network/IceCandidateRequest.cs | 13 + .../Tango.WebRTC/Network/IceCandidateResponse.cs | 12 + .../Tango.WebRTC/Network/OfferRequest.cs | 13 + .../Tango.WebRTC/Network/OfferResponse.cs | 13 + .../Visual_Studio/Tango.WebRTC/Tango.WebRTC.csproj | 15 + .../Tango.WebRTC/WebRtcTransportAdapter.cs | 307 +++++++++++++++++ .../WebRtcTransportAdapterDisconnectedException.cs | 16 + .../Tango.WebRTC/WebRtcTransportAdapterMode.cs | 14 + 49 files changed, 1846 insertions(+), 68 deletions(-) create mode 100644 Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/InputBoxResult.cs create mode 100644 Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/InputBoxVM.cs create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/CopyRequest.cs create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/CopyResponse.cs create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/DeleteRequest.cs create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/DeleteResponse.cs create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/InitWebRtcRequest.cs create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/InitWebRtcResponse.cs create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/MoveRequest.cs create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/MoveResponse.cs create mode 100644 Software/Visual_Studio/Tango.WebRTC/Network/IceCandidateRequest.cs create mode 100644 Software/Visual_Studio/Tango.WebRTC/Network/IceCandidateResponse.cs create mode 100644 Software/Visual_Studio/Tango.WebRTC/Network/OfferRequest.cs create mode 100644 Software/Visual_Studio/Tango.WebRTC/Network/OfferResponse.cs create mode 100644 Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapter.cs create mode 100644 Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapterDisconnectedException.cs create mode 100644 Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapterMode.cs (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem') diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs index cba25303e..f074294b2 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs @@ -1,4 +1,5 @@ -using System; +using MaterialDesignThemes.Wpf; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; @@ -53,6 +54,10 @@ namespace Tango.FSE.PPCConsole.ViewModels public RelayCommand DeleteFileSystemHandlerCommand { get; set; } public RelayCommand OpenFileSystemHandlerDestinationCommand { get; set; } public RelayCommand RetryFailedFileSystemHandlerCommand { get; set; } + public RelayCommand> CopyPasteCommand { get; set; } + public RelayCommand> CutPasteCommand { get; set; } + public RelayCommand> DownloadCommand { get; set; } + public RelayCommand RenameCommand { get; set; } public FileSystemViewVM() @@ -69,6 +74,10 @@ namespace Tango.FSE.PPCConsole.ViewModels DeleteFileSystemHandlerCommand = new RelayCommand(DeleteFileSystemHandler); OpenFileSystemHandlerDestinationCommand = new RelayCommand(OpenFileSystemHandlerDestination); RetryFailedFileSystemHandlerCommand = new RelayCommand(RetryFailedFileSystemHandler); + CopyPasteCommand = new RelayCommand>((items) => PasteItems(items, false)); + CutPasteCommand = new RelayCommand>((items) => PasteItems(items, true)); + DownloadCommand = new RelayCommand>(DownloadSelectedItems); + RenameCommand = new RelayCommand(RenameFileSystemItem); } private async void NavigateBack() @@ -97,7 +106,10 @@ namespace Tango.FSE.PPCConsole.ViewModels private async void MachineProvider_MachineConnected(object sender, MachineConnectedEventArgs e) { - await Navigate(null); + if (e.DifferentFromPrevious) + { + await Navigate(null); + } } private async void NavigateToCurrentPath() @@ -123,9 +135,41 @@ namespace Tango.FSE.PPCConsole.ViewModels { if (items != null && items.Count > 0) { - if (await NotificationProvider.ShowWarningQuestion("Are you sure you want to delete the selected files/folders?", "DELETE")) + if (await NotificationProvider.ShowWarningQuestion($"Are you sure you want to delete {(items.Count == 1 ? $"'{items.First().Name}'" : $"the {items.Count} selected files/folders")}?", "DELETE")) { - //TODO: Delete items + using (var task = NotificationProvider.PushTaskItem("Removing...")) + { + int remainingItems = items.Count; + + foreach (var item in items) + { + task.UpdateProgress($"Removing '{item.Name}'..."); + + try + { + remainingItems--; + await FileSystemProvider.Delete(item); + } + catch (Exception ex) + { + LogManager.Log(ex, $"Could not remove '{item.Name}'."); + + if (remainingItems > 0) + { + if (!await NotificationProvider.ShowWarningQuestion($"Could not remove '{item.Name}'.\n{ex.FlattenMessage()}\nDo you wish to continue removing the remaining items?")) + { + break; + } + } + else + { + await NotificationProvider.ShowError($"Could not remove '{item.Name}'.\n{ex.FlattenMessage()}"); + } + } + } + } + + NavigateToCurrentPath(); } } } @@ -135,6 +179,15 @@ namespace Tango.FSE.PPCConsole.ViewModels foreach (var item in items.Where(x => x.FileSystemItem.Type != FileSystemItemType.Drive)) { Debug.WriteLine($"Dropped out: {item.FileSystemItem.Name} => {item.Destination}"); + + if (File.Exists(Path.Combine(item.Destination, item.FileSystemItem.Name)) || Directory.Exists(Path.Combine(item.Destination, item.FileSystemItem.Name))) + { + if (!await NotificationProvider.ShowWarningQuestion($"'{item.FileSystemItem.Name}' already exists on '{Path.GetDirectoryName(item.Destination)}'. Do you want to overwrite?")) + { + continue; + } + } + var handler = await FileSystemProvider.Download(item.FileSystemItem, item.Destination); FileSystemHandlers.Insert(0, handler); } @@ -234,6 +287,91 @@ namespace Tango.FSE.PPCConsole.ViewModels } } + private async void PasteItems(List items, bool move = false) + { + using (var task = NotificationProvider.PushTaskItem("Please wait...")) + { + int remainingItems = items.Count; + + foreach (var item in items) + { + Debug.WriteLine($"{(move ? "Cut" : "Copy")} Paste Item '{item.Name}' To '{CurrentItem.Name}'."); + + try + { + remainingItems--; + + if (move) + { + task.UpdateProgress($"Moving '{item.Name}'..."); + await FileSystemProvider.Move(item, CurrentItem); + } + else + { + task.UpdateProgress($"Copying '{item.Name}'..."); + await FileSystemProvider.Copy(item, CurrentItem); + } + } + catch (Exception ex) + { + string operation = move ? "move" : "copy"; + + LogManager.Log(ex, $"Could not {operation} '{item.Name}'."); + + if (remainingItems > 0) + { + if (!await NotificationProvider.ShowWarningQuestion($"Could not {operation} '{item.Name}'.\n{ex.FlattenMessage()}\nDo you wish to continue with the remaining items?")) + { + break; + } + } + else + { + await NotificationProvider.ShowError($"Could not {operation} '{item.Name}'.\n{ex.FlattenMessage()}"); + } + } + } + + NavigateToCurrentPath(); + } + } + + private void DownloadSelectedItems(List items) + { + + } + + private async void RenameFileSystemItem(FileSystemItem item) + { + if (item.Type != FileSystemItemType.Drive) + { + var result = await NotificationProvider.ShowInputBox( + "Rename", + $"Please enter a new {(item.Type == FileSystemItemType.File ? "file" : "folder")} name and press 'ENTER'.", + PackIconKind.Rename, item.Name, + $"{(item.Type == FileSystemItemType.File ? "file" : "folder")} name", + 100, + "RENAME"); + + if (result.Confirmed && result.Input != item.Name) + { + try + { + using (NotificationProvider.PushTaskItem("Renaming...")) + { + await FileSystemProvider.Rename(item, result.Input); + item.Path = Path.Combine(Path.GetDirectoryName(item.Path), result.Input); + } + } + catch (Exception ex) + { + LogManager.Log(ex, $"Error renaming '{item.Path}' to {result.Input}."); + await NotificationProvider.ShowError($"Error renaming '{item.Name}'.\n{ex.FlattenMessage()}"); + } + } + } + } + private void OnCurrentItemChanged() { CurrentPath = CurrentItem.Path; diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/RemoteDesktopViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/RemoteDesktopViewVM.cs index 1708322bc..9c2b139d9 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/RemoteDesktopViewVM.cs +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/RemoteDesktopViewVM.cs @@ -47,6 +47,12 @@ namespace Tango.FSE.PPCConsole.ViewModels base.OnApplicationStarted(); RemoteDesktopProvider.FrameReceived += RemoteDesktopProvider_FrameReceived; + MachineProvider.MachineConnected += MachineProvider_MachineConnected; + } + + private void MachineProvider_MachineConnected(object sender, Common.Connection.MachineConnectedEventArgs e) + { + Source = null; } private async void StartRemoteDesktop() diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml index 8038ea905..d1143ede4 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml @@ -17,7 +17,7 @@ - + @@ -92,7 +92,7 @@ - + Devices @@ -121,6 +121,7 @@ + DropCommand="{Binding DropCommand}" + CutPasteCommand="{Binding CutPasteCommand}" + CopyPasteCommand="{Binding CopyPasteCommand}" + DownloadCommand="{Binding DownloadCommand}" + BackCommand="{Binding BackCommand}" + RenameCommand="{Binding RenameCommand}"/> - - - - Transfer Queue - + + + + + Transfer Queue + () - - + + + + + Enable fast communication channel + + @@ -221,13 +233,13 @@ + + + + + + + @@ -239,11 +251,16 @@ - - - / - - + + + + / + + + + /s + + diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Connection/MachineConnectedEventArgs.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/Connection/MachineConnectedEventArgs.cs index ae4d18538..003fe407b 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/Connection/MachineConnectedEventArgs.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Connection/MachineConnectedEventArgs.cs @@ -10,5 +10,6 @@ namespace Tango.FSE.Common.Connection public class MachineConnectedEventArgs : EventArgs { public IExternalBridgeClient MachineOperator { get; set; } + public bool DifferentFromPrevious { get; set; } } } diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml b/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml index 7230d97fb..62de7cf48 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml @@ -2,6 +2,8 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI" xmlns:local="clr-namespace:Tango.FileSystem;assembly=Tango.FileSystem" + xmlns:material="http://materialdesigninxaml.net/winfx/xaml/themes" + xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:l="clr-namespace:Tango.FSE.Common.Controls"> @@ -9,6 +11,11 @@ @@ -123,7 +187,7 @@ - + @@ -149,7 +213,7 @@ - + @@ -158,7 +222,7 @@ - + @@ -167,7 +231,7 @@ - + diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs index 48fb35c0f..a748a63cc 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs @@ -12,6 +12,8 @@ namespace Tango.FSE.Common.FileSystem { private Action _abortAction; private FileSystemHandlerStatus _statusBeforePause; + private System.Timers.Timer _transferRateTimer; + private double _lastPosition; public FileSystemHandlerType Type { get; set; } @@ -65,6 +67,13 @@ namespace Tango.FSE.Common.FileSystem set { _length = value; RaisePropertyChangedAuto(); } } + private long _transferRate; + public long TransferRate + { + get { return _transferRate; } + set { _transferRate = value; RaisePropertyChangedAuto(); } + } + private Exception _failedException; public Exception FailedException { @@ -83,8 +92,27 @@ namespace Tango.FSE.Common.FileSystem _abortAction = abortAction; } + private void _transferRateTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + if (Status == FileSystemHandlerStatus.Aborted || Status == FileSystemHandlerStatus.Completed || Status == FileSystemHandlerStatus.Failed) + { + _transferRateTimer.Dispose(); + return; + } + + TransferRate = (long)(Position - _lastPosition); + _lastPosition = Position; + } + internal void InvalidateProgress(double position, double length) { + if (_transferRateTimer == null) + { + _transferRateTimer = new System.Timers.Timer(1000); + _transferRateTimer.Elapsed += _transferRateTimer_Elapsed; + _transferRateTimer.Start(); + } + Position = position; Length = length; diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/IFileSystemProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/IFileSystemProvider.cs index c7e00610a..253bf801b 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/IFileSystemProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/IFileSystemProvider.cs @@ -10,10 +10,16 @@ namespace Tango.FSE.Common.FileSystem { public interface IFileSystemProvider { + bool EnableWebRTC { get; set; } + bool IsWebRtcAvailable { get; } Task GetFolder(String path); Task GetSpecialFolder(SpecialFolder specialFolder); Task GetThisPC(); Task Download(FileSystemItem item, String localTargetFolder); Task Upload(String sourcePath, String remoteTargetFolder); + Task Copy(FileSystemItem source, FileSystemItem target); + Task Move(FileSystemItem source, FileSystemItem target); + Task Rename(FileSystemItem source, String newName); + Task Delete(FileSystemItem item); } } diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/INotificationProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/INotificationProvider.cs index 5985a687d..49402bd41 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/INotificationProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/INotificationProvider.cs @@ -1,4 +1,5 @@ -using System; +using MaterialDesignThemes.Wpf; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; @@ -72,6 +73,16 @@ namespace Tango.FSE.Common.Notifications /// bool HasMessageBox { get; } + /// + /// Gets the current input box. + /// + InputBoxVM CurrentInputBox { get; } + + /// + /// Gets a value indicating whether this instance has input box. + /// + bool HasInputBox { get; } + /// /// Gets the current dialog. /// @@ -111,6 +122,19 @@ namespace Tango.FSE.Common.Notifications /// The message. Task ShowSuccess(String message); + /// + /// Shows an input box. + /// + /// The title. + /// The message. + /// The icon. + /// The default input. + /// The input hint. + /// The ok text. + /// The cancel text. + /// + Task ShowInputBox(String title, String message, PackIconKind icon = PackIconKind.InfoOutline, String defaultInput = null, String inputHint = null, int? maxChars = null, String okText = null, String cancelText = null); + /// /// Shows a question message box. /// diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/InputBoxResult.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/InputBoxResult.cs new file mode 100644 index 000000000..1765dd655 --- /dev/null +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/InputBoxResult.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FSE.Common.Notifications +{ + public class InputBoxResult + { + public bool Confirmed { get; set; } + public String Input { get; set; } + } +} diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/InputBoxVM.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/InputBoxVM.cs new file mode 100644 index 000000000..7744d04d0 --- /dev/null +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Notifications/InputBoxVM.cs @@ -0,0 +1,34 @@ +using MaterialDesignThemes.Wpf; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FSE.Common.Notifications +{ + public class InputBoxVM : MessageBoxVM + { + public PackIconKind Icon { get; set; } + public String InputHint { get; set; } + + public int MaxCharacters { get; set; } + + private String _input; + public String Input + { + get { return _input; } + set { _input = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } + } + + public InputBoxVM() : base() + { + HasCancel = true; + } + + protected override bool CanOK() + { + return base.CanOK() && Input.IsNotNullOrEmpty(); + } + } +} diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Tango.FSE.Common.csproj b/Software/Visual_Studio/FSE/Tango.FSE.Common/Tango.FSE.Common.csproj index e3ecb319d..02df7140f 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/Tango.FSE.Common.csproj +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Tango.FSE.Common.csproj @@ -124,6 +124,8 @@ + + diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Connection/DefaultMachineProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Connection/DefaultMachineProvider.cs index f4ee8c461..790d21d6c 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Connection/DefaultMachineProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Connection/DefaultMachineProvider.cs @@ -26,6 +26,7 @@ namespace Tango.FSE.UI.Connection public class DefaultMachineProvider : ExtendedObject, IMachineProvider { private List _eventRegistrations; + private String _lastMachineSerialNumber; private class EventRegistration { @@ -184,6 +185,7 @@ namespace Tango.FSE.UI.Connection IsBusy = true; String serial = vm.GetMachineSerialNumber(); + machine.SerialNumber = serial; using (var task = NotificationProvider.PushTaskItem($"Connecting to machine '{serial}'...")) { @@ -328,7 +330,10 @@ namespace Tango.FSE.UI.Connection MachineConnected?.Invoke(this, new MachineConnectedEventArgs() { MachineOperator = machineOperator, + DifferentFromPrevious = machineOperator.SerialNumber != _lastMachineSerialNumber, }); + + _lastMachineSerialNumber = machineOperator.SerialNumber; } protected virtual void OnMachineDisconnected(IExternalBridgeClient machineOperator, Exception exception) diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs index bcc39d11d..1f6641f3a 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.IO.Compression; using System.Linq; @@ -13,16 +14,97 @@ using Tango.FileSystem.Network; using Tango.FSE.Common.Connection; using Tango.FSE.Common.FileSystem; using Tango.Transport; +using Tango.Transport.Transporters; +using Tango.WebRTC; namespace Tango.FSE.UI.FileSystem { public class DefaultFileSystemProvider : ExtendedObject, IFileSystemProvider { private IMachineProvider _machineProvider; + private BasicTransporter _webRtcTransporter; + private const string WEB_RTC_CHANNEL_NAME = "FileSystemChannel"; + private const long MAX_CHUNK_SIZE = 1024 * 10; + private const long MAX_CHUNK_SIZE_WEB_RTC = 1024 * 15; + private List _activeHandlers; + + private bool _enableWebRTC; + public bool EnableWebRTC + { + get { return _enableWebRTC; } + set { _enableWebRTC = value; RaisePropertyChangedAuto(); } + } + + private bool _isWebRtcAvailable; + public bool IsWebRtcAvailable + { + get { return _isWebRtcAvailable; } + private set { _isWebRtcAvailable = value; RaisePropertyChangedAuto(); } + } public DefaultFileSystemProvider(IMachineProvider machineProvider) { + _activeHandlers = new List(); + + EnableWebRTC = true; //TODO: From Settings.. _machineProvider = machineProvider; + _machineProvider.MachineConnected += _machineProvider_MachineConnected; + _machineProvider.MachineDisconnected += _machineProvider_MachineDisconnected; + } + + private void _machineProvider_MachineDisconnected(object sender, MachineDisconnectedEventArgs e) + { + IsWebRtcAvailable = false; + + foreach (var handler in _activeHandlers.ToList()) + { + try + { + handler.RaiseFailed(new TransporterDisconnectedException("Machine disconnected.")); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + } + } + + _activeHandlers.Clear(); + } + + private async void _machineProvider_MachineConnected(object sender, MachineConnectedEventArgs e) + { + if (EnableWebRTC) + { + try + { + IsWebRtcAvailable = false; + + await _machineProvider.MachineOperator.SendGenericRequest(new InitWebRtcRequest() + { + DataChannelName = WEB_RTC_CHANNEL_NAME + }, new TransportRequestConfig() + { + Timeout = TimeSpan.FromSeconds(60), + Priority = QueuePriority.Low + }); + + _webRtcTransporter = new BasicTransporter(new WebRtcTransportAdapter(_machineProvider.MachineOperator, WebRtcTransportAdapterMode.Active, WEB_RTC_CHANNEL_NAME)); + _webRtcTransporter.UseKeepAlive = false; + _webRtcTransporter.ComponentName = "File System Active WebRTC Transporter"; + await _webRtcTransporter.Connect(); + + IsWebRtcAvailable = true; + + LogManager.Log("FileSystem via WebRTC is ready."); + } + catch (Exception ex) + { + IsWebRtcAvailable = false; + EnableWebRTC = false; + + LogManager.Log(ex, "Error initializing FileSystem via WebRTC."); + } + } } public async Task GetFolder(string path) @@ -100,6 +182,8 @@ namespace Tango.FSE.UI.FileSystem } }); + _activeHandlers.Add(handler); + ThreadFactory.StartNew(async () => { try @@ -135,11 +219,13 @@ namespace Tango.FSE.UI.FileSystem } catch (Exception ex) { + _activeHandlers.Remove(handler); handler.RaiseFailed(ex); return; } long position = 0; + bool webRtcFailed = false; var tempFile = TemporaryManager.CreateFile(); @@ -153,13 +239,32 @@ namespace Tango.FSE.UI.FileSystem try { - var response = await _machineProvider.MachineOperator.SendGenericRequest( - new ChunkDownloadRequest() + ChunkDownloadResponse response = null; + ChunkDownloadRequest request = new ChunkDownloadRequest() { - MaxChunkSize = 1024 * 10, + MaxChunkSize = MAX_CHUNK_SIZE, OperationId = operationId, Position = position, - }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(30), Priority = QueuePriority.Low }); + }; + + if (_webRtcTransporter != null && _webRtcTransporter.State == TransportComponentState.Connected && EnableWebRTC && !webRtcFailed) + { + try + { + request.MaxChunkSize = MAX_CHUNK_SIZE_WEB_RTC; + response = await _webRtcTransporter.SendGenericRequest(request, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(30), Priority = QueuePriority.Low }); + } + catch (Exception ex) + { + webRtcFailed = true; + LogManager.Log(ex, "WebRTC chunk download failed. Falling back to standard download..."); + continue; + } + } + else + { + response = await _machineProvider.MachineOperator.SendGenericRequest(request, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(30), Priority = QueuePriority.Low }); + } using (FileStream fs = new FileStream(tempFile, FileMode.Append)) { @@ -171,6 +276,7 @@ namespace Tango.FSE.UI.FileSystem } catch (Exception ex) { + _activeHandlers.Remove(handler); tempFile.Delete(); handler.RaiseFailed(ex); return; @@ -203,6 +309,8 @@ namespace Tango.FSE.UI.FileSystem { tempFile.Delete(); } + + _activeHandlers.Remove(handler); }); return Task.FromResult(handler); @@ -212,5 +320,84 @@ namespace Tango.FSE.UI.FileSystem { throw new NotImplementedException(); } + + public async Task Copy(FileSystemItem source, FileSystemItem target) + { + if (source.Type == FileSystemItemType.Drive) + { + throw new NotSupportedException("The source file system item is not supported for copying."); + } + if (target.Type == FileSystemItemType.File) + { + throw new NotSupportedException("The target file system item is not a valid container."); + } + + await _machineProvider.MachineOperator.SendGenericRequest(new CopyRequest() + { + + Source = source.Path, + Destination = Path.Combine(target.Path, source.Name) + + }, new TransportRequestConfig() + { + Timeout = TimeSpan.FromSeconds(120), + }); + } + + public async Task Move(FileSystemItem source, FileSystemItem target) + { + if (source.Type == FileSystemItemType.Drive) + { + throw new NotSupportedException("The source file system item is not supported for copying."); + } + if (target.Type == FileSystemItemType.File) + { + throw new NotSupportedException("The target file system item is not a valid container."); + } + + await _machineProvider.MachineOperator.SendGenericRequest(new MoveRequest() + { + + Source = source.Path, + Destination = Path.Combine(target.Path, source.Name) + + }, new TransportRequestConfig() + { + Timeout = TimeSpan.FromSeconds(120), + }); + } + + public async Task Rename(FileSystemItem source, string newName) + { + if (source.Type == FileSystemItemType.Drive) + { + throw new NotSupportedException("The source file system item is not supported for copying."); + } + if (newName.ToList().Exists(x => Path.GetInvalidFileNameChars().Contains(x))) + { + throw new ArgumentException("The new name contains invalid characters."); + } + + await _machineProvider.MachineOperator.SendGenericRequest(new MoveRequest() + { + + Source = source.Path, + Destination = Path.Combine(Path.GetDirectoryName(source.Path), newName) + + }); + } + + public async Task Delete(FileSystemItem item) + { + if (item.Type == FileSystemItemType.Drive) + { + throw new NotSupportedException("The source file system item is not supported for deletion."); + } + + await _machineProvider.MachineOperator.SendGenericRequest(new DeleteRequest() + { + Path = item.Path + }, new TransportRequestConfig() { Timeout = TimeSpan.FromSeconds(120) }); + } } } diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Navigation/DefaultNavigationManager.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Navigation/DefaultNavigationManager.cs index cf0b9d895..cdb328de2 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Navigation/DefaultNavigationManager.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Navigation/DefaultNavigationManager.cs @@ -172,7 +172,7 @@ namespace Tango.FSE.UI.Navigation if (_currentVM != null && _currentVM is INavigationBlocker) { - if (!await(_currentVM as INavigationBlocker).OnNavigateOutRequest()) + if (!await (_currentVM as INavigationBlocker).OnNavigateOutRequest()) { return false; } @@ -273,7 +273,16 @@ namespace Tango.FSE.UI.Navigation _lastFullPath = fullPath; - MainView.Instance.NavigationControl.NavigateTo(NavigationView.LayoutView.ToString()); + if (MainView.Instance.NavigationControl.GetSelectedElementNavigationName() != NavigationView.LayoutView.ToString()) + { + NotifyOnBeforeNavigated(null, LayoutView.Instance.DataContext); + + MainView.Instance.NavigationControl.NavigateTo(NavigationView.LayoutView.ToString(), () => + { + NotifyOnNavigated(null, LayoutView.Instance.DataContext); + }); + } + var navigationControl = LayoutView.Instance.NavigationControl; CurrentModule = module; var moduleView = navigationControl.NavigateTo(module.Name); diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Notifications/DefaultNotificationProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Notifications/DefaultNotificationProvider.cs index 40d2e58e7..666619b59 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Notifications/DefaultNotificationProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Notifications/DefaultNotificationProvider.cs @@ -127,6 +127,32 @@ namespace Tango.FSE.UI.Notifications } } + private InputBoxVM _currentInputBox; + /// + /// Gets the current input box. + /// + public InputBoxVM CurrentInputBox + { + get { return _currentInputBox; } + private set + { + _currentInputBox = value; + RaisePropertyChangedAuto(); + RaisePropertyChanged(nameof(HasInputBox)); + } + } + + /// + /// Gets a value indicating whether this instance has input box. + /// + public bool HasInputBox + { + get + { + return CurrentInputBox != null; + } + } + private FrameworkElement _currentDialog; /// /// Gets the current dialog if any. @@ -285,6 +311,45 @@ namespace Tango.FSE.UI.Notifications return source.Task; } + public Task ShowInputBox(string title, string message, PackIconKind icon = PackIconKind.InformationOutline, string defaultInput = null, string inputHint = null, int? maxChars = null, string okText = null, string cancelText = null) + { + TaskCompletionSource source = new TaskCompletionSource(); + + InputBoxVM vm = new InputBoxVM(); + vm.Title = title; + vm.Message = message; + vm.Icon = icon; + vm.Input = defaultInput; + vm.InputHint = inputHint; + if (maxChars != null) + { + vm.MaxCharacters = maxChars.Value; + } + if (okText != null) + { + vm.OKText = okText; + } + if (cancelText != null) + { + vm.CancelText = cancelText; + } + + vm.Accepted += () => + { + CurrentInputBox = null; + source.SetResult(new InputBoxResult() { Confirmed = true, Input = vm.Input }); + }; + vm.Canceled += () => + { + CurrentInputBox = null; + source.SetResult(new InputBoxResult() { Confirmed = false, Input = vm.Input }); + }; + + CurrentInputBox = vm; + + return source.Task; + } + /// /// Called when the message box has been closed. /// diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteDesktop/DefaultRemoteDesktopProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteDesktop/DefaultRemoteDesktopProvider.cs index 623b819d2..bb1fa9b58 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteDesktop/DefaultRemoteDesktopProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteDesktop/DefaultRemoteDesktopProvider.cs @@ -123,7 +123,7 @@ namespace Tango.FSE.UI.RemoteDesktop _machineProvider.MachineOperator.RegisterRequestHandler(OnIceCandidateRequestReceived); } - private async void OnIceCandidateRequestReceived(WebRtcIceCandidateRequest request, string token) + private async void OnIceCandidateRequestReceived(ITransporter transporter, WebRtcIceCandidateRequest request, string token) { LogManager.Log("Ice candidate request received from the remote peer."); await _machineProvider.MachineOperator.SendGenericResponse(new WebRtcIceCandidateResponse() { }, token); diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/SystemInfo/DefaultSystemInfoProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/SystemInfo/DefaultSystemInfoProvider.cs index 9b72b308a..e691939f0 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/SystemInfo/DefaultSystemInfoProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/SystemInfo/DefaultSystemInfoProvider.cs @@ -34,7 +34,7 @@ namespace Tango.FSE.UI.SystemInfo { var response = await MachineProvider.MachineOperator.SendGenericRequest(new GetMachineInformationRequest(), new Transport.TransportRequestConfig() { - Timeout = TimeSpan.FromSeconds(30) + Timeout = TimeSpan.FromSeconds(120) }); _package = response.Package; diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LayoutViewVM.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LayoutViewVM.cs index 4e6621b9e..9ed73afb2 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LayoutViewVM.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LayoutViewVM.cs @@ -170,6 +170,12 @@ namespace Tango.FSE.UI.ViewModels MachineProvider.MachineConnected += MachineProvider_MachineConnected; } + public override void OnNavigatedTo() + { + base.OnNavigatedTo(); + this.SetFocus(nameof(ToggleConnectionPaneCommand)); + } + private void DiagnosticsProvider_FrameReceived(object sender, Common.Diagnostics.DiagnosticsFrameReceivedEventArgs e) { Debug.WriteLine("Diagnostics Received..."); diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Views/LayoutView.xaml b/Software/Visual_Studio/FSE/Tango.FSE.UI/Views/LayoutView.xaml index cbe57e8dc..1c3cec748 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Views/LayoutView.xaml +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Views/LayoutView.xaml @@ -272,7 +272,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Views/MainView.xaml.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Views/MainView.xaml.cs index ae56ff7db..3d29032b1 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Views/MainView.xaml.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Views/MainView.xaml.cs @@ -60,5 +60,50 @@ namespace Tango.FSE.UI.Views } } } + + private async void GridInputBox_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) + { + if (gridInputBox.IsVisible) + { + _previousFocusedElement = Keyboard.FocusedElement as UIElement; + await Task.Delay(100); + txtInput.Focus(); + Keyboard.Focus(txtInput); + txtInput.SelectAll(); + btnInputOK.IsDefault = true; + } + else + { + _previousFocusedElement?.Focus(); + } + } + + private void TxtInput_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Enter) + { + if (btnInputOK.Command != null) + { + if (btnInputOK.Command.CanExecute(null)) + { + btnInputOK.Command.Execute(null); + } + } + + e.Handled = true; + } + else if (e.Key == Key.Escape) + { + if (btnInputCancel.Command != null) + { + if (btnInputCancel.Command.CanExecute(null)) + { + btnInputCancel.Command.Execute(null); + } + } + + e.Handled = true; + } + } } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs index cf7a21e13..512935b50 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/DefaultFileSystemService.cs @@ -13,6 +13,8 @@ using Tango.FileSystem.Network; using Tango.Integration.ExternalBridge; using Tango.PPC.Common.ExternalBridge; using Tango.Transport; +using Tango.Transport.Transporters; +using Tango.WebRTC; namespace Tango.PPC.Common.FileSystem { @@ -42,16 +44,61 @@ namespace Tango.PPC.Common.FileSystem private FileSystemManager _manager; private Dictionary _operations; + private Dictionary _webRtcClients; public bool Enabled { get; set; } = true; + public bool EnableWebRTC { get; set; } = true; public DefaultFileSystemService(IPPCExternalBridgeService externalBridge) { + _webRtcClients = new Dictionary(); _manager = new FileSystemManager(); _operations = new Dictionary(); externalBridge.RegisterRequestHandler(this); } + [ExternalBridgeRequestHandlerMethod(typeof(InitWebRtcRequest))] + public async void OnInitWebRtcRequest(InitWebRtcRequest request, String token, ExternalBridgeReceiver receiver) + { + try + { + if (!EnableWebRTC) + { + await receiver.SendErrorResponse(new InvalidOperationException("The file system service WebRTC channel is disabled on this machine."), token); + return; + } + + if (_webRtcClients.ContainsKey(receiver)) + { + _webRtcClients[receiver].Dispose(); + } + + var webRtcAdapter = new WebRtcTransportAdapter(receiver, WebRtcTransportAdapterMode.Passive, request.DataChannelName); + webRtcAdapter.Ready += (x, e) => + { + LogManager.Log("File System via WebRTC is ready."); + }; + + BasicTransporter webRtcTransporter = new BasicTransporter(webRtcAdapter); + webRtcTransporter = new BasicTransporter(webRtcAdapter); + webRtcTransporter.ComponentName = "File System Passive WebRTC Transporter"; + webRtcTransporter.UseKeepAlive = false; + webRtcTransporter.RegisterRequestHandler(WebRtcChunkDownloadRequestReceived); + await webRtcTransporter.Connect(); + await receiver.SendGenericResponse(new InitWebRtcResponse(), token); + _webRtcClients[receiver] = webRtcTransporter; + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + + private void WebRtcChunkDownloadRequestReceived(ITransporter transporter, ChunkDownloadRequest request, string token) + { + OnChunkDownloadRequest(request, token, transporter); + } + [ExternalBridgeRequestHandlerMethod(typeof(GetFileSystemItemRequest))] public async void OnGetFileSystemItemRequest(GetFileSystemItemRequest request, String token, ExternalBridgeReceiver receiver) { @@ -171,7 +218,7 @@ namespace Tango.PPC.Common.FileSystem } [ExternalBridgeRequestHandlerMethod(typeof(ChunkDownloadRequest))] - public async void OnChunkDownloadRequest(ChunkDownloadRequest request, String token, ExternalBridgeReceiver receiver) + public async void OnChunkDownloadRequest(ChunkDownloadRequest request, String token, ITransporter receiver) { FileSystemOperation operation; _operations.TryGetValue(request.OperationId, out operation); @@ -182,16 +229,26 @@ namespace Tango.PPC.Common.FileSystem return; } - using (FileStream stream = new FileStream(operation.Path, FileMode.Open)) + FileStream stream = null; + + try { + stream = new FileStream(operation.Path, FileMode.Open); stream.Position = request.Position; byte[] data = new byte[Math.Min(request.MaxChunkSize, stream.Length - stream.Position)]; await stream.ReadAsync(data, 0, data.Length); + stream.Dispose(); + stream = null; await receiver.SendGenericResponse(new ChunkDownloadResponse() { Data = data }, token, new TransportResponseConfig() { Priority = QueuePriority.Low }); } + catch (Exception ex) + { + stream?.Dispose(); + await receiver.SendErrorResponse(ex, token); + } } [ExternalBridgeRequestHandlerMethod(typeof(AbortOperationRequest))] @@ -235,9 +292,63 @@ namespace Tango.PPC.Common.FileSystem } } - public void OnReceiverDisconnected(ExternalBridgeReceiver receiver) + [ExternalBridgeRequestHandlerMethod(typeof(MoveRequest))] + public async void OnMoveRequest(MoveRequest request, String token, ExternalBridgeReceiver receiver) + { + try + { + _manager.Move(request); + await receiver.SendGenericResponse(new MoveResponse(), token); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + + [ExternalBridgeRequestHandlerMethod(typeof(CopyRequest))] + public async void OnCopyRequest(CopyRequest request, String token, ExternalBridgeReceiver receiver) + { + try + { + _manager.Copy(request); + await receiver.SendGenericResponse(new CopyResponse(), token); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + + [ExternalBridgeRequestHandlerMethod(typeof(DeleteRequest))] + public async void OnDeleteRequest(DeleteRequest request, String token, ExternalBridgeReceiver receiver) { + try + { + _manager.Delete(request.Path); + await receiver.SendGenericResponse(new DeleteResponse(), token); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + } + public void OnReceiverDisconnected(ExternalBridgeReceiver receiver) + { + if (_webRtcClients.ContainsKey(receiver)) + { + try + { + var webRtcTransporter = _webRtcClients[receiver]; + _webRtcClients.Remove(receiver); + webRtcTransporter.Dispose(); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error disposing the WebRTC transporter."); + } + } } } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/IFileSystemService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/IFileSystemService.cs index 050bb1cd6..6cf3321a3 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/IFileSystemService.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem/IFileSystemService.cs @@ -9,5 +9,6 @@ namespace Tango.PPC.Common.FileSystem public interface IFileSystemService { bool Enabled { get; set; } + bool EnableWebRTC { get; set; } } } diff --git a/Software/Visual_Studio/SideChains/WebRtc.NET/src/conductor.cc b/Software/Visual_Studio/SideChains/WebRtc.NET/src/conductor.cc index c7c4f3ba5..8a2efa438 100644 --- a/Software/Visual_Studio/SideChains/WebRtc.NET/src/conductor.cc +++ b/Software/Visual_Studio/SideChains/WebRtc.NET/src/conductor.cc @@ -516,7 +516,7 @@ namespace Native // A data buffer was successfully received. void Conductor::OnMessage(const webrtc::DataBuffer& buffer) { - LOG(INFO) << __FUNCTION__; + //LOG(INFO) << __FUNCTION__; //Causes low performance when debugging if (buffer.binary) { diff --git a/Software/Visual_Studio/Tango.FileSystem/FileExplorerControl.cs b/Software/Visual_Studio/Tango.FileSystem/FileExplorerControl.cs index 23cac7733..60061780b 100644 --- a/Software/Visual_Studio/Tango.FileSystem/FileExplorerControl.cs +++ b/Software/Visual_Studio/Tango.FileSystem/FileExplorerControl.cs @@ -16,6 +16,7 @@ using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; +using Tango.Core.Commands; using Tango.Core.IO; namespace Tango.FileSystem @@ -28,6 +29,41 @@ namespace Tango.FileSystem private Point _dragOutStartPoint; private bool _isMouseDown; private List _selectedItemsBeforeDrag; + private List _copyItems; + private bool _isCut; + private bool _isAfterContextMenu; + + #region IsCut Attached Property + + /// + /// Determines whether the draggable element is currently being dragged. + /// + public static readonly DependencyProperty IsCutProperty = + DependencyProperty.RegisterAttached("IsCut", + typeof(bool), typeof(FileExplorerControl), + new FrameworkPropertyMetadata(false)); + + /// + /// Sets the IsCut attached property. + /// + /// The element. + /// if set to true [value]. + public static void SetIsCut(FrameworkElement element, bool value) + { + element.SetValue(IsCutProperty, value); + } + + /// + /// Gets the is dragging attached property. + /// + /// The element. + /// + public static bool GetIsCut(FrameworkElement element) + { + return (bool)element.GetValue(IsCutProperty); + } + + #endregion public IFileSystemContainer CurrentItem { @@ -35,7 +71,7 @@ namespace Tango.FileSystem set { SetValue(CurrentItemProperty, value); } } public static readonly DependencyProperty CurrentItemProperty = - DependencyProperty.Register("CurrentItem", typeof(IFileSystemContainer), typeof(FileExplorerControl), new PropertyMetadata(null)); + DependencyProperty.Register("CurrentItem", typeof(IFileSystemContainer), typeof(FileExplorerControl), new PropertyMetadata(null, (d, e) => (d as FileExplorerControl).OnCurrentItemChanged())); public FileSystemItem SelectedItem { @@ -61,6 +97,14 @@ namespace Tango.FileSystem public static readonly DependencyProperty DeleteCommandProperty = DependencyProperty.Register("DeleteCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + public ICommand DeleteCommandInternal + { + get { return (ICommand)GetValue(DeleteCommandInternalProperty); } + set { SetValue(DeleteCommandInternalProperty, value); } + } + public static readonly DependencyProperty DeleteCommandInternalProperty = + DependencyProperty.Register("DeleteCommandInternal", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + public ICommand DropCommand { get { return (ICommand)GetValue(DropCommandProperty); } @@ -77,6 +121,110 @@ namespace Tango.FileSystem public static readonly DependencyProperty DragCommandProperty = DependencyProperty.Register("DragCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + public ICommand CopyCommand + { + get { return (ICommand)GetValue(CopyCommandProperty); } + set { SetValue(CopyCommandProperty, value); } + } + public static readonly DependencyProperty CopyCommandProperty = + DependencyProperty.Register("CopyCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand CutCommand + { + get { return (ICommand)GetValue(CutCommandProperty); } + set { SetValue(CutCommandProperty, value); } + } + public static readonly DependencyProperty CutCommandProperty = + DependencyProperty.Register("CutCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand CopyPasteCommand + { + get { return (ICommand)GetValue(CopyPasteCommandProperty); } + set { SetValue(CopyPasteCommandProperty, value); } + } + public static readonly DependencyProperty CopyPasteCommandProperty = + DependencyProperty.Register("CopyPasteCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand CutPasteCommand + { + get { return (ICommand)GetValue(CutPasteCommandProperty); } + set { SetValue(CutPasteCommandProperty, value); } + } + public static readonly DependencyProperty CutPasteCommandProperty = + DependencyProperty.Register("CutPasteCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand PasteCommandInternal + { + get { return (ICommand)GetValue(PasteCommandInternalProperty); } + set { SetValue(PasteCommandInternalProperty, value); } + } + public static readonly DependencyProperty PasteCommandInternalProperty = + DependencyProperty.Register("PasteCommandInternal", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand SelectAllCommand + { + get { return (ICommand)GetValue(SelectAllCommandProperty); } + set { SetValue(SelectAllCommandProperty, value); } + } + public static readonly DependencyProperty SelectAllCommandProperty = + DependencyProperty.Register("SelectAllCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand DownloadCommandInternal + { + get { return (ICommand)GetValue(DownloadCommandInternalProperty); } + set { SetValue(DownloadCommandInternalProperty, value); } + } + public static readonly DependencyProperty DownloadCommandInternalProperty = + DependencyProperty.Register("DownloadCommandInternal", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand DownloadCommand + { + get { return (ICommand)GetValue(DownloadCommandProperty); } + set { SetValue(DownloadCommandProperty, value); } + } + public static readonly DependencyProperty DownloadCommandProperty = + DependencyProperty.Register("DownloadCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand OpenCommand + { + get { return (ICommand)GetValue(OpenCommandProperty); } + set { SetValue(OpenCommandProperty, value); } + } + public static readonly DependencyProperty OpenCommandProperty = + DependencyProperty.Register("OpenCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand BackCommand + { + get { return (ICommand)GetValue(BackCommandProperty); } + set { SetValue(BackCommandProperty, value); } + } + public static readonly DependencyProperty BackCommandProperty = + DependencyProperty.Register("BackCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand RenameCommand + { + get { return (ICommand)GetValue(RenameCommandProperty); } + set { SetValue(RenameCommandProperty, value); } + } + public static readonly DependencyProperty RenameCommandProperty = + DependencyProperty.Register("RenameCommand", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public ICommand RenameCommandInternal + { + get { return (ICommand)GetValue(RenameCommandInternalProperty); } + set { SetValue(RenameCommandInternalProperty, value); } + } + public static readonly DependencyProperty RenameCommandInternalProperty = + DependencyProperty.Register("RenameCommandInternal", typeof(ICommand), typeof(FileExplorerControl), new PropertyMetadata(null)); + + public bool IsContextMenuOpened + { + get { return (bool)GetValue(IsContextMenuOpenedProperty); } + set { SetValue(IsContextMenuOpenedProperty, value); } + } + public static readonly DependencyProperty IsContextMenuOpenedProperty = + DependencyProperty.Register("IsContextMenuOpened", typeof(bool), typeof(FileExplorerControl), new PropertyMetadata(false, (d, e) => (d as FileExplorerControl).OnIsContextMenuOpenedChanged())); + public ImageSource DriveIcon { get { return (ImageSource)GetValue(DriveIconProperty); } @@ -124,7 +272,138 @@ namespace Tango.FileSystem public FileExplorerControl() { + Focusable = true; + + _copyItems = new List(); _selectedItemsBeforeDrag = new List(); + + CopyCommand = new RelayCommand(() => + { + ResetItemsCut(); + _copyItems.Clear(); + _copyItems.AddRange(SelectedItems.ToList()); + _isCut = false; + }, () => SelectedItems != null && SelectedItems.Count > 0); + + CutCommand = new RelayCommand(() => + { + _copyItems.Clear(); + _copyItems.AddRange(SelectedItems.ToList()); + CutSelectedItems(); + _isCut = true; + + }, () => SelectedItems != null && SelectedItems.Count > 0); + + PasteCommandInternal = new RelayCommand(() => + { + if (_isCut) + { + CutPasteCommand?.Execute(_copyItems.ToList()); + } + else + { + CopyPasteCommand?.Execute(_copyItems.ToList()); + } + + ResetItemsCut(); + _copyItems.Clear(); + }, () => _copyItems.Count > 0); + + SelectAllCommand = new RelayCommand(() => + { + ResetItemsCut(); + _copyItems.Clear(); + SelectedItems.Clear(); + + if (CurrentItem != null) + { + foreach (var item in CurrentItem.Items) + { + SelectedItems.Add(item); + } + } + }); + + DownloadCommandInternal = new RelayCommand(() => + { + + DownloadCommand?.Execute(SelectedItems.ToList()); + + }, () => SelectedItems != null && SelectedItems.Count > 0 && SelectedItems.All(x => x.Type != FileSystemItemType.Drive)); + + OpenCommand = new RelayCommand(() => + { + ItemDoubleClickedCommand?.Execute(SelectedItems.FirstOrDefault()); + }, () => SelectedItems != null && SelectedItems.Count == 1); + + DeleteCommandInternal = new RelayCommand(() => + { + + DeleteCommand?.Execute(SelectedItems.ToList()); + + }, () => SelectedItems != null && SelectedItems.Count > 1 && SelectedItems.All(x => x.Type != FileSystemItemType.Drive)); + + RenameCommandInternal = new RelayCommand(() => + { + + RenameCommand?.Execute(SelectedItems.FirstOrDefault()); + + }, () => SelectedItems != null && SelectedItems.Count == 1 && SelectedItems.All(x => x.Type != FileSystemItemType.Drive)); + } + + private void OnIsContextMenuOpenedChanged() + { + _isMouseDown = false; + (PasteCommandInternal as RelayCommand)?.RaiseCanExecuteChanged(); + (CutCommand as RelayCommand)?.RaiseCanExecuteChanged(); + (CopyCommand as RelayCommand)?.RaiseCanExecuteChanged(); + (DownloadCommandInternal as RelayCommand)?.RaiseCanExecuteChanged(); + (OpenCommand as RelayCommand)?.RaiseCanExecuteChanged(); + (DeleteCommandInternal as RelayCommand)?.RaiseCanExecuteChanged(); + (RenameCommandInternal as RelayCommand)?.RaiseCanExecuteChanged(); + + if (IsContextMenuOpened) + { + _isAfterContextMenu = true; + } + } + + private void ResetItemsCut() + { + foreach (var item in _listBox.Items) + { + var element = _listBox.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement; + if (element != null) + { + SetIsCut(element, false); + } + + element = _datagrid.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement; + if (element != null) + { + SetIsCut(element, false); + } + } + } + + private void CutSelectedItems() + { + ResetItemsCut(); + + foreach (var item in SelectedItems.ToList()) + { + var element = _listBox.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement; + if (element != null) + { + SetIsCut(element, true); + } + + element = _datagrid.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement; + if (element != null) + { + SetIsCut(element, true); + } + } } public override void OnApplyTemplate() @@ -138,17 +417,77 @@ namespace Tango.FileSystem _datagrid.SelectionChanged += _datagrid_SelectionChanged; } - protected override void OnPreviewKeyUp(KeyEventArgs e) + protected override void OnPreviewKeyDown(KeyEventArgs e) { - base.OnPreviewKeyUp(e); + base.OnPreviewKeyDown(e); if (e.Key == Key.Delete) { - if (SelectedItems != null && SelectedItems.Count > 0) + if (DeleteCommandInternal != null && DeleteCommandInternal.CanExecute(null)) + { + DeleteCommandInternal?.Execute(null); + } + } + else if (e.Key == Key.Return) + { + if (OpenCommand != null && OpenCommand.CanExecute(null)) + { + OpenCommand?.Execute(null); + } + } + else if (e.Key == Key.C && Keyboard.IsKeyDown(Key.LeftCtrl)) + { + if (CopyCommand != null && CopyCommand.CanExecute(null)) { - DeleteCommand?.Execute(SelectedItems); + CopyCommand.Execute(null); } } + else if (e.Key == Key.X && Keyboard.IsKeyDown(Key.LeftCtrl)) + { + if (CutCommand != null && CutCommand.CanExecute(null)) + { + CutCommand.Execute(null); + } + } + else if (e.Key == Key.V && Keyboard.IsKeyDown(Key.LeftCtrl)) + { + if (PasteCommandInternal != null && PasteCommandInternal.CanExecute(null)) + { + PasteCommandInternal.Execute(null); + } + } + else if (e.Key == Key.A && Keyboard.IsKeyDown(Key.LeftCtrl)) + { + if (SelectAllCommand != null && SelectAllCommand.CanExecute(null)) + { + SelectAllCommand.Execute(null); + } + } + else if (e.Key == Key.D && Keyboard.IsKeyDown(Key.LeftCtrl)) + { + if (DownloadCommandInternal != null && DownloadCommandInternal.CanExecute(null)) + { + DownloadCommandInternal.Execute(null); + } + } + else if (e.Key == Key.F2) + { + if (RenameCommandInternal != null && RenameCommandInternal.CanExecute(null)) + { + RenameCommandInternal.Execute(null); + } + } + else if (e.Key == Key.Down) + { + if (SelectedItems != null && SelectedItems.Count == 0 && CurrentItem != null && CurrentItem.Items.Count > 0) + { + SelectedItems.Add(CurrentItem.Items.FirstOrDefault()); + } + } + else if (e.Key == Key.Back) + { + BackCommand?.Execute(null); + } } private void _datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e) @@ -279,6 +618,12 @@ namespace Tango.FileSystem { base.OnPreviewMouseLeftButtonDown(e); + if (_isAfterContextMenu) + { + _isAfterContextMenu = false; + return; + } + if (!AllowDrag) return; if (e.OriginalSource is FrameworkElement) @@ -309,7 +654,7 @@ namespace Tango.FileSystem { base.OnPreviewMouseMove(e); - if (_isMouseDown) + if (_isMouseDown && !IsContextMenuOpened) { Point mpos = e.GetPosition(null); Vector diff = this._dragOutStartPoint - mpos; @@ -375,7 +720,7 @@ namespace Tango.FileSystem } //Notify to user with all items! - Dispatcher.BeginInvoke(new Action(() => + Dispatcher.BeginInvoke(new Action(() => { DragCommand?.Execute(notifyItems); })); @@ -400,7 +745,16 @@ namespace Tango.FileSystem } string[] files = dropItems.Select(x => x.Item2.Path).ToArray(); - var ef = DragDrop.DoDragDrop(this, new DataObject(DataFormats.FileDrop, files, false), DragDropEffects.Copy); + + try + { + var ef = DragDrop.DoDragDrop(this, new DataObject(DataFormats.FileDrop, files, false), DragDropEffects.Copy); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + Debugger.Break(); + } await Task.Delay(3000); @@ -419,5 +773,15 @@ namespace Tango.FileSystem } } } + + private async void OnCurrentItemChanged() + { + if (IsVisible) + { + await Task.Delay(100); + this.Focus(); + Keyboard.Focus(this); + } + } } } diff --git a/Software/Visual_Studio/Tango.FileSystem/FileSystemItem.cs b/Software/Visual_Studio/Tango.FileSystem/FileSystemItem.cs index 536409f63..c8b2fce32 100644 --- a/Software/Visual_Studio/Tango.FileSystem/FileSystemItem.cs +++ b/Software/Visual_Studio/Tango.FileSystem/FileSystemItem.cs @@ -5,13 +5,19 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media.Imaging; +using Tango.Core; using Tango.FileSystem.Network; namespace Tango.FileSystem { - public abstract class FileSystemItem + public abstract class FileSystemItem : ExtendedObject { - public String Path { get; set; } + private String _path; + public String Path + { + get { return _path; } + set { _path = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(Name)); } + } public FileSystemItemType Type { get; protected set; } diff --git a/Software/Visual_Studio/Tango.FileSystem/FileSystemManager.cs b/Software/Visual_Studio/Tango.FileSystem/FileSystemManager.cs index 44c8f1901..b8e59c322 100644 --- a/Software/Visual_Studio/Tango.FileSystem/FileSystemManager.cs +++ b/Software/Visual_Studio/Tango.FileSystem/FileSystemManager.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; +using Tango.Core.Helpers; using Tango.FileSystem.Network; namespace Tango.FileSystem @@ -106,5 +107,50 @@ namespace Tango.FileSystem throw new FileNotFoundException("Could not locate the specified file or directory."); } } + + public void Move(MoveRequest request) + { + if (Directory.Exists(request.Destination)) + { + throw new IOException($"'{Path.GetFileName(request.Destination)}' already exists on the target folder."); + } + + if (File.Exists(request.Source)) + { + File.Move(request.Source, request.Destination); + } + else if (Directory.Exists(request.Source)) + { + Directory.Move(request.Source, request.Destination); + } + else + { + throw new FileNotFoundException("Could not locate the source file or folder."); + } + } + + public void Copy(CopyRequest request) + { + if (File.Exists(request.Source)) + { + if (request.Source == request.Destination) + { + while (File.Exists(request.Destination)) + { + request.Destination = Path.Combine(Path.GetDirectoryName(request.Destination), Path.GetFileNameWithoutExtension(request.Destination)) + " copy" + Path.GetExtension(request.Destination); + } + } + File.Copy(request.Source, request.Destination, true); + } + else if (Directory.Exists(request.Source)) + { + Directory.CreateDirectory(Path.GetDirectoryName(request.Destination)); + PathHelper.CopyDirectory(request.Source, request.Destination, true); + } + else + { + throw new FileNotFoundException("Could not locate the source file or folder."); + } + } } } diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/CopyRequest.cs b/Software/Visual_Studio/Tango.FileSystem/Network/CopyRequest.cs new file mode 100644 index 000000000..2e7b8a406 --- /dev/null +++ b/Software/Visual_Studio/Tango.FileSystem/Network/CopyRequest.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FileSystem.Network +{ + public class CopyRequest + { + public String Source { get; set; } + public String Destination { get; set; } + } +} diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/CopyResponse.cs b/Software/Visual_Studio/Tango.FileSystem/Network/CopyResponse.cs new file mode 100644 index 000000000..e22ce6542 --- /dev/null +++ b/Software/Visual_Studio/Tango.FileSystem/Network/CopyResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FileSystem.Network +{ + public class CopyResponse + { + } +} diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/DeleteRequest.cs b/Software/Visual_Studio/Tango.FileSystem/Network/DeleteRequest.cs new file mode 100644 index 000000000..300acdb09 --- /dev/null +++ b/Software/Visual_Studio/Tango.FileSystem/Network/DeleteRequest.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FileSystem.Network +{ + public class DeleteRequest + { + public String Path { get; set; } + } +} diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/DeleteResponse.cs b/Software/Visual_Studio/Tango.FileSystem/Network/DeleteResponse.cs new file mode 100644 index 000000000..37afdab0b --- /dev/null +++ b/Software/Visual_Studio/Tango.FileSystem/Network/DeleteResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FileSystem.Network +{ + public class DeleteResponse + { + } +} diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/InitWebRtcRequest.cs b/Software/Visual_Studio/Tango.FileSystem/Network/InitWebRtcRequest.cs new file mode 100644 index 000000000..5d8f1eb3a --- /dev/null +++ b/Software/Visual_Studio/Tango.FileSystem/Network/InitWebRtcRequest.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FileSystem.Network +{ + public class InitWebRtcRequest + { + public String DataChannelName { get; set; } + } +} diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/InitWebRtcResponse.cs b/Software/Visual_Studio/Tango.FileSystem/Network/InitWebRtcResponse.cs new file mode 100644 index 000000000..3425a9096 --- /dev/null +++ b/Software/Visual_Studio/Tango.FileSystem/Network/InitWebRtcResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FileSystem.Network +{ + public class InitWebRtcResponse + { + } +} diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/MoveRequest.cs b/Software/Visual_Studio/Tango.FileSystem/Network/MoveRequest.cs new file mode 100644 index 000000000..0d9f593d3 --- /dev/null +++ b/Software/Visual_Studio/Tango.FileSystem/Network/MoveRequest.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FileSystem.Network +{ + public class MoveRequest + { + public String Source { get; set; } + public String Destination { get; set; } + } +} diff --git a/Software/Visual_Studio/Tango.FileSystem/Network/MoveResponse.cs b/Software/Visual_Studio/Tango.FileSystem/Network/MoveResponse.cs new file mode 100644 index 000000000..05d78c573 --- /dev/null +++ b/Software/Visual_Studio/Tango.FileSystem/Network/MoveResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.FileSystem.Network +{ + public class MoveResponse + { + } +} diff --git a/Software/Visual_Studio/Tango.FileSystem/Tango.FileSystem.csproj b/Software/Visual_Studio/Tango.FileSystem/Tango.FileSystem.csproj index 733493f02..a1218f12d 100644 --- a/Software/Visual_Studio/Tango.FileSystem/Tango.FileSystem.csproj +++ b/Software/Visual_Studio/Tango.FileSystem/Tango.FileSystem.csproj @@ -58,6 +58,14 @@ + + + + + + + + MSBuild:Compile diff --git a/Software/Visual_Studio/Tango.FileSystem/Themes/Generic.xaml b/Software/Visual_Studio/Tango.FileSystem/Themes/Generic.xaml index f793be947..9cc27c7c6 100644 --- a/Software/Visual_Studio/Tango.FileSystem/Themes/Generic.xaml +++ b/Software/Visual_Studio/Tango.FileSystem/Themes/Generic.xaml @@ -21,6 +21,13 @@ + + + + + + + @@ -123,7 +130,7 @@ - + @@ -149,7 +156,7 @@ - + @@ -158,7 +165,7 @@ - + @@ -167,7 +174,7 @@ - + diff --git a/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs b/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs index ce1fca7ac..c2d544042 100644 --- a/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs +++ b/Software/Visual_Studio/Tango.SharedUI/Controls/NavigationControl.cs @@ -728,6 +728,11 @@ namespace Tango.SharedUI.Controls return element; } + public String GetSelectedElementNavigationName() + { + return GetNavigationName(SelectedElement); + } + /// /// This method needs to be called in order for // the element to print visibly at the correct size. @@ -750,7 +755,6 @@ namespace Tango.SharedUI.Controls catch { } } } - #endregion } } diff --git a/Software/Visual_Studio/Tango.SystemInfo/WMIReader.cs b/Software/Visual_Studio/Tango.SystemInfo/WMIReader.cs index d7d909089..2d8c95aae 100644 --- a/Software/Visual_Studio/Tango.SystemInfo/WMIReader.cs +++ b/Software/Visual_Studio/Tango.SystemInfo/WMIReader.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Text; using System.Management; +using System.Diagnostics; namespace Tango.SystemInfo { @@ -45,13 +46,16 @@ namespace Tango.SystemInfo Value = item[property].ToString() }); } - catch (SystemException) { /* ignore error */ } + catch (SystemException) + { + //Debug.WriteLine($"System Exception on {className}, {property}"); + } } } } catch (ManagementException e) { - /* Do Nothing */ + //Debug.WriteLine($"Management Exception on {className}"); } return hardwareList; diff --git a/Software/Visual_Studio/Tango.Transport/ITransporter.cs b/Software/Visual_Studio/Tango.Transport/ITransporter.cs index af80f6b1e..1187b2684 100644 --- a/Software/Visual_Studio/Tango.Transport/ITransporter.cs +++ b/Software/Visual_Studio/Tango.Transport/ITransporter.cs @@ -13,7 +13,7 @@ using System.Collections.ObjectModel; namespace Tango.Transport { - public delegate void RequestHandlerCallbackDelegate(Request request, String token); + public delegate void RequestHandlerCallbackDelegate(ITransporter transporter, Request request, String token); /// /// Represents a transportation engine which can send and receive message using a Transport adapter. diff --git a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs index 3672baf63..11ce20b0a 100644 --- a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs +++ b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs @@ -37,7 +37,7 @@ namespace Tango.Transport private class RequestHandler { public Type RequestType { get; set; } - public Action Callback { get; set; } + public Action Callback { get; set; } } private const int MESSAGE_TOKEN_LENGTH = 36; @@ -316,7 +316,7 @@ namespace Tango.Transport { try { - handler.Callback.Invoke(request, container.Token); + handler.Callback.Invoke(this, request, container.Token); } catch { @@ -339,7 +339,7 @@ namespace Tango.Transport { try { - handler.Callback.Invoke(innerRequest, container.Token); + handler.Callback.Invoke(this, innerRequest, container.Token); } catch { @@ -1216,9 +1216,9 @@ namespace Tango.Transport { RequestHandler handler = new RequestHandler(); handler.RequestType = typeof(Request); - handler.Callback = (obj, token) => + handler.Callback = (transporter, obj, token) => { - callback?.Invoke(obj as Request, token); + callback?.Invoke(transporter, obj as Request, token); }; _requestHandlers.Add(handler); diff --git a/Software/Visual_Studio/Tango.WebRTC/Network/IceCandidateRequest.cs b/Software/Visual_Studio/Tango.WebRTC/Network/IceCandidateRequest.cs new file mode 100644 index 000000000..b65a8d6d4 --- /dev/null +++ b/Software/Visual_Studio/Tango.WebRTC/Network/IceCandidateRequest.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.WebRTC.Network +{ + public class IceCandidateRequest + { + public IceCandidate IceCandidate { get; set; } + } +} diff --git a/Software/Visual_Studio/Tango.WebRTC/Network/IceCandidateResponse.cs b/Software/Visual_Studio/Tango.WebRTC/Network/IceCandidateResponse.cs new file mode 100644 index 000000000..a9daad732 --- /dev/null +++ b/Software/Visual_Studio/Tango.WebRTC/Network/IceCandidateResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.WebRTC.Network +{ + public class IceCandidateResponse + { + } +} diff --git a/Software/Visual_Studio/Tango.WebRTC/Network/OfferRequest.cs b/Software/Visual_Studio/Tango.WebRTC/Network/OfferRequest.cs new file mode 100644 index 000000000..0d82310db --- /dev/null +++ b/Software/Visual_Studio/Tango.WebRTC/Network/OfferRequest.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.WebRTC.Network +{ + public class OfferRequest + { + public Offer Offer { get; set; } + } +} diff --git a/Software/Visual_Studio/Tango.WebRTC/Network/OfferResponse.cs b/Software/Visual_Studio/Tango.WebRTC/Network/OfferResponse.cs new file mode 100644 index 000000000..2207c31a6 --- /dev/null +++ b/Software/Visual_Studio/Tango.WebRTC/Network/OfferResponse.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.WebRTC.Network +{ + public class OfferResponse + { + public Answer Answer { get; set; } + } +} diff --git a/Software/Visual_Studio/Tango.WebRTC/Tango.WebRTC.csproj b/Software/Visual_Studio/Tango.WebRTC/Tango.WebRTC.csproj index d9cea42dc..5edff1e71 100644 --- a/Software/Visual_Studio/Tango.WebRTC/Tango.WebRTC.csproj +++ b/Software/Visual_Studio/Tango.WebRTC/Tango.WebRTC.csproj @@ -48,11 +48,18 @@ + + + + + + + @@ -63,6 +70,14 @@ {a34ee0f0-649d-41c8-8489-b6f1cc6924ee} Tango.Core + + {BC932DBD-7CDB-488C-99E4-F02CF441F55E} + Tango.Logging + + + {74e700b0-1156-4126-be40-ee450d3c3026} + Tango.Transport + \ No newline at end of file diff --git a/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapter.cs b/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapter.cs new file mode 100644 index 000000000..850ddb3de --- /dev/null +++ b/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapter.cs @@ -0,0 +1,307 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Tango.Core; +using Tango.Core.Threading; +using Tango.Transport; +using Tango.Transport.Adapters; +using Tango.WebRTC.Network; + +namespace Tango.WebRTC +{ + public class WebRtcTransportAdapter : TransportAdapterBase + { + private WebRtcClient _client; + private bool _answerReceived; + private List _queuedIceCandidates; + + public event EventHandler Ready; + + public ITransporter SignalingTransporter { get; set; } + + public WebRtcTransportAdapterMode Mode { get; set; } + + public String DataChannelName { get; set; } + + public WebRtcTransportAdapter(ITransporter signalingTransporter, WebRtcTransportAdapterMode mode) : this(signalingTransporter, mode, null) + { + + } + + public WebRtcTransportAdapter(ITransporter signalingTransporter, WebRtcTransportAdapterMode mode, String dataChannelName) + { + SignalingTransporter = signalingTransporter; + Mode = mode; + DataChannelName = dataChannelName; + Address = dataChannelName; + ComponentName = $"WebRTC Adapter {_component_counter++}"; + + SignalingTransporter.RegisterRequestHandler(OnIceCandidateRequestReceived); + SignalingTransporter.RegisterRequestHandler(OnOfferRequestReceived); + } + + public override void Write(byte[] data, bool immidiate = false) + { + ThrowIfDisposed(); + + try + { + _client.SendBinary(data); + } + catch (Exception ex) + { + OnFailed(ex); + } + } + + public override Task Connect() + { + ThrowIfDisposed(); + + TaskCompletionSource completionSource = new TaskCompletionSource(); + bool completed = false; + + _queuedIceCandidates = new List(); + _answerReceived = false; + + ThreadFactory.StartNew(async () => + { + if (State != TransportComponentState.Connected) + { + try + { + _client = new WebRtcClient(); + + if (DataChannelName != null) + { + _client.DataChannelName = DataChannelName; + } + + Address = _client.DataChannelName; + + _client.NewIceCandidate += WebRtc_NewIceCandidate; + _client.Disconnected += WebRtc_Disconnected; + _client.BinaryMessageReceived += WebRtc_BinaryMessageReceived; + _client.Ready += (x, e) => + { + if (!completed) + { + LogManager.Log("WebRTC Active Transport Adapter is ready."); + completed = true; + State = TransportComponentState.Connected; + completionSource.SetResult(true); + Ready?.Invoke(this, new EventArgs()); + } + + if (Mode == WebRtcTransportAdapterMode.Passive) + { + LogManager.Log("WebRTC Passive Transport Adapter is ready."); + Ready?.Invoke(this, new EventArgs()); + } + }; + + LogManager.Log("Initializing WebRTC client..."); + await _client.Init(); + + if (Mode == WebRtcTransportAdapterMode.Active) + { + LogManager.Log("Creating WebRTC offer..."); + var offer = await _client.CreateOffer(); + + LogManager.Log("Sending WebRTC offer via signaling transporter..."); + var response = await SignalingTransporter.SendGenericRequest(new OfferRequest() { Offer = offer }, new TransportRequestConfig() + { + Timeout = TimeSpan.FromSeconds(30), + ShouldLog = true + }); + + LogManager.Log("WebRTC offer sent and responded with an answer. Setting WebRTC answer..."); + _client.SetAnswer(response.Answer); + _answerReceived = true; + + foreach (var ice in _queuedIceCandidates.ToList()) + { + LogManager.Log("Sending existing ice candidate..."); + + try + { + await SignalingTransporter.SendGenericRequest(new IceCandidateRequest() { IceCandidate = ice }, new TransportRequestConfig() + { + Timeout = TimeSpan.FromSeconds(30), + ShouldLog = true + }); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error sending ice candidate."); + } + } + } + else + { + LogManager.Log("Waiting for offer..."); + completed = true; + State = TransportComponentState.Connected; + completionSource.SetResult(true); + } + } + catch (Exception ex) + { + completionSource.SetException(ex); + } + } + else + { + completionSource.SetResult(true); + } + }); + + if (Mode == WebRtcTransportAdapterMode.Active) + { + TimeoutTask.StartNew(() => + { + if (!completed) + { + completed = true; + completionSource.SetException(new TimeoutException("Could not reach the remote peer using the WebRTC adapter.")); + } + + }, TimeSpan.FromSeconds(30)); + } + + return completionSource.Task; + } + + private void WebRtc_BinaryMessageReceived(object sender, DataMessageReceivedEventArgs e) + { + OnDataAvailable(e.Data); + } + + private async void OnOfferRequestReceived(ITransporter transporter, OfferRequest request, string token) + { + if (Mode == WebRtcTransportAdapterMode.Passive) + { + var answer = await _client.CreateAnswer(request.Offer); + await SignalingTransporter.SendGenericResponse(new OfferResponse() { Answer = answer }, token); + _answerReceived = true; + + foreach (var ice in _queuedIceCandidates.ToList()) + { + LogManager.Log("Sending existing ice candidate..."); + + try + { + await SignalingTransporter.SendGenericRequest(new IceCandidateRequest() { IceCandidate = ice }, new TransportRequestConfig() + { + Timeout = TimeSpan.FromSeconds(30), + ShouldLog = true + }); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error sending ice candidate to remote peer."); + } + } + } + } + + private async void WebRtc_NewIceCandidate(object sender, NewIceCandidateEventArgs e) + { + try + { + if (_answerReceived) + { + LogManager.Log("New WebRTC candidate available. Sending ice to remote peer..."); + + await SignalingTransporter.SendGenericRequest(new IceCandidateRequest() { IceCandidate = e.IceCandidate }, new TransportRequestConfig() + { + Timeout = TimeSpan.FromSeconds(30), + ShouldLog = true + }); + } + else + { + if (Mode == WebRtcTransportAdapterMode.Active) + { + LogManager.Log("New WebRTC candidate available. Will be sent after an answer is received..."); + } + else + { + LogManager.Log("New WebRTC candidate available. Will be sent after an offer is received..."); + } + + _queuedIceCandidates.Add(e.IceCandidate); + } + } + catch (Exception ex) + { + LogManager.Log(ex, "Error sending ice candidate to remote peer."); + } + } + + private async void OnIceCandidateRequestReceived(ITransporter transporter, IceCandidateRequest request, string token) + { + try + { + LogManager.Log("Ice candidate request received from the remote peer."); + await SignalingTransporter.SendGenericResponse(new IceCandidateResponse() { }, token); + + LogManager.Log("Adding ice candidate..."); + _client.AddIceCandidate(request.IceCandidate); + LogManager.Log("Ice candidate added."); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error occurred on ice candidate received handling."); + } + } + + private void WebRtc_Disconnected(object sender, EventArgs e) + { + OnFailed(new WebRtcTransportAdapterDisconnectedException("WebRtc Transport Adapter RTC client has disconnected.")); + } + + public override Task Disconnect() + { + TaskCompletionSource completionSource = new TaskCompletionSource(); + + ThreadFactory.StartNew(() => + { + if (State != TransportComponentState.Disconnected) + { + if (_client != null) + { + LogManager.Log("Disposing WebRTC client..."); + + _client.NewIceCandidate -= WebRtc_NewIceCandidate; + _client.Disconnected -= WebRtc_Disconnected; + _client.BinaryMessageReceived -= WebRtc_BinaryMessageReceived; + + try + { + _client.Dispose(); + _client = null; + LogManager.Log("WebRTC client disposed."); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error disposing WebRTC client."); + } + } + + State = TransportComponentState.Disconnected; + completionSource.SetResult(true); + } + else + { + completionSource.SetResult(true); + } + }); + + return completionSource.Task; + } + } +} diff --git a/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapterDisconnectedException.cs b/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapterDisconnectedException.cs new file mode 100644 index 000000000..bd82a3233 --- /dev/null +++ b/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapterDisconnectedException.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.WebRTC +{ + public class WebRtcTransportAdapterDisconnectedException : Exception + { + public WebRtcTransportAdapterDisconnectedException(String message) : base(message) + { + + } + } +} diff --git a/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapterMode.cs b/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapterMode.cs new file mode 100644 index 000000000..8068697f5 --- /dev/null +++ b/Software/Visual_Studio/Tango.WebRTC/WebRtcTransportAdapterMode.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.WebRTC +{ + public enum WebRtcTransportAdapterMode + { + Active, + Passive + } +} -- cgit v1.3.1 From 42c06402ff6648c356fba8315958283762ed2542 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 25 Mar 2020 00:26:47 +0200 Subject: Added Download menu implementation to file system. Added several stun and turn servers to web rtc. --- .../ViewModels/FileSystemViewVM.cs | 53 ++++++++++++++++++++++ .../Tango.FSE.PPCConsole/Views/FileSystemView.xaml | 17 ++++++- .../Controls/FileSystemControl.xaml | 11 ++++- .../FileSystem/IFileSystemProvider.cs | 1 + .../FileSystem/DefaultFileSystemProvider.cs | 11 +++++ .../Tango.FSE.UI/Storage/DefaultStorageProvider.cs | 2 +- .../FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs | 4 +- .../FileSystem/DefaultFileSystemService.cs | 14 ++++++ .../Visual_Studio/PPC/Tango.PPC.UI/app.manifest | 2 +- .../Tango.FileSystem/FileExplorerControl.cs | 53 ++++++++++++++++++++-- .../Tango.FileSystem/FileSystemManager.cs | 17 +++++++ .../Network/CreateFolderRequest.cs | 14 ++++++ .../Network/CreateFolderResponse.cs | 13 ++++++ .../Tango.FileSystem/Tango.FileSystem.csproj | 2 + .../Visual_Studio/Tango.WebRTC/WebRtcClient.cs | 17 +++++++ 15 files changed, 219 insertions(+), 12 deletions(-) create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderRequest.cs create mode 100644 Software/Visual_Studio/Tango.FileSystem/Network/CreateFolderResponse.cs (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/FileSystem') diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs index 4e2ca1882..e10cc0ad1 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/ViewModels/FileSystemViewVM.cs @@ -58,6 +58,7 @@ namespace Tango.FSE.PPCConsole.ViewModels public RelayCommand> CutPasteCommand { get; set; } public RelayCommand> DownloadCommand { get; set; } public RelayCommand RenameCommand { get; set; } + public RelayCommand NewFolderCommand { get; set; } public FileSystemViewVM() @@ -78,6 +79,7 @@ namespace Tango.FSE.PPCConsole.ViewModels CutPasteCommand = new RelayCommand>((items) => PasteItems(items, true)); DownloadCommand = new RelayCommand>(DownloadSelectedItems); RenameCommand = new RelayCommand(RenameFileSystemItem); + NewFolderCommand = new RelayCommand(CreateNewFolder); } private async void NavigateBack() @@ -341,7 +343,24 @@ namespace Tango.FSE.PPCConsole.ViewModels var result = await StorageProvider.SelectFolder("Select download destination folder"); if (result) { + + String destination = result.SelectedItem; + Debug.WriteLine($"Download to {result.SelectedItem}"); + + foreach (var item in items.Where(x => x.Type != FileSystemItemType.Drive)) + { + if (File.Exists(Path.Combine(destination, item.Name)) || Directory.Exists(Path.Combine(destination, item.Name))) + { + if (!await NotificationProvider.ShowWarningQuestion($"'{item.Name}' already exists on '{Path.GetDirectoryName(destination)}'. Do you want to overwrite?")) + { + continue; + } + } + + var handler = await FileSystemProvider.Download(item, destination); + FileSystemHandlers.Insert(0, handler); + } } } @@ -376,6 +395,40 @@ namespace Tango.FSE.PPCConsole.ViewModels } } + private async void CreateNewFolder() + { + if (CurrentItem == null) return; + if (CurrentItem is FolderItem) + { + if ((CurrentItem as FolderItem).IsRoot) return; + } + + var result = await NotificationProvider.ShowInputBox( + "New Folder", + $"Please enter a folder name and press 'ENTER'.", + PackIconKind.FolderAdd, "untitled", + "folder name", + 100, + "CREATE"); + + if (result.Confirmed) + { + try + { + using (NotificationProvider.PushTaskItem("Creating new folder...")) + { + var folderItem = await FileSystemProvider.CreateFolder(CurrentItem, result.Input); + NavigateToCurrentPath(); //Instead of inserting folder item just refresh the current path... + } + } + catch (Exception ex) + { + LogManager.Log(ex, $"Error creating new folder '{Path.Combine(CurrentItem.Path,result.Input)}."); + await NotificationProvider.ShowError($"Error creating folder '{result.Input}'.\n{ex.FlattenMessage()}"); + } + } + } + private void OnCurrentItemChanged() { CurrentPath = CurrentItem.Path; diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml index d1143ede4..67f1dc1c5 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml @@ -121,6 +121,7 @@ + RenameCommand="{Binding RenameCommand}" + NewFolderCommand="{Binding NewFolderCommand}"/> @@ -163,7 +165,18 @@ - + + + + + diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml b/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml index eb1007609..5bc75ca54 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Controls/FileSystemControl.xaml @@ -49,6 +49,13 @@ + + + + + + + @@ -93,7 +100,7 @@ - + - +