Reinaldo Zezela University of Derby, UK r.zezela1@unimail.derby.ac.uk May 2018

This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

CODE = c( "AA", "AS", "B6", "DL", "EV", "F9", "HA", "NK", "OO", "UA", "VX", "WN" )
  DESCRIPTION <- c("American Airlines Inc.", "Alaska Airlines Inc.", "JetBlue Airways", "Delta Air Lines Inc.", "ExpressJet Airlines Inc.", "Frontier Airlines Inc.", "Hawaiian Airlines Inc.", "Spirit Air Lines", "SkyWest Airlines Inc.", "United Air Lines Inc.", "Virgin America", "Southwest Airlines Co.")
  CARRIER <- data.frame(CODE, DESCRIPTION)
  CARRIER

2.0 Exploratory Data Analysis ———————————————–

# Prepare data: group mean Arrival delay by Airline in 2017
tbl_avg <- FLIGHTS %>%
  group_by(CARRIER) %>%
summarise(avg_Arr_delay = round(mean(ARR_DELAY_NEW, na.rm = TRUE), digits=2)) %>%
  arrange(.$avg_Arr_delay)
head(tbl_avg)

** Merge the subset(tbl_avg) with CARRIER table (data frame) in order to get the Airline name

#CARRIER
head(m1)

*Plotting average arrival delay by Airline

ggplot(m1, aes(x=reorder(DESCRIPTION,avg_Arr_delay), y=avg_Arr_delay)) +
  geom_bar(stat="identity", fill="tomato") +
  xlab("Airline") +
  ylab("Average Arrival Delay") +
  theme(axis.text.x = element_text(angle=90))

3.0 Cause of Delay

*3.1 Cumulative minutes delayed by cause of delay

*Plotting Causes of delay

ggplot(tbl_delay_type, aes(x=MONTH)) +
  geom_line(aes(y=CARRIER_DELAY, color = "darkred")) +
  geom_line(aes(y=WEATHER_DELAY, color="steelblue"), linetype="twodash") +
  geom_line(aes(y=NAS_DELAY, color = "#999999")) +
  geom_line(aes(y=SECURITY_DELAY, color = "#E69F00")) +  
  geom_line(aes(y=LATE_AIRCRAFT_DELAY, color = "black")) +
  #scale_fill_discrete(name="Cause of Delay", labels=c("CARRIER_DELAY", "WEATHER_DELAY", "NAS_DELAY", "SECURITY_DELAY", "LATE_AIRCRAFT_DELAY" )) +
  scale_y_continuous(name ="Cumulative minutes delayed by cause of delay", labels = scales::comma ) +
  scale_color_discrete(name = "Cause of Delay", labels=c("CARRIER_DELAY", "WEATHER_DELAY", "NAS_DELAY", "SECURITY_DELAY", "LATE_AIRCRAFT_DELAY" )) +
  theme_minimal()

4.0 ON TIME PERFORMANCE: Arrived flights

ON TIME PERFORMANCE: In 2017, 79.28 percent of the flights at US airports arrived within 15 minutes of the scheduled arrival time.

Percent of Arrival within 15 minutes of schedule

6.Heatmap

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

LS0tDQp0aXRsZTogJ0RhdGEgQW5hbHlzaXMgQWlybGluZSBPbi10aW1lIFBlcmZvcm1hbmNlICcNCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBodG1sX2RvY3VtZW50OiBkZWZhdWx0DQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0KICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0DQotLS0NClJlaW5hbGRvIFplemVsYSANClVuaXZlcnNpdHkgb2YgRGVyYnksIFVLDQpyLnplemVsYTFAdW5pbWFpbC5kZXJieS5hYy51ayANCk1heSAyMDE4DQoNCg0KVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gDQoNCg0KKiBMb29kaW5nIHRoZSBmbGlnaHRzIE9uLXRpbWUgUGVyZm9ybWFuY2UgZGF0YXNldC4NCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ3RoZW1lcykNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQpGTElHSFRTIDwtIHJlYWQuY3N2KCJGTElHSFRTLmNzdiIpDQoNCmhlYWQoRkxJR0hUUykNCg0KYGBgDQoNCiogQ3JlYXRlIERhdGEgRnJhbWU6IENBUlJJRVINCg0KYGBge3J9DQpDT0RFID0gYyggIkFBIiwgIkFTIiwgIkI2IiwgIkRMIiwgIkVWIiwgIkY5IiwgIkhBIiwgIk5LIiwgIk9PIiwgIlVBIiwgIlZYIiwgIldOIiApDQogIERFU0NSSVBUSU9OIDwtIGMoIkFtZXJpY2FuIEFpcmxpbmVzIEluYy4iLCAiQWxhc2thIEFpcmxpbmVzIEluYy4iLCAiSmV0Qmx1ZSBBaXJ3YXlzIiwgIkRlbHRhIEFpciBMaW5lcyBJbmMuIiwgIkV4cHJlc3NKZXQgQWlybGluZXMgSW5jLiIsICJGcm9udGllciBBaXJsaW5lcyBJbmMuIiwgIkhhd2FpaWFuIEFpcmxpbmVzIEluYy4iLCAiU3Bpcml0IEFpciBMaW5lcyIsICJTa3lXZXN0IEFpcmxpbmVzIEluYy4iLCAiVW5pdGVkIEFpciBMaW5lcyBJbmMuIiwgIlZpcmdpbiBBbWVyaWNhIiwgIlNvdXRod2VzdCBBaXJsaW5lcyBDby4iKQ0KICBDQVJSSUVSIDwtIGRhdGEuZnJhbWUoQ09ERSwgREVTQ1JJUFRJT04pDQoNCiAgQ0FSUklFUg0KDQpgYGANCg0KICANCiMyLjAgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoqIFRoZSBBdmVyYWdlIEFycml2YWwgRGVsYXlzIChNaW51dGVzKSBieSBBaXJsaW5lIGluIDIwMTcNCg0KYGBge3J9DQojIFByZXBhcmUgZGF0YTogZ3JvdXAgbWVhbiBBcnJpdmFsIGRlbGF5IGJ5IEFpcmxpbmUgaW4gMjAxNw0KdGJsX2F2ZyA8LSBGTElHSFRTICU+JQ0KICBncm91cF9ieShDQVJSSUVSKSAlPiUNCnN1bW1hcmlzZShhdmdfQXJyX2RlbGF5ID0gcm91bmQobWVhbihBUlJfREVMQVlfTkVXLCBuYS5ybSA9IFRSVUUpLCBkaWdpdHM9MikpICU+JQ0KICBhcnJhbmdlKC4kYXZnX0Fycl9kZWxheSkNCg0KaGVhZCh0YmxfYXZnKQ0KYGBgDQoNCg0KKiogTWVyZ2UgdGhlIHN1YnNldCh0YmxfYXZnKSB3aXRoIENBUlJJRVIgdGFibGUgKGRhdGEgZnJhbWUpIGluIG9yZGVyIHRvIGdldCB0aGUgQWlybGluZSBuYW1lDQpgYGB7cn0NCiNDQVJSSUVSDQoNCm0xIDwtIG1lcmdlKHRibF9hdmcsIENBUlJJRVIsIGJ5LnggPSJDQVJSSUVSIiwgYnkueSA9ICJDT0RFIiApDQoNCmhlYWQobTEpDQpgYGANCg0KKlBsb3R0aW5nIGF2ZXJhZ2UgYXJyaXZhbCBkZWxheSBieSBBaXJsaW5lDQoNCmBgYHtyfQ0KIyBwbG90IGF2ZXJhZ2UgYXJyaXZhbCBkZWxheSBieSBBaXJsaW5lIC0gU29sdXRpb24yDQpnZ3Bsb3QobTEsIGFlcyh4PXJlb3JkZXIoREVTQ1JJUFRJT04sYXZnX0Fycl9kZWxheSksIHk9YXZnX0Fycl9kZWxheSkpICsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiLCBmaWxsPSJ0b21hdG8iKSArDQogIGdlb21fdGV4dChhZXMobGFiZWw9YXZnX0Fycl9kZWxheSksdmp1c3Q9MS42LCBjb2xvcj0id2hpdGUiLCBzaXplPTMuNSkgKw0KICB4bGFiKCJBaXJsaW5lIikgKw0KICB5bGFiKCJBdmVyYWdlIEFycml2YWwgRGVsYXkiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkNCmBgYA0KDQoNCg0KIyAzLjAJQ2F1c2Ugb2YgRGVsYXkNCg0KKjMuMSBDdW11bGF0aXZlIG1pbnV0ZXMgZGVsYXllZCBieSBjYXVzZSBvZiBkZWxheQ0KDQpgYGB7cn0NCkZMSUdIVFMkRkxfREFURSA8LSBhcy5EYXRlKEZMSUdIVFMkRkxfREFURSwiJWQvJW0vJVkiKSANCg0KaGVhZChGTElHSFRTKQ0KDQp0YmxfZGVsYXlfdHlwZSA8LSBGTElHSFRTICU+JQ0KICBtdXRhdGUoTU9OVEggPSBmbG9vcl9kYXRlKEZMX0RBVEUsIm1vbnRoIikpICU+JQ0KICBncm91cF9ieShNT05USCkgJT4lDQogIHN1bW1hcmlzZShDQVJSSUVSX0RFTEFZPXN1bShDQVJSSUVSX0RFTEFZLG5hLnJtID0gVFJVRSksIFdFQVRIRVJfREVMQVk9c3VtKFdFQVRIRVJfREVMQVksbmEucm0gPSBUUlVFKSwgTkFTX0RFTEFZPXN1bShOQVNfREVMQVksbmEucm0gPSBUUlVFKSwgU0VDVVJJVFlfREVMQVk9c3VtKFNFQ1VSSVRZX0RFTEFZLG5hLnJtID0gVFJVRSksIExBVEVfQUlSQ1JBRlRfREVMQVk9c3VtKExBVEVfQUlSQ1JBRlRfREVMQVksbmEucm0gPSBUUlVFKSkgDQoNCg0KI2NvbG5hbWVzKHRibF9kZWxheV90eXBlKSA8LSBjKCJNT05USCIsIkNBUlJJRVJfREVMQVkiLCAiV0VBVEhFUl9ERUxBWSIsICJOQVNfREVMQVkiLCAiU0VDVVJJVFlfREVMQVkiLCAiTEFURV9BSVJDUkFGVF9ERUxBWSIgKQ0KDQpoZWFkKHRibF9kZWxheV90eXBlKQ0KYGBgDQoNCg0KKlBsb3R0aW5nIENhdXNlcyBvZiBkZWxheQ0KYGBge3J9DQpnZ3Bsb3QodGJsX2RlbGF5X3R5cGUsIGFlcyh4PU1PTlRIKSkgKw0KICBnZW9tX2xpbmUoYWVzKHk9Q0FSUklFUl9ERUxBWSwgY29sb3IgPSAiZGFya3JlZCIpKSArDQogIGdlb21fbGluZShhZXMoeT1XRUFUSEVSX0RFTEFZLCBjb2xvcj0ic3RlZWxibHVlIiksIGxpbmV0eXBlPSJ0d29kYXNoIikgKw0KICBnZW9tX2xpbmUoYWVzKHk9TkFTX0RFTEFZLCBjb2xvciA9ICIjOTk5OTk5IikpICsNCiAgZ2VvbV9saW5lKGFlcyh5PVNFQ1VSSVRZX0RFTEFZLCBjb2xvciA9ICIjRTY5RjAwIikpICsgIA0KICBnZW9tX2xpbmUoYWVzKHk9TEFURV9BSVJDUkFGVF9ERUxBWSwgY29sb3IgPSAiYmxhY2siKSkgKw0KICAjc2NhbGVfZmlsbF9kaXNjcmV0ZShuYW1lPSJDYXVzZSBvZiBEZWxheSIsIGxhYmVscz1jKCJDQVJSSUVSX0RFTEFZIiwgIldFQVRIRVJfREVMQVkiLCAiTkFTX0RFTEFZIiwgIlNFQ1VSSVRZX0RFTEFZIiwgIkxBVEVfQUlSQ1JBRlRfREVMQVkiICkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSJDdW11bGF0aXZlIG1pbnV0ZXMgZGVsYXllZCBieSBjYXVzZSBvZiBkZWxheSIsIGxhYmVscyA9IHNjYWxlczo6Y29tbWEgKSArDQogIHNjYWxlX2NvbG9yX2Rpc2NyZXRlKG5hbWUgPSAiQ2F1c2Ugb2YgRGVsYXkiLCBsYWJlbHM9YygiQ0FSUklFUl9ERUxBWSIsICJXRUFUSEVSX0RFTEFZIiwgIk5BU19ERUxBWSIsICJTRUNVUklUWV9ERUxBWSIsICJMQVRFX0FJUkNSQUZUX0RFTEFZIiApKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCg0KIzQuMCBPTiBUSU1FIFBFUkZPUk1BTkNFOiBBcnJpdmVkIGZsaWdodHMNCg0KDQpPTiBUSU1FIFBFUkZPUk1BTkNFOiBJbiAyMDE3LCA3OS4yOCBwZXJjZW50IG9mIHRoZSBmbGlnaHRzIGF0IFVTIGFpcnBvcnRzIGFycml2ZWQgd2l0aGluIDE1IG1pbnV0ZXMgb2YgdGhlIHNjaGVkdWxlZCBhcnJpdmFsIHRpbWUuDQoNClBlcmNlbnQgb2YgQXJyaXZhbCB3aXRoaW4gMTUgbWludXRlcyBvZiBzY2hlZHVsZQ0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dyZXBlbCkNCg0KZGYgPC0gRkxJR0hUUyAlPiUNCiAgZmlsdGVyKCFpcy5uYShERUxBWV9TVEFUVVMpKSAlPiUNCiAgZ3JvdXBfYnkoQ0FSUklFUiklPiUNCiAgc3VtbWFyaXNlKE51bV9mbGlnaHRzPW4oKSwNCiAgICAgICAgICAgIE51bV9PbnRpbWU9c3VtKERFTEFZX1NUQVRVUz09MCksDQogICAgICAgICAgICBQQ1Q9IHJvdW5kKE51bV9PbnRpbWUvTnVtX2ZsaWdodHMsNCkqMTAwKQ0KDQoNCnJlZl9hdmcgPC0gZGYgJT4lDQogIHN1bW1hcmlzZShhdmVyYWdlPW1lYW4oUENUKSkgJT4lDQogIC4kYXZlcmFnZQ0KDQpyZWZfYXZnIDwtIHJvdW5kKHJlZl9hdmcsMikNCg0KZGYkZGVsYXlfdHlwZSA8LSBpZmVsc2UoZGYkUENUIDwgcmVmX2F2ZywgImJlbG93IiwgImFib3ZlIikgICMgYWJvdmUgLyBiZWxvdyBhdmcgZmxhZw0KDQptMiA8LSBtZXJnZShkZiwgQ0FSUklFUiwgYnkueCA9IkNBUlJJRVIiLCBieS55ID0gIkNPREUiICkNCg0KIyBQbG90IC0gc29sdXRpb24gMw0KZ2dwbG90KG0yLCBhZXMoeD1OdW1fZmxpZ2h0cywgeT1QQ1QsIGxhYmVsPSBERVNDUklQVElPTiAsIGNvbG9yPWRlbGF5X3R5cGUpKSArDQogIGdlb21fcG9pbnQoYWVzKHNpemU9TnVtX2ZsaWdodHMpKSArDQogICNnZW9tX3RleHQoaGp1c3QgPSAwLjIsIHZqdXN0PS0wLjgpICsNCiAgZ2VvbV90ZXh0X3JlcGVsKCkgKw0KICAjc2NhbGVfeF9sb2cxMCgpICsNCiAgI3NjYWxlX3lfbG9nMTAoKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0iTnVtYmVyIG9mIGZsaWdodHMiLCBsYWJlbHMgPSBzY2FsZXM6OmNvbW1hICkgKw0KICAjc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSJQZXJjZW50IG9mIEFycml2YWwgd2l0aGluIDE1IG1pbnV0ZXMiICkNCiAgI3hsYWIoIk51bWJlciBvZiBmbGlnaHRzIikgKw0KICB5bGFiKCJQZXJjZW50IG9mIEFycml2YWwgd2l0aGluIDE1IG1pbnV0ZXMiKSArDQogIGdndGl0bGUoIkluIDIwMTcsIDc5LjI4JSBvZiB0aGUgZmxpZ2h0cyBhcnJpdmVkIHdpdGhpbiAxNSBtaW51dGVzLiIpICsNCiAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdD1yZWZfYXZnKSwgbHR5PTIpICsNCiAgc2NhbGVfY29sb3JfZGlzY3JldGUobmFtZT0iRGVsYXlfVHlwZSIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KDQoNCiM1LkdlbmVyYWwgRGVsYXkgVHJlbmRzIA0KDQpgYGB7cn0NCmRmIDwtIEZMSUdIVFMlPiUNCiAgZ3JvdXBfYnkoRkxfREFURSwgREFZX09GX1dFRUssIENBUlJJRVIpJT4lDQogIHN1bW1hcmlzZShBVkdfREVQX0RFTEFZPSBtZWFuKERFUF9ERUxBWV9ORVcsbmEucm09VFJVRSkpDQoNCmRmJEZMX0RBVEUgPC0gYXMuRGF0ZShkZiRGTF9EQVRFLCAiJWQvJW0vJVkiKQ0KDQpyZXF1aXJlKHNjYWxlcykNCg0KZ2dwbG90KGRmLCBhZXMoeD1GTF9EQVRFLCB5PUFWR19ERVBfREVMQVkpKSArDQogIGdlb21fcG9pbnQoKSArIA0KICAjc3RhdF9zbW9vdGgobWV0aG9kID0gImxvZXNzIikgKw0KICBnZW9tX3Ntb290aChjb2xvciA9ICdSZWQnLCBtZXRob2QgPSAnbG9lc3MnLCBzZT1GQUxTRSkgKw0KICAjZmFjZXRfd3JhcCh+IENBUlJJRVIpICsNCiAgc2NhbGVfeF9kYXRlKGJyZWFrcyA9IGRhdGVfYnJlYWtzKCJtb250aHMiKSwNCiAgICAgICAgICAgICAgIGxhYmVscyA9IGRhdGVfZm9ybWF0KCIlYiIpKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkNCmBgYA0KDQojIzUuMS4gUGxvdHRpbmcgZmFjZXRfd3JhcCAtIEdlbmVyYWwgRGVsYXkgVHJlbmRzIA0KDQpgYGB7cn0NCg0KbV9UUkVORF9ERUxBWSA8LSBtZXJnZShkZixDQVJSSUVSLCBieS54ID0gIkNBUlJJRVIiLCBieS55ID0gIkNPREUiKQ0KDQojaGVhZChtX1RSRU5EX0RFTEFZKQ0KDQoNCiMgUGxvdHRpbmcgQWlybGluZSBuYW1lIC0gR2VuZXRhbCBUcmVuZCBEZWxheQ0KDQpnZ3Bsb3QobV9UUkVORF9ERUxBWSwgYWVzKHg9RkxfREFURSwgeT1BVkdfREVQX0RFTEFZKSkgKw0KICBnZW9tX3BvaW50KCkgKyANCiAgI3N0YXRfc21vb3RoKG1ldGhvZCA9ICJsb2VzcyIpICsNCiAgZ2VvbV9zbW9vdGgoY29sb3IgPSAnUmVkJywgbWV0aG9kID0gJ2xvZXNzJywgc2U9RkFMU0UpICsNCiAgZmFjZXRfd3JhcCh+IERFU0NSSVBUSU9OKSArDQogIHNjYWxlX3hfZGF0ZShicmVha3MgPSBkYXRlX2JyZWFrcygibW9udGhzIiksDQogICAgICAgICAgICAgICBsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJWIiKSkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpDQpgYGANCg0KDQoNCg0KDQojNi5IZWF0bWFwDQoNCmBgYHtyfQ0KZGYgPC0gRkxJR0hUUyAlPiUNCiAgZ3JvdXBfYnkoRkxfREFURSxDQVJSSUVSLERFUF9USU1FX0JMSyxEQVlfT0ZfV0VFSykgJT4lDQogIHN1bW1hcmlzZShBVkdfREVQX0RFTEFZPW1lYW4oREVQX0RFTEFZX05FVyxuYS5ybT1UUlVFKSkNCg0KZGYkRkxfREFURSA8LSBhcy5EYXRlKGRmJEZMX0RBVEUsICIlZC8lbS8lWSIpIA0KZGYkQ0FSUklFUiA8LSBhcy5mYWN0b3IoZGYkQ0FSUklFUikNCmRmJERBWV9PRl9XRUVLIDwtIGFzLmZhY3RvcihkZiREQVlfT0ZfV0VFSykNCmRmJERFUF9USU1FX0JMSyA8LSBhcy5mYWN0b3IoZGYkREVQX1RJTUVfQkxLKQ0KDQojIFBsb3QNCmdncGxvdChkZiwgYWVzKHg9REVQX1RJTUVfQkxLLHk9REFZX09GX1dFRUssIGZpbGw9QVZHX0RFUF9ERUxBWSApKSArDQogIGdlb21fdGlsZShjb2xvciA9ICJ3aGl0ZSIpICsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3c9IiMwMEFGQkIiLCBoaWdoPSJibGFjayIpICsNCiAgI3NjYWxlX2ZpbGxfZ3JhZGllbnQobG93PSIjMDBBRkJCIiwgaGlnaD0iI0ZDNEUwNyIpICsNCiAgI3NjYWxlX2NvbG9yX2dyYWRpZW50MihtaWRwb2ludCA9IG1pZCwgbG93ID0gImJsdWUiLCBtaWQgPSAid2hpdGUiLCBoaWdoID0gInJlZCIsIHNwYWNlID0gIkxhYiIpICsNCiAgI2ZhY2V0X2dyaWQoQ0FSUklFUiB+IGFzLmZhY3Rvcihmb3JtYXQoZGYkRkxfREFURSwgIiViIikpICkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCkFkZCBhIG5ldyBjaHVuayBieSBjbGlja2luZyB0aGUgKkluc2VydCBDaHVuayogYnV0dG9uIG9uIHRoZSB0b29sYmFyIG9yIGJ5IHByZXNzaW5nICpDdHJsK0FsdCtJKi4NCg0KV2hlbiB5b3Ugc2F2ZSB0aGUgbm90ZWJvb2ssIGFuIEhUTUwgZmlsZSBjb250YWluaW5nIHRoZSBjb2RlIGFuZCBvdXRwdXQgd2lsbCBiZSBzYXZlZCBhbG9uZ3NpZGUgaXQgKGNsaWNrIHRoZSAqUHJldmlldyogYnV0dG9uIG9yIHByZXNzICpDdHJsK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuDQo=