Part I - Data Visualisation

The visualisation analysed here is Analysis of death causes of Clebrities, created by Elena Petrova, posted in Kaggle. taken from Kaggle.This visualisation has been created to investigate the claim that 2016 had an unnaturally large number of celebrity deaths. The original visualisation is given below.

Clebrity Deaths

Taken from: Kaggle

The data used for the visualisation is available in the following link:

https://www.kaggle.com/hugodarwood/celebrity-deaths/downloads/celebrity-deaths.zip

Part II - Deconstruct

The visualisation given here is conveying the most frequent causes of celebrity deaths through a bar plot. The number of deaths associated with 8 of the frequent causes of celebrity deaths a are visualised. Few of the significant problems associated with the visualisation that could be fixed are:

  1. Many of the frequent reasons for the celebrity deaths are hidden in the “other” category. Not all of the frequent reasons are considered here e.g. “Death after long illness” is directed to “other” category.
  2. Since some of the categories are too small compared to the other big groups like “Other” and “Cancer”, it is difficult to identify thse groups from the plot, e.g “Murder”.
  3. Change of values over the years is minimal, so identfying this difference is difficult, e.g. change in number of people died over cancer and heart disease over the recent years.
  4. Title of the visualisation is not exactly reffering to the analysis behind. Just by looking at the plot, it is difficult to understand the story behind. A proper heading and a proper legend name would have been more convincing. One of the other problem associated with the visualisation which is due to the data manipulation error was that, switch cases doesnot take ‘OR’ operator and the author had used ‘OR’ to group similar death cases, which resulted in leaving many of the frequent cases in ‘other’ category.

Part III - Reconstruct

#importing dataset
CelebrityDeath <- read.csv("~/Downloads/celebrity_deaths.csv",
                     na.strings = c("", "NA"), 
                     stringsAsFactors = F) %>% tbl_df 

# sql solution  
CelebrityDeath <- sqldf("SELECT *,
CASE 
  WHEN cause_of_death LIKE '%cancer%' THEN 'Cancer'
  WHEN cause_of_death LIKE '%leukemia%' THEN 'Cancer'
  WHEN cause_of_death LIKE '%natural%' THEN 'Natural Death' 
  WHEN cause_of_death LIKE '%dies%' THEN 'Natural Death'
  WHEN cause_of_death LIKE '%sleep%'  THEN 'Natural Death' 
  WHEN cause_of_death LIKE '%health%' THEN 'Natural Death' 
  WHEN cause_of_death LIKE '%murder%' THEN 'murder'
  WHEN cause_of_death LIKE '%stab%' THEN 'murder'
  WHEN cause_of_death LIKE '%kill%' THEN 'murder'
  WHEN cause_of_death LIKE '%shot%' THEN 'murder'
  WHEN cause_of_death LIKE '%Alzheimer%' THEN 'Alzheimer or Parkinson'
  WHEN cause_of_death LIKE '%Parkinson%' THEN 'Alzheimer or Parkinson'
  WHEN cause_of_death LIKE '%kidney%' THEN 'Kidney, Liver or Brain Damage'
  WHEN cause_of_death LIKE '%liver%' THEN 'Kidney, Liver or Brain Damage'
  WHEN cause_of_death LIKE '%brain%' THEN 'Kidney, Liver or Brain Damage'
  WHEN cause_of_death LIKE '%cerebral%' THEN 'Kidney, Liver or Brain Damage'
  WHEN cause_of_death LIKE '%heart%' THEN 'Cardiac'
  WHEN cause_of_death LIKE '%stroke%' THEN 'Cardiac'
  WHEN cause_of_death LIKE '%cardiac%' THEN 'Cardiac'
  WHEN cause_of_death LIKE '%chest%' THEN 'Cardiac'
  WHEN cause_of_death LIKE '%illness%' THEN 'After Long Illness'
  WHEN cause_of_death LIKE '%suicide%' THEN 'suicide'
  WHEN cause_of_death LIKE '%pneumonia%'  THEN 'Pneumonia'
  WHEN cause_of_death LIKE '%lung%'  THEN 'Pneumonia'
  WHEN cause_of_death LIKE '%pulmonary%' THEN 'Pneumonia'
  WHEN cause_of_death LIKE '%respiratory%' THEN 'Pneumonia'
  WHEN cause_of_death LIKE '%crash%'  THEN 'Accident'
  WHEN cause_of_death LIKE '%accident%'  THEN 'Accident'
  WHEN cause_of_death LIKE '%fall%'  THEN 'Accident'
  WHEN cause_of_death LIKE '%collision%'  THEN 'Accident'
  WHEN cause_of_death LIKE '%car%'  THEN 'Accident'
  WHEN cause_of_death LIKE '%bike%'  THEN 'Accident'
  WHEN cause_of_death LIKE '%biking%'  THEN 'Accident'
  WHEN cause_of_death LIKE '%injury%'  THEN 'Accident'
  WHEN cause_of_death IS NULL THEN NULL
ELSE 'Other Reasons' END AS Death_Cause
FROM CelebrityDeath")
Manipulated_Data = as.data.frame(table(subset(CelebrityDeath, select= c(Death_Cause,death_year), dnn='Death_Cause')))
ggplot(Manipulated_Data, aes(death_year, Death_Cause, fill = Freq)) +geom_tile(size=0) +   theme(text = element_text(size = 12, 
                            family = "Calibri"),
                  plot.title = element_text(hjust = 0.5)) +scale_fill_viridis( discrete = FALSE, option = "D",guide_legend(title="Frequency of Deaths")) + ggtitle("Major reasons for Celebrity Deaths from 2006 to 2016 ") + xlab("Year of Death") + ylab("Reason of Death")

Modified Visualisation from: Kaggle
Data taken from: Wikipedia

Issue with the data manipulation was corrected and modification were made on the visualisation to solve the above mentioned problems in the original visualisation, 1) Many of the other frequent groups which caused the death of celebrities has been included in the visualisation. These include, “Kidney, Liver and Brain Damage”, “After long illness” and “Natural Death”. 2) All the frequent groups are represented on the y-axis, so that it is easier to identify individual groups and see their changes over the years.
3) It is clearly visible that the cancer was the most frequent cause of death of clelbrity in 2016. Also celebrities that that died due to cancer is increasing over the years. Similarly in case of heart disease, it is easy to recognise the change of frequency of deaths. 4) Title of the visualisation is changed so that story of the visualisation is readable from the title. The title for the legend is also changed for easy understanding. Trifecta check-up has been done on the visualisation. The question behind was “Does 2016 had an unnaturally large celebrity deaths?” All three questions in the Trifecta check-up result in the same answer. The visualisation had a question behind which is interesting. A reliable Data source is provided and the visualisation answers the question behind the analysis.

LS0tCnRpdGxlOiAiVmlzdWFsaXNhdGlvbiIKc3VidGl0bGU6IERlY29uc3RydWN0IGFuZCBSZWNvbnN0cnVjdApvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgoKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIGxvYWRpbmcgcGFja2FnZXMKb3B0aW9ucyh3YXJuID0gLTEpCmxpYnJhcnkocGFjbWFuKQpsaWJyYXJ5KHZpcmlkaXMpCnBfbG9hZChkcGx5ciwgc3RyaW5nciwgcmVzaGFwZTIsIGdncGxvdDIsIHNxbGRmLCBleHRyYWZvbnQsIHdlc2FuZGVyc29uKQoKYGBgCgojIyBQYXJ0IEkgLSBEYXRhIFZpc3VhbGlzYXRpb24KClRoZSB2aXN1YWxpc2F0aW9uIGFuYWx5c2VkIGhlcmUgaXMgQW5hbHlzaXMgb2YgZGVhdGggY2F1c2VzIG9mIENsZWJyaXRpZXMsIGNyZWF0ZWQgYnkgRWxlbmEgUGV0cm92YSwgcG9zdGVkIGluIEthZ2dsZS4KdGFrZW4gZnJvbSBLYWdnbGUuVGhpcyB2aXN1YWxpc2F0aW9uIGhhcyBiZWVuIGNyZWF0ZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGNsYWltIHRoYXQgMjAxNiBoYWQgYW4gdW5uYXR1cmFsbHkgbGFyZ2UgbnVtYmVyIG9mIGNlbGVicml0eSBkZWF0aHMuIFRoZSBvcmlnaW5hbCB2aXN1YWxpc2F0aW9uIGlzIGdpdmVuIGJlbG93LgoKCjxjZW50ZXI+CiAhW0NsZWJyaXR5IERlYXRoc10oaHR0cHM6Ly93d3cua2FnZ2xlLmlvL3N2Zi8xMzUxOTY0LzI2NzM2MzhlYmE0ZTU3YzhjYjBkNzEzNzUyZDQyM2IzL19fcmVzdWx0c19fX2ZpbGVzL19fcmVzdWx0c19fXzdfMS5wbmcpCiA8L2NlbnRlcj4KClRha2VuIGZyb206IFtLYWdnbGVdKGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vZWxlbmFwZXRyb3ZhL2pveWZ1bC1hbmFseXNpcy1vZi1kZWF0aC1jYXVzZXMvbm90ZWJvb2spCgpUaGUgZGF0YSB1c2VkIGZvciB0aGUgdmlzdWFsaXNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGZvbGxvd2luZyBsaW5rOgoKaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9odWdvZGFyd29vZC9jZWxlYnJpdHktZGVhdGhzL2Rvd25sb2Fkcy9jZWxlYnJpdHktZGVhdGhzLnppcAoKIyMgUGFydCBJSSAtIERlY29uc3RydWN0CgpUaGUgdmlzdWFsaXNhdGlvbiBnaXZlbiBoZXJlIGlzIGNvbnZleWluZyB0aGUgbW9zdCBmcmVxdWVudCBjYXVzZXMgb2YgY2VsZWJyaXR5IGRlYXRocyB0aHJvdWdoIGEgYmFyIHBsb3QuIFRoZSBudW1iZXIgb2YgZGVhdGhzIGFzc29jaWF0ZWQgd2l0aCA4IG9mIHRoZSBmcmVxdWVudCBjYXVzZXMgb2YgY2VsZWJyaXR5IGRlYXRocyBhIGFyZSB2aXN1YWxpc2VkLiBGZXcgb2YgdGhlIHNpZ25pZmljYW50IHByb2JsZW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlzdWFsaXNhdGlvbiB0aGF0IGNvdWxkIGJlIGZpeGVkIGFyZToKICAKICAxKSBNYW55IG9mIHRoZSBmcmVxdWVudCByZWFzb25zIGZvciB0aGUgY2VsZWJyaXR5IGRlYXRocyBhcmUgaGlkZGVuIGluIHRoZSAib3RoZXIiIGNhdGVnb3J5LiBOb3QgYWxsIG9mIHRoZSBmcmVxdWVudCByZWFzb25zIGFyZSAgICAgICAgY29uc2lkZXJlZCBoZXJlIGUuZy4gIkRlYXRoIGFmdGVyIGxvbmcgaWxsbmVzcyIgaXMgZGlyZWN0ZWQgdG8gIm90aGVyIiBjYXRlZ29yeS4KICAyKSBTaW5jZSBzb21lIG9mIHRoZSBjYXRlZ29yaWVzIGFyZSB0b28gc21hbGwgY29tcGFyZWQgdG8gdGhlIG90aGVyIGJpZyBncm91cHMgbGlrZSAiT3RoZXIiIGFuZCAiQ2FuY2VyIiwgaXQgaXMgZGlmZmljdWx0IHRvICAgICAgICAgICAgaWRlbnRpZnkgdGhzZSBncm91cHMgZnJvbSB0aGUgcGxvdCwgZS5nICJNdXJkZXIiLiAKICAzKSBDaGFuZ2Ugb2YgdmFsdWVzIG92ZXIgdGhlIHllYXJzIGlzIG1pbmltYWwsIHNvIGlkZW50ZnlpbmcgdGhpcyBkaWZmZXJlbmNlIGlzIGRpZmZpY3VsdCwgZS5nLiBjaGFuZ2UgaW4gbnVtYmVyIG9mIHBlb3BsZSBkaWVkICAgICAgICAgb3ZlciBjYW5jZXIgYW5kIGhlYXJ0IGRpc2Vhc2Ugb3ZlciB0aGUgcmVjZW50IHllYXJzLgogIDQpIFRpdGxlIG9mIHRoZSB2aXN1YWxpc2F0aW9uIGlzIG5vdCBleGFjdGx5IHJlZmZlcmluZyB0byB0aGUgYW5hbHlzaXMgYmVoaW5kLiBKdXN0IGJ5IGxvb2tpbmcgYXQgdGhlIHBsb3QsIGl0IGlzIGRpZmZpY3VsdCB0byAgICAgICAgICB1bmRlcnN0YW5kIHRoZSBzdG9yeSBiZWhpbmQuIEEgcHJvcGVyIGhlYWRpbmcgYW5kIGEgcHJvcGVyIGxlZ2VuZCBuYW1lIHdvdWxkIGhhdmUgYmVlbiBtb3JlIGNvbnZpbmNpbmcuCk9uZSBvZiB0aGUgb3RoZXIgcHJvYmxlbSBhc3NvY2lhdGVkIHdpdGggdGhlIHZpc3VhbGlzYXRpb24gd2hpY2ggaXMgZHVlIHRvIHRoZSBkYXRhIG1hbmlwdWxhdGlvbiBlcnJvciB3YXMgdGhhdCwgc3dpdGNoIGNhc2VzIGRvZXNub3QgdGFrZSAnT1InIG9wZXJhdG9yIGFuZCB0aGUgYXV0aG9yIGhhZCB1c2VkICdPUicgdG8gZ3JvdXAgc2ltaWxhciBkZWF0aCBjYXNlcywgd2hpY2ggcmVzdWx0ZWQgaW4gbGVhdmluZyBtYW55IG9mIHRoZSBmcmVxdWVudCBjYXNlcyBpbiAnb3RoZXInIGNhdGVnb3J5LgoKIyMgUGFydCBJSUkgLSBSZWNvbnN0cnVjdAoKYGBge3J9CiNpbXBvcnRpbmcgZGF0YXNldApDZWxlYnJpdHlEZWF0aCA8LSByZWFkLmNzdigifi9Eb3dubG9hZHMvY2VsZWJyaXR5X2RlYXRocy5jc3YiLAogICAgICAgICAgICAgICAgICAgICBuYS5zdHJpbmdzID0gYygiIiwgIk5BIiksIAogICAgICAgICAgICAgICAgICAgICBzdHJpbmdzQXNGYWN0b3JzID0gRikgJT4lIHRibF9kZiAKCiMgc3FsIHNvbHV0aW9uICAKQ2VsZWJyaXR5RGVhdGggPC0gc3FsZGYoIlNFTEVDVCAqLApDQVNFIAogIFdIRU4gY2F1c2Vfb2ZfZGVhdGggTElLRSAnJWNhbmNlciUnIFRIRU4gJ0NhbmNlcicKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVsZXVrZW1pYSUnIFRIRU4gJ0NhbmNlcicKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVuYXR1cmFsJScgVEhFTiAnTmF0dXJhbCBEZWF0aCcgCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclZGllcyUnIFRIRU4gJ05hdHVyYWwgRGVhdGgnCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclc2xlZXAlJyAgVEhFTiAnTmF0dXJhbCBEZWF0aCcgCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclaGVhbHRoJScgVEhFTiAnTmF0dXJhbCBEZWF0aCcgCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclbXVyZGVyJScgVEhFTiAnbXVyZGVyJwogIFdIRU4gY2F1c2Vfb2ZfZGVhdGggTElLRSAnJXN0YWIlJyBUSEVOICdtdXJkZXInCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICcla2lsbCUnIFRIRU4gJ211cmRlcicKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVzaG90JScgVEhFTiAnbXVyZGVyJwogIFdIRU4gY2F1c2Vfb2ZfZGVhdGggTElLRSAnJUFsemhlaW1lciUnIFRIRU4gJ0FsemhlaW1lciBvciBQYXJraW5zb24nCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclUGFya2luc29uJScgVEhFTiAnQWx6aGVpbWVyIG9yIFBhcmtpbnNvbicKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVraWRuZXklJyBUSEVOICdLaWRuZXksIExpdmVyIG9yIEJyYWluIERhbWFnZScKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVsaXZlciUnIFRIRU4gJ0tpZG5leSwgTGl2ZXIgb3IgQnJhaW4gRGFtYWdlJwogIFdIRU4gY2F1c2Vfb2ZfZGVhdGggTElLRSAnJWJyYWluJScgVEhFTiAnS2lkbmV5LCBMaXZlciBvciBCcmFpbiBEYW1hZ2UnCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclY2VyZWJyYWwlJyBUSEVOICdLaWRuZXksIExpdmVyIG9yIEJyYWluIERhbWFnZScKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVoZWFydCUnIFRIRU4gJ0NhcmRpYWMnCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclc3Ryb2tlJScgVEhFTiAnQ2FyZGlhYycKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVjYXJkaWFjJScgVEhFTiAnQ2FyZGlhYycKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVjaGVzdCUnIFRIRU4gJ0NhcmRpYWMnCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclaWxsbmVzcyUnIFRIRU4gJ0FmdGVyIExvbmcgSWxsbmVzcycKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVzdWljaWRlJScgVEhFTiAnc3VpY2lkZScKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVwbmV1bW9uaWElJyAgVEhFTiAnUG5ldW1vbmlhJwogIFdIRU4gY2F1c2Vfb2ZfZGVhdGggTElLRSAnJWx1bmclJyAgVEhFTiAnUG5ldW1vbmlhJwogIFdIRU4gY2F1c2Vfb2ZfZGVhdGggTElLRSAnJXB1bG1vbmFyeSUnIFRIRU4gJ1BuZXVtb25pYScKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVyZXNwaXJhdG9yeSUnIFRIRU4gJ1BuZXVtb25pYScKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVjcmFzaCUnICBUSEVOICdBY2NpZGVudCcKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVhY2NpZGVudCUnICBUSEVOICdBY2NpZGVudCcKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVmYWxsJScgIFRIRU4gJ0FjY2lkZW50JwogIFdIRU4gY2F1c2Vfb2ZfZGVhdGggTElLRSAnJWNvbGxpc2lvbiUnICBUSEVOICdBY2NpZGVudCcKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyVjYXIlJyAgVEhFTiAnQWNjaWRlbnQnCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclYmlrZSUnICBUSEVOICdBY2NpZGVudCcKICBXSEVOIGNhdXNlX29mX2RlYXRoIExJS0UgJyViaWtpbmclJyAgVEhFTiAnQWNjaWRlbnQnCiAgV0hFTiBjYXVzZV9vZl9kZWF0aCBMSUtFICclaW5qdXJ5JScgIFRIRU4gJ0FjY2lkZW50JwogIFdIRU4gY2F1c2Vfb2ZfZGVhdGggSVMgTlVMTCBUSEVOIE5VTEwKRUxTRSAnT3RoZXIgUmVhc29ucycgRU5EIEFTIERlYXRoX0NhdXNlCkZST00gQ2VsZWJyaXR5RGVhdGgiKQpgYGAKCmBgYHtyIGZpZy53aWR0aD0xMSwgZmlnLmhlaWdodD02LCBmaWcuYWxpZ249J2NlbnRlcid9Ck1hbmlwdWxhdGVkX0RhdGEgPSBhcy5kYXRhLmZyYW1lKHRhYmxlKHN1YnNldChDZWxlYnJpdHlEZWF0aCwgc2VsZWN0PSBjKERlYXRoX0NhdXNlLGRlYXRoX3llYXIpLCBkbm49J0RlYXRoX0NhdXNlJykpKQpnZ3Bsb3QoTWFuaXB1bGF0ZWRfRGF0YSwgYWVzKGRlYXRoX3llYXIsIERlYXRoX0NhdXNlLCBmaWxsID0gRnJlcSkpICtnZW9tX3RpbGUoc2l6ZT0wKSArICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gIkNhbGlicmkiKSwKICAgICAgICAgICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICtzY2FsZV9maWxsX3ZpcmlkaXMoIGRpc2NyZXRlID0gRkFMU0UsIG9wdGlvbiA9ICJEIixndWlkZV9sZWdlbmQodGl0bGU9IkZyZXF1ZW5jeSBvZiBEZWF0aHMiKSkgKyBnZ3RpdGxlKCJNYWpvciByZWFzb25zIGZvciBDZWxlYnJpdHkgRGVhdGhzIGZyb20gMjAwNiB0byAyMDE2ICIpICsgeGxhYigiWWVhciBvZiBEZWF0aCIpICsgeWxhYigiUmVhc29uIG9mIERlYXRoIikKYGBgCk1vZGlmaWVkIFZpc3VhbGlzYXRpb24gZnJvbTogW0thZ2dsZV0oaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9lbGVuYXBldHJvdmEvam95ZnVsLWFuYWx5c2lzLW9mLWRlYXRoLWNhdXNlcy9ub3RlYm9vaykgIApEYXRhIHRha2VuIGZyb206IFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RlYXRoc19pbl8yMDE2KQoKSXNzdWUgd2l0aCB0aGUgZGF0YSBtYW5pcHVsYXRpb24gd2FzIGNvcnJlY3RlZCBhbmQgbW9kaWZpY2F0aW9uIHdlcmUgbWFkZSBvbiB0aGUgdmlzdWFsaXNhdGlvbiB0byBzb2x2ZSB0aGUgYWJvdmUgbWVudGlvbmVkIHByb2JsZW1zIGluIHRoZSBvcmlnaW5hbCB2aXN1YWxpc2F0aW9uLCAKICAxKSBNYW55IG9mIHRoZSBvdGhlciBmcmVxdWVudCBncm91cHMgd2hpY2ggY2F1c2VkIHRoZSBkZWF0aCBvZiBjZWxlYnJpdGllcyBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgdmlzdWFsaXNhdGlvbi4gVGhlc2UgaW5jbHVkZSwgICAgICAiS2lkbmV5LCBMaXZlciBhbmQgQnJhaW4gRGFtYWdlIiwgIkFmdGVyIGxvbmcgaWxsbmVzcyIgYW5kICJOYXR1cmFsIERlYXRoIi4KICAyKSBBbGwgdGhlIGZyZXF1ZW50IGdyb3VwcyBhcmUgcmVwcmVzZW50ZWQgb24gdGhlIHktYXhpcywgc28gdGhhdCBpdCBpcyBlYXNpZXIgdG8gaWRlbnRpZnkgaW5kaXZpZHVhbCBncm91cHMgYW5kIHNlZSB0aGVpciBjaGFuZ2VzICAgICAgb3ZlciB0aGUgeWVhcnMuICAKICAzKSBJdCBpcyBjbGVhcmx5IHZpc2libGUgdGhhdCB0aGUgY2FuY2VyIHdhcyB0aGUgbW9zdCBmcmVxdWVudCBjYXVzZSBvZiBkZWF0aCBvZiBjbGVsYnJpdHkgaW4gMjAxNi4gQWxzbyBjZWxlYnJpdGllcyB0aGF0IHRoYXQgICAgICAgICBkaWVkIGR1ZSB0byBjYW5jZXIgaXMgaW5jcmVhc2luZyBvdmVyIHRoZSB5ZWFycy4gU2ltaWxhcmx5IGluIGNhc2Ugb2YgaGVhcnQgZGlzZWFzZSwgaXQgaXMgZWFzeSB0byByZWNvZ25pc2UgdGhlIGNoYW5nZSBvZiAgICAgICAgICBmcmVxdWVuY3kgb2YgZGVhdGhzLgogIDQpIFRpdGxlIG9mIHRoZSB2aXN1YWxpc2F0aW9uIGlzIGNoYW5nZWQgc28gdGhhdCBzdG9yeSBvZiB0aGUgdmlzdWFsaXNhdGlvbiBpcyByZWFkYWJsZSBmcm9tIHRoZSB0aXRsZS4gVGhlIHRpdGxlIGZvciB0aGUgbGVnZW5kICAgICAgIGlzIGFsc28gY2hhbmdlZCBmb3IgZWFzeSB1bmRlcnN0YW5kaW5nLgpUcmlmZWN0YSBjaGVjay11cCBoYXMgYmVlbiBkb25lIG9uIHRoZSB2aXN1YWxpc2F0aW9uLiBUaGUgcXVlc3Rpb24gYmVoaW5kIHdhcyAiRG9lcyAyMDE2IGhhZCBhbiB1bm5hdHVyYWxseSBsYXJnZSBjZWxlYnJpdHkgZGVhdGhzPyIgQWxsIHRocmVlIHF1ZXN0aW9ucyBpbiB0aGUgVHJpZmVjdGEgY2hlY2stdXAgcmVzdWx0IGluIHRoZSBzYW1lIGFuc3dlci4gVGhlIHZpc3VhbGlzYXRpb24gaGFkIGEgcXVlc3Rpb24gYmVoaW5kIHdoaWNoIGlzIGludGVyZXN0aW5nLiBBIHJlbGlhYmxlIERhdGEgc291cmNlIGlzIHByb3ZpZGVkIGFuZCB0aGUgdmlzdWFsaXNhdGlvbiBhbnN3ZXJzIHRoZSBxdWVzdGlvbiBiZWhpbmQgdGhlIGFuYWx5c2lzLiAgIAo=