diff --git a/AudioWorks/AudioWorks.sln.DotSettings b/AudioWorks/AudioWorks.sln.DotSettings index bd40e4ab..995f2339 100644 --- a/AudioWorks/AudioWorks.sln.DotSettings +++ b/AudioWorks/AudioWorks.sln.DotSettings @@ -259,7 +259,7 @@ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - CSharp90 + CSharp100 No C:\Users\jerem\AppData\Local\JetBrains\Transient\ReSharperPlatformVs15\v09_fd249c97\SolutionCaches True diff --git a/AudioWorks/Directory.Build.props b/AudioWorks/Directory.Build.props index d1f419f8..a8124762 100644 --- a/AudioWorks/Directory.Build.props +++ b/AudioWorks/Directory.Build.props @@ -1,8 +1,8 @@ - net5.0;netstandard2.0 - 9.0 + net6.0;netstandard2.0 + 10.0 enable $(BUILD_BUILDID) 0 diff --git a/AudioWorks/src/AudioWorks.Api/AudioFileAnalyzer.cs b/AudioWorks/src/AudioWorks.Api/AudioFileAnalyzer.cs index 06cf35b0..cd8d73dd 100644 --- a/AudioWorks/src/AudioWorks.Api/AudioFileAnalyzer.cs +++ b/AudioWorks/src/AudioWorks.Api/AudioFileAnalyzer.cs @@ -145,7 +145,7 @@ public async Task AnalyzeAsync( params ITaggedAudioFile[] audioFiles) { if (audioFiles == null) throw new ArgumentNullException(nameof(audioFiles)); - // ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local + // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (audioFiles.Any(audioFile => audioFile == null)) throw new ArgumentException("One or more audio files are null.", nameof(audioFiles)); diff --git a/AudioWorks/src/AudioWorks.Api/AudioFileEncoder.cs b/AudioWorks/src/AudioWorks.Api/AudioFileEncoder.cs index 9a7f2db7..7dc9289d 100644 --- a/AudioWorks/src/AudioWorks.Api/AudioFileEncoder.cs +++ b/AudioWorks/src/AudioWorks.Api/AudioFileEncoder.cs @@ -172,7 +172,7 @@ public async Task> EncodeAsync( params ITaggedAudioFile[] audioFiles) { if (audioFiles == null) throw new ArgumentNullException(nameof(audioFiles)); - // ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local + // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (audioFiles.Any(audioFile => audioFile == null)) throw new ArgumentException("One or more audio files are null.", nameof(audioFiles)); diff --git a/AudioWorks/src/AudioWorks.Api/AudioWorks.Api.csproj b/AudioWorks/src/AudioWorks.Api/AudioWorks.Api.csproj index cf07a244..9b71d323 100644 --- a/AudioWorks/src/AudioWorks.Api/AudioWorks.Api.csproj +++ b/AudioWorks/src/AudioWorks.Api/AudioWorks.Api.csproj @@ -2,7 +2,7 @@ - 1.1.0 + 1.2.0 $(VersionPrefix).$(Revision) 1.0.0.0 The primary AudioWorks API. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. @@ -28,9 +28,11 @@ - - - + + + + + diff --git a/AudioWorks/src/AudioWorks.Api/ExtensionInstaller.cs b/AudioWorks/src/AudioWorks.Api/ExtensionInstaller.cs index ea9f0da0..c573bf99 100644 --- a/AudioWorks/src/AudioWorks.Api/ExtensionInstaller.cs +++ b/AudioWorks/src/AudioWorks.Api/ExtensionInstaller.cs @@ -230,9 +230,7 @@ await ResolvePackagesAsync(packageMetadata.Identity, cacheContext, cancellationT if (downloadResult.Status != DownloadResourceResultStatus.Available || downloadResult.PackageReader == null || -#pragma warning disable IDE0083 // Use pattern matching - !(downloadResult.PackageStream is FileStream packageStream)) -#pragma warning restore IDE0083 // Use pattern matching + downloadResult.PackageStream is not FileStream packageStream) continue; var libGroups = (await downloadResult.PackageReader.GetLibItemsAsync(cancellationToken) @@ -269,7 +267,7 @@ await ResolvePackagesAsync(packageMetadata.Identity, cacheContext, cancellationT CopyContentFiles( sourceFileName, - Path.Combine(extensionDir.FullName, new DirectoryInfo(sourceFileName)!.Parent!.Name, + Path.Combine(extensionDir.FullName, new DirectoryInfo(sourceFileName).Parent!.Name, Path.GetFileName(item)), logger); } diff --git a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.csproj b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.csproj index 51e160df..abf9d57b 100644 --- a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.csproj +++ b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.csproj @@ -2,9 +2,9 @@ - net5.0;netcoreapp3.1;net462 - net5.0;netcoreapp3.1 - 1.1.0 + net6.0;netcoreapp3.1;net462 + net6.0;netcoreapp3.1 + 1.2.0 $(VersionPrefix).$(Revision) true @@ -25,31 +25,31 @@ - + - - - - - - + + + + + + - + - + diff --git a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.format.ps1xml b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.format.ps1xml index e2ed8501..80f18e2e 100644 --- a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.format.ps1xml +++ b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.format.ps1xml @@ -219,118 +219,216 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1 b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1 index 15a5099b..baeb4b3a 100644 Binary files a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1 and b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1 differ diff --git a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psm1 b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psm1 index 8a44c992..853d7991 100644 --- a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psm1 +++ b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psm1 @@ -13,11 +13,11 @@ $binaryModuleRoot = $PSModuleRoot if ($PSEdition -eq 'Desktop') { $binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'net462' } -elseif ($PSVersionTable.PSVersion.Major -eq 7 -and $PSVersionTable.PSVersion.Minor -eq 0) { +elseif ($PSVersionTable.PSVersion.Major -eq 7 -and $PSVersionTable.PSVersion.Minor -lt 2) { $binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'netcoreapp3.1' } else { - $binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'net5.0' + $binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'net6.0' } $binaryModulePath = Join-Path -Path $binaryModuleRoot -ChildPath 'AudioWorks.Commands.dll' @@ -29,118 +29,216 @@ $PSModule.OnRemove = { } # SIG # Begin signature block -# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor -# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDHoCv8GE7lo4eS -# DN3gKLBGHzkIx4SO7H0gInQWjEmgMaCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok -# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE -# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO -# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS -# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK -# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI -# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k -# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3 -# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1 -# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd -# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/ -# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG -# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0 -# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj -# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5 -# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm -# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN -# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ -# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ -# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1 -# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo -# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l -# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT -# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy -# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l -# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb -# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC -# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ -# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO -# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h -# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt -# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd -# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T -# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j -# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud -# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy -# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0 -# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y -# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA -# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG -# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o -# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu -# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa -# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P -# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n -# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz -# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD -# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g -# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp -# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs -# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy -# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu -# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ -# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD -# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU -# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k -# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH -# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps -# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd -# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud -# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv -# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov -# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl -# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI -# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w -# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL -# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB -# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD -# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5 -# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk -# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU -# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1 -# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV -# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw -# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll -# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F -# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh -# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM -# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCCOeM2fXrlMS9BQnjXWmNMkLcym -# dxhG+5ow64IJe/eqZTANBgkqhkiG9w0BAQEFAASCAQBIH1qyTBl47GAnNw9me3+O -# +fNZ0C9jKck5IO7RULob5q0erkYAQKh09dqXc2SlrTpdFoMLyHVBC8aRkfmsk7VR -# h7DwfCoq0damxwl+owCY5mJ57228kMuNubmUopOyjqnAHVfmKRNqSaw5B+rZon+w -# d8j06AXFDYeFuxn+t1H/XidXHLuhri7y2qk5bRRCg+bmcBBTct3uRF6z7jISu3ob -# vi7osxzBHbywzM+xRF5yIpKWSrQ2s9NOF/OuxzgouIUfwr9wUzkxjA9L4afkc+py -# WDZ09CaDY1z9oB6q09DeAhA7tB3TZj2JTv3aFmX/YEe6veeUpQ7mnxO8IxtedVmF -# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM -# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC -# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF -# MQ8XDTIwMTExNjE1NTQxM1owLwYJKoZIhvcNAQkEMSIEIPZoSlSCytPklc27X5Iq -# 0UZNE7+vJlrZ5qIUIhO74Ug/MDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi -# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB -# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE -# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV -# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy -# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI -# hvcNAQEBBQAEggEAI/cVb2ykaymtVDPAO5Pst+JZvf7zGFIhFHInjmlXg8L/Zqbn -# YaGyvw6oP36U7gLBru9M9o5YbWg9ZADtuUWl0J0TLDEDz9dSeTbO1NTm8uLd04eL -# yCsaUa79/cM7ueBY6/pzAsO3idv8qnlD+AGBshlzSM3Vf8pguS0ZWjJqXkLP3BtG -# SU9CMtyZdRoy52QhyXKkVjpl8kMW9Y9W8FJFmJ9T/wmkeDBZ6ELuce6Ha/6a3fcy -# TaVPQGeu01hLrmIIx6yFQ3JglZ8XMnaBV46l4Ev/BzFuYeEGOSZ/iprF/Z+nV2At -# qvSPDl+8xCKf96kHxovY71n34DPX4h1BdxghjQ== +# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU+EfGE6wUFZ5X0XUziGsFr6bU +# dlaggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B +# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2 +# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV +# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm +# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv +# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM +# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT +# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4 +# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+ +# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK +# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj +# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz +# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5 +# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO +# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp +# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe +# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E +# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW +# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw +# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF +# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv +# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh +# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3 +# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC +# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA +# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz +# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7 +# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3 +# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q +# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF +# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx +# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV +# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291 +# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK +# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn +# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel +# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH +# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18 +# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh +# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN +# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k +# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA +# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H +# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC +# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj +# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE +# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv +# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh +# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O +# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG +# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w +# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG +# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ +# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs +# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05 +# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN +# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io +# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ +# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L +# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i +# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK +# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa +# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC +# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx +# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x +# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw +# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB +# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh +# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E +# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO +# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g +# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk +# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe +# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ +# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm +# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY +# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R +# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa +# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80 +# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E +# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+ +# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww +# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u +# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0 +# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y +# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL +# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv +# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8 +# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8 +# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc +# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad +# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF +# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd +# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM +# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B +# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG +# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76 +# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv +# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3 +# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s +# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y +# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw +# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE +# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k +# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta +# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b +# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh +# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q +# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E +# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU +# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV +# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS +# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie +# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb +# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw +# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w +# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG +# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j +# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF +# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo +# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw +# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT +# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ +# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7 +# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58 +# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk +# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM +# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF +# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e +# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk +# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4 +# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5 +# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8 +# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB +# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5 +# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY +# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0 +# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp +# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs +# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy +# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN +# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK +# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo +# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA +# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr +# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp +# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr +# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM +# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD +# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD +# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu +# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB +# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw +# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G +# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G +# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh +# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru +# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M +# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR +# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK +# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp +# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC +# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW +# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe +# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9 +# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC +# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE +# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy +# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3 +# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG +# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBRdSsNMJlQ2 +# 3SW+xNfbASDoEeZMHzANBgkqhkiG9w0BAQEFAASCAYATV97Bc8YgcKIBUcmD1jC7 +# n6o49zeVSB184xV4XWLLz65L/HDlirguYj8FJAVllUIK/A0QV/jtCJoYKviq1JdP +# BUGjpYATVdjOMaaymyo4VKJM1mkcSt3Nd609Cvs70hX9l/h3OH0SsmAM34KU4eVS +# WduC+RzWv/iWkvgqsC5uoURFCRGo5jgJtTY6YwmxJvg1iy4mCmnJzTTQNCGUFJuR +# HwU3AnP14SbagUxbu5CZd2MLXlAjdUAAMZw5zrGyp5GcmjdkL9VWaAexxH3v/Mtw +# apGGV+aupUW+Ikx/9u5Iiu7FgszlPv8z7McjlKSeJpyiGZUisL4+9y+Wa+wZzC72 +# Zi7PQ+qQUSV3UzQcgROpkYau3wpJnjwstHurzzYSL9OwLWMMyP5UWJNelsZyuNhZ +# jgxNr/FVb68VeOqrmRyXYIzb9e2H/1oMXeC9o4QeGRUnw+trwNWnAL5mitsPAm9O +# /ykDVLCW+wzmc+NpMcgipdeFFmk4FtIFTV67+wM3JxahggQEMIIEAAYJKoZIhvcN +# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv +# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n +# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa +# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw +# NzE1MjE0NlowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO +# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMEZu5J0RPNlmpneh8nEM +# o3lW6SmpAp/S04RQpClr2+hd7WcGA5GmGVqz3IA+SpPKuTCBoAYLKoZIhvcNAQkQ +# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ +# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi +# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y +# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIAHIhtvarEcw40pyG6YiYw4es76N14n5tk +# grgcYDb8PkFnXjhz/457/4vL/voHNcVPoNpJ53oOlEd6rqFun3LwS+2ppcuyvQRC +# Gud32HV+ielm8Br4Hzd/6iULb3Q+E4YNrsC3uZgTIRFhVi8JgLNZBZtWM+WInwbk +# Fvq78IKVyjEoSUdv+zz0c5s4AZaRp8QSRgzsB7C/nULvf3CwhBFR1reuPSTRcGbw +# dxvlDrrU3w+I4LvNQiS8ofLILeEEOMMSlDdNgob6Lg2mOIq/m1DeDdXMYylzAJsO +# qK+agPmoxGO1jRAZWRQyRLqlK2/L2HOv0D0m928bRtkxwgAxn6SC4j0gj/i+BLq7 +# tjDuzOoUbRiMNOuS7NTz/zy9CPS+clXXhbNk1UpGrnr6ICmu6eGQUw4VZ8G1Ne5F +# hsYhmA14l9PgQaJQ8AShIue2Y13zzPcAPA2dwK14Sh2D1FTlzBG6S9ruLlfKodQV +# yY2Qf+AVKXUIjVqcmTr9NHxvyjaIVo+PG2G92uINSDcWrDBl9xEU8DDYSWhN6+sf +# sLjPk5OUDyv/OugYBeJaiVPCnGyN+O1G+NCCa7woHhwyOBFOczGJ9uhF2XWjHdfP +# fCwDoJc9HEc1declfIh+KgmtKh/Bw406w3cUJKdiI6UKZN6WL+HOK7mIAFUOVh82 +# DXEx0gXe51M= # SIG # End signature block diff --git a/AudioWorks/src/AudioWorks.Commands/PublishModule.ps1 b/AudioWorks/src/AudioWorks.Commands/PublishModule.ps1 index a4b632b3..ca641aaf 100644 --- a/AudioWorks/src/AudioWorks.Commands/PublishModule.ps1 +++ b/AudioWorks/src/AudioWorks.Commands/PublishModule.ps1 @@ -38,7 +38,7 @@ Remove-Item -Path $(Join-Path -Path $outputDir -ChildPath *) -Recurse -Include " Write-Host "Generating help file..." # Only do this once, as platyPS can't be loaded if it is already in use. -if ($Framework -eq "net5.0") +if ($Framework -eq "net6.0") { Install-PackageProvider -Name NuGet -Scope CurrentUser -Force -ErrorAction SilentlyContinue Install-Module -Name platyPS -Scope CurrentUser -Force -ErrorAction SilentlyContinue @@ -46,118 +46,216 @@ if ($Framework -eq "net5.0") New-ExternalHelp -Path $(Join-Path -Path $ProjectDir -ChildPath docs) -OutputPath $(Join-Path -Path $outputRoot -ChildPath en-US) -Force -ErrorAction Stop } # SIG # Begin signature block -# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor -# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCR1kZs9w7mLOT5 -# h2EqbzS2/fEOX+BasK3FO36KM+WdnqCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok -# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE -# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO -# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS -# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK -# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI -# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k -# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3 -# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1 -# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd -# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/ -# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG -# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0 -# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj -# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5 -# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm -# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN -# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ -# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ -# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1 -# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo -# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l -# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT -# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy -# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l -# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb -# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC -# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ -# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO -# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h -# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt -# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd -# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T -# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j -# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud -# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy -# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0 -# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y -# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA -# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG -# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o -# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu -# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa -# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P -# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n -# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz -# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD -# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g -# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp -# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs -# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy -# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu -# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ -# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD -# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU -# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k -# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH -# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps -# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd -# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud -# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv -# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov -# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl -# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI -# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w -# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL -# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB -# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD -# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5 -# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk -# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU -# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1 -# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV -# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw -# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll -# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F -# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh -# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM -# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBVTDcWcY8RqHgPHSCZBwFF7ggZ -# uyAF+pcRZeR17Y28fjANBgkqhkiG9w0BAQEFAASCAQAwbKh4c59xWNapMYn86pbI -# vfplUcMVg/Ob+a/jt3sgkBrdd19Smo9pwxS+MfzcvjtVZVvr+mtq1+8CSaH+kanU -# 5XF9MkLjCJhtinxf/EcS2QznJVc3kXhmTfAiMVfQgRToOV9BZvhpoirATFkK6uBc -# dz3fvcH2dQSDcYqRfMGtu6s237OrYIhgYW0gZkoF5wIO0ZVfLrJRrUn4LIwfLVyM -# CvBs2Q6agtKzL0jvIITkER+9ERdySDtkmYMxKX+k5Gyd7aWvI4loEKo03XeHbGRI -# 17EL6MUE4ak8quM3XX+5JlTBE+Roi9KXvYXntVwodM8hDmef2XxRw5PaFZHbBFhf -# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM -# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC -# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF -# MQ8XDTIwMTExNjIzNDMzMFowLwYJKoZIhvcNAQkEMSIEIISVgMW1N5GubXBThsuZ -# rEmeeld4oYC41T4zKGa6VD3yMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi -# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB -# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE -# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV -# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy -# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI -# hvcNAQEBBQAEggEAEHtvcN39Rme2LwTJJEq+JAtpfebVsFPsLJxYhsJkQ1lXn58k -# THtNE1rjMIvtUKEIj8wM6JVEad9qu6SteFBJBKbSzSdc6KxxL0WMdOTRUWNp+cTC -# p5KjpWnaFpVlroYjY6kmyuqHFLPtTFl2yzV4UweSizrwf93msNM4px0dupFKaMKP -# GfYHYW6kkfUfqLG7lxyg9vgDbRck36BktTWjPWGGv8sSycwvTTH9oulIaXBfcpbQ -# YDPhR7KKByud3GHHiMAoN5CjMMzTMFPA+bAC0ivA4VooAehqKL1EggOdgvfNTIrR -# dvdqKnlsAloIk9kiTIoKS6vvm0EE9oGQ2MgDWg== +# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUpqh8tCQFnmErTXd2kU4wezsH +# 4dyggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B +# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2 +# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV +# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm +# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv +# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM +# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT +# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4 +# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+ +# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK +# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj +# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz +# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5 +# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO +# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp +# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe +# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E +# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW +# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw +# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF +# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv +# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh +# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3 +# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC +# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA +# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz +# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7 +# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3 +# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q +# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF +# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx +# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV +# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291 +# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK +# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn +# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel +# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH +# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18 +# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh +# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN +# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k +# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA +# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H +# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC +# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj +# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE +# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv +# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh +# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O +# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG +# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w +# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG +# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ +# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs +# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05 +# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN +# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io +# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ +# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L +# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i +# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK +# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa +# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC +# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx +# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x +# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw +# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB +# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh +# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E +# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO +# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g +# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk +# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe +# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ +# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm +# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY +# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R +# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa +# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80 +# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E +# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+ +# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww +# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u +# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0 +# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y +# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL +# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv +# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8 +# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8 +# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc +# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad +# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF +# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd +# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM +# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B +# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG +# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76 +# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv +# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3 +# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s +# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y +# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw +# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE +# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k +# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta +# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b +# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh +# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q +# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E +# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU +# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV +# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS +# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie +# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb +# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw +# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w +# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG +# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j +# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF +# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo +# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw +# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT +# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ +# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7 +# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58 +# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk +# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM +# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF +# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e +# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk +# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4 +# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5 +# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8 +# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB +# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5 +# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY +# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0 +# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp +# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs +# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy +# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN +# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK +# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo +# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA +# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr +# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp +# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr +# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM +# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD +# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD +# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu +# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB +# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw +# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G +# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G +# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh +# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru +# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M +# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR +# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK +# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp +# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC +# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW +# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe +# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9 +# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC +# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE +# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy +# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3 +# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG +# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBQ6Fpclw6AF +# 4V9a0RhW7KOx3zncLDANBgkqhkiG9w0BAQEFAASCAYBRA+0311Mv/8tmo09gZnmy +# jsH/C+6OM8/fZFs+fhKpJelBWg8mkVvXilXxUljd38SsOwIeOD2YTrHKwwZQT5t5 +# mwaLs7NWevxEg9KWNDqkGSBwmLIr5Gi0PliDd3onpcYiQJmgMwPasMYjbtKeb+Je +# P3yVM3XfKjZG1/JjwWV1uhYfTHcENUt/ccUq02XBqd4rBpNg7AamNBTrnbZLH8Vr +# BSy6MpLZGF/fMkHZrdEXhvCEBM4s0NMBwZFY8QOVBo9wRIaR7EvEs/JUXdnMvYpm +# hWhPTXArJSoXjPeRyEOXjVaiqNhqWyLq+8cLJwMiRzaIaowJohawzEOv4Tr+09yY +# GduTA9BQ2sFt7tP+pgLeVduDWRj7ypRSWnoxZVk0iIS7ix4R+Fd0/SN06Fkzrckr +# mIXYa2UvZWBMZHF5NQkH/sKZ4VoJ4po/g9kMKFSOLEOszZspq9pJBcv+1QOMvpKS +# NTonKpQnuXODD9jeuoYUiN16hQ6qMO3vYUoHhg7RYPihggQEMIIEAAYJKoZIhvcN +# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv +# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n +# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa +# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw +# NzE1MjMzMVowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO +# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMCCIBOFT12QmFWZjcIDU +# gjLBK8jtP4m4YQJm8266XdlmPqJPTbWHJTpHLIApJsKyYjCBoAYLKoZIhvcNAQkQ +# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ +# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi +# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y +# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIAea7L7kRDJl3RbJDoZeRq8jh6FvFzCkvk +# V4Cc5TEit3vUrMzpUENST8URqEy+X6beRA3V+K2piPzjYDaKEBV0ka781nItW1We +# 2lBtXxXrQXlq2efEmH3PFE2Q6xuPKZ3nA76A65N6D1AQp+DBQbpZ+aee1eAn3PdA +# FmLB5iaROasALbeYtgKZrrB1iuWCPCuntnLFRUP0m2mMBIWo6FBBKtQ7zYl8YdfU +# wltQG8tmS4hrd10kTBaRffCU/b7MZAgA/W9qqPPTwJIurPo2MQmN8Zw9mqcUrFGa +# ow84mgOOjsOxf9uoHD0zh3Y3wVUcf56ah4xK+7Es1lqC2MDOK6tBfLJxInzYmbF8 +# /tt3dVAs6JJkHpUsUe9E71ayVBQfMKHWBcvXpurpUOqKYxR5hZyZXET8vXBjRSmY +# 2JETOZrEYVD7u2xeEHhESB0U8fjs6Qob39qhpAGLm4SV/4fUdqC5wwx6u5x6056Q +# sd29AweBSuABpbKoo9jXgdmPfH/Y2E4rWg2EZSaf8TPd1so76ZzZIcA/7MLYf3pS +# 7vt9qISp+w7wjwi74svtjkQqjRLSjFcIxe9S/5+SBFPzeooYhWhBA3QBoc89sOXc +# drdI9s/hoLOozdm1vESuXzD+vzf8nXMucuF/o9GNUlEDA8n5GpPprnesif7X48x9 +# BlkJ8nvZhpM= # SIG # End signature block diff --git a/AudioWorks/src/AudioWorks.Commands/docs/Export-AudioFile.md b/AudioWorks/src/AudioWorks.Commands/docs/Export-AudioFile.md index 02be557c..88726023 100644 --- a/AudioWorks/src/AudioWorks.Commands/docs/Export-AudioFile.md +++ b/AudioWorks/src/AudioWorks.Commands/docs/Export-AudioFile.md @@ -13,8 +13,8 @@ Exports an audio file. ## SYNTAX ``` -Export-AudioFile [-Encoder] [-Path] [-AudioFile] [-Name ] - [-Force] [-MaxDegreeOfParallelism ] [] +Export-AudioFile [-Encoder] [-Path] [-AudioFile] [-Name ] [-Force] + [-MaxDegreeOfParallelism ] [] ``` ## DESCRIPTION diff --git a/AudioWorks/src/AudioWorks.Common/AudioMetadata.cs b/AudioWorks/src/AudioWorks.Common/AudioMetadata.cs index 6d3bc9f5..6cf461ec 100644 --- a/AudioWorks/src/AudioWorks.Common/AudioMetadata.cs +++ b/AudioWorks/src/AudioWorks.Common/AudioMetadata.cs @@ -138,7 +138,7 @@ public string Day _day = string.Empty; else { - if (!int.TryParse(value, out var intValue) || intValue < 1 || intValue > 31) + if (!int.TryParse(value, out var intValue) || intValue is < 1 or > 31) throw new AudioMetadataInvalidException("Day must be between 1 and 31."); _day = intValue.ToString("00", CultureInfo.InvariantCulture); } @@ -163,7 +163,7 @@ public string Month _month = string.Empty; else { - if (!int.TryParse(value, out var intValue) || intValue < 1 || intValue > 12) + if (!int.TryParse(value, out var intValue) || intValue is < 1 or > 12) throw new AudioMetadataInvalidException("Month must be between 1 and 12."); _month = intValue.ToString("00", CultureInfo.InvariantCulture); } @@ -213,7 +213,7 @@ public string TrackNumber _trackNumber = string.Empty; else { - if (!int.TryParse(value, out var intValue) || intValue < 1 || intValue > 99) + if (!int.TryParse(value, out var intValue) || intValue is < 1 or > 99) throw new AudioMetadataInvalidException("TrackNumber must be between 1 and 99."); _trackNumber = intValue.ToString("00", CultureInfo.InvariantCulture); } @@ -238,7 +238,7 @@ public string TrackCount _trackCount = string.Empty; else { - if (!int.TryParse(value, out var intValue) || intValue < 1 || intValue > 99) + if (!int.TryParse(value, out var intValue) || intValue is < 1 or > 99) throw new AudioMetadataInvalidException("TrackCount must be between 1 and 99."); _trackCount = intValue.ToString("00", CultureInfo.InvariantCulture); } diff --git a/AudioWorks/src/AudioWorks.Common/AudioWorks.Common.csproj b/AudioWorks/src/AudioWorks.Common/AudioWorks.Common.csproj index f2368775..aa5f7951 100644 --- a/AudioWorks/src/AudioWorks.Common/AudioWorks.Common.csproj +++ b/AudioWorks/src/AudioWorks.Common/AudioWorks.Common.csproj @@ -2,7 +2,7 @@ - 1.1.0 + 1.2.0 $(VersionPrefix).$(Revision) 1.0.0.0 Public types used by the AudioWorks API. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. @@ -25,16 +25,18 @@ + + - + - + - + diff --git a/AudioWorks/src/AudioWorks.Common/CoverArt.cs b/AudioWorks/src/AudioWorks.Common/CoverArt.cs index c26879a1..70e7d499 100644 --- a/AudioWorks/src/AudioWorks.Common/CoverArt.cs +++ b/AudioWorks/src/AudioWorks.Common/CoverArt.cs @@ -47,7 +47,7 @@ public sealed class CoverArt : ICoverArt public string FileExtension { get; } /// - public ReadOnlySpan Data => _data.AsSpan().Slice(0, _dataSize); + public ReadOnlySpan Data => _data.AsSpan()[.._dataSize]; internal CoverArt(Stream stream) { diff --git a/AudioWorks/src/AudioWorks.Extensibility/AudioWorks.Extensibility.csproj b/AudioWorks/src/AudioWorks.Extensibility/AudioWorks.Extensibility.csproj index 0f065003..49f05363 100644 --- a/AudioWorks/src/AudioWorks.Extensibility/AudioWorks.Extensibility.csproj +++ b/AudioWorks/src/AudioWorks.Extensibility/AudioWorks.Extensibility.csproj @@ -2,7 +2,7 @@ - 1.1.0 + 1.2.0 $(VersionPrefix).$(Revision) 1.0.0.0 The AudioWorks extension API. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. @@ -18,15 +18,16 @@ - - + + - + + diff --git a/AudioWorks/src/AudioWorks.Extensibility/ExtensionAssemblyResolver.cs b/AudioWorks/src/AudioWorks.Extensibility/ExtensionAssemblyResolver.cs index 0d6a095e..610221f8 100644 --- a/AudioWorks/src/AudioWorks.Extensibility/ExtensionAssemblyResolver.cs +++ b/AudioWorks/src/AudioWorks.Extensibility/ExtensionAssemblyResolver.cs @@ -68,7 +68,7 @@ void ResolveFullFramework(IEnumerable assemblyFiles) => var matchingAssemblyName = assemblyFiles .FirstOrDefault(assemblyFile => AssemblyName.ReferenceMatchesDefinition( - AssemblyName.GetAssemblyName(assemblyFile), new AssemblyName(args.Name))); + AssemblyName.GetAssemblyName(assemblyFile), new(args.Name))); if (matchingAssemblyName == null) { _logger.LogTrace("Did not locate dependency '{0}'.", args.Name); diff --git a/AudioWorks/src/AudioWorks.Extensibility/Int24.cs b/AudioWorks/src/AudioWorks.Extensibility/Int24.cs index b92c6b5e..95d1716b 100644 --- a/AudioWorks/src/AudioWorks.Extensibility/Int24.cs +++ b/AudioWorks/src/AudioWorks.Extensibility/Int24.cs @@ -24,11 +24,11 @@ readonly struct Int24 readonly byte _byte2; readonly byte _byte3; - internal Int24(float value) + internal Int24(int value) { _byte1 = (byte) value; - _byte2 = (byte) (((uint) value >> 8) & 0xFF); - _byte3 = (byte) (((uint) value >> 16) & 0xFF); + _byte2 = (byte) ((value >> 8) & 0xFF); + _byte3 = (byte) ((value >> 16) & 0xFF); } public static implicit operator int(Int24 value) => diff --git a/AudioWorks/src/AudioWorks.Extensibility/RuntimeChecker.cs b/AudioWorks/src/AudioWorks.Extensibility/RuntimeChecker.cs index e9fc1124..6acb6635 100644 --- a/AudioWorks/src/AudioWorks.Extensibility/RuntimeChecker.cs +++ b/AudioWorks/src/AudioWorks.Extensibility/RuntimeChecker.cs @@ -30,40 +30,33 @@ public static class RuntimeChecker /// Returns the NuGet framework short folder name for the current runtime. /// /// The NuGet short folder name. - public static string GetShortFolderName() - { -#if NETSTANDARD2_0 - if (RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework", - StringComparison.Ordinal)) - return $"net{GetFrameworkVersion()}"; - - // .NET Core 2.x didn't report the version correctly. Assume they are v2.1 - var version = Version.Parse(RuntimeInformation.FrameworkDescription.Substring(RuntimeInformation.FrameworkDescription.LastIndexOf(' '))); - return version.Major == 4 ? "netcoreapp2.1" : $"netcoreapp{version.ToString(2)}"; -#else - var version = Version.Parse( - RuntimeInformation.FrameworkDescription[RuntimeInformation.FrameworkDescription.LastIndexOf(' ')..].Split('-')[0]); - - return version.Major >= 5 ? $"net{version.ToString(2)}" : $"netcoreapp{version.ToString(2)}"; -#endif - } #if NETSTANDARD2_0 + public static string GetShortFolderName() => + RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework", StringComparison.Ordinal) + ? $"net{GetFrameworkVersion()}" + : $"netcoreapp{Version.Parse(RuntimeInformation.FrameworkDescription[RuntimeInformation.FrameworkDescription.LastIndexOf(' ')..]).ToString(2)}"; static string GetFrameworkVersion() { using var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); using (var ndpKey = baseKey.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\")) - { - var release = (int) ndpKey.GetValue("Release", 0); - - return release switch + return (int?) ndpKey?.GetValue("Release", 0) switch { >= 528040 => "48", >= 461808 => "472", >= 461308 => "471", - _ => release >= 460798 ? "47" : "462" + >= 460798 => "47", + _ => "462" }; - } + } +#else + public static string GetShortFolderName() + { + var version = Version.Parse( + RuntimeInformation.FrameworkDescription[RuntimeInformation.FrameworkDescription.LastIndexOf(' ')..] + .Split('-')[0]); + + return version.Major >= 5 ? $"net{version.ToString(2)}" : $"netcoreapp{version.ToString(2)}"; } #endif } diff --git a/AudioWorks/src/AudioWorks.Extensibility/SampleBuffer.cs b/AudioWorks/src/AudioWorks.Extensibility/SampleBuffer.cs index 21f6a4cf..a05a0c7c 100644 --- a/AudioWorks/src/AudioWorks.Extensibility/SampleBuffer.cs +++ b/AudioWorks/src/AudioWorks.Extensibility/SampleBuffer.cs @@ -70,7 +70,7 @@ public sealed class SampleBuffer : IDisposable /// public SampleBuffer(ReadOnlySpan interleavedSamples, int channels) { - if (channels < 1 || channels > 2) + if (channels is < 1 or > 2) throw new ArgumentOutOfRangeException(nameof(channels), $"{nameof(channels)} must be 1 or 2."); if (interleavedSamples.Length % channels != 0) @@ -96,7 +96,7 @@ public SampleBuffer(ReadOnlySpan interleavedSamples, int channels) /// public SampleBuffer(ReadOnlySpan monoSamples, int bitsPerSample) { - if (bitsPerSample < 1 || bitsPerSample > 32) + if (bitsPerSample is < 1 or > 32) throw new ArgumentOutOfRangeException(nameof(bitsPerSample), $"{nameof(bitsPerSample)} is out of range."); @@ -122,7 +122,7 @@ public SampleBuffer(ReadOnlySpan leftSamples, ReadOnlySpan rightSample if (leftSamples.Length != rightSamples.Length) throw new ArgumentException( $"{nameof(rightSamples)} does not match the length of {nameof(leftSamples)}", nameof(rightSamples)); - if (bitsPerSample < 1 || bitsPerSample > 32) + if (bitsPerSample is < 1 or > 32) throw new ArgumentOutOfRangeException(nameof(bitsPerSample), $"{nameof(bitsPerSample)} is out of range."); @@ -130,12 +130,8 @@ public SampleBuffer(ReadOnlySpan leftSamples, ReadOnlySpan rightSample Frames = leftSamples.Length; _buffer = MemoryPool.Shared.Rent(Frames * 2); - SampleProcessor.Convert(leftSamples, _buffer.Memory.Span.Slice(0, Frames), bitsPerSample); -#if NETSTANDARD2_0 - SampleProcessor.Convert(rightSamples, _buffer.Memory.Span.Slice(Frames), bitsPerSample); -#else + SampleProcessor.Convert(leftSamples, _buffer.Memory.Span[..Frames], bitsPerSample); SampleProcessor.Convert(rightSamples, _buffer.Memory.Span[Frames..], bitsPerSample); -#endif } /// @@ -150,10 +146,10 @@ public SampleBuffer(ReadOnlySpan leftSamples, ReadOnlySpan rightSample /// is out of range. public SampleBuffer(ReadOnlySpan interleavedSamples, int channels, int bitsPerSample) { - if (channels < 1 || channels > 2) + if (channels is < 1 or > 2) throw new ArgumentOutOfRangeException(nameof(channels), $"{nameof(channels)} must be 1 or 2."); - if (bitsPerSample < 1 || bitsPerSample > 32) + if (bitsPerSample is < 1 or > 32) throw new ArgumentOutOfRangeException(nameof(bitsPerSample), $"{nameof(bitsPerSample)} is out of range."); if (interleavedSamples.Length % channels != 0) @@ -182,10 +178,10 @@ public SampleBuffer(ReadOnlySpan interleavedSamples, int channels, int bits /// is out of range. public SampleBuffer(ReadOnlySpan interleavedSamples, int channels, int bitsPerSample) { - if (channels < 1 || channels > 2) + if (channels is < 1 or > 2) throw new ArgumentOutOfRangeException(nameof(channels), $"{nameof(channels)} must be 1 or 2."); - if (bitsPerSample < 1 || bitsPerSample > 32) + if (bitsPerSample is < 1 or > 32) throw new ArgumentOutOfRangeException(nameof(bitsPerSample), $"{nameof(bitsPerSample)} is out of range."); var bytesPerSample = (int) Math.Ceiling(bitsPerSample / 8.0); @@ -237,7 +233,7 @@ public void CopyTo(Span monoDestination) if (Channels != 1) throw new InvalidOperationException("Not a single-channel SampleBuffer."); - _buffer.Memory.Span.Slice(0, Frames).CopyTo(monoDestination); + _buffer.Memory.Span[..Frames].CopyTo(monoDestination); } /// @@ -260,12 +256,12 @@ public void CopyTo(Span leftDestination, Span rightDestination) if (IsInterleaved) SampleProcessor.DeInterleave( - _buffer.Memory.Span.Slice(0, Frames * 2), + _buffer.Memory.Span[..(Frames * 2)], leftDestination, rightDestination); else { - _buffer.Memory.Span.Slice(0, Frames).CopyTo(leftDestination); + _buffer.Memory.Span[..Frames].CopyTo(leftDestination); _buffer.Memory.Span.Slice(Frames, Frames).CopyTo(rightDestination); } } @@ -294,13 +290,13 @@ public void CopyTo(Span leftDestination, Span rightDestination, int bi { Span leftBuffer = stackalloc float[Frames]; Span rightBuffer = stackalloc float[Frames]; - SampleProcessor.DeInterleave(_buffer.Memory.Span.Slice(0, Frames * 2), leftBuffer, rightBuffer); + SampleProcessor.DeInterleave(_buffer.Memory.Span[..(Frames * 2)], leftBuffer, rightBuffer); SampleProcessor.Convert(leftBuffer, leftDestination, bitsPerSample); SampleProcessor.Convert(rightBuffer, rightDestination, bitsPerSample); } else { - SampleProcessor.Convert(_buffer.Memory.Span.Slice(0, Frames), leftDestination, bitsPerSample); + SampleProcessor.Convert(_buffer.Memory.Span[..Frames], leftDestination, bitsPerSample); SampleProcessor.Convert(_buffer.Memory.Span.Slice(Frames, Frames), rightDestination, bitsPerSample); } } @@ -326,10 +322,10 @@ public void CopyToInterleaved(Span destination) nameof(destination)); if (Channels == 1 || IsInterleaved) - _buffer.Memory.Span.Slice(0, Frames * Channels).CopyTo(destination); + _buffer.Memory.Span[..(Frames * Channels)].CopyTo(destination); else SampleProcessor.Interleave( - _buffer.Memory.Span.Slice(0, Frames), + _buffer.Memory.Span[..Frames], _buffer.Memory.Span.Slice(Frames, Frames), destination); } @@ -355,16 +351,16 @@ public void CopyToInterleaved(Span destination, int bitsPerSample) if (destination.Length < Frames * Channels) throw new ArgumentException("destination is not long enough to store the samples.", nameof(destination)); - if (bitsPerSample < 1 || bitsPerSample > 32) + if (bitsPerSample is < 1 or > 32) throw new ArgumentOutOfRangeException(nameof(bitsPerSample), "bitsPerSample is out of range."); if (Channels == 1 || IsInterleaved) - SampleProcessor.Convert(_buffer.Memory.Span.Slice(0, Frames * Channels), destination, bitsPerSample); + SampleProcessor.Convert(_buffer.Memory.Span[..(Frames * Channels)], destination, bitsPerSample); else { Span interleavedBuffer = stackalloc float[Frames * 2]; SampleProcessor.Interleave( - _buffer.Memory.Span.Slice(0, Frames), + _buffer.Memory.Span[..Frames], _buffer.Memory.Span.Slice(Frames, Frames), interleavedBuffer); SampleProcessor.Convert(interleavedBuffer, destination, bitsPerSample); @@ -390,7 +386,7 @@ public void CopyToInterleaved(Span destination, int bitsPerSample) if (_isDisposed) throw new ObjectDisposedException(GetType().ToString()); if (_buffer == null) return; - if (bitsPerSample < 1 || bitsPerSample > 32) + if (bitsPerSample is < 1 or > 32) throw new ArgumentOutOfRangeException(nameof(bitsPerSample), "bitsPerSample is out of range."); var bytesPerSample = (int) Math.Ceiling(bitsPerSample / 8.0); if (destination.Length < Frames * Channels * bytesPerSample) @@ -403,14 +399,14 @@ public void CopyToInterleaved(Span destination, int bitsPerSample) case 1: if (Channels == 1 || IsInterleaved) SampleProcessor.Convert( - _buffer.Memory.Span.Slice(0, Frames * Channels), + _buffer.Memory.Span[..(Frames * Channels)], destination, bitsPerSample); else { Span interleavedBuffer = stackalloc float[Frames * 2]; SampleProcessor.Interleave( - _buffer.Memory.Span.Slice(0, Frames), + _buffer.Memory.Span[..Frames], _buffer.Memory.Span.Slice(Frames, Frames), interleavedBuffer); SampleProcessor.Convert(interleavedBuffer, destination, bitsPerSample); @@ -420,14 +416,14 @@ public void CopyToInterleaved(Span destination, int bitsPerSample) var int16Destination = MemoryMarshal.Cast(destination); if (Channels == 1 || IsInterleaved) SampleProcessor.Convert( - _buffer.Memory.Span.Slice(0, Frames * Channels), + _buffer.Memory.Span[..(Frames * Channels)], int16Destination, bitsPerSample); else { Span interleavedBuffer = stackalloc float[Frames * 2]; SampleProcessor.Interleave( - _buffer.Memory.Span.Slice(0, Frames), + _buffer.Memory.Span[..Frames], _buffer.Memory.Span.Slice(Frames, Frames), interleavedBuffer); SampleProcessor.Convert(interleavedBuffer, int16Destination, bitsPerSample); @@ -437,14 +433,14 @@ public void CopyToInterleaved(Span destination, int bitsPerSample) var int24Destination = MemoryMarshal.Cast(destination); if (Channels == 1 || IsInterleaved) SampleProcessor.Convert( - _buffer.Memory.Span.Slice(0, Frames * Channels), + _buffer.Memory.Span[..(Frames * Channels)], int24Destination, bitsPerSample); else { Span interleavedBuffer = stackalloc float[Frames * 2]; SampleProcessor.Interleave( - _buffer.Memory.Span.Slice(0, Frames), + _buffer.Memory.Span[..Frames], _buffer.Memory.Span.Slice(Frames, Frames), interleavedBuffer); SampleProcessor.Convert(interleavedBuffer, int24Destination, bitsPerSample); @@ -454,14 +450,14 @@ public void CopyToInterleaved(Span destination, int bitsPerSample) var int32Destination = MemoryMarshal.Cast(destination); if (Channels == 1 || IsInterleaved) SampleProcessor.Convert( - _buffer.Memory.Span.Slice(0, Frames * Channels), + _buffer.Memory.Span[..(Frames * Channels)], int32Destination, bitsPerSample); else { Span interleavedBuffer = stackalloc float[Frames * 2]; SampleProcessor.Interleave( - _buffer.Memory.Span.Slice(0, Frames), + _buffer.Memory.Span[..Frames], _buffer.Memory.Span.Slice(Frames, Frames), interleavedBuffer); SampleProcessor.Convert(interleavedBuffer, int32Destination, bitsPerSample); diff --git a/AudioWorks/src/AudioWorks.Extensibility/SampleProcessor.cs b/AudioWorks/src/AudioWorks.Extensibility/SampleProcessor.cs index 8eb7c21d..a2c61d4f 100644 --- a/AudioWorks/src/AudioWorks.Extensibility/SampleProcessor.cs +++ b/AudioWorks/src/AudioWorks.Extensibility/SampleProcessor.cs @@ -36,7 +36,7 @@ internal static void Convert(ReadOnlySpan source, Span destination, var adjVector = new Vector(adjustment); var maxVector = new Vector(max); var srcVectors = MemoryMarshal.Cast>(source); - srcVectors = srcVectors.Slice(0, srcVectors.Length - srcVectors.Length % 4); + srcVectors = srcVectors[..^(srcVectors.Length % 4)]; var destVectors = MemoryMarshal.Cast>(destination); for (int srcIndex = 0, destIndex = 0; srcIndex < srcVectors.Length; destIndex++) @@ -74,7 +74,7 @@ internal static void Convert(ReadOnlySpan source, Span destination { var maxVector = new Vector(max); var srcVectors = MemoryMarshal.Cast>(source); - srcVectors = srcVectors.Slice(0, srcVectors.Length - srcVectors.Length % 2); + srcVectors = srcVectors[..^(srcVectors.Length % 2)]; var destVectors = MemoryMarshal.Cast>(destination); for (int srcIndex = 0, destIndex = 0; srcIndex < srcVectors.Length; destIndex++) @@ -97,7 +97,7 @@ internal static void Convert(ReadOnlySpan source, Span destination var max = multiplier - 1; for (var sampleIndex = 0; sampleIndex < source.Length; sampleIndex++) - destination[sampleIndex] = new(Math.Min(source[sampleIndex] * multiplier, max)); + destination[sampleIndex] = new((int) Math.Min(source[sampleIndex] * multiplier, max)); } internal static void Convert(ReadOnlySpan source, Span destination, int bitsPerSample) diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AacAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AacAudioEncoder.cs index d8a0d35f..f597bd52 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AacAudioEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AacAudioEncoder.cs @@ -71,7 +71,7 @@ public SettingInfoDictionary SettingInfo } } - public string FileExtension { get; } = ".m4a"; + public string FileExtension => ".m4a"; public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings) { diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioDecoder.cs index b4735ed2..4db0753c 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioDecoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioDecoder.cs @@ -71,7 +71,7 @@ public unsafe SampleBuffer DecodeSamples() Finished = true; var result = new SampleBuffer( - buffer.Slice(0, (int) (frameCount * _outputDescription.ChannelsPerFrame)), + buffer[..(int) (frameCount * _outputDescription.ChannelsPerFrame)], (int) _outputDescription.ChannelsPerFrame, 32); return result; diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioEncoder.cs index 7b28bad3..753a7cd0 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioEncoder.cs @@ -49,7 +49,7 @@ public SettingInfoDictionary SettingInfo } } - public string FileExtension { get; } = ".m4a"; + public string FileExtension => ".m4a"; public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings) { diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioConverter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioConverter.cs index 659a7d50..1af5b173 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioConverter.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioConverter.cs @@ -78,7 +78,8 @@ unsafe AudioConverterStatus InputCallback( _descriptionsHandle.Free(); var inputDescriptions = new AudioStreamPacketDescription[numberPackets]; - _audioFile.ReadPackets(out var numBytes, inputDescriptions, _packetIndex, ref numberPackets, + var numBytes = (uint) _buffer.Memory.Length; + _audioFile.ReadPackets(ref numBytes, inputDescriptions, _packetIndex, ref numberPackets, new(_bufferHandle.Pointer)); _packetIndex += numberPackets; diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioFile.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioFile.cs index fe892cf4..052a0a11 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioFile.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioFile.cs @@ -92,12 +92,12 @@ internal void GetPropertyInfo(AudioFilePropertyId id, out uint dataSize, out uin SafeNativeMethods.AudioFileGetPropertyInfo(Handle, id, out dataSize, out isWritable); internal void ReadPackets( - out uint numBytes, + ref uint numBytes, AudioStreamPacketDescription[] packetDescriptions, long startingPacket, ref uint packets, IntPtr data) => - SafeNativeMethods.AudioFileReadPackets(Handle, false, out numBytes, packetDescriptions, + SafeNativeMethods.AudioFileReadPacketData(Handle, false, ref numBytes, packetDescriptions, startingPacket, ref packets, data); protected virtual void Dispose(bool disposing) diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioWorks.Extensions.Apple.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioWorks.Extensions.Apple.csproj index 0b09a0f5..e1668712 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioWorks.Extensions.Apple.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioWorks.Extensions.Apple.csproj @@ -2,7 +2,7 @@ - 1.8.1 + 1.9.0 $(VersionPrefix).$(Revision) The Apple lossless and AAC format extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/Apple-Extension#release-notes @@ -20,7 +20,12 @@ - + + + + + + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/CoreAudioHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/CoreAudioHandler.cs index 9124a502..c9f40c4a 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/CoreAudioHandler.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/CoreAudioHandler.cs @@ -20,12 +20,10 @@ This file is part of AudioWorks. using System.Reflection; using System.Runtime.InteropServices; using System.Runtime.Loader; -using AudioWorks.Common; #endif +using AudioWorks.Common; using AudioWorks.Extensibility; -#if WINDOWS using Microsoft.Extensions.Logging; -#endif namespace AudioWorks.Extensions.Apple { diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs index 96e187b2..c8e259a4 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs @@ -23,7 +23,7 @@ namespace AudioWorks.Extensions.Apple static class SafeNativeMethods { #if OSX - const string _coreAudioLibrary = "/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio"; + const string _coreAudioLibrary = "/System/Library/Frameworks/AudioToolbox.framework/AudioToolbox"; #else const string _coreAudioLibrary = "CoreAudioToolbox"; #endif @@ -90,10 +90,10 @@ internal static extern AudioFileStatus AudioFileGetPropertyInfo( #else [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] #endif - internal static extern AudioFileStatus AudioFileReadPackets( + internal static extern AudioFileStatus AudioFileReadPacketData( AudioFileHandle handle, [MarshalAs(UnmanagedType.Bool)] bool useCache, - out uint numBytes, + ref uint numBytes, [In, Out] AudioStreamPacketDescription[] packetDescriptions, long startingPacket, ref uint packets, diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/AudioWorks.Extensions.Flac.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/AudioWorks.Extensions.Flac.csproj index 48f4e318..db1922f0 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/AudioWorks.Extensions.Flac.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/AudioWorks.Extensions.Flac.csproj @@ -2,7 +2,7 @@ - 1.12.0 + 1.13.0 $(VersionPrefix).$(Revision) The Free Lossless Audio Codec (FLAC) extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/FLAC-Extension#release-notes @@ -33,7 +33,7 @@ - + PreserveNewest true contentFiles\any\any\ @@ -41,7 +41,12 @@ - + + + + + + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacAudioEncoder.cs index f0f3313c..160b2917 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacAudioEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacAudioEncoder.cs @@ -39,7 +39,7 @@ sealed class FlacAudioEncoder : IAudioEncoder, IDisposable ["Padding"] = new IntSettingInfo(0, 16_775_369) }; - public string FileExtension { get; } = ".flac"; + public string FileExtension => ".flac"; public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings) { diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacLibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacLibHandler.cs index a519252b..4366e424 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacLibHandler.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacLibHandler.cs @@ -67,10 +67,14 @@ public bool Handle() var osVersion = GetOSVersion(); var libPath = Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!, - osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" : - osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" : - osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" : - "osx.11"); + osVersion.StartsWith("10.15", StringComparison.Ordinal) + ? "macos.10.15-x64" : + osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.11-arm64" + : "macos.11-x64" : + RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.12-arm64" + : "macos.12-x64"); AddUnmanagedLibraryPath(libPath); #endif diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/MetadataStreamDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/MetadataStreamDecoder.cs index c80ffb06..d9b92ad3 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/MetadataStreamDecoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/MetadataStreamDecoder.cs @@ -51,8 +51,8 @@ protected override unsafe void MetadataCallback(IntPtr handle, IntPtr metadataBl var commentBytes = new Span(entry.Entry.ToPointer(), (int) entry.Length); var delimiter = commentBytes.IndexOf((byte) 0x3D); // '=' #if NETSTANDARD2_0 - var keyBytes = commentBytes.Slice(0, delimiter); - var valueBytes = commentBytes.Slice(delimiter + 1); + var keyBytes = commentBytes[..delimiter]; + var valueBytes = commentBytes[(delimiter + 1)..]; AudioMetadata.Set( Encoding.ASCII.GetString( (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes)), @@ -62,7 +62,7 @@ protected override unsafe void MetadataCallback(IntPtr handle, IntPtr metadataBl valueBytes.Length)); #else AudioMetadata.Set( - Encoding.ASCII.GetString(commentBytes.Slice(0, delimiter)), + Encoding.ASCII.GetString(commentBytes[..delimiter]), Encoding.UTF8.GetString(commentBytes[(delimiter + 1)..])); #endif } @@ -71,7 +71,7 @@ protected override unsafe void MetadataCallback(IntPtr handle, IntPtr metadataBl case MetadataType.Picture: var picture = Marshal.PtrToStructure(metadataBlock).Picture; - if (picture.Type == PictureType.CoverFront || picture.Type == PictureType.Other) + if (picture.Type is PictureType.CoverFront or PictureType.Other) AudioMetadata.CoverArt = CoverArtFactory.GetOrCreate( new Span(picture.Data.ToPointer(), (int) picture.DataLength)); break; diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/VorbisCommentBlock.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/VorbisCommentBlock.cs index eaae78fc..e2c4091f 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/VorbisCommentBlock.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/VorbisCommentBlock.cs @@ -55,8 +55,8 @@ internal unsafe void Append(string key, string value) SafeNativeMethods.MetadataObjectVorbisCommentEntryFromNameValuePair( out var entry, - new(Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes.Slice(0, keyLength + 1)))), - new(Unsafe.AsPointer(ref MemoryMarshal.GetReference(valueBytes.Slice(0, valueLength + 1))))); + new(Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes[..(keyLength + 1)]))), + new(Unsafe.AsPointer(ref MemoryMarshal.GetReference(valueBytes[..(valueLength + 1)])))); // The comment takes ownership of the new entry if 'copy' is false SafeNativeMethods.MetadataObjectVorbisCommentAppendComment(Handle, entry, false); diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.15-x64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.10.15-x64/libFLAC.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.15-x64/libFLAC.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.10.15-x64/libFLAC.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.15-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.10.15-x64/libogg.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.15-x64/libogg.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.10.15-x64/libogg.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libFLAC.dylib new file mode 100644 index 00000000..b0f76c91 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libFLAC.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libogg.dylib new file mode 100644 index 00000000..0fa164f4 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libogg.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.11/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-x64/libFLAC.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.11/libFLAC.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-x64/libFLAC.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.11/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-x64/libogg.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.11/libogg.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-x64/libogg.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libFLAC.dylib new file mode 100644 index 00000000..e9645b28 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libFLAC.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libogg.dylib new file mode 100644 index 00000000..33e0f0fc Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libogg.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libFLAC.dylib new file mode 100644 index 00000000..11e581df Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libFLAC.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libogg.dylib new file mode 100644 index 00000000..c9009e42 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libogg.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libFLAC.dylib deleted file mode 100644 index a5eb0eba..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libFLAC.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libogg.dylib deleted file mode 100644 index a6af48df..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libogg.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libFLAC.dylib deleted file mode 100644 index 9fca4712..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libFLAC.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libogg.dylib deleted file mode 100644 index 81136f36..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libogg.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/AudioWorks.Extensions.Id3.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/AudioWorks.Extensions.Id3.csproj index aac6265e..59acee0f 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/AudioWorks.Extensions.Id3.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/AudioWorks.Extensions.Id3.csproj @@ -2,7 +2,7 @@ - 1.6.1 + 1.7.0 $(VersionPrefix).$(Revision) The ID3 extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/ID3-Extension#release-notes @@ -12,10 +12,15 @@ - + + + + + + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFactory.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFactory.cs index f3569770..9f7cbab9 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFactory.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFactory.cs @@ -42,7 +42,7 @@ internal static FrameBase Build(string frameId) return newFrame; //Get the T*** frame - if (_frameTypes.TryGetValue(frameId.Substring(0, 1), out type) && Activator.CreateInstance(type, frameId) is FrameBase txxxFrame) + if (_frameTypes.TryGetValue(frameId[..1], out type) && Activator.CreateInstance(type, frameId) is FrameBase txxxFrame) return txxxFrame; throw new ArgumentException($"'{frameId}' is not a supported frame ID.", nameof(frameId)); diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFullText.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFullText.cs index 48d347e9..79f7eb28 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFullText.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFullText.cs @@ -52,7 +52,7 @@ internal override void Parse(Span frame) #if NETSTANDARD2_0 Language = Encoding.ASCII.GetString( - (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(frame.Slice(index))), 3); + (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(frame[index..])), 3); #else Language = Encoding.ASCII.GetString(frame.Slice(index, 3)); #endif @@ -62,11 +62,7 @@ internal override void Parse(Span frame) return; Description = TextBuilder.ReadText(frame, ref index, TextType); -#if NETSTANDARD2_0 - Text = TextBuilder.ReadTextEnd(frame.Slice(index), TextType); -#else Text = TextBuilder.ReadTextEnd(frame[index..], TextType); -#endif } internal override void Write(Stream output) diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FramePicture.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FramePicture.cs index e10ca41b..8190e2df 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FramePicture.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FramePicture.cs @@ -45,11 +45,7 @@ internal override void Parse(Span frame) Description = TextBuilder.ReadText(frame, ref index, TextType); PictureData = new byte[frame.Length - index]; -#if NETSTANDARD2_0 - frame.Slice(index, frame.Length - index).CopyTo(PictureData); -#else frame[index..].CopyTo(PictureData); -#endif } internal override void Write(Stream output) diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameText.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameText.cs index 84cbff76..b308921f 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameText.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameText.cs @@ -35,11 +35,7 @@ internal override void Parse(Span frame) { var index = 0; TextType = (TextType) frame[index++]; -#if NETSTANDARD2_0 - Text = TextBuilder.ReadTextEnd(frame.Slice(index), TextType); -#else Text = TextBuilder.ReadTextEnd(frame[index..], TextType); -#endif } internal override void Write(Stream output) diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameTextUserDef.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameTextUserDef.cs index 13a9ac99..2c5cfaec 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameTextUserDef.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameTextUserDef.cs @@ -35,12 +35,8 @@ internal override void Parse(Span frame) TextType = (TextType) frame[index++]; Description = TextBuilder.ReadText(frame, ref index, TextType); -#if NETSTANDARD2_0 - Text = TextBuilder.ReadTextEnd(frame.Slice(index), TextType); -#else Text = TextBuilder.ReadTextEnd(frame[index..], TextType); -#endif - } + } internal override void Write(Stream output) { diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/ID3v1.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/ID3v1.cs index 7a7dfd9b..abdcf6b2 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/ID3v1.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/ID3v1.cs @@ -96,15 +96,15 @@ internal void Deserialize(Stream stream) buffer = stackalloc char[30]; reader.Read(buffer); - Title = new(buffer.Slice(0, buffer.IndexOf('\0'))); + Title = new(buffer[..buffer.IndexOf('\0')]); reader.Read(buffer); - Artist = new(buffer.Slice(0, buffer.IndexOf('\0'))); + Artist = new(buffer[..buffer.IndexOf('\0')]); reader.Read(buffer); - Album = new(buffer.Slice(0, buffer.IndexOf('\0'))); - reader.Read(buffer.Slice(0, 4)); - Year = new(buffer.Slice(0, Math.Min(4, buffer.IndexOf('\0')))); + Album = new(buffer[..buffer.IndexOf('\0')]); + reader.Read(buffer[..4]); + Year = new(buffer[..Math.Min(4, buffer.IndexOf('\0'))]); reader.Read(buffer); - Comment = new(buffer.Slice(0, buffer.IndexOf('\0'))); + Comment = new(buffer[..buffer.IndexOf('\0')]); if (buffer[28] == 0) TrackNumber = buffer[29]; #endif diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/Id3AudioMetadataEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/Id3AudioMetadataEncoder.cs index a190c94c..87ee8397 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/Id3AudioMetadataEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/Id3AudioMetadataEncoder.cs @@ -53,7 +53,7 @@ public void WriteMetadata(Stream stream, AudioMetadata metadata, SettingDictiona logger.LogWarning("ID3 version 2.3 tags don't support UTF-8. Using version 2.4."); } - if (versionValue!.Equals("2.4", StringComparison.Ordinal)) + if (versionValue.Equals("2.4", StringComparison.Ordinal)) version = 4; } diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagManager.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagManager.cs index d3e9866c..22c64e93 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagManager.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagManager.cs @@ -75,7 +75,7 @@ internal static TagModel Deserialize(Stream stream) #if NETSTANDARD2_0 stream.Read(frameIdBuffer, 0, 1); #else - stream.Read(frameIdBuffer.Slice(0, 1)); + stream.Read(frameIdBuffer[..1]); #endif // We reached the padding diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagModelToMetadataAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagModelToMetadataAdapter.cs index 023667ba..084c5668 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagModelToMetadataAdapter.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagModelToMetadataAdapter.cs @@ -93,12 +93,8 @@ internal TagModelToMetadataAdapter(TagModel tagModel) // The TDAT frame contains the day and the month case "TDAT": - Day = frameText.Text.Substring(0, 2); -#if NETSTANDARD2_0 - Month = frameText.Text.Substring(2); -#else + Day = frameText.Text[..2]; Month = frameText.Text[2..]; -#endif break; case "TYER": @@ -113,7 +109,7 @@ internal TagModelToMetadataAdapter(TagModel tagModel) { Month = splitRecordingTime[1]; if (splitRecordingTime.Length > 2) - Day = splitRecordingTime[2].Substring(0, 2); + Day = splitRecordingTime[2][..2]; } break; diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TextBuilder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TextBuilder.cs index 8b8c29e1..0f5e299d 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TextBuilder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TextBuilder.cs @@ -83,11 +83,7 @@ static string ReadTextNoPreamble(Span frame, ref int index, TextType textT #endif { var text = string.Empty; -#if NETSTANDARD2_0 - var count = frame.Slice(index).IndexOf((byte) 0); -#else var count = frame[index..].IndexOf((byte) 0); -#endif switch (count) { case -1: @@ -95,7 +91,7 @@ static string ReadTextNoPreamble(Span frame, ref int index, TextType textT case > 0: #if NETSTANDARD2_0 text = _encodings[textType].GetString( - (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(frame.Slice(index))), count); + (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(frame[index..])), count); #else text = _encodings[textType].GetString(frame.Slice(index, count)); #endif @@ -139,20 +135,12 @@ static string ReadTextEndNoPreamble(Span frame, TextType textType) => static string ReadUtf16End(Span frame) { if (frame[0] == 0xFE && frame[1] == 0xFF) -#if NETSTANDARD2_0 - return ReadTextEndNoPreamble(frame.Slice(2), TextType.Utf16BigEndian); -#else return ReadTextEndNoPreamble(frame[2..], TextType.Utf16BigEndian); -#endif if (frame[0] == 0xFF && frame[1] == 0xFE) -#if NETSTANDARD2_0 - return ReadTextEndNoPreamble(frame.Slice(2), TextType.Utf16); -#else return ReadTextEndNoPreamble(frame[2..], TextType.Utf16); -#endif - throw new AudioInvalidException("Invalid UTF16 string."); + throw new AudioInvalidException("Invalid UTF16 string."); } } } \ No newline at end of file diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/AudioWorks.Extensions.Lame.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/AudioWorks.Extensions.Lame.csproj index 27be1529..a4e31074 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/AudioWorks.Extensions.Lame.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/AudioWorks.Extensions.Lame.csproj @@ -2,7 +2,7 @@ - 1.8.2 + 1.9.0 $(VersionPrefix).$(Revision) The Lame MP3 encoding extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/Lame-Extension#release-notes @@ -33,7 +33,7 @@ - + PreserveNewest true contentFiles\any\any\ @@ -41,7 +41,12 @@ - + + + + + + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/Encoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/Encoder.cs index b5393a3c..c74acc31 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/Encoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/Encoder.cs @@ -93,7 +93,7 @@ ref MemoryMarshal.GetReference(buffer), if (bytesEncoded < 0) throw new AudioEncodingException($"Lame encountered error '{bytesEncoded}' while encoding."); - _stream.Write(buffer.Slice(0, bytesEncoded)); + _stream.Write(buffer[..bytesEncoded]); #endif } @@ -132,7 +132,7 @@ ref MemoryMarshal.GetReference(buffer), if (bytesEncoded < 0) throw new AudioEncodingException($"Lame encountered error '{bytesEncoded}' while encoding."); - _stream.Write(buffer.Slice(0, bytesEncoded)); + _stream.Write(buffer[..bytesEncoded]); #endif } @@ -155,7 +155,7 @@ internal void Flush() _handle, ref MemoryMarshal.GetReference(buffer), buffer.Length); - _stream.Write(buffer.Slice(0, bytesFlushed)); + _stream.Write(buffer[..bytesFlushed]); #endif } @@ -179,10 +179,10 @@ internal void UpdateLameTag() byte empty = 0; var bufferSize = SafeNativeMethods.GetLameTagFrame(_handle, ref empty, UIntPtr.Zero); Span buffer = stackalloc byte[(int) bufferSize.ToUInt32()]; - _stream.Write(buffer.Slice(0, (int) SafeNativeMethods.GetLameTagFrame( + _stream.Write(buffer[..(int) SafeNativeMethods.GetLameTagFrame( _handle, ref MemoryMarshal.GetReference(buffer), - bufferSize).ToUInt32())); + bufferSize).ToUInt32()]); #endif _stream.Position = endOfData; diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameAudioEncoder.cs index 3fa4bf2d..628ea9bc 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameAudioEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameAudioEncoder.cs @@ -64,7 +64,7 @@ public SettingInfoDictionary SettingInfo } } - public string FileExtension { get; } = ".mp3"; + public string FileExtension => ".mp3"; public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings) { diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameLibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameLibHandler.cs index 6d0ebc2b..72a0e985 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameLibHandler.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameLibHandler.cs @@ -57,10 +57,14 @@ public bool Handle() var osVersion = GetOSVersion(); AddUnmanagedLibraryPath(Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!, - osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" : - osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" : - osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" : - "osx.11")); + osVersion.StartsWith("10.15", StringComparison.Ordinal) + ? "macos.10.15-x64" : + osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.11-arm64" + : "macos.11-x64" : + RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.12-arm64" + : "macos.12-x64")); #endif try diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.15-x64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.10.15-x64/libmp3lame.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.15-x64/libmp3lame.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.10.15-x64/libmp3lame.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-arm64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-arm64/libmp3lame.dylib new file mode 100644 index 00000000..bf4a9b9d Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-arm64/libmp3lame.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.11/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-x64/libmp3lame.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.11/libmp3lame.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-x64/libmp3lame.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-arm64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-arm64/libmp3lame.dylib new file mode 100644 index 00000000..acc6944f Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-arm64/libmp3lame.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-x64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-x64/libmp3lame.dylib new file mode 100644 index 00000000..73e89492 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-x64/libmp3lame.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.13-x64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.13-x64/libmp3lame.dylib deleted file mode 100644 index 4930df36..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.13-x64/libmp3lame.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.14-x64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.14-x64/libmp3lame.dylib deleted file mode 100644 index 69efba85..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.14-x64/libmp3lame.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp3/AudioWorks.Extensions.Mp3.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp3/AudioWorks.Extensions.Mp3.csproj index dbfe9602..ab77ba89 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp3/AudioWorks.Extensions.Mp3.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp3/AudioWorks.Extensions.Mp3.csproj @@ -2,7 +2,7 @@ - 1.6.0 + 1.7.0 $(VersionPrefix).$(Revision) The MPEG Audio Layer 3 (MP3) extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/MP3-Extension#release-notes @@ -12,7 +12,7 @@ - + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AlacAtom.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AlacAtom.cs index 1e06fadf..888d8f96 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AlacAtom.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AlacAtom.cs @@ -30,11 +30,7 @@ internal AlacAtom(ReadOnlySpan data) { BitsPerSample = data[53]; Channels = data[57]; -#if NETSTANDARD2_0 - SampleRate = BinaryPrimitives.ReadUInt32BigEndian(data.Slice(68)); -#else SampleRate = BinaryPrimitives.ReadUInt32BigEndian(data[68..]); -#endif } } } \ No newline at end of file diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AudioWorks.Extensions.Mp4.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AudioWorks.Extensions.Mp4.csproj index 3f12aa8b..6f1b5fa7 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AudioWorks.Extensions.Mp4.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AudioWorks.Extensions.Mp4.csproj @@ -2,7 +2,7 @@ - 1.6.0 + 1.7.0 $(VersionPrefix).$(Revision) The MPEG-4 Audio extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/MP4-Extension#release-notes @@ -12,10 +12,15 @@ - + + + + + + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/SttsAtom.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/SttsAtom.cs index bb3c51d7..11de8ba1 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/SttsAtom.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/SttsAtom.cs @@ -26,14 +26,8 @@ sealed class SttsAtom internal SttsAtom(ReadOnlySpan data) { -#if NETSTANDARD2_0 - PacketCount = BinaryPrimitives.ReadUInt32BigEndian(data.Slice(16)); - PacketSize = BinaryPrimitives.ReadUInt32BigEndian(data.Slice(20)); -#else PacketCount = BinaryPrimitives.ReadUInt32BigEndian(data[16..]); PacketSize = BinaryPrimitives.ReadUInt32BigEndian(data[20..]); -#endif - } } } \ No newline at end of file diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/TextAtom.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/TextAtom.cs index d3f5f277..8e7414e9 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/TextAtom.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/TextAtom.cs @@ -28,18 +28,18 @@ sealed class TextAtom : WritableAtom internal TextAtom(ReadOnlySpan data) { #if NETSTANDARD2_0 - _fourCc = new string(CodePagesEncodingProvider.Instance.GetEncoding(1252) - .GetChars(data.Slice(0, 4).ToArray())); - Value = new string(Encoding.UTF8.GetChars(data.Slice(24).ToArray())); + _fourCc = new(CodePagesEncodingProvider.Instance.GetEncoding(1252) + .GetChars(data[..4].ToArray())); + Value = new(Encoding.UTF8.GetChars(data[24..].ToArray())); #else Span fourCcBuffer = stackalloc char[4]; (CodePagesEncodingProvider.Instance.GetEncoding(1252) ?? Encoding.ASCII) - .GetChars(data.Slice(0, 4), fourCcBuffer); + .GetChars(data[..4], fourCcBuffer); _fourCc = new(fourCcBuffer); Span charBuffer = stackalloc char[Encoding.UTF8.GetMaxCharCount(data.Length - 24)]; var charCount = Encoding.UTF8.GetChars(data[24..], charBuffer); - Value = new(charBuffer.Slice(0, charCount)); + Value = new(charBuffer[..charCount]); #endif } diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/AudioWorks.Extensions.Opus.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/AudioWorks.Extensions.Opus.csproj index 4490d4ed..a7fb5628 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/AudioWorks.Extensions.Opus.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/AudioWorks.Extensions.Opus.csproj @@ -2,7 +2,7 @@ - 1.13.2 + 1.14.0 $(VersionPrefix).$(Revision) The Opus extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/Opus-Extension#release-notes @@ -41,7 +41,7 @@ - + PreserveNewest true contentFiles\any\any\ @@ -49,7 +49,12 @@ - + + + + + + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CommentHeaderToMetadataAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CommentHeaderToMetadataAdapter.cs index b05ffb2d..c14e4271 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CommentHeaderToMetadataAdapter.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CommentHeaderToMetadataAdapter.cs @@ -44,37 +44,37 @@ internal unsafe CommentHeaderToMetadataAdapter(in OggPacket packet) throw new AudioMetadataInvalidException("Invalid Opus comment header."); var headerPosition = 8; - var vendorLength = (int) BinaryPrimitives.ReadUInt32LittleEndian(headerBytes.Slice(8)); + var vendorLength = (int) BinaryPrimitives.ReadUInt32LittleEndian(headerBytes[8..]); headerPosition += 4 + vendorLength; - var commentCount = BinaryPrimitives.ReadUInt32LittleEndian(headerBytes.Slice(headerPosition)); + var commentCount = BinaryPrimitives.ReadUInt32LittleEndian(headerBytes[headerPosition..]); headerPosition += 4; while (commentCount > 0) { - var length = (int) BinaryPrimitives.ReadUInt32LittleEndian(headerBytes.Slice(headerPosition)); + var length = (int) BinaryPrimitives.ReadUInt32LittleEndian(headerBytes[headerPosition..]); headerPosition += 4; var commentBytes = headerBytes.Slice(headerPosition, length); headerPosition += length; var delimiter = commentBytes.IndexOf((byte) 0x3D); // '=' - var keyBytes = commentBytes.Slice(0, delimiter); + var keyBytes = commentBytes[..delimiter]; var key = Encoding.ASCII.GetString( (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes)), keyBytes.Length); if (key.Equals("METADATA_BLOCK_PICTURE", StringComparison.OrdinalIgnoreCase)) - CoverArt = CoverArtAdapter.FromBase64(commentBytes.Slice(delimiter + 1)); + CoverArt = CoverArtAdapter.FromBase64(commentBytes[(delimiter + 1)..]); else { - var valueBytes = commentBytes.Slice(delimiter + 1); + var valueBytes = commentBytes[(delimiter + 1)..]; SetText(key, Encoding.UTF8.GetString( (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(valueBytes)), valueBytes.Length)); } #else - if (!Encoding.ASCII.GetString(headerBytes.Slice(0, 8)) + if (!Encoding.ASCII.GetString(headerBytes[..8]) .Equals("OpusTags", StringComparison.Ordinal)) throw new AudioMetadataInvalidException("Invalid Opus comment header."); var headerPosition = 8; @@ -94,7 +94,7 @@ internal unsafe CommentHeaderToMetadataAdapter(in OggPacket packet) headerPosition += length; var delimiter = commentBytes.IndexOf((byte) 0x3D); // '=' - var key = Encoding.ASCII.GetString(commentBytes.Slice(0, delimiter)); + var key = Encoding.ASCII.GetString(commentBytes[..delimiter]); if (key.Equals("METADATA_BLOCK_PICTURE", StringComparison.OrdinalIgnoreCase)) CoverArt = CoverArtAdapter.FromBase64(commentBytes[(delimiter + 1)..]); diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CoverArtAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CoverArtAdapter.cs index 7bb90970..d79abcde 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CoverArtAdapter.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CoverArtAdapter.cs @@ -36,23 +36,14 @@ static class CoverArtAdapter var offset = 4; // Seek past the mime type and description -#if NETSTANDARD2_0 - offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)) + 4; - offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)) + 4; -#else offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]) + 4; offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]) + 4; -#endif // Seek past the width, height, color depth and type offset += 16; return CoverArtFactory.GetOrCreate( -#if NETSTANDARD2_0 - decodedValue.Slice(offset + 4, (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)))); -#else decodedValue.Slice(offset + 4, (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]))); -#endif } } } \ No newline at end of file diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/Encoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/Encoder.cs index 25064190..39f08b5e 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/Encoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/Encoder.cs @@ -60,39 +60,35 @@ internal Encoder( internal void SetSerialNumber(int serialNumber) { - var error = SafeNativeMethods.OpusEncoderControl(_handle, - EncoderControlRequest.SetSerialNumber, serialNumber); + var error = OpusEncoderControlSet(EncoderControlRequest.SetSerialNumber, serialNumber); if (error != 0) throw new AudioEncodingException($"Opus encountered error '{error}' setting the serial number."); } internal void SetHeaderGain(int gain) { - var error = SafeNativeMethods.OpusEncoderControl(_handle, - EncoderControlRequest.SetHeaderGain, gain); + var error = OpusEncoderControlSet(EncoderControlRequest.SetHeaderGain, gain); if (error != 0) throw new AudioEncodingException($"Opus encountered error '{error}' setting the gain."); } internal void SetLsbDepth(int depth) { - var error = SafeNativeMethods.OpusEncoderControl(_handle, - EncoderControlRequest.SetLsbDepth, depth); + var error = OpusEncoderControlSet(EncoderControlRequest.SetLsbDepth, depth); if (error != 0) throw new AudioEncodingException($"Opus encountered error '{error}' setting the LSB depth."); } internal void SetVbrConstraint(bool enabled) { - var error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.SetVbrConstraint, - enabled ? 1 : 0); + var error = OpusEncoderControlSet(EncoderControlRequest.SetVbrConstraint, enabled ? 1 : 0); if (error != 0) throw new AudioEncodingException($"Opus encountered error '{error}' setting VBR constraint."); } internal void SetVbr(bool enabled) { - var error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.SetVbr, enabled ? 1 : 0); + var error = OpusEncoderControlSet(EncoderControlRequest.SetVbr, enabled ? 1 : 0); if (error != 0) throw new AudioEncodingException($"Opus encountered error '{error}' setting VBR."); } @@ -102,14 +98,14 @@ internal void SetBitRate(int bitRate) // Cache this value for determining pre-allocation _requestedBitRate = bitRate * 1000; - var error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.SetBitRate, _requestedBitRate); + var error = OpusEncoderControlSet(EncoderControlRequest.SetBitRate, _requestedBitRate); if (error != 0) throw new AudioEncodingException($"Opus encountered error '{error}' setting the bit rate."); } internal void SetSignal(SignalType signal) { - var error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.SetSignal, (int) signal); + var error = OpusEncoderControlSet(EncoderControlRequest.SetSignal, (int) signal); if (error != 0) throw new AudioEncodingException($"Opus encountered error '{error}' setting the complexity."); } @@ -166,7 +162,7 @@ void FlushHeaders() if (_requestedBitRate == 0) { // If the bit rate isn't explicit, get the automatic value - error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.GetBitRate, out _requestedBitRate); + error = OpusEncoderControlGet(EncoderControlRequest.GetBitRate, out _requestedBitRate); if (error != 0) throw new AudioEncodingException($"Opus encountered error '{error}' getting the bit rate."); } @@ -182,5 +178,27 @@ void FlushHeaders() _headersFlushed = true; } + + int OpusEncoderControlGet(EncoderControlRequest request, out int value) => +#if OSX + // HACK ope_encoder_ctl needs the variadic argument pushed to the stack on ARM64 + RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? SafeNativeMethods.OpusEncoderControlGetArm64(_handle, request, + IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, out value) + : SafeNativeMethods.OpusEncoderControlGet(_handle, request, out value); +#else + SafeNativeMethods.OpusEncoderControlGet(_handle, request, out value); +#endif + + int OpusEncoderControlSet(EncoderControlRequest request, int argument) => +#if OSX + // HACK ope_encoder_ctl needs the variadic argument pushed to the stack on ARM64 + RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? SafeNativeMethods.OpusEncoderControlSetArm64(_handle, request, + IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, argument) + : SafeNativeMethods.OpusEncoderControlSet(_handle, request, argument); +#else + SafeNativeMethods.OpusEncoderControlSet(_handle, request, argument); +#endif } } diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioEncoder.cs index 0649bb94..16ddf133 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioEncoder.cs @@ -40,7 +40,7 @@ sealed class OpusAudioEncoder : IAudioEncoder, IDisposable ["SerialNumber"] = new IntSettingInfo(int.MinValue, int.MaxValue) }; - public string FileExtension { get; } = ".opus"; + public string FileExtension => ".opus"; public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings) { diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioInfoDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioInfoDecoder.cs index 2bd32b25..8864b3ae 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioInfoDecoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioInfoDecoder.cs @@ -69,9 +69,9 @@ public unsafe AudioInfo ReadAudioInfo(Stream stream) var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead); #if NETSTANDARD2_0 - buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer); #else - buffer.Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer[..bytesRead].CopyTo(nativeBuffer); #endif sync.Wrote(bytesRead); } @@ -113,16 +113,12 @@ static unsafe AudioInfo GetAudioInfo(int serialNumber, in OggPacket headerPacket #if NETSTANDARD2_0 if (!Encoding.ASCII.GetString((byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(headerBytes)), 8) #else - if (!Encoding.ASCII.GetString(headerBytes.Slice(0, 8)) + if (!Encoding.ASCII.GetString(headerBytes[..8]) #endif .Equals("OpusHead", StringComparison.Ordinal)) throw new AudioUnsupportedException("Not an Opus stream."); -#if NETSTANDARD2_0 - var sampleRate = BinaryPrimitives.ReadUInt32LittleEndian(headerBytes.Slice(12)); -#else var sampleRate = BinaryPrimitives.ReadUInt32LittleEndian(headerBytes[12..]); -#endif return AudioInfo.CreateForLossy( "Opus", @@ -130,12 +126,8 @@ static unsafe AudioInfo GetAudioInfo(int serialNumber, in OggPacket headerPacket (int) sampleRate, (long) Math.Max( (GetFinalGranulePosition(serialNumber, stream) - -#if NETSTANDARD2_0 - BinaryPrimitives.ReadUInt16LittleEndian(headerBytes.Slice(10))) / (double) 48000 * sampleRate, -#else BinaryPrimitives.ReadUInt16LittleEndian(headerBytes[10..])) / (double) 48000 * sampleRate, -#endif - 0.0)); + 0.0)); } static long GetFinalGranulePosition(int serialNumber, Stream stream) diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataDecoder.cs index 140d02a4..44401cd8 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataDecoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataDecoder.cs @@ -63,9 +63,9 @@ public unsafe AudioMetadata ReadMetadata(Stream stream) var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead); #if NETSTANDARD2_0 - buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer); #else - buffer.Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer[..bytesRead].CopyTo(nativeBuffer); #endif sync.Wrote(bytesRead); } diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataEncoder.cs index bf110276..a5ddf1ba 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataEncoder.cs @@ -67,9 +67,9 @@ public unsafe void WriteMetadata(Stream stream, AudioMetadata metadata, SettingD var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead); #if NETSTANDARD2_0 - buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer); #else - buffer.Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer[..bytesRead].CopyTo(nativeBuffer); #endif sync.Wrote(bytesRead); } diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusLibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusLibHandler.cs index aa8bfbe3..b5430740 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusLibHandler.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusLibHandler.cs @@ -53,16 +53,19 @@ public bool Handle() var osVersion = GetOSVersion(); AddUnmanagedLibraryPath(Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!, - osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" : - osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" : - osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" : - "osx.11")); + osVersion.StartsWith("10.15", StringComparison.Ordinal) + ? "macos.10.15-x64" : + osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.11-arm64" + : "macos.11-x64" : + RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.12-arm64" + : "macos.12-x64")); #else // LINUX var release = GetRelease(); if (release.StartsWith("Ubuntu", StringComparison.OrdinalIgnoreCase)) AddUnmanagedLibraryPath(Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!, - release.StartsWith("Ubuntu 16.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.16.04-x64" : release.StartsWith("Ubuntu 18.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.18.04-x64" : "ubuntu.20.04-x64")); #endif diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/SafeNativeMethods.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/SafeNativeMethods.cs index 34e0493c..55d28d4b 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/SafeNativeMethods.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/SafeNativeMethods.cs @@ -315,10 +315,24 @@ internal static extern int OpusEncoderDrain( #else [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] #endif - internal static extern int OpusEncoderControl( + internal static extern int OpusEncoderControlGet( OpusEncoderHandle handle, EncoderControlRequest request, out int value); +#if OSX + + [DllImport(_opusEncLibrary, EntryPoint = "ope_encoder_ctl", ExactSpelling = true)] +#if NETSTANDARD2_0 + [DefaultDllImportSearchPaths(DllImportSearchPath.LegacyBehavior)] +#else + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] +#endif + internal static extern int OpusEncoderControlGetArm64( + OpusEncoderHandle handle, + EncoderControlRequest request, + IntPtr register2, IntPtr register3, IntPtr register4, IntPtr register5, IntPtr register6, IntPtr register7, + out int value); +#endif [DllImport(_opusEncLibrary, EntryPoint = "ope_encoder_ctl", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] @@ -327,10 +341,24 @@ internal static extern int OpusEncoderControl( #else [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] #endif - internal static extern int OpusEncoderControl( + internal static extern int OpusEncoderControlSet( OpusEncoderHandle handle, EncoderControlRequest request, int argument); +#if OSX + + [DllImport(_opusEncLibrary, EntryPoint = "ope_encoder_ctl", ExactSpelling = true)] +#if NETSTANDARD2_0 + [DefaultDllImportSearchPaths(DllImportSearchPath.LegacyBehavior)] +#else + [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] +#endif + internal static extern int OpusEncoderControlSetArm64( + OpusEncoderHandle handle, + EncoderControlRequest request, + IntPtr register2, IntPtr register3, IntPtr register4, IntPtr register5, IntPtr register6, IntPtr register7, + int argument); +#endif [DllImport(_opusEncLibrary, EntryPoint = "ope_encoder_destroy", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libogg.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libogg.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libogg.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libopus.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libopus.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libopus.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libopusenc.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libopusenc.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libopusenc.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libogg.dylib new file mode 100644 index 00000000..0fa164f4 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libogg.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopus.dylib new file mode 100644 index 00000000..0309a9ca Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopus.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopusenc.dylib new file mode 100644 index 00000000..609b5295 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopusenc.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libogg.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libogg.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libogg.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libopus.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libopus.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libopus.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libopusenc.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libopusenc.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libopusenc.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libogg.dylib new file mode 100644 index 00000000..33e0f0fc Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libogg.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopus.dylib new file mode 100644 index 00000000..983331a6 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopus.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopusenc.dylib new file mode 100644 index 00000000..ce887a4a Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopusenc.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libogg.dylib new file mode 100644 index 00000000..c9009e42 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libogg.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopus.dylib new file mode 100644 index 00000000..48922756 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopus.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopusenc.dylib new file mode 100644 index 00000000..d6a0d7de Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopusenc.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libogg.dylib deleted file mode 100644 index a6af48df..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libogg.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopus.dylib deleted file mode 100644 index 236f16fd..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopus.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopusenc.dylib deleted file mode 100644 index 48c078e8..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopusenc.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libogg.dylib deleted file mode 100644 index 81136f36..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libogg.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopus.dylib deleted file mode 100644 index f546d75f..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopus.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopusenc.dylib deleted file mode 100644 index e8507f54..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopusenc.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/ubuntu.16.04-x64/libopusenc.so b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/ubuntu.16.04-x64/libopusenc.so deleted file mode 100644 index d9730cb5..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/ubuntu.16.04-x64/libopusenc.so and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/AudioWorks.Extensions.ReplayGain.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/AudioWorks.Extensions.ReplayGain.csproj index eb5521e6..e45806f4 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/AudioWorks.Extensions.ReplayGain.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/AudioWorks.Extensions.ReplayGain.csproj @@ -2,7 +2,7 @@ - 1.7.3 + 1.8.0 $(VersionPrefix).$(Revision) The ReplayGain 2.0 extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/ReplayGain-Extension#release-notes @@ -33,7 +33,7 @@ - + PreserveNewest true contentFiles\any\any\ @@ -41,7 +41,7 @@ - + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/Ebur128LibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/Ebur128LibHandler.cs index e8f00af1..0f0e5e0b 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/Ebur128LibHandler.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/Ebur128LibHandler.cs @@ -57,10 +57,14 @@ public bool Handle() var osVersion = GetOSVersion(); AddUnmanagedLibraryPath(Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!, - osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" : - osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" : - osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" : - "osx.11")); + osVersion.StartsWith("10.15", StringComparison.Ordinal) + ? "macos.10.15-x64" : + osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.11-arm64" + : "macos.11-x64" : + RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.12-arm64" + : "macos.12-x64")); #endif try diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.15-x64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.10.15-x64/libebur128.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.15-x64/libebur128.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.10.15-x64/libebur128.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-arm64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-arm64/libebur128.dylib new file mode 100644 index 00000000..618fab94 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-arm64/libebur128.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.11/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-x64/libebur128.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.11/libebur128.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-x64/libebur128.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.14-x64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-arm64/libebur128.dylib similarity index 67% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.14-x64/libebur128.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-arm64/libebur128.dylib index 38db8343..ee9e46fe 100644 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.14-x64/libebur128.dylib and b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-arm64/libebur128.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-x64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-x64/libebur128.dylib new file mode 100644 index 00000000..a171dbb4 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-x64/libebur128.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.13-x64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.13-x64/libebur128.dylib deleted file mode 100644 index c40b7d83..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.13-x64/libebur128.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/AudioWorks.Extensions.Vorbis.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/AudioWorks.Extensions.Vorbis.csproj index fd9dfd9a..f2486704 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/AudioWorks.Extensions.Vorbis.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/AudioWorks.Extensions.Vorbis.csproj @@ -2,7 +2,7 @@ - 1.14.3 + 1.15.0 $(VersionPrefix).$(Revision) The Ogg Vorbis extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/Vorbis-Extension#release-notes @@ -41,7 +41,7 @@ - + PreserveNewest true contentFiles\any\any\ @@ -49,7 +49,12 @@ - + + + + + + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/CoverArtAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/CoverArtAdapter.cs index bdb87567..e3737387 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/CoverArtAdapter.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/CoverArtAdapter.cs @@ -37,23 +37,14 @@ static class CoverArtAdapter var offset = 4; // Seek past the mime type and description -#if NETSTANDARD2_0 - offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)) + 4; - offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)) + 4; -#else offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]) + 4; offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]) + 4; -#endif // Seek past the width, height, color depth and type offset += 16; return CoverArtFactory.GetOrCreate( -#if NETSTANDARD2_0 - decodedValue.Slice(offset + 4, (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)))); -#else decodedValue.Slice(offset + 4, (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]))); -#endif } #if NETSTANDARD2_0 @@ -69,19 +60,19 @@ internal static ReadOnlySpan ToBase64(ICoverArt coverArt) BinaryPrimitives.WriteUInt32BigEndian(buffer, 3); #if NETSTANDARD2_0 - BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(4), (uint) coverArt.MimeType.Length); + BinaryPrimitives.WriteUInt32BigEndian(buffer[4..], (uint) coverArt.MimeType.Length); fixed (char* mimeTypeAddress = coverArt.MimeType) - fixed (byte* bufferAddress = buffer.Slice(8)) + fixed (byte* bufferAddress = buffer[8..]) Encoding.ASCII.GetBytes( mimeTypeAddress, coverArt.MimeType.Length, bufferAddress, coverArt.MimeType.Length); - BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(12 + coverArt.MimeType.Length), (uint) coverArt.Width); - BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(16 + coverArt.MimeType.Length), (uint) coverArt.Height); - BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(20 + coverArt.MimeType.Length), (uint) coverArt.ColorDepth); + BinaryPrimitives.WriteUInt32BigEndian(buffer[(12 + coverArt.MimeType.Length)..], (uint) coverArt.Width); + BinaryPrimitives.WriteUInt32BigEndian(buffer[(16 + coverArt.MimeType.Length)..], (uint) coverArt.Height); + BinaryPrimitives.WriteUInt32BigEndian(buffer[(20 + coverArt.MimeType.Length)..], (uint) coverArt.ColorDepth); - BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(28 + coverArt.MimeType.Length), (uint) coverArt.Data.Length); - coverArt.Data.CopyTo(buffer.Slice(32 + coverArt.MimeType.Length)); + BinaryPrimitives.WriteUInt32BigEndian(buffer[(28 + coverArt.MimeType.Length)..], (uint) coverArt.Data.Length); + coverArt.Data.CopyTo(buffer[(32 + coverArt.MimeType.Length)..]); #else BinaryPrimitives.WriteUInt32BigEndian(buffer[4..], (uint) coverArt.MimeType.Length); Encoding.ASCII.GetBytes(coverArt.MimeType, buffer[8..]); @@ -99,7 +90,7 @@ internal static ReadOnlySpan ToBase64(ICoverArt coverArt) // Since SkipLocalsInit is set, make sure the buffer is null-terminated buffer[bytesWritten++] = 0; - return buffer.Slice(0, bytesWritten); + return buffer[..bytesWritten]; } } } \ No newline at end of file diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioEncoder.cs index 68a62799..bbfa840a 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioEncoder.cs @@ -64,7 +64,7 @@ public SettingInfoDictionary SettingInfo } } - public string FileExtension { get; } = ".ogg"; + public string FileExtension => ".ogg"; public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings) { diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioInfoDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioInfoDecoder.cs index 5abec31b..2f2d8091 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioInfoDecoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioInfoDecoder.cs @@ -66,9 +66,9 @@ public unsafe AudioInfo ReadAudioInfo(Stream stream) var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead); #if NETSTANDARD2_0 - buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer); #else - buffer.Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer[..bytesRead].CopyTo(nativeBuffer); #endif sync.Wrote(bytesRead); } diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataDecoder.cs index 291d19b2..ab933717 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataDecoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataDecoder.cs @@ -65,9 +65,9 @@ public unsafe AudioMetadata ReadMetadata(Stream stream) var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead); #if NETSTANDARD2_0 - buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer); #else - buffer.Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer[..bytesRead].CopyTo(nativeBuffer); #endif sync.Wrote(bytesRead); } diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataEncoder.cs index 9649e822..0c27ef88 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataEncoder.cs @@ -67,9 +67,9 @@ public unsafe void WriteMetadata(Stream stream, AudioMetadata metadata, SettingD var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead); #if NETSTANDARD2_0 - buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer); #else - buffer.Slice(0, bytesRead).CopyTo(nativeBuffer); + buffer[..bytesRead].CopyTo(nativeBuffer); #endif sync.Wrote(bytesRead); } diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisCommentToMetadataAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisCommentToMetadataAdapter.cs index 614a51be..880ed059 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisCommentToMetadataAdapter.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisCommentToMetadataAdapter.cs @@ -37,22 +37,22 @@ internal unsafe VorbisCommentToMetadataAdapter(VorbisComment vorbisComment) var delimiter = commentBytes.IndexOf((byte) 0x3D); // '=' #if NETSTANDARD2_0 - var keyBytes = commentBytes.Slice(0, delimiter); + var keyBytes = commentBytes[..delimiter]; var key = Encoding.ASCII.GetString( (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes)), keyBytes.Length); if (key.Equals("METADATA_BLOCK_PICTURE", StringComparison.OrdinalIgnoreCase)) - CoverArt = CoverArtAdapter.FromBase64(commentBytes.Slice(delimiter + 1)); + CoverArt = CoverArtAdapter.FromBase64(commentBytes[(delimiter + 1)..]); else { - var valueBytes = commentBytes.Slice(delimiter + 1); + var valueBytes = commentBytes[(delimiter + 1)..]; SetText(key, Encoding.UTF8.GetString( (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(valueBytes)), valueBytes.Length)); } #else - var key = Encoding.ASCII.GetString(commentBytes.Slice(0, delimiter)); + var key = Encoding.ASCII.GetString(commentBytes[..delimiter]); if (key.Equals("METADATA_BLOCK_PICTURE", StringComparison.OrdinalIgnoreCase)) CoverArt = CoverArtAdapter.FromBase64(commentBytes[(delimiter + 1)..]); diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisLibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisLibHandler.cs index 386f355b..36713ee2 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisLibHandler.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisLibHandler.cs @@ -53,16 +53,19 @@ public bool Handle() var osVersion = GetOSVersion(); AddUnmanagedLibraryPath(Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!, - osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" : - osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" : - osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" : - "osx.11")); + osVersion.StartsWith("10.15", StringComparison.Ordinal) + ? "macos.10.15-x64" : + osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.11-arm64" + : "macos.11-x64" : + RuntimeInformation.ProcessArchitecture == Architecture.Arm64 + ? "macos.12-arm64" + : "macos.12-x64")); #else // LINUX var release = GetRelease(); if (release.StartsWith("Ubuntu", StringComparison.OrdinalIgnoreCase)) AddUnmanagedLibraryPath(Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!, - release.StartsWith("Ubuntu 16.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.16.04-x64" : release.StartsWith("Ubuntu 18.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.18.04-x64" : "ubuntu.20.04-x64")); #endif diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libogg.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libogg.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libogg.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libvorbis.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libvorbis.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libvorbis.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libvorbisenc.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libvorbisenc.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libvorbisenc.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libogg.dylib new file mode 100644 index 00000000..0fa164f4 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libogg.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbis.dylib new file mode 100644 index 00000000..148fdf59 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbis.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbisenc.dylib new file mode 100644 index 00000000..661ddc3a Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbisenc.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libogg.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libogg.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libogg.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libvorbis.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libvorbis.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libvorbis.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libvorbisenc.dylib similarity index 100% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libvorbisenc.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libvorbisenc.dylib diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libogg.dylib new file mode 100644 index 00000000..33e0f0fc Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libogg.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbis.dylib new file mode 100644 index 00000000..d9f43a4a Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbis.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbisenc.dylib similarity index 56% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbisenc.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbisenc.dylib index 240c9427..28a2511b 100644 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbisenc.dylib and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbisenc.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libogg.dylib new file mode 100644 index 00000000..c9009e42 Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libogg.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbis.dylib new file mode 100644 index 00000000..2eee8e7b Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbis.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbisenc.dylib similarity index 70% rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbisenc.dylib rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbisenc.dylib index 80d1a608..736eab66 100644 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbisenc.dylib and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbisenc.dylib differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libogg.dylib deleted file mode 100644 index a6af48df..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libogg.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbis.dylib deleted file mode 100644 index 2bda89ce..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbis.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libogg.dylib deleted file mode 100644 index 81136f36..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libogg.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbis.dylib deleted file mode 100644 index 5827336a..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbis.dylib and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbis.so b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbis.so deleted file mode 100644 index dd0f29db..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbis.so and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbisenc.so b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbisenc.so deleted file mode 100644 index 45f4cfbb..00000000 Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbisenc.so and /dev/null differ diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/AudioWorks.Extensions.Wave.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/AudioWorks.Extensions.Wave.csproj index 834b6517..6c429ae1 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/AudioWorks.Extensions.Wave.csproj +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/AudioWorks.Extensions.Wave.csproj @@ -2,7 +2,7 @@ - 1.8.0 + 1.9.0 $(VersionPrefix).$(Revision) The Waveform Audio File Format (WAVE) extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite. https://github.com/jherby2k/AudioWorks/wiki/Wave-Extension#release-notes @@ -12,7 +12,12 @@ - + + + + + + diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioDecoder.cs index 348372cc..f54371e3 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioDecoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioDecoder.cs @@ -150,7 +150,7 @@ public SampleBuffer DecodeSamples() throw new AudioInvalidException("Stream is unexpectedly truncated."); if (_format == DataFormat.Lpcm) - result = new(buffer.AsSpan().Slice(0, length), _audioInfo.Channels, _bitsPerSample); + result = new(buffer.AsSpan()[..length], _audioInfo.Channels, _bitsPerSample); else { var lpcmBuffer = ArrayPool.Shared.Rent(length); @@ -164,7 +164,7 @@ public SampleBuffer DecodeSamples() lpcmBuffer[sampleIndex] = _µLawDecodeValues[buffer[sampleIndex]]; // TODO SampleBuffer should probably accept 16-bit buffers directly - result = new(MemoryMarshal.Cast(lpcmBuffer.AsSpan().Slice(0, length)), + result = new(MemoryMarshal.Cast(lpcmBuffer.AsSpan()[..length]), _audioInfo.Channels, 16); } finally diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioEncoder.cs index d3931ac8..9bb28a8d 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioEncoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioEncoder.cs @@ -36,7 +36,7 @@ sealed class WaveAudioEncoder : IAudioEncoder, IDisposable public SettingInfoDictionary SettingInfo { get; } = new(); - public string FileExtension { get; } = ".wav"; + public string FileExtension => ".wav"; public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings) { diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioInfoDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioInfoDecoder.cs index 97735760..13821f54 100644 --- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioInfoDecoder.cs +++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioInfoDecoder.cs @@ -96,29 +96,13 @@ public AudioInfo ReadAudioInfo(Stream stream) static AudioInfo ParseLpcm(ReadOnlySpan fmtData, uint dataSize) => AudioInfo.CreateForLossless( "LPCM", -#if NETSTANDARD2_0 - BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(2)), - BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(14)), - (int) BinaryPrimitives.ReadUInt32LittleEndian(fmtData.Slice(4)), - dataSize / BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(12))); -#else BinaryPrimitives.ReadUInt16LittleEndian(fmtData[2..]), BinaryPrimitives.ReadUInt16LittleEndian(fmtData[14..]), (int) BinaryPrimitives.ReadUInt32LittleEndian(fmtData[4..]), dataSize / BinaryPrimitives.ReadUInt16LittleEndian(fmtData[12..])); -#endif static AudioInfo ParseG711(string format, ReadOnlySpan fmtData, uint dataSize) { -#if NETSTANDARD2_0 - var sampleRate = (int) BinaryPrimitives.ReadUInt32LittleEndian(fmtData.Slice(4)); - var blockSize = BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(12)); - return AudioInfo.CreateForLossy(format, - BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(2)), - sampleRate, - dataSize / blockSize, - blockSize * 8 * sampleRate); -#else var sampleRate = (int) BinaryPrimitives.ReadUInt32LittleEndian(fmtData[4..]); var blockSize = BinaryPrimitives.ReadUInt16LittleEndian(fmtData[12..]); return AudioInfo.CreateForLossy(format, @@ -126,7 +110,6 @@ static AudioInfo ParseG711(string format, ReadOnlySpan fmtData, uint dataS sampleRate, dataSize / blockSize, blockSize * 8 * sampleRate); -#endif } } } diff --git a/AudioWorks/src/Extensions/PublishLocally.ps1 b/AudioWorks/src/Extensions/PublishLocally.ps1 index e0e1a405..c2bbd1f6 100644 --- a/AudioWorks/src/Extensions/PublishLocally.ps1 +++ b/AudioWorks/src/Extensions/PublishLocally.ps1 @@ -47,118 +47,216 @@ foreach ($package in Get-ChildItem -Path $(Join-Path -Path $PSScriptRoot -ChildP else { nuget add $package -Source $localFeedDir -Expand -NonInteractive } } # SIG # Begin signature block -# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor -# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAeddb5qQfOD85I -# 9jP4ktczcEOiskLJESD1h/OisJbRwKCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok -# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE -# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO -# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS -# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK -# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI -# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k -# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3 -# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1 -# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd -# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/ -# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG -# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0 -# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj -# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5 -# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm -# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN -# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ -# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ -# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1 -# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo -# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l -# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT -# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy -# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l -# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb -# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC -# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ -# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO -# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h -# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt -# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd -# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T -# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j -# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud -# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy -# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0 -# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y -# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA -# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG -# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o -# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu -# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa -# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P -# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n -# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz -# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD -# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g -# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp -# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs -# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy -# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu -# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ -# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD -# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU -# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k -# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH -# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps -# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd -# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud -# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv -# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov -# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl -# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI -# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w -# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL -# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB -# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD -# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5 -# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk -# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU -# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1 -# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV -# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw -# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll -# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F -# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh -# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM -# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCB0YuUPd098uvrOqERByvWNl9QS -# GW2/Hm/qapPlD3wfHDANBgkqhkiG9w0BAQEFAASCAQCeB2s76UIvxYqPyidY7r0n -# 83fFK821AEMGq8bNFI9g5eqPXYCx3kHw7MTxSzB1BgJDcb/UzwbjVZNUVlqqTPtG -# B04VYofOtkBW5OGzi8srf8Kg8vtGYFqLRccqoPlCJDsVZ0Lo1F8RsI/vI/CVrP2z -# RiWUENI/kUSqyftPqViohAb3Qn1YdrlbJw3QvMcDge1TUNjGbug1MLkETXX83n0A -# D00y7KOKJFjHE/Q7suBxUtEQVRFeAVZGDihOTQMAn3efYM/0+DW25Jn2dkeXUnCV -# ycTlGAw38gs7J/JeiAJPVPEw8jNya+EzioT+E0Sw2MI9PQgvaxZdjVnO6g0A3kLQ -# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM -# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC -# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF -# MQ8XDTIwMTExNjIzNDMxM1owLwYJKoZIhvcNAQkEMSIEIBjoFU5wEoWOkjvMGSaI -# W3ntUTGnityB05XP2+Rr3/UXMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi -# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB -# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE -# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV -# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy -# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI -# hvcNAQEBBQAEggEAKUNoGHZQyXhkF4OdWfx+/FygzzUR1a0YS0+cPcHIbNm9lVBv -# nCpRBXJ6UDMO9YdJKZE4i1nCaOuRFteoDhds59iIh+2veTJROfrOGThT6oyPqODm -# XiQy/NmuuGVzNqSdtT0G55pmsL4pNEE2cz3Z3ioYAbcDru1VAg4cHpv9zrviWiYB -# sLPPej4w6Ui5ElcuiN+gyYc6oC62xH1RktbWVkKLTmCURJTW51YtFCag5saB5+Zz -# T8+SWYjdHK1DNLZi/t7SnQsVR3OA3nUrjS3WwR89KkdoGh2/G66bCbHBzkEtf27X -# FT/pD2XqzcqiXqyGmiZJaqT/KliqEiyOpMTF/A== +# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU1Q8zD0OrOdH6tkuPF44gFBD0 +# FnaggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B +# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2 +# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV +# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm +# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv +# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM +# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT +# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4 +# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+ +# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK +# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj +# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz +# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5 +# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO +# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp +# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe +# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E +# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW +# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw +# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF +# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv +# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh +# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3 +# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC +# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA +# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz +# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7 +# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3 +# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q +# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF +# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx +# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV +# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291 +# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK +# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn +# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel +# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH +# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18 +# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh +# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN +# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k +# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA +# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H +# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC +# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj +# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE +# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv +# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh +# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O +# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG +# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w +# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG +# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ +# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs +# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05 +# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN +# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io +# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ +# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L +# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i +# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK +# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa +# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC +# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx +# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x +# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw +# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB +# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh +# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E +# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO +# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g +# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk +# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe +# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ +# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm +# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY +# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R +# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa +# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80 +# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E +# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+ +# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww +# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u +# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0 +# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y +# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL +# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv +# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8 +# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8 +# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc +# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad +# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF +# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd +# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM +# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B +# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG +# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76 +# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv +# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3 +# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s +# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y +# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw +# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE +# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k +# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta +# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b +# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh +# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q +# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E +# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU +# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV +# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS +# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie +# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb +# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw +# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w +# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG +# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j +# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF +# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo +# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw +# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT +# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ +# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7 +# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58 +# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk +# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM +# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF +# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e +# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk +# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4 +# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5 +# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8 +# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB +# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5 +# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY +# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0 +# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp +# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs +# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy +# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN +# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK +# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo +# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA +# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr +# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp +# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr +# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM +# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD +# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD +# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu +# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB +# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw +# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G +# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G +# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh +# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru +# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M +# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR +# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK +# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp +# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC +# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW +# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe +# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9 +# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC +# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE +# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy +# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3 +# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG +# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBTzoIz0N++H +# xvJNsjNvWE2XwmQruTANBgkqhkiG9w0BAQEFAASCAYBDfxmxDvf0/7e50xal/H/V +# kb/2yHnho2uXvb4QS8cO06s5uy9HrC/adwPSmV6EU5y8IR8Ms19KrfJ4OR0/dmoC +# /eNLgFLZNIpMriSD/ym9NVbuzV6D5IGV96axZFHvQzVBjvZCV0qbtdUZIfjweD7x +# MXO7eFI4k19bZPT61cTP8v9G+xVK4vTk6pwNE8xC/i8dwmLR9NxsGqK2sP5xCR5m +# KCEaUFgh3djhMpjDiGaHVdjtE18cSHTDPPQaB5nPhdfLpszwQijSx/bwFqK9tFvl +# n7xooIwvLgFfd8yfMQdLvAab6QeuIH65htQOp1wtYeGMhyuPQY/U0xoELD6C1fXy +# QMo1G0Mm2UGhpqJJNtZ8ttNvpmUd7CAuIEeTDIuscFA8thh7L7c11lKcubw/BkCk +# sX7ZBETjs9Yl9SsUu08InWDB3oCF/gz1y1ip1Yxty0DR1jr1wk18zbDeqisTp4g3 +# U9AMSyG47TlbLvU9zRRajpeKtpmB30xf5zMYUmfTDi+hggQEMIIEAAYJKoZIhvcN +# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv +# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n +# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa +# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw +# NzE1MjU0NFowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO +# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMICR2iXOhlD7cqMNkDSy +# r4OVRgktN+DXAaYzrW8BQ6RRKnCzz7uey5qzg6bjukAaEDCBoAYLKoZIhvcNAQkQ +# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ +# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi +# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y +# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIAg/Mj0CpWOH2OjzD1tRTMpuiw8bj5HJS9 +# XqQ2ky5TblUztgO+iAlJmJZCwPp6HVJT4haodAZ1YRuj+TaHHQtwAInv2/83SRoX +# HqEgZrTlYogMpRzFBONW/+STMAYydjOBzXWpS85vQT33n/9BXjOfAoW8eLNm5HRN +# FoJmS3sI+nlA6cOcBuZyL4q7BoDVR9ZxWMQnU2msEAuhZOkFndUa1u3z8Ex8iJMP +# g80otx1nfP8wKtUNUiZCTjOS7JThPJZbYSRxNFdHMvrNz7N4XiRpsvPFXo0xXXuc +# 54tCYSwQS54uHzfq7ZMKsVbLk+i2XY7NLaPVGuu8TrpKyPJ2PZNF8cOdhhrsRnYO +# swsBDr6ibQZPo0UbWbxh+Ie5YHxg3ZbOLQaWWFxZ6yajWpmcds34EB6BWzUuLPJX +# I/+PRgcN7p5IRiEGjFi2p3K+Ry+QNENOXlJetxje8DPhZA8sYeKQma4AKa4L+BFz +# Zh7cqg0dDzH0jU6nDayAgBVbKDGSw/aqYnU0JUkw2luw1mqUaRFxHKnJGjj6W6cr +# U48l9YWw6KOp9mKjewvmU4ioF1W4vy82NY+NNSUms+VXSF7SVVm2hiEhv9pTHrqx +# bf3YHRXq4iShWItWu8mHXN4V0t5RVY472ugzQp8bLBjE+C1Jnjyq4m4xju6ZNSSS +# A166X+ObKm8= # SIG # End signature block diff --git a/AudioWorks/src/Extensions/UseLocalRepository.ps1 b/AudioWorks/src/Extensions/UseLocalRepository.ps1 index 5cb21559..4535c744 100644 --- a/AudioWorks/src/Extensions/UseLocalRepository.ps1 +++ b/AudioWorks/src/Extensions/UseLocalRepository.ps1 @@ -20,118 +20,216 @@ $content = Get-Content $settingsFile | ConvertFrom-Json $content.ExtensionRepository = $localFeedDir $content | ConvertTo-Json | Set-Content -Path $settingsFile # SIG # Begin signature block -# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor -# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCuihgWnDMxc5LY -# smMwHbWY+A6Inc+kV9ZrULJZpD0hvKCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok -# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE -# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO -# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS -# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK -# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI -# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k -# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3 -# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1 -# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd -# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/ -# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG -# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0 -# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj -# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5 -# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm -# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN -# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ -# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ -# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1 -# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo -# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l -# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT -# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy -# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l -# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb -# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC -# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ -# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO -# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h -# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt -# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd -# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T -# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j -# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud -# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy -# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0 -# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y -# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA -# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG -# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o -# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu -# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa -# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P -# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n -# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz -# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD -# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g -# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp -# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs -# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy -# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu -# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ -# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD -# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU -# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k -# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH -# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps -# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd -# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud -# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv -# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov -# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl -# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI -# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w -# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL -# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB -# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD -# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5 -# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk -# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU -# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1 -# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV -# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw -# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll -# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F -# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh -# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM -# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCB37a/gCuqZfV+Fa1uudNhIxsv4 -# DReIHFjtBtK/G0/qQjANBgkqhkiG9w0BAQEFAASCAQBeXbJ4Deg7FwTTmqdw7nOc -# IM3hABZHh2Y3JuEyFNDHX0gcjbyNhpYd3/2Rtk9kYmJ/2eaWy02fQZ+GeacC2tDi -# fB/VzH+09I2R4ZlHTBLk5ybQtF/Nr6/g/8zQo+8+m0r42j1ZakICIPu7nVcO/30U -# FXe4lphX4uUHPVUwmPozHRWqeahqKVYc42GjLcbw2JhMHC+i/LDh5tC9YLZ1TaYa -# nDvdpv9zfvQlANfmS+oGiWGV41A9Jdhxtz75X8Ec28g+OztTgwRF/KU1ppRMJGHa -# 7B3hIeUO88+newhXWdlPGz+DF0Fx1yc8+a0E4SYaNSloR63hqc7wNXVh5FvF3s6p -# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM -# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC -# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF -# MQ8XDTIwMTExNjIzNDI0MFowLwYJKoZIhvcNAQkEMSIEIL//S4e/IStv4VJ6AJZi -# 6MAHqAi468/SiUgMbztbBz80MDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi -# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB -# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE -# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV -# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy -# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI -# hvcNAQEBBQAEggEAk4rEu5TxLwDoFbIqAK4ZbSj8BEnnkbBj/EAqJxVedd3TG8lz -# 0KREeXMvyx74RfxnYzMZMJdcYYzKiAfG3aaN7BqwKnPL7KGuASThrCLrEkIF0/vu -# osrZsii3Fnoqu5C465RNHR/QLkHfQvhtUaodLeUohzdSaoQZr+QzqVn0GbsbYHxy -# 5G9d7ha778EBzQcXXg0kTZUkwmTlX9iWToMB1MB865ZJSb3fbAhNK2NbluCERIuh -# sz0uyS0lGCmLp+LInZWP5uWnTKbQ2VInd3L/bclYZsVul8FkaGgMf5ZTe7t5GO0A -# VdJYreM4v1L3ZHjS284EEuUKge7hF9VyPof03g== +# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU+69a8PcNwbELqcLr9paODc6l +# GgiggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B +# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2 +# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV +# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm +# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv +# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM +# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT +# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4 +# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+ +# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK +# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj +# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz +# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5 +# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO +# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp +# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe +# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E +# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW +# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw +# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF +# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv +# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh +# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3 +# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC +# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA +# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz +# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7 +# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3 +# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q +# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF +# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx +# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV +# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291 +# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK +# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn +# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel +# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH +# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18 +# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh +# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN +# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k +# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA +# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H +# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC +# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj +# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE +# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv +# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh +# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O +# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG +# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w +# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG +# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ +# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs +# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05 +# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN +# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io +# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ +# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L +# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i +# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK +# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa +# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC +# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx +# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x +# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw +# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB +# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh +# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E +# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO +# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g +# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk +# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe +# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ +# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm +# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY +# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R +# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa +# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80 +# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E +# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+ +# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww +# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u +# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0 +# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y +# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL +# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv +# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8 +# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8 +# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc +# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad +# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF +# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd +# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM +# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B +# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG +# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76 +# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv +# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3 +# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s +# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y +# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw +# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE +# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k +# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta +# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b +# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh +# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q +# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E +# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU +# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV +# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS +# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie +# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb +# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw +# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w +# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG +# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j +# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF +# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo +# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw +# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT +# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ +# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7 +# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58 +# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk +# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM +# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF +# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e +# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk +# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4 +# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5 +# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8 +# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB +# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5 +# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY +# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0 +# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp +# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs +# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy +# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN +# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK +# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo +# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA +# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr +# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp +# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr +# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM +# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD +# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD +# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu +# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB +# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw +# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G +# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G +# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh +# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru +# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M +# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR +# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK +# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp +# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC +# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW +# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe +# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9 +# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC +# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE +# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy +# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3 +# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG +# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBTR8USZZAi8 +# U+FmXL2kzIBYT1oKbjANBgkqhkiG9w0BAQEFAASCAYAHviBi9HHWF8fT1Sh1iJfh +# 9qTRnj7FRrvHj2A7MXJ9y6p8tRmiJn5lc378vWNY1AVXzCBaUv5/oEaeYFBQl6ly +# zBUr+eiClO3JkxWH2qefApdDZMmp7l96u19abBXu1qkul+YdlYyLO7jwiWKMncFH +# 6d1IzGPn4p9V9zgAjY6WoKBmOJeteFttq+uXNS8jtar2wbmv1kkKK63VdaRe6x+Q +# KcRKXl4YzfL5eR1v09Zyk229IeePfsR22niiHDdQf3B+nQ+CZ6RemMQxfCIp4L0+ +# PuePZ1pGL1tBtd1Ef9fZWrOiqXUJHnPntToP0sbQbdYTWZHxmSYncgj+bIOboFOq +# zDFJDjRxHjUJVtxBKqbmB4T2DkEK4ozMYw3iCEj6GzG02metCxxmh501pUsTFW3d +# GkutAgj0v5v3na5WjK4gwU+Bx+wUi2gz/9D2veBOMjJLqLO2LRo6fN4aIVPHl+4S +# KOH/Jzk9289FqdTCOXZKxMOwHsc+xkX8G+ZpoGLE/ZqhggQEMIIEAAYJKoZIhvcN +# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv +# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n +# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa +# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw +# NzE1MjUwOFowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO +# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMOFYSIJlBOtOgPoziRfd +# CAftLkoPmC56dPjz9bEqfIOR1+FF/fGhnJrG/aHAjbLhTDCBoAYLKoZIhvcNAQkQ +# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ +# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi +# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y +# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIANglhz95oEjqrpzY5KI431zTP2OSG/P7p +# G92V2fSL1kbnBZ5RluxWaLyctQOtEHe/KFDVmBgFkAn+5/sDHb26zdapCPIOclYf +# Xdkq4bFHzsv5ppQ9K58aSkAbGWTqbGgWn9vSmUkLXjd3q41ChmBjRx4g4zuPbeui +# kJrhEwhgTJAwRp0lDL9V7L0TrihI9ospxdl0BjHmqXbVg3uyP9j+PXA43urQ9WJq +# goXg6wEPWa+2dbviWoObtTG2ULXR9R2Etuh5WAtDQxj4DXvrG0yPK/dbeXt1Dd9x +# 60k6J4vcDkEceRkWYBqnaSInP7SguguokZOkUgJBMcXLXRrZ/BhjfEUFwTHSKNHi +# w+mYnyHBflDhbzT44RrFWu5ENwOInB61anRSYymWSj5LZpWgWCxRn46R3vlG9E2P +# 7f2aHa+cnmqT+Lvo6fu3W9lvoBiGNAHj1lVvqZIHXEYjYOhwZc/X2JjmOTbFE4OP +# /Kj4DOhkuEMvJhjU9WlyboywGBKVSFTQFwDn4yb8LiXAZKuq/mf5nK/FGbG5z/85 +# VkmihFt7htLZTwduqJw7WAQgZeq0NvyLwlO080UaX+pCYr7cJSs/dQxd1saq9A8l +# c2Z0jAtHeumVNssplAz4gR5H9wQ1difkOfwPQ8i04neHnP2JZta7iQU+OkzAT9aW +# bLm9CBUPIpc= # SIG # End signature block diff --git a/AudioWorks/src/Extensions/UseRemoteRepository.ps1 b/AudioWorks/src/Extensions/UseRemoteRepository.ps1 index ee754ba5..95cdc1d9 100644 --- a/AudioWorks/src/Extensions/UseRemoteRepository.ps1 +++ b/AudioWorks/src/Extensions/UseRemoteRepository.ps1 @@ -20,118 +20,216 @@ $content = Get-Content $settingsFile | ConvertFrom-Json $content.ExtensionRepository = $remoteFeed $content | ConvertTo-Json | Set-Content -Path $settingsFile # SIG # Begin signature block -# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor -# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAy2/RPz9gC4GE/ -# apRPFwGZMdA+2xdTgvVxx8F5VsQr96CCDwowggTcMIIDxKADAgECAhEA/mfk8Vok -# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE -# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO -# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS -# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK -# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI -# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k -# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3 -# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1 -# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd -# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/ -# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG -# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0 -# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj -# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5 -# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm -# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN -# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ -# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ -# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1 -# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo -# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l -# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT -# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy -# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l -# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb -# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC -# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ -# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO -# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h -# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt -# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd -# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T -# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j -# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud -# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy -# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0 -# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y -# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA -# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG -# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o -# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu -# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa -# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P -# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n -# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz -# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD -# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g -# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp -# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs -# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy -# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu -# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ -# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD -# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU -# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k -# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH -# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps -# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd -# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud -# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv -# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov -# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl -# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI -# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w -# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL -# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB -# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD -# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5 -# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk -# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU -# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1 -# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV -# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw -# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll -# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F -# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh -# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM -# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCC5FbRF61abZCuyHYerKH7l4xOH -# KCfYqqvysqAZYVfIwjANBgkqhkiG9w0BAQEFAASCAQAUOYMGbwo/b3nD7P1TI6Uj -# rYfF8/FlqCcwad2z11wHISLf0F69oRnmsHGFFDkGOjR5EcnDP5kr9n50NwbG11O6 -# XHZHjcDRLAKvPa0yQmflhLNaC841Vhle9Yv5TzmN0uyg4LZfQXCcafG+mgRL9Ago -# kUnR2LI/yY1YGrXw3FQgwVseZwK44OOs6qBGe8qFMTiFjeNDL7czAoD8dKL/q9vv -# ZeBD4elqHmlVN0pZZjZOqNoxgXCLM5iudHoUaxCORtvJx/aB++LYFalnHcynnkk6 -# 3Sw159bCGALfVbg4o3HdtE4rUBkFDglbiDiqJd6OfMykmuj6lXJ7HSzxeDlhTsQ0 -# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM -# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC -# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF -# MQ8XDTIwMTExNjIzNDIyMFowLwYJKoZIhvcNAQkEMSIEIIUjvd9vUgkC6aF9XORu -# Bp6lHubuS/WuT9FDIDIsyPIvMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi -# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB -# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE -# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV -# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy -# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI -# hvcNAQEBBQAEggEAVwyZPLVdLZzmbf2dONScf7tP3Mrq7b6pFA+1SCj845bHc6L4 -# sqJl3TnXVtHgnJRIInK6YwuarvsDwc16vva2muARoPfGsY+SNeJgOPiJFf8rbC0J -# LdjM5j9qXgGX4Ehogryr1wYCfbdx/chYf3ejErpFlZnDG1rvq2p45pwdjv4bv4a/ -# GAqFXe2GWx+qa7bckQ0RDXPUsRxA8vDf9pRMbgZ7JSaxzDxrtsnsoML1LRL/RIiv -# xf17wzyUTgTQ+1tB/IX0HlUsWVT9y4ac0Dw/r+N3gb9hbU7EKTbwHdb41P2FZ+/f -# tGMdlLdaGG42sC7Mgz4EgBDx2NBHuJ233CD/jw== +# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU4saIUsp1sS4qlFzKDqv0Q/a+ +# 6v2ggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B +# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2 +# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV +# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm +# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv +# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM +# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT +# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4 +# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+ +# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK +# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj +# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz +# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5 +# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO +# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp +# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe +# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E +# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW +# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw +# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF +# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv +# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh +# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3 +# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC +# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA +# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz +# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7 +# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3 +# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q +# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF +# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx +# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV +# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291 +# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK +# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn +# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel +# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH +# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18 +# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh +# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN +# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k +# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA +# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H +# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC +# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj +# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE +# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv +# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh +# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O +# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG +# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w +# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG +# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ +# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs +# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05 +# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN +# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io +# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ +# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L +# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i +# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK +# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa +# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC +# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx +# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x +# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw +# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB +# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh +# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E +# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO +# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g +# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk +# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe +# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ +# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm +# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY +# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R +# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa +# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80 +# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E +# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+ +# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww +# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u +# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0 +# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y +# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL +# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv +# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8 +# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8 +# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc +# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad +# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF +# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd +# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM +# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B +# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG +# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76 +# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv +# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3 +# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s +# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y +# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw +# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE +# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k +# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta +# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b +# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh +# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q +# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E +# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU +# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV +# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS +# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie +# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb +# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw +# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w +# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG +# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j +# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF +# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo +# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw +# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT +# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ +# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7 +# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58 +# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk +# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM +# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF +# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e +# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk +# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4 +# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5 +# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8 +# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB +# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5 +# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY +# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0 +# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp +# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs +# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy +# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN +# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK +# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo +# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA +# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr +# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp +# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr +# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM +# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD +# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD +# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu +# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB +# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw +# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G +# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G +# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh +# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru +# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M +# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR +# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK +# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp +# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC +# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW +# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe +# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9 +# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC +# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE +# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy +# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3 +# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG +# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBSTqhBkLb+W +# mi8vpSEPOROXTNXP+zANBgkqhkiG9w0BAQEFAASCAYBbFMa6iyJsxg32qxMCwSva +# at1Jpn1Cbnlq6s4CMu6Mhh9/tCbG5LqpLR61IDOKugW6ft8HIC1dq7psoWUaX7nE +# mcGoOPVF+9CqFOsGKFE2G2blhgmrx9tu+Hm5zS6NsHT03F8MZAUVHBJwmCfRN0Cy +# k22pfv1L6QSMS5SxUURJWaZIaKzXBI39y23P7ovck/Zs3+bp7SsJz5YN5DOtKYbf +# uXr9crujmeHjUypGDeH24VD5aV0WQ8Rjx90TxsiwOexhTvU5uo8RKtplEpLuIdIJ +# 2GSg/2HMqvK4+VzojxPkqGfR1Ed6IoWijakFYUYe9AgrDEtUpCIHlOJeXcE5licT +# Hv5WnLX979QaBCl4QUv0rQBzNkNbSmMxuSwxyszKzrIlx7iFlu14bSObe4i7z5HS +# ZHixMtAcsJRD4suKlz6+rjhJf/mB1eGYkEg/chjScFQ7P92UTN6aar2IyVFmnx7I +# 7hZLGDdo8tQyZnPnODy9TrC1aNXn6G7XTGOk4t8nipGhggQEMIIEAAYJKoZIhvcN +# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv +# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n +# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa +# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw +# NzE1MjUyOFowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO +# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMHHRQR6qaMBouNgn8Y9g +# k5PPV0HYu5hrMQefVhj/oQjLd0PgQuFSneLrFRnOdMIXjTCBoAYLKoZIhvcNAQkQ +# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ +# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi +# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y +# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIALD9PcsPITWgf6CZz8Pn1/nB3xPTquc66 +# dK65PVg94HAV6s/Et/PiuqGz5gtZUuB9ya6mESaec/OEAGrwASUYHxUSpe5L/HbH +# DfVNcPGYBMBATVEJ1nCxwfhbuxcGfMKWzXb8epxCYcl+TtMPWZffjrCoLknI8m/P +# Vfj09LnEbempUxhUPSLl74jpO2xpriIcJ111CUuknNshiBjg/cx173ySBpT7d/cE +# 1bSbfjgCLhE/4Am3qv5UOqj2B1Ogi8ZB3FBJx1WXxmCDwjvJ307OMcbA1zorGBBV +# FkJpR9FMVBk2LUL8Z9LfFY2WZxlxCULfuaSNvDawJRNo9UDz8r5dMoIk8Fs7jhH5 +# GxN7kiEzi12FyEuEBQE2PEgO8QVylTlsg4Yq4/PVJrpjiRnG+chnqNlyQRgaXXyy +# pswaxqE3MvOO0yH5Xw1TkQpcrgmL3t8brgtXJrENxkA4Kve5X90hN+NTADFL9Bpz +# 1IpL+/avozfXMCoOCl50m6ic8Ftgico9tZVpxYR/m4sOwXvH78ToRJc4ki8WFW5u +# GJk+MT1urrMUEj+Mut2eROEom9rL2s/0hqBqZO2g1SESNxlR8264H/CIe6vZ+00O +# DSvV7SKzf68V9ZYLG3o9fUAYCYfQ8aQKQw55FpiUr9hi2AiNvq6We101Nmgnpzas +# g5wqCg2BKjE= # SIG # End signature block diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj b/AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj index 047986d6..fc77526a 100644 --- a/AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj +++ b/AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj @@ -1,29 +1,29 @@  - net5.0;netcoreapp3.1;netcoreapp2.1;net462 - net5.0;netcoreapp3.1;netcoreapp2.1 + net6.0;netcoreapp3.1;net462 + net6.0;netcoreapp3.1 false true - - - + + + - - + + - + diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeGroupDataSource.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeGroupDataSource.cs index fe906f76..b6206661 100644 --- a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeGroupDataSource.cs +++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeGroupDataSource.cs @@ -35,39 +35,11 @@ public static class AnalyzeGroupDataSource new TestSettingDictionary(), new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) + new[] { new TestAudioMetadata { -#if NETCOREAPP2_1 - TrackPeak = "0.820313", -#else - TrackPeak = "0.820312", -#endif - AlbumPeak = "1.000000", - TrackGain = "-1.36", - AlbumGain = "-6.11" - }, - new TestAudioMetadata - { - TrackPeak = "1.000000", - AlbumPeak = "1.000000", - TrackGain = "-6.49", - AlbumGain = "-6.11" - }, - new TestAudioMetadata - { - TrackPeak = "1.000000", - AlbumPeak = "1.000000", - TrackGain = "-7.22", - AlbumGain = "-6.11" - } - }, - new[] // libebur128 1.2.4 - { - new TestAudioMetadata - { -#if NET462 || NETCOREAPP2_1 +#if NET462 TrackPeak = "0.820313", #else TrackPeak = "0.820312", @@ -110,31 +82,7 @@ public static class AnalyzeGroupDataSource }, new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.820708", - AlbumPeak = "1.001060", - TrackGain = "-1.36", - AlbumGain = "-6.11" - }, - new TestAudioMetadata - { - TrackPeak = "1.001060", - AlbumPeak = "1.001060", - TrackGain = "-6.49", - AlbumGain = "-6.11" - }, - new TestAudioMetadata - { - TrackPeak = "1.001014", - AlbumPeak = "1.001060", - TrackGain = "-7.22", - AlbumGain = "-6.11" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { @@ -174,31 +122,7 @@ public static class AnalyzeGroupDataSource new TestSettingDictionary(), new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.590515", - AlbumPeak = "0.965790", - TrackGain = "4.24", - AlbumGain = "-2.11" - }, - new TestAudioMetadata - { - TrackPeak = "0.914001", - AlbumPeak = "0.965790", - TrackGain = "-2.03", - AlbumGain = "-2.11" - }, - new TestAudioMetadata - { - TrackPeak = "0.965790", - AlbumPeak = "0.965790", - TrackGain = "-3.84", - AlbumGain = "-2.11" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { @@ -241,31 +165,7 @@ public static class AnalyzeGroupDataSource }, new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.590625", - AlbumPeak = "0.965800", - TrackGain = "4.24", - AlbumGain = "-2.11" - }, - new TestAudioMetadata - { - TrackPeak = "0.914001", - AlbumPeak = "0.965800", - TrackGain = "-2.03", - AlbumGain = "-2.11" - }, - new TestAudioMetadata - { - TrackPeak = "0.965800", - AlbumPeak = "0.965800", - TrackGain = "-3.84", - AlbumGain = "-2.11" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { @@ -305,31 +205,7 @@ public static class AnalyzeGroupDataSource new TestSettingDictionary(), new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.813904", - AlbumPeak = "0.999664", - TrackGain = "-1.15", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.997620", - AlbumPeak = "0.999664", - TrackGain = "-6.28", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.999664", - AlbumPeak = "0.999664", - TrackGain = "-7.03", - AlbumGain = "-5.91" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { @@ -372,31 +248,7 @@ public static class AnalyzeGroupDataSource }, new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.814064", - AlbumPeak = "0.999686", - TrackGain = "-1.15", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.997620", - AlbumPeak = "0.999686", - TrackGain = "-6.28", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.999686", - AlbumPeak = "0.999686", - TrackGain = "-7.03", - AlbumGain = "-5.91" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { @@ -436,31 +288,7 @@ public static class AnalyzeGroupDataSource new TestSettingDictionary(), new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.814056", - AlbumPeak = "0.999634", - TrackGain = "-1.15", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.997467", - AlbumPeak = "0.999634", - TrackGain = "-6.28", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.999634", - AlbumPeak = "0.999634", - TrackGain = "-7.02", - AlbumGain = "-5.91" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { @@ -503,31 +331,7 @@ public static class AnalyzeGroupDataSource }, new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.814071", - AlbumPeak = "0.999712", - TrackGain = "-1.15", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.997490", - AlbumPeak = "0.999712", - TrackGain = "-6.28", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.999712", - AlbumPeak = "0.999712", - TrackGain = "-7.02", - AlbumGain = "-5.91" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { @@ -567,31 +371,7 @@ public static class AnalyzeGroupDataSource new TestSettingDictionary(), new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.814049", - AlbumPeak = "0.999651", - TrackGain = "-1.13", - AlbumGain = "-5.89" - }, - new TestAudioMetadata - { - TrackPeak = "0.997602", - AlbumPeak = "0.999651", - TrackGain = "-6.26", - AlbumGain = "-5.89" - }, - new TestAudioMetadata - { - TrackPeak = "0.999651", - AlbumPeak = "0.999651", - TrackGain = "-7.00", - AlbumGain = "-5.89" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { @@ -634,31 +414,7 @@ public static class AnalyzeGroupDataSource }, new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.814095", - AlbumPeak = "0.999651", - TrackGain = "-1.13", - AlbumGain = "-5.89" - }, - new TestAudioMetadata - { - TrackPeak = "0.997607", - AlbumPeak = "0.999651", - TrackGain = "-6.26", - AlbumGain = "-5.89" - }, - new TestAudioMetadata - { - TrackPeak = "0.999651", - AlbumPeak = "0.999651", - TrackGain = "-7.00", - AlbumGain = "-5.89" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { @@ -701,31 +457,7 @@ public static class AnalyzeGroupDataSource }, new[] { - new[] // libebur128 1.1.0 (Ubuntu 16.04) - { - new TestAudioMetadata - { - TrackPeak = "0.813904", - AlbumPeak = "0.999664", - TrackGain = "-1.15", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.997620", - AlbumPeak = "0.999664", - TrackGain = "-6.28", - AlbumGain = "-5.91" - }, - new TestAudioMetadata - { - TrackPeak = "0.999664", - AlbumPeak = "0.999664", - TrackGain = "-7.03", - AlbumGain = "-5.91" - } - }, - new[] // libebur128 1.2.4 + new[] { new TestAudioMetadata { diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeValidFileDataSource.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeValidFileDataSource.cs index dbf5d196..6574271e 100644 --- a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeValidFileDataSource.cs +++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeValidFileDataSource.cs @@ -59,14 +59,7 @@ public static class AnalyzeValidFileDataSource }, new[] { - new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04) - { - TrackPeak = "0.988234", - AlbumPeak = "0.988234", - TrackGain = "-8.84", - AlbumGain = "-8.84" - }, - new TestAudioMetadata // libebur128 1.2.4 + new TestAudioMetadata { TrackPeak = "0.987757", AlbumPeak = "0.987757", @@ -105,14 +98,7 @@ public static class AnalyzeValidFileDataSource }, new[] { - new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04) - { - TrackPeak = "1.326816", - AlbumPeak = "1.326816", - TrackGain = "-9.75", - AlbumGain = "-9.75" - }, - new TestAudioMetadata // libebur128 1.2.4 + new TestAudioMetadata { TrackPeak = "1.342166", AlbumPeak = "1.342166", @@ -151,14 +137,7 @@ public static class AnalyzeValidFileDataSource }, new[] { - new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04) - { - TrackPeak = "1.013034", - AlbumPeak = "1.013034", - TrackGain = "-8.67", - AlbumGain = "-8.67" - }, - new TestAudioMetadata // libebur128 1.2.4 + new TestAudioMetadata { TrackPeak = "1.012000", AlbumPeak = "1.012000", @@ -197,14 +176,7 @@ public static class AnalyzeValidFileDataSource }, new[] { - new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04) - { - TrackPeak = "1.011720", - AlbumPeak = "1.011720", - TrackGain = "-8.66", - AlbumGain = "-8.66" - }, - new TestAudioMetadata // libebur128 1.2.4 + new TestAudioMetadata { TrackPeak = "1.014152", AlbumPeak = "1.014152", @@ -243,14 +215,7 @@ public static class AnalyzeValidFileDataSource }, new[] { - new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04) - { - TrackPeak = "0.993001", - AlbumPeak = "0.993001", - TrackGain = "-8.64", - AlbumGain = "-8.64" - }, - new TestAudioMetadata // libebur128 1.2.4 + new TestAudioMetadata { TrackPeak = "0.992940", AlbumPeak = "0.992940", diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/EncodeValidFileDataSource.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/EncodeValidFileDataSource.cs index e863d38c..f97725de 100644 --- a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/EncodeValidFileDataSource.cs +++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/EncodeValidFileDataSource.cs @@ -209,7 +209,6 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "ADF68390D58F5312FE3B01D75FE5BE57", // FLAC 1.3.1 (Ubuntu 16.04) "44AA2E52CED28503D02D51957B19DF74", // FLAC 1.3.2 (Ubuntu 18.04) "42070347011D5067A9D962DA3237EF63" // FLAC 1.3.3 } @@ -222,7 +221,6 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "9A4394FF3EA062E68526EFBCC3851FB9", // FLAC 1.3.1 (Ubuntu 16.04) "588ACB7827AF0D1A6A18751EEFEA3604", // FLAC 1.3.2 (Ubuntu 18.04) "0771EF09959F087FACE194A4479F5107" // FLAC 1.3.3 } @@ -235,9 +233,9 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04) "3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04) - "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 + "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM) + "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel) } }, @@ -248,7 +246,6 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "EFAA1634FCAC4C0AA6544F085DCAA315", // FLAC 1.3.1 (Ubuntu 16.04) "8A532C4C9D61AF027BC6F684C59FE9A6", // FLAC 1.3.2 (Ubuntu 18.04) "F0F075E05A3AFB67403CCF373932BCCA" // FLAC 1.3.3 } @@ -261,7 +258,6 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "20A6542862C62E47F75FA91CA3863F21", // FLAC 1.3.1 (Ubuntu 16.04) "4A4DE0494E31D82F446421C876FB10EA", // FLAC 1.3.2 (Ubuntu 18.04) "D3A7B834DCE97F0709AEFCA45A24F5B6" // FLAC 1.3.3 } @@ -274,7 +270,6 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "C470B50240F504610DD9637C0D9CBB4A", // FLAC 1.3.1 (Ubuntu 16.04) "A34A2A6CD402C98AB46C4BF4CE901A8E", // FLAC 1.3.2 (Ubuntu 18.04) "10F6AC75659ECFE81D3C07D8D3074538" // FLAC 1.3.3 } @@ -287,7 +282,6 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "A7A171C2C168DABC8E0374423C23583E", // FLAC 1.3.1 (Ubuntu 16.04) "B4E17B8DD9733AAB81EC9FA27D4F0D81", // FLAC 1.3.2 (Ubuntu 18.04) "FCBAB8A8C261456CF6F87E603B237426" // FLAC 1.3.3 } @@ -300,9 +294,9 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "AE5FE89E167550019A672C46D81B765E", // FLAC 1.3.1 (Ubuntu 16.04) "A6B18F2B4DDC51DC37154410E701251F", // FLAC 1.3.2 (Ubuntu 18.04) - "2F2F341FEECB7842F7FA9CE6CB110C67" // FLAC 1.3.3 + "2DE79B3EED60288225952EB7436F2CD5", // FLAC 1.3.3 (MacOS on ARM) + "2F2F341FEECB7842F7FA9CE6CB110C67" // FLAC 1.3.3 (Intel) } }, @@ -313,9 +307,9 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "4E48D943C0D10F7B59490398AA68C305", // FLAC 1.3.1 (Ubuntu 16.04) "CC3E8D9A5B48AE40CB9D0EDD38D433B5", // FLAC 1.3.2 (Ubuntu 18.04) - "A48820F5E30B5C21A881E01209257E21" // FLAC 1.3.3 + "0300307842382C0C0D3B8B210C3D0852", // FLAC 1.3.3 (MacOS on ARM) + "A48820F5E30B5C21A881E01209257E21" // FLAC 1.3.3 (Intel) } }, @@ -326,9 +320,9 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "075CCCEB8C9263F21C95CDF5C2B9D691", // FLAC 1.3.1 (Ubuntu 16.04) "93016EE621E1F515BDAF0D405917DA25", // FLAC 1.3.2 (Ubuntu 18.04) - "D90693A520FA14AC987272ACB6CD8996" // FLAC 1.3.3 + "0A5C07954515A06B7E34D68FDDFF5237", // FLAC 1.3.3 (MacOS on ARM) + "D90693A520FA14AC987272ACB6CD8996" // FLAC 1.3.3 (Intel) } }, @@ -343,9 +337,9 @@ public static class EncodeValidFileDataSource }, new[] { - "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04) "3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04) - "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 + "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM) + "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel) } }, @@ -360,7 +354,6 @@ public static class EncodeValidFileDataSource }, new[] { - "1F6BE17A7FCDCC0D879F4A067B4CEF8B", // FLAC 1.3.1 (Ubuntu 16.04) "D352B276E4712ABBA3A8F1B9CA8BAB55", // FLAC 1.3.2 (Ubuntu 18.04) "A58022B124B427771041A96F65D8DF21" // FLAC 1.3.3 } @@ -377,9 +370,9 @@ public static class EncodeValidFileDataSource }, new[] { - "78D765C28F4817CB0189B8A1238F2C27", // FLAC 1.3.1 (Ubuntu 16.04) "C73F21F10850A4542EEA2435226F1DEB", // FLAC 1.3.2 (Ubuntu 18.04) - "F341E56E68A0A168B779A4EBFD41422D" // FLAC 1.3.3 + "9C069D424B8A5772FBD4FE0CCF388C68", // FLAC 1.3.3 (MacOS on ARM) + "F341E56E68A0A168B779A4EBFD41422D" // FLAC 1.3.3 (Intel) } }, @@ -394,9 +387,9 @@ public static class EncodeValidFileDataSource }, new[] { - "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04) "3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04) - "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 + "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM) + "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel) } }, @@ -411,9 +404,9 @@ public static class EncodeValidFileDataSource }, new[] { - "2ED9148F4629DDBCCF43BF903E8F237E", // FLAC 1.3.1 (Ubuntu 16.04) "7DBB3E3E8079E60932AA5F8B4D9CD57C", // FLAC 1.3.2 (Ubuntu 18.04) - "986464F3AC48E00D00B8ECF3AF3FD6BC" // FLAC 1.3.3 + "667DF0654576D3ADA2F89D81CF47AF6F", // FLAC 1.3.3 (MacOS on ARM) + "986464F3AC48E00D00B8ECF3AF3FD6BC" // FLAC 1.3.3 (Intel) } }, @@ -428,9 +421,9 @@ public static class EncodeValidFileDataSource }, new[] { - "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04) "3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04) - "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 + "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM) + "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel) } }, @@ -445,9 +438,9 @@ public static class EncodeValidFileDataSource }, new[] { - "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04) "3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04) - "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 + "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM) + "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel) } }, @@ -462,9 +455,9 @@ public static class EncodeValidFileDataSource }, new[] { - "F303C709C209A5B6A986D7EBF0CCC07B", // FLAC 1.3.1 (Ubuntu 16.04) "FFB7D9F0F4CDF37EDBA799FE371424A7", // FLAC 1.3.2 (Ubuntu 18.04) - "662592BD8B3853B6FEC4E188F7D0F246" // FLAC 1.3.3 + "BDA6463E9B77660A277D5A965035D137", // FLAC 1.3.3 (MacOS on ARM) + "662592BD8B3853B6FEC4E188F7D0F246" // FLAC 1.3.3 (Intel) } }, @@ -479,9 +472,9 @@ public static class EncodeValidFileDataSource }, new[] { - "67E4AB6AD90E9FFE867ED57E6AFCC09C", // FLAC 1.3.1 (Ubuntu 16.04) "F03F417B853C560705CD424AD329EFBC", // FLAC 1.3.2 (Ubuntu 18.04) - "455753A51355171BF22CCC78647235B4" // FLAC 1.3.3 + "D134EDD71967B03340C8FFB21AAD6301", // FLAC 1.3.3 (MacOS on ARM) + "455753A51355171BF22CCC78647235B4" // FLAC 1.3.3 (Intel) } }, @@ -502,6 +495,7 @@ public static class EncodeValidFileDataSource }, new[] { + "24C88B615C59F3054FF0A44C677987FA", // MacOS 11 "50F7F27DBCCE5874118C3DE9B0F0306D" } }, @@ -517,6 +511,7 @@ public static class EncodeValidFileDataSource }, new[] { + "04244493BA087CD69BAD989927BD1595", // MacOS 11 "4A2E22037B18F3318920EA47BA76825C" } }, @@ -532,6 +527,7 @@ public static class EncodeValidFileDataSource }, new[] { + "8522CA9ADFA8E200FDF5936AEF62EA43", // MacOS 11 "C299C20C8EF4ED5B6B5664E6B81C3244" } }, @@ -547,6 +543,7 @@ public static class EncodeValidFileDataSource }, new[] { + "1BB62FEE2C66905CFBB6FEC048BF9772", // MacOS 11 "26442948986C55394D8AE960E66101C3" } }, @@ -562,6 +559,7 @@ public static class EncodeValidFileDataSource }, new[] { + "B55FDF0750DE71AA26781CA565222D05", // MacOS 11 "40626FB4389C8CF567C0BF74621036BD" } }, @@ -577,6 +575,7 @@ public static class EncodeValidFileDataSource }, new[] { + "8D7D0F67E43BECA4B9EE8AC0D552C01F", // MacOS 11 "26B6F5A519F858AB695C5090E7B98451" } }, @@ -592,6 +591,7 @@ public static class EncodeValidFileDataSource }, new[] { + "C88E17FEC4F9AE6C0F8ED21E423E60D3", // MacOS 11 "C8E2DD6861F837C845A52A4C34523C85" } }, @@ -607,6 +607,7 @@ public static class EncodeValidFileDataSource }, new[] { + "826418694704C310B1FFFDE1D1874839", // MacOS 11 "FAF8B7679D0B2446D83BA248CB491410" } }, @@ -622,6 +623,7 @@ public static class EncodeValidFileDataSource }, new[] { + "E170FAAB89D07557FC15F472715168A0", // MacOS 11 "38406F719F6EF9E5F5D4E7862AA5C351" } }, @@ -638,6 +640,7 @@ public static class EncodeValidFileDataSource }, new[] { + "B9F0B2D3BCB6FD612829084D8C42C2AA", // MacOS 11 "2F72E377036957C669D858AEA26DF62F" } }, @@ -654,6 +657,7 @@ public static class EncodeValidFileDataSource }, new[] { + "EF39C30FA5D1106F655DC55806D8CB44", // MacOS 11 "F57326FFFD308ED69B83F7F451938D55" } }, @@ -671,6 +675,7 @@ public static class EncodeValidFileDataSource }, new[] { + "04244493BA087CD69BAD989927BD1595", // MacOS 11 "4A2E22037B18F3318920EA47BA76825C" } }, @@ -688,6 +693,7 @@ public static class EncodeValidFileDataSource }, new[] { + "771DAECD27700570C845116672E7DACC", // MacOS 11 "03305CCE91A686386908415EF35BDE0D" } }, @@ -705,6 +711,7 @@ public static class EncodeValidFileDataSource }, new[] { + "DF3747EF579BFC71DC15CC0399E8F347", // MacOS 11 "815E83D61745D4E117E12D31543C47BF" } }, @@ -724,8 +731,9 @@ public static class EncodeValidFileDataSource }, new[] { - "A4A51635A3E24D6AD0C377C918FBE7B6", // MacOS 10.14 "F62EB3988683FAFF83599C61A18E4BB5", // MacOS 10.15 + "1E20EEB7DE9491EFC9B946EE9947A437", // MacOS 11 on Intel + "7E21540C472F59D17BB67D400BFD7991", // MacOS 11 on ARM "09CD8B8C8E9D8BC09121D8C9F871F9B7", // 32-bit Windows on Intel "CF5AD69DADDCCE22612CD6FA8FB21897", // 32-bit Windows on AMD "75D127D9FCD7720CBE92C0670A93A880", // 64-bit Windows on Intel @@ -744,8 +752,9 @@ public static class EncodeValidFileDataSource }, new[] { - "336CE3C01C6F9D430E6FC947B93820F7", // MacOS 10.14 "EAD8D0B06C252C21C49920DCF360CAAF", // MacOS 10.15 + "A1FE40A8416A31D87160E49797AAF469", // MacOS 11 on Intel + "439F73E38831F4A10B5BD4F91F732A15", // MacOS 11 on ARM "9A0F6E1984B428F236E1209C13AED4D1", // 32-bit Windows on Intel "7FABBF9DDF1A16701E57C6DD190485E0", // 32-bit Windows on AMD "1D0F379EC9C47267569F88729569D407", // 64-bit Windows on Intel @@ -764,8 +773,9 @@ public static class EncodeValidFileDataSource }, new[] { - "6C9073E678B05536C0B6AE3BF98691DD", // MacOS 10.14 "F1DD4F4527CCD1F347EEE1008EA2CC92", // MacOS 10.15 + "16D9FC9ACF0A6F1CE04BACE0368C297C", // MacOS 11 on Intel + "13BB443AE1F220DF897615F96EF0A0D2", // MacOS 11 on ARM "CB39DFBF414790022574435C2D30297D", // 32-bit Windows on Intel "EB0DA4A098888A34C2F77A2A65D2E337", // 32-bit Windows on AMD "E0A80A6B32CD5A8FA5C62B44F28C4A87", // 64-bit Windows on Intel @@ -784,8 +794,9 @@ public static class EncodeValidFileDataSource }, new[] { - "8CA08D60F2A8FD8E9E966FB86C56246B", // MacOS 10.14 "D8CFD4140F419E15B4227A3E079F0A8D", // MacOS 10.15 + "9EEEFD7C9BD1965C842964F88243E361", // MacOS 11 on Intel + "88908D8E665C16C5B6762CD1B14F8B7C", // MacOS 11 on ARM "E0C34EA1479C8979D3AF3A2C98D4E699", // 32-bit Windows on Intel "06469BD31CF3F0B799D9E52BBEA00C72", // 32-bit Windows on AMD "ED307F76DD052720321284BAD8876AB2", // 64-bit Windows on Intel @@ -804,8 +815,9 @@ public static class EncodeValidFileDataSource }, new[] { - "A947F12FF7966ABAD94A102E3E26735F", // MacOS 10.14 "E75BB5AB85B9091CF800762611718B5E", // MacOS 10.15 + "DF9FAF5172A3A2B98A40A45AE96AE020", // MacOS 11 on Intel + "18E802BDE2DDECAAEF5628312EC47EC9", // MacOS 11 on ARM "6E08F885FEC4094041F6A0B4A02F10AB", // 32-bit Windows on Intel "194D40FBCAE58B4A01095DD89CE70A2D", // 32-bit Windows on AMD "369DAA1350BB9C45BAF84F7769221F00", // 64-bit Windows on Intel @@ -824,8 +836,9 @@ public static class EncodeValidFileDataSource }, new[] { - "A856507F3B0F038F436AAB49B4CB111C", // MacOS 10.14 "D44290597054C7643B8A492DA3F0F97F", // MacOS 10.15 + "0885887CE776F7DF0B62938F0B1B5A37", // MacOS 11 on Intel + "7B13752769B0DCF9A5054C462D18CB40", // MacOS 11 on Intel "D41235E8E642C5773C499DCE06A72CC8", // 32-bit Windows on Intel "C7FD479EFD340F30F3DE645205FA3BC5", // 32-bit Windows on AMD "A86E9A3D4A9479A44F852FA42BA0C9C2", // 64-bit Windows on Intel @@ -844,8 +857,9 @@ public static class EncodeValidFileDataSource }, new[] { - "0F0823DFE0AC879E021E881F70AF5775", // MacOS 10.14 "C57AA6ADEDD247E629980DC8E78610A8", // MacOS 10.15 + "C06FCDFF1A3A1D4FCD4ACAB7AA962957", // MacOS 11 on Intel + "04ABF599CC89FC3478FAFD96DD393DBA", // MacOS 11 on ARM "7BAD797AA7C5F71C7168C24077271029", // 32-bit Windows on Intel "01DF45A55B786EBDEFCFFFFFD58187DF", // 32-bit Windows on AMD "102A8F21E39D364419B9CF5BFB386631", // 64-bit Windows on Intel @@ -864,12 +878,16 @@ public static class EncodeValidFileDataSource }, new[] { - "7F43E990D02B3D55798A69F675362138", // MacOS 10.14 "0E0C4050A3325A97DCC8782850A085C1", // MacOS 10.15 + "B3E88B401D50081F75096694932AFA63", // MacOS 11 on Intel + "B1BD1E3A78B5E47CAAE8462B13720EDE", // MacOS 11 on ARM "9AC3DEF9B464D0E1AB2D4F91C1A08B83", // 32-bit Windows on Intel - "4BB812252790CAEDE8CE8547E7BD546A", // 32-bit Windows on AMD - "2863A63E2060267B6A6151CA90239BC6", // 64-bit Windows on Intel - "AFBA08886BCC7401D3BD2915E5083A9B" // 64-bit Windows on AMD + "4BB812252790CAEDE8CE8547E7BD546A", // Legacy .NET on 32-bit Windows / AMD + "CA76E6BF627014C55077F133C4E2E405", // .NET Core 3.0+ on 32-bit Windows / AMD + "2863A63E2060267B6A6151CA90239BC6", // Legacy .NET on 64-bit Windows / Intel + "940C0D0056C23E7F8DCDCC09C51E1475", // .NET Core 3.0+ on 64-bit Windows / Intel + "AFBA08886BCC7401D3BD2915E5083A9B", // Legacy .NET on 64-bit Windows / AMD + "BD90F67F68BEDEAB116241A3B0B79CDB" // .NET Core 3.0+ on 64-bit Windows / AMD } }, @@ -884,8 +902,9 @@ public static class EncodeValidFileDataSource }, new[] { - "7F43E990D02B3D55798A69F675362138", // MacOS 10.14 "0E0C4050A3325A97DCC8782850A085C1", // MacOS 10.15 + "B3E88B401D50081F75096694932AFA63", // MacOS 11 on Intel + "B1BD1E3A78B5E47CAAE8462B13720EDE", // MacOS 11 on ARM "9AC3DEF9B464D0E1AB2D4F91C1A08B83", // 32-bit Windows on Intel "4BB812252790CAEDE8CE8547E7BD546A", // 32-bit Windows on AMD "2863A63E2060267B6A6151CA90239BC6", // 64-bit Windows on Intel @@ -906,8 +925,9 @@ public static class EncodeValidFileDataSource }, new[] { - "336CE3C01C6F9D430E6FC947B93820F7", // MacOS 10.14 "EAD8D0B06C252C21C49920DCF360CAAF", // MacOS 10.15 + "A1FE40A8416A31D87160E49797AAF469", // MacOS 11 on Intel + "439F73E38831F4A10B5BD4F91F732A15", // MacOS 11 on ARM "9A0F6E1984B428F236E1209C13AED4D1", // 32-bit Windows on Intel "7FABBF9DDF1A16701E57C6DD190485E0", // 32-bit Windows on AMD "1D0F379EC9C47267569F88729569D407", // 64-bit Windows on Intel @@ -928,8 +948,9 @@ public static class EncodeValidFileDataSource }, new[] { - "924AD280AF0C8E068F2CA14211631527", // MacOS 10.14 "86088ED15687B386696E2A86CB26B90B", // MacOS 10.15 + "EA0A363DB54E3435F680C2308EF2A3D9", // MacOS 11 on Intel + "E11E1E49987AA13BA2DE91237256AAAF", // MacOS 11 on ARM "78299761793D1A6EC79CBB9233156FD8", // 32-bit Windows on Intel "E53BA332FDCFBE927A81040DB480688B", // 32-bit Windows on AMD "93D67A9C673E7ABE3929846DBE5DBF97", // 64-bit Windows on Intel @@ -950,8 +971,9 @@ public static class EncodeValidFileDataSource }, new[] { - "B26CC58D8473661388019F210607C1B7", // MacOS 10.14 "3ED7A24F4D3C2337506DDE23FAFFF996", // MacOS 10.15 + "A2061435078552AF063273BF4498D456", // MacOS 11 on Intel + "D565DE5B4A908E077EEC1BB5B75C05C2", // MacOS 11 on ARM "7EDD94F25082AEEE82B2AA87E795AB6D", // 32-bit Windows on Intel "9EFB3B60246E65F1C90A0880CF8905D9", // 32-bit Windows on AMD "A1CD6AC102BA40A728B2C7E00B1E786D", // 64-bit Windows on Intel @@ -972,8 +994,9 @@ public static class EncodeValidFileDataSource }, new[] { - "31E4469B7D826DF20C38EC8EC80C0D16", // MacOS 10.14 "090AD76F6A073DB5A6FCB206FE76B3B3", // MacOS 10.15 + "A8FB56E50B8131AD68A311FFCEE0F6FB", // MacOS 11 on Intel + "DAA69EC398F6E9E31B67B12DD735331F", // MacOS 11 on ARM "0177BB1DEB19854CA8495C4CBBB25366", // 32-bit Windows on Intel "4EE479F602DD0FB162B19540B683B2BF", // 32-bit Windows on AMD "38D28BD3802566CB30D3B824D7FF593F", // 64-bit Windows on Intel @@ -994,8 +1017,8 @@ public static class EncodeValidFileDataSource }, new[] { - "2321A80FDC5F36A1860523948548F8E5", // MacOS 10.14 "7DA8554E0BC588114FC632ACF751039D", // MacOS 10.15 + "C9B699DB0247E0F95DE4C3A39582C4D0", // MacOS 11 "9E77C0824474E3600F1A919715609A1B", // 32-bit Windows "2321A80FDC5F36A1860523948548F8E5" // 64-bit Windows } @@ -1014,8 +1037,9 @@ public static class EncodeValidFileDataSource }, new[] { - "E36539ED8969070A53809CECCD0B422A", // MacOS 10.14 "13D8C2E82652D483B473B373FC56C753", // MacOS 10.15 + "391A6E071EE1085676EDB8BAC8888937", // MacOS 11 on Intel + "01245B8ECCFC4C4DA1F261F691A3FF37", // MacOS 11 on ARM "EBD496E30A953A8D0FE11C2609EFABC3", // 32-bit Windows on Intel "AFEC3388275B59A08EFD11A9B32904FD", // 32-bit Windows on AMD "2AD5FC82A78732A66B8F04387D7D412B", // 64-bit Windows on Intel @@ -1036,8 +1060,9 @@ public static class EncodeValidFileDataSource }, new[] { - "9116562A92B3F1FA983A180972CE670E", // MacOS 10.14 "CACCC7C8EFADCEA67B61FBD88040CEF2", // MacOS 10.15 + "63FF38E19B0CAEAD684B9F03E9126D11", // MacOS 11 on Intel + "8B21060F2783BBD1029CB5E38489EE6F", // MacOS 11 on ARM "DE5F94EC1EACB75A3D049AE9960A7ACB", // 32-bit Windows on Intel "C3A45A0F87C7E3A8BDAD6526CFA00ABF", // 32-bit Windows on AMD "298A2B946AA53102FD025DDD9D273B21", // 64-bit Windows on Intel @@ -1058,8 +1083,10 @@ public static class EncodeValidFileDataSource }, new[] { - "503F9957F1FE77F23189507AFC641297", // MacOS 10.14 + "2192CBAE8336E9611C536D086A1DB531", // MacOS 10.15 + "35BDD732D1DEAF05CDAA969A37758E09", // MacOS 11 on Intel + "0557E7171818C5DC73C175F1F8DC7535", // MacOS 11 on ARM "B26C14FD53A4027C26FA3A57CB96AF4C", // 32-bit Windows "96E46C6CF7126E26E58224D5F55850F2", // 64-bit Windows on Intel "31A39465557533AA9D2E6F4985AFF237" // 64-bit Windows on AMD @@ -1080,8 +1107,9 @@ public static class EncodeValidFileDataSource }, new[] { - "503F9957F1FE77F23189507AFC641297", // MacOS 10.14 "2192CBAE8336E9611C536D086A1DB531", // MacOS 10.15 + "35BDD732D1DEAF05CDAA969A37758E09", // MacOS 11 on Intel + "0557E7171818C5DC73C175F1F8DC7535", // MacOS 11 on ARM "B26C14FD53A4027C26FA3A57CB96AF4C", // 32-bit Windows "96E46C6CF7126E26E58224D5F55850F2", // 64-bit Windows on Intel "31A39465557533AA9D2E6F4985AFF237" // 64-bit Windows on AMD @@ -1102,8 +1130,9 @@ public static class EncodeValidFileDataSource }, new[] { - "31FCA720DAD2B27CCFD20D52F8E32B2D", // MacOS 10.14 "2EE6CD80BF1B68CE6C7F3C22FC96DB6B", // MacOS 10.15 + "2689DD85934B68279881E8CA660419CC", // MacOS 11 on Intel + "C17ED28BC045C9E5010DF361ADE59515", // MacOS 11 on ARM "B65D496ADABF3DBCDB24136A9655C295", // 32-bit Windows "D4A9A3FFC75AC0383B68BADA43E23C3D", // 64-bit Windows on Intel "EBDEAB5BAC8FBA910667D3664192EA07" // 64-bit Windows on AMD @@ -1124,8 +1153,9 @@ public static class EncodeValidFileDataSource }, new[] { - "1D7F6BDC889271BEA523A07DD29BDD37", // MacOS 10.14 "66F3C02A4A016EDB29216A1917D6E54A", // MacOS 10.15 + "1A4D28ABAD6B47007B7FB06B526DDCAB", // MacOS 11 on Intel + "FB38869E1A10C837554BCD0CCDBC660A", // MacOS 11 on ARM "365D7E965534C8690B4694B27D0CF1C9", // 32-bit Windows on Intel "BCA45E90590A453EF4DBDCE3950C9CC4", // 32-bit Windows on AMD "08686D04EFF88BC663C469F2DD224020", // 64-bit Windows on Intel @@ -1146,8 +1176,9 @@ public static class EncodeValidFileDataSource }, new[] { - "336CE3C01C6F9D430E6FC947B93820F7", // MacOS 10.14 "EAD8D0B06C252C21C49920DCF360CAAF", // MacOS 10.15 + "A1FE40A8416A31D87160E49797AAF469", // MacOS 11 on Intel + "439F73E38831F4A10B5BD4F91F732A15", // MacOS 11 on ARM "9A0F6E1984B428F236E1209C13AED4D1", // 32-bit Windows on Intel "7FABBF9DDF1A16701E57C6DD190485E0", // 32-bit Windows on AMD "1D0F379EC9C47267569F88729569D407", // 64-bit Windows on Intel @@ -1168,8 +1199,9 @@ public static class EncodeValidFileDataSource }, new[] { - "6F97B672D446B19B9370EE3FF4A5DCB5", // MacOS 10.14 "32C00BC525D1101491AE423027AFF09B", // MacOS 10.15 + "248F69EF80DD2185FD4953BA8FC564C3", // MacOS 11 on Intel + "F245069996E7B90FBC76C04515E7DB2C", // MacOS 11 on ARM "DDA8DBB070EA36F77455A41A2628B6AA", // 32-bit Windows on Intel "9EBD64EEF7F1CB540012892515A3B0F5", // 32-bit Windows on AMD "B49EC8F6428A1CDEBA4F0728FC1BF8E5", // 64-bit Windows on Intel @@ -1190,8 +1222,9 @@ public static class EncodeValidFileDataSource }, new[] { - "FD0ADBEFE09CE73D7A71768366A029A4", // MacOS 10.14 "B60568438DAB722DF989DA528B5461AC", // MacOS 10.15 + "56419864ABD22CED84B79209BEFED0E6", // MacOS 11 on Intel + "AF4D1BAF1D9D5DFB5F4B6E5D5D50F423", // MacOS 11 on ARM "5502D724D98AA24FE49FA8AFB0FC63A6", // 32-bit Windows on Intel "838B5CABD1F8E0077559E4DF504842DC", // 32-bit Windows on AMD "19940A1BA1D575D9E165584C24A955F4", // 64-bit Windows on Intel @@ -1212,8 +1245,7 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "362C1DC415B6ED27B3BB0C43EEC7614A", // Lame 3.99.5 (Ubuntu 16.04) - "F2BD0875E273743A8908F96DCCFDFC44", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "F2BD0875E273743A8908F96DCCFDFC44", // Lame 3.100 (Ubuntu and MacOS) "7CB68FB7ACC70E8CD928E7DB437B16FE" // Lame 3.100 (Windows) } }, @@ -1225,8 +1257,7 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "3FBE256A1ABC2C530FAAA632929F9AC2", // Lame 3.99.5 (Ubuntu 16.04) - "1CB5B915B3A72CBE76087E16F96A0A3E", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "1CB5B915B3A72CBE76087E16F96A0A3E", // Lame 3.100 (Ubuntu and MacOS) "537DE5BA83AAF6542B2E29C74D405EC2" // Lame 3.100 (Windows) } }, @@ -1238,8 +1269,7 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04) - "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS) "EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows) } }, @@ -1251,8 +1281,7 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "F2FFFC7C7001A93C0CC19466D51FC597", // Lame 3.99.5 (Ubuntu 16.04) - "1454732B48913F2A3898164BA366DA01", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "1454732B48913F2A3898164BA366DA01", // Lame 3.100 (Ubuntu and MacOS) "D6C2622620E83D442C80AADBE6B45921" // Lame 3.100 (Windows) } }, @@ -1264,8 +1293,7 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "BFF278600EB87215603D727BAA7905BD", // Lame 3.99.5 (Ubuntu 16.04) - "AD56C3A1ACD627DBDA4B5A28AFE0355D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "AD56C3A1ACD627DBDA4B5A28AFE0355D", // Lame 3.100 (Ubuntu and MacOS) "5BCC0ED414809596507ECFEDEBD4454D" // Lame 3.100 (Windows) } }, @@ -1277,8 +1305,7 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "C5EC333961C48A9D79B4AB308FF847A2", // Lame 3.99.5 (Ubuntu 16.04) - "0190385E444B8576C297E1DE837279F1", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "0190385E444B8576C297E1DE837279F1", // Lame 3.100 (Ubuntu and MacOS) "C43AEE67905D09300EE49323D6330426" // Lame 3.100 (Windows) } }, @@ -1290,8 +1317,7 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "1F4DAA185870D806297B11487E0E76C4", // Lame 3.99.5 (Ubuntu 16.04) - "3CE431DA62AC5204B9FAE63BD8E2B4A8", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "3CE431DA62AC5204B9FAE63BD8E2B4A8", // Lame 3.100 (Ubuntu and MacOS) "CC60AD39342F059B4F590988F192FE8D" // Lame 3.100 (Windows) } }, @@ -1303,8 +1329,7 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "2C075F8F211B7EF63DDF024D641AA7D4", // Lame 3.99.5 (Ubuntu 16.04) - "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu and MacOS) "EA2FE7549FB7A1971265FA27B88D0285" // Lame 3.100 (Windows) } }, @@ -1316,9 +1341,10 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "E73399A30F5497FD72E1AEE0A3E76EAF", // Lame 3.99.5 (Ubuntu 16.04) - "FB1B7DECB2C2A2C9CAA1FBB917A81472", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) - "A4306E31052226EFD081D5D5FA80F62B" // Lame 3.100 (Windows) + "FB1B7DECB2C2A2C9CAA1FBB917A81472", // Lame 3.100 (MacOS and Legacy .NET on Ubuntu) + "C50EBCF351F8931F36802CF099BFF826", // Lame 3.100 (.NET Core 3.0+ on Ubuntu) + "A4306E31052226EFD081D5D5FA80F62B", // Lame 3.100 (Legacy .NET on Windows) + "6B4C5AF12696064CB7FFC96CEE942994" // Lame 3.100 (.NET Core 3.0+ on Windows) } }, @@ -1329,8 +1355,7 @@ public static class EncodeValidFileDataSource new TestSettingDictionary(), new[] { - "E73399A30F5497FD72E1AEE0A3E76EAF", // Lame 3.99.5 (Ubuntu 16.04) - "FB1B7DECB2C2A2C9CAA1FBB917A81472", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "FB1B7DECB2C2A2C9CAA1FBB917A81472", // Lame 3.100 (Ubuntu and MacOS) "A4306E31052226EFD081D5D5FA80F62B" // Lame 3.100 (Windows) } }, @@ -1346,8 +1371,7 @@ public static class EncodeValidFileDataSource }, new[] { - "2C075F8F211B7EF63DDF024D641AA7D4", // Lame 3.99.5 (Ubuntu 16.04) - "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu and MacOS) "EA2FE7549FB7A1971265FA27B88D0285" // Lame 3.100 (Windows) } }, @@ -1363,8 +1387,7 @@ public static class EncodeValidFileDataSource }, new[] { - "50C73110274DB00C514B7C5E1AD8B483", // Lame 3.99.5 (Ubuntu 16.04) - "F69CCDFC32565F97130CBAEABFF0D13C", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "F69CCDFC32565F97130CBAEABFF0D13C", // Lame 3.100 (Ubuntu and MacOS) "BAB786013527E61F4719BBC1F6682C92" // Lame 3.100 (Windows) } }, @@ -1380,8 +1403,7 @@ public static class EncodeValidFileDataSource }, new[] { - "2C075F8F211B7EF63DDF024D641AA7D4", // Lame 3.99.5 (Ubuntu 16.04) - "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu and MacOS) "EA2FE7549FB7A1971265FA27B88D0285" // Lame 3.100 (Windows) } }, @@ -1397,8 +1419,7 @@ public static class EncodeValidFileDataSource }, new[] { - "08C1435414AB53A9CE55236823A31452", // Lame 3.99.5 (Ubuntu 16.04) - "EA1232E970C83FCDDE00D4C1D51F0446", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "EA1232E970C83FCDDE00D4C1D51F0446", // Lame 3.100 (Ubuntu and MacOS) "B3402C50D24A82004D50DC0172E81BC1" // Lame 3.100 (Windows) } }, @@ -1414,8 +1435,7 @@ public static class EncodeValidFileDataSource }, new[] { - "C4C0E6CE93054389A86B6244BB385036", // Lame 3.99.5 (Ubuntu 16.04) - "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu and MacOS) "B0AC00BF6DFDA60BAD712FD3F9DFED21" // Lame 3.100 (Windows) } }, @@ -1432,8 +1452,7 @@ public static class EncodeValidFileDataSource }, new[] { - "C4C0E6CE93054389A86B6244BB385036", // Lame 3.99.5 (Ubuntu 16.04) - "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu and MacOS) "B0AC00BF6DFDA60BAD712FD3F9DFED21" // Lame 3.100 (Windows) } }, @@ -1450,8 +1469,7 @@ public static class EncodeValidFileDataSource }, new[] { - "C4C0E6CE93054389A86B6244BB385036", // Lame 3.99.5 (Ubuntu 16.04) - "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu and MacOS) "B0AC00BF6DFDA60BAD712FD3F9DFED21" // Lame 3.100 (Windows) } }, @@ -1467,8 +1485,7 @@ public static class EncodeValidFileDataSource }, new[] { - "2C075F8F211B7EF63DDF024D641AA7D4", // Lame 3.99.5 (Ubuntu 16.04) - "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu and MacOS) "EA2FE7549FB7A1971265FA27B88D0285" // Lame 3.100 (Windows) } }, @@ -1484,8 +1501,7 @@ public static class EncodeValidFileDataSource }, new[] { - "8D6D2321FA9B2AAC5291B6E4C1383D62", // Lame 3.99.5 (Ubuntu 16.04) - "ED3A9531742553641B112C0D0A41F099", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "ED3A9531742553641B112C0D0A41F099", // Lame 3.100 (Ubuntu and MacOS) "ADA8A213D1219A92937453878EEA3D18" // Lame 3.100 (Windows) } }, @@ -1501,8 +1517,7 @@ public static class EncodeValidFileDataSource }, new[] { - "7FD72518A2291E0BCFFE6F4993EDDE2C", // Lame 3.99.5 (Ubuntu 16.04) - "6645726904A761FDF324711CFD21D477", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "6645726904A761FDF324711CFD21D477", // Lame 3.100 (Ubuntu and MacOS) "47A50D9D488F78F43577BB5BBA0BD783" // Lame 3.100 (Windows) } }, @@ -1518,8 +1533,7 @@ public static class EncodeValidFileDataSource }, new[] { - "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04) - "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS) "EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows) } }, @@ -1535,8 +1549,7 @@ public static class EncodeValidFileDataSource }, new[] { - "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04) - "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS) "EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows) } }, @@ -1552,8 +1565,7 @@ public static class EncodeValidFileDataSource }, new[] { - "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04) - "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS) "EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows) } }, @@ -1569,8 +1581,7 @@ public static class EncodeValidFileDataSource }, new[] { - "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04) - "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS) "EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows) } }, @@ -1586,8 +1597,7 @@ public static class EncodeValidFileDataSource }, new[] { - "472A428EDB8AD18369EEC4F748F80A59", // Lame 3.99.5 (Ubuntu 16.04) - "65D418A236D86A8CE33E07A76C98DF08", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "65D418A236D86A8CE33E07A76C98DF08", // Lame 3.100 (Ubuntu and MacOS) "BB8B33BD589DA49D751C883B8A0FF653" // Lame 3.100 (Windows) } }, @@ -1603,8 +1613,7 @@ public static class EncodeValidFileDataSource }, new[] { - "E539FECE8D80128F11BA73148B92209F", // Lame 3.99.5 (Ubuntu 16.04) - "5DE234656056DFDAAD30E4DA9FD26366", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "5DE234656056DFDAAD30E4DA9FD26366", // Lame 3.100 (Ubuntu and MacOS) "3B10B6430B2A823C58F16953F5B33E9C" // Lame 3.100 (Windows) } }, @@ -1620,8 +1629,7 @@ public static class EncodeValidFileDataSource }, new[] { - "30520C93D354F17F637671B99BE75083", // Lame 3.99.5 (Ubuntu 16.04) - "2BBC83E74AB1A4EB150BC6E1EB9920B5", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "2BBC83E74AB1A4EB150BC6E1EB9920B5", // Lame 3.100 (Ubuntu and MacOS) "2ACEB0816512B4300D13E9329F76D752" // Lame 3.100 (Windows) } }, @@ -1637,8 +1645,7 @@ public static class EncodeValidFileDataSource }, new[] { - "464C9EE0662B447224805438FAC9D10E", // Lame 3.99.5 (Ubuntu 16.04) - "BEB5029A08011BCEDFFA99173B763E7F", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "BEB5029A08011BCEDFFA99173B763E7F", // Lame 3.100 (Ubuntu and MacOS) "E9525D2505684DDB3F9FDDE7B550577E" // Lame 3.100 (Windows) } }, @@ -1654,8 +1661,7 @@ public static class EncodeValidFileDataSource }, new[] { - "9CD9C9FCE1E42F79EDBAA84BA1B8D8C4", // Lame 3.99.5 (Ubuntu 16.04) - "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu and MacOS) "54E8544993C1E818C72DE5AC00DEABF5" // Lame 3.100 (Windows) } }, @@ -1672,8 +1678,7 @@ public static class EncodeValidFileDataSource }, new[] { - "9CD9C9FCE1E42F79EDBAA84BA1B8D8C4", // Lame 3.99.5 (Ubuntu 16.04) - "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu and MacOS) "54E8544993C1E818C72DE5AC00DEABF5" // Lame 3.100 (Windows) } }, @@ -1690,8 +1695,7 @@ public static class EncodeValidFileDataSource }, new[] { - "5BE352395ADE20729E8F68977C3043C7", // Lame 3.99.5 (Ubuntu 16.04) - "EACCA2FD6404ACA1AB46027FAE6A667B", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "EACCA2FD6404ACA1AB46027FAE6A667B", // Lame 3.100 (Ubuntu and MacOS) "AAE7CB7E1E4EAAF5ED19F8B986647298" // Lame 3.100 (Windows) } }, @@ -1707,8 +1711,7 @@ public static class EncodeValidFileDataSource }, new[] { - "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04) - "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS) "EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows) } }, @@ -1725,8 +1728,7 @@ public static class EncodeValidFileDataSource }, new[] { - "9CD9C9FCE1E42F79EDBAA84BA1B8D8C4", // Lame 3.99.5 (Ubuntu 16.04) - "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu and MacOS) "54E8544993C1E818C72DE5AC00DEABF5" // Lame 3.100 (Windows) } }, @@ -1742,8 +1744,7 @@ public static class EncodeValidFileDataSource }, new[] { - "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04) - "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS) + "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS) "EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows) } }, @@ -1759,10 +1760,8 @@ public static class EncodeValidFileDataSource }, new[] { - "59CF1B3F6C08A8185613B375B3846ECD", // Lame 3.99.5 (Legacy .NET on Ubuntu 16.04) - "6847664CB1935E396A9DB6F12462431F", // Lame 3.99.5 (.NET Core 3.0+ on Ubuntu 16.04) - "8D5A9BA2D974BCDEFB50A3DA7E134335", // Lame 3.100 (Legacy .NET on Ubuntu 18.04 / 20.04 and MacOS) - "49CB061F4DE93D7F88D3B656458C7003", // Lame 3.100 (.NET Core 3.0+ on Ubuntu 18.04 / 20.04 and MacOS) + "8D5A9BA2D974BCDEFB50A3DA7E134335", // Lame 3.100 (MacOS) + "49CB061F4DE93D7F88D3B656458C7003", // Lame 3.100 (Ubuntu) "3AE3B2DA82CE86ABDA69CFBB06EBDB6E", // Lame 3.100 (Legacy .NET on Windows) "F3F89801873BDC7D9E403C160051B457" // Lame 3.100 (.NET Core 3.0+ on Windows) } @@ -1779,10 +1778,8 @@ public static class EncodeValidFileDataSource }, new[] { - "2D46634044D9B9FE8154B27B4E268E64", // Lame 3.99.5 (Legacy .NET on Ubuntu 16.04) - "F12EE18E94A5FAC3BA8933A8D429B76D", // Lame 3.99.5 (.NET Core 3.0+ on Ubuntu 16.04) - "94E8EF913253B83D35E760A8C81C18BA", // Lame 3.100 (Legacy .NET on Ubuntu 18.04 / 20.04 and MacOS) - "E804988EFC1EA58704E6C78B42CE1DF6", // Lame 3.100 (.NET Core 3.0+ on Ubuntu 18.04 / 20.04 and MacOS) + "94E8EF913253B83D35E760A8C81C18BA", // Lame 3.100 (MacOS) + "E804988EFC1EA58704E6C78B42CE1DF6", // Lame 3.100 (Ubuntu) "85C1262D46F863436B5C55B71C8C0B31", // Lame 3.100 (Legacy .NET on Windows) "026C2587049104F0FFF72EB8E49F87AB" // Lame 3.100 (.NET Core 3.0+ on Windows) } @@ -1803,7 +1800,8 @@ public static class EncodeValidFileDataSource new[] { "00502CA1BD9BE8137FCF75518D8EC5AC", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu) - "2BEFC8DFC5C86F305FBB1126CC2B2D0D", // Vorbis 1.3.7 (MacOS) + "2BEFC8DFC5C86F305FBB1126CC2B2D0D", // Vorbis 1.3.7 (MacOS on Intel) + "F187C28A4A37DF469CF96EBC8565CC21", // Vorbis 1.3.7 (MacOS on ARM) "E6FBBBCE3847BC9C9EB45A89A7D7DDA6" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -1820,7 +1818,8 @@ public static class EncodeValidFileDataSource { "1A3784BD4B5A5F7324F0F19119EC8829", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "EFC7217481D26BB0828C6E4BE7D2D414", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "E8B8006C5EC2A3D50555B85F367F4922", // Vorbis 1.3.7 (MacOS) + "E8B8006C5EC2A3D50555B85F367F4922", // Vorbis 1.3.7 (MacOS on Intel) + "4759435E55E2DF81B20F6DD929330EE5", // Vorbis 1.3.7 (MacOS on ARM) "62C6F8889AA6CBE4A80750EFF33D9FDA", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "3C12BC37F57BB2C4542A92ABD52EA27D" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) } @@ -1838,7 +1837,8 @@ public static class EncodeValidFileDataSource { "F041B26255F501A83ECD8C6C7EBCE55D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "C2C9FE067F40025DDF41B868350F28A5", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS) + "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS on Intel) + "E912A2A65C6272335DF116937A0549A6", // Vorbis 1.3.7 (MacOS on ARM) "57E0997F13613A8C64306230A031D912" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -1855,7 +1855,8 @@ public static class EncodeValidFileDataSource { "AA03C92A5ED981484D17EA96D87B9331", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "BDCF3199D9F7457000B8D2BDFB757579", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "6D4108CB330E72038EA67B4D7B335AF9", // Vorbis 1.3.7 (MacOS) + "6D4108CB330E72038EA67B4D7B335AF9", // Vorbis 1.3.7 (MacOS on Intel) + "C1D824314622416360560019BD79F519", // Vorbis 1.3.7 (MacOS on ARM) "A75601BC8CABA65EADD866211A1EF536" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -1872,7 +1873,8 @@ public static class EncodeValidFileDataSource { "5C6A8AC9FE704864E8ABC4F1654F65D7", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "F796497F75425D1928C66B88F3F24232", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "239E03B5B24AA65E6335303DF50FB3A2", // Vorbis 1.3.7 (MacOS) + "239E03B5B24AA65E6335303DF50FB3A2", // Vorbis 1.3.7 (MacOS on Intel) + "2A14B596BBE04A8391249A4276753F10", // Vorbis 1.3.7 (MacOS on ARM) "5EF3AF9F00AB434F1A0A08482DE2C0DE" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -1889,7 +1891,8 @@ public static class EncodeValidFileDataSource { "9153B9D26FA0A06AD1515B5660055CA3", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "6DD98044F88A9535595D2B2D16D1A787", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "D48672C42031B4419ADC0F420D503A47", // Vorbis 1.3.7 (MacOS) + "D48672C42031B4419ADC0F420D503A47", // Vorbis 1.3.7 (MacOS on Intel) + "2C8DB7597ED25C3494B89E5FBCC75508", // Vorbis 1.3.7 (MacOS on ARM) "DB770934E3E57E832BFFA1C1C85E065F" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -1906,7 +1909,8 @@ public static class EncodeValidFileDataSource { "9A93109BCB1025791DCA8B63E9EFE3B6", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "3E40EB8AEB86CA5E3C76525E1E03D0FD", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "4721899D9DDAF7394B1A679F753F81CF", // Vorbis 1.3.7 (MacOS) + "4721899D9DDAF7394B1A679F753F81CF", // Vorbis 1.3.7 (MacOS on Intel) + "856219EF1D9C77A64FE0994B7373C848", // Vorbis 1.3.7 (MacOS on ARM) "4E69AF464154872795B7AD87BA762870", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "38EB06F6C7055EC41221129C2440E823" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) } @@ -1924,7 +1928,8 @@ public static class EncodeValidFileDataSource { "91ADF87CA8AE3D1669EA65D30BB083D8", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "19AF57343851DC074CDD23039C577BC2", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "F6D78BE21567DD9244848160A2BD3889", // Vorbis 1.3.7 (MacOS) + "F6D78BE21567DD9244848160A2BD3889", // Vorbis 1.3.7 (MacOS on Intel) + "ED7CAFD6D69FFF643E01219D1E9696E7", // Vorbis 1.3.7 (MacOS on ARM) "AB097FDBAA6B8516129A17ED1C5BDC21" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -1939,10 +1944,12 @@ public static class EncodeValidFileDataSource }, new[] { - "0AA286B6A6896263E9182853FFA2DD52", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) - "8A4B07CF14C30DF85BCBDCD91A597424", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "AD172F94045E0970A71F8C439EEEA6C9", // Vorbis 1.3.7 (MacOS) - "F25060DBEAB99B219CDB5EC54D37AD1C" // Vorbis 1.3.7 AoTuV + Lancer (Windows) + "67F854EBB448041C99902D721EB029C0", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) + "BD1777F28C923D15E00840C2725EB14A", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) + "AD172F94045E0970A71F8C439EEEA6C9", // Vorbis 1.3.7 (MacOS on Intel) + "CD4B255CDC3C689C8A2242FDE5F912C7", // Vorbis 1.3.7 (MacOS on ARM) + "F25060DBEAB99B219CDB5EC54D37AD1C", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows) + "CCC19FAB9648FAF81A46A0A55C0E0F1D" // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Windows) } }, @@ -1958,7 +1965,8 @@ public static class EncodeValidFileDataSource { "0AA286B6A6896263E9182853FFA2DD52", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "8A4B07CF14C30DF85BCBDCD91A597424", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "AD172F94045E0970A71F8C439EEEA6C9", // Vorbis 1.3.7 (MacOS) + "AD172F94045E0970A71F8C439EEEA6C9", // Vorbis 1.3.7 (MacOS on Intel) + "CD4B255CDC3C689C8A2242FDE5F912C7", // Vorbis 1.3.7 (MacOS on ARM) "F25060DBEAB99B219CDB5EC54D37AD1C" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -1976,7 +1984,8 @@ public static class EncodeValidFileDataSource { "ABC75E49AF00624847D66A441068199F", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "8EB74661170103394BB0737E102B978A", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "88C186B7AA3DC3A55CD430FFF8AADCB1", // Vorbis 1.3.7 (MacOS) + "88C186B7AA3DC3A55CD430FFF8AADCB1", // Vorbis 1.3.7 (MacOS on Intel) + "E7BE0862210C0010541BE605901D4A6D", // Vorbis 1.3.7 (MacOS on ARM) "8224BAEA06E788DF37EFC01CCCD479C8" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -1994,7 +2003,8 @@ public static class EncodeValidFileDataSource { "9B499871B3788480810EB00DDF08054F", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "171C2CA1CDB8C004B15A4D1D6C2C7375", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "74D8326F97A08EBCCC7FF754FE37464F", // Vorbis 1.3.7 (MacOS) + "74D8326F97A08EBCCC7FF754FE37464F", // Vorbis 1.3.7 (MacOS on Intel) + "9DEA359E04D151021DC995764B8C428E", // Vorbis 1.3.7 (MacOS on ARM) "C77B164D4E60453D679F35551FD3BF02" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -2013,7 +2023,8 @@ public static class EncodeValidFileDataSource { "F041B26255F501A83ECD8C6C7EBCE55D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "C2C9FE067F40025DDF41B868350F28A5", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS) + "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS on Intel) + "E912A2A65C6272335DF116937A0549A6", // Vorbis 1.3.7 (MacOS on ARM) "57E0997F13613A8C64306230A031D912" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -2032,7 +2043,8 @@ public static class EncodeValidFileDataSource { "E3B0B6AE0805022FAA88EC50199E9D05", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "DFDCDBBC24E1DC2EE1411CE40D7DF3FE", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "9DEF0BAB12400A25E06EA7CA8C32CCC6", // Vorbis 1.3.7 (MacOS) + "9DEF0BAB12400A25E06EA7CA8C32CCC6", // Vorbis 1.3.7 (MacOS on Intel) + "483C59AF294602813322BFF28BF554A5", // Vorbis 1.3.7 (MacOS on ARM) "79C966C3D6728C49723640C0D7B9330B", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "55B7584D23DE2667374ABB9C3C571875" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) @@ -2053,7 +2065,8 @@ public static class EncodeValidFileDataSource { "08A958E00D3797F33ABB2F098556DE43", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "EC722CED6079EC8609552686C911FFFE", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "1C21FEE55AC987FE8ACA1865353DC833", // Vorbis 1.3.7 (MacOS) + "1C21FEE55AC987FE8ACA1865353DC833", // Vorbis 1.3.7 (MacOS on Intel) + "25AEE91A747018638A34DC630D24B3FC", // Vorbis 1.3.7 (MacOS on ARM) "4B2B694BD0D42994F4A1911FBCB2ABF8", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "9E45D7B37055FD59650839F5BEAB1ED0" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) } @@ -2072,7 +2085,8 @@ public static class EncodeValidFileDataSource new[] { "749518EA6F95A089787DD414855DDBC0", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu) - "68B19B197BDAFA73A45EBF67CD961CA9", // Vorbis 1.3.7 (MacOS) + "68B19B197BDAFA73A45EBF67CD961CA9", // Vorbis 1.3.7 (MacOS on Intel) + "1CBA6651221C34E9ECDB314A653D05E0", // Vorbis 1.3.7 (MacOS on ARM) "CAEAE4C932830A8C0A41BC5C79DC80D5", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "53E545072EC0FDA11D100BA1DE9EBC0A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) } @@ -2092,7 +2106,8 @@ public static class EncodeValidFileDataSource { "0E233828AF5FD1010188AC4C63DF40BC", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "057D14E2F3F8C9F2FD44EE29222A7BD3", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "D37BB84F2008B1B467D54C618495C4CE", // Vorbis 1.3.7 (MacOS) + "D37BB84F2008B1B467D54C618495C4CE", // Vorbis 1.3.7 (MacOS on Intel) + "9631DB55B39F79E82ECC05E27EE8928B", // Vorbis 1.3.7 (MacOS on ARM) "215FA0E953F4BB520A46A3B44B68CC92", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "8E0D0279037DC9DCC286050A2930427A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) } @@ -2111,7 +2126,8 @@ public static class EncodeValidFileDataSource new[] { "70ECB3839EC4DC7A7ECEA48241E2407D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu) - "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS) + "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS on Intel) + "5008E6BEB9E483B5190D778129D5C1C4", // Vorbis 1.3.7 (MacOS on ARM) "84E389F08890621CF00AF8DD2D7C77DB", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "EC75AF6E1F0EFEA7E87ED7B40EFA415A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) } @@ -2131,7 +2147,8 @@ public static class EncodeValidFileDataSource new[] { "70ECB3839EC4DC7A7ECEA48241E2407D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu) - "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS) + "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS on Intel) + "5008E6BEB9E483B5190D778129D5C1C4", // Vorbis 1.3.7 (MacOS on ARM) "84E389F08890621CF00AF8DD2D7C77DB", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "EC75AF6E1F0EFEA7E87ED7B40EFA415A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) } @@ -2151,7 +2168,8 @@ public static class EncodeValidFileDataSource new[] { "E67F4AB32814D96B1BA65652E5E11E56", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu) - "D23564C9639B7C6490E59163C37B9C83", // Vorbis 1.3.7 (MacOS) + "D23564C9639B7C6490E59163C37B9C83", // Vorbis 1.3.7 (MacOS on Intel) + "D4974D63DD5B7326BD2143801C3DC610", // Vorbis 1.3.7 (MacOS on ARM) "C84819FCFA2F25FCDB3E5490E54949B4", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "3FA511E9C941DFB1E61A98418C27F383" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) } @@ -2171,7 +2189,8 @@ public static class EncodeValidFileDataSource { "F041B26255F501A83ECD8C6C7EBCE55D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "C2C9FE067F40025DDF41B868350F28A5", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS) + "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS on Intel) + "E912A2A65C6272335DF116937A0549A6", // Vorbis 1.3.7 (MacOS on ARM) "57E0997F13613A8C64306230A031D912" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -2190,7 +2209,8 @@ public static class EncodeValidFileDataSource new[] { "70ECB3839EC4DC7A7ECEA48241E2407D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu) - "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS) + "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS on Intel) + "5008E6BEB9E483B5190D778129D5C1C4", // Vorbis 1.3.7 (MacOS on ARM) "84E389F08890621CF00AF8DD2D7C77DB", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel) "EC75AF6E1F0EFEA7E87ED7B40EFA415A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD) } @@ -2210,7 +2230,8 @@ public static class EncodeValidFileDataSource { "F041B26255F501A83ECD8C6C7EBCE55D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) "C2C9FE067F40025DDF41B868350F28A5", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) - "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS) + "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS on Intel) + "E912A2A65C6272335DF116937A0549A6", // Vorbis 1.3.7 (MacOS on ARM) "57E0997F13613A8C64306230A031D912" // Vorbis 1.3.7 AoTuV + Lancer (Windows) } }, @@ -2227,10 +2248,9 @@ public static class EncodeValidFileDataSource }, new[] { - "D6BF90169A6D394B23371A5AAF12A69F", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Ubuntu) - "39443EC16B23C3B5159CD199E83AD092", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Ubuntu) - "3DBC6BF05744F40C44AB21C155138EC9", // Vorbis 1.3.7 (Legacy .NET on MacOS) - "466D9535B74B53EA088F13FF9720268C", // Vorbis 1.3.7 (.NET Core 3.0+ on MacOS) + "39443EC16B23C3B5159CD199E83AD092", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu) + "466D9535B74B53EA088F13FF9720268C", // Vorbis 1.3.7 (MacOS on Intel) + "A637C5C3C53C717092D518B1F47963D5", // Vorbis 1.3.7 (MacOS on ARM) "CE264095289A42A1FB038E6F44D5F007", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows / Intel) "E698F1678A8FBC0A6834B6E7230743DA", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows / AMD) "805F62BDFE149898E21C9448F4335BAC", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Windows / Intel) @@ -2250,12 +2270,10 @@ public static class EncodeValidFileDataSource }, new[] { - "069711A99437B82EDC84B24E0E26E08A", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Ubuntu / Intel) - "2C7D651E3D4CE104E4E53477F5FB783A", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Ubuntu / AMD) - "7FF678CC731484D0B16E7FC01301EE7E", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Ubuntu / Intel) - "9F4297E686E3A938051AB8C753476521", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Ubuntu / AMD) - "5CBDD488A7EB6D4C237AFBEFAD89BDFA", // Vorbis 1.3.7 (Legacy .NET on MacOS) - "488A2980F20619FE0206CFBB1767CBAC", // Vorbis 1.3.7 (.NET Core 3.0+ on MacOS) + "7FF678CC731484D0B16E7FC01301EE7E", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel) + "9F4297E686E3A938051AB8C753476521", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD) + "488A2980F20619FE0206CFBB1767CBAC", // Vorbis 1.3.7 (MacOS on Intel) + "8F7096C15F10B9EB3CA0DFA0E044877E", // Vorbis 1.3.7 (MacOS on ARM) "4BCFD0F13F55B657F36304BBE3F41D39", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows / Intel) "F4C820158442E1ECEEBBCEFF42855E5F", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows / AMD) "34BA39848B7D78D7FE1D2B30999DF6A9", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Windows / Intel) @@ -2277,9 +2295,10 @@ public static class EncodeValidFileDataSource }, new[] { - "D085A7142C47B6898B3CCB6C5EDCBA55", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "D085A7142C47B6898B3CCB6C5EDCBA55", // Opus 1.1.2 (Ubuntu 18.04) "5E705C21EEB25418F69F54E33CF65156", // Opus 1.3.1 (Ubuntu 20.04) - "2D31A0D707D3A9AB865DB00095EB08AE", // Opus 1.3.1 (MacOS) + "2D31A0D707D3A9AB865DB00095EB08AE", // Opus 1.3.1 (MacOS on Intel) + "FB641D1DA3D800E22BD22C7983D83325", // Opus 1.3.1 (MacOS on ARM) "8BB7F2763D133BD534AE9C20104AFA2E", // Opus 1.3.1 (32-bit Windows on Intel) "6FB30E2C70A48F63A6596FCDE747E47A", // Opus 1.3.1 (32-bit Windows on AMD) "05B065E87CE35617089DC8A86ED5AD19", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2297,9 +2316,10 @@ public static class EncodeValidFileDataSource }, new[] { - "46B412FA052C97474B60DDDCF2CA8052", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "46B412FA052C97474B60DDDCF2CA8052", // Opus 1.1.2 (Ubuntu 18.04) "E170CC2F31A402071E26892426AEC65B", // Opus 1.3.1 (Ubuntu 20.04) - "C22E87F617B51970785E9A4C43C9FC48", // Opus 1.3.1 (MacOS) + "C22E87F617B51970785E9A4C43C9FC48", // Opus 1.3.1 (MacOS on Intel) + "86C499288EADAAB469F3E7FA63628AD1", // Opus 1.3.1 (MacOS on ARM) "BE719CEBED7270CD6DC580007E20D5F2", // Opus 1.3.1 (32-bit Windows on Intel) "B68DA72E32DD0B6A89138679E8716876", // Opus 1.3.1 (32-bit Windows on AMD) "C8C92433A8093BB8C7AE3AE6F84653B3" // Opus 1.3.1 (64-bit Windows) @@ -2316,9 +2336,10 @@ public static class EncodeValidFileDataSource }, new[] { - "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 18.04) "9DA2DC35F1B9FBC9FAEF343788BB9E41", // Opus 1.3.1 (Ubuntu 20.04) - "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS) + "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS on Intel) + "DF1CE487259E093896FB4BDB74A6B1E3", // Opus 1.3.1 (MacOS on ARM) "3CAB512976D0D62B45E2C9239B19735D", // Opus 1.3.1 (32-bit Windows on Intel) "63CCEA9D4CF6847E5D6D29245372E93D", // Opus 1.3.1 (32-bit Windows on AMD) "F82CC6FE2C86F5E7CD4A4F8F634E2DE9", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2336,11 +2357,11 @@ public static class EncodeValidFileDataSource }, new[] { - "C9024DED60E2039752C7B372DFFC7149", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) - "BD5F090F921BCC80F05FCBF5725D8E0E", // Opus 1.3.1 (Ubuntu 20.04 and MacOS) + "C9024DED60E2039752C7B372DFFC7149", // Opus 1.1.2 (Ubuntu 18.04) + "BD5F090F921BCC80F05FCBF5725D8E0E", // Opus 1.3.1 (Windows, Ubuntu 20.04 and MacOS on Intel) + "5074AE45A08E36CAF8FC0AB1B50F117C", // Opus 1.3.1 (MacOS on ARM) "3C5EF551E97AEE3A916F1B39BCD5D3C2", // Opus 1.3.1 (32-bit Windows on Intel) "B9B4ECB9629E3DCA58EC09AC5560A1F9", // Opus 1.3.1 (32-bit Windows on AMD) - "BD5F090F921BCC80F05FCBF5725D8E0E", // Opus 1.3.1 (64-bit Windows on Intel) "FDE97144EB743A401CD274613B32D085" // Opus 1.3.1 (64-bit Windows on AMD) } }, @@ -2355,9 +2376,10 @@ public static class EncodeValidFileDataSource }, new[] { - "22AA639A1AA309F9C343F8D8EBDB1B6D", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "22AA639A1AA309F9C343F8D8EBDB1B6D", // Opus 1.1.2 (Ubuntu 18.04) "F7CB34EAF50E121D9474AE51E43BBB5B", // Opus 1.3.1 (Ubuntu 20.04) - "8A8FA9C452D9EBBCF8554EE3E270A538", // Opus 1.3.1 (MacOS) + "8A8FA9C452D9EBBCF8554EE3E270A538", // Opus 1.3.1 (MacOS on Intel) + "FC74891978B6213CDF3807C6D0130E82", // Opus 1.3.1 (MacOS on ARM) "9E31F9F58A41EA377740E7AC43E57939", // Opus 1.3.1 (32-bit Windows on Intel) "6D4CD77579FC6041A28997D9A409DCB4", // Opus 1.3.1 (32-bit Windows on AMD) "D0FC8A33EE164AC29D79435A4ED779B1", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2375,8 +2397,10 @@ public static class EncodeValidFileDataSource }, new[] { - "64C832F3C0D8A175084FB138D0A3525D", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) - "CD27FFC8398F52FB2F5984085D2215AC", // Opus 1.3.1 (Ubuntu 20.04 and MacOS) + "64C832F3C0D8A175084FB138D0A3525D", // Opus 1.1.2 (Ubuntu 18.04) + "CD27FFC8398F52FB2F5984085D2215AC", // Opus 1.3.1 (MacOS and Ubuntu 20.04 on Intel) + "2018DEFDE09A503E0734CD57B0E19FC4", // Opus 1.3.1 (Ubuntu 20.04 on AMD) + "4190DC99A4B49887AA3E5BC9E15DC1C8", // Opus 1.3.1 (MacOS on ARM) "F06773DFABF471946AF2B3D55E881795", // Opus 1.3.1 (32-bit Windows on Intel) "B540644D968E93C4EF7BA2BE7C84A5AA", // Opus 1.3.1 (32-bit Windows on AMD) "AA2881B010E43964FC90B6DB03BCA969", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2394,8 +2418,10 @@ public static class EncodeValidFileDataSource }, new[] { - "852C615283FA436C87460A6DD0A5ABE5", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) - "9ED53495B32D47496C1C88B75D2FEF5F", // Opus 1.3.1 (Ubuntu 20.04 and MacOS) + "852C615283FA436C87460A6DD0A5ABE5", // Opus 1.1.2 (Ubuntu 18.04) + "9ED53495B32D47496C1C88B75D2FEF5F", // Opus 1.3.1 (MacOS and Ubuntu 20.04 on Intel) + "EF85B330CBC8A8931C2827A81F2E1532", // Opus 1.3.1 (Ubuntu 20.04 on AMD) + "5A928AED6645BDF1A8CBA3C2EEB7E90F", // Opus 1.3.1 (MacOS on ARM) "86E35D927296E4954BAE384D4B28F247", // Opus 1.3.1 (32-bit Windows on Intel) "84171D7E57590C886785D15C4E89D14E", // Opus 1.3.1 (32-bit Windows on AMD) "143CFA3D5684C47EC62A5BEE19B59493", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2413,9 +2439,10 @@ public static class EncodeValidFileDataSource }, new[] { - "1B7298B4EA52190612430642D2CD0694", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "1B7298B4EA52190612430642D2CD0694", // Opus 1.1.2 (Ubuntu 18.04) "5A2C444BCD2F8D898E369DFA78D2336D", // Opus 1.3.1 (Ubuntu 20.04) - "5501D7D9730B0722C310D5263AFBEB77", // Opus 1.3.1 (MacOS) + "5501D7D9730B0722C310D5263AFBEB77", // Opus 1.3.1 (MacOS on Intel) + "CB28DA52EF8451F944D8ED642D438292", // Opus 1.3.1 (MacOS on ARM) "ED5EA746CA5182DE57E0D25695D17F4E", // Opus 1.3.1 (32-bit Windows on Intel) "F6AE6DD4A2E565AD94622055C7DD2DD6", // Opus 1.3.1 (32-bit Windows on AMD) "E59BFB7E77545D36723E7B8EB5AF1B48", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2433,13 +2460,18 @@ public static class EncodeValidFileDataSource }, new[] { - "476D30594189602BF6E4755E990D0615", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) - "E170CC2F31A402071E26892426AEC65B", // Opus 1.3.1 (Ubuntu 20.04) - "0ADBC105EA51C62CB1ED53B978B33415", // Opus 1.3.1 (MacOS) + "E497EF951D153E53CD3B2C3D84E5851C", // Opus 1.1.2 (Ubuntu 18.04) + "F11DE8AF370B04150CBF6E08FA1E2045", // Opus 1.3.1 (Ubuntu 20.04 on Intel) + "AFE05CB9E10ECE0CE4A267B01E91AA7C", // Opus 1.3.1 (Ubuntu 20.04 on AMD) + "0ADBC105EA51C62CB1ED53B978B33415", // Opus 1.3.1 (MacOS on Intel) + "2D7ABAB485382CFA8AD0DA8437304185", // Opus 1.3.1 (MacOS on ARM) "17D464F4D94C17DD99AC0017BAB9228F", // Opus 1.3.1 (32-bit Windows on Intel) - "37FAD87A9C5A0E42FEEBE2B5CC5547DF", // Opus 1.3.1 (32-bit Windows on AMD) - "B52AE38B2D30A7ADE63492CCB2F000EC", // Opus 1.3.1 (64-bit Windows on Intel) - "285F9F24FA0B405F86C61AC20BE81333" // Opus 1.3.1 (64-bit Windows on AMD) + "37FAD87A9C5A0E42FEEBE2B5CC5547DF", // Opus 1.3.1 (Legacy .NET on 32-bit Windows / AMD) + "B6CB931B6AE4304D77B9D327A330EF68", // Opus 1.3.1 (.NET Core 3.0+ on 32-bit Windows / AMD) + "B52AE38B2D30A7ADE63492CCB2F000EC", // Opus 1.3.1 (Legacy .NET on 64-bit Windows / Intel) + "58FBBA36C5E504D4BD93C427C369DB0A", // Opus 1.3.1 (.NET Core 3.0+ on 64-bit Windows / Intel) + "285F9F24FA0B405F86C61AC20BE81333", // Opus 1.3.1 (Legacy .NET on 64-bit Windows / AMD) + "634496B42A479B6EA9CDD37D2EC96823" // Opus 1.3.1 (.NET Core 3.0+ on 64-bit Windows / AMD) } }, @@ -2453,9 +2485,10 @@ public static class EncodeValidFileDataSource }, new[] { - "476D30594189602BF6E4755E990D0615", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "476D30594189602BF6E4755E990D0615", // Opus 1.1.2 (Ubuntu 18.04) "E170CC2F31A402071E26892426AEC65B", // Opus 1.3.1 (Ubuntu 20.04) - "0ADBC105EA51C62CB1ED53B978B33415", // Opus 1.3.1 (MacOS) + "0ADBC105EA51C62CB1ED53B978B33415", // Opus 1.3.1 (MacOS on Intel) + "2D7ABAB485382CFA8AD0DA8437304185", // Opus 1.3.1 (MacOS on ARM) "17D464F4D94C17DD99AC0017BAB9228F", // Opus 1.3.1 (32-bit Windows on Intel) "37FAD87A9C5A0E42FEEBE2B5CC5547DF", // Opus 1.3.1 (32-bit Windows on AMD) "B52AE38B2D30A7ADE63492CCB2F000EC", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2474,9 +2507,10 @@ public static class EncodeValidFileDataSource }, new[] { - "DE6D30BCAC9DA6340DA28542E75C5E01", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "DE6D30BCAC9DA6340DA28542E75C5E01", // Opus 1.1.2 (Ubuntu 18.04) "503CA160DEC071D27F058FAE56273C29", // Opus 1.3.1 (Ubuntu 20.04) - "CDE65307AACEA4F40F22FF925622D14E", // Opus 1.3.1 (MacOS) + "CDE65307AACEA4F40F22FF925622D14E", // Opus 1.3.1 (MacOS on Intel) + "F2FDC3B2D196D551919F3FC85120DA15", // Opus 1.3.1 (MacOS on ARM) "0E458849DBB876C84D23FA8B1AE58E7D", // Opus 1.3.1 (32-bit Windows on Intel) "7BB78CF68981EC0D8A4FF3006F9D56D9", // Opus 1.3.1 (32-bit Windows on AMD) "3804E9A98DDBD216A3AED6F638C5644E", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2495,9 +2529,10 @@ public static class EncodeValidFileDataSource }, new[] { - "D0DB0EE3ABC3950E3009663461F631DB", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "D0DB0EE3ABC3950E3009663461F631DB", // Opus 1.1.2 (Ubuntu 18.04) "E83E5634833A567959243B09B9AF666B", // Opus 1.3.1 (Ubuntu 20.04) - "3AA89123958BA0DF1611539BC909DD0B", // Opus 1.3.1 (MacOS) + "3AA89123958BA0DF1611539BC909DD0B", // Opus 1.3.1 (MacOS on Intel) + "A7F53EB258E068E6B9B6C6A1D756E342", // Opus 1.3.1 (MacOS on ARM) "049CE3FC2614A25BDE9E311CCEC4E995", // Opus 1.3.1 (32-bit Windows on Intel) "2D4B0717D5E4BA6494A5A50131FABB2E", // Opus 1.3.1 (32-bit Windows on AMD) "5480E19A91B0DC0891094B43168FA839", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2517,7 +2552,7 @@ public static class EncodeValidFileDataSource }, new[] { - "7556A3E6FF92CEF2D0ECD5654322DEAB", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "7556A3E6FF92CEF2D0ECD5654322DEAB", // Opus 1.1.2 (Ubuntu 18.04) "1F81AFD1976BAB56F31A4599A8AD8FF1", // Opus 1.3.1 (Ubuntu 20.04 and MacOS) "FC89452B5F0EA49E3D738CE67FBF8B1C", // Opus 1.3.1 (32-bit Windows) "D345EE9B84E231E3ACB17C7AC0972154" // Opus 1.3.1 (64-bit Windows) @@ -2536,9 +2571,10 @@ public static class EncodeValidFileDataSource }, new[] { - "C031F42E8AF2D482E302264E132502E1", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "C031F42E8AF2D482E302264E132502E1", // Opus 1.1.2 (Ubuntu 18.04) "2DBEDA9428C2522EFF60481B5446FA47", // Opus 1.3.1 (Ubuntu 20.04) - "785D39E686216F4958B8103B62E9E321", // Opus 1.3.1 (MacOS) + "785D39E686216F4958B8103B62E9E321", // Opus 1.3.1 (MacOS on Intel) + "4F1E3A4F58E62CB2F9DF5D0C3AED689D", // Opus 1.3.1 (MacOS on ARM) "6B422669A0FCB242E0E15204F5FDCC47", // Opus 1.3.1 (32-bit Windows on Intel) "DFF654F2AF639F992FA9BC378F80FE20", // Opus 1.3.1 (32-bit Windows on AMD) "4A9455EB95B3C9CBCB2538D0C888267D", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2558,9 +2594,10 @@ public static class EncodeValidFileDataSource }, new[] { - "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 18.04) "9DA2DC35F1B9FBC9FAEF343788BB9E41", // Opus 1.3.1 (Ubuntu 20.04) - "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS) + "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS on Intel) + "DF1CE487259E093896FB4BDB74A6B1E3", // Opus 1.3.1 (MacOS on ARM) "3CAB512976D0D62B45E2C9239B19735D", // Opus 1.3.1 (32-bit Windows on Intel) "63CCEA9D4CF6847E5D6D29245372E93D", // Opus 1.3.1 (32-bit Windows on AMD) "F82CC6FE2C86F5E7CD4A4F8F634E2DE9", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2580,9 +2617,10 @@ public static class EncodeValidFileDataSource }, new[] { - "940955E239CF3D26B417F6B532EBC726", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "940955E239CF3D26B417F6B532EBC726", // Opus 1.1.2 (Ubuntu 18.04) "713E85741D7499561FA4424B5EF74EE7", // Opus 1.3.1 (Ubuntu 20.04) - "B98AC6052E465C5A226D8D2905B535EC", // Opus 1.3.1 (MacOS) + "B98AC6052E465C5A226D8D2905B535EC", // Opus 1.3.1 (MacOS on Intel) + "532F344E999193C4F59D1CDBF511C7DE", // Opus 1.3.1 (MacOS on ARM) "38E90E75D928371AB9C1CFF243C731B4", // Opus 1.3.1 (32-bit Windows on Intel) "7DB85D28D9AEF13C7D8BAB7578EC3019", // Opus 1.3.1 (32-bit Windows on AMD) "E0219613A0740FACAAC162D7B9FD0517", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2602,9 +2640,10 @@ public static class EncodeValidFileDataSource }, new[] { - "9533FF6E154EE45B8ED522C3B5A25865", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "9533FF6E154EE45B8ED522C3B5A25865", // Opus 1.1.2 (Ubuntu 18.04) "9948DAE5FCE1CF7D6298C293E3D71B0F", // Opus 1.3.1 (Ubuntu 20.04) - "687B2402BF33EDB0EAD683235E309BC8", // Opus 1.3.1 (MacOS) + "687B2402BF33EDB0EAD683235E309BC8", // Opus 1.3.1 (MacOS on Intel) + "D9E874A3511506C2A8021FF77DEAED23", // Opus 1.3.1 (MacOS on ARM) "0A4FC1F40FD76797222FC8CACCA83AD9", // Opus 1.3.1 (32-bit Windows on Intel) "15F2F64E2FD60C135DE87B563DA028DF", // Opus 1.3.1 (32-bit Windows on AMD) "F3CF4988FB774A297832863156B8ED8D", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2624,8 +2663,9 @@ public static class EncodeValidFileDataSource }, new[] { - "201BD7EF36658DB3DC9658C67E9AF71E", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) - "8FC7BCF02EDB42E9785797FD2C9A71D6", // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows / Intel) + "201BD7EF36658DB3DC9658C67E9AF71E", // Opus 1.1.2 (Ubuntu 18.04) + "B1D166A87EF5F03FDC80E8571B9FC70E", // Opus 1.3.1 (MacOS on ARM) + "8FC7BCF02EDB42E9785797FD2C9A71D6", // Opus 1.3.1 (MacOS, Ubuntu 20.04 and Windows on Intel) "BD1629D7E9272CAA8AEAC20FD576B7C6" // Opus 1.3.1 (Windows on AMD) } }, @@ -2643,8 +2683,9 @@ public static class EncodeValidFileDataSource }, new[] { - "201BD7EF36658DB3DC9658C67E9AF71E", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) - "8FC7BCF02EDB42E9785797FD2C9A71D6", // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows / Intel) + "201BD7EF36658DB3DC9658C67E9AF71E", // Opus 1.1.2 (Ubuntu 18.04) + "B1D166A87EF5F03FDC80E8571B9FC70E", // Opus 1.3.1 (MacOS on ARM) + "8FC7BCF02EDB42E9785797FD2C9A71D6", // Opus 1.3.1 (MacOS, Ubuntu 20.04 and Windows on Intel) "BD1629D7E9272CAA8AEAC20FD576B7C6" // Opus 1.3.1 (Windows on AMD) } }, @@ -2662,9 +2703,10 @@ public static class EncodeValidFileDataSource }, new[] { - "8AA73947B00AABCB3602F660E69263C5", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "8AA73947B00AABCB3602F660E69263C5", // Opus 1.1.2 (Ubuntu 18.04) "56A43E329A39A3CC568348116F5134F3", // Opus 1.3.1 (Ubuntu 20.04) - "84D72BBEF86EA7611518CF2862FC94BD", // Opus 1.3.1 (MacOS) + "84D72BBEF86EA7611518CF2862FC94BD", // Opus 1.3.1 (MacOS on Intel) + "3FBE634F53A90A6E5E26325A49BD20E5", // Opus 1.3.1 (MacOS on ARM) "F7583CA097F3B8D7EE50587DB0C9B883", // Opus 1.3.1 (32-bit Windows on Intel) "CE832392AA59C20C39D1C246A96E31AC", // Opus 1.3.1 (32-bit Windows on AMD) "0C29F2F289C7817FC177201ECCA21BC9", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2684,9 +2726,10 @@ public static class EncodeValidFileDataSource }, new[] { - "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 18.04) "9DA2DC35F1B9FBC9FAEF343788BB9E41", // Opus 1.3.1 (Ubuntu 20.04) - "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS) + "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS on Intel) + "DF1CE487259E093896FB4BDB74A6B1E3", // Opus 1.3.1 (MacOS on ARM) "3CAB512976D0D62B45E2C9239B19735D", // Opus 1.3.1 (32-bit Windows on Intel) "63CCEA9D4CF6847E5D6D29245372E93D", // Opus 1.3.1 (32-bit Windows on AMD) "F82CC6FE2C86F5E7CD4A4F8F634E2DE9", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2706,9 +2749,10 @@ public static class EncodeValidFileDataSource }, new[] { - "945B2B47707ED2C2DC2D30BD4AF75A34", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "945B2B47707ED2C2DC2D30BD4AF75A34", // Opus 1.1.2 (Ubuntu 18.04) "1CE1BF9EA0D643C0CDB9B8C8A1492B58", // Opus 1.3.1 (Ubuntu 20.04) - "B6029E9FC954A8722A1B10700F80EA19", // Opus 1.3.1 (MacOS) + "B6029E9FC954A8722A1B10700F80EA19", // Opus 1.3.1 (MacOS on Intel) + "A9E1172F6E94329BC82ACAD85B83F3F0", // Opus 1.3.1 (MacOS on ARM) "2B5AD4B688767C703DC63A83C3F96074", // Opus 1.3.1 (32-bit Windows on Intel) "CE9599BAE9112521A52EC0749041D72C", // Opus 1.3.1 (32-bit Windows on AMD) "AC629D5D7F3B004E75BE9F85D4B1DBD3", // Opus 1.3.1 (64-bit Windows on Intel) @@ -2728,9 +2772,10 @@ public static class EncodeValidFileDataSource }, new[] { - "2D5A8223552F6A731413BD1DD181040A", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "2D5A8223552F6A731413BD1DD181040A", // Opus 1.1.2 (Ubuntu 18.04) "5B7586B7F6F2DFCCA28E3A1D4C75690A", // Opus 1.3.1 (Ubuntu 20.04) - "EF6A93BC1F10A15E5F45255F36E90F3A", // Opus 1.3.1 (MacOS) + "EF6A93BC1F10A15E5F45255F36E90F3A", // Opus 1.3.1 (MacOS on Intel) + "8AF396D9A1F7648C2FDC7DFCC1AF35F6", // Opus 1.3.1 (MacOS on ARM) "509504BD68BD34AC79FECEA9073BAFB3", // Opus 1.3.1 (32-bit Windows on Intel) "0AF4C3DCD598108BEA2671C1B784A10F", // Opus 1.3.1 (32-bit Windows on AMD) "45911349F86066B37C0DBC7D6AC43890", // Opus 1.3.1 (64-bit Windows on Intel) diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/SaveMetadataValidFileSource.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/SaveMetadataValidFileSource.cs index 6c00b01a..66699055 100644 --- a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/SaveMetadataValidFileSource.cs +++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/SaveMetadataValidFileSource.cs @@ -56,7 +56,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "4707C81E467497975458C152234AD13F", // FLAC 1.3.1 (Ubuntu 16.04) "79528DB2721970437C6D8877F655E273", // FLAC 1.3.2 (Ubuntu 18.04) "BAE0A61EB5C4912A4793C8B259ED5633" // FLAC 1.3.3 } @@ -88,7 +87,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "8233F3397D5097D50A061504D10AA644", // FLAC 1.3.1 (Ubuntu 16.04) "B903A8E9B17014CDDB563A3CC73AB7F5", // FLAC 1.3.2 (Ubuntu 18.04) "FDB702CF53676594BDD9FBEC77F154A3" // FLAC 1.3.3 } @@ -120,7 +118,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "8233F3397D5097D50A061504D10AA644", // FLAC 1.3.1 (Ubuntu 16.04) "B903A8E9B17014CDDB563A3CC73AB7F5", // FLAC 1.3.2 (Ubuntu 18.04) "FDB702CF53676594BDD9FBEC77F154A3" // FLAC 1.3.3 } @@ -152,7 +149,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "5449B08E4A9CEB9D86B3BEA443F02662", // FLAC 1.3.1 (Ubuntu 16.04) "C830D5913F20AEF93853E1A01462708D", // FLAC 1.3.2 (Ubuntu 18.04) "A05D916A5C03E9599CBC9A9F6989FDB0" // FLAC 1.3.3 } @@ -184,7 +180,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "34B8ED1508B895CE54E48035C2F8F459", // FLAC 1.3.1 (Ubuntu 16.04) "27C19A7309E49A5B07C0AD932A7B2875", // FLAC 1.3.2 (Ubuntu 18.04) "0917BADDD895CCFD370BB222AF216E7B" // FLAC 1.3.3 } @@ -217,7 +212,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "4707C81E467497975458C152234AD13F", // FLAC 1.3.1 (Ubuntu 16.04) "79528DB2721970437C6D8877F655E273", // FLAC 1.3.2 (Ubuntu 18.04) "BAE0A61EB5C4912A4793C8B259ED5633" // FLAC 1.3.3 } @@ -253,7 +247,6 @@ public static class SaveMetadataValidFileSource }, new[] { - "C6F468D2AFF114854647623FEC1B8F8F", // FLAC 1.3.1 (Ubuntu 16.04) "4D1C0B9CD6909E81C2D5BD38A6F7CF4B", // FLAC 1.3.2 (Ubuntu 18.04) "41092DD891ABD71749834EAF571D30D5" // FLAC 1.3.3 } @@ -289,7 +282,6 @@ public static class SaveMetadataValidFileSource }, new[] { - "C8D99C071580D2C34E42B815B680A1CA", // FLAC 1.3.1 (Ubuntu 16.04) "D10242261CDBC3FF2D9BEB2C232DC1F7", // FLAC 1.3.2 (Ubuntu 18.04) "D6EF71E33501C350CD5378D55BC25D8C" // FLAC 1.3.3 } @@ -304,7 +296,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "D858D62481CDF540B881F2151C0ABB80", // FLAC 1.3.1 (Ubuntu 16.04) "3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04) "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 } @@ -319,7 +310,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "D858D62481CDF540B881F2151C0ABB80", // FLAC 1.3.1 (Ubuntu 16.04) "3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04) "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 } @@ -334,7 +324,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "86C7A296259858EC6063A3B0740D18CB", // FLAC 1.3.1 (Ubuntu 16.04) "8E3D1A13C4F9BE314C0AD61892472AC6", // FLAC 1.3.2 (Ubuntu 18.04) "1399992DC07E38EBCD3F5DB1AF48B8C3" // FLAC 1.3.3 } @@ -349,7 +338,6 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "CB279829CACD8B102E3288CA3360BC52", // FLAC 1.3.1 (Ubuntu 16.04) "F489D849B9ACD653B8986D45C487742E", // FLAC 1.3.2 (Ubuntu 18.04) "BB1A252DAA1100EA9D0B4658DE863A86" // FLAC 1.3.3 } @@ -682,7 +670,8 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "679251C0E61FC8EB10286525FE64F60F" + "679251C0E61FC8EB10286525FE64F60F", // Legacy .NET + "D0FF67DA066EAEABBF8182052A1375AE" // .NET Core 3.0+ } }, @@ -1155,7 +1144,8 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "1BF5C0A314A84C08A71E620ECFAC27FF" + "1BF5C0A314A84C08A71E620ECFAC27FF", // Legacy .NET + "10BE511C440AC14D8613B8A37E75882A" // .NET Core 3.0+ } }, @@ -1401,7 +1391,8 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "CA3A8F152FFC10FE460E6DBD2DB2F090", // Vorbis 1.3.7 AoTuV + Lancer (Windows and Ubuntu) + "CA3A8F152FFC10FE460E6DBD2DB2F090", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows and Ubuntu) + "426B4231FC7600779D8FE877B15D54CB", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Windows and Ubuntu) "36C4695F1C9FBD9E018E98FB4A132D83" // Vorbis 1.3.7 (MacOS) } }, @@ -1447,7 +1438,7 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "9A53EDE65A60F0C1684D16744E33DCFC", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "9A53EDE65A60F0C1684D16744E33DCFC", // Opus 1.1.2 (Ubuntu 18.04) "D22BBFDDCB298A427057253C4E833057" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) } }, @@ -1474,7 +1465,7 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "4A397361C11EC1FE03A43E176E673856", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "4A397361C11EC1FE03A43E176E673856", // Opus 1.1.2 (Ubuntu 18.04) "B181BB7AF0A3E37C3A262B942FD197FC" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) } }, @@ -1501,7 +1492,7 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "4A397361C11EC1FE03A43E176E673856", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "4A397361C11EC1FE03A43E176E673856", // Opus 1.1.2 (Ubuntu 18.04) "B181BB7AF0A3E37C3A262B942FD197FC" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) } }, @@ -1528,7 +1519,7 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "666B7D0315E667A3D6A943294A32BE1F", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "666B7D0315E667A3D6A943294A32BE1F", // Opus 1.1.2 (Ubuntu 18.04) "166F1DD0C71E2CCCF226157A34791E1B" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) } }, @@ -1555,7 +1546,7 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "910BF18671BC79D50FB8B9EAE8E4F0DA", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "910BF18671BC79D50FB8B9EAE8E4F0DA", // Opus 1.1.2 (Ubuntu 18.04) "8EA7FC13A2F214CADF3A1D447EF5CB65" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) } }, @@ -1583,7 +1574,7 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "86AD4DC307C9523B2C1213FE2359FDEA", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "86AD4DC307C9523B2C1213FE2359FDEA", // Opus 1.1.2 (Ubuntu 18.04) "BB50765E7DB79BDEADFC81E771101FD7" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) } }, @@ -1597,7 +1588,7 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "C2351EF6BFA1D50983183ADC6136FB9C", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "C2351EF6BFA1D50983183ADC6136FB9C", // Opus 1.1.2 (Ubuntu 18.04) "367DB09F8408583579F918061FCB6322" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) } }, @@ -1611,7 +1602,7 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "CEF9DD8611EBFEF035761B450D816E95", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "CEF9DD8611EBFEF035761B450D816E95", // Opus 1.1.2 (Ubuntu 18.04) "22D33DFB735C5B7805AB26C7A04CDA86" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) } }, @@ -1625,8 +1616,10 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "1636B4EF09C4EF2B16135E9C2670473B", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) - "CABF32D411EA5FA9458A79B6DC2C2D69" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) + "1636B4EF09C4EF2B16135E9C2670473B", // Opus 1.1.2 (Legacy .NET on Ubuntu 18.04) + "F4AFFDC5F5050965D5C62BB2C7F3D346", // Opus 1.1.2 (.NET Core 3.0+ on Ubuntu 18.04) + "CABF32D411EA5FA9458A79B6DC2C2D69", // Opus 1.3.1 (MacOS and legacy .NET on Ubuntu 20.04, Windows) + "EC76B2A5E0B74A2E142BFD255C52F13E" // Opus 1.3.1 (.NET Core 3.0+ on Ubuntu 20.04 and Windows) } }, @@ -1639,7 +1632,7 @@ public static class SaveMetadataValidFileSource new TestSettingDictionary(), new[] { - "1636B4EF09C4EF2B16135E9C2670473B", // Opus 1.1.2 (Ubuntu 16.04 and 18.04) + "1636B4EF09C4EF2B16135E9C2670473B", // Opus 1.1.2 (Ubuntu 18.04) "CABF32D411EA5FA9458A79B6DC2C2D69" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows) } } diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataTypes/TestAudioInfo.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataTypes/TestAudioInfo.cs index 2d8754c4..fdfe345c 100644 --- a/AudioWorks/tests/AudioWorks.Api.Tests/DataTypes/TestAudioInfo.cs +++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataTypes/TestAudioInfo.cs @@ -19,7 +19,7 @@ namespace AudioWorks.Api.Tests.DataTypes { public sealed class TestAudioInfo : IXunitSerializable { -#if NET462 || NETCOREAPP2_1 || NETCOREAPP3_1 +#if NET462 || NETCOREAPP3_1 public string Format { get; set; } = string.Empty; public int Channels { get; set; } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj b/AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj index f7d13635..d8b2742b 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj @@ -1,28 +1,28 @@  - net5.0;netcoreapp3.1;net462 - net5.0;netcoreapp3.1 + net6.0;netcoreapp3.1;net462 + net6.0;netcoreapp3.1 false true false - - + + - - + + - + diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/ClearAudioMetadataTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/ClearAudioMetadataTests.cs index 788dd124..142082e9 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/ClearAudioMetadataTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/ClearAudioMetadataTests.cs @@ -59,7 +59,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/CopyModule.ps1 b/AudioWorks/tests/AudioWorks.Commands.Tests/CopyModule.ps1 index ef389964..6f9d2dd7 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/CopyModule.ps1 +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/CopyModule.ps1 @@ -36,118 +36,216 @@ Copy-Item -Path $projectOutputDir -Destination $OutputRoot -Recurse Write-Host "Copying debugging symbols from $ModuleProjectRoot to $OutputRoot." Join-Path -Path $ModuleProjectRoot -ChildPath bin | Join-Path -ChildPath $Configuration | Get-ChildItem -Filter *.pdb -Recurse | % { Copy-Item $_.FullName -Destination $(Join-Path $outputDir -ChildPath $_.Directory.Name) } # SIG # Begin signature block -# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor -# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAPxj6AJ9iX/rVc -# b9qw+5LSBmeTPb6DXumrw882SRX9NqCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok -# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE -# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO -# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS -# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK -# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI -# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k -# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3 -# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1 -# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd -# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/ -# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG -# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0 -# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj -# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5 -# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm -# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN -# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ -# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ -# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1 -# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo -# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l -# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT -# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy -# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l -# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG -# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl -# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb -# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC -# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ -# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO -# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h -# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt -# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd -# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T -# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j -# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud -# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy -# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0 -# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y -# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA -# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG -# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o -# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu -# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa -# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P -# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n -# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz -# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD -# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g -# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp -# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs -# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy -# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu -# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ -# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD -# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU -# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k -# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH -# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps -# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd -# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud -# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv -# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov -# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl -# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI -# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w -# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL -# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB -# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD -# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5 -# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk -# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU -# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1 -# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV -# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw -# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll -# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F -# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh -# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM -# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCDd/L74N2CDfuLB3CqdXrhdoHEA -# g6vQXd88FC7CAF5+jTANBgkqhkiG9w0BAQEFAASCAQBLOjjtxUS8jW5xXGHR+BQ+ -# XrjrPSy9TIGKHcnuKJnsMUU1E1sbNTK+oR7qNlrOrlm/uZpNauBkaFwO9k1PspBv -# oxYbXlfl1it0K/igr6P+BnUTz8yXaazVpZZ/eLd+iqyAckv1H20knT/0+MPvNhAZ -# 9S2I++hTTZHlJsZMb0VzUvmOKfLHwvGkckLIJN84JFtAHlAalAXNtFqjO9rDYdzc -# xxzfe2S6NxKCCTx8BOLEQd4Qlg26t4t6DedbiVhZCl9uy56+9sFgIwgPLETvcNJH -# FkgLA5hXF6jJE5DQNODXhB/qqZmVdR4Oc4C6l3ed3Qww7lEUJQTICX7OjBi5gw9b -# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM -# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC -# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF -# MQ8XDTIwMTExNjIzNDQzOFowLwYJKoZIhvcNAQkEMSIEIFLhfv+iC9UEdjCKfDb3 -# fhsSSntYkGp2zsSvywAt7gSBMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi -# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB -# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE -# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV -# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy -# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI -# hvcNAQEBBQAEggEAfgutSqAf8F9rvPjw3veb73fg4+mnVEntKvxdLDX5wDezvgdh -# M5m/GtaWl3I/t0tyywAeNhEhk2N1XYLIbMjMIseMfjV2lfdDXnzxuhK04DCIDqQb -# x8ExGVm6SsxRYmb+hw7NJqzz7u7ibX77xVOEffCVfL+kRiBX13w18RR2IgVSdgn7 -# SUzoWy9mhs/BdK2hEUzV86AjP/g/6b6jNTRR17L6ysKO7hf5vPGc6CgKTRQ1m+bX -# aQHhCxe+CNby3WeFei3Nao/3CFp0iB8+aNwoEqqdDlNaOj8h+gyPJRObi8hu4n7p -# xx8cNeMHhrX5eSr+7NqrbidL7MXbZq+PWqlhYA== +# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUEmBW/nvcGqdJQ9L+CY6530w5 +# bW6ggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B +# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2 +# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV +# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm +# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv +# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM +# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT +# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4 +# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+ +# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK +# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj +# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz +# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5 +# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO +# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp +# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe +# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E +# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW +# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw +# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF +# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv +# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh +# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3 +# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC +# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA +# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz +# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7 +# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3 +# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q +# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF +# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx +# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV +# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291 +# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK +# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn +# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel +# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH +# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18 +# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh +# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN +# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k +# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA +# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H +# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC +# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj +# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE +# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv +# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh +# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O +# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG +# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w +# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG +# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ +# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs +# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05 +# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN +# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io +# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ +# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L +# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i +# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK +# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa +# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC +# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx +# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x +# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw +# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB +# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh +# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E +# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO +# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g +# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk +# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe +# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ +# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm +# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY +# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R +# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa +# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80 +# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E +# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+ +# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww +# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u +# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0 +# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y +# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL +# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv +# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8 +# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8 +# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc +# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad +# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF +# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd +# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM +# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B +# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG +# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76 +# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv +# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3 +# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s +# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y +# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw +# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE +# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k +# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta +# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b +# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh +# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q +# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E +# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU +# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV +# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS +# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie +# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb +# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw +# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w +# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG +# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j +# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF +# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo +# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw +# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT +# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ +# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7 +# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58 +# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk +# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM +# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF +# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e +# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk +# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4 +# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5 +# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8 +# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB +# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5 +# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY +# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0 +# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp +# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs +# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy +# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN +# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK +# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo +# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA +# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr +# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp +# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr +# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM +# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD +# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD +# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu +# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB +# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw +# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G +# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G +# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh +# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru +# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M +# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR +# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK +# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp +# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC +# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW +# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe +# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9 +# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC +# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE +# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy +# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3 +# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG +# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBRpdFqoCdKZ +# kxBPtIPH4QKaIKB0YDANBgkqhkiG9w0BAQEFAASCAYAJswMZw1tnG+KdT2Ff49FJ +# DZiePuTLvy7+9e21AG9ZhIBqlHhEG3uEOZq54mXF2uKQSVLK/o0OnKjK8Ymj0lkM +# 5L7aUwYYS5AVhvfvY+aJESb6PSypLPtoCQgFZ0s7S4Fx4K2QgtAc0nkIoK49PnjB +# SicNuVOBVshYDBHcQ/YADuz6l6tvuf7Gl2cJneMZF0hAZM0HPfc+jmyLZyQuyQjZ +# pmCWjKFSXe/G0yBtMTaOxwnz7PhVK5U7cMXvX05xOIvlWdkWgoosb0AUSIixw6/b +# Mvhr1UVygiZv3TEuSvg4db/DBRKJ2kQytZ8jOhCSoLSal7LnQ+Re/3IoSp2H2yt1 +# ea8inqouxk02dXJqC8Z/dCza3QvCwihl8L/TjtuEYvhfS6oeK6z3vr2eTvFcQzS1 +# tT8Bh88shJXg5aD7bLiOSrbeRjn0WiCVJShXN2im3rgNlJf9ovcFBKQNVzI0VDFV +# 79Q8d3ZbUmPVwxNomCB/tP+E5tTUXNwPCL6v5lCK86ShggQEMIIEAAYJKoZIhvcN +# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv +# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n +# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa +# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw +# NzE1MjQ0OVowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO +# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMLToYmetmFA2/xOv0VMN +# Kt+q1IUgMCTmdjw4GNSNSLrltNYL6kMONSQduXm/Nf8Z5TCBoAYLKoZIhvcNAQkQ +# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ +# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi +# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y +# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIAW+twP1Pd6BmmKnlXTUlGzeroNt0TqtjH +# OkbbRV0d4byvi6GEhvutq+qO3hR+uqxc6sTUWsm4kPGOkDZeeg/puPlAx6DqgAiB +# tA5txyL5ehsbYJ/ZxBPX1WOZlrGj6g7MaCRWkIHqKcYU3gsNe86lxjubD3cqNiAN +# HL9d4Sx7DQWh01WrBeYOUNRcft2K3iQieWEH1wuiQxU0qXMutc3cuy0KxzPZtx3s +# H3jXqm1H0hb0K4rQysz4QlOLQ4gqV+rQLgTDYuLfA3YaFfp+G31uHu8xd2Z9TNTE +# dC/btgGujzmdHa/j4iKg+j9SyqTFEcdLIwW/89ZnIOndiRBvAlJnj9Mpg6FCgfU5 +# ejQpFOrBGBqTJt8wIyfk5DkzbLC4M+CxBbjnqpk5btyA0XfWsFrmvfjHEylOAiOA +# bOELamCaTYKHlH0eIi6L6gY1WUTcrlClyqMlfhpwLFELOHtZxOvg4Bbfqv3tc5Ut +# Qb6aLDZs7VpM7FPowM+9kyLbP681itsgnsU/khQa+wQqgYJrIAd7ThhKfbVsscYR +# HPuzO51m4xHIG1P5kUEgWHFQnEI3Rnuys0umiAQVlaTaH0W5GorWRr6NrjPxrPVz +# wTHMrxP0IJ5ZzYz26ub5bT9k+MZ5VRGoXUXinYfy2ZT1E34I2Inimz9VUZvKtFs0 +# 7EgaDSkYJHA= # SIG # End signature block diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioCoverArtTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioCoverArtTests.cs index 3832a524..8d182437 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioCoverArtTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioCoverArtTests.cs @@ -42,7 +42,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioFileTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioFileTests.cs index 674ea2e4..45cc51e3 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioFileTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioFileTests.cs @@ -43,7 +43,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioAnalyzerInfoTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioAnalyzerInfoTests.cs index d3c7bfae..4166e2e2 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioAnalyzerInfoTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioAnalyzerInfoTests.cs @@ -37,7 +37,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioCoverArtTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioCoverArtTests.cs index b09869f7..fc2af59c 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioCoverArtTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioCoverArtTests.cs @@ -40,7 +40,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioEncoderInfoTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioEncoderInfoTests.cs index c1a34cf4..b3da2b92 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioEncoderInfoTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioEncoderInfoTests.cs @@ -37,7 +37,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioFileTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioFileTests.cs index d015f883..9b6e78fb 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioFileTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioFileTests.cs @@ -40,7 +40,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioInfoTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioInfoTests.cs index 9db15c0b..a6a274f8 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioInfoTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioInfoTests.cs @@ -42,7 +42,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataEncoderInfoTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataEncoderInfoTests.cs index 142ade42..336c3d42 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataEncoderInfoTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataEncoderInfoTests.cs @@ -37,7 +37,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataTests.cs index a3b6536c..332e66f4 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataTests.cs @@ -42,7 +42,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/MeasureAudioFileTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/MeasureAudioFileTests.cs index a4db6df3..2f444cd1 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/MeasureAudioFileTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/MeasureAudioFileTests.cs @@ -44,7 +44,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/RenameAudioFileTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/RenameAudioFileTests.cs index c698bfaa..d5579a84 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/RenameAudioFileTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/RenameAudioFileTests.cs @@ -49,7 +49,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/SaveAudioMetadataTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/SaveAudioMetadataTests.cs index 2c3dd2bc..a177629f 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/SaveAudioMetadataTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/SaveAudioMetadataTests.cs @@ -49,7 +49,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/SetAudioMetadataTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/SetAudioMetadataTests.cs index 3c0aecd5..b31d873b 100644 --- a/AudioWorks/tests/AudioWorks.Commands.Tests/SetAudioMetadataTests.cs +++ b/AudioWorks/tests/AudioWorks.Commands.Tests/SetAudioMetadataTests.cs @@ -38,7 +38,7 @@ public void CommandExists() { ps.Invoke(); } - catch (Exception e) when (!(e is CommandNotFoundException)) + catch (Exception e) when (e is not CommandNotFoundException) { // CommandNotFoundException is the only type we are testing for } diff --git a/AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj b/AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj index 1618c07b..6bad30e4 100644 --- a/AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj +++ b/AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj @@ -1,22 +1,22 @@  - net5.0;netcoreapp3.1;netcoreapp2.1;net462 - net5.0;netcoreapp3.1;netcoreapp2.1 + net6.0;netcoreapp3.1;net462 + net6.0;netcoreapp3.1 false true - - + + - - + + diff --git a/AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj b/AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj index 80503b1d..e1e8263c 100644 --- a/AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj +++ b/AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj @@ -1,15 +1,15 @@  - net5.0;netcoreapp3.1;netcoreapp2.1;net462 - net5.0;netcoreapp3.1;netcoreapp2.1 + net6.0;netcoreapp3.1;net462 + net6.0;netcoreapp3.1 false true - - + + diff --git a/README.md b/README.md index a8b38886..20b2386d 100644 --- a/README.md +++ b/README.md @@ -6,26 +6,22 @@ A full user interface (Windows only) [is in development](https://github.com/jher This project supplants [PowerShell Audio](https://github.com/jherby2k/PowerShellAudio) by targetting PowerShell cross-platform (Windows, Linux and MacOS). -Platform | Build Status (master) | Build Status (dev) | Deployment Status +Platform | Build Status (main) | Build Status (dev) | Deployment Status -- | -- | -- | -- Windows | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20Windows?branchName=main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=2&_a=summary&repositoryFilter=1&branchFilter=3) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/2/main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=2&_a=summary&repositoryFilter=1&branchFilter=3) | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20Windows?branchName=dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=2&_a=summary&repositoryFilter=1&branchFilter=4) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/2/dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=2&_a=summary&repositoryFilter=1&branchFilter=4) | ![Deployment Status](https://vsrm.dev.azure.com/jherby2k/_apis/public/Release/badge/ce2541e1-667c-4be1-a926-7d44ff89db07/2/2) Linux | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20Linux?branchName=main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=3&_a=summary&repositoryFilter=1&branchFilter=3) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/3/main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=3&_a=summary&repositoryFilter=1&branchFilter=3) | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20Linux?branchName=dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=3&_a=summary&repositoryFilter=1&branchFilter=4) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/3/dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=3&_a=summary&repositoryFilter=1&branchFilter=4) | ![Deployment Status](https://vsrm.dev.azure.com/jherby2k/_apis/public/Release/badge/ce2541e1-667c-4be1-a926-7d44ff89db07/4/4) MacOS | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20MacOS?branchName=main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=4&_a=summary&repositoryFilter=1&branchFilter=3) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/4/main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=4&_a=summary&repositoryFilter=1&branchFilter=3) | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20MacOS?branchName=dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=4&_a=summary&repositoryFilter=1&branchFilter=4) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/4/dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=4&_a=summary&repositoryFilter=1&branchFilter=4) | ![Deployment Status](https://vsrm.dev.azure.com/jherby2k/_apis/public/Release/badge/ce2541e1-667c-4be1-a926-7d44ff89db07/3/3) ### System Requirements -AudioWorks runs on Windows 8.1+, MacOS 10.13+, and Ubuntu 16.04+. Other 64-bit Linux distributions may work, but may require additional dependencies and are currently untested. Currently, most extensions only support the Intel (x86) architecture. Apple M1 support will follow once .NET supports it. +AudioWorks runs on Windows 8.1+, MacOS 10.15+, and Ubuntu 18.04+. Other 64-bit Linux distributions may work, but may require additional dependencies and are currently untested. #### On Windows: * [PowerShell 7+](https://aka.ms/powershell) (recommended) and/or Windows PowerShell 5.1 * [.NET Framework 4.6.2+](https://dotnet.microsoft.com/download/dotnet-framework/net462) (if using Windows PowerShell) * [iTunes](https://www.apple.com/itunes) (optional, for AAC and ALAC support. Requires the classic installer, not the Windows Store version) -#### On Ubuntu 20.04 or 18.04: -* Via `apt-get install`: - * libebur128-1 -#### On Ubuntu 16.04: -* Via `apt-get install`: - * libmp3lame0 - * libebur128-1 +#### On Ubuntu: +* [PowerShell 7+](https://aka.ms/powershell) +* libebur128 (`apt install libebur128-1`) ### Installation The AudioWorks PowerShell module can found on [the PowerShell Gallery](https://www.powershellgallery.com/packages/AudioWorks.Commands). @@ -35,15 +31,10 @@ Keep the module up to date with `Update-Module -Name AudioWorks.Commands`. The .NET API is available via [NuGet](https://www.nuget.org/packages/AudioWorks.Api). ### Additional Requirements for Building / Testing -* [.NET 5.0 SDK](https://dotnet.microsoft.com/download/dotnet/5.0) -* [.NET Core 2.1 SDK](https://dotnet.microsoft.com/download/dotnet-core/2.1) -* [PowerShell 7+](https://aka.ms/powershell) (recommended) and/or Windows PowerShell 5.1. -* Windows 8.1+, MacOS 10.13+, Ubuntu 16.04, 18.04 or 20.04. -* [NuGet client tools](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools#nugetexe-cli) (for building extensions on MacOS and Linux) -* [Visual Studio 2019 16.8+](https://visualstudio.microsoft.com/downloads) (optional - Windows only) -* [Visual Studio 2019 for Mac 8.8+](https://visualstudio.microsoft.com/downloads) (optional - Mac only) +* [.NET 6.0 SDK](https://dotnet.microsoft.com/download/dotnet/6.0) +* [Visual Studio 2022](https://visualstudio.microsoft.com/downloads) (optional - Windows or Mac) * [Visual Studio Code](https://code.visualstudio.com/) (optional - all platforms) -* [ReSharper 2020.3+](https://www.jetbrains.com/resharper) (optional - Windows only) +* [ReSharper 2021.3+](https://www.jetbrains.com/resharper) (optional - Windows only) ### Special Thanks This project wouldn't be possible without the work of these other fine projects and organizations: diff --git a/azure-pipelines-linux.yml b/azure-pipelines-linux.yml index 7e8b44b5..480bbe09 100644 --- a/azure-pipelines-linux.yml +++ b/azure-pipelines-linux.yml @@ -10,6 +10,7 @@ trigger: - LICENSE - azure-pipelines-windows.yml - azure-pipelines-macos.yml + - AudioWorks/src/Extensions/AudioWorks.Extensions.Apple pr: - dev @@ -22,6 +23,18 @@ variables: disable.coverage.autogenerate: 'true' steps: +- task: UseDotNet@2 + displayName: 'Install .NET Core 3.1 SDK' + inputs: + packageType: sdk + version: 3.1.x + +- task: UseDotNet@2 + displayName: 'Install .NET Core 6.0 SDK' + inputs: + packageType: sdk + version: 6.0.x + - task: DotNetCoreCLI@2 inputs: command: 'build' @@ -74,9 +87,8 @@ steps: } Write-Host 'Copied symbols:' - Copy-Symbols net5.0 net5.0 + Copy-Symbols net6.0 net6.0 Copy-Symbols netstandard2.0 netcoreapp3.1 - Copy-Symbols netstandard2.0 netcoreapp2.1 displayName: 'Copy symbols to extension directories' - task: DotNetCoreCLI@2 @@ -84,9 +96,9 @@ steps: command: 'test' projects: 'AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Common on .NET Core 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Common on .NET 5.0' + testRunTitle: 'AudioWorks.Common on .NET Core 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' + displayName: 'Test AudioWorks.Common on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -97,23 +109,14 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' displayName: 'Test AudioWorks.Common on .NET Core 3.1' -- task: DotNetCoreCLI@2 - inputs: - command: 'test' - projects: 'AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj' - publishTestResults: 'true' - testRunTitle: 'AudioWorks.Common on .NET Core 2.1' - arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Common on .NET Core 2.1' - - task: DotNetCoreCLI@2 inputs: command: 'test' projects: 'AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Extensibility on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Extensibility on .NET 5.0' + testRunTitle: 'AudioWorks.Extensibility on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' + displayName: 'Test AudioWorks.Extensibility on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -124,23 +127,14 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' displayName: 'Test AudioWorks.Extensibility on .NET Core 3.1' -- task: DotNetCoreCLI@2 - inputs: - command: 'test' - projects: 'AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj' - publishTestResults: 'true' - testRunTitle: 'AudioWorks.Extensibility on .NET Core 2.1' - arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Extensibility on .NET Core 2.1' - - task: DotNetCoreCLI@2 inputs: command: 'test' projects: 'AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Api on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/net5.0/*' - displayName: 'Test AudioWorks.Api on .NET 5.0' + testRunTitle: 'AudioWorks.Api on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/net6.0/*' + displayName: 'Test AudioWorks.Api on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -151,23 +145,14 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/netcoreapp3.1/*' displayName: 'Test AudioWorks.Api on .NET Core 3.1' -- task: DotNetCoreCLI@2 - inputs: - command: 'test' - projects: 'AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj' - publishTestResults: 'true' - testRunTitle: 'AudioWorks.Api on .NET Core 2.1' - arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/netcoreapp2.1/*' - displayName: 'Test AudioWorks.Api on .NET Core 2.1' - - task: DotNetCoreCLI@2 inputs: command: 'test' projects: 'AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Commands on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/net5.0/AudioWorks.Commands/net5.0' - displayName: 'Test AudioWorks.Commands on .NET 5.0' + testRunTitle: 'AudioWorks.Commands on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/net6.0/AudioWorks.Commands/net6.0' + displayName: 'Test AudioWorks.Commands on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -178,12 +163,12 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/netcoreapp3.1/AudioWorks.Commands/netcoreapp3.1' displayName: 'Test AudioWorks.Commands on .NET Core 3.1' -- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4 +- task: reportgenerator@5 inputs: reports: '$(Agent.TempDirectory)/*/coverage.cobertura.xml' targetdir: 'reports/coverage' - reporttypes: 'HtmlInline_AzurePipelines;Cobertura' - displayName: 'Generate code coverage results' + reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges' + displayName: 'Generate code coverage report' - task: PublishCodeCoverageResults@1 inputs: diff --git a/azure-pipelines-macos.yml b/azure-pipelines-macos.yml index e875a661..025c5807 100644 --- a/azure-pipelines-macos.yml +++ b/azure-pipelines-macos.yml @@ -22,6 +22,18 @@ variables: disable.coverage.autogenerate: 'true' steps: +- task: UseDotNet@2 + displayName: 'Install .NET Core 3.1 SDK' + inputs: + packageType: sdk + version: 3.1.x + +- task: UseDotNet@2 + displayName: 'Install .NET Core 6.0 SDK' + inputs: + packageType: sdk + version: 6.0.x + - task: DotNetCoreCLI@2 inputs: command: 'build' @@ -70,9 +82,8 @@ steps: } Write-Host 'Copied symbols:' - Copy-Symbols net5.0 net5.0 + Copy-Symbols net6.0 net6.0 Copy-Symbols netstandard2.0 netcoreapp3.1 - Copy-Symbols netstandard2.0 netcoreapp2.1 displayName: 'Copy symbols to extension directories' - task: DotNetCoreCLI@2 @@ -80,9 +91,9 @@ steps: command: 'test' projects: 'AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Common on .NET Core 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Common on .NET 5.0' + testRunTitle: 'AudioWorks.Common on .NET Core 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' + displayName: 'Test AudioWorks.Common on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -93,23 +104,14 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' displayName: 'Test AudioWorks.Common on .NET Core 3.1' -- task: DotNetCoreCLI@2 - inputs: - command: 'test' - projects: 'AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj' - publishTestResults: 'true' - testRunTitle: 'AudioWorks.Common on .NET Core 2.1' - arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Common on .NET Core 2.1' - - task: DotNetCoreCLI@2 inputs: command: 'test' projects: 'AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Extensibility on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Extensibility on .NET 5.0' + testRunTitle: 'AudioWorks.Extensibility on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' + displayName: 'Test AudioWorks.Extensibility on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -120,23 +122,14 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' displayName: 'Test AudioWorks.Extensibility on .NET Core 3.1' -- task: DotNetCoreCLI@2 - inputs: - command: 'test' - projects: 'AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj' - publishTestResults: 'true' - testRunTitle: 'AudioWorks.Extensibility on .NET Core 2.1' - arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Extensibility on .NET Core 2.1' - - task: DotNetCoreCLI@2 inputs: command: 'test' projects: 'AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Api on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/net5.0/*' - displayName: 'Test AudioWorks.Api on .NET 5.0' + testRunTitle: 'AudioWorks.Api on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/net6.0/*' + displayName: 'Test AudioWorks.Api on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -147,23 +140,14 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/netcoreapp3.1/*' displayName: 'Test AudioWorks.Api on .NET Core 3.1' -- task: DotNetCoreCLI@2 - inputs: - command: 'test' - projects: 'AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj' - publishTestResults: 'true' - testRunTitle: 'AudioWorks.Api on .NET Core 2.1' - arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/netcoreapp2.1/*' - displayName: 'Test AudioWorks.Api on .NET Core 2.1' - - task: DotNetCoreCLI@2 inputs: command: 'test' projects: 'AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Commands on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/net5.0/AudioWorks.Commands/net5.0' - displayName: 'Test AudioWorks.Commands on .NET 5.0' + testRunTitle: 'AudioWorks.Commands on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/net6.0/AudioWorks.Commands/net6.0' + displayName: 'Test AudioWorks.Commands on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -174,12 +158,12 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/netcoreapp3.1/AudioWorks.Commands/netcoreapp3.1' displayName: 'Test AudioWorks.Commands on .NET Core 3.1' -- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4 +- task: reportgenerator@5 inputs: reports: '$(Agent.TempDirectory)/*/coverage.cobertura.xml' targetdir: 'reports/coverage' - reporttypes: 'HtmlInline_AzurePipelines;Cobertura' - displayName: 'Generate code coverage results' + reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges' + displayName: 'Generate code coverage report' - task: PublishCodeCoverageResults@1 inputs: diff --git a/azure-pipelines-windows.yml b/azure-pipelines-windows.yml index 5dda910f..4747a997 100644 --- a/azure-pipelines-windows.yml +++ b/azure-pipelines-windows.yml @@ -22,6 +22,18 @@ variables: disable.coverage.autogenerate: 'true' steps: +- task: UseDotNet@2 + displayName: 'Install .NET Core 3.1 SDK' + inputs: + packageType: sdk + version: 3.1.x + +- task: UseDotNet@2 + displayName: 'Install .NET Core 6.0 SDK' + inputs: + packageType: sdk + version: 6.0.x + - task: DotNetCoreCLI@2 inputs: command: 'restore' @@ -88,9 +100,8 @@ steps: } Write-Host 'Copied symbols:' - Copy-Symbols net5.0 net5.0 + Copy-Symbols net6.0 net6.0 Copy-Symbols netstandard2.0 netcoreapp3.1 - Copy-Symbols netstandard2.0 netcoreapp2.1 Copy-Symbols netstandard2.0 net48 displayName: 'Copy symbols to extension directories' @@ -99,9 +110,9 @@ steps: command: 'test' projects: 'AudioWorks\tests\AudioWorks.Common.Tests\AudioWorks.Common.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Common on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Common on .NET 5.0' + testRunTitle: 'AudioWorks.Common on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' + displayName: 'Test AudioWorks.Common on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -112,15 +123,6 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' displayName: 'Test AudioWorks.Common on .NET Core 3.1' -- task: DotNetCoreCLI@2 - inputs: - command: 'test' - projects: 'AudioWorks\tests\AudioWorks.Common.Tests\AudioWorks.Common.Tests.csproj' - publishTestResults: 'true' - testRunTitle: 'AudioWorks.Common on .NET Core 2.1' - arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Common on .NET Core 2.1' - - task: DotNetCoreCLI@2 inputs: command: 'test' @@ -135,9 +137,9 @@ steps: command: 'test' projects: 'AudioWorks\tests\AudioWorks.Extensibility.Tests\AudioWorks.Extensibility.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Extensibility on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Extensibility on .NET 5.0' + testRunTitle: 'AudioWorks.Extensibility on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' + displayName: 'Test AudioWorks.Extensibility on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -148,15 +150,6 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' displayName: 'Test AudioWorks.Extensibility on .NET Core 3.1' -- task: DotNetCoreCLI@2 - inputs: - command: 'test' - projects: 'AudioWorks\tests\AudioWorks.Extensibility.Tests\AudioWorks.Extensibility.Tests.csproj' - publishTestResults: 'true' - testRunTitle: 'AudioWorks.Extensibility on .NET Core 2.1' - arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*' - displayName: 'Test AudioWorks.Extensibility on .NET Core 2.1' - - task: DotNetCoreCLI@2 inputs: command: 'test' @@ -171,9 +164,9 @@ steps: command: 'test' projects: 'AudioWorks\tests\AudioWorks.Api.Tests\AudioWorks.Api.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Api on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)\Extensions\net5.0\*' - displayName: 'Test AudioWorks.Api on .NET 5.0' + testRunTitle: 'AudioWorks.Api on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)\Extensions\net6.0\*' + displayName: 'Test AudioWorks.Api on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -184,15 +177,6 @@ steps: arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)\Extensions\netcoreapp3.1\*' displayName: 'Test AudioWorks.Api on .NET Core 3.1' -- task: DotNetCoreCLI@2 - inputs: - command: 'test' - projects: 'AudioWorks\tests\AudioWorks.Api.Tests\AudioWorks.Api.Tests.csproj' - publishTestResults: 'true' - testRunTitle: 'AudioWorks.Api on .NET Core 2.1' - arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)\Extensions\netcoreapp2.1\*' - displayName: 'Test AudioWorks.Api on .NET Core 2.1' - - task: DotNetCoreCLI@2 inputs: command: 'test' @@ -207,9 +191,9 @@ steps: command: 'test' projects: 'AudioWorks\tests\AudioWorks.Commands.Tests\AudioWorks.Commands.Tests.csproj' publishTestResults: 'true' - testRunTitle: 'AudioWorks.Commands on .NET 5.0' - arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)\AudioWorks\tests\AudioWorks.Commands.Tests\bin\$(buildConfiguration)\net5.0\AudioWorks.Commands\net5.0' - displayName: 'Test AudioWorks.Commands on .NET 5.0' + testRunTitle: 'AudioWorks.Commands on .NET 6.0' + arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)\AudioWorks\tests\AudioWorks.Commands.Tests\bin\$(buildConfiguration)\net6.0\AudioWorks.Commands\net6.0' + displayName: 'Test AudioWorks.Commands on .NET 6.0' - task: DotNetCoreCLI@2 inputs: @@ -229,12 +213,12 @@ steps: arguments: '--framework net462 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- RunConfiguration.DisableAppDomain=true DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)\AudioWorks\tests\AudioWorks.Commands.Tests\bin\$(buildConfiguration)\net462\AudioWorks.Commands\net462' displayName: 'Test AudioWorks.Commands on .NET Framework 4.8' -- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4 +- task: reportgenerator@5 inputs: reports: '$(Agent.TempDirectory)\*\coverage.cobertura.xml' targetdir: 'reports\coverage' - reporttypes: 'HtmlInline_AzurePipelines;Cobertura' - displayName: 'Generate code coverage results' + reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges' + displayName: 'Generate code coverage report' - task: PublishCodeCoverageResults@1 inputs: