* apply patches to make qtmultimedia work with gestreamer on windows
* version stuff
* remove libnice from ci.baseline
* move gstreamer on osx as fail to baseline
* add supports field to qtmultimedia. Qt does not officially support x86 on windows
* version stuff
* remove duplicated patch
* version stuff
* add upstream patch to fix x86-windows
* [skip actions] version stuff
* [vtk] Add feature gdal and geojson, re-factory the feature select part
* version stuff
* Fix feature option MPI
* Fix find and use gdal.
* version
* Handle some of the same parameters
* version
* [farmhash] support windows build
* [farmhash] update baseline JSON
* [farmhash] patch from PR diff
* [farmhash] patch from all PR changes
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* [libsquish] Export cmake target
* [openimageio] Fix find dependency libsquish
* version
* Rename the target
* Re-fix dependency libsquish, apply official changes
* version stuff
* more version
* Change namespace
* Update patch
* version
* Remove unused patch
* version
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update dartsim
* Use newer vcpkg functions
* Update version number
* Update ports/dartsim/portfile.cmake
Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
* Update versions
Co-authored-by: Robert Schumacher <roschuma@microsoft.com>
* Reformat portfile
* Minimize makefiles patch
* Update to 1.0.6
* Fix uwp builds, remove skip from baseline
* Install pc file for windows
* Update versions
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update simde to 0.7.2
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* [BitSerializer] Update to version 0.9
* [bitserializer] Update port to new version 0.44
* [bitserializer] Update deprecated VCPKG Cmake functions
* [bitserializer] Remove default features list
Co-authored-by: Pavel_Kisliak <Pavel_Kisliak@epam.com>
* REGRESSION: chartdir:x64-linux. If expected, add chartdir:x64-linux=fail to .\scripts\ci.baseline.txt.
-- Note: chartdir only supports dynamic library linkage. Building dynamic library.
-- Downloading http://www.advsofteng.net/chartdir_cpp_linux_64.tar.gz -> chartdir_cpp_linux_64-7.0.0.tar.gz...
[DEBUG] Feature flag 'binarycaching' unset
[DEBUG] Feature flag 'manifests' = off
[DEBUG] Feature flag 'compilertracking' unset
[DEBUG] Feature flag 'registries' unset
[DEBUG] Feature flag 'versions' unset
[DEBUG] popen(curl --fail -L "https://vcpkgassetcache.blob.core.windows.net/assets/e7e71b64b3a756b6df174758c392ab4c9310b4d265e521dccbd009eeefd46e021a74572e7212de5564725df20ddf189e1599e88a116b426f1256f7d34b0131aa?sp=racwl&st=2021-06-29T20:09:46Z&se=2021-10-02T04:09:46Z&spr=https&sv=2020-08-04&sr=c&sig=g3shlIpD0R923OUzfIsrTwjX0vc6OzNXGEDO3URXmYc%3D" --create-dirs --output /mnt/vcpkg-ci/downloads/chartdir_cpp_linux_64-7.0.0.tar.gz.1003174.part 2>&1)
[DEBUG] cmd_execute_and_stream_data() returned 5632 after 31162 us
[DEBUG] popen(curl --fail -L http://www.advsofteng.net/chartdir_cpp_linux_64.tar.gz --create-dirs --output /mnt/vcpkg-ci/downloads/chartdir_cpp_linux_64-7.0.0.tar.gz.1003174.part 2>&1)
[DEBUG] cmd_execute_and_stream_data() returned 0 after 8512565 us
Error: Failed to download from mirror set:
https://vcpkgassetcache.blob.core.windows.net/assets/e7e71b64b3a756b6df174758c392ab4c9310b4d265e521dccbd009eeefd46e021a74572e7212de5564725df20ddf189e1599e88a116b426f1256f7d34b0131aa?*** SECRET ***: % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (22) The requested URL returned error: 403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
File does not have the expected hash:
url : [ http://www.advsofteng.net/chartdir_cpp_linux_64.tar.gz ]
File path : [ /mnt/vcpkg-ci/downloads/chartdir_cpp_linux_64-7.0.0.tar.gz.1003174.part ]
Expected hash : [ e7e71b64b3a756b6df174758c392ab4c9310b4d265e521dccbd009eeefd46e021a74572e7212de5564725df20ddf189e1599e88a116b426f1256f7d34b0131aa ]
Actual hash : [ ea2e05f28dd9647fed49feaf130d8034065067463965f144b3fae4eae482579b1ecf528dc86d1b3602887d5ca0c3b1569404489b0f4cb2300b798fed940cd467 ]
Updated SHAs and added quotes. These are the changes made by upstream:
```
diff --git a/new_sha/ChartDirector/cppdemo/surfacetexture/surfacetexture.cpp b/old_sha/ChartDirector/cppdemo/surfacetexture/surfacetexture.cpp
index 79f15be..302eb78 100644
--- a/new_sha/ChartDirector/cppdemo/surfacetexture/surfacetexture.cpp
+++ b/old_sha/ChartDirector/cppdemo/surfacetexture/surfacetexture.cpp
@@ -108,7 +108,9 @@ void createChart(int chartIndex, const char *filename)
const int dataZ_size = dataX_size * dataY_size;
double dataZ[dataZ_size];
for(int yIndex = 0; yIndex < dataY_size; ++yIndex) {
+ double y = dataY[yIndex];
for(int xIndex = 0; xIndex < dataX_size; ++xIndex) {
+ double x = dataX[xIndex];
dataZ[yIndex * dataX_size + xIndex] = dataX[xIndex] * dataY[yIndex];
}
}
@@ -176,7 +178,7 @@ void createChart(int chartIndex, const char *filename)
// Use a DrawArea to load the image
DrawArea* d = new DrawArea();
d->load("maptexture.png");
- d->resize(c->getPlotRegionWidth(), c->getPlotRegionDepth());
+ d->resize(240, 210);
// Set the DrawArea as a resource
c->setResource("texture", d);
diff --git a/new_sha/ChartDirector/lib/libchartdir.so.7.0.0 b/old_sha/ChartDirector/lib/libchartdir.so.7.0.0
index b1ea97f..bfb1d4b 100644
Binary files a/new_sha/ChartDirector/lib/libchartdir.so.7.0.0 and b/old_sha/ChartDirector/lib/libchartdir.so.7.0.0 differ
diff --git a/new_sha/ChartDirector/qtdemo/helloworld/qchartviewer.cpp b/old_sha/ChartDirector/qtdemo/helloworld/qchartviewer.cpp
index 5736d60..423120f 100644
--- a/new_sha/ChartDirector/qtdemo/helloworld/qchartviewer.cpp
+++ b/old_sha/ChartDirector/qtdemo/helloworld/qchartviewer.cpp
@@ -107,9 +107,9 @@ private:
QCursor *hZoomOutCursor;
QCursor *hNoZoomCursor;
- QCursor &getZoomCursor(QCursor **cache, double scale, int flags)
+ QCursor &getZoomCursor(QCursor *cache, double scale, int flags)
{
- if (0 == *cache)
+ if (0 == cache)
{
DrawArea d;
d.setSize(32, 32, Chart::Transparent);
@@ -127,9 +127,9 @@ private:
MemBlock m = d.outPNG();
QImage img = QImage::fromData((const uchar*)m.data, m.len);
img.setDevicePixelRatio(scale);
- *cache = new QCursor(QPixmap::fromImage(img), 15, 15);
+ cache = new QCursor(QPixmap::fromImage(img), 15, 15);
}
- return **cache;
+ return *cache;
}
public:
@@ -145,15 +145,15 @@ public:
}
QCursor &getZoomInCursor(double scale)
{
- return getZoomCursor(&hZoomInCursor, scale, 3);
+ return getZoomCursor(hZoomInCursor, scale, 3);
}
QCursor &getZoomOutCursor(double scale)
{
- return getZoomCursor(&hZoomOutCursor, scale, 1);
+ return getZoomCursor(hZoomOutCursor, scale, 1);
}
QCursor &getNoZoomCursor(double scale)
{
- return getZoomCursor(&hNoZoomCursor, scale, 0);
+ return getZoomCursor(hNoZoomCursor, scale, 0);
}
} cursorManager;
diff --git a/new_sha/ChartDirector/qtdemo/qtdemo/democharts.cpp b/old_sha/ChartDirector/qtdemo/qtdemo/democharts.cpp
index a3b7962..d706853 100644
--- a/new_sha/ChartDirector/qtdemo/qtdemo/democharts.cpp
+++ b/old_sha/ChartDirector/qtdemo/qtdemo/democharts.cpp
@@ -10954,7 +10954,9 @@ void surfacetexture(QChartViewer *viewer, int chartIndex)
const int dataZ_size = dataX_size * dataY_size;
double dataZ[dataZ_size];
for(int yIndex = 0; yIndex < dataY_size; ++yIndex) {
+ double y = dataY[yIndex];
for(int xIndex = 0; xIndex < dataX_size; ++xIndex) {
+ double x = dataX[xIndex];
dataZ[yIndex * dataX_size + xIndex] = dataX[xIndex] * dataY[yIndex];
}
}
@@ -11022,7 +11024,7 @@ void surfacetexture(QChartViewer *viewer, int chartIndex)
// Use a DrawArea to load the image
DrawArea* d = new DrawArea();
d->load("@/images/maptexture.png");
- d->resize(c->getPlotRegionWidth(), c->getPlotRegionDepth());
+ d->resize(240, 210);
// Set the DrawArea as a resource
c->setResource("texture", d);
@@ -12304,6 +12306,11 @@ void treemapcolors(QChartViewer *viewer, int /* chartIndex */)
void treemaplayout(QChartViewer *viewer, int chartIndex)
{
+ // Labels for the tree map
+ const char* energy_types[] = {"Coal", "Oil", "Gas", "Nuclear", "Hydro", "Solar", "Wind",
+ "Biomass", "Geothermal", "Wave"};
+ const int energy_types_size = (int)(sizeof(energy_types)/sizeof(*energy_types));
+
// Random data for the tree map
RanSeries* r = new RanSeries(3);
DoubleArray data = r->getSeries(20, 20, 400);
@@ -14163,10 +14170,7 @@ void circularbarmeter2(QChartViewer *viewer, int chartIndex)
m->setCap(0, Chart::Transparent);
// In this example, the circular bar has 20 segments
- int segmentCount = 20;
-
- // The angular step
- double angleStep = 360.0 / segmentCount;
+ int angleStep = 360 / 20;
// The gap between segments is 4.5 degrees
double angleGap = 4.5;
@@ -14205,39 +14209,28 @@ void circularbarmeter2(QChartViewer *viewer, int chartIndex)
stepColorScale_size));
}
- //
- // Now we draw the segments of the bar meter
- //
-
- // The segment that contains the value
- int currentSegment = (int)(angle / angleStep);
-
- // Segments after the current segment is colored with the blank color
- for(int i = currentSegment + 1; i < segmentCount; ++i) {
- m->addRingSector(radius, radius - 20, i * angleStep, (i + 1) * angleStep - angleGap,
- blankColor);
+ // Draw the blank part of the circular bar
+ if (angle < 360) {
+ // Iterate the segments in the blank part of the circular bar
+ for(int startAngle = (int)(angle / angleStep) * angleStep; startAngle < 360; startAngle +=
+ angleStep) {
+ // The first segment may be partially filled
+ double partialAngle = (startAngle >= angle ? 0 : (angle - startAngle) * (1 - angleGap /
+ angleStep));
+ m->addRingSector(radius, radius - 20, startAngle + partialAngle, startAngle + angleStep
+ - angleGap, blankColor);
}
-
- // Segments before the current segment is colored with the fill color
- for(int i = 0; i < currentSegment; ++i) {
- m->addRingSector(radius, radius - 20, i * angleStep, (i + 1) * angleStep - angleGap,
- fillColor);
}
- // Segment that contains the angle will be partially filled and partially blank. We need to
- // adjust the angle to compensated for the angle gap.
- double adjustedAngle = currentSegment * angleStep + (angle - currentSegment * angleStep) * (1 -
- angleGap / angleStep);
-
- // The blank part of the segment
- if ((currentSegment + 1) * angleStep > angle) {
- m->addRingSector(radius, radius - 20, adjustedAngle, (currentSegment + 1) * angleStep -
- angleGap, blankColor);
+ // Draw the fill part of the circular bar
+ if (angle > 0) {
+ // Iterate the segments in the fill part of the circular bar
+ for(int startAngle = 0; startAngle < angle; startAngle += angleStep) {
+ // The last segment may be partially filled
+ double angleSpan = (angleStep - angleGap) * (angle >= startAngle + angleStep ? 1 : (
+ angle - startAngle) / angleStep);
+ m->addRingSector(radius, radius - 20, startAngle, startAngle + angleSpan, fillColor);
}
-
- // The filled part of the segment.
- if (angle > currentSegment * angleStep) {
- m->addRingSector(radius, radius - 20, currentSegment * angleStep, adjustedAngle, fillColor);
}
// Add a label at the center to display the value
diff --git a/new_sha/ChartDirector/qtdemo/qtdemo/financedemo.cpp b/old_sha/ChartDirector/qtdemo/qtdemo/financedemo.cpp
index 7b8c1f5..b029776 100644
--- a/new_sha/ChartDirector/qtdemo/qtdemo/financedemo.cpp
+++ b/old_sha/ChartDirector/qtdemo/qtdemo/financedemo.cpp
@@ -315,13 +315,6 @@ void FinanceDemo::onLineEditChanged()
int new_avgPeriod2 = m_MovAvg2->text().toInt();
QString tickerKey = m_TickerSymbol->text();
- if (tickerKey.isEmpty())
- {
- // Default tickerKey
- tickerKey = "ASE";
- m_TickerSymbol->setText(tickerKey);
- }
-
QString compareKey = m_CompareWith->text();
bool needReloadData = (m_tickerKey != tickerKey) || (m_compareKey != compareKey);
@@ -367,16 +360,12 @@ void FinanceDemo::loadData(const QString& ticker, const QString& compare)
if (m_compareKey != compare)
{
m_compareKey = compare;
- if (m_compareKey.isEmpty())
- m_dailyPrice.compareData.clear();
- else
- {
+
// Simulator to generate realistic random OHLC values
FinanceSimulator db2(compare.toUtf8().data(), Chart::chartTime(2010, 1, 1),
Chart::chartTime(2020, 12, 31), 86400);
m_dailyPrice.compareData = arrayToVector(db2.getCloseData());
}
- }
// In this example, we will compute the weekly and monthly prices on demand. We just
// need to clear the old data here.
diff --git a/new_sha/ChartDirector/qtdemo/qtdemo/qchartviewer.cpp b/old_sha/ChartDirector/qtdemo/qtdemo/qchartviewer.cpp
index 5736d60..423120f 100644
--- a/new_sha/ChartDirector/qtdemo/qtdemo/qchartviewer.cpp
+++ b/old_sha/ChartDirector/qtdemo/qtdemo/qchartviewer.cpp
@@ -107,9 +107,9 @@ private:
QCursor *hZoomOutCursor;
QCursor *hNoZoomCursor;
- QCursor &getZoomCursor(QCursor **cache, double scale, int flags)
+ QCursor &getZoomCursor(QCursor *cache, double scale, int flags)
{
- if (0 == *cache)
+ if (0 == cache)
{
DrawArea d;
d.setSize(32, 32, Chart::Transparent);
@@ -127,9 +127,9 @@ private:
MemBlock m = d.outPNG();
QImage img = QImage::fromData((const uchar*)m.data, m.len);
img.setDevicePixelRatio(scale);
- *cache = new QCursor(QPixmap::fromImage(img), 15, 15);
+ cache = new QCursor(QPixmap::fromImage(img), 15, 15);
}
- return **cache;
+ return *cache;
}
public:
@@ -145,15 +145,15 @@ public:
}
QCursor &getZoomInCursor(double scale)
{
- return getZoomCursor(&hZoomInCursor, scale, 3);
+ return getZoomCursor(hZoomInCursor, scale, 3);
}
QCursor &getZoomOutCursor(double scale)
{
- return getZoomCursor(&hZoomOutCursor, scale, 1);
+ return getZoomCursor(hZoomOutCursor, scale, 1);
}
QCursor &getNoZoomCursor(double scale)
{
- return getZoomCursor(&hNoZoomCursor, scale, 0);
+ return getZoomCursor(hNoZoomCursor, scale, 0);
}
} cursorManager;
```
* REGRESSION: ccfits:arm64-windows. If expected, add ccfits:arm64-windows=fail to .\scripts\ci.baseline.txt.
REGRESSION: ccfits:x64-linux. If expected, add ccfits:x64-linux=fail to .\scripts\ci.baseline.txt.
REGRESSION: ccfits:x64-osx. If expected, add ccfits:x64-osx=fail to .\scripts\ci.baseline.txt.
REGRESSION: ccfits:x64-windows-static-md. If expected, add ccfits:x64-windows-static-md=fail to .\scripts\ci.baseline.txt.
REGRESSION: ccfits:x64-windows-static. If expected, add ccfits:x64-windows-static=fail to .\scripts\ci.baseline.txt.
REGRESSION: ccfits:x64-windows. If expected, add ccfits:x64-windows=fail to .\scripts\ci.baseline.txt.
REGRESSION: ccfits:x86-windows. If expected, add ccfits:x86-windows=fail to .\scripts\ci.baseline.txt.
>[DEBUG] popen(curl --fail -L https://heasarc.gsfc.nasa.gov/fitsio/ccfits/CCfits-2.5.tar.gz --create-dirs --output /Users/bion/vcpkg/downloads/CCfits-2.5.tar.gz.15183.part 2>&1)
>[DEBUG] cmd_execute_and_stream_data() returned 5632 after 415053 us
>Error: Failed to download from mirror set:
>https://heasarc.gsfc.nasa.gov/fitsio/ccfits/CCfits-2.5.tar.gz: % Total % Received % Xferd Average Speed Time Time Time Current
> Dload Upload Total Spent Left Speed
> 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
>curl: (22) The requested URL returned error: 404 Not Found
Fixed link and modernized portfile.
* REGRESSION: geogram:x64-linux. If expected, add geogram:x64-linux=fail to .\scripts\ci.baseline.txt.
REGRESSION: geogram:x64-osx. If expected, add geogram:x64-osx=fail to .\scripts\ci.baseline.txt.
REGRESSION: geogram:x64-windows-static-md. If expected, add geogram:x64-windows-static-md=fail to .\scripts\ci.baseline.txt.
REGRESSION: geogram:x64-windows-static. If expected, add geogram:x64-windows-static=fail to .\scripts\ci.baseline.txt.
REGRESSION: geogram:x64-windows. If expected, add geogram:x64-windows=fail to .\scripts\ci.baseline.txt.
REGRESSION: geogram:x86-windows. If expected, add geogram:x86-windows=fail to .\scripts\ci.baseline.txt.
Upstream is gone:
https://gforge.inria.fr/frs/download.php/file/38314/geogram_1.7.5.tar.gz: % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (60) SSL: no alternative certificate subject name matches target host name 'gforge.inria.fr'
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
[DEBUG] /agent/_work/1/s/buildtrees/_vcpkg/src/vcpkg-tool-2021-09-10/src/vcpkg/base/downloads.cpp(626)
[DEBUG] Exiting after 583.7 ms us (582562 us)
CMake Error at scripts/cmake/vcpkg_download_distfile.cmake:83 (message):
Failed to download file with error: 1
If you use a proxy, please check your proxy setting. Possible causes are:
1. You are actually using an HTTP proxy, but setting HTTPS_PROXY variable
to `https://address:port`. This is not correct, because `https://` prefix
claims the proxy is an HTTPS proxy, while your proxy (v2ray, shadowsocksr
, etc..) is an HTTP proxy. Try setting `http://address:port` to both
HTTP_PROXY and HTTPS_PROXY instead.
2. You are using Fiddler. Currently a bug (https://github.com/microsoft/vcpkg/issues/17752)
will set HTTPS_PROXY to `https://fiddler_address:port` which lead to problem 1 above.
Workaround is open Windows 10 Settings App, and search for Proxy Configuration page,
Change `http=address:port;https=address:port` to `address`, and fill the port number.
3. You proxy's remote server is out of service.
In future vcpkg releases, if you are using Windows, you no longer need to set
HTTP(S)_PROXY environment variables. Vcpkg will simply apply Windows IE Proxy
Settings set by your proxy software. See (https://github.com/microsoft/vcpkg-tool/pull/49)
and (https://github.com/microsoft/vcpkg-tool/pull/77)
Otherwise, please submit an issue at https://github.com/Microsoft/vcpkg/issues
Call Stack (most recent call first):
scripts/cmake/vcpkg_download_distfile.cmake:274 (z_vcpkg_download_distfile_show_proxy_and_fail)
ports/geogram/portfile.cmake:4 (vcpkg_download_distfile)
scripts/ports.cmake:141 (include)
Skipped in ci.baseline.txt.
* update co to v2.0.2
* fix gitree in co.json
* add install-dll.patch for co
* update version
* fix CRT linkage
* update version
* minimal patch
* update version
* Update usockets to 0.8.1
* Update CI baseline
* Minor tweaks
* Update git-tree hash
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Modernize portfile
* Update indentation
* Update to 5.0.1
* Don't enable legacy PROJ API on Windows
* Fix copyright
* Update versions
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update uwebsockets to 20.5.0
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update date to 3.0.1
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update cppzmq to 4.8.1
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update ebml to 1.4.2
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update tmxlite to 1.3.0
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update doctest to 2.4.6
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update libmorton to 0.2.8
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update span-lite to 0.10.3
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* [qttools] add missing feature dependency.
* version stuff
* assistant also requires sql-sqlite.
* version stuff
* qtbase add missing concurrent dependency
* update port version
* version stuff
* Update bitmagic to 7.5.0
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>
* Update boolinq to 3.0.2
* Update CI baseline
Co-authored-by: chausner <chausner@users.noreply.github.com>
Co-authored-by: Billy Robert O'Neal III <bion@microsoft.com>