Introduction

This is a protype forecast report. The goal is to assist users in assessing how an earth observation product can be used for making agricultural outlooks.

The report includes the following key components:

  1. Mean Area, Production, and Yield over the years 1994 to 2014 -This provides context for interpreting the grain data
  2. Cropped Area Masks-shows three maps that illustrate how a crop mask in this analysis. The first map shows the crop mask: A 0.05 degree grid showing the percent of each pixel that is considered cropped. The second map shows the percent of the area of each disrict that includes pixels with at least some cropped area. Finally, we also show what districts are included in the analysis if we limit to the models to districts where at least 15% or more of the disrict area is cropped.
  3. Mean, Current Value, and Current Anomalie for the current month of whichever EO variable is being used for prediction (in this case CHIRPS) -
  4. Historical Out of Sample Forecast Error for the same product and statistical model in a similar set of months. In this case we look at what the past accuracy of a yield forecast (using CHIRPS) was in March, April, and May. Note, this is averaged over the 2000-2014 period. I would also like to compare this with analog years.
  5. Yield Forecast, (based on May 2020 CHIRPS ) expressed as percent of mean yield for a specific district over the period 1994 - 2014.

Summary Figures

Mean Area, Production, and Yields for the years 1994 to 2014.



Cropped Areas

  • Percent of Pixel Area that is Cropped is an 0.05 degree grid showing the percent of each pixel that is considered cropped and is based (resampled from) on the IIASA-IFPRI cropland percentage map (Fritz et al., 2015)

  • Percent of District Area Containing Pixels that Are Cropped is the percent of each district that contain pixels where >0% of the pixel area is cropped (anything greater than 0 in the previous map).

  • Districts where 15% or more of the Area contain Cropped Pixels shows districts from the previous figure where value is greater than or equal to 15%. Districts that meet this criteria are used for the forecast analysis.




Mean, Current, and Anomalie for May 2020 CHIRPS

Mean and Anomalie are based on the years 1994 to 2020.



Out of Sample Forecast Error for CHIRPS March, April, and May Rainfall

Mean Absolute Percent Error (MAPE) calculated based on out of sample seasonfal forecasts conducted over 2001-2014. Lower scores indicate greater accuracy. Forecasts are based on ageneralized additive model (GAM) model type.



Yield Forecast based on May 2020 CHIRPS

Forecast values expressed as percent of Mean Yields over the Years 1994 - 2014. Model forecasts are a generalized additive model (GAM)1. The figure shows predicted percent of mean (center) as well as lower (left) and higher (right) predicted percent of mean intervals. NOTE Percent of mean is based on district specific (not national) mean yields.



Table of Forecast Values

This table shows the forecast percentage of mean values in the above table along with the mean yield values from the first figure2. ***

Table of Mean Yields and Predicted Percent of Mean Values
District Mean Yield % of mean (low) % of mean % of mean (high)
Baringo 1.8247619 1.07 1.14 1.21
Bugoma 2.7185714 1.05 1.09 1.14
Busia 1.3114286 1.10 1.20 1.30
Elgeyo-Marakwet 2.4880952 1.05 1.11 1.16
Embu 0.9961905 1.22 1.36 1.50
Kajiado 1.2823810 1.08 1.18 1.27
Kakamega 2.1857143 1.08 1.14 1.20
Kericho 2.6295238 1.06 1.11 1.16
Kiambu 1.0404762 1.19 1.32 1.45
Kilifi 0.8119048 1.12 1.27 1.43
Kirinyaga 1.1633333 1.26 1.39 1.51
Kisii 2.5090476 1.05 1.10 1.15
Kisumu 1.7838095 1.07 1.14 1.21
Kitui 0.4938095 1.18 1.44 1.69
Kwale 0.9357143 1.22 1.37 1.51
Laikipia 1.6352381 1.09 1.17 1.25
Lamu 1.0966667 1.03 1.15 1.26
Machakos 0.4890476 1.22 1.48 1.73
Meru 1.0830000 1.22 1.35 1.48
Mombasa 0.8385714 1.47 1.66 1.85
Muranga 0.9247619 1.35 1.52 1.68
Nakuru 2.0585714 1.08 1.14 1.20
Nandi 2.7947619 1.05 1.09 1.14
Narok 2.1376190 1.07 1.13 1.19
Nyandaura 1.6776190 1.12 1.20 1.28
Nyeri 1.0257143 1.30 1.44 1.59
Samburu 1.4385714 1.09 1.18 1.27
Siaya 1.3728571 1.06 1.15 1.24
South Nyanza 1.5338095 1.05 1.13 1.21
Taita Taveta 0.8733333 1.09 1.23 1.37
Trans-Nzoia 3.5104762 1.04 1.07 1.11
Uasin-Gishu 3.3176190 1.03 1.07 1.11
West-Pokot 1.9666667 1.05 1.12 1.18




  1. Future version will show mean/median results from an ensemble of models

  2. To keep these reports simple, printable, and portable I may exclude the tables and maybe just have a link to a zip file that contains the shape file and/or csv values.

LS0tCnRpdGxlOiAiRm9yZWNhc3QgUmVwb3J0IFRlbXBsYXRlIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKZmlnX3dpZHRoOiA3CmZpZ19oZWlnaHQ6IDYKZmlnX2NhcHRpb246IHRydWUKLS0tCgpgYGB7cixldmFsPVRSVUUsZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9CiMtLS1TZXQgUHJvamVjdCBEaXJlY3RvcmllcwpkaXJCYXNlPC0nL1ZvbHVtZXMvR29vZ2xlRHJpdmUvTXkgRHJpdmUvJwoKIy1Qcm9qZWN0IERpcmVjdG9yaWVzCmRpclByb2o8LXBhc3RlMChkaXJCYXNlLCdtYWl6ZV9mb3JlY2FzdC8nKSAjcHJvamVjdCBkaXJlY3RvcnkKZGlyUHJvajI8LXBhc3RlMChkaXJCYXNlLCdtYWl6ZV9mb3JlY2FzdF9yZXBvcnRpbmcvJykKZGlyUmRhdDwtcGFzdGUwKGRpclByb2osJ21haXplX2ZvcmVjYXN0X3JkYXRhLycpCmRpclJkYXQyPC1wYXN0ZTAoZGlyUHJvajIsJ2ZvcmVjYXN0X3JlcG9ydGluZ19yZGF0YS8nKQpkaXJEYXRfcmF3PC1wYXN0ZTAoZGlyUHJvaiwnbWFpemVfZm9yZWNhc3RfcmF3ZGF0YS8nKQpkaXJTaGFwZUZpbGVzPC1wYXN0ZTAoZGlyUHJvaiwnbWFpemVfZm9yZWNhc3Rfc2hhcGVmaWxlcy8nKQpkaXJTcGRhdDwtcGFzdGUwKGRpckJhc2UsJ1NwYXRpYWwvJykKZGlyTWFzazwtcGFzdGUwKGRpclByb2osJ21haXplX2ZvcmVjYXN0X2Nyb3BtYXNrLycpCgoKbGlicmFyeShyZXNoYXBlMikKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocmFzdGVyKQpsaWJyYXJ5KHJnZGFsKQpsaWJyYXJ5KHNmKQpsaWJyYXJ5KGNhcikKbGlicmFyeShzY2FsZXMpCmxpYnJhcnkoa2FibGVFeHRyYSkKCmxpYnJhcnkoY293cGxvdCkgI21hc2tzIGdnc2F2ZQpsaWJyYXJ5KHZpcmlkaXMpCgoKIy0tTG9hZCBFeGlzdGluZyBQbG90cwpzZXR3ZChkaXJSZGF0MikKbG9hZCgnMjBfbWFpemVfZm9yZWNhc3RfcmVwb3J0aW5nX21haW5fcGxvdHMuUmRhdGEnKQpgYGAKIyBJbnRyb2R1Y3Rpb24KVGhpcyBpcyBhIHByb3R5cGUgZm9yZWNhc3QgcmVwb3J0LiAqKlRoZSBnb2FsIGlzIHRvIGFzc2lzdCB1c2VycyBpbiBhc3Nlc3NpbmcgaG93IGFuIGVhcnRoIG9ic2VydmF0aW9uIHByb2R1Y3QgY2FuIGJlIHVzZWQgZm9yIG1ha2luZyBhZ3JpY3VsdHVyYWwgb3V0bG9va3MuKioKClRoZSByZXBvcnQgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tcG9uZW50czoKCjEuICoqKk1lYW4gQXJlYSwgUHJvZHVjdGlvbiwgYW5kIFlpZWxkIG92ZXIgdGhlIHllYXJzIGByIGxpc192YXJzX3JlcG9ydCRtaW5fYWdgIHRvIGByIGxpc192YXJzX3JlcG9ydCRtYXhfYWdgKioqIC1UaGlzIHByb3ZpZGVzIGNvbnRleHQgZm9yIGludGVycHJldGluZyB0aGUgZ3JhaW4gZGF0YQoyLiAqKipDcm9wcGVkIEFyZWEgTWFza3MqKiotc2hvd3MgdGhyZWUgbWFwcyB0aGF0IGlsbHVzdHJhdGUgaG93IGEgY3JvcCBtYXNrIGluIHRoaXMgYW5hbHlzaXMuIFRoZSBmaXJzdCBtYXAgc2hvd3MgdGhlIGNyb3AgbWFzazogQSAwLjA1IGRlZ3JlZSBncmlkIHNob3dpbmcgdGhlIHBlcmNlbnQgb2YgZWFjaCBwaXhlbCB0aGF0IGlzIGNvbnNpZGVyZWQgY3JvcHBlZC4gVGhlIHNlY29uZCBtYXAgc2hvd3MgdGhlIHBlcmNlbnQgb2YgdGhlIGFyZWEgb2YgZWFjaCBkaXNyaWN0IHRoYXQgaW5jbHVkZXMgcGl4ZWxzIHdpdGggYXQgbGVhc3Qgc29tZSBjcm9wcGVkIGFyZWEuIEZpbmFsbHksIHdlIGFsc28gc2hvdyB3aGF0IGRpc3RyaWN0cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGFuYWx5c2lzIGlmIHdlIGxpbWl0IHRvIHRoZSBtb2RlbHMgdG8gZGlzdHJpY3RzIHdoZXJlIGF0IGxlYXN0IGByIHBhc3RlMChsaXNfdmFyc19yZXBvcnQkY3JvcF9hcmVhKjEwMCwnJScpYCBvciBtb3JlIG9mIHRoZSBkaXNyaWN0IGFyZWEgaXMgY3JvcHBlZC4gCjMuICoqKk1lYW4sIEN1cnJlbnQgVmFsdWUsIGFuZCBDdXJyZW50IEFub21hbGllKioqIGZvciB0aGUgY3VycmVudCBtb250aCBvZiB3aGljaGV2ZXIgRU8gdmFyaWFibGUgaXMgYmVpbmcgdXNlZCBmb3IgcHJlZGljdGlvbiAoaW4gdGhpcyBjYXNlIGByIGxpc192YXJzX3JlcG9ydCR2YXJfbmFtZWApIC0gCjQuICoqKkhpc3RvcmljYWwgT3V0IG9mIFNhbXBsZSBGb3JlY2FzdCBFcnJvcioqKiBmb3IgdGhlIHNhbWUgcHJvZHVjdCBhbmQgc3RhdGlzdGljYWwgbW9kZWwgaW4gYSBzaW1pbGFyIHNldCBvZiBtb250aHMuIEluIHRoaXMgY2FzZSB3ZSBsb29rIGF0IHdoYXQgdGhlIHBhc3QgYWNjdXJhY3kgb2YgYSB5aWVsZCBmb3JlY2FzdCAodXNpbmcgYHIgbGlzX3ZhcnNfcmVwb3J0JHZhcl9uYW1lYCkgd2FzIGluIE1hcmNoLCBBcHJpbCwgYW5kIE1heS4gIE5vdGUsIHRoaXMgaXMgYXZlcmFnZWQgb3ZlciB0aGUgMjAwMC0yMDE0IHBlcmlvZC4gSSB3b3VsZCBhbHNvIGxpa2UgdG8gY29tcGFyZSB0aGlzIHdpdGggYW5hbG9nIHllYXJzLiAKNS4gKioqWWllbGQgRm9yZWNhc3QqKiosIChiYXNlZCBvbiAqKipgciBsaXNfdmFyc19yZXBvcnQkbW9udGhfbmFtZWAgYHIgbGlzX3ZhcnNfcmVwb3J0JG1heF9ldmFyX3llYXJgIGByIGxpc192YXJzX3JlcG9ydCR2YXJfbmFtZWAqKiogKSBleHByZXNzZWQgYXMgKipwZXJjZW50IG9mIG1lYW4geWllbGQgZm9yIGEgc3BlY2lmaWMgZGlzdHJpY3QqKiBvdmVyIHRoZSBwZXJpb2QgYHIgbGlzX3ZhcnNfcmVwb3J0JG1pbl9hZ2AgLSBgciBsaXNfdmFyc19yZXBvcnQkbWF4X2FnYC4KPCEtLSA1LiAqKipCZXN0IFByb2R1Y3QgZm9yIGEgR2l2ZW4gTW9udGgqKiouVGhpcyBzaG93cyBoaXN0b3JpY2FsbHkgd2hhdCB0aGUgJ2Jlc3QnIHByb2R1Y3QgaXMgZm9yIGEgZ2l2ZW4gbW9udGggb3IgeWVhci4gLS0+CgojIFN1bW1hcnkgRmlndXJlcwoKIyMjIyBNZWFuIEFyZWEsIFByb2R1Y3Rpb24sIGFuZCBZaWVsZHMgZm9yIHRoZSB5ZWFycyBgciBsaXNfdmFyc19yZXBvcnQkbWluX2FnYCB0byBgciBsaXNfdmFyc19yZXBvcnQkbWF4X2FnYC4KCioqKgpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0KcDFhbGwKYGBgCioqKgoKIyMjIyBDcm9wcGVkIEFyZWFzCiogICoqKlBlcmNlbnQgb2YgUGl4ZWwgQXJlYSB0aGF0IGlzIENyb3BwZWQqKiogIGlzIGFuIDAuMDUgZGVncmVlIGdyaWQgc2hvd2luZyB0aGUgcGVyY2VudCBvZiBlYWNoIHBpeGVsIHRoYXQgaXMgY29uc2lkZXJlZCBjcm9wcGVkIGFuZCBpcyBiYXNlZCAocmVzYW1wbGVkIGZyb20pIG9uIHRoZSBJSUFTQS1JRlBSSSBjcm9wbGFuZCBwZXJjZW50YWdlIG1hcCBbKEZyaXR6IGV0IGFsLiwgMjAxNSldKGh0dHBzOi8vb25saW5lbGlicmFyeS53aWxleS5jb20vZG9pL2Ficy8xMC4xMTExL2djYi4xMjgzOCkgCgoqICoqKlBlcmNlbnQgb2YgRGlzdHJpY3QgQXJlYSBDb250YWluaW5nIFBpeGVscyB0aGF0IEFyZSBDcm9wcGVkKioqIGlzIHRoZSBwZXJjZW50IG9mIGVhY2ggZGlzdHJpY3QgdGhhdCBjb250YWluIHBpeGVscyB3aGVyZSA+MCUgb2YgdGhlIHBpeGVsIGFyZWEgaXMgY3JvcHBlZCAoYW55dGhpbmcgZ3JlYXRlciB0aGFuIDAgaW4gdGhlIHByZXZpb3VzIG1hcCkuCgoqICoqKkRpc3RyaWN0cyB3aGVyZSBgciBwYXN0ZTAobGlzX3ZhcnNfcmVwb3J0JGNyb3BfYXJlYSoxMDAsJyUnKWAgb3IgbW9yZSBvZiB0aGUgQXJlYSBjb250YWluIENyb3BwZWQgUGl4ZWxzKioqIHNob3dzIGRpc3RyaWN0cyBmcm9tIHRoZSBwcmV2aW91cyBmaWd1cmUgd2hlcmUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGByIHBhc3RlMChsaXNfdmFyc19yZXBvcnQkY3JvcF9hcmVhKjEwMCwnJScpYC4gIERpc3RyaWN0cyB0aGF0IG1lZXQgdGhpcyBjcml0ZXJpYSBhcmUgdXNlZCBmb3IgdGhlIGZvcmVjYXN0IGFuYWx5c2lzLiAKCioqKgpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0KcDBjYWxsCmBgYAoqKioKYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9CnAwYzIKYGBgCioqKgoKIyMjIyBNZWFuLCBDdXJyZW50LCBhbmQgQW5vbWFsaWUgZm9yIGByIGxpc192YXJzX3JlcG9ydCRtb250aF9uYW1lYCBgciBsaXNfdmFyc19yZXBvcnQkbWF4X2V2YXJfeWVhcmAgYHIgbGlzX3ZhcnNfcmVwb3J0JHZhcl9uYW1lYCAKCk1lYW4gYW5kIEFub21hbGllIGFyZSBiYXNlZCBvbiB0aGUgeWVhcnMgYHIgbGlzX3ZhcnNfcmVwb3J0JG1pbl9hZ2AgdG8gYHIgbGlzX3ZhcnNfcmVwb3J0JG1heF9ldmFyX3llYXJgLgoKKioqCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQpwMmFsbApgYGAKKioqCgojIyMjIE91dCBvZiBTYW1wbGUgRm9yZWNhc3QgRXJyb3IgZm9yIENISVJQUyBNYXJjaCwgQXByaWwsIGFuZCBNYXkgUmFpbmZhbGwKTWVhbiBBYnNvbHV0ZSBQZXJjZW50IEVycm9yIChNQVBFKSBjYWxjdWxhdGVkIGJhc2VkIG9uIG91dCBvZiBzYW1wbGUgc2Vhc29uZmFsIGZvcmVjYXN0cyBjb25kdWN0ZWQgb3ZlciAyMDAxLTIwMTQuICoqTG93ZXIgc2NvcmVzIGluZGljYXRlIGdyZWF0ZXIgYWNjdXJhY3kqKi4gRm9yZWNhc3RzIGFyZSBiYXNlZCBvbiBhZ2VuZXJhbGl6ZWQgYWRkaXRpdmUgbW9kZWwgKEdBTSkgbW9kZWwgdHlwZS4gCgoqKioKYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9CiNNT0RTUEVDXltNb2RlbCB0eXBlKHMpIHRvIGJlIGZpbGxlZCBpbiBkeW5hbWljYWxseS0gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGZpbGwgaW4gbW9kZWwgdHlwZQpwNApgYGAKKioqCgoKIyBZaWVsZCBGb3JlY2FzdCBiYXNlZCBvbiBgciBsaXNfdmFyc19yZXBvcnQkbW9udGhfbmFtZWAgYHIgbGlzX3ZhcnNfcmVwb3J0JG1heF9ldmFyX3llYXJgIGByIGxpc192YXJzX3JlcG9ydCR2YXJfbmFtZWAgCkZvcmVjYXN0IHZhbHVlcyBleHByZXNzZWQgYXMgcGVyY2VudCBvZiBNZWFuIFlpZWxkcyBvdmVyIHRoZSBZZWFycyBgciBsaXNfdmFyc19yZXBvcnQkbWluX2FnYCAtIGByIGxpc192YXJzX3JlcG9ydCRtYXhfYWdgLiAKTW9kZWwgZm9yZWNhc3RzIGFyZSBhIGdlbmVyYWxpemVkIGFkZGl0aXZlIG1vZGVsIChHQU0pXltGdXR1cmUgdmVyc2lvbiB3aWxsIHNob3cgbWVhbi9tZWRpYW4gcmVzdWx0cyBmcm9tIGFuIGVuc2VtYmxlIG9mIG1vZGVsc10uIFRoZSBmaWd1cmUgc2hvd3MgKioqcHJlZGljdGVkIHBlcmNlbnQgb2YgbWVhbioqKiAoY2VudGVyKSBhcyB3ZWxsIGFzIGxvd2VyIChsZWZ0KSBhbmQgaGlnaGVyIChyaWdodCkgKioqcHJlZGljdGVkIHBlcmNlbnQgb2YgbWVhbioqKiBpbnRlcnZhbHMuICoqKk5PVEUqKiogUGVyY2VudCBvZiBtZWFuIGlzIGJhc2VkIG9uICoqKmRpc3RyaWN0IHNwZWNpZmljIChub3QgbmF0aW9uYWwpKioqIG1lYW4geWllbGRzLgoKKioqCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQpwMwpgYGAKKioqCiMjIyMgVGFibGUgb2YgRm9yZWNhc3QgVmFsdWVzClRoaXMgdGFibGUgc2hvd3MgdGhlIGZvcmVjYXN0IHBlcmNlbnRhZ2Ugb2YgbWVhbiB2YWx1ZXMgaW4gdGhlIGFib3ZlIHRhYmxlIGFsb25nIHdpdGggdGhlIG1lYW4geWllbGQgdmFsdWVzIGZyb20gdGhlIGZpcnN0IGZpZ3VyZV5bVG8ga2VlcCB0aGVzZSByZXBvcnRzIHNpbXBsZSwgcHJpbnRhYmxlLCBhbmQgcG9ydGFibGUgSSBtYXkgZXhjbHVkZSB0aGUgdGFibGVzIGFuZCBtYXliZSBqdXN0IGhhdmUgYSBsaW5rIHRvIGEgemlwIGZpbGUgdGhhdCBjb250YWlucyB0aGUgc2hhcGUgZmlsZSBhbmQvb3IgY3N2IHZhbHVlcy5dLiAKKioqCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQp0MTwta25pdHI6OmthYmxlKGR0YWIsIGNhcHRpb24gPSAnVGFibGUgb2YgTWVhbiBZaWVsZHMgYW5kIFByZWRpY3RlZCBQZXJjZW50IG9mIE1lYW4gVmFsdWVzJykKdDE8LWthYmxlX3N0eWxpbmcodDEsYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwiY29uZGVuc2VkIikpCnNjcm9sbF9ib3godDEsIGhlaWdodCA9ICczMDBweCcsIHdpZHRoID0gJzEwMCUnLAogIGJveF9jc3MgPSAiYm9yZGVyOiAxcHggc29saWQgI2RkZDsgcGFkZGluZzogMXB4OyAiLCBleHRyYV9jc3MgPSBOVUxMLAogIGZpeGVkX3RoZWFkID0gVFJVRSkKCgpgYGAKKioqCgo8IS0tICMgQmVzdCBQcm9kdWN0IGZvciBFYWNoIE1vbnRoClRoaXMgbWFwIHNob3dzIHRoZSB3aGljaCBwcm9kdWN0IGNhbiBwcm92aWRlIHRoZSBtb3N0IGFjY3VyYXRlIGZvcmVjYXN0IChhbW9uZyBhIHJhbmdlIG9mIHN0YXRpc3RpY2FsIG1vZGVscykgZm9yIGEgZ2l2ZW4gbW9udGggYW5kIHJlZ2lvbi4gQXJlYXMgbWFya2VkIGFzICdub25lJyBpbmRpY2F0IHRoYXQgZWl0aGVyIHRoZSBwcmVkaWN0aW9uIGVycm9yIHdhcyBncmVhdGVyIHRoYW4gNTAlIG9yIGNvdWxkIG5vdCBvdXRwZXJmb3JtIGEgYmFzZWxpbmUgbW92aW5nIGF2ZXJhZ2UgbW9kZWxeW1RoaXMgbWF5IG5vdCBiZSBpbiB1cGNvbWluZyByZXBvcnRzIGFzIEkgbWF5IHVwZGF0ZSBpdF0uIC0tPgoKKioqCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQojcDUKYGBgCioqKg==