Patch Tuesday for July 2026 (#52938)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Billy O'Neal 2026-07-23 10:46:37 -07:00 committed by GitHub
parent 1542813f40
commit bd93b56711
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
55 changed files with 987 additions and 1920 deletions

View File

@ -1,111 +1,22 @@
diff --git a/Code/BuildSystem/CMake/ezUtilsCppFlags.cmake b/Code/BuildSystem/CMake/ezUtilsCppFlags.cmake
index 07ae85f..760d300 100644
--- a/Code/BuildSystem/CMake/ezUtilsCppFlags.cmake
+++ b/Code/BuildSystem/CMake/ezUtilsCppFlags.cmake
@@ -46,7 +46,6 @@ function(ez_set_build_flags_msvc TARGET_NAME)
# /WX: treat warnings as errors
if (NOT ${ARG_NO_WARNINGS_AS_ERRORS} AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- target_compile_options(${TARGET_NAME} PRIVATE "/WX")
endif()
if ((CMAKE_SIZEOF_VOID_P EQUAL 4) AND EZ_CMAKE_ARCHITECTURE_X86)
@@ -168,7 +167,6 @@ function(ez_set_build_flags_clang TARGET_NAME)
endif()
if(NOT (CMAKE_CURRENT_SOURCE_DIR MATCHES "Code/ThirdParty"))
- target_compile_options(${TARGET_NAME} PRIVATE -Werror=inconsistent-missing-override -Werror=switch -Werror=uninitialized)
else()
# Ignore all warnings in third party code.
target_compile_options(${TARGET_NAME} PRIVATE -Wno-everything)
diff --git a/Code/Engine/Core/CMakeLists.txt b/Code/Engine/Core/CMakeLists.txt
index 291d494..54eb04d 100644
--- a/Code/Engine/Core/CMakeLists.txt
+++ b/Code/Engine/Core/CMakeLists.txt
@@ -8,7 +8,7 @@ get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
ez_create_target(LIBRARY ${PROJECT_NAME})
if(MSVC)
- target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX)
+ target_compile_options(${PROJECT_NAME} PRIVATE /W4)
endif()
target_link_libraries(${PROJECT_NAME}
diff --git a/Code/Engine/Foundation/CMakeLists.txt b/Code/Engine/Foundation/CMakeLists.txt
index 2cb3ece..695f510 100644
index 63db77f..7e87e0d 100644
--- a/Code/Engine/Foundation/CMakeLists.txt
+++ b/Code/Engine/Foundation/CMakeLists.txt
@@ -14,7 +14,7 @@ if(EZ_CMAKE_PLATFORM_WINDOWS)
@@ -3,7 +3,7 @@ ez_cmake_init()
# Get the name of this folder as the project name
get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
-ez_create_target(LIBRARY ${PROJECT_NAME})
+ez_create_target(LIBRARY ${PROJECT_NAME} NO_WARNINGS_AS_ERRORS)
if(EZ_CMAKE_PLATFORM_WINDOWS)
target_link_libraries(${PROJECT_NAME}
@@ -13,8 +13,6 @@ if(EZ_CMAKE_PLATFORM_WINDOWS)
)
endif()
if (MSVC)
- target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX)
+ target_compile_options(${PROJECT_NAME} PRIVATE /W4)
-ez_enable_strict_warnings(${PROJECT_NAME})
-
if(EZ_CMAKE_COMPILER_CLANG)
set_source_files_properties(ThirdParty/xxHash/xxHash.c PROPERTIES COMPILE_FLAGS "-Wno-unused-function")
endif()
if (EZ_CMAKE_PLATFORM_LINUX)
diff --git a/Code/Engine/RendererDX11/CMakeLists.txt b/Code/Engine/RendererDX11/CMakeLists.txt
index adcfc2e..d53d3c1 100644
--- a/Code/Engine/RendererDX11/CMakeLists.txt
+++ b/Code/Engine/RendererDX11/CMakeLists.txt
@@ -11,7 +11,7 @@ ez_create_target(LIBRARY ${PROJECT_NAME})
ez_link_target_dx11(${PROJECT_NAME})
if(MSVC)
- target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX)
+ target_compile_options(${PROJECT_NAME} PRIVATE /W4)
endif()
target_link_libraries(${PROJECT_NAME}
diff --git a/Code/Engine/RendererFoundation/CMakeLists.txt b/Code/Engine/RendererFoundation/CMakeLists.txt
index 5e6376f..073e97e 100644
--- a/Code/Engine/RendererFoundation/CMakeLists.txt
+++ b/Code/Engine/RendererFoundation/CMakeLists.txt
@@ -8,7 +8,7 @@ get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
ez_create_target(LIBRARY ${PROJECT_NAME})
if(MSVC)
- target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX)
+ target_compile_options(${PROJECT_NAME} PRIVATE /W4)
endif()
target_link_libraries(${PROJECT_NAME}
diff --git a/Code/Engine/Texture/CMakeLists.txt b/Code/Engine/Texture/CMakeLists.txt
index a26558c..9bd433c 100644
--- a/Code/Engine/Texture/CMakeLists.txt
+++ b/Code/Engine/Texture/CMakeLists.txt
@@ -6,7 +6,7 @@ get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
ez_create_target(LIBRARY ${PROJECT_NAME} EXCLUDE_FOLDER_FOR_UNITY DirectXTex)
if(MSVC)
- target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX)
+ target_compile_options(${PROJECT_NAME} PRIVATE /W4)
endif()
target_link_libraries(${PROJECT_NAME}
diff --git a/Code/Engine/Texture/DirectXTex/Shaders/CompileShaders.cmd b/Code/Engine/Texture/DirectXTex/Shaders/CompileShaders.cmd
index d1d977c..a8bad33 100644
--- a/Code/Engine/Texture/DirectXTex/Shaders/CompileShaders.cmd
+++ b/Code/Engine/Texture/DirectXTex/Shaders/CompileShaders.cmd
@@ -5,7 +5,7 @@ rem Licensed under the MIT License.
setlocal
set error=0
-set FXCOPTS=/nologo /WX /Ges /Zi /Zpc /Qstrip_reflect /Qstrip_debug
+set FXCOPTS=/nologo /Ges /Zi /Zpc /Qstrip_reflect /Qstrip_debug
set PCFXC="%WindowsSdkVerBinPath%x86\fxc.exe"
if exist %PCFXC% goto continue
diff --git a/Code/Engine/Utilities/CMakeLists.txt b/Code/Engine/Utilities/CMakeLists.txt
index 4109c31..43cd139 100644
--- a/Code/Engine/Utilities/CMakeLists.txt
+++ b/Code/Engine/Utilities/CMakeLists.txt
@@ -8,7 +8,7 @@ get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
ez_create_target(LIBRARY ${PROJECT_NAME})
if(MSVC)
- target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX)
+ target_compile_options(${PROJECT_NAME} PRIVATE /W4)
endif()
target_link_libraries(${PROJECT_NAME}

View File

@ -0,0 +1,75 @@
diff --git a/Code/EditorPlugins/Fmod/EditorPluginFmod/CMakeLists.txt b/Code/EditorPlugins/Fmod/EditorPluginFmod/CMakeLists.txt
index 9618c03a2ddce3c566107c32be9b645801812578..456be1610672832e1866e559ee0792a130acb285 100644
--- a/Code/EditorPlugins/Fmod/EditorPluginFmod/CMakeLists.txt
+++ b/Code/EditorPlugins/Fmod/EditorPluginFmod/CMakeLists.txt
@@ -1,12 +1,14 @@
ez_cmake_init()
+# Get the name of this folder as the project name
+get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
+# FMOD is in a sub-module, when it isn't checked out ez_requires_fmod() doesn't exist, so early out here when it's not needed anyway
+ez_apply_build_filter(${PROJECT_NAME})
+
ez_requires_editor()
ez_requires_fmod()
-# Get the name of this folder as the project name
-get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
-
ez_create_target(LIBRARY ${PROJECT_NAME})
ez_link_target_qt(TARGET ${PROJECT_NAME} COMPONENTS Core Gui Widgets)
diff --git a/Code/Engine/Foundation/Platform/Win/Features_Platform.h b/Code/Engine/Foundation/Platform/Win/Features_Platform.h
index 8465fe3465b7d148dec0354913e9c0ad195e4e0a..deecaafc0cc0418f546b90967ecc342ef660996d 100644
--- a/Code/Engine/Foundation/Platform/Win/Features_Platform.h
+++ b/Code/Engine/Foundation/Platform/Win/Features_Platform.h
@@ -87,7 +87,11 @@
# define EZ_SSE_LEVEL EZ_SSE_20
# endif
#elif EZ_ENABLED(EZ_PLATFORM_ARCH_ARM)
-# define EZ_SIMD_IMPLEMENTATION EZ_SIMD_IMPLEMENTATION_NEON
+# if EZ_ENABLED(EZ_COMPILER_MSVC_CLANG)
+# define EZ_SIMD_IMPLEMENTATION EZ_SIMD_IMPLEMENTATION_NEON
+# else
+# define EZ_SIMD_IMPLEMENTATION EZ_SIMD_IMPLEMENTATION_FPU
+# endif
#else
# error "Unknown architecture."
#endif
diff --git a/Code/EnginePlugins/FmodPlugin/CMakeLists.txt b/Code/EnginePlugins/FmodPlugin/CMakeLists.txt
index 18368a56c2b8efa06187068c94fd68195fc940a0..45c9ecddc212b918d9b81031f9acb417c20f2e5a 100644
--- a/Code/EnginePlugins/FmodPlugin/CMakeLists.txt
+++ b/Code/EnginePlugins/FmodPlugin/CMakeLists.txt
@@ -1,9 +1,11 @@
ez_cmake_init()
-ez_requires_fmod()
-
# Get the name of this folder as the project name
get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
+# FMOD is in a sub-module, when it isn't checked out ez_requires_fmod() doesn't exist, so early out here when it's not needed anyway
+ez_apply_build_filter(${PROJECT_NAME})
+
+ez_requires_fmod()
ez_create_target(LIBRARY ${PROJECT_NAME})
diff --git a/Code/Tools/Libs/ModelImporter2/CMakeLists.txt b/Code/Tools/Libs/ModelImporter2/CMakeLists.txt
index 82798c06fda044247684d53cc654697db2b18418..fdd6074980f79ffc3cce00a69a894898f609362c 100644
--- a/Code/Tools/Libs/ModelImporter2/CMakeLists.txt
+++ b/Code/Tools/Libs/ModelImporter2/CMakeLists.txt
@@ -1,9 +1,11 @@
ez_cmake_init()
-ez_requires_assimp()
-
# Get the name of this folder as the project name
get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
+# AssImp is in a sub-module, when it isn't checked out ez_requires_assimp() doesn't exist, so early out here when it's not needed anyway
+ez_apply_build_filter(${PROJECT_NAME})
+
+ez_requires_assimp()
ez_create_target(LIBRARY ${PROJECT_NAME})

View File

@ -1,184 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a04be90..f853a0c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,9 @@
cmake_minimum_required(VERSION 3.19)
+if(CMAKE_BUILD_TYPE STREQUAL Release)
+ set(CMAKE_BUILD_TYPE "Shipping" CACHE STRING "Release overridden with Shipping" FORCE)
+endif()
+
if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
message(FATAL_ERROR "In-source builds are not supported. Please choose a different binary directory.")
return()
diff --git a/Code/Engine/CMakeLists.txt b/Code/Engine/CMakeLists.txt
index fb4bef4..ccda93d 100644
--- a/Code/Engine/CMakeLists.txt
+++ b/Code/Engine/CMakeLists.txt
@@ -20,5 +20,3 @@ execute_process(
OUTPUT_VARIABLE EZ_GIT_BRANCH_NAME
OUTPUT_STRIP_TRAILING_WHITESPACE
)
-
-configure_file("${CMAKE_CURRENT_LIST_DIR}/ezBuildInfo.h.in" "${CMAKE_CURRENT_LIST_DIR}/ezBuildInfo.h" NEWLINE_STYLE LF)
\ No newline at end of file
diff --git a/Code/Engine/Foundation/Basics/Assert.cpp b/Code/Engine/Foundation/Basics/Assert.cpp
index 7a55afc..778fadd 100644
--- a/Code/Engine/Foundation/Basics/Assert.cpp
+++ b/Code/Engine/Foundation/Basics/Assert.cpp
@@ -66,16 +66,6 @@ bool ezDefaultAssertHandler(const char* szSourceFile, ezUInt32 uiLine, const cha
#if EZ_ENABLED(EZ_PLATFORM_WINDOWS)
- // make sure the cursor is definitely shown, since the user must be able to click buttons
-# if EZ_ENABLED(EZ_PLATFORM_WINDOWS_UWP)
- // Todo: Use modern Windows API to show cursor in current window.
- // http://stackoverflow.com/questions/37956628/change-mouse-pointer-in-uwp-app
-# else
- ezInt32 iHideCursor = 1;
- while (ShowCursor(true) < 0)
- ++iHideCursor;
-# endif
-
# if EZ_ENABLED(EZ_COMPILE_FOR_DEBUG)
ezInt32 iRes = _CrtDbgReport(_CRT_ASSERT, szSourceFile, uiLine, nullptr, "'%s'\nFunction: %s\nMessage: %s", szExpression, szFunction, szAssertMsg);
@@ -83,24 +73,9 @@ bool ezDefaultAssertHandler(const char* szSourceFile, ezUInt32 uiLine, const cha
// currently we will ALWAYS trigger the breakpoint / crash (except for when the user presses 'ignore')
if (iRes == 0)
{
- // when the user ignores the assert, restore the cursor show/hide state to the previous count
-# if EZ_ENABLED(EZ_PLATFORM_WINDOWS_UWP)
- // Todo: Use modern Windows API to restore cursor.
-# else
- for (ezInt32 i = 0; i < iHideCursor; ++i)
- ShowCursor(false);
-# endif
-
return false;
}
-# else
-
-
-# if EZ_ENABLED(EZ_PLATFORM_WINDOWS_DESKTOP)
- MessageBoxA(nullptr, szTemp, "Assertion", MB_ICONERROR);
-# endif
-
# endif
#endif
diff --git a/Code/Engine/Foundation/Logging/Implementation/Log.cpp b/Code/Engine/Foundation/Logging/Implementation/Log.cpp
index 1a0d2ed..afcde54 100644
--- a/Code/Engine/Foundation/Logging/Implementation/Log.cpp
+++ b/Code/Engine/Foundation/Logging/Implementation/Log.cpp
@@ -260,12 +260,7 @@ void ezLog::OsMessageBox(const ezFormatString& text)
title = ezApplication::GetApplicationInstance()->GetApplicationName();
}
-#if EZ_ENABLED(EZ_PLATFORM_WINDOWS_DESKTOP)
- MessageBoxW(nullptr, ezStringWChar(display).GetData(), ezStringWChar(title), MB_OK);
-#else
ezLog::Print(display);
- EZ_ASSERT_NOT_IMPLEMENTED;
-#endif
}
void ezLog::GenerateFormattedTimestamp(TimestampMode mode, ezStringBuilder& sTimestampOut)
diff --git a/Code/Engine/Foundation/Math/Implementation/Math_inl.h b/Code/Engine/Foundation/Math/Implementation/Math_inl.h
index 1a2962e..9b31f01 100644
--- a/Code/Engine/Foundation/Math/Implementation/Math_inl.h
+++ b/Code/Engine/Foundation/Math/Implementation/Math_inl.h
@@ -80,6 +80,7 @@ namespace ezMath
#endif
}
+#if EZ_ENABLED(EZ_PLATFORM_64BIT)
EZ_ALWAYS_INLINE ezUInt32 FirstBitLow(ezUInt64 value)
{
EZ_ASSERT_DEBUG(value != 0, "FirstBitLow is undefined for 0");
@@ -95,6 +96,7 @@ namespace ezMath
return 0;
#endif
}
+#endif
EZ_ALWAYS_INLINE ezUInt32 FirstBitHigh(ezUInt32 value)
{
@@ -112,6 +114,7 @@ namespace ezMath
#endif
}
+#if EZ_ENABLED(EZ_PLATFORM_64BIT)
EZ_ALWAYS_INLINE ezUInt32 FirstBitHigh(ezUInt64 value)
{
EZ_ASSERT_DEBUG(value != 0, "FirstBitHigh is undefined for 0");
@@ -127,6 +130,7 @@ namespace ezMath
return 0;
#endif
}
+#endif
EZ_ALWAYS_INLINE ezUInt32 CountTrailingZeros(ezUInt32 bitmask) { return (bitmask == 0) ? 32 : FirstBitLow(bitmask); }
diff --git a/Code/Engine/Foundation/Memory/Implementation/AllocatorBase_inl.h b/Code/Engine/Foundation/Memory/Implementation/AllocatorBase_inl.h
index fb839b3..21e2ec1 100644
--- a/Code/Engine/Foundation/Memory/Implementation/AllocatorBase_inl.h
+++ b/Code/Engine/Foundation/Memory/Implementation/AllocatorBase_inl.h
@@ -60,7 +60,11 @@ namespace ezInternal
template <typename T>
EZ_FORCE_INLINE T* CreateRawBuffer(ezAllocatorBase* pAllocator, size_t uiCount)
{
+#if EZ_ENABLED(EZ_PLATFORM_64BIT)
ezUInt64 safeAllocationSize = ezMath::SafeMultiply64(uiCount, sizeof(T));
+#else
+ ezUInt32 safeAllocationSize = ezMath::SafeMultiply32(uiCount, sizeof(T));
+#endif
return static_cast<T*>(pAllocator->Allocate(safeAllocationSize, EZ_ALIGNMENT_OF(T)));
}
diff --git a/Code/Engine/Foundation/System/Implementation/Win/StackTracer_win.h b/Code/Engine/Foundation/System/Implementation/Win/StackTracer_win.h
index 54939fb..15f928a 100644
--- a/Code/Engine/Foundation/System/Implementation/Win/StackTracer_win.h
+++ b/Code/Engine/Foundation/System/Implementation/Win/StackTracer_win.h
@@ -229,11 +229,23 @@ ezUInt32 ezStackTracer::GetStackTrace(ezArrayPtr<void*>& trace, void* pContext)
frame.AddrFrame.Offset = context.Rbp;
frame.AddrStack.Offset = context.Rsp;
machine_type = IMAGE_FILE_MACHINE_AMD64;
-#else
+#elif defined(_M_IX86)
frame.AddrPC.Offset = context.Eip;
frame.AddrFrame.Offset = context.Ebp;
frame.AddrStack.Offset = context.Esp;
machine_type = IMAGE_FILE_MACHINE_I386;
+#elif defined(_M_ARM64)
+ frame.AddrPC.Offset = context.Pc;
+ frame.AddrFrame.Offset = context.Fp;
+ frame.AddrStack.Offset = context.Sp;
+ machine_type = IMAGE_FILE_MACHINE_ARM64;
+#elif defined(_M_ARM)
+ frame.AddrPC.Offset = context.Pc;
+ frame.AddrFrame.Offset = context.R11;
+ frame.AddrStack.Offset = context.Sp;
+ machine_type = IMAGE_FILE_MACHINE_ARM;
+#else
+ #error Unknown architecture
#endif
for (ezInt32 i = 0; i < (ezInt32)trace.GetCount(); i++)
{
diff --git a/Code/Engine/ezBuildInfo.h b/Code/Engine/ezBuildInfo.h
new file mode 100644
index 0000000..9ba9484
--- /dev/null
+++ b/Code/Engine/ezBuildInfo.h
@@ -0,0 +1,9 @@
+//
+// This file is auto-generated by CMake.
+//
+
+#pragma once
+
+#define EZ_GIT_COMMIT_HASH_SHORT
+#define EZ_GIT_COMMIT_HASH_LONG
+#define EZ_GIT_BRANCH_NAME ""

View File

@ -3,13 +3,11 @@ vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO ezEngine/ezEngine
REF 1448308ab99bae0d8d2a292ad345ff3a757f3124 #21.10
SHA512 20da87772366d1612795f534b31600123c0d04beba252d27d895c3c3cff7dae65952bd890629d79a7a691c2f3444601552c4b4eca99e8f8a99dc935ce2ebd284
REF "release-${VERSION}"
SHA512 c27f8241969c5c257123b789a964e102331a98f1803e038fa0521794ebdc7500f733bd987e1c53111a6220bd403f4ceffdbc2eb183aec7a178a2ffaf9a129afe
HEAD_REF dev
PATCHES
ezfoundation-vcpkg.diff
# when making changes to this patch, use vim rather than VS Code or other editors that will
# normalize line endings because upstream's line endings are inconsistent which makes the
# patch get much larger than necessary
ezengine-da345.patch # Backport of https://github.com/ezEngine/ezEngine/commit/da345c931aa000c80ee5904a19416fb4eed7b00d.diff?full_index=1
disable-warnings-as-errors.diff
)
@ -21,6 +19,8 @@ vcpkg_cmake_configure(
-DEZ_3RDPARTY_ZLIB_SUPPORT=OFF
-DEZ_BUILD_FILTER=FoundationOnly
-DEZ_BUILD_UNITTESTS=OFF
-DEZ_CMAKE_NO_BUILD_INFO=ON
-DEZ_COMPILE_ENGINE_AS_DLL=OFF
-DEZ_ENABLE_FOLDER_UNITY_FILES=OFF
-DEZ_ENABLE_QT_SUPPORT=OFF
-DEZ_USE_PCH=OFF
@ -28,6 +28,7 @@ vcpkg_cmake_configure(
-DEZ_OUTPUT_DIRECTORY_LIB=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/Output/Lib
-DEZ_OUTPUT_DIRECTORY_DLL=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/Output/Bin
OPTIONS_RELEASE
-DCMAKE_BUILD_TYPE=Shipping
-DEZ_OUTPUT_DIRECTORY_LIB=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/Output/Lib
-DEZ_OUTPUT_DIRECTORY_DLL=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/Output/Bin
)

View File

@ -1,11 +1,10 @@
{
"name": "ezfoundation",
"version": "21.10",
"port-version": 1,
"version": "26.3",
"description": "Foundation library out of ezEngine",
"homepage": "https://ezengine.net/",
"license": "MIT",
"supports": "windows | uwp",
"supports": "windows & !uwp",
"dependencies": [
{
"name": "vcpkg-cmake",

View File

@ -0,0 +1,20 @@
diff --git a/src/libmongoc/CMakeLists.txt b/src/libmongoc/CMakeLists.txt
index cd4c95b..5cefa2c 100644
--- a/src/libmongoc/CMakeLists.txt
+++ b/src/libmongoc/CMakeLists.txt
@@ -422,9 +422,12 @@ function (mongoc_get_accept_args ARG2 ARG3)
}
")
- TRY_COMPILE (RES ${CMAKE_CURRENT_BINARY_DIR}
- ${CMAKE_CURRENT_BINARY_DIR}/accept_test${VAR}.c CMAKE_FLAGS
- "-Werror -DCMAKE_CXX_LINK_EXECUTABLE='echo not linking now...'" OUTPUT_VARIABLE LOG2)
+ TRY_COMPILE (RES
+ "${CMAKE_CURRENT_BINARY_DIR}"
+ SOURCES "${CMAKE_CURRENT_BINARY_DIR}/accept_test${VAR}.c"
+ CMAKE_FLAGS "-DCOMPILE_DEFINITIONS=-Werror" "-DCMAKE_CXX_LINK_EXECUTABLE='echo not linking now...'"
+ OUTPUT_VARIABLE LOG2
+ )
if (RES)
message (

View File

@ -11,6 +11,7 @@ vcpkg_from_github(
fix-include-directory.patch
fix-mingw.patch
remove_abs_patch.cmake
cmake-4.4.patch # https://github.com/mongodb/mongo-c-driver/commit/ea1b54791ec2f1aafb665f98af6cc9dd21116782
)
file(WRITE "${SOURCE_PATH}/VERSION_CURRENT" "${VERSION}")
file(TOUCH "${SOURCE_PATH}/src/utf8proc-editable")

View File

@ -1,6 +1,7 @@
{
"name": "mongo-c-driver",
"version": "2.3.1",
"port-version": 1,
"description": "Client library written in C for MongoDB.",
"homepage": "https://github.com/mongodb/mongo-c-driver",
"license": "Apache-2.0",

View File

@ -0,0 +1,12 @@
diff --git a/modules/videostab/src/cuda/global_motion.cu b/modules/videostab/src/cuda/global_motion.cu
index 7eca6ff..dbd3419 100644
--- a/modules/videostab/src/cuda/global_motion.cu
+++ b/modules/videostab/src/cuda/global_motion.cu
@@ -44,6 +44,7 @@
#include <thrust/device_ptr.h>
#include <thrust/remove.h>
#include <thrust/functional.h>
+#include <thrust/tuple.h>
#include "opencv2/core/cuda/common.hpp"
namespace cv { namespace cuda { namespace device { namespace globmotion {

View File

@ -236,6 +236,7 @@ if("contrib" IN_LIST FEATURES)
0013-contrib-fix-ogre.patch
0016-contrib-fix-freetype.patch
0018-contrib-fix-tesseract.patch
0027-contrib-cuda-tuple.patch # https://github.com/opencv/opencv_contrib/commit/054007b78c8288ef2fd040e77dc0cf2e45f70c15
"${CONTRIB_CUDA_NAMESPACE_FIX}"
"${CONTRIB_CUDA_NOT1_FIX}"
)

View File

@ -1,7 +1,7 @@
{
"name": "opencv4",
"version": "4.12.0",
"port-version": 5,
"port-version": 6,
"description": "Open Source Computer Vision Library",
"homepage": "https://opencv.org/",
"documentation": "https://docs.opencv.org/4.12.0/",

View File

@ -0,0 +1,17 @@
diff --git a/src/popsift/s_filtergrid.cu b/src/popsift/s_filtergrid.cu
index 9e35d8b..9ee93fd 100644
--- a/src/popsift/s_filtergrid.cu
+++ b/src/popsift/s_filtergrid.cu
@@ -17,10 +17,12 @@
#include <thrust/host_vector.h>
#include <thrust/iterator/constant_iterator.h>
#include <thrust/iterator/discard_iterator.h>
+#include <thrust/iterator/zip_iterator.h>
#include <thrust/sequence.h>
#include <thrust/sort.h>
#include <thrust/transform.h>
#include <thrust/transform_scan.h>
+#include <thrust/tuple.h>
#include <thrust/version.h>
namespace popsift

View File

@ -6,6 +6,7 @@ vcpkg_from_github(
HEAD_REF develop
PATCHES
pr-183-add-zcpreprocessor-for-cuda-13-2.diff # https://github.com/alicevision/popsift/pull/183
cuda-13.3-thrust-includes.patch # https://github.com/alicevision/popsift/pull/188
)
vcpkg_find_cuda(OUT_CUDA_TOOLKIT_ROOT CUDA_TOOLKIT_ROOT)

View File

@ -1,7 +1,7 @@
{
"name": "popsift",
"version": "0.10.0",
"port-version": 1,
"port-version": 2,
"description": "PopSift is an implementation of the SIFT algorithm in CUDA.",
"homepage": "https://github.com/alicevision/popsift",
"documentation": "https://popsift.readthedocs.io/",

View File

@ -1,13 +1,13 @@
# syntax=docker/dockerfile:1.4
# DisableDockerDetector "Used to build the container deployed to Azure Container Registry"
FROM ubuntu:noble-20260113
FROM ubuntu:noble-20260610
ADD https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb /packages-microsoft-prod.deb
ADD https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.18+8/OpenJDK17U-jdk_x64_linux_hotspot_17.0.18_8.tar.gz /OpenJDK17U-jdk_x64_linux_hotspot_17.0.18_8.tar.gz
ADD https://dl.google.com/android/repository/commandlinetools-linux-14742923_latest.zip /commandlinetools-linux-14742923_latest.zip
ADD https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.19+10/OpenJDK17U-jdk_x64_linux_hotspot_17.0.19_10.tar.gz /OpenJDK17U-jdk_x64_linux_hotspot_17.0.19_10.tar.gz
ADD https://dl.google.com/android/repository/commandlinetools-linux-15859902_latest.zip /commandlinetools-linux-15859902_latest.zip
ADD https://dl.google.com/android/repository/build-tools_r36.1_linux.zip /build-tools_r36.1_linux.zip
ADD https://dl.google.com/android/repository/platform-36_r01.zip /platform-36_r01.zip
ADD https://dl.google.com/android/repository/platform-tools_r36.0.2-linux.zip /platform-tools_r36.0.2-linux.zip
ADD https://dl.google.com/android/repository/platform-36_r02.zip /platform-36_r02.zip
ADD https://dl.google.com/android/repository/platform-tools_r37.0.0-linux.zip /platform-tools_r37.0.0-linux.zip
ADD https://dl.google.com/android/repository/android-ndk-r29-linux.zip /android-ndk-r29-linux.zip
# Add apt packages
@ -70,27 +70,27 @@ apt-get -y dist-upgrade
apt-get -y --no-install-recommends install $APT_PACKAGES
# OpenJDK
tar xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.18_8.tar.gz
rm OpenJDK17U-jdk_x64_linux_hotspot_17.0.18_8.tar.gz
tar xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.19_10.tar.gz
rm OpenJDK17U-jdk_x64_linux_hotspot_17.0.19_10.tar.gz
# Android SDK
unzip -q commandlinetools-linux-14742923_latest.zip -d android-sdk
rm commandlinetools-linux-14742923_latest.zip
unzip -q commandlinetools-linux-15859902_latest.zip -d android-sdk
rm commandlinetools-linux-15859902_latest.zip
unzip -q build-tools_r36.1_linux.zip -d android-sdk/build-tools
mv android-sdk/build-tools/android-16 android-sdk/build-tools/36.1.0
rm build-tools_r36.1_linux.zip
unzip -q platform-36_r01.zip -d android-sdk/platforms
rm platform-36_r01.zip
unzip -q platform-36_r02.zip -d android-sdk/platforms
rm platform-36_r02.zip
find android-sdk/platforms -type d -exec chmod o+rx '{}' ';'
find android-sdk/platforms -type f -exec chmod o+r '{}' ';'
unzip -q platform-tools_r36.0.2-linux.zip -d android-sdk
rm platform-tools_r36.0.2-linux.zip
unzip -q platform-tools_r37.0.0-linux.zip -d android-sdk
rm platform-tools_r37.0.0-linux.zip
# JRE for sdk setup
export JAVA_HOME=/jdk-17.0.18+8
export JAVA_HOME=/jdk-17.0.19+10
yes | /android-sdk/cmdline-tools/bin/sdkmanager --sdk_root=/android-sdk --licenses
# Android NDK
@ -99,7 +99,7 @@ rm -f android-ndk-r29-linux.zip
END_OF_SCRIPT
ENV JAVA_HOME="/jdk-17.0.18+8"
ENV JAVA_HOME="/jdk-17.0.19+10"
ENV ANDROID_HOME="/android-sdk"

View File

@ -30,7 +30,7 @@ jobs:
- name: VCPKG_DOWNLOADS
value: /mnt/vcpkg-ci/downloads
- name: ANDROID_DOCKER_IMAGE
value: 'vcpkgandroidwus.azurecr.io/vcpkg-android:2026-02-10'
value: 'vcpkgandroidwus.azurecr.io/vcpkg-android:2026-07-15'
- name: LINUX_DOCKER_IMAGE
value: ${{ parameters.linuxDockerImage }}
steps:
@ -113,7 +113,7 @@ jobs:
displayName: 'Ensure Node.js is available'
condition: always()
inputs:
version: '22.x'
version: '24.x'
- bash: |
cd scripts/azure-pipelines/owners-db && npm ci || true
if [ "$(Build.Reason)" = "PullRequest" ]; then

View File

@ -9,11 +9,11 @@ parameters:
- name: x64LinuxDockerImage
displayName: 'Linux Docker Image to use for the x64 Linux build'
type: string
default: 'vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-04-20'
default: 'vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-07-15'
- name: arm64LinuxDockerImage
displayName: 'Linux Docker Image to use for the arm64 Linux build'
type: string
default: 'vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-04-20'
default: 'vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-07-15'
- name: tripletPattern
displayName: 'Enable triplets which contain this substring (^ matches begin, $ matches end)'
type: string

View File

@ -1,7 +1,7 @@
FROM ubuntu:noble-20260410
FROM ubuntu:noble-20260610
ARG BUILD_DATE
ARG POWERSHELL_VERSION=7.6.0
ARG POWERSHELL_VERSION=7.6.3
ENV DEBIAN_FRONTEND=noninteractive
RUN <<EOF

View File

@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1.4
# DisableDockerDetector "Used to build the container deployed to Azure Container Registry"
FROM ubuntu:noble-20260410
FROM ubuntu:noble-20260610
ADD provision-image.sh /provision-image.sh
# The BUILD_DATE argument forces cache invalidation so we get updated apt dependencies
ARG BUILD_DATE

View File

@ -113,7 +113,7 @@ jobs:
displayName: 'Ensure Node.js is available'
condition: always()
inputs:
version: '22.x'
version: '24.x'
- bash: |
cd scripts/azure-pipelines/owners-db && npm ci || true
# Construct the blob base url using the secret SAS token set earlier

View File

@ -27,7 +27,7 @@ arm64)
;;
esac
POWERSHELL_VERSION=7.6.0
POWERSHELL_VERSION=7.6.3
# Apt dependencies; needed for add-apt-repository and curl downloads to work
apt-get -y update
@ -163,33 +163,35 @@ APT_PACKAGES="$APT_PACKAGES libbluetooth-dev"
APT_PACKAGES="$APT_PACKAGES libtirpc-dev"
## CUDA
# The intent is to install everything that does not require an actual GPU, driver, or GUI.
# Intentionally omitted: cuda-demo-suite-13-2 cuda-documentation-13-2 cuda-driver-*
# cuda-gdb-13-2 cuda-gdb-src-13-2 cuda-nsight-* cuda-nvdisasm
# cuda-nvprof cuda-nvprune cuda-profiler-api* cuda-sandbox-*
# cuda-visual-tools-13-2 nvidia-gds-13-2 cuda-nvvp-13-2
# cuda-toolkit-13-2 cuda-tools-13-2 cuda-command-line-tools-13-2
# cuda-runtime-13-2
# All libraries for which there is a -dev suffix included here
# The intent is to install the CUDA toolkit except drivers, GUI tools, and documentation.
# On version updates, inspect the Package and Depends fields in both of these repository manifests:
# https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${NVIDIA_REPO_VERSION}/x86_64/Packages
# https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${NVIDIA_REPO_VERSION}/sbsa/Packages
# NVIDIA changes package names and dependencies between releases. Confirm that:
# - cuda-compat-* and nvidia-gds-* remain omitted because they install or depend on driver components.
# cuda-driver-dev-* is only the driver stub library and is intentionally included.
# - cuda-nsight-*, cuda-visual-tools-*, and cuda-documentation-* remain omitted as GUI or documentation.
# - cuda-<version>, cuda-toolkit-*, and cuda-tools-* remain omitted because they pull in those exclusions.
# Runtime libraries are installed through their corresponding -dev packages and are not listed separately.
# cudnn9-jit-cuda-13 : cudnn9-jit appears to conflict with cudnn9-dev packages:
# root@c47a4cc2ea72:/# apt install cudnn9-jit-cuda-13
# The following additional packages will be installed:
# cudnn9-jit-cuda-13-2 libcudnn9-jit-cuda-13 libcudnn9-jit-dev-cuda-13
# cudnn9-jit-cuda-13-3 libcudnn9-jit-cuda-13 libcudnn9-jit-dev-cuda-13
# The following packages will be REMOVED:
# cudnn9-cuda-13 cudnn9-cuda-13-2 libcudnn9-cuda-13 libcudnn9-dev-cuda-13 libcudnn9-static-cuda-13
# cudnn9-cuda-13 cudnn9-cuda-13-3 libcudnn9-cuda-13 libcudnn9-dev-cuda-13 libcudnn9-static-cuda-13
# The following NEW packages will be installed:
# cudnn9-jit-cuda-13 cudnn9-jit-cuda-13-2 libcudnn9-jit-cuda-13 libcudnn9-jit-dev-cuda-13
APT_PACKAGES="$APT_PACKAGES cuda-cccl-13-2 cuda-compat-13-2 cuda-compiler-13-2 cuda-crt-13-2 \
cuda-cudart-dev-13-2 cuda-cuobjdump-13-2 cuda-cupti-dev-13-2 cuda-cuxxfilt-13-2 \
cuda-driver-dev-13-2 cuda-libraries-dev-13-2 cuda-minimal-build-13-2 cuda-nvcc-13-2 \
cuda-nvml-dev-13-2 cuda-nvrtc-dev-13-2 cuda-nvtx-13-2 libnvvm-13-2 \
cuda-sanitizer-13-2 cuda-toolkit-13-2-config-common cudnn9-cuda-13 gds-tools-13-2 \
libcublas-13-2 libcudnn9-dev-cuda-13 libcufft-dev-13-2 libcurand-dev-13-2 libcusolver-dev-13-2 \
libcusparse-dev-13-2 libnccl-dev libnpp-dev-13-2 libnvfatbin-dev-13-2 libnvjitlink-dev-13-2 \
libnvjpeg-dev-13-2"
# cudnn9-jit-cuda-13 cudnn9-jit-cuda-13-3 libcudnn9-jit-cuda-13 libcudnn9-jit-dev-cuda-13
APT_PACKAGES="$APT_PACKAGES cccl-13-3 cuda-command-line-tools-13-3 cuda-compiler-13-3 cuda-crt-13-3 \
cuda-cudart-dev-13-3 cuda-cuobjdump-13-3 cuda-cupti-dev-13-3 cuda-cuxxfilt-13-3 \
cuda-driver-dev-13-3 cuda-libraries-dev-13-3 cuda-minimal-build-13-3 cuda-nvcc-13-3 \
cuda-nvml-dev-13-3 cuda-nvrtc-dev-13-3 cuda-nvtx-13-3 libnvvm-13-3 \
cuda-sanitizer-13-3 cuda-toolkit-13-3-config-common cudnn9-cuda-13 gds-tools-13-3 \
libcublas-13-3 libcudnn9-dev-cuda-13 libcufft-dev-13-3 libcurand-dev-13-3 libcusolver-dev-13-3 \
libcusparse-dev-13-3 libnccl-dev libnpp-dev-13-3 libnvfatbin-dev-13-3 libnvjitlink-dev-13-3 \
libnvjpeg-dev-13-3"
if [[ "$DEBIAN_ARCHITECTURE" == "amd64" ]]; then
APT_PACKAGES="$APT_PACKAGES cuda-opencl-dev-13-2"
APT_PACKAGES="$APT_PACKAGES cuda-opencl-dev-13-3"
fi
## PowerShell + Azure

View File

@ -30,20 +30,20 @@ jobs:
az acr login --name vcpkgandroidwus
# Note that this is marking the *previous* image as EOL, not the one we're building as it attaches
# to the SHA to which the tag points, not the tag itself.
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-android:2026-02-10 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-android:2026-02-10"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-android:2026-02-10 --platform linux/amd64 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-android:2026-02-10 linux/amd64"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-04-20 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-linux:2026-01-20"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-04-20 --platform linux/amd64 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-linux:2026-01-20 linux/amd64"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-android:2026-07-15 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-android:2026-07-15"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-android:2026-07-15 --platform linux/amd64 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-android:2026-07-15 linux/amd64"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-07-15 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-linux:2026-07-15"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-07-15 --platform linux/amd64 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-linux:2026-07-15 linux/amd64"
# Note that this is an image for *targeting* arm64, it's still an amd64 image, hence linux/amd64
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-04-20 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-arm64-linux:2026-03-18"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-04-20 --platform linux/amd64 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-arm64-linux:2026-03-18 linux/amd64"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-07-15 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-arm64-linux:2026-07-15"
oras attach --artifact-type application/vnd.microsoft.artifact.lifecycle --annotation "vnd.microsoft.artifact.lifecycle.end-of-life.date=$EndDate" vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-07-15 --platform linux/amd64 || echo "WARNING: Failed to attach lifecycle metadata to vcpkg-arm64-linux:2026-07-15 linux/amd64"
cd scripts/azure-pipelines/android
# to explain the ulimit thing, see https://github.com/docker/buildx/issues/379
docker buildx build . -t vcpkgandroidwus.azurecr.io/vcpkg-android:2026-02-10 --build-arg BUILD_DATE=$BuildDate --ulimit nofile=1024:1024
docker push vcpkgandroidwus.azurecr.io/vcpkg-android:2026-02-10
docker buildx build . -t vcpkgandroidwus.azurecr.io/vcpkg-android:2026-07-15 --build-arg BUILD_DATE=$BuildDate --ulimit nofile=1024:1024
docker push vcpkgandroidwus.azurecr.io/vcpkg-android:2026-07-15
cd ../linux
docker buildx build . -t vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-04-20 --build-arg BUILD_DATE=$BuildDate --ulimit nofile=1024:1024
docker push vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-04-20
docker buildx build . -t vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-07-15 --build-arg BUILD_DATE=$BuildDate --ulimit nofile=1024:1024
docker push vcpkgandroidwus.azurecr.io/vcpkg-linux:2026-07-15
cd ../linux-arm64
docker buildx build . -t vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-04-20 --build-arg BUILD_DATE=$BuildDate --ulimit nofile=1024:1024
docker push vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-04-20
docker buildx build . -t vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-07-15 --build-arg BUILD_DATE=$BuildDate --ulimit nofile=1024:1024
docker push vcpkgandroidwus.azurecr.io/vcpkg-arm64-linux:2026-07-15

View File

@ -20,7 +20,7 @@ jobs:
condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}'))
pool:
name: PrWin-WUS
demands: ImageVersionOverride -equals 2026.06.10
demands: ImageVersionOverride -equals 2026.07.16
timeoutInMinutes: 2880 # 2 days
variables:
- name: WORKING_ROOT
@ -93,7 +93,7 @@ jobs:
displayName: 'Ensure Node.js is available'
condition: always()
inputs:
version: '22.x'
version: '24.x'
- task: PowerShell@2
displayName: 'Build a file list for all packages'
condition: always()

View File

@ -12,6 +12,9 @@ create-image.ps1 creates an Azure Windows VM image, set up for vcpkg's CI system
This script assumes you have installed Azure tools into PowerShell by following the instructions
at https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-3.6.1
or are running from Azure Cloud Shell.
The prototype-vm user-assigned managed identity in the vcpkg-image-minting resource group must have
Storage Blob Data Reader access to the vcpkgimageminting storage account.
#>
$Location = 'westus3'
@ -24,7 +27,7 @@ $WindowsServerSku = '2025-datacenter-azure-edition'
$ErrorActionPreference = 'Stop'
$ProgressActivity = 'Creating Windows Image'
$TotalProgress = 22
$TotalProgress = 17
$CurrentProgress = 1
# Assigning this to another variable helps when running the commands in this script manually for
@ -97,6 +100,9 @@ $Credential = New-Object System.Management.Automation.PSCredential ("AdminUser",
$VirtualNetwork = Get-AzVirtualNetwork -ResourceGroupName 'vcpkg-image-minting' -Name 'vcpkg-image-minting-wus3'
$Subnet = $VirtualNetwork.Subnets | Where-Object -Property 'Name' -EQ -Value 'image-minting' | Select-Object -First 1
$PrototypeVmIdentity = Get-AzUserAssignedIdentity `
-ResourceGroupName 'vcpkg-image-minting' `
-Name 'prototype-vm'
####################################################################################################
Write-Progress `
@ -112,7 +118,12 @@ $Nic = New-AzNetworkInterface `
-Subnet $Subnet `
-EnableAcceleratedNetworking
$VM = New-AzVMConfig -Name $ProtoVMName -VMSize $VMSize -SecurityType TrustedLaunch -IdentityType SystemAssigned
$VM = New-AzVMConfig `
-Name $ProtoVMName `
-VMSize $VMSize `
-SecurityType TrustedLaunch `
-IdentityType UserAssigned `
-IdentityId $PrototypeVmIdentity.Id
$VM = Set-AzVMOperatingSystem `
-VM $VM `
-Windows `
@ -138,25 +149,9 @@ New-AzVm `
$VMCreated = Get-AzVM -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName
$VMCreatedOsDisk = $VMCreated.StorageProfile.OsDisk.Name
####################################################################################################
Write-Progress `
-Activity $ProgressActivity `
-Status 'Minting token for vcpkg-image-minting storage account' `
-PercentComplete (100 / $TotalProgress * $CurrentProgress++)
$VcpkgImageMintingAccount = Get-AzStorageAccount -ResourceGroupName 'vcpkg-image-minting' -Name 'vcpkgimageminting'
$AssetStorageContext = New-AzStorageContext -StorageAccountName 'vcpkgimageminting' -UseConnectedAccount
$StartTime = Get-Date
$ExpiryTime = $StartTime.AddHours(4)
$AssetsSas = New-AzStorageContainerSASToken -Name 'assets' -Permission r -StartTime $StartTime -ExpiryTime $ExpiryTime -Context $AssetStorageContext
####################################################################################################
function Invoke-ScriptWithPrefix {
param(
[string]$ScriptName,
[switch]$SkipSas
)
param([string]$ScriptName)
Write-Progress `
-Activity $ProgressActivity `
@ -164,6 +159,7 @@ function Invoke-ScriptWithPrefix {
-PercentComplete (100 / $TotalProgress * $CurrentProgress++)
$UtilityPrefixContent = Get-Content -LiteralPath "$Root\utility-prefix.ps1" -Encoding ascii -Raw
$UtilityPrefixContent += "`n`$UseManagedIdentity = `$true`n"
$tempScriptFilename = "$env:TEMP\temp-script.txt"
try {
@ -173,20 +169,14 @@ if (Test-Path -LiteralPath "`$PSScriptRoot/utility-prefix.ps1") {
. "`$PSScriptRoot/utility-prefix.ps1"
}
"@
$script = $script.Replace($replacement, $UtilityPrefixContent);
$script = $script.Replace($replacement, $UtilityPrefixContent)
Set-Content -LiteralPath $tempScriptFilename -Value $script -Encoding ascii
$parameter = $null
if (-not $SkipSas) {
$parameter = @{SasToken = "`"$AssetsSas`"";}
}
$InvokeResult = Invoke-AzVMRunCommand `
-ResourceGroupName 'vcpkg-image-minting' `
-VMName $ProtoVMName `
-CommandId 'RunPowerShellScript' `
-ScriptPath $tempScriptFilename `
-Parameter $parameter
-ScriptPath $tempScriptFilename
Write-Host "$ScriptName output: $($InvokeResult.value.Message)"
} finally {
@ -194,11 +184,6 @@ if (Test-Path -LiteralPath "`$PSScriptRoot/utility-prefix.ps1") {
}
}
####################################################################################################
Invoke-ScriptWithPrefix -ScriptName 'deploy-tlssettings.ps1' -SkipSas
Write-Host 'Waiting 1 minute for VM to reboot...'
Start-Sleep -Seconds 60
####################################################################################################
Invoke-ScriptWithPrefix -ScriptName 'deploy-sevenzip.ps1'
@ -223,9 +208,6 @@ Invoke-ScriptWithPrefix -ScriptName 'deploy-cuda.ps1'
####################################################################################################
Invoke-ScriptWithPrefix -ScriptName 'deploy-cudnn.ps1'
####################################################################################################
Invoke-ScriptWithPrefix -ScriptName 'deploy-inteloneapi.ps1'
####################################################################################################
Invoke-ScriptWithPrefix -ScriptName 'deploy-pwsh.ps1'
@ -236,7 +218,7 @@ Invoke-ScriptWithPrefix -ScriptName 'deploy-azure-cli.ps1'
Invoke-ScriptWithPrefix -ScriptName 'deploy-azcopy.ps1'
####################################################################################################
Invoke-ScriptWithPrefix -ScriptName 'deploy-settings.txt' -SkipSas
Invoke-ScriptWithPrefix -ScriptName 'deploy-settings.txt'
Restart-AzVM -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName
####################################################################################################

View File

@ -1,16 +1,13 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$AzCopyUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.4/azcopy_windows_amd64_10.32.4.zip' `
-BlobAssetName 'azcopy_windows_amd64_10.32.4.zip'
-InternetUrl 'https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.6/azcopy_windows_amd64_10.32.6.zip' `
-BlobAssetName 'azcopy_windows_amd64_10.32.6.zip'
mkdir -Force "C:\AzCopy10"
DownloadAndUnzip -Url $AzCopyUrl -Destination "C:\AzCopy10" -StripRootDirectory

View File

@ -1,15 +1,12 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$AzCliUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.87.0-x64.msi' `
-BlobAssetName 'azure-cli-2.87.0-x64.msi'
-InternetUrl 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.88.0-x64.msi' `
-BlobAssetName 'azure-cli-2.88.0-x64.msi'
DownloadAndInstall -Url $AzCliUrl -Args @('/quiet', '/norestart')

View File

@ -1,16 +1,13 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$CMakeUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://github.com/Kitware/CMake/releases/download/v4.3.3/cmake-4.3.3-windows-x86_64.msi' `
-BlobAssetName 'cmake-4.3.3-windows-x86_64.msi'
-InternetUrl 'https://github.com/Kitware/CMake/releases/download/v4.4.0/cmake-4.4.0-windows-x86_64.msi' `
-BlobAssetName 'cmake-4.4.0-windows-x86_64.msi'
DownloadAndInstall -Url $CMakeUrl -Args @('/quiet', '/norestart', 'ADD_CMAKE_TO_PATH=System')

View File

@ -1,62 +1,68 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$CudaUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://developer.download.nvidia.com/compute/cuda/13.2.0/local_installers/cuda_13.2.0_windows.exe' `
-BlobAssetName 'cuda_13.2.0_windows.exe'
-InternetUrl 'https://developer.download.nvidia.com/compute/cuda/13.3.1/local_installers/cuda_13.3.1_windows.exe' `
-BlobAssetName 'cuda_13.3.1_windows.exe'
# https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html
# Intentionally omitted:
# ctadvisor_13.2
# documentation_13.2
# nsight_compute_13.2
# nsight_systems_13.2
# nsight_vse_13.2
# occupancy_calculator_13.2 (this is named like a tool but listed as 'documentation' in the installer)
# visual_studio_integration_13.2
# On version updates, extract the package manifests from the installer with:
# 7z x cuda_<version>_windows.exe -o<output> -ir!*.nvi
# Each manifest whose customInstallTree/treeNode has accessibility="selectable" names a valid package
# in its root <nvi name="..."> element. Compare those names with both lists below; NVIDIA changes the
# package names and composition between releases. Confirm every omission is still related to drivers,
# documentation, or Visual Studio.
#
# Intentionally omitted due to being Visual Studio / GUI features:
# ctadvisor_13.3
# nsight_compute_13.3
# nsight_systems_13.3
# nsight_vse_13.3
# visual_studio_integration_13.3
# Intentionally omitted due to being documentation:
# documentation_13.3
# occupancy_calculator_13.3 (this is named like a tool but listed as 'documentation' in the installer)
# (Drivers used to be omitted but as of CUDA 13 they no longer seem to be in the CUDA installer)
DownloadAndInstall -Url $CudaUrl -Args @(
'-s',
'crt_13.2',
'cublas_13.2',
'cublas_dev_13.2',
'cuda_profiler_api_13.2',
'cudart_13.2',
'cufft_13.2',
'cufft_dev_13.2',
'cuobjdump_13.2',
'cupti_13.2',
'curand_13.2',
'curand_dev_13.2',
'cusolver_13.2',
'cusolver_dev_13.2',
'cusparse_13.2',
'cusparse_dev_13.2',
'cuxxfilt_13.2',
'npp_13.2',
'npp_dev_13.2',
'nvcc_13.2',
'nvdisasm_13.2',
'nvfatbin_13.2',
'nvjitlink_13.2',
'nvjpeg_13.2',
'nvjpeg_dev_13.2',
'nvml_dev_13.2',
'nvprune_13.2',
'nvptxcompiler_13.2',
'nvrtc_13.2',
'nvrtc_dev_13.2',
'nvtx_13.2',
'nvvm_13.2',
'opencl_13.2',
'sanitizer_13.2',
'thrust_13.2',
'tileiras_13.2',
'crt_13.3',
'cublas_13.3',
'cublas_dev_13.3',
'cuda_profiler_api_13.3',
'cudart_13.3',
'cufft_13.3',
'cufft_dev_13.3',
'cuobjdump_13.3',
'cupti_13.3',
'curand_13.3',
'curand_dev_13.3',
'cusolver_13.3',
'cusolver_dev_13.3',
'cusparse_13.3',
'cusparse_dev_13.3',
'cuxxfilt_13.3',
'npp_13.3',
'npp_dev_13.3',
'nvcc_13.3',
'nvdisasm_13.3',
'nvfatbin_13.3',
'nvjitlink_13.3',
'nvjpeg_13.3',
'nvjpeg_dev_13.3',
'nvml_dev_13.3',
'nvprune_13.3',
'nvptxcompiler_13.3',
'nvrtc_13.3',
'nvrtc_dev_13.3',
'nvtx_13.3',
'nvvm_13.3',
'opencl_13.3',
'sanitizer_13.3',
'thrust_13.3',
'tileiras_13.3',
'-n'
)

View File

@ -1,18 +1,15 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$CudnnUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' `
-BlobAssetName 'cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip'
-InternetUrl 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.24.0.43_cuda13-archive.zip' `
-BlobAssetName 'cudnn-windows-x86_64-9.24.0.43_cuda13-archive.zip'
[System.IO.DirectoryInfo]$CudnnInstallDir = "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2"
[System.IO.DirectoryInfo]$CudnnInstallDir = "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.3"
DownloadAndUnzip -Url $CudnnUrl -Destination $CudnnInstallDir -StripRootDirectory

View File

@ -1,16 +1,13 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$GitUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://github.com/git-for-windows/git/releases/download/v2.54.0.windows.1/Git-2.54.0-64-bit.exe' `
-BlobAssetName 'Git-2.54.0-64-bit.exe'
-InternetUrl 'https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.3/Git-2.55.0.3-64-bit.exe' `
-BlobAssetName 'Git-2.55.0.3-64-bit.exe'
$GitInfContent = @"
[Setup]

View File

@ -1,8 +1,6 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}

View File

@ -1,49 +0,0 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$LocalName = 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe'
$oneAPIBaseUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/36f868e9-84b3-4b4f-90ef-ca84092cae6a/$LocalName" `
-BlobAssetName $LocalName
$oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler'
try {
$installer = Get-LocalOrDownloadedFile -Url $oneAPIBaseUrl -LocalName $LocalName
[string]$LocalPath = $installer.Path
[string]$extractionPath = Get-TempFilePath
Write-Host 'Extracting Intel oneAPI...to folder: ' $extractionPath
$proc = Start-Process -FilePath $LocalPath -ArgumentList @('-s ', '-x', '-f', $extractionPath) -Wait -PassThru
$exitCode = $proc.ExitCode
if ($exitCode -eq 0) {
Write-Host 'Extraction successful!'
} else {
Write-Error "Extraction failed! Exited with $exitCode."
throw
}
Write-Host 'Install Intel oneAPI...from folder: ' $extractionPath
$proc = Start-Process -FilePath "$extractionPath/bootstrapper.exe" -ArgumentList @('-s ', '--action install', "--components=$oneAPIHPCComponents" , '--eula=accept', '-p=NEED_VS2017_INTEGRATION=0', '-p=NEED_VS2019_INTEGRATION=0', '-p=NEED_VS2022_INTEGRATION=0', '--log-dir=.') -Wait -PassThru
$exitCode = $proc.ExitCode
if ($exitCode -eq 0) {
Write-Host 'Installation successful!'
} elseif ($exitCode -eq 3010) {
Write-Host 'Installation successful! Exited with 3010 (ERROR_SUCCESS_REBOOT_REQUIRED).'
} else {
Write-Error "Installation failed! Exited with $exitCode."
}
if ($installer.Temporary) {
Remove-Item -LiteralPath $LocalPath -Force
}
} catch {
Write-Error "Installation failed! Exception: $($_.Exception.Message)"
}

View File

@ -1,15 +1,12 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$LocalName = 'msmpisetup-10.1.12498.52.exe'
$MpiUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://download.microsoft.com/download/7/2/7/72731ebb-b63c-4170-ade7-836966263a8f/msmpisetup.exe' `
-BlobAssetName $LocalName

View File

@ -1,15 +1,12 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$LocalName = 'ninja-win-1.13.2.zip'
$NinjaUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip' `
-BlobAssetName $LocalName

View File

@ -1,15 +1,12 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$PwshUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.2/PowerShell-7.6.2-win-x64.msi' `
-BlobAssetName 'PowerShell-7.6.2-win-x64.msi'
-InternetUrl 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.3/PowerShell-7.6.3-win-x64.msi' `
-BlobAssetName 'PowerShell-7.6.3-win-x64.msi'
DownloadAndInstall -Url $PwshUrl -Args @('/quiet', '/norestart')

View File

@ -1,15 +1,12 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
$SevenZipUrl = Get-AssetUrl `
-SasToken $SasToken `
-InternetUrl 'https://github.com/ip7z/7zip/releases/download/26.01/7z2601-x64.exe' `
-BlobAssetName '7z2601-x64.exe'
-InternetUrl 'https://github.com/ip7z/7zip/releases/download/26.02/7z2602-x64.exe' `
-BlobAssetName '7z2602-x64.exe'
DownloadAndInstall -Url $SevenZipUrl -Args @('/S')

View File

@ -1,738 +0,0 @@
#***************************************************************************************************************
# This script supports the TLS 1.2 everywhere project
# It does the following:
# * By default it disables TLS 1.O, TLS 1.1, SSLv2, SSLv3 and Enables TLS1.2
# * The CipherSuite order is set to the SDL approved version.
# * The FIPS MinEncryptionLevel is set to 3.
# * RC4 is disabled
# * A log with a transcript of all actions taken is generated
#***************************************************************************************************************
#************************************************ SCRIPT USAGE ************************************************
# .\TLSSettings.ps1
# -SetCipherOrder : Excellence/Min-Bar, default(Excellence), use B to set Min-Bar. (Min-Bar ordering prefers ciphers with smaller key sizes to improve performance over security)
# -RebootIfRequired : $true/$false, default($true), use $false to disable auto-reboot (Settings won't take effect until a reboot is completed)
# -EnableOlderTlsVersions : $true/$false, default($false), use $true to explicitly Enable TLS1.0, TLS1.1
#***************************************************************************************************************
#***************************TEAM CAN DETERMINE WHAT CIPHER SUITE ORDER IS CHOSEN ******************************
# Option B provides the min-bar configuration (small trade-off: performance over security)
# Syntax: .\TLSSettings.ps1 -SetCipherOrder B
# if no option is supplied, you will get the opportunity for excellence cipher order (small trade-off: security over performance)
# Syntax: .\TLSSettings.ps1
#***************************************************************************************************************
param (
[string]$SetCipherOrder = " ",
[bool]$RebootIfRequired = $true,
[bool]$EnableOlderTlsVersions = $false
)
#******************* FUNCTION THAT ACTUALLY UPDATES KEYS; WILL RETURN REBOOT FLAG IF CHANGES ***********************
Function Set-CryptoSetting {
param (
$regKeyName,
$value,
$valuedata,
$valuetype
)
$restart = $false
# Check for existence of registry key, and create if it does not exist
If (!(Test-Path -Path $regKeyName)) {
New-Item $regKeyName | Out-Null
}
# Get data of registry value, or null if it does not exist
$val = (Get-ItemProperty -Path $regKeyName -Name $value -ErrorAction SilentlyContinue).$value
If ($val -eq $null) {
# Value does not exist - create and set to desired value
New-ItemProperty -Path $regKeyName -Name $value -Value $valuedata -PropertyType $valuetype | Out-Null
$restart = $true
}
Else {
# Value does exist - if not equal to desired value, change it
If ($val -ne $valuedata) {
Set-ItemProperty -Path $regKeyName -Name $value -Value $valuedata
$restart = $true
}
}
$restart
}
#***************************************************************************************************************
#******************* FUNCTION THAT DISABLES RC4 ***********************
Function DisableRC4 {
$restart = $false
$subkeys = Get-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL"
$ciphers = $subkeys.OpenSubKey("Ciphers", $true)
Write-Log -Message "----- Checking the status of RC4 -----" -Logfile $logLocation -Severity Information
$RC4 = $false
if ($ciphers.SubKeyCount -eq 0) {
$k1 = $ciphers.CreateSubKey("RC4 128/128")
$k1.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord)
$restart = $true
$k2 = $ciphers.CreateSubKey("RC4 64/128")
$k2.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord)
$k3 = $ciphers.CreateSubKey("RC4 56/128")
$k3.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord)
$k4 = $ciphers.CreateSubKey("RC4 40/128")
$k4.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord)
Write-Log -Message "RC4 was disabled " -Logfile $logLocation -Severity Information
$RC4 = $true
}
If ($RC4 -ne $true) {
Write-Log -Message "There was no change for RC4 " -Logfile $logLocation -Severity Information
}
$restart
}
#***************************************************************************************************************
#******************* FUNCTION CHECKS FOR PROBLEMATIC FIPS SETTING AND FIXES IT ***********************
Function Test-RegistryValueForFipsSettings {
$restart = $false
$fipsPath = @(
"HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp",
"HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services",
"HKLM:\System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration"
)
$fipsValue = "MinEncryptionLevel"
foreach ($path in $fipsPath) {
Write-Log -Message "Checking to see if $($path)\$fipsValue exists" -Logfile $logLocation -Severity Information
$ErrorActionPreference = "stop"
Try {
$result = Get-ItemProperty -Path $path | Select-Object -ExpandProperty $fipsValue
if ($result -eq 4) {
set-itemproperty -Path $path -Name $fipsValue -value 3
Write-Log -Message "Regkey $($path)\$fipsValue was changed from value $result to a value of 3" -Logfile $logLocation -Severity Information
$restart = $true
}
else {
Write-Log -Message "Regkey $($path)\$fipsValue left at value $result" -Logfile $logLocation -Severity Information
}
}
Catch [System.Management.Automation.ItemNotFoundException] {
Write-Log -Message "Reg path $path was not found" -Logfile $logLocation -Severity Information
}
Catch [System.Management.Automation.PSArgumentException] {
Write-Log -Message "Regkey $($path)\$fipsValue was not found" -Logfile $logLocation -Severity Information
}
Catch {
Write-Log -Message "Error of type $($Error[0].Exception.GetType().FullName) trying to get $($path)\$fipsValue" -Logfile $logLocation -Severity Information
}
Finally {$ErrorActionPreference = "Continue"
}
}
$restart
}
#***************************************************************************************************************
#********************************** FUNCTION THAT CREATE LOG DIRECTORY IF IT DOES NOT EXIST *******************************
function CreateLogDirectory {
$TARGETDIR = "$env:HOMEDRIVE\Logs"
if ( -Not (Test-Path -Path $TARGETDIR ) ) {
New-Item -ItemType directory -Path $TARGETDIR | Out-Null
}
$TARGETDIR = $TARGETDIR + "\" + "TLSSettingsLogFile.csv"
return $TARGETDIR
}
#***************************************************************************************************************
#********************************** FUNCTION THAT LOGS WHAT THE SCRIPT IS DOING *******************************
function Write-Log {
[CmdletBinding()]
param(
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$Message,
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$LogFile,
[Parameter()]
[ValidateNotNullOrEmpty()]
[ValidateSet('Information', 'Warning', 'Error')]
[string]$Severity = 'Information'
)
[pscustomobject]@{
Time = (Get-Date -f g)
Message = $Message
Severity = $Severity
} | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append -FilePath $LogFile
}
#********************************TLS CipherSuite Settings *******************************************
# CipherSuites for windows OS < 10
function Get-BaseCipherSuitesOlderWindows()
{
param
(
[Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder
)
$cipherorder = @()
if ($isExcellenceOrder -eq $true)
{
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256"
}
else
{
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384"
}
# Add additional ciphers when EnableOlderTlsVersions flag is set to true
if ($EnableOlderTlsVersions)
{
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256"
$cipherorder += "TLS_RSA_WITH_AES_256_GCM_SHA384"
$cipherorder += "TLS_RSA_WITH_AES_128_GCM_SHA256"
$cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA256"
$cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA256"
$cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA"
$cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA"
}
return $cipherorder
}
# Ciphersuites needed for backwards compatibility with Firefox, Chrome
# Server 2012 R2 doesn't support TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
# Both firefox and chrome negotiate ECDHE_RSA_AES_256_CBC_SHA1, Edge negotiates ECDHE_RSA_AES_256_CBC_SHA384
function Get-BrowserCompatCipherSuitesOlderWindows()
{
param
(
[Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder
)
$cipherorder = @()
if ($isExcellenceOrder -eq $true)
{
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384" # (uses SHA-1)
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" # (uses SHA-1)
}
else
{
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" # (uses SHA-1)
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384" # (uses SHA-1)
}
return $cipherorder
}
# Ciphersuites for OS versions windows 10 and above
function Get-BaseCipherSuitesWin10Above()
{
param
(
[Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder
)
$cipherorder = @()
if ($isExcellenceOrder -eq $true)
{
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
}
else
{
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
}
# Add additional ciphers when EnableOlderTlsVersions flag is set to true
if ($EnableOlderTlsVersions)
{
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256"
$cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256"
$cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256"
$cipherorder += "TLS_RSA_WITH_AES_256_GCM_SHA384"
$cipherorder += "TLS_RSA_WITH_AES_128_GCM_SHA256"
$cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA256"
$cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA256"
$cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA"
$cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA"
}
return $cipherorder
}
#******************************* TLS Version Settings ****************************************************
function Get-RegKeyPathForTls12()
{
$regKeyPath = @(
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server"
)
return $regKeyPath
}
function Get-RegKeyPathForTls11()
{
$regKeyPath = @(
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server"
)
return $regKeyPath
}
function Get-RegKeypathForTls10()
{
$regKeyPath = @(
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server"
)
return $regKeyPath
}
function Get-RegKeyPathForSsl30()
{
$regKeyPath = @(
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server"
)
return $regKeyPath
}
function Get-RegKeyPathForSsl20()
{
$regKeyPath = @(
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client",
"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server"
)
return $regKeyPath
}
#Initialize reboot value to false
$reboot = $false
#*****************************Create the logfile if not does not exist***************************************
$logLocation = CreateLogDirectory
#Start writing to the logs
Write-Log -Message "========== Start of logging for a script execution ==========" -Logfile $logLocation -Severity Information
$registryPathGoodGuys = @()
$registryPathBadGuys = @()
# we enable TLS 1.2 and disable SSL 2.0, 3.0 in any case
$registryPathGoodGuys += Get-RegKeyPathForTls12
$registryPathBadGuys += Get-RegKeyPathForSsl20
$registryPathBadGuys += Get-RegKeyPathForSsl30
# add TLS 1.0/1.1 to good/bad depending on user's preference
# default is adding TLS 1.0/1.1 to bad
if ($EnableOlderTlsVersions)
{
$registryPathGoodGuys += Get-RegKeypathForTls10
$registryPathGoodGuys += Get-RegKeyPathForTls11
Write-Log -Message "Enabling TLS1.2, TLS1.1, TLS1.0. Disabling SSL3.0, SSL2.0" -Logfile $logLocation -Severity Information
}
else
{
$registryPathBadGuys += Get-RegKeypathForTls10
$registryPathBadGuys += Get-RegKeyPathForTls11
Write-Log -Message "Enabling TLS1.2. Disabling TLS1.1, TLS1.0, SSL3.0, SSL2.0" -Logfile $logLocation -Severity Information
}
Write-Log -Message "Check which registry keys exist already and which registry keys need to be created." -Logfile $logLocation -Severity Information
#******************* CREATE THE REGISTRY KEYS IF THEY DON'T EXIST********************************
# Check for existence of GoodGuy registry keys, and create if they do not exist
For ($i = 0; $i -lt $registryPathGoodGuys.Length; $i = $i + 1) {
Write-Log -Message "Checking for existing of key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information
If (!(Test-Path -Path $registryPathGoodGuys[$i])) {
New-Item $registryPathGoodGuys[$i] | Out-Null
Write-Log -Message "Creating key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information
}
}
# Check for existence of BadGuy registry keys, and create if they do not exist
For ($i = 0; $i -lt $registryPathBadGuys.Length; $i = $i + 1) {
Write-Log -Message "Checking for existing of key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information
If (!(Test-Path -Path $registryPathBadGuys[$i])) {
Write-Log -Message "Creating key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information
New-Item $registryPathBadGuys[$i] | Out-Null
}
}
#******************* EXPLICITLY DISABLE SSLV2, SSLV3, TLS10 AND TLS11 ********************************
For ($i = 0; $i -lt $registryPathBadGuys.Length; $i = $i + 1) {
if ($registryPathBadGuys[$i].Contains("Client") -Or $registryPathBadGuys[$i].Contains("Server")) {
Write-Log -Message "Disabling this key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information
$result = Set-CryptoSetting $registryPathBadGuys[$i].ToString() Enabled 0 DWord
$result = Set-CryptoSetting $registryPathBadGuys[$i].ToString() DisabledByDefault 1 DWord
$reboot = $reboot -or $result
}
}
#********************************* EXPLICITLY Enable TLS12 ****************************************
For ($i = 0; $i -lt $registryPathGoodGuys.Length; $i = $i + 1) {
if ($registryPathGoodGuys[$i].Contains("Client") -Or $registryPathGoodGuys[$i].Contains("Server")) {
Write-Log -Message "Enabling this key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information
$result = Set-CryptoSetting $registryPathGoodGuys[$i].ToString() Enabled 1 DWord
$result = Set-CryptoSetting $registryPathGoodGuys[$i].ToString() DisabledByDefault 0 DWord
$reboot = $reboot -or $result
}
}
#************************************** Disable RC4 ************************************************
$result = DisableRC4
$reboot = $reboot -or $result
#************************************** Set Cipher Suite Order **************************************
Write-Log -Message "----- starting ciphersuite order calculation -----" -Logfile $logLocation -Severity Information
$configureExcellenceOrder = $true
if ($SetCipherOrder.ToUpper() -eq "B")
{
$configureExcellenceOrder = $false
Write-Host "The min bar cipher suite order was chosen."
Write-Log -Message "The min bar cipher suite order was chosen." -Logfile $logLocation -Severity Information
}
else
{
Write-Host "The opportunity for excellence cipher suite order was chosen."
Write-Log -Message "The opportunity for excellence cipher suite order was chosen." -Logfile $logLocation -Severity Information
}
$cipherlist = @()
if ([Environment]::OSVersion.Version.Major -lt 10)
{
$cipherlist += Get-BaseCipherSuitesOlderWindows -isExcellenceOrder $configureExcellenceOrder
$cipherlist += Get-BrowserCompatCipherSuitesOlderWindows -isExcellenceOrder $configureExcellenceOrder
}
else
{
$cipherlist += Get-BaseCipherSuitesWin10Above -isExcellenceOrder $configureExcellenceOrder
}
$cipherorder = [System.String]::Join(",", $cipherlist)
Write-Host "Appropriate ciphersuite order : $cipherorder"
Write-Log -Message "Appropriate ciphersuite order : $cipherorder" -Logfile $logLocation -Severity Information
$CipherSuiteRegKey = "HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002"
if (!(Test-Path -Path $CipherSuiteRegKey))
{
New-Item $CipherSuiteRegKey | Out-Null
$reboot = $True
Write-Log -Message "Creating key: $($CipherSuiteRegKey) " -Logfile $logLocation -Severity Information
}
$val = (Get-Item -Path $CipherSuiteRegKey -ErrorAction SilentlyContinue).GetValue("Functions", $null)
Write-Log -Message "Previous cipher suite value: $val " -Logfile $logLocation -Severity Information
Write-Log -Message "New cipher suite value : $cipherorder " -Logfile $logLocation -Severity Information
if ($val -ne $cipherorder)
{
Write-Log -Message "Cipher suite order needs to be updated. " -Logfile $logLocation -Severity Information
Write-Host "The original cipher suite order needs to be updated", `n, $val
Set-ItemProperty -Path $CipherSuiteRegKey -Name Functions -Value $cipherorder
Write-Log -Message "Cipher suite value was updated. " -Logfile $logLocation -Severity Information
$reboot = $True
}
else
{
Write-Log -Message "Cipher suite order does not need to be updated. " -Logfile $logLocation -Severity Information
Write-Log -Message "Cipher suite value was not updated as there was no change. " -Logfile $logLocation -Severity Information
}
#****************************** CHECK THE FIPS SETTING WHICH IMPACTS RDP'S ALLOWED CIPHERS **************************
#Check for FipsSettings
Write-Log -Message "Checking to see if reg keys exist and if MinEncryptionLevel is set to 4" -Logfile $logLocation -Severity Information
$result = Test-RegistryValueForFipsSettings
$reboot = $reboot -or $result
#************************************** REBOOT **************************************
if ($RebootIfRequired)
{
Write-Log -Message "You set the RebootIfRequired flag to true. If changes are made, the system will reboot " -Logfile $logLocation -Severity Information
# If any settings were changed, reboot
If ($reboot)
{
Write-Log -Message "Rebooting now... " -Logfile $logLocation -Severity Information
Write-Log -Message "Using this command: shutdown.exe /r /t 5 /c ""Crypto settings changed"" /f /d p:2:4 " -Logfile $logLocation -Severity Information
Write-Host "Rebooting now..."
shutdown.exe /r /t 5 /c "Crypto settings changed" /f /d p:2:4
}
Else
{
Write-Host "Nothing get updated."
Write-Log -Message "Nothing get updated. " -Logfile $logLocation -Severity Information
}
}
else
{
Write-Log -Message "You set the RebootIfRequired flag to false. If changes are made, the system will NOT reboot " -Logfile $logLocation -Severity Information
Write-Log -Message "No changes will take effect until a reboot has been completed. " -Logfile $logLocation -Severity Information
Write-Log -Message "Script does not include a reboot by design" -Logfile $logLocation -Severity Information
}
Write-Log -Message "========== End of logging for a script execution ==========" -Logfile $logLocation -Severity Information
# SIG # Begin signature block
# MIIjhgYJKoZIhvcNAQcCoIIjdzCCI3MCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAHtlEJwNffjnOP
# Sr2t1yq5EfE0ll4GozyZt3UXO9BXKKCCDYEwggX/MIID56ADAgECAhMzAAABh3IX
# chVZQMcJAAAAAAGHMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTEwHhcNMjAwMzA0MTgzOTQ3WhcNMjEwMzAzMTgzOTQ3WjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQDOt8kLc7P3T7MKIhouYHewMFmnq8Ayu7FOhZCQabVwBp2VS4WyB2Qe4TQBT8aB
# znANDEPjHKNdPT8Xz5cNali6XHefS8i/WXtF0vSsP8NEv6mBHuA2p1fw2wB/F0dH
# sJ3GfZ5c0sPJjklsiYqPw59xJ54kM91IOgiO2OUzjNAljPibjCWfH7UzQ1TPHc4d
# weils8GEIrbBRb7IWwiObL12jWT4Yh71NQgvJ9Fn6+UhD9x2uk3dLj84vwt1NuFQ
# itKJxIV0fVsRNR3abQVOLqpDugbr0SzNL6o8xzOHL5OXiGGwg6ekiXA1/2XXY7yV
# Fc39tledDtZjSjNbex1zzwSXAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhov4ZyO96axkJdMjpzu2zVXOJcsw
# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDU4Mzg1MB8GA1UdIwQYMBaAFEhu
# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu
# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w
# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx
# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAixmy
# S6E6vprWD9KFNIB9G5zyMuIjZAOuUJ1EK/Vlg6Fb3ZHXjjUwATKIcXbFuFC6Wr4K
# NrU4DY/sBVqmab5AC/je3bpUpjtxpEyqUqtPc30wEg/rO9vmKmqKoLPT37svc2NV
# BmGNl+85qO4fV/w7Cx7J0Bbqk19KcRNdjt6eKoTnTPHBHlVHQIHZpMxacbFOAkJr
# qAVkYZdz7ikNXTxV+GRb36tC4ByMNxE2DF7vFdvaiZP0CVZ5ByJ2gAhXMdK9+usx
# zVk913qKde1OAuWdv+rndqkAIm8fUlRnr4saSCg7cIbUwCCf116wUJ7EuJDg0vHe
# yhnCeHnBbyH3RZkHEi2ofmfgnFISJZDdMAeVZGVOh20Jp50XBzqokpPzeZ6zc1/g
# yILNyiVgE+RPkjnUQshd1f1PMgn3tns2Cz7bJiVUaqEO3n9qRFgy5JuLae6UweGf
# AeOo3dgLZxikKzYs3hDMaEtJq8IP71cX7QXe6lnMmXU/Hdfz2p897Zd+kU+vZvKI
# 3cwLfuVQgK2RZ2z+Kc3K3dRPz2rXycK5XCuRZmvGab/WbrZiC7wJQapgBodltMI5
# GMdFrBg9IeF7/rP4EqVQXeKtevTlZXjpuNhhjuR+2DMt/dWufjXpiW91bo3aH6Ea
# jOALXmoxgltCp1K7hrS6gmsvj94cLRf50QQ4U8Qwggd6MIIFYqADAgECAgphDpDS
# AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0
# ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla
# MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT
# H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB
# AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG
# OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S
# 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz
# y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7
# 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u
# M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33
# X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl
# XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP
# 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB
# l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF
# RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM
# CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ
# BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO
# 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0
# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
# Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p
# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
# Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB
# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw
# cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA
# XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY
# 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj
# 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd
# d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ
# Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf
# wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ
# aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j
# NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B
# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIVWzCCFVcCAQEwgZUwfjELMAkG
# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAYdyF3IVWUDHCQAAAAABhzAN
# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgOQvu7NUq
# wmve+qCoalj/s9HX5Hz9/zYISdJyOFTC4FIwQgYKKwYBBAGCNwIBDDE0MDKgFIAS
# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN
# BgkqhkiG9w0BAQEFAASCAQAHbtGz0AChe0qMPM3c7iU8BQCfJklePUlAlhwFSuCx
# careoloxao+ZtS+dQRlrxLu/ZSqtmJHNsyRoWzsHdOs65pwUYhV3svzaXd7pJwkc
# nbDXedLBbNuQrQrrL2xbGtzT3U+EwgpJ1TTEYwHgqkTFogIelGa2sjD5N+4Vvalq
# t+vxaYrWwkTtsm0qczLKGRUjJqCjARjviE1xsOvs4zwbpXx/bEs/6M7U9tR+w/DS
# nDY/5KAKYET0DCVDhmsMmzJi3xXdBr4sAz0484AAB0CIRVgPCgdgr8E0NQUESJzm
# xm3K4bMAgTMWRiGTL4MRYSuMIn09sbfYXP9hjXLvTV4YoYIS5TCCEuEGCisGAQQB
# gjcDAwExghLRMIISzQYJKoZIhvcNAQcCoIISvjCCEroCAQMxDzANBglghkgBZQME
# AgEFADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMB
# MDEwDQYJYIZIAWUDBAIBBQAEIJBynrmlQmGS0UNGTk53HVKEc4aHvNdYrs5eCcHM
# puc5AgZfEgElnvMYEzIwMjAwNzI0MTgwNDM3Ljg3NlowBIACAfSggdCkgc0wgcox
# CzAJBgNVBAYTAlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg
# SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1Mg
# RVNOOkUwNDEtNEJFRS1GQTdFMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
# cCBzZXJ2aWNloIIOPDCCBPEwggPZoAMCAQICEzMAAAEHfjdomIdaN9YAAAAAAQcw
# DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0
# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcN
# MTkxMDA4MTczODM1WhcNMjEwMTAzMTczODM1WjCByjELMAkGA1UEBhMCVVMxCzAJ
# BgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv
# bnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046RTA0MS00QkVFLUZB
# N0UxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIHNlcnZpY2UwggEiMA0G
# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUuqOUlbaeWirgwbCwhhNIOqTshpo+
# QdSYxAt9JnkeulQFeKrQ6rOSECXxwgOjL/TNMIXtkig1MaifFON6si/Ri+AsV8Gu
# rQp4fylJzLDMFdJcGSpV3CGRdpDb0au8kNQLmnZuxLxAL91R7//3mH2QDQI20w3G
# 06s+Xv8+js9wQksXAfclXX1TJoBIx1Pi1FGqCnY3KlW81+Plhz0T4yStm1MgnqH4
# RKYyPdcempCYC/BI04Ph2EJL+uQQfAfYdbf9vGqpKYjsuktnWr5uowD3H5At+x3l
# YH5rz4JCleKjeLpB/j74H7VZ0I5eTEbls9e2lEKaUzb9o0wjnjDc+t4BAgMBAAGj
# ggEbMIIBFzAdBgNVHQ4EFgQUNOHjlxlIJXMcP9n/0ogYdX8p6HcwHwYDVR0jBBgw
# FoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov
# L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGltU3RhUENB
# XzIwMTAtMDctMDEuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAx
# MC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDAN
# BgkqhkiG9w0BAQsFAAOCAQEAGN3/7XWSzHGKjk444w+2q1D3k7Bh/ZahUvWHFJ6E
# UKU5vLzEGsdsgJSvWXHZDRrpf5rcUGQyjnlo1hAY1mDteNKFushS6bedxcxPHJje
# lVZ9N2/e5+/7zLu18YjnKw5bFu7dWqYBMI3J0FOr56XJOJ1KTtMiJhpxuib+FWy+
# pyhVVgHGTUHuUdbE09dY9WxuRsbpb4DdWAWNrPDB6VAOO50QfEj+0tW+zF6h3RhB
# TI0ilj0+AzgXE+6DyJ7/br6aVvCEvNRJzE6akJnMyn/kzmC32LxvRZWKEwWDR0Fn
# zeXj5ynSStZ6iifTBP7gqiDsidguxh+BFX7HxhN1eHf7jTCCBnEwggRZoAMCAQIC
# CmEJgSoAAAAAAAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRp
# ZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIx
# NDY1NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3
# DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF
# ++18aEssX8XD5WHCdrc+Zitb8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRD
# DNdNuDgIs0Ldk6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSx
# z5NMksHEpl3RYRNuKMYa+YaAu99h/EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1
# rL2KQk1AUdEPnAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16Hgc
# sOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB
# 4jAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqF
# bVUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYD
# VR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
# cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB
# BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j
# ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCB
# kjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQe
# MiAdAEwAZQBnAGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQA
# LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUx
# vs8F4qn++ldtGTCzwsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5U4zM9GAS
# inbMQEBBm9xcF/9c+V4XNZgkVkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1
# L3mBZdmptWvkx872ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWO
# M7tiX5rbV0Dp8c6ZZpCM/2pif93FSguRJuI57BlKcWOdeyFtw5yjojz6f32WapB4
# pm3S4Zz5Hfw42JT0xqUKloakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45
# V3aicaoGig+JFrphpxHLmtgOR5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x
# 4QDf5zEHpJM692VHeOj4qEir995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEe
# gPsbiSpUObJb2sgNVZl6h3M7COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKn
# QqLJzxlBTeCG+SqaoxFmMNO7dDJL32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp
# 3lfB0d4wwP3M5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvT
# X4/edIhJEqGCAs4wggI3AgEBMIH4oYHQpIHNMIHKMQswCQYDVQQGEwJVUzELMAkG
# A1UECBMCV0ExEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
# b3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9u
# cyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpFMDQxLTRCRUUtRkE3
# RTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgc2VydmljZaIjCgEBMAcG
# BSsOAwIaAxUAwwu+tfgG3rC7RZrxuFO2CmZSfPiggYMwgYCkfjB8MQswCQYDVQQG
# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg
# VGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOLFEVUwIhgPMjAy
# MDA3MjQxNTUwNDVaGA8yMDIwMDcyNTE1NTA0NVowdzA9BgorBgEEAYRZCgQBMS8w
# LTAKAgUA4sURVQIBADAKAgEAAgIa9QIB/zAHAgEAAgIR9DAKAgUA4sZi1QIBADA2
# BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIB
# AAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBADwvhE9bln801RR+oEXjtPJXTqtYMakR
# ymItUlO2HRorDqEv2SJR/V/kQjcsqS6ig54bOiKs0Il2fW/s/pi+x1ydJMpOyhM7
# zzqm3acQ9kbYHIDoPWVT/Rq2Oo33Dq380zXENcc0hpLAKF3Cu06SbbNbqu+A/wbI
# z5IClz6kU8kiMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
# dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
# IDIwMTACEzMAAAEHfjdomIdaN9YAAAAAAQcwDQYJYIZIAWUDBAIBBQCgggFKMBoG
# CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQg6+NCew+c
# OhYIOzhUKofOF7MxtgOvSMWQCMCIWlTFNMgwgfoGCyqGSIb3DQEJEAIvMYHqMIHn
# MIHkMIG9BCBBYvCj4pFkwhumagATn0gLh9fdDNzImQkKNeOtRj/LHjCBmDCBgKR+
# MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT
# HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABB343aJiHWjfWAAAA
# AAEHMCIEIGIH6vLdbEFNnxTxBhtIN7CtmhcKy/9m6/xoAA3LHzXUMA0GCSqGSIb3
# DQEBCwUABIIBAKGg3zNulscnGBDlD6Q/U6yLQ5dN3gF9UrprgACiQ1gs/DexU7oC
# hjNZxBnH5RTA/7q9TFf2a1rBydHWVnqXuuQQJ0HuskdpXahxR4y1jboDdGwr7F08
# v/gmPeeUik28Je72QZp5m/R0O61/kMQaDpLO9iPH0Z9iMGfqJonFPDeY4VX8Da2n
# cPY7mrv6YAI+ydZ+mUdBp2yjas7+/N8MntcNtAO0HpWFXQTAmb77RrSssfeZphRA
# mBD+gLx5C3q4uSmuOqaQxUaF0y8FeuetHp0bw2sfce6GlMXJwzTpC6HvXnaVtMy0
# pgzd/KPHW7EgSvmRVKmvwiQGiZBoRG/Gcg8=
# SIG # End signature block

View File

@ -1,15 +1,13 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
param([string]$SasToken)
if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") {
. "$PSScriptRoot/utility-prefix.ps1"
}
# See https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-history
# 18.6.2
$VisualStudioBootstrapperUrl = 'https://download.visualstudio.microsoft.com/download/pr/471ad3d6-cb2b-4d53-8edf-a9eeade096a5/3cfa3f8fc957f406dc35be713959a85c10b23b9ed9a865626550e8cf676d96a8/vs_BuildTools.exe'
# 18.8.0
$VisualStudioBootstrapperUrl = 'https://download.visualstudio.microsoft.com/download/pr/e05c0bc8-d058-4b2b-937c-1c80073d7633/b62e8829c6a6c043aacf2ef657456213ab71099c7e46a610f95d6778bfc9beb0/vs_BuildTools.exe'
$Workloads = @(
'Microsoft.VisualStudio.Workload.VCTools',
'Microsoft.VisualStudio.Workload.MSBuildTools',

View File

@ -4,7 +4,6 @@
# This script runs all the scripts we run on Azure machines to deploy prerequisites,
# and assumes it is being run as an admin user.
. "$PSScriptRoot\deploy-tlssettings.ps1" -RebootIfRequired 0
. "$PSScriptRoot\deploy-sevenzip.ps1"
. "$PSScriptRoot\deploy-visual-studio.ps1"
. "$PSScriptRoot\deploy-git.ps1"
@ -13,7 +12,6 @@
. "$PSScriptRoot\deploy-mpi.ps1"
. "$PSScriptRoot\deploy-cuda.ps1"
. "$PSScriptRoot\deploy-cudnn.ps1"
. "$PSScriptRoot\deploy-inteloneapi.ps1"
. "$PSScriptRoot\deploy-pwsh.ps1"
. "$PSScriptRoot\deploy-azure-cli.ps1"
. "$PSScriptRoot\deploy-azcopy.ps1"

View File

@ -2,8 +2,6 @@
# SPDX-License-Identifier: MIT
#
param([string]$SasToken)
<#
.SYNOPSIS
Prepares the virtual machine for imaging.

View File

@ -1,6 +1,8 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: MIT
$UseManagedIdentity = $false
<#
.SYNOPSIS
Gets a random file path in the temp directory.
@ -30,11 +32,8 @@ Function Get-TempFilePath {
Gets the download URL for an image asset.
.DESCRIPTION
Get-AssetUrl returns the upstream URL when no SAS token is provided, or the
vcpkgimageminting asset URL when a SAS token is available.
.PARAMETER SasToken
The optional SAS token for accessing vcpkgimageminting assets.
Get-AssetUrl returns the upstream URL unless UseManagedIdentity is specified,
in which case it returns the corresponding vcpkgimageminting asset URL.
.PARAMETER InternetUrl
The upstream download URL.
@ -45,17 +44,15 @@ The asset file name in the vcpkgimageminting blob container.
Function Get-AssetUrl {
[CmdletBinding(PositionalBinding=$false)]
Param(
[String]$SasToken,
[Parameter(Mandatory)][uri]$InternetUrl,
[Parameter(Mandatory)][String]$BlobAssetName
)
if ([string]::IsNullOrEmpty($SasToken)) {
if (-not $UseManagedIdentity) {
return $InternetUrl
}
$SasToken = $SasToken.Replace('"', '').TrimStart('?')
return [uri]"https://vcpkgimageminting.blob.core.windows.net/assets/$($BlobAssetName)?$($SasToken)"
return [uri]"https://vcpkgimageminting.blob.core.windows.net/assets/$([uri]::EscapeDataString($BlobAssetName))"
}
<#
@ -84,11 +81,7 @@ Function Get-ContentSourceDescription {
}
if ($Url.Host -ieq 'vcpkgimageminting.blob.core.windows.net') {
if ($Url.Query -match '(^\?|&)sig=') {
return 'vcpkgimageminting using SAS token'
}
return 'vcpkgimageminting'
return 'vcpkgimageminting using managed identity'
}
return 'the internet'
@ -127,9 +120,38 @@ Function Get-LocalOrDownloadedFile {
$tempPath = Get-TempFilePath
New-Item -ItemType Directory -Path $tempPath -Force | Out-Null
$downloadPath = Join-Path $tempPath $LocalName
curl.exe --fail -L -o $downloadPath $Url
if (-Not $?) {
Write-Error 'Download failed!'
if ($Url.Host -ieq 'vcpkgimageminting.blob.core.windows.net') {
$tokenResponseJson = curl.exe `
--fail `
--silent `
--show-error `
--noproxy '*' `
--header 'Metadata: true' `
'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F'
if ($LASTEXITCODE -ne 0) {
throw 'Failed to acquire an Azure Storage access token from IMDS.'
}
$storageAccessToken = ($tokenResponseJson | ConvertFrom-Json).access_token
if ([string]::IsNullOrWhiteSpace($storageAccessToken)) {
throw 'IMDS returned an empty Azure Storage access token.'
}
curl.exe `
--fail `
--location `
--show-error `
--header "Authorization: Bearer $storageAccessToken" `
--header 'x-ms-version: 2023-11-03' `
--output $downloadPath `
$Url
} else {
curl.exe --fail --location --show-error --output $downloadPath $Url
}
if ($LASTEXITCODE -ne 0) {
throw "Failed to download $LocalName."
}
return [pscustomobject]@{

View File

@ -13,55 +13,55 @@ function(vcpkg_find_fortran out_var)
macro(z_vcpkg_warn_ambiguous_system_variables)
# CMakeDetermineFortranCompiler is for project mode.
endmacro()
include(CMakeDetermineFortranCompiler)
if(NOT CMAKE_Fortran_COMPILER AND "${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" STREQUAL "")
# If a user uses their own VCPKG_CHAINLOAD_TOOLCHAIN_FILE, they _must_ figure out fortran on their own.
if(CMAKE_HOST_WIN32)
message(STATUS "No Fortran compiler found on the PATH. Using MinGW gfortran!")
# If no Fortran compiler is on the path we switch to use gfortan from MinGW within vcpkg
if("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x86")
set(mingw_path mingw32)
set(machine_flag -m32)
vcpkg_acquire_msys(msys_root
NO_DEFAULT_PACKAGES
Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_fortran_msys_declare_packages"
PACKAGES mingw-w64-i686-gcc-fortran
)
elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x64")
set(mingw_path mingw64)
set(machine_flag -m64)
vcpkg_acquire_msys(msys_root
NO_DEFAULT_PACKAGES
Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_fortran_msys_declare_packages"
PACKAGES mingw-w64-x86_64-gcc-fortran
)
else()
message(FATAL_ERROR "Unknown architecture '${VCPKG_TARGET_ARCHITECTURE}' for MinGW Fortran build!")
endif()
set(mingw_bin "${msys_root}/${mingw_path}/bin")
vcpkg_add_to_path(PREPEND "${mingw_bin}")
vcpkg_list(APPEND additional_cmake_args
-DCMAKE_GNUtoMS=ON
"-DCMAKE_Fortran_COMPILER=${mingw_bin}/gfortran.exe"
"-DCMAKE_C_COMPILER=${mingw_bin}/gcc.exe"
"-DCMAKE_Fortran_FLAGS_INIT:STRING= -mabi=ms ${machine_flag} ${VCPKG_Fortran_FLAGS}")
# This is for private use by vcpkg-gfortran
set(vcpkg_find_fortran_MSYS_ROOT "${msys_root}" PARENT_SCOPE)
set(VCPKG_USE_INTERNAL_Fortran TRUE PARENT_SCOPE)
set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled PARENT_SCOPE)
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake" PARENT_SCOPE) # Switching to MinGW toolchain for Fortran
if(VCPKG_CRT_LINKAGE STREQUAL "static")
set(VCPKG_CRT_LINKAGE dynamic PARENT_SCOPE)
message(STATUS "VCPKG_CRT_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic CRT linkage")
endif()
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
set(VCPKG_LIBRARY_LINKAGE dynamic PARENT_SCOPE)
message(STATUS "VCPKG_LIBRARY_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic library linkage")
endif()
if(VCPKG_PROVIDED_FORTRAN)
message(STATUS "Using MinGW gfortran; set VCPKG_PROVIDED_FORTRAN=OFF if supplying Fortran from your toolchain")
if("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x86")
set(mingw_path mingw32)
set(machine_flag -m32)
vcpkg_acquire_msys(msys_root
NO_DEFAULT_PACKAGES
Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_fortran_msys_declare_packages"
PACKAGES mingw-w64-i686-gcc-fortran
)
elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x64")
set(mingw_path mingw64)
set(machine_flag -m64)
vcpkg_acquire_msys(msys_root
NO_DEFAULT_PACKAGES
Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_fortran_msys_declare_packages"
PACKAGES mingw-w64-x86_64-gcc-fortran
)
else()
message(FATAL_ERROR "Unknown architecture '${VCPKG_TARGET_ARCHITECTURE}' for MinGW Fortran build!")
endif()
set(mingw_bin "${msys_root}/${mingw_path}/bin")
vcpkg_add_to_path(PREPEND "${mingw_bin}")
vcpkg_list(APPEND additional_cmake_args
-DCMAKE_GNUtoMS=ON
"-DCMAKE_Fortran_COMPILER=${mingw_bin}/gfortran.exe"
"-DCMAKE_C_COMPILER=${mingw_bin}/gcc.exe"
"-DCMAKE_Fortran_FLAGS_INIT:STRING= -mabi=ms ${machine_flag} ${VCPKG_Fortran_FLAGS}")
# This is for private use by vcpkg-gfortran
set(vcpkg_find_fortran_MSYS_ROOT "${msys_root}" PARENT_SCOPE)
set(VCPKG_USE_INTERNAL_Fortran TRUE PARENT_SCOPE)
set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled PARENT_SCOPE)
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake" PARENT_SCOPE) # Switching to MinGW toolchain for Fortran
if(VCPKG_CRT_LINKAGE STREQUAL "static")
set(VCPKG_CRT_LINKAGE dynamic PARENT_SCOPE)
message(STATUS "VCPKG_CRT_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic CRT linkage")
endif()
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
set(VCPKG_LIBRARY_LINKAGE dynamic PARENT_SCOPE)
message(STATUS "VCPKG_LIBRARY_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic library linkage")
endif()
elseif(CMAKE_HOST_WIN32)
message(STATUS "Deferring Fortran compiler selection to the triplet toolchain.")
else()
include(CMakeDetermineFortranCompiler)
if(NOT CMAKE_Fortran_COMPILER)
message(FATAL_ERROR "Unable to find a Fortran compiler using 'CMakeDetermineFortranCompiler'. Please install one (e.g. gfortran) and make it available on the PATH!")
endif()
endif()

View File

@ -34,50 +34,50 @@
"name": "cmake",
"os": "windows",
"arch": "amd64",
"version": "4.3.3",
"executable": "cmake-4.3.3-windows-x86_64/bin/cmake.exe",
"url": "https://github.com/Kitware/CMake/releases/download/v4.3.3/cmake-4.3.3-windows-x86_64.zip",
"sha512": "0df613db23b315d81895e672e8460f2b35f4c2dd2eb9f07e10b13389a675edcb09836a458b90d8c0211b3a2d6da38183714410769935a580b86a6177df691f6a",
"archive": "cmake-4.3.3-windows-x86_64.zip"
"version": "4.4.0",
"executable": "cmake-4.4.0-windows-x86_64/bin/cmake.exe",
"url": "https://github.com/Kitware/CMake/releases/download/v4.4.0/cmake-4.4.0-windows-x86_64.zip",
"sha512": "35479675dc414747b6eb176034fb707490a758a7fa24007018bfb9eddb71e0422aa5e97b1efdbfe94eaca19923ac2e0dc8a2f807f549ce31ffb0ca23f59e04d0",
"archive": "cmake-4.4.0-windows-x86_64.zip"
},
{
"name": "cmake",
"os": "windows",
"arch": "arm64",
"version": "4.3.3",
"executable": "cmake-4.3.3-windows-arm64/bin/cmake.exe",
"url": "https://github.com/Kitware/CMake/releases/download/v4.3.3/cmake-4.3.3-windows-arm64.zip",
"sha512": "0e65010142a7841c0dc055374c1e05672de64c9e58df3b6a1bfe9539e998d318b525ee748bb57093747d324dc546e659e16985080401312491c4a959a16c0885",
"archive": "cmake-4.3.3-windows-arm64.zip"
"version": "4.4.0",
"executable": "cmake-4.4.0-windows-arm64/bin/cmake.exe",
"url": "https://github.com/Kitware/CMake/releases/download/v4.4.0/cmake-4.4.0-windows-arm64.zip",
"sha512": "076cc3771190acda2b5ca5b7ae5ef6105a468e7d2f61a37c0925c871f456ce366767d3a52708e9862625fab13314ebc929c6b7f823fd878c31ebc4058f001b7b",
"archive": "cmake-4.4.0-windows-arm64.zip"
},
{
"name": "cmake",
"os": "osx",
"version": "4.3.3",
"executable": "cmake-4.3.3-macos-universal/CMake.app/Contents/bin/cmake",
"url": "https://github.com/Kitware/CMake/releases/download/v4.3.3/cmake-4.3.3-macos-universal.tar.gz",
"sha512": "7a0d5a9ed07104315ab537c1a09fb07e805a0d9b9f02d06752bc405162202270e7660b05f324bae5ed162e748002ac4f6b02b81f9fc5c4a4aedd7604ed58edd6",
"archive": "cmake-4.3.3-macos-universal.tar.gz"
"version": "4.4.0",
"executable": "cmake-4.4.0-macos-universal/CMake.app/Contents/bin/cmake",
"url": "https://github.com/Kitware/CMake/releases/download/v4.4.0/cmake-4.4.0-macos-universal.tar.gz",
"sha512": "5fa394cf38f5d90cefb40f9589d41a2794796a15cc33045e901f82cfcfe4fb0df46fb77979b69a52715819d65274fb070ef0099c320ba6fd8ccab60f19fd9cd2",
"archive": "cmake-4.4.0-macos-universal.tar.gz"
},
{
"name": "cmake",
"os": "linux",
"arch": "arm64",
"version": "4.3.3",
"executable": "cmake-4.3.3-linux-aarch64/bin/cmake",
"url": "https://github.com/Kitware/CMake/releases/download/v4.3.3/cmake-4.3.3-linux-aarch64.tar.gz",
"sha512": "726847b985d05de30d2762cafcf08573e0f4c16c42ca66f119ebe6e6ab9b7decc3173905c49e8dbbcf14d42fdf13f8757b4a118ca82a27a25298575b7d26443a",
"archive": "cmake-4.3.3-linux-aarch64.tar.gz"
"version": "4.4.0",
"executable": "cmake-4.4.0-linux-aarch64/bin/cmake",
"url": "https://github.com/Kitware/CMake/releases/download/v4.4.0/cmake-4.4.0-linux-aarch64.tar.gz",
"sha512": "dd7d4d5808c62e248dcd4f294c0a6d02f806d59cb8a61d5ab1fc48403f589f4046269d94e713b36eec0bdf9b78e9b56556f3ae2bad946ef3b87e1c03677ce7b5",
"archive": "cmake-4.4.0-linux-aarch64.tar.gz"
},
{
"name": "cmake",
"os": "linux",
"arch": "amd64",
"version": "4.3.3",
"executable": "cmake-4.3.3-linux-x86_64/bin/cmake",
"url": "https://github.com/Kitware/CMake/releases/download/v4.3.3/cmake-4.3.3-linux-x86_64.tar.gz",
"sha512": "1bb70ffebb107d2e72298b11aa90505bda78b04e70ad46d40239986e493d62b5dd01d82c2178e2495b333e6a3d24e3585a27482bb3e5cb10c45ca41877c38e90",
"archive": "cmake-4.3.3-linux-x86_64.tar.gz"
"version": "4.4.0",
"executable": "cmake-4.4.0-linux-x86_64/bin/cmake",
"url": "https://github.com/Kitware/CMake/releases/download/v4.4.0/cmake-4.4.0-linux-x86_64.tar.gz",
"sha512": "3df4aaa128a438ed48dcac7065fd355ff538eed8f394491298d0db63a891d671da247c8fa262e4fa6bf99429d630abab317d5a0248168fe203d1ca4978dab4da",
"archive": "cmake-4.4.0-linux-x86_64.tar.gz"
},
{
"name": "git",
@ -85,9 +85,9 @@
"arch": "arm64",
"version": "2.7.4",
"executable": "clangarm64/bin/git.exe",
"url": "https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.2/PortableGit-2.55.0.2-arm64.7z.exe",
"sha512": "2624f3593031f258e075e4c7b8f3cc3ac0cdc5a7a6bd1dbc19b93862d7a34cca4d30205a6154690c440d3bb98601887247229d3bd3ae4d5e75b38623573acfda",
"archive": "PortableGit-2.55.0.2-arm64.7z.exe"
"url": "https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.3/PortableGit-2.55.0.3-arm64.7z.exe",
"sha512": "9067799a4ba50e78eaac7673c887756f241f6e4b396ce54cc1c92082f9eb07449e5f4861faa3da5209e59d5cb8c80e66bb2ba0e0b836aa0ca4b9ae62b5328f35",
"archive": "PortableGit-2.55.0.3-arm64.7z.exe"
},
{
"name": "git",
@ -95,9 +95,9 @@
"arch": "amd64",
"version": "2.7.4",
"executable": "mingw64/bin/git.exe",
"url": "https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.2/PortableGit-2.55.0.2-64-bit.7z.exe",
"sha512": "e41062cb9486996bf158f6ea320091be26ff462fdda1ddd5dd625effc99d1d5e3114389f0bac2ab13592d6c33753f0c08686ef4eae2599a6d447a91b81c8faaa",
"archive": "PortableGit-2.55.0.2-64-bit.7z.exe"
"url": "https://github.com/git-for-windows/git/releases/download/v2.55.0.windows.3/PortableGit-2.55.0.3-64-bit.7z.exe",
"sha512": "b217b7eca2bd02815379d5452700bcf3ebd9bdd1987d622e477c18691df71990b5cb4e967bc0ab60f6efd16b0a45558fb2ab4cf09138c929920fa51df1a4c838",
"archive": "PortableGit-2.55.0.3-64-bit.7z.exe"
},
{
"name": "git",
@ -122,9 +122,9 @@
"os": "windows",
"version": "5.37",
"executable": "google-cloud-sdk/bin/gsutil.cmd",
"url": "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-567.0.0-windows-x86_64-bundled-python.zip",
"sha512": "5829f8991bd1a5d07daf2e101425c4483a5c93c4526ab410b6f21e8b603f8e5ee6d899ccc9f48f6835c5f8786ed46d111bffc6488af11198dc255891f0726e52",
"archive": "google-cloud-sdk-567.0.0-windows-x86_64-bundled-python.zip"
"url": "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-576.0.0-windows-x86_64-bundled-python.zip",
"sha512": "309d9d8048b2f647c19980f4d130f19eb4378fe47049bd135ba4f1e8080908041307fb55de02e6962df90ac09382c5ca5ebf2146fc05a9573de73b1401b6aeec",
"archive": "google-cloud-sdk-576.0.0-windows-x86_64-bundled-python.zip"
},
{
"name": "gsutil",
@ -311,61 +311,61 @@
"name": "powershell-core",
"os": "windows",
"arch": "x64",
"version": "7.6.2",
"version": "7.6.3",
"executable": "pwsh.exe",
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.2/PowerShell-7.6.2-win-x64.zip",
"sha512": "7aa272c9814e95b5b29c4bd263d14a8650278ebb2544b26d78583d726582aa4b726185a7c918b67f8b6288a35fe928db97ed91251bd9c469105b0421913be4f9",
"archive": "PowerShell-7.6.2-win-x64.zip"
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.3/PowerShell-7.6.3-win-x64.zip",
"sha512": "497136c7955e0bec5430799a0befae07d0bab54703046f80a5bc5ddfdd852f24b3a9e36743dfc5da9e44658aa9b8a62794349db5a5e0b2cc229c6413273b399d",
"archive": "PowerShell-7.6.3-win-x64.zip"
},
{
"name": "powershell-core",
"os": "windows",
"arch": "arm64",
"version": "7.6.2",
"version": "7.6.3",
"executable": "pwsh.exe",
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.2/PowerShell-7.6.2-win-arm64.zip",
"sha512": "b5597894ae93ee05bf923570f77419f0626e1ef3632c13a40bf7f6161a2b45ea6cd3e1caa5347eec6e2bda71659afa0b1a3c7349bea17bdfdb716f0453d92de6",
"archive": "PowerShell-7.6.2-win-arm64.zip"
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.3/PowerShell-7.6.3-win-arm64.zip",
"sha512": "a018256c0e6740f43da4a627ca0f7904af767d76f2272a4242ac78c96404e2632457d30a999cd64b723754ff9e6fdffe703c097da96e8eed085fc19044312227",
"archive": "PowerShell-7.6.3-win-arm64.zip"
},
{
"name": "powershell-core",
"os": "linux",
"arch": "x64",
"version": "7.6.2",
"version": "7.6.3",
"executable": "pwsh",
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.2/powershell-7.6.2-linux-x64.tar.gz",
"sha512": "effb505a891664d7c885129be67dc829218a074569c36dc00dcb3706435c72075c63ed67a1c533c044944993eefe460500c447163cab9f5b43233cd4d9d51b95",
"archive": "powershell-7.6.2-linux-x64.tar.gz"
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.3/powershell-7.6.3-linux-x64.tar.gz",
"sha512": "57811417969fe3dbc07d60f28e9aa326b1f048b025adf474a6f11f3afd34ff21ef8ba8a2a6848246ecc6d3e9ec1c536078cc6faf5cbc41e8d2062947e36387e6",
"archive": "powershell-7.6.3-linux-x64.tar.gz"
},
{
"name": "powershell-core",
"os": "linux",
"arch": "arm64",
"version": "7.6.2",
"version": "7.6.3",
"executable": "pwsh",
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.2/powershell-7.6.2-linux-arm64.tar.gz",
"sha512": "97b6e78208e1dd428b7d0786cc90a647b0f4d4cf939be2454a33f6c710fe5954fd0643befd4cecb69adba78eaf8ad453595d7413a58415e510c4136bb6856210",
"archive": "powershell-7.6.2-linux-arm64.tar.gz"
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.3/powershell-7.6.3-linux-arm64.tar.gz",
"sha512": "8226837e57592ccd6ed83dff760b74ee7e43c23bf54ec895ac0d9d0d82b6989261cfe27dd1ffa76fa5494244e4b9aba385a4e10655bad67badf6212e275e84f9",
"archive": "powershell-7.6.3-linux-arm64.tar.gz"
},
{
"name": "powershell-core",
"os": "osx",
"arch": "x64",
"version": "7.6.2",
"version": "7.6.3",
"executable": "pwsh",
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.2/powershell-7.6.2-osx-x64.tar.gz",
"sha512": "8e6091b13b9ca7f8dd660b73292b2731e3e6c6daa6e58a13c3ad6b3cb75dc39b1137f64e6af3bbee31f840ca6e2ca2346327d1efce9b165c9cccbcb2505d3809",
"archive": "powershell-7.6.2-osx-x64.tar.gz"
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.3/powershell-7.6.3-osx-x64.tar.gz",
"sha512": "7225c973e7a924f8d07f8c20082f78dd4896639342a4b0b5ee22bc8363e71dbd9604a475c443b586cbd059f1881e643a323ee34baae99129b07cd5ba2eda95b6",
"archive": "powershell-7.6.3-osx-x64.tar.gz"
},
{
"name": "powershell-core",
"os": "osx",
"arch": "arm64",
"version": "7.6.2",
"version": "7.6.3",
"executable": "pwsh",
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.2/powershell-7.6.2-osx-arm64.tar.gz",
"sha512": "8e0c2fec58d19a2876017bd29f56b7ef04a0c093b722e0c322b134fad90f249eb6ad047bfd917f3652fa30a6fcb7a39f980b8c9973e2b78317bba0abbe271c40",
"archive": "powershell-7.6.2-osx-arm64.tar.gz"
"url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.3/powershell-7.6.3-osx-arm64.tar.gz",
"sha512": "d534d1ecff5e20d035b3099743e9cd176c8cd16457b8112a7596f6322317f480d049ad2fa0838f20df5db0f83fdc70cf4e8f786a1debc8f93759cedc8d9ef090",
"archive": "powershell-7.6.3-osx-arm64.tar.gz"
},
{
"name": "node",
@ -431,131 +431,131 @@
"name": "dotnet",
"os": "windows",
"arch": "x64",
"version": "10.0.301",
"version": "10.0.302",
"executable": "dotnet.exe",
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.301/dotnet-sdk-10.0.301-win-x64.zip",
"sha512": "38456e992c4df0ff0ac9fc5f28ff09a88543c0fc4e4deedffda9c4ebaf852c4519addacf28814ea77ea42ce2d37db812fae5ba1fe25f06364ca5a6027036387f",
"archive": "dotnet-sdk-10.0.301-win-x64.zip"
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.302/dotnet-sdk-10.0.302-win-x64.zip",
"sha512": "7d170ed75fa9af34c00646621d92011dbd71943952e2787cd15df9be78e6452b55dadef34d7eff77b802e6af4959e071a55855ac649afeac70901c3a2a258716",
"archive": "dotnet-sdk-10.0.302-win-x64.zip"
},
{
"name": "dotnet",
"os": "windows",
"arch": "arm64",
"version": "10.0.301",
"version": "10.0.302",
"executable": "dotnet.exe",
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.301/dotnet-sdk-10.0.301-win-arm64.zip",
"sha512": "cd2aabcf089d76c6f904e2b77ed06b9f397e105f8a9b8fb425ce6b8ab01413a01d59a1c298c58c627db3e8d197280825d7c2cfc8b8345a149ed5b86457cf5c5b",
"archive": "dotnet-sdk-10.0.301-win-arm64.zip"
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.302/dotnet-sdk-10.0.302-win-arm64.zip",
"sha512": "241abb2b345cff1b32d87a9e29da5e9d52f899f691e7b34661274477564c4717054c489814a9fd7a5526fc9e0d8174a0d951a4a845556eee53add526f71917e7",
"archive": "dotnet-sdk-10.0.302-win-arm64.zip"
},
{
"name": "dotnet",
"os": "windows",
"arch": "x86",
"version": "10.0.301",
"version": "10.0.302",
"executable": "dotnet.exe",
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.301/dotnet-sdk-10.0.301-win-x86.zip",
"sha512": "19e3f1d05c45e741d8284a304aacc7256b464d8729d0e0fb10bc4e2b8bd44abacab69d4dfff3aa9fb7724bb569e43cd98146cfbd31cd4932ddbfc54cbe8b8d02",
"archive": "dotnet-sdk-10.0.301-win-x86.zip"
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.302/dotnet-sdk-10.0.302-win-x86.zip",
"sha512": "39400959121917bb3cc7811287a9dff6b6ab9cb5142b274fbd8ee89d95a1b6f01869bb273785ecc44d416afda7f9e92485b3b20049b600749f87902e0898ba8c",
"archive": "dotnet-sdk-10.0.302-win-x86.zip"
},
{
"name": "dotnet",
"os": "linux",
"arch": "x64",
"version": "10.0.301",
"version": "10.0.302",
"executable": "dotnet",
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.301/dotnet-sdk-10.0.301-linux-x64.tar.gz",
"sha512": "cfbeec3a3a1d3ad3e168e37a77c4cc26c23125acd84a86d014047da3ecffce4c368a9acac4d7c950a047fa3d98989ce8aea69f8e5842cb6d330e8911e1c335a7",
"archive": "dotnet-sdk-10.0.301-linux-x64.tar.gz"
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.302/dotnet-sdk-10.0.302-linux-x64.tar.gz",
"sha512": "10069bec8783596484a610332f090d562802a41b9b40e3327a5a5688b572e10c296ae300f940d40461f23c157ed1b0843c2f8e6b3f20d8d8d9d83432d8143bac",
"archive": "dotnet-sdk-10.0.302-linux-x64.tar.gz"
},
{
"name": "dotnet",
"os": "linux",
"arch": "arm64",
"version": "10.0.301",
"version": "10.0.302",
"executable": "dotnet",
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.301/dotnet-sdk-10.0.301-linux-arm64.tar.gz",
"sha512": "4ee438b363cb8468930d50b6bdc738a375e2f33b25bfd0c8dcb55853dda7f0fb187693e0f49dfc31556e68320b961a50dcf3b74c1f25abe3a5bd916db607db99",
"archive": "dotnet-sdk-10.0.301-linux-arm64.tar.gz"
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.302/dotnet-sdk-10.0.302-linux-arm64.tar.gz",
"sha512": "9e409c14e00686d661c78fa4dd9ad0e4dcf695c328bd5ff777d05b4a9c34b42cf89b12573b92e9fb2f565dbe12016b4835f77c7d9a42b55a7494df21634cd5d6",
"archive": "dotnet-sdk-10.0.302-linux-arm64.tar.gz"
},
{
"name": "dotnet",
"os": "osx",
"arch": "x64",
"version": "10.0.301",
"version": "10.0.302",
"executable": "dotnet",
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.301/dotnet-sdk-10.0.301-osx-x64.tar.gz",
"sha512": "a0eb333dff6ed7895e6b2469d01d014bc3a74e8632b5704e4fab55247b29c1e17df0c52e857dedf55092ebe650c63da749d8b09af707bc28cc25a12796b4be12",
"archive": "dotnet-sdk-10.0.301-osx-x64.tar.gz"
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.302/dotnet-sdk-10.0.302-osx-x64.tar.gz",
"sha512": "48d5861dc0d6c9c782c6d163d6b334ecac2ebd65a1ae59e9ce5b93dd080a31d7ecfc4e4d47e0e35b201ce63661218d641e154022266294a3a8b84593a019cfbc",
"archive": "dotnet-sdk-10.0.302-osx-x64.tar.gz"
},
{
"name": "dotnet",
"os": "osx",
"arch": "arm64",
"version": "10.0.301",
"version": "10.0.302",
"executable": "dotnet",
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.301/dotnet-sdk-10.0.301-osx-arm64.tar.gz",
"sha512": "7978737378704435bcb46d1aabf4824f4bac4c72b559b0c5796fadcf15aa2ac7e18fd3e5c983c0bcb48c60793bd554bcfb0caa9972132cf899c97ccd7465d938",
"archive": "dotnet-sdk-10.0.301-osx-arm64.tar.gz"
"url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.302/dotnet-sdk-10.0.302-osx-arm64.tar.gz",
"sha512": "b2286dec9177e8b5543ff2fe95c84db358b87ec2a36a0d34a29033d70279940fd1134af56c4299648f8950db2d6ce35237698cf2818d9abc670c2c1664c92ac0",
"archive": "dotnet-sdk-10.0.302-osx-arm64.tar.gz"
},
{
"name": "azcopy",
"os": "linux",
"arch": "amd64",
"version": "10.32.4",
"executable": "azcopy_linux_amd64_10.32.4/azcopy",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.4/azcopy_linux_amd64_10.32.4.tar.gz",
"sha512": "7f5252083fb656d84fb45d5b773a4f5971417f2ef6210e11160233689b4dc9cac9c6e29ee83d96fbd001c2c497e0e686dc6dcbd962fd9cd70a1518456bb86e47",
"archive": "azcopy_linux_amd64_10.32.4.tar.gz"
"version": "10.32.6",
"executable": "azcopy_linux_amd64_10.32.6/azcopy",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.6/azcopy_linux_amd64_10.32.6.tar.gz",
"sha512": "cb80541481013f51980f9033d890befc405c1bd990d941390e51327e1889903cbba10edfe6466db40ccd81c85c1a981cd6d0700e682e7f0509342db08a42092c",
"archive": "azcopy_linux_amd64_10.32.6.tar.gz"
},
{
"name": "azcopy",
"os": "linux",
"arch": "arm64",
"version": "10.32.4",
"executable": "azcopy_linux_arm64_10.32.4/azcopy",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.4/azcopy_linux_arm64_10.32.4.tar.gz",
"sha512": "c8dea71f5a4063df073b6dbc600aa787ebb4f71d06a588a55a8f4281a1850fbe22a23024cac64d5fb3704a7ead6243c4d5737538bcdd59a1d1c0d60bc717a05b",
"archive": "azcopy_linux_arm64_10.32.4.tar.gz"
"version": "10.32.6",
"executable": "azcopy_linux_arm64_10.32.6/azcopy",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.6/azcopy_linux_arm64_10.32.6.tar.gz",
"sha512": "9756db20081e4738c8225cd730c2c045a4bca878e9acd082dae5a4510b0435963fa3f4566fa958f3421d479f1a1b79c26b891d857f7acca22fff804fa6efe52c",
"archive": "azcopy_linux_arm64_10.32.6.tar.gz"
},
{
"name": "azcopy",
"os": "osx",
"arch": "amd64",
"version": "10.32.4",
"executable": "azcopy_darwin_amd64_10.32.4/azcopy",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.4/azcopy_darwin_amd64_10.32.4.zip",
"sha512": "29a84d05edd6413bedc141fafe4b6d95c0eb2efce91e80bdca8ae2a85066954a20b2b67e571db34df9285ac63b515ca6fa3fbd7bce163efeb64881ba1bc7684a",
"archive": "azcopy_darwin_amd64_10.32.4.zip"
"version": "10.32.6",
"executable": "azcopy_darwin_amd64_10.32.6/azcopy",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.6/azcopy_darwin_amd64_10.32.6.zip",
"sha512": "c68e34f3c148b45dde4ffac974b65df3d4e386279f350ae000f39e3b667530f72e3fc7d8e877c8515b5c8c758903eca1c4623ad336267238d41520e279459f5b",
"archive": "azcopy_darwin_amd64_10.32.6.zip"
},
{
"name": "azcopy",
"os": "osx",
"arch": "arm64",
"version": "10.32.4",
"executable": "azcopy_darwin_arm64_10.32.4/azcopy",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.4/azcopy_darwin_arm64_10.32.4.zip",
"sha512": "578179a7f935a5395206386e8fc34d35b72bc0b3633517719758868a2849adfc1d75d308aa3e7ca7ef2e24de079c8366c83908d6519aa0d90c2c79cd6a66fc11",
"archive": "azcopy_darwin_arm64_10.32.4.zip"
"version": "10.32.6",
"executable": "azcopy_darwin_arm64_10.32.6/azcopy",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.6/azcopy_darwin_arm64_10.32.6.zip",
"sha512": "fbed2b9d27341459e849a3e8e25c759bf81c9b905bd847134ebb02f453abe6d1b050d4ddbd3d1634068c4d540fc79d2065e031178de5e83c66b013b70f9fbd12",
"archive": "azcopy_darwin_arm64_10.32.6.zip"
},
{
"name": "azcopy",
"os": "windows",
"arch": "amd64",
"version": "10.32.4",
"executable": "azcopy_windows_amd64_10.32.4/azcopy.exe",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.4/azcopy_windows_amd64_10.32.4.zip",
"sha512": "b3e9a37566667c1200a32100637364c4d7a624b59aa8df80957ffcb871a2be8cf8b2a6cb6429abaf0f71d8da8b4cf0e4da2fcbba9747136b254039a13997acef",
"archive": "azcopy_windows_amd64_10.32.4.zip"
"version": "10.32.6",
"executable": "azcopy_windows_amd64_10.32.6/azcopy.exe",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.6/azcopy_windows_amd64_10.32.6.zip",
"sha512": "80c06945808de90c7c0b42f2554c8ff7c2193a9f0693516ff572e2a61b80227b0ac1d782a58db82190baf7fe613da56f08f6c799f62c58f46e099edfa7f35af6",
"archive": "azcopy_windows_amd64_10.32.6.zip"
},
{
"name": "azcopy",
"os": "windows",
"arch": "arm64",
"version": "10.32.4",
"executable": "azcopy_windows_arm64_10.32.4/azcopy.exe",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.4/azcopy_windows_arm64_10.32.4.zip",
"sha512": "7e31527bc2381b228ad6ecbbf20eb11e62741c443ad83fef88acb694110dbef07366d5091388b4a521118389fbf87a67b389e316bef80ca044134f8b4b610281",
"archive": "azcopy_windows_arm64_10.32.4.zip"
"version": "10.32.6",
"executable": "azcopy_windows_arm64_10.32.6/azcopy.exe",
"url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.6/azcopy_windows_arm64_10.32.6.zip",
"sha512": "de1a1520d44b30abf4a228778a84f57056c5017f9a56909dca705017c2e7e81c35b407ca5c1822d5eb88513e7741a562d56536f759913576cad43e153beb0e51",
"archive": "azcopy_windows_arm64_10.32.6.zip"
}
]
}

View File

@ -2,3 +2,4 @@ set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_BUILD_TYPE release)
set(VCPKG_PROVIDED_FORTRAN ON)

View File

@ -1,3 +1,4 @@
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_PROVIDED_FORTRAN ON)

View File

@ -1,4 +1,4 @@
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE static)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_PROVIDED_FORTRAN ON)

View File

@ -1,4 +1,4 @@
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_PROVIDED_FORTRAN ON)

View File

@ -1,4 +1,4 @@
set(VCPKG_TARGET_ARCHITECTURE x86)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)
set(VCPKG_PROVIDED_FORTRAN ON)

View File

@ -2917,8 +2917,8 @@
"port-version": 0
},
"ezfoundation": {
"baseline": "21.10",
"port-version": 1
"baseline": "26.3",
"port-version": 0
},
"f3d": {
"baseline": "3.2.0",
@ -6698,7 +6698,7 @@
},
"mongo-c-driver": {
"baseline": "2.3.1",
"port-version": 0
"port-version": 1
},
"mongo-cxx-driver": {
"baseline": "4.4.0",
@ -7422,7 +7422,7 @@
},
"opencv4": {
"baseline": "4.12.0",
"port-version": 5
"port-version": 6
},
"openexr": {
"baseline": "3.4.13",
@ -7970,7 +7970,7 @@
},
"popsift": {
"baseline": "0.10.0",
"port-version": 1
"port-version": 2
},
"portable-file-dialogs": {
"baseline": "0.1.0",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "67a0b5df02046ff1862689ede1a713d46470da41",
"version": "26.3",
"port-version": 0
},
{
"git-tree": "2d772ca62c751b0f5498a9857968b3366d3f5f67",
"version": "21.10",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "e1338692cf8462e5e974d24d097fe31870cc0f75",
"version": "2.3.1",
"port-version": 1
},
{
"git-tree": "0363b9a47c3f2549444cc8575ca5c9ff7df115f4",
"version": "2.3.1",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "50e7bf04e4a0e069656151d374b49f54388bc88f",
"version": "4.12.0",
"port-version": 6
},
{
"git-tree": "0e28cd8713d7b810bef28ed0d7859dd761215854",
"version": "4.12.0",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "ea8a55ff6e54b29eaa89612cc30e845762b4b793",
"version": "0.10.0",
"port-version": 2
},
{
"git-tree": "24ec78a1eca98f407158ac08a43b923a5417849a",
"version": "0.10.0",