Submission Graph

As word count goes up, on average, sales will improve.

Appendix

For more data exploration and my rough work, I have attached my experimentation notebook. This file is downloadable to explore the current code being utilizing.
All Materials below have been attached to submission separately as well. Attached will be:
  • “Final Submission Graph.png”–the first graph on this document
  • “Hand_Drawn_Draft_Edited.png”–the second graph on this document, which is an image
  • “Scatter Plot Graph.png”–the third graph on this document
  • “Facet Graph.png”–the fourth graph on this document
The bottom of the document is the full raw data table for your personal exploration

Handdrawn Rough Draft

Due to problems with the data, it was not possible to make a comparision between Taylor Swift and Beyonce sales by avgerage word count per song, in each album. Thus instead of faceting by artist, I faceted by country.

Individual Graphs

The submission graph is comrpised of two ggplot graphs appended toegther by GridExtra and arrange.

Scatterplot Graph

The scatter plot below shows the sales per ablum across each country on recond. Note that several countries were removed from the final graph due to a poor sample size of ablum sales.

Facet Graph

Unfortuantely, not all countries possessed a large enough sample size album sales. Countries left out include Australia, Canada, France and Japan. Thus to compare the largest sample sizes, I limited my dataset to the United Kingdom, United States and the aggregate World Wide Sales.

Raw Data Table

The graph was developed from two different data sets, using the join function. From the swift_lyrics dataframe, each word was counted through data manipulation. Then this dataframe was agumeneted using the group_by function to find standard measures. Finally the join function was implimented to connect the sales dataframe to the swift_data dataframe, developed from the initial swift_lyrics datatrfame. Please download this file to review the full code. Or select the “show option” in the dropdown menue found in thh upper right hand corner.
country Album release_year avg_sales avg_word med_sales med_word max_word min_word total_sales total_word facets
AUS Fearless 2008 500000 1633.444 500000 1625.5 2048 1077 9000000 29402 Australia Sales
CAN 1989 2014 542000 2143.267 542000 1962.0 2985 1546 8130000 32149 Canada Sales
CAN Lover 2019 61000 1847.611 61000 1807.5 2663 781 1098000 33257 Canada Sales
CAN Reputation 2017 80000 NA 80000 NA NA NA 80000 NA Canada Sales
FRA 1989 2014 70000 2143.267 70000 1962.0 2985 1546 1050000 32149 France Sales
FRA Lover 2019 5700 1847.611 5700 1807.5 2663 781 102600 33257 France Sales
FRA Reputation 2017 13000 NA 13000 NA NA NA 13000 NA France Sales
JPN 1989 2014 268200 2143.267 268200 1962.0 2985 1546 4023000 32149 Japan Sales
JPN Lover 2019 32601 1847.611 32601 1807.5 2663 781 586818 33257 Japan Sales
JPN Red 2012 256000 1728.474 256000 1742.0 2280 993 4864000 32841 Japan Sales
UK 1989 2014 1250000 2143.267 1250000 1962.0 2985 1546 18750000 32149 United Kindom Sales
UK Fearless 2008 609000 1633.444 609000 1625.5 2048 1077 10962000 29402 United Kindom Sales
UK Lover 2019 221654 1847.611 221654 1807.5 2663 781 3989772 33257 United Kindom Sales
UK Red 2012 693000 1728.474 693000 1742.0 2280 993 13167000 32841 United Kindom Sales
UK Reputation 2017 378000 NA 378000 NA NA NA 378000 NA United Kindom Sales
UK Speak Now 2010 169281 1946.118 169281 1928.0 2554 1616 2877777 33084 United Kindom Sales
US 1989 2014 6215000 2143.267 6215000 1962.0 2985 1546 93225000 32149 United Sates Sales
US Fearless 2008 7180000 1633.444 7180000 1625.5 2048 1077 129240000 29402 United Sates Sales
US Lover 2019 1085000 1847.611 1085000 1807.5 2663 781 19530000 33257 United Sates Sales
US Red 2012 4465000 1728.474 4465000 1742.0 2280 993 84835000 32841 United Sates Sales
US Reputation 2017 2300000 NA 2300000 NA NA NA 2300000 NA United Sates Sales
US Speak Now 2010 4694000 1946.118 4694000 1928.0 2554 1616 79798000 33084 United Sates Sales
US Taylor Swift 2006 5720000 1393.214 5720000 1396.5 1803 1069 80080000 19505 United Sates Sales
WW 1989 2014 10100000 2143.267 10100000 1962.0 2985 1546 151500000 32149 World Wide Sales
WW Fearless 2008 12000000 1633.444 12000000 1625.5 2048 1077 216000000 29402 World Wide Sales
WW Lover 2019 3200000 1847.611 3200000 1807.5 2663 781 57600000 33257 World Wide Sales
WW Red 2012 6000000 1728.474 6000000 1742.0 2280 993 114000000 32841 World Wide Sales
WW Reputation 2017 4500000 NA 4500000 NA NA NA 4500000 NA World Wide Sales
WW Speak Now 2010 5000000 1946.118 5000000 1928.0 2554 1616 85000000 33084 World Wide Sales
NA Folklore 2020 NA NA NA NA NA NA NA NA NA
LS0tDQp0aXRsZTogIkhvbWV3b3JrIDYtLUx5cmljcyINCmF1dGhvcjogIkVtaWx5IFRlbm55c29uIg0KZGF0ZTogIjEwLzIxLzIwMjAiDQoNCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBjb2RlX2ZvbGRpbmcgOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQotLS0NCg0KPHN0eWxlPg0KYm9keSB7DQp0ZXh0LWFsaWduOiBqdXN0aWZ5fQ0KPC9zdHlsZT4NCg0KYGBge3Igc2V0dXAsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBpbmNsdWRlID0gRkFMU0V9DQpybShsaXN0PWxzKGFsbD1UUlVFKSkNCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPUZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCg0KbGlicmFyeSgidGlkeXZlcnNlIikNCmxpYnJhcnkoInZ0YWJsZSIpDQoNCmxpYnJhcnkoImRicGx5ciIpDQojIGlicmFyeSgicmVhZHhsIikNCmxpYnJhcnkoImx1YnJpZGF0ZSIpDQpsaWJyYXJ5KCJtYWdyaXR0ciIpDQpsaWJyYXJ5KCJwYWxldHRlZXIiKQ0KbGlicmFyeSgiZ2dlYXN5IikNCmxpYnJhcnkoImdncHViciIpDQpsaWJyYXJ5KCJnZ2hpZ2hsaWdodCIpDQpsaWJyYXJ5KCJkaXJlY3RsYWJlbHMiKQ0KbGlicmFyeSgibnVtZm9ybSIpDQpsaWJyYXJ5KCJqYW5pdG9yIikNCmxpYnJhcnkoInBtZHBseXIiKQ0KbGlicmFyeSgiZ2dyZXBlbCIpDQpsaWJyYXJ5KCJydmVzdCIpDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KGdyaWQpDQpsaWJyYXJ5KGd0YWJsZSkNCmxpYnJhcnkoImthYmxlRXh0cmEiKQ0KDQpgYGANCg0KYGBge3J9DQpiZXlvbmNlX3JhdyA8LSByZWFkLmNzdigiYmV5b25jZV9seXJpY3MuY3N2IikNCnN3aWZ0X3JhdyA8LSByZWFkLmNzdigidGF5bG9yX3N3aWZ0X2x5cmljcy5jc3YiKQ0Kc2FsZXNfcmF3IDwtIHJlYWQuY3N2KCJzYWxlcy5jc3YiKQ0KY2hhcnRzX3JhdyA8LSByZWFkLmNzdigiY2hhcnRzLmNzdiIpDQoNCmBgYA0KDQpgYGB7cn0NCnNhbGVzX2VkaXRlZCA8LSBzYWxlc19yYXcNCnNhbGVzX2VkaXRlZCRyZWxlYXNlX3llYXIgPC0geWVhcihtZHkoc2FsZXNfZWRpdGVkJHJlbGVhc2VkKSkNCg0Kc3dpZnRfZGF0YSA8LSBsZWZ0X2pvaW4oDQogIHN1YnNldChzYWxlc19lZGl0ZWRbYygiYXJ0aXN0IiwgInRpdGxlIiwgImNvdW50cnkiLCAic2FsZXMiLCAicmVsZWFzZV95ZWFyIildLCBhcnRpc3QgPT0gIlRheWxvciBTd2lmdCIpLA0KICBjYmluZCgNCiAgc3dpZnRfcmF3ICU+JSANCiAgICBncm91cF9ieShBcnRpc3QsIEFsYnVtLCBUaXRsZSkgJT4lDQogICAgc3VtbWFyaXplKA0KICAgICAgd29yZF9jb3VudCA9IHN0cl9jb3VudChMeXJpY3MpDQogICAgICApKSwNCiAgYnkgPSBjKCJhcnRpc3QiID0gIkFydGlzdCIsICJ0aXRsZSIgPSAiQWxidW0iKQ0KKQ0KDQpzd2lmdF9kYXRhIDwtIHJlbmFtZShzd2lmdF9kYXRhLCAiQWxidW0iID0gInRpdGxlIiwgIlNvbmciID0gIlRpdGxlIikNCiANCnN3aWZ0X2FsYnVtX2RhdGEgPC0gc3dpZnRfZGF0YSAlPiUNCiAgZ3JvdXBfYnkoY291bnRyeSwgQWxidW0sIHJlbGVhc2VfeWVhcikgJT4lDQogIHN1bW1hcml6ZSgNCiAgICBhdmdfc2FsZXMgPSBtZWFuKHNhbGVzKSwNCiAgICBhdmdfd29yZCA9IG1lYW4od29yZF9jb3VudCksDQogICAgbWVkX3NhbGVzID0gbWVkaWFuKHNhbGVzKSwNCiAgICBtZWRfd29yZCA9IG1lZGlhbih3b3JkX2NvdW50KSwNCiAgICBtYXhfd29yZCA9IG1heCh3b3JkX2NvdW50KSwNCiAgICBtaW5fd29yZCA9IG1pbih3b3JkX2NvdW50KSwNCiAgICB0b3RhbF9zYWxlcyA9IHN1bShzYWxlcyksDQogICAgdG90YWxfd29yZCA9IHN1bSh3b3JkX2NvdW50KQ0KICApICU+JQ0KICBtdXRhdGUoZmFjZXRzID0gY291bnRyeSkNCg0Kc3dpZnRfYWxidW1fZGF0YSRmYWNldHMgPC0gaWZlbHNlKHN3aWZ0X2FsYnVtX2RhdGEkZmFjZXRzID09ICJBVVMiLCAiQXVzdHJhbGlhIFxuIFNhbGVzIiwNCiAgICAgICBpZmVsc2Uoc3dpZnRfYWxidW1fZGF0YSRmYWNldHMgPT0gIkNBTiIsICJDYW5hZGEgXG4gU2FsZXMiLA0KICAgICAgICAgICAgICBpZmVsc2Uoc3dpZnRfYWxidW1fZGF0YSRmYWNldHMgPT0gIkZSQSIsICJGcmFuY2UgXG4gU2FsZXMiLA0KICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHN3aWZ0X2FsYnVtX2RhdGEkZmFjZXRzID09ICJKUE4iLCAiSmFwYW4gXG4gU2FsZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzd2lmdF9hbGJ1bV9kYXRhJGZhY2V0cyA9PSAiVUsiLCAiVW5pdGVkIEtpbmRvbSBcbiBTYWxlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzd2lmdF9hbGJ1bV9kYXRhJGZhY2V0cyA9PSAiVVMiLCAiVW5pdGVkIFNhdGVzIFxuIFNhbGVzIiwgIldvcmxkIFdpZGUgXG4gU2FsZXMiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKSkpKQ0KDQoNCiMgc3dpZnRfYWxidW1fZGF0YQ0KYGBgDQoNCiMgU3VibWlzc2lvbiBHcmFwaA0KDQoNCg0KDQojIyMjIyBBcyB3b3JkIGNvdW50IGdvZXMgdXAsIG9uIGF2ZXJhZ2UsIHNhbGVzIHdpbGwgaW1wcm92ZS4gDQoNCg0KDQoNCg0KDQpgYGB7ciwgZmlnLmhlaWdodCA9IDksIGZpZy53aWR0aCA9IDE3LCBmaWcuYWxpZ24gPSAiY2VudGVyIn0NCmdyaWRFeHRyYTo6Z3JpZC5hcnJhbmdlKA0KICAoZ2dwbG90KHN3aWZ0X2FsYnVtX2RhdGEsIGFlcyh5ID0gYXZnX3NhbGVzLCB4ID0gYXZnX3dvcmQsIGNvbG9yID0gQWxidW0pKSArDQogICAgICBnZW9tX2ppdHRlcihzaXplID0gNCkgKw0KICAgIA0KICAgICAgc2NhbGVfeF9jb250aW51b3VzKGxpbSA9IGMoMTIwMCwgMjIwMCksIA0KICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOVUxMKSArDQogICAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltID0gYygwLCAxMzAwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gcGFzdGUwKCIkIiwgYygwLCAyNTAwMDAwLCA1MDAwMDAwLCA3NTAwMDAwLCAxMDAwMDAwMCwgMTI1MDAwMDApLzEwMDAwMDAsIk0iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IE5VTEwpICsNCiAgICAgIA0KICAgICAgZ2d0aXRsZSgiQWxidW0gU2FsZXMgYnkgQXZnZXJhZ2UgV29yZCBDb3VudCIpICsNCiAgICAgIA0KICAgICAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLA0KICAgICAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDExKSwNCiAgICAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYWNlID0gIml0YWxpYyIpLA0KICAgICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDIwLCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiDQoNCiAgICAgICAgICAgICkpLA0KICANCiAgDQogIChnZ3Bsb3Qoc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiIHwgY291bnRyeSA9PSAiVUsiIHwgY291bnRyeSA9PSAiV1ciKSwgDQogICAgICAgYWVzKHkgPSBhdmdfc2FsZXMsIHggPSBtZWRfd29yZCwgY29sb3IgPSBBbGJ1bSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkpICsNCiAgZ2VvbV9wb2ludChzaXplID0gMy41LCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArDQogIA0KICBmYWNldF93cmFwKC5+IGZhY2V0cykgKyANCiAgDQogIHNjYWxlX3hfY29udGludW91cyhsaW0gPSBjKDEyMDAsIDIwMDApLCANCiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOVUxMKSArDQogIHNjYWxlX3lfY29udGludW91cyhsaW0gPSBjKDAsIDEzMDAwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHBhc3RlMCgiJCIsIGMoMCwgMjUwMDAwMCwgNTAwMDAwMCwgNzUwMDAwMCwgMTAwMDAwMDAsIDEyNTAwMDAwKS8xMDAwMDAwLCJNIiksDQogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICBuYW1lID0gTlVMTCkgKw0KICANCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICJGZWFybGVzcyIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiRmVhcmxlc3MiIHwgDQogICAgICAgICAgICAgICAgICBjb3VudHJ5ID09ICJXVyIgJiBBbGJ1bSA9PSAiRmVhcmxlc3MiKSwNCiAgICAgICAgIGFlcyhsYWJlbCA9IEFsYnVtLCB2anVzdCA9IC0xLCBoanVzdCA9IDEpKSArDQogIGdlb21fbGFiZWxfcmVwZWwoZGF0YSA9IHN3aWZ0X2FsYnVtX2RhdGEgJT4lIA0KICAgICAgICAgZmlsdGVyKGNvdW50cnkgPT0gIlVTIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICIxOTg5IiksDQogICAgICAgICBhZXMobGFiZWwgPSBBbGJ1bSwgdmp1c3QgPSAtMSkpICsNCiAgDQogICAgDQogIGdlb21fbGFiZWxfcmVwZWwoZGF0YSA9IHN3aWZ0X2FsYnVtX2RhdGEgJT4lIA0KICAgICAgICAgZmlsdGVyKCNjb3VudHJ5ID09ICJVUyIgICYgQWxidW0gPT0gIkZlYXJsZXNzIiB8IA0KICAgICAgICAgICAgICAgICAgY291bnRyeSA9PSAiVUsiICAmIEFsYnVtID09ICJGZWFybGVzcyIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICJGZWFybGVzcyIpLA0KICAgICAgICAgYWVzKGxhYmVsID0gIHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAxLjUsIGhqdXN0ID0gMSksIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICIxOTg5IiB8IA0KICAgICAgICAgICAgICAgICAgI2NvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICIxOTg5IiksDQogICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZTAoIlJlbGVhc2UgWWVhciBcbiIsIHJlbGVhc2VfeWVhciksIHZqdXN0ID0gMS41LCBoanVzdCA9IC0uNSksIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICJGZWFybGVzcyIpLA0KICAgICAgICAgYWVzKGxhYmVsID0gIHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAtMSwgaGp1c3QgPSAtLjUpLCBzaXplID0gMi41KSArDQogICBnZW9tX2xhYmVsX3JlcGVsKGRhdGEgPSBzd2lmdF9hbGJ1bV9kYXRhICU+JSANCiAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJVSyIgICYgQWxidW0gPT0gIjE5ODkiKSwNCiAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAtLjUsIGhqdXN0ID0gMS41KSwgc2l6ZSA9IDIuNSkgKw0KICANCiAgDQogIGdndGl0bGUoIkFsYnVtIFNhbGVzIGJ5IENvdW50cnkiKSArDQogIA0KICAgIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwNCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLA0KICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJsaWdodCBncmF5IiksDQogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDIwLCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiDQogICAgICAgICkpLA0KICBsZWdlbmQgPSBndGFibGVfZmlsdGVyKGdncGxvdEdyb2IoZ2dwbG90KHN3aWZ0X2FsYnVtX2RhdGEsIGFlcyh5ID0gYXZnX3NhbGVzLCB4ID0gYXZnX3dvcmQsIGNvbG9yID0gQWxidW0pKSArDQogICAgICBnZW9tX2ppdHRlcihzaXplID0gNCkgKw0KICAgIA0KICAgICAgc2NhbGVfeF9jb250aW51b3VzKGxpbSA9IGMoMTIwMCwgMjIwMCksIA0KICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBOVUxMKSArDQogICAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltID0gYygwLCAxMzAwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gcGFzdGUwKCIkIiwgYygwLCAyNTAwMDAwLCA1MDAwMDAwLCA3NTAwMDAwLCAxMDAwMDAwMCwgMTI1MDAwMDApLzEwMDAwMDAsIk0iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IE5VTEwpICsNCiAgICAgIA0KICAgICAgZ2d0aXRsZSgiQWxidW0gU2FsZXMgYnkgQXZnZXJhZ2UgV29yZCBDb3VudCIpICsNCiAgICAgIA0KICAgICAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLA0KICAgICAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKSwNCiAgICAgICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDExKSwNCiAgICAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LCBmYWNlID0gIml0YWxpYyIpLA0KICAgICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDIwLCBmYWNlID0gImJvbGQiKQ0KICAgICAgICAgICAgKSksICJndWlkZS1ib3giKSAsDQogIG5jb2wgPSAzLA0KICBsZWZ0ID0gICB0ZXh0R3JvYihleHByZXNzaW9uKGJvbGQoIkF2ZXJhZ2UgUmV2ZW51ZSBwZXIgQWxidW0iKSksIGdwID0gZ3Bhcihmb250c2l6ZT0xNSxmb250PTgpLCByb3QgPSA5MCwgdmp1c3QgPSAwLjUpLA0KICBib3R0b20gPSAgIHRleHRHcm9iKGV4cHJlc3Npb24oYm9sZCgiQXZlcmFnZSBXb3JkIENvdW50IEluIFNvbmdzIHBlciBBbGJ1bSIpKSwgZ3AgPSBncGFyKGZvbnRzaXplPTE1LGZvbnQ9OCksIHZqdXN0ID0gMC41KSwNCiAgd2lkdGhzID0gYygzLCAzLCAuNSkpDQoNCg0KYGBgDQoNCiMgQXBwZW5kaXgNCg0KIyMjIyMgRm9yIG1vcmUgZGF0YSBleHBsb3JhdGlvbiBhbmQgbXkgcm91Z2ggd29yaywgSSBoYXZlIGF0dGFjaGVkIG15IGV4cGVyaW1lbnRhdGlvbiBub3RlYm9vay4gVGhpcyBmaWxlIGlzIGRvd25sb2FkYWJsZSB0byBleHBsb3JlIHRoZSBjdXJyZW50IGNvZGUgYmVpbmcgdXRpbGl6aW5nLg0KIyMjIyMgQWxsIE1hdGVyaWFscyBiZWxvdyBoYXZlIGJlZW4gYXR0YWNoZWQgdG8gc3VibWlzc2lvbiBzZXBhcmF0ZWx5IGFzIHdlbGwuIEF0dGFjaGVkIHdpbGwgYmU6DQoqICJGaW5hbCBTdWJtaXNzaW9uIEdyYXBoLnBuZyItLXRoZSBmaXJzdCBncmFwaCBvbiB0aGlzIGRvY3VtZW50DQoqICJIYW5kX0RyYXduX0RyYWZ0X0VkaXRlZC5wbmciLS10aGUgc2Vjb25kIGdyYXBoIG9uIHRoaXMgZG9jdW1lbnQsIHdoaWNoIGlzIGFuIGltYWdlIA0KKiAiU2NhdHRlciBQbG90IEdyYXBoLnBuZyItLXRoZSB0aGlyZCBncmFwaCBvbiB0aGlzIGRvY3VtZW50DQoqICJGYWNldCBHcmFwaC5wbmciLS10aGUgZm91cnRoIGdyYXBoIG9uIHRoaXMgZG9jdW1lbnQNCg0KIyMjIyMgVGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGZ1bGwgcmF3IGRhdGEgdGFibGUgZm9yIHlvdXIgcGVyc29uYWwgZXhwbG9yYXRpb24NCg0KIyMjIyMNCg0KDQojIyBIYW5kZHJhd24gUm91Z2ggRHJhZnQNCg0KIyMjIyMgRHVlIHRvIHByb2JsZW1zIHdpdGggdGhlIGRhdGEsIGl0IHdhcyBub3QgcG9zc2libGUgdG8gbWFrZSBhIGNvbXBhcmlzaW9uIGJldHdlZW4gVGF5bG9yIFN3aWZ0IGFuZCBCZXlvbmNlIHNhbGVzIGJ5IGF2Z2VyYWdlIHdvcmQgY291bnQgcGVyIHNvbmcsIGluIGVhY2ggYWxidW0uIFRodXMgaW5zdGVhZCBvZiBmYWNldGluZyBieSBhcnRpc3QsIEkgZmFjZXRlZCBieSBjb3VudHJ5Lg0KDQo8Y2VudGVyPg0KIVtdKEhhbmRfRHJhd25fRHJhZnRfRWRpdGVkLnBuZyl7d2lkdGg9NjUlfQ0KPC9jZW50ZXI+DQoNCg0KIyMgSW5kaXZpZHVhbCBHcmFwaHMNCg0KIyMjIyMgVGhlIHN1Ym1pc3Npb24gZ3JhcGggaXMgY29tcnBpc2VkIG9mIHR3byBnZ3Bsb3QgZ3JhcGhzIGFwcGVuZGVkIHRvZWd0aGVyIGJ5IGBHcmlkRXh0cmFgIGFuZCBgYXJyYW5nZWAuDQoNCiMjIyBTY2F0dGVycGxvdCBHcmFwaA0KDQojIyMjIyBUaGUgc2NhdHRlciBwbG90IGJlbG93IHNob3dzIHRoZSBzYWxlcyBwZXIgYWJsdW0gYWNyb3NzIGVhY2ggY291bnRyeSBvbiByZWNvbmQuIE5vdGUgdGhhdCBzZXZlcmFsIGNvdW50cmllcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgZmluYWwgZ3JhcGggZHVlIHRvIGEgcG9vciBzYW1wbGUgc2l6ZSBvZiBhYmx1bSBzYWxlcy4NCg0KYGBge3IgZmlnLmFsaWduID0gImNlbnRlciJ9DQpnZ3Bsb3Qoc3dpZnRfYWxidW1fZGF0YSwgYWVzKHkgPSBhdmdfc2FsZXMsIHggPSBhdmdfd29yZCwgY29sb3IgPSBBbGJ1bSkpICsNCiAgZ2VvbV9qaXR0ZXIoc2l6ZSA9IDQpICsNCg0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltID0gYygxMjAwLCAyMjAwKSwgDQogICAgICAgICAgICAgICAgICAgICBuYW1lID0gIkF2ZXJhZ2UgV29yZCBDb3VudCBJbiBTb25ncyBwZXIgQWxidW0iKSArDQogIHNjYWxlX3lfY29udGludW91cyhsaW0gPSBjKDAsIDEzMDAwMDAwKSwNCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHBhc3RlMCgiJCIsIGMoMCwgMjUwMDAwMCwgNTAwMDAwMCwgNzUwMDAwMCwgMTAwMDAwMDAsIDEyNTAwMDAwKS8xMDAwMDAwLCJNIiksDQogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICBuYW1lID0gIkF2ZXJhZ2UgUmV2ZW51ZSBwZXIgQWxidW0iKSArDQogIA0KICBnZ3RpdGxlKCJBbGJ1bSBTYWxlcyBieSBBdmdlcmFnZSBXb3JkIENvdW50IikgKw0KICANCiAgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLA0KICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiwgZmlsbCA9IE5BKSwNCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKQ0KICAgICAgICApICANCmBgYA0KDQoNCg0KDQojIyMgRmFjZXQgR3JhcGgNCg0KIyMjIyMgVW5mb3J0dWFudGVseSwgbm90IGFsbCBjb3VudHJpZXMgcG9zc2Vzc2VkIGEgbGFyZ2UgZW5vdWdoIHNhbXBsZSBzaXplIGFsYnVtIHNhbGVzLiBDb3VudHJpZXMgbGVmdCBvdXQgaW5jbHVkZSBBdXN0cmFsaWEsIENhbmFkYSwgRnJhbmNlIGFuZCBKYXBhbi4gVGh1cyB0byBjb21wYXJlIHRoZSBsYXJnZXN0IHNhbXBsZSBzaXplcywgSSBsaW1pdGVkIG15IGRhdGFzZXQgdG8gdGhlIFVuaXRlZCBLaW5nZG9tLCBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgYWdncmVnYXRlIFdvcmxkIFdpZGUgU2FsZXMuDQoNCmBgYHtyIGZpZy5oZWlnaHQgPSA3LCBmaWcuYWxpZ24gPSAiY2VudGVyIn0NCmdncGxvdChzd2lmdF9hbGJ1bV9kYXRhICU+JSANCiAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJVUyIgfCBjb3VudHJ5ID09ICJVSyIgfCBjb3VudHJ5ID09ICJXVyIpLCANCiAgICAgICBhZXMoeSA9IGF2Z19zYWxlcywgeCA9IG1lZF93b3JkLCBjb2xvciA9IEFsYnVtLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSkgKw0KICBnZW9tX3BvaW50KHNpemUgPSAzLjUsIHNob3cubGVnZW5kID0gRkFMU0UpICsNCiAgDQogIGZhY2V0X3dyYXAoLn4gZmFjZXRzKSArIA0KICANCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbSA9IGMoMTIwMCwgMjAwMCksIA0KICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJBdmVyYWdlIFdvcmQgQ291bnQgSW4gU29uZ3MgcGVyIEFsYnVtIikgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGltID0gYygwLCAxMzAwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBwYXN0ZTAoIiQiLCBjKDAsIDI1MDAwMDAsIDUwMDAwMDAsIDc1MDAwMDAsIDEwMDAwMDAwLCAxMjUwMDAwMCkvMTAwMDAwMCwiTSIpLA0KICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygwLCAyNTAwMDAwLCA1MDAwMDAwLCA3NTAwMDAwLCAxMDAwMDAwMCwgMTI1MDAwMDApLA0KICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJBdmVyYWdlIFJldmVudWUgcGVyIEFsYnVtIikgKw0KICANCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICJGZWFybGVzcyIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiRmVhcmxlc3MiIHwgDQogICAgICAgICAgICAgICAgICBjb3VudHJ5ID09ICJXVyIgJiBBbGJ1bSA9PSAiRmVhcmxlc3MiKSwNCiAgICAgICAgIGFlcyhsYWJlbCA9IEFsYnVtLCB2anVzdCA9IC0xLCBoanVzdCA9IDEpKSArDQogIGdlb21fbGFiZWxfcmVwZWwoZGF0YSA9IHN3aWZ0X2FsYnVtX2RhdGEgJT4lIA0KICAgICAgICAgZmlsdGVyKGNvdW50cnkgPT0gIlVTIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICIxOTg5IiksDQogICAgICAgICBhZXMobGFiZWwgPSBBbGJ1bSwgdmp1c3QgPSAtMSkpICsNCiAgDQogICAgDQogIGdlb21fbGFiZWxfcmVwZWwoZGF0YSA9IHN3aWZ0X2FsYnVtX2RhdGEgJT4lIA0KICAgICAgICAgZmlsdGVyKCNjb3VudHJ5ID09ICJVUyIgICYgQWxidW0gPT0gIkZlYXJsZXNzIiB8IA0KICAgICAgICAgICAgICAgICAgY291bnRyeSA9PSAiVUsiICAmIEFsYnVtID09ICJGZWFybGVzcyIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICJGZWFybGVzcyIpLA0KICAgICAgICAgYWVzKGxhYmVsID0gIHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAxLjUsIGhqdXN0ID0gMSksIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICIxOTg5IiB8IA0KICAgICAgICAgICAgICAgICAgI2NvdW50cnkgPT0gIlVLIiAgJiBBbGJ1bSA9PSAiMTk4OSIgfCANCiAgICAgICAgICAgICAgICAgIGNvdW50cnkgPT0gIldXIiAmIEFsYnVtID09ICIxOTg5IiksDQogICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZTAoIlJlbGVhc2UgWWVhciBcbiIsIHJlbGVhc2VfeWVhciksIHZqdXN0ID0gMS41LCBoanVzdCA9IC0uNSksIHNpemUgPSAyLjUpICsNCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhID0gc3dpZnRfYWxidW1fZGF0YSAlPiUgDQogICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVVMiICAmIEFsYnVtID09ICJGZWFybGVzcyIpLA0KICAgICAgICAgYWVzKGxhYmVsID0gIHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAtMSwgaGp1c3QgPSAtLjUpLCBzaXplID0gMi41KSArDQogICBnZW9tX2xhYmVsX3JlcGVsKGRhdGEgPSBzd2lmdF9hbGJ1bV9kYXRhICU+JSANCiAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJVSyIgICYgQWxidW0gPT0gIjE5ODkiKSwNCiAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMCgiUmVsZWFzZSBZZWFyIFxuIiwgcmVsZWFzZV95ZWFyKSwgdmp1c3QgPSAtLjUsIGhqdXN0ID0gMS41KSwgc2l6ZSA9IDIuNSkgKw0KICANCiAgDQogIGdndGl0bGUoIkFsYnVtIFNhbGVzIGJ5IENvdW50cnkiKSArDQogIA0KICAgIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwNCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpLA0KICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJsaWdodCBncmF5IiksDQogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IC41LCBzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiDQogICAgICAgICkgIA0KYGBgDQoNCiMjIFJhdyBEYXRhIFRhYmxlDQoNCiMjIyMjIFRoZSBncmFwaCB3YXMgZGV2ZWxvcGVkIGZyb20gdHdvIGRpZmZlcmVudCBkYXRhIHNldHMsIHVzaW5nIHRoZSBgam9pbmAgZnVuY3Rpb24uIEZyb20gdGhlIGBzd2lmdF9seXJpY3NgIGRhdGFmcmFtZSwgZWFjaCB3b3JkIHdhcyBjb3VudGVkIHRocm91Z2ggZGF0YSBtYW5pcHVsYXRpb24uIFRoZW4gdGhpcyBkYXRhZnJhbWUgd2FzIGFndW1lbmV0ZWQgdXNpbmcgdGhlIGBncm91cF9ieWAgZnVuY3Rpb24gdG8gZmluZCBzdGFuZGFyZCBtZWFzdXJlcy4gRmluYWxseSB0aGUgYGpvaW5gIGZ1bmN0aW9uIHdhcyBpbXBsaW1lbnRlZCB0byBjb25uZWN0IHRoZSBgc2FsZXNgIGRhdGFmcmFtZSB0byB0aGUgYHN3aWZ0X2RhdGFgIGRhdGFmcmFtZSwgZGV2ZWxvcGVkIGZyb20gdGhlIGluaXRpYWwgYHN3aWZ0X2x5cmljc2AgZGF0YXRyZmFtZS4gUGxlYXNlIGRvd25sb2FkIHRoaXMgZmlsZSB0byByZXZpZXcgdGhlIGZ1bGwgY29kZS4gT3Igc2VsZWN0IHRoZSAic2hvdyBvcHRpb24iIGluIHRoZSBkcm9wZG93biBtZW51ZSBmb3VuZCBpbiB0aGggdXBwZXIgcmlnaHQgaGFuZCBjb3JuZXIuDQoNCmBgYHtyfQ0Kc3dpZnRfYWxidW1fZGF0YSAlPiUNCiAga2JsKCkgJT4lDQogICAga2FibGVfbWF0ZXJpYWwoYygic3RyaXBlZCIsICJob3ZlciIpKQ0KDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==