Do Soybean Yields Correlate to Temperature and Precipitation Variations?

Summary
This report sought to assess the impact of climate change on crop
yields by analyzing weather data, soybean yields, and soybean prices
between 2000 and 2022 for the Top 11 soybean producing States. Data was
obtained from public sources at USDA, NOAA, and FAO.
Linear regressions were performed to assess the relationship
between:
- Max, mean, and min temperatures and soybean yield,
- Precipitation and soybean yield
- Soybean yield and soybean price
The analysis determined the following:
- Precipitation was strongly correlated to yield and accounted for 67%
of yield variation.
- Yield was moderately correlated to soybean price and accounted for
17% of price variation.
- Max, mean, and min temperatures were not correlated to yield (nearly
zero correlation)
Introduction
Given the widespread media reports on extreme weather events, it is
evident that global climate change is a growing concern and its impacts
may be increasing. One aspect of concern is whether global climate
change will impact food security.
This report sought to assess the impact of global climate change on crop
yields by analyzing weather data, soybean crop yields, and soybean
prices in the United States between 2000 and 2022. Public datasets from
the USDA and NOAA were used for the analysis.
Climate Change vs. Yields
Climate change has reduced food security and
affected water security. . . .Although overall agricultural productivity
has increased, climate change has slowed this growth over the past 50
years globally (medium confidence), with related negative
impacts mainly in mid and low latitude regions but
positive impacts in some high latitude regions (high
confidence).
IPCC
(emphasis added)
Use Case
To assess the impact of climate change on crop yields, this report
used public data from USDA and NOAA to analyze soybean yields in the
United States from 2000 to 2022. Specifically, this report
examined:
Soybean
Soybean (Glycine max) is one of the most
important world crops and is grown for oil and protein. FAO
(emphasis added)
Seventh Largest Crop Globally

Top Soybean Producers

US Soybean Production
Soybean is a major U.S. crop, with 87 million
planted acres in 2022, making it the second-most planted
crop after corn. Soybean is a key source of livestock feed and
also an export crop.
USDA
(emphasis added)

Methodology
The weather and soybean data analyzed for this report were collected
from the Top 11 soybean producing States, which together produced 83% of
US soybean from 2000 to 2022.
Daily weather and monthly soybean price data were annualized to
synchronize measurement periods with the annual soybean yield data.
Data imputation and linear regression analysis were carried out using
the R programming language.
Data
The primary data were obtained from public datasets made available by
US government agencies (USDA and NOAA). The data were processed using
SQL on BigQuery and analyzed with R programming language using
RStudio.
Sources:
- National Oceanic and Atmospheric Administration
(NOAA)
- Global Surface Summary of the Day (GSOD)
- US Dept of Agriculture (USDA):
- National Agricultural Statistics Service (NASS)
- Foreign Agricultural Service / Int’l Production Assessment Division
(FAS/IPAD)
- UN Food and Agriculture Organization (FAO)
Collection:
- Selected relevant data from public datasets to create SQL tables and
Excel sheets from CSV files
- Soybean yield per acre (USDA/NASS)
- Soybean prices (USDA/NASS)
- Global crop production (FAOSTAT)
- Queried BigQuery GSOD datasets to select data and create new SQL
tables
- NOAA reporting stations in the Top 11 soybean States
- Weather data (temps and precip) in the Top 11 soybean States for
2000 - 2022
Cleaning:
- Combined annual weather data from 2000 - 2022 tables to create a
single weather table
- Joined SQL tables to filter weather and soybean data to relevant
States
- Validated data types and values in SQL tables
- Harmonized varied NULL value formats
- Used R to impute missing weather data values using MICE method
- Created change log to document
cleaning process and data transformations
- Created metadata file to document
dataset information
Analysis:
- Used R programming language to create data frames from SQL
tables
- Plotted time series graph of temperatures, precipitation, yield, and
price
- Performed bivariate regression analysis of weather and soybean data
- Max, Mean, Min Temperatures vs. Yield
- Precipitation vs. Yield
- Yield vs. Price
- Plotted linear regression models
- Evaluated R-squared and P value outcomes of the regression
analysis
Scope and Limitations:
- Data taken only from Top 11 Soybean Producing States between
2000-2022
- Sub-annual weather data measurements might offer additional insights
but would require statistical analysis beyond the scope of this
report.
- Analysis did not include other relevant factors, including
irrigation, planting dates, seed types, fertilizer applications,
herbicides & pesticides, etc.
Analysis
This report aggregated and
averaged the data for weather, soybean yields, and
soybean prices from 2000 to 2022 for the Top 11 States, which produced
83% of US soybeans.
Daily weather and monthly price data were annualized to
synchronize measurement periods with annual yield measurements.
The following variables were analyzed:
- Maximum Daily Temperature
- Median Daily Temperature
- Minimum Daily Temperature
- Daily Precipitation
- Monthly Soybean Price (USD/Bushel)
- Annual Soybean Yield (Bushels/Acre)
Time Series of Weather, Yield, and Price

Statistical Summary
Precip |
Yield |
23 |
.82 |
.67 |
.001 |
Yield |
Price |
23 |
.42 |
.17 |
.05 |
Max Temp |
Yield |
23 |
.05 |
.002 |
.83 |
Mean Temp |
Yield |
23 |
.02 |
.0004 |
.93 |
Min Temp |
Yield |
23 |
.01 |
.0002 |
.95 |
- Precipitation is strongly correlated with Yield at a .001 level of
statistical significance.
- Yield is moderately correlated with Price at a .05 level of
statistical significance.
- Max, Mean, and Min Temps are NOT correlated with Yield.
Precipitation vs Yield

Yield vs Price

Conclusions
The regression analysis of the weather, yield, and price data
provides three key findings with respect to the impact
of climate change on soybean yields and prices in the Top 11 Soybean
Producing States between 2000 and 2022.
Statistically Significant Findings
Annual precipitation is strongly
correlated with annual soybean yields at a
.001 level of significance and explains
67% of the variation in annual yields.
Annual soybean yields are moderately
correlated to annual soybean prices at a
.05 level of significance but only explain
17% of variation in annual prices.
Statistically Insignificant Findings
- There is no statistically significant correlation
between annual Max, Mean, and Min temperatures and
soybean yields. Indeed, the correlations betweenk the
temperatures and yield are nearly zero.
With respect to the impact of weather on soybean yields
in the Midwest United States between 2000-2022, precipitation levels
explain 67% of yield variation, while temperatures had no correlation to
yields.
Additional Analysis
Given additional time and resources, particularly regarding
statistical methodology, it would be valuable to analyze the following
parameters not included in this report:
- Sub-annual measurement periods for temperatures and
precipitation
- Planting dates
- Irrigation status
- Seed varieties
- Fertilizer, pesticide, & herbicide applications
- Additional crops
- Additional geographic regions of the world
References
Soybean Data
- USDA
- National Agricultural Statistics Service (NASS)
- International Production Assessment Division (IPAD)
- Food and Agriculture Organization (FAO)
Weather Data
- NOAA Global Surface Summary of the Day - GSOD on Google Cloud
BigQuery
LS0tDQp0aXRsZTogIlNveWJlYW4gWWllbGRzIGluIGEgQ2hhbmdpbmcgQ2xpbWF0ZSINCmF1dGhvcjogIlJlZWQgU2xhY2siDQpkYXRlOiAnTGFzdCBVcGRhdGVkOiBgciBTeXMuRGF0ZSgpYCcNCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0aGVtZTogY2VydWxlYW4NCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6ICc0Jw0KICAgIGRmX3ByaW50OiBwYWdlZA0KLS0tDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQpwLCBib2R5IHsNCiAgZm9udC1zaXplOiAxNnB4Ow0KfQ0KDQouaW1hZ2UtdGV4dC1jb250YWluZXIgew0KICBkaXNwbGF5OiBmbGV4OyAvKiBVc2UgZmxleGJveCBmb3IgbGF5b3V0ICovDQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qIENlbnRlciB2ZXJ0aWNhbGx5ICovXw0KfQ0KDQouaW1hZ2Ugew0KICBib3JkZXI6IDRweCBzb2xpZCAjMDA3QkE3OyAvKiBNYWtlIGJvcmRlciBjb2xvciBjZXJ1bGVhbiAqLw0KICBtYXgtd2lkdGg6IDEwMCU7IC8qIEFkanVzdCB0aGUgd2lkdGggb2YgdGhlIGltYWdlIGFzIG5lZWRlZCAqLw0KICBtYXJnaW4tbGVmdDogMTBweDsgLyogQWRkIHNvbWUgc3BhY2luZyBiZXR3ZWVuIHRoZSBpbWFnZSBhbmQgdGV4dCAqLw0KfQ0KDQouc2NyZWVuLXBlcmNlbnQgew0KICB3aWR0aDogODAlOyAvKiBBZGp1c3QgdGhlIHBlcmNlbnRhZ2UgYXMgbmVlZGVkICovDQogIG1heC13aWR0aDogMTAwJTsgLyogRW5zdXJlIHRoZSBpbWFnZSBkb2Vzbid0IGV4Y2VlZCB0aGUgc2NyZWVuIHdpZHRoICovDQogIGhlaWdodDogYXV0bzsgLyogTWFpbnRhaW4gdGhlIGFzcGVjdCByYXRpbyAqLw0KfQ0KDQouaW1hZ2UtY2FwdGlvbiB7DQogICAgY29sb3I6ICMwMDdCQTc7IC8qIE1ha2UgZm9udCBjb2xvciBjZXJ1bGVhbiAqLw0KICAgIGZvbnQtc2l6ZTogMjBweDsgLyogQWRqdXN0IHRoZSBmb250IHNpemUgYXMgbmVlZGVkICovDQp9DQoNCg0KYGBgDQpcDQoNCjxkaXYgY2xhc3M9ImltYWdlLXRleHQtY29udGFpbmVyIj4NCiAgPHAgY2xhc3M9ImltYWdlLWNhcHRpb24iPkRvIFNveWJlYW4gWWllbGRzIENvcnJlbGF0ZSB0byBUZW1wZXJhdHVyZSBhbmQgUHJlY2lwaXRhdGlvbiBWYXJpYXRpb25zPzwvcD4NCiAgPGltZyBzcmM9Ii4vaW1nL3NveWJlYW5zLnBuZyIgYWx0PSJTb3liZWFuIEZpZWxkIiBjbGFzcz0iaW1hZ2UiPg0KPC9kaXY+DQoNClwNCg0KDQojIyBTdW1tYXJ5IFwNCg0KVGhpcyByZXBvcnQgc291Z2h0IHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGNsaW1hdGUgY2hhbmdlIG9uIGNyb3AgeWllbGRzIGJ5IGFuYWx5emluZyB3ZWF0aGVyIGRhdGEsIHNveWJlYW4geWllbGRzLCBhbmQgc295YmVhbiBwcmljZXMgYmV0d2VlbiAyMDAwIGFuZCAyMDIyIGZvciB0aGUgVG9wIDExIHNveWJlYW4gcHJvZHVjaW5nIFN0YXRlcy4gRGF0YSB3YXMgb2J0YWluZWQgZnJvbSBwdWJsaWMgc291cmNlcyBhdCBVU0RBLCBOT0FBLCBhbmQgRkFPLg0KXA0KDQpMaW5lYXIgcmVncmVzc2lvbnMgd2VyZSBwZXJmb3JtZWQgdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbjoNClwNCg0KLSBNYXgsIG1lYW4sIGFuZCBtaW4gdGVtcGVyYXR1cmVzIGFuZCBzb3liZWFuIHlpZWxkLCANCi0gUHJlY2lwaXRhdGlvbiBhbmQgc295YmVhbiB5aWVsZA0KLSBTb3liZWFuIHlpZWxkIGFuZCBzb3liZWFuIHByaWNlDQpcDQoNClRoZSBhbmFseXNpcyBkZXRlcm1pbmVkIHRoZSBmb2xsb3dpbmc6DQpcDQoNCi0gUHJlY2lwaXRhdGlvbiB3YXMgc3Ryb25nbHkgY29ycmVsYXRlZCB0byB5aWVsZCBhbmQgYWNjb3VudGVkIGZvciA2NyUgb2YgeWllbGQgdmFyaWF0aW9uLiANCi0gWWllbGQgd2FzIG1vZGVyYXRlbHkgY29ycmVsYXRlZCB0byBzb3liZWFuIHByaWNlIGFuZCBhY2NvdW50ZWQgZm9yIDE3JSBvZiBwcmljZSB2YXJpYXRpb24uDQotIE1heCwgbWVhbiwgYW5kIG1pbiB0ZW1wZXJhdHVyZXMgd2VyZSBub3QgY29ycmVsYXRlZCB0byB5aWVsZCAobmVhcmx5IHplcm8gY29ycmVsYXRpb24pDQpcDQpcDQoNCg0KIyMgSW50cm9kdWN0aW9uIA0KDQpHaXZlbiB0aGUgd2lkZXNwcmVhZCBtZWRpYSByZXBvcnRzIG9uIGV4dHJlbWUgd2VhdGhlciBldmVudHMsIGl0IGlzIGV2aWRlbnQgdGhhdCBnbG9iYWwgY2xpbWF0ZSBjaGFuZ2UgaXMgYSBncm93aW5nIGNvbmNlcm4gYW5kIGl0cyBpbXBhY3RzIG1heSBiZSBpbmNyZWFzaW5nLiBPbmUgYXNwZWN0IG9mIGNvbmNlcm4gaXMgd2hldGhlciBnbG9iYWwgY2xpbWF0ZSBjaGFuZ2Ugd2lsbCBpbXBhY3QgZm9vZCBzZWN1cml0eS4gIA0KXA0KVGhpcyByZXBvcnQgc291Z2h0IHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGdsb2JhbCBjbGltYXRlIGNoYW5nZSBvbiBjcm9wIHlpZWxkcyBieSBhbmFseXppbmcgd2VhdGhlciBkYXRhLCBzb3liZWFuIGNyb3AgeWllbGRzLCBhbmQgc295YmVhbiBwcmljZXMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYmV0d2VlbiAyMDAwIGFuZCAyMDIyLiBQdWJsaWMgZGF0YXNldHMgZnJvbSB0aGUgVVNEQSBhbmQgTk9BQSB3ZXJlIHVzZWQgZm9yIHRoZSBhbmFseXNpcy4NClwNCg0KIyMjIENsaW1hdGUgQ2hhbmdlIHZzLiBZaWVsZHMgXA0KICANCj4gKipDbGltYXRlIGNoYW5nZSBoYXMgcmVkdWNlZCBmb29kIHNlY3VyaXR5KiogYW5kIGFmZmVjdGVkIHdhdGVyIHNlY3VyaXR5LiAuIC4gLkFsdGhvdWdoIG92ZXJhbGwgYWdyaWN1bHR1cmFsIHByb2R1Y3Rpdml0eSBoYXMgaW5jcmVhc2VkLCBjbGltYXRlIGNoYW5nZSBoYXMgc2xvd2VkIHRoaXMgZ3Jvd3RoIG92ZXIgdGhlIHBhc3QgNTAgeWVhcnMgZ2xvYmFsbHkgKG1lZGl1bSBjb25maWRlbmNlKSwgd2l0aCByZWxhdGVkICoqbmVnYXRpdmUgaW1wYWN0cyBtYWlubHkgaW4gbWlkIGFuZCBsb3cgbGF0aXR1ZGUqKiByZWdpb25zIGJ1dCAqKnBvc2l0aXZlIGltcGFjdHMgaW4gc29tZSBoaWdoIGxhdGl0dWRlKiogcmVnaW9ucyAoaGlnaCBjb25maWRlbmNlKS4gIA0KW0lQQ0NdKGh0dHBzOi8vd3d3LmlwY2MuY2gvcmVwb3J0L2FyNi9zeXIvZG93bmxvYWRzL3JlcG9ydC9JUENDX0FSNl9TWVJfU1BNLnBkZikgKGVtcGhhc2lzIGFkZGVkKQ0KXA0KDQojIyMgVXNlIENhc2VcDQoNClRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGNsaW1hdGUgY2hhbmdlIG9uIGNyb3AgeWllbGRzLCB0aGlzIHJlcG9ydCB1c2VkIHB1YmxpYyBkYXRhIGZyb20gVVNEQSBhbmQgTk9BQSB0byBhbmFseXplIHNveWJlYW4geWllbGRzIGluIHRoZSBVbml0ZWQgU3RhdGVzIGZyb20gMjAwMCB0byAyMDIyLiBTcGVjaWZpY2FsbHksIHRoaXMgcmVwb3J0IGV4YW1pbmVkOiAgXA0KDQotIFdoZXRoZXIgc295YmVhbiAqKnlpZWxkcyoqIGFyZSBjb3JyZWxhdGVkIHRvICoqdGVtcGVyYXR1cmVzKiogYW5kICoqcHJlY2lwaXRhdGlvbioqIFwNCg0KLSBXaGV0aGVyIHNveWJlYW4gKipwcmljZXMqKiBhcmUgY29ycmVsYXRlZCB0byAqKnlpZWxkcyoqIFwgIA0KDQojIyMgU295YmVhblwNCg0KPiAqKlNveWJlYW4qKiAoR2x5Y2luZSBtYXgpIGlzICoqb25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCB3b3JsZCBjcm9wcyoqIGFuZCBpcyBncm93biBmb3Igb2lsIGFuZCBwcm90ZWluLiBbRkFPXShodHRwczovL3d3dy5mYW8ub3JnL2xhbmQtd2F0ZXIvZGF0YWJhc2VzLWFuZC1zb2Z0d2FyZS9jcm9wLWluZm9ybWF0aW9uL3NveWJlYW4vZW4vKSAoZW1waGFzaXMgYWRkZWQpICBcDQoNCiMjIyMgU2V2ZW50aCBMYXJnZXN0IENyb3AgR2xvYmFsbHkgDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdC50b3AxMF9jcm9wcw0KYGBgDQoNCiMjIyMgVG9wIFNveWJlYW4gUHJvZHVjZXJzIFwNCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QudG9wNQ0KYGBgDQoNCg0KIyMjIyBVUyBTb3liZWFuIFByb2R1Y3Rpb24NCg0KPiAqKlNveWJlYW4gaXMgYSBtYWpvciBVLlMuIGNyb3AsKiogd2l0aCA4NyBtaWxsaW9uIHBsYW50ZWQgYWNyZXMgaW4gMjAyMiwgbWFraW5nIGl0IHRoZSAqKnNlY29uZC1tb3N0IHBsYW50ZWQgY3JvcCoqIGFmdGVyIGNvcm4uIFNveWJlYW4gaXMgYSBrZXkgc291cmNlIG9mIGxpdmVzdG9jayBmZWVkIGFuZCBhbHNvIGFuIGV4cG9ydCBjcm9wLiAgDQpbVVNEQV0oaHR0cHM6Ly93d3cuaXBjYy5jaC9yZXBvcnQvYXI2L3N5ci9kb3dubG9hZHMvcmVwb3J0L0lQQ0NfQVI2X1NZUl9TUE0ucGRmKSAoZW1waGFzaXMgYWRkZWQpICBcDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdC5tYXBfdG9wMTENCmBgYA0KDQojIyBNZXRob2RvbG9neSANCg0KDQpUaGUgd2VhdGhlciBhbmQgc295YmVhbiBkYXRhIGFuYWx5emVkIGZvciB0aGlzIHJlcG9ydCB3ZXJlIGNvbGxlY3RlZCBmcm9tIHRoZSBUb3AgMTEgc295YmVhbiBwcm9kdWNpbmcgU3RhdGVzLCB3aGljaCB0b2dldGhlciBwcm9kdWNlZCA4MyUgb2YgVVMgc295YmVhbiBmcm9tIDIwMDAgdG8gMjAyMi4gDQoNCkRhaWx5IHdlYXRoZXIgYW5kIG1vbnRobHkgc295YmVhbiBwcmljZSBkYXRhIHdlcmUgYW5udWFsaXplZCB0byBzeW5jaHJvbml6ZSBtZWFzdXJlbWVudCBwZXJpb2RzIHdpdGggdGhlIGFubnVhbCBzb3liZWFuIHlpZWxkIGRhdGEuICANCg0KRGF0YSBpbXB1dGF0aW9uIGFuZCBsaW5lYXIgcmVncmVzc2lvbiBhbmFseXNpcyB3ZXJlIGNhcnJpZWQgb3V0IHVzaW5nIHRoZSBSIHByb2dyYW1taW5nIGxhbmd1YWdlLg0KXA0KDQojIyMgRGF0YQ0KDQpUaGUgcHJpbWFyeSBkYXRhIHdlcmUgb2J0YWluZWQgZnJvbSBwdWJsaWMgZGF0YXNldHMgbWFkZSBhdmFpbGFibGUgYnkgVVMgZ292ZXJubWVudCBhZ2VuY2llcyAoVVNEQSBhbmQgTk9BQSkuIFRoZSBkYXRhIHdlcmUgcHJvY2Vzc2VkIHVzaW5nIFNRTCBvbiBCaWdRdWVyeSBhbmQgYW5hbHl6ZWQgd2l0aCBSIHByb2dyYW1taW5nIGxhbmd1YWdlIHVzaW5nIFJTdHVkaW8uIA0KDQojIyMjIFNvdXJjZXM6IA0KLSBOYXRpb25hbCBPY2VhbmljIGFuZCBBdG1vc3BoZXJpYyBBZG1pbmlzdHJhdGlvbiAoKipOT0FBKiopDQogIC0gR2xvYmFsIFN1cmZhY2UgU3VtbWFyeSBvZiB0aGUgRGF5IChHU09EKQ0KLSBVUyBEZXB0IG9mIEFncmljdWx0dXJlICgqKlVTREEqKik6IA0KICAtIE5hdGlvbmFsIEFncmljdWx0dXJhbCBTdGF0aXN0aWNzIFNlcnZpY2UgKE5BU1MpDQogIC0gRm9yZWlnbiBBZ3JpY3VsdHVyYWwgU2VydmljZSAvIEludCdsIFByb2R1Y3Rpb24gQXNzZXNzbWVudCBEaXZpc2lvbiAoRkFTL0lQQUQpDQotIFVOIEZvb2QgYW5kIEFncmljdWx0dXJlIE9yZ2FuaXphdGlvbiAoKipGQU8qKikNCiAgLSBGQU9TVEFUDQoNCg0KIyMjIyBDb2xsZWN0aW9uOg0KLSBTZWxlY3RlZCByZWxldmFudCBkYXRhIGZyb20gcHVibGljIGRhdGFzZXRzIHRvIGNyZWF0ZSBTUUwgdGFibGVzIGFuZCBFeGNlbCBzaGVldHMgZnJvbSBDU1YgZmlsZXMgDQogIC0gU295YmVhbiB5aWVsZCBwZXIgYWNyZSAoVVNEQS9OQVNTKQ0KICAtIFNveWJlYW4gcHJpY2VzIChVU0RBL05BU1MpDQogIC0gR2xvYmFsIGNyb3AgcHJvZHVjdGlvbiAoRkFPU1RBVCkNCi0gUXVlcmllZCBCaWdRdWVyeSBHU09EIGRhdGFzZXRzIHRvIHNlbGVjdCBkYXRhIGFuZCBjcmVhdGUgbmV3IFNRTCB0YWJsZXMNCiAgLSBOT0FBIHJlcG9ydGluZyBzdGF0aW9ucyBpbiB0aGUgVG9wIDExIHNveWJlYW4gU3RhdGVzDQogIC0gV2VhdGhlciBkYXRhICh0ZW1wcyBhbmQgcHJlY2lwKSBpbiB0aGUgVG9wIDExIHNveWJlYW4gU3RhdGVzIGZvciAyMDAwIC0gMjAyMg0KDQoNCiMjIyMgQ2xlYW5pbmc6DQotIENvbWJpbmVkIGFubnVhbCB3ZWF0aGVyIGRhdGEgZnJvbSAyMDAwIC0gMjAyMiB0YWJsZXMgdG8gY3JlYXRlIGEgc2luZ2xlIHdlYXRoZXIgdGFibGUNCi0gSm9pbmVkIFNRTCB0YWJsZXMgdG8gZmlsdGVyIHdlYXRoZXIgYW5kIHNveWJlYW4gZGF0YSB0byByZWxldmFudCBTdGF0ZXMNCi0gVmFsaWRhdGVkIGRhdGEgdHlwZXMgYW5kIHZhbHVlcyBpbiBTUUwgdGFibGVzDQotIEhhcm1vbml6ZWQgdmFyaWVkIE5VTEwgdmFsdWUgZm9ybWF0cw0KLSBVc2VkIFIgdG8gaW1wdXRlIG1pc3Npbmcgd2VhdGhlciBkYXRhIHZhbHVlcyB1c2luZyBNSUNFIG1ldGhvZA0KLSBDcmVhdGVkIFtjaGFuZ2UgbG9nXSguL2NoYW5nZV9sb2cubmIuaHRtbCkgdG8gZG9jdW1lbnQgY2xlYW5pbmcgcHJvY2VzcyBhbmQgZGF0YSB0cmFuc2Zvcm1hdGlvbnMNCi0gQ3JlYXRlZCBbbWV0YWRhdGFdKC4vbWV0YWRhdGEubmIuaHRtbCkgZmlsZSB0byBkb2N1bWVudCBkYXRhc2V0IGluZm9ybWF0aW9uDQoNCg0KIyMjIyBBbmFseXNpczoNCi0gVXNlZCBSIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIGNyZWF0ZSBkYXRhIGZyYW1lcyBmcm9tIFNRTCB0YWJsZXMNCi0gUGxvdHRlZCB0aW1lIHNlcmllcyBncmFwaCBvZiB0ZW1wZXJhdHVyZXMsIHByZWNpcGl0YXRpb24sIHlpZWxkLCBhbmQgcHJpY2UNCi0gUGVyZm9ybWVkIGJpdmFyaWF0ZSByZWdyZXNzaW9uIGFuYWx5c2lzIG9mIHdlYXRoZXIgYW5kIHNveWJlYW4gZGF0YSANCiAgLSBNYXgsIE1lYW4sIE1pbiBUZW1wZXJhdHVyZXMgdnMuIFlpZWxkDQogIC0gUHJlY2lwaXRhdGlvbiB2cy4gWWllbGQNCiAgLSBZaWVsZCB2cy4gUHJpY2UNCi0gUGxvdHRlZCBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbHMgDQotIEV2YWx1YXRlZCBSLXNxdWFyZWQgYW5kIFAgdmFsdWUgb3V0Y29tZXMgb2YgdGhlIHJlZ3Jlc3Npb24gYW5hbHlzaXMNCg0KIyMjIyBTY29wZSBhbmQgTGltaXRhdGlvbnM6DQotIERhdGEgdGFrZW4gb25seSBmcm9tIFRvcCAxMSBTb3liZWFuIFByb2R1Y2luZyBTdGF0ZXMgYmV0d2VlbiAyMDAwLTIwMjINCi0gU3ViLWFubnVhbCB3ZWF0aGVyIGRhdGEgbWVhc3VyZW1lbnRzIG1pZ2h0IG9mZmVyIGFkZGl0aW9uYWwgaW5zaWdodHMgYnV0IHdvdWxkIHJlcXVpcmUgc3RhdGlzdGljYWwgYW5hbHlzaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIHJlcG9ydC4NCi0gQW5hbHlzaXMgZGlkIG5vdCBpbmNsdWRlIG90aGVyIHJlbGV2YW50IGZhY3RvcnMsIGluY2x1ZGluZyBpcnJpZ2F0aW9uLCBwbGFudGluZyBkYXRlcywgc2VlZCB0eXBlcywgZmVydGlsaXplciBhcHBsaWNhdGlvbnMsIGhlcmJpY2lkZXMgJiBwZXN0aWNpZGVzLCBldGMuDQoNCg0KDQojIyBBbmFseXNpcw0KDQotIFRoaXMgcmVwb3J0ICoqYWdncmVnYXRlZCoqIGFuZCAqKmF2ZXJhZ2VkKiogdGhlIGRhdGEgZm9yIHdlYXRoZXIsIHNveWJlYW4geWllbGRzLCBhbmQgc295YmVhbiBwcmljZXMgZnJvbSAyMDAwIHRvIDIwMjIgZm9yIHRoZSBUb3AgMTEgU3RhdGVzLCB3aGljaCBwcm9kdWNlZCA4MyUgb2YgVVMgc295YmVhbnMuIFwNCg0KLSBEYWlseSB3ZWF0aGVyIGFuZCBtb250aGx5IHByaWNlIGRhdGEgd2VyZSBhbm51YWxpemVkIHRvIHN5bmNocm9uaXplIG1lYXN1cmVtZW50IHBlcmlvZHMgd2l0aCBhbm51YWwgeWllbGQgbWVhc3VyZW1lbnRzLiANCg0KLSBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyB3ZXJlIGFuYWx5emVkOg0KICAtIE1heGltdW0gRGFpbHkgVGVtcGVyYXR1cmUNCiAgLSBNZWRpYW4gRGFpbHkgVGVtcGVyYXR1cmUNCiAgLSBNaW5pbXVtIERhaWx5IFRlbXBlcmF0dXJlDQogIC0gRGFpbHkgUHJlY2lwaXRhdGlvbg0KICAtIE1vbnRobHkgU295YmVhbiBQcmljZSAoVVNEL0J1c2hlbCkNCiAgLSBBbm51YWwgU295YmVhbiBZaWVsZCAoQnVzaGVscy9BY3JlKQ0KXA0KDQojIyMgVGltZSBTZXJpZXMgb2YgV2VhdGhlciwgWWllbGQsIGFuZCBQcmljZQ0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90LmNvbWJpbmVkX2xpbmVzDQpgYGANCg0KIyMjIFN0YXRpc3RpY2FsIFN1bW1hcnkNCnxJbmRlcGVuZGVudHxEZXBlbmRlbnR8U2FtcGxlfFBlYXJzb258Ul4yfFAtVmFsdWV8DQp8Oi18Oi18Oi06fDotOnw6LTp8Oi06fA0KfFByZWNpcHxZaWVsZHwyM3wuODJ8LjY3fC4wMDF8DQp8WWllbGR8UHJpY2V8MjN8LjQyfC4xN3wuMDV8DQp8TWF4IFRlbXB8WWllbGR8MjN8LjA1fC4wMDJ8LjgzfA0KfE1lYW4gVGVtcHxZaWVsZHwyM3wuMDJ8LjAwMDR8LjkzfA0KfE1pbiBUZW1wfFlpZWxkfDIzfC4wMXwuMDAwMnwuOTV8DQoNCg0KLSBQcmVjaXBpdGF0aW9uIGlzIHN0cm9uZ2x5IGNvcnJlbGF0ZWQgd2l0aCBZaWVsZCBhdCBhIC4wMDEgbGV2ZWwgb2Ygc3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlLg0KLSBZaWVsZCBpcyBtb2RlcmF0ZWx5IGNvcnJlbGF0ZWQgd2l0aCBQcmljZSBhdCBhIC4wNSBsZXZlbCBvZiBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2UuDQotIE1heCwgTWVhbiwgYW5kIE1pbiBUZW1wcyBhcmUgTk9UIGNvcnJlbGF0ZWQgd2l0aCBZaWVsZC4NCg0KDQojIyMgUHJlY2lwaXRhdGlvbiB2cyBZaWVsZA0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QuYXZnX3ByZWMuc295X3lpZWxkDQpgYGANCg0KIyMjIFlpZWxkIHZzIFByaWNlDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3Quc295X3lpZWxkLnNveV9wcmljZQ0KYGBgDQoNCiMjIyBUZW1wcyB2cy4gWWllbGQNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdC5tYXhfdC5zb3lfeWllbGQNCnBsb3QubWVhbl90LnNveV95aWVsZA0KcGxvdC5taW5fdC5zb3lfeWllbGQNCmBgYA0KDQojIyBDb25jbHVzaW9ucw0KDQpUaGUgcmVncmVzc2lvbiBhbmFseXNpcyBvZiB0aGUgd2VhdGhlciwgeWllbGQsIGFuZCBwcmljZSBkYXRhIHByb3ZpZGVzICoqdGhyZWUga2V5IGZpbmRpbmdzKiogd2l0aCByZXNwZWN0IHRvIHRoZSBpbXBhY3Qgb2YgY2xpbWF0ZSBjaGFuZ2Ugb24gc295YmVhbiB5aWVsZHMgYW5kIHByaWNlcyBpbiB0aGUgVG9wIDExIFNveWJlYW4gUHJvZHVjaW5nIFN0YXRlcyBiZXR3ZWVuIDIwMDAgYW5kIDIwMjIuDQpcDQoNCg0KIyMjIFN0YXRpc3RpY2FsbHkgU2lnbmlmaWNhbnQgRmluZGluZ3MNCg0KMS4gQW5udWFsICoqcHJlY2lwaXRhdGlvbioqIGlzICoqc3Ryb25nbHkgY29ycmVsYXRlZCoqIHdpdGggYW5udWFsIHNveWJlYW4gKip5aWVsZHMqKiBhdCBhICoqLjAwMSoqIGxldmVsIG9mIHNpZ25pZmljYW5jZSBhbmQgZXhwbGFpbnMgKio2NyUqKiBvZiB0aGUgdmFyaWF0aW9uIGluIGFubnVhbCB5aWVsZHMuDQoNCjIuIEFubnVhbCBzb3liZWFuICoqeWllbGRzKiogYXJlICoqbW9kZXJhdGVseSBjb3JyZWxhdGVkKiogdG8gYW5udWFsIHNveWJlYW4gKipwcmljZXMqKiBhdCBhICoqLjA1KiogbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlIGJ1dCBvbmx5IGV4cGxhaW4gKioxNyUqKiBvZiB2YXJpYXRpb24gaW4gYW5udWFsIHByaWNlcy4NClwNCg0KIyMjIFN0YXRpc3RpY2FsbHkgSW5zaWduaWZpY2FudCBGaW5kaW5ncw0KDQozLiBUaGVyZSBpcyAqKm5vIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQqKiBjb3JyZWxhdGlvbiBiZXR3ZWVuIGFubnVhbCBNYXgsIE1lYW4sIGFuZCBNaW4gKip0ZW1wZXJhdHVyZXMqKiBhbmQgc295YmVhbiAqKnlpZWxkcyoqLiBJbmRlZWQsIHRoZSBjb3JyZWxhdGlvbnMgYmV0d2VlbmsgdGhlIHRlbXBlcmF0dXJlcyBhbmQgeWllbGQgYXJlICoqbmVhcmx5IHplcm8qKi4gIA0KDQoNCj4qKipXaXRoIHJlc3BlY3QgdG8gdGhlIGltcGFjdCBvZiB3ZWF0aGVyIG9uIHNveWJlYW4geWllbGRzIGluIHRoZSBNaWR3ZXN0IFVuaXRlZCBTdGF0ZXMgYmV0d2VlbiAyMDAwLTIwMjIsIHByZWNpcGl0YXRpb24gbGV2ZWxzIGV4cGxhaW4gNjclIG9mIHlpZWxkIHZhcmlhdGlvbiwgd2hpbGUgdGVtcGVyYXR1cmVzIGhhZCBubyBjb3JyZWxhdGlvbiB0byB5aWVsZHMuKioqDQoNCiMjIyBBZGRpdGlvbmFsIEFuYWx5c2lzDQoNCkdpdmVuIGFkZGl0aW9uYWwgdGltZSBhbmQgcmVzb3VyY2VzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIHN0YXRpc3RpY2FsIG1ldGhvZG9sb2d5LCBpdCB3b3VsZCBiZSB2YWx1YWJsZSB0byBhbmFseXplIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBub3QgaW5jbHVkZWQgaW4gdGhpcyByZXBvcnQ6DQoNCi0gU3ViLWFubnVhbCBtZWFzdXJlbWVudCBwZXJpb2RzIGZvciB0ZW1wZXJhdHVyZXMgYW5kIHByZWNpcGl0YXRpb24NCi0gUGxhbnRpbmcgZGF0ZXMNCi0gSXJyaWdhdGlvbiBzdGF0dXMNCi0gU2VlZCB2YXJpZXRpZXMNCi0gRmVydGlsaXplciwgcGVzdGljaWRlLCAmIGhlcmJpY2lkZSBhcHBsaWNhdGlvbnMNCi0gQWRkaXRpb25hbCBjcm9wcw0KLSBBZGRpdGlvbmFsIGdlb2dyYXBoaWMgcmVnaW9ucyBvZiB0aGUgd29ybGQNCg0KDQojIyBSZWZlcmVuY2VzDQoNCiMjIyBTb3liZWFuIERhdGENCi0gVVNEQQ0KICAtIE5hdGlvbmFsIEFncmljdWx0dXJhbCBTdGF0aXN0aWNzIFNlcnZpY2UgWyhOQVNTKV0oaHR0cHM6Ly9xdWlja3N0YXRzLm5hc3MudXNkYS5nb3YvcmVzdWx0cy8xN0VGRDk3My1BNUE5LTNERTUtOEIzNy02QTAzOTIyODdGRUMpDQogIC0gSW50ZXJuYXRpb25hbCBQcm9kdWN0aW9uIEFzc2Vzc21lbnQgRGl2aXNpb24gWyhJUEFEKV0oaHR0cHM6Ly9pcGFkLmZhcy51c2RhLmdvdi9jcm9wZXhwbG9yZXIvY3JvcHZpZXcvY29tbW9kaXR5Vmlldy5hc3B4P2Nyb3BpZD0yMjIyMDAwJnNlbF95ZWFyPTIwMjImcmFua2J5PVByb2R1Y3Rpb24pDQotIEZvb2QgYW5kIEFncmljdWx0dXJlIE9yZ2FuaXphdGlvbiBbKEZBTyldKGh0dHBzOi8vd3d3LmZhby5vcmcvZmFvc3RhdC9lbi8jZGF0YS9RQ0wpDQoNCiMjIyBXZWF0aGVyIERhdGENCi0gTk9BQSBHbG9iYWwgU3VyZmFjZSBTdW1tYXJ5IG9mIHRoZSBEYXkgLSBHU09EIG9uIEdvb2dsZSBDbG91ZCBCaWdRdWVyeSAgDQoNCg0KIyMjIERhdGEgQ2xlYW5pbmcgUHJvY2Vzc2VzDQotIFtNZXRhZGF0YV0oLi9tZXRhZGF0YS5uYi5odG1sKSBmaWxlDQotIFtDaGFuZ2VdKC4vY2hhbmdlX2xvZy5uYi5odG1sKSBsb2cNCg0KDQo=