Load lesson dependencies..

library(swirl)
install_from_swirl("Exploratory Data Analysis")
library(ggplot2)
library(jpeg)


Slides for this and other Data Science courses may be found at github. If you care to use them, they must be downloaded as a zip file and viewed locally. This lesson corresponds to 04_ExploratoryAnalysis/Principles_of_Analytic_Graphics.

In this lesson, we’ll discuss some basic principles of presenting data effectively. These will illustrate some fundamental concepts of displaying results in order to make them more meaningful and convincing. These principles are cribbed from Edward Tufte’s great 2006 book, “Beautiful Evidence”. You can read more about them at the www.edwardtufte.com website.

The following would be a good use of analytic graphing:

  1. To show multivariate data
  2. To show causality, mechanism, explanation
  3. To show comparisons

You’re ready to start. Graphs give us a visual form of data, and the first principle of analytic graphs is to show some comparison. You’ll hear more about this when you study statistical inference (another great course BTW), but evidence for a hypothesis is always relative to another competing or alternative hypothesis.

When presented with a claim that something is good, you should always ask “Compared to What?” This is why in commercials you often hear the phrase “other leading brands”. An implicit comparison, right?


Consider this boxplot which shows the relationship between the use of an air cleaner and the number of symptom-free days of asthmatic children. (The top and bottom lines of the box indicate the 25% and 75% quartiles of the data, and the horizontal line in the box shows the 50%.) Since the box is above 0, the number of symptom-free days for children with asthma is bigger using the air cleaner. This is good, right?

How many days of improvement does the median correspond to?

Answers:

1

While it’s somewhat informative, it’s also somewhat cryptic, since the y-axis is claiming to show a change in number of symptom-free days. Wouldn’t it be better to show a comparison?


Like this? Here’s a graphic which shows two boxplots, the one on the left showing the results for a control group that doesn’t use an air cleaner alongside the previously shown boxplot.

By showing the two boxplots side by side, you can clearly see that using the air cleaner increases the number of symptom-free days for most asthmatic children. The plot on the right (using the air cleaner) is generally higher than the one on the left (the control group).

What does this graph NOT show you?

  1. 75% of the children using the air cleaner had at most 3 symptom-free days
  2. Half the chidren in the control group had no improvement
  3. Using the air cleaner makes asthmatic children sicker
  4. Children in the control group had at most 3 symptom-free days


So the first principle was to show a comparison. The second principle is to show causality or a mechanism of how your theory of the data works. This explanation or systematic structure shows your causal framework for thinking about the question you’re trying to answer.

Consider this plot which shows the dual boxplot we just showed, but next to it we have a corresponding plot of changes in measures of particulate matter.

This picture tries to explain how the air cleaner increases the number of symptom-free days for asthmatic children. What mechanism does the graph imply?

  1. That the air cleaner reduces pollution
  2. That the children in the control group are healthier
  3. That the air cleaner increases pollution
  4. That the air in the control group is cleaner than the air in the other group

By showing the two sets of boxplots side by side you’re explaining your theory of why the air cleaner increases the number of symptom-free days.

So the first principle was to show some comparison, the second was to show a mechanism, so what will the third principle say to show?


Multivariate data!

What is multivariate data you might ask? In technical (scientific) literature this term means more than 2 variables. Two-variable plots are what you saw in high school algebra. Remember those x,y plots when you were learning about slopes and intercepts and equations of lines? They’re valuable, but usually questions are more complicated and require more variables.

Sometimes, if you restrict yourself to two variables you’ll be misled and draw an incorrect conclusion.

Consider this plot which shows the relationship between air pollution (x-axis) and mortality rates among the elderly (y-axis). The blue regression line shows a surprising result. (You’ll learn about regression lines when you take the fabulous Regression Models course.)

What does the blue regression line indicate?

  1. As pollution increases the number of deaths doesn’t change
  2. Pollution doesn’t really increase, it just gets reported more
  3. As pollution increases fewer people die
  4. As pollution increases more people die

Fewer deaths with more pollution? That’s a surprise! Something’s gotta be wrong, right? In fact, this is an example of Simpson’s paradox, or the Yule–Simpson effect. It tells us that this “is a paradox in probability and statistics, in which a trend that appears in different groups of data disappears when these groups are combined.

Suppose we divided this mortality/pollution data into the four seasons. Would we see different trends?

Yes, we do! Plotting the same data for the 4 seasons individually we see a different result.

What does the new plot indicate?

  1. As pollution increases the seasons change
  2. Pollution doesn’t really increase, it just gets reported more
  3. As pollution increases more people die in all seasons
  4. As pollution increases fewer people die in all seasons


The fourth principle of analytic graphing involves integrating evidence. This means not limiting yourself to one form of expression. You can use words, numbers, images as well as diagrams. Graphics should make use of many modes of data presentation. Remember, “Don’t let the tool drive the analysis!”

To show you what we mean, here’s an example of a figure taken from a paper published in the Journal of the AMA. It shows the relationship between pollution and hospitalization of people with heart disease.

As you can see, it’s a lot different from our previous plots. The solid circles in the center portion indicate point estimates of percentage changes in hospitalization rates for different levels of pollution. The lines through the circles indicate confidence intervals associated with these estimates. (You’ll learn more about confidence intervals in another great course, the one on statistical inference.)

Note that on the right side of the figure is another column of numbers, one for each of the point estimates given. This column shows posterior probabilities that relative risk is greater than 0. This, in effect, is a measure of the strength of the evidence showing the correlation between pollution and hospitalization. The point here is that all of this information is located in one picture so that the reader can see the strength of not only the correlations but the evidence as well.




The fifth principle of graphing involves describing and documenting the evidence with sources and appropriate labels and scales. Credibility is important so the data graphics should tell a complete story. Also, using R, you want to preserve any code you use to generate your data and graphics so that the research can be replicated if necessary. This allows for easy verification or finding bugs in your analysis.


The sixth and final principle of analytic graphing is maybe the most important. Content is king! If you don’t have something interesting to report, your graphs won’t save you. Analytical presentations ultimately stand or fall depending on the quality, relevance, and integrity of their content.


Review time!!!

Which of the following is NOT a good principle of graphing?

  1. Having unreadable labels
  2. Content is king
  3. To describe and document evidence
  4. To integrate multiple modes of evidence

Which of the following is NOT a good principle of graphing?

  1. To prove you’re always right
  2. To demonstrate a causative mechanism underlying a correlation
  3. Content is king
  4. To show two competing hypotheses

Which of the following is NOT a good principle of graphing?

  1. To integrate different types of evidence
  2. To show good labels and scales
  3. Content is king
  4. To show that some fonts are better than others

True or False? Color is king.

  1. False
  2. True


Congrats! You’ve concluded exploring this lesson on principles of graphing. We hope you found it principally principled.




END



LS0tDQp0aXRsZTogIlByaW5jaXBsZXMgb2YgQW5hbHl0aWMgR3JhcGhzIg0Kc3VidGl0bGU6ICJTd2lybCBFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzIExlc3NvbiAxIg0KYXV0aG9yOiAiUm9nZXIgRC4gUGVuZyAoY29tcGlsZWQgYW5kIGVkaXRlZCBieTogTnVubm8gTnVncm9obykiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQo8L2JyPg0KDQpMb2FkIGxlc3NvbiBkZXBlbmRlbmNpZXMuLg0KYGBge3J9DQpsaWJyYXJ5KHN3aXJsKQ0KaW5zdGFsbF9mcm9tX3N3aXJsKCJFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzIikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoanBlZykNCmBgYA0KDQo8L2JyPg0KDQpTbGlkZXMgZm9yIHRoaXMgYW5kIG90aGVyIERhdGEgU2NpZW5jZSBjb3Vyc2VzIG1heSBiZSBmb3VuZCBhdCBbZ2l0aHViXShodHRwczovL2dpdGh1Yi5jb20vRGF0YVNjaWVuY2VTcGVjaWFsaXphdGlvbi9jb3Vyc2VzLykuIElmIHlvdSBjYXJlIHRvIHVzZSB0aGVtLCB0aGV5IG11c3QgYmUgZG93bmxvYWRlZCBhcyBhIHppcCBmaWxlIGFuZCB2aWV3ZWQgbG9jYWxseS4gVGhpcyBsZXNzb24gY29ycmVzcG9uZHMgdG8gMDRfRXhwbG9yYXRvcnlBbmFseXNpcy9QcmluY2lwbGVzX29mX0FuYWx5dGljX0dyYXBoaWNzLg0KDQpJbiB0aGlzIGxlc3Nvbiwgd2UnbGwgZGlzY3VzcyBzb21lIGJhc2ljIHByaW5jaXBsZXMgb2YgcHJlc2VudGluZyBkYXRhIGVmZmVjdGl2ZWx5LiBUaGVzZSB3aWxsIGlsbHVzdHJhdGUgc29tZSBmdW5kYW1lbnRhbCBjb25jZXB0cyBvZiBkaXNwbGF5aW5nIHJlc3VsdHMgaW4gb3JkZXIgdG8gbWFrZSB0aGVtIG1vcmUgbWVhbmluZ2Z1bCBhbmQgY29udmluY2luZy4gVGhlc2UgcHJpbmNpcGxlcyBhcmUgY3JpYmJlZCBmcm9tIEVkd2FyZCBUdWZ0ZSdzIGdyZWF0IDIwMDYgYm9vaywgKiJCZWF1dGlmdWwgRXZpZGVuY2UiKi4gWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhlbSBhdCB0aGUgd3d3LmVkd2FyZHR1ZnRlLmNvbSB3ZWJzaXRlLg0KDQpUaGUgZm9sbG93aW5nIHdvdWxkIGJlIGEgZ29vZCB1c2Ugb2YgYW5hbHl0aWMgZ3JhcGhpbmc6DQoNCjEuIFRvIHNob3cgbXVsdGl2YXJpYXRlIGRhdGENCjIuIFRvIHNob3cgY2F1c2FsaXR5LCBtZWNoYW5pc20sIGV4cGxhbmF0aW9uDQozLiBUbyBzaG93IGNvbXBhcmlzb25zDQoNCllvdSdyZSByZWFkeSB0byBzdGFydC4gR3JhcGhzIGdpdmUgdXMgYSB2aXN1YWwgZm9ybSBvZiBkYXRhLCBhbmQgdGhlIGZpcnN0IHByaW5jaXBsZSBvZiBhbmFseXRpYyBncmFwaHMgaXMgdG8gc2hvdyBzb21lIGNvbXBhcmlzb24uIFlvdSdsbCBoZWFyIG1vcmUgYWJvdXQgdGhpcyB3aGVuIHlvdSBzdHVkeSBzdGF0aXN0aWNhbCBpbmZlcmVuY2UgKGFub3RoZXIgZ3JlYXQgY291cnNlIEJUVyksIGJ1dCBldmlkZW5jZSBmb3IgYSBoeXBvdGhlc2lzIGlzIGFsd2F5cyByZWxhdGl2ZSB0byBhbm90aGVyIGNvbXBldGluZyBvciBhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzLg0KDQpXaGVuIHByZXNlbnRlZCB3aXRoIGEgY2xhaW0gdGhhdCBzb21ldGhpbmcgaXMgZ29vZCwgeW91IHNob3VsZCBhbHdheXMgYXNrICJDb21wYXJlZCB0byBXaGF0PyIgVGhpcyBpcyB3aHkgaW4gY29tbWVyY2lhbHMgeW91IG9mdGVuIGhlYXIgdGhlIHBocmFzZSAib3RoZXIgbGVhZGluZyBicmFuZHMiLiBBbiBpbXBsaWNpdCBjb21wYXJpc29uLCByaWdodD8NCg0KPC9icj4NCg0KPGltZyBzdHlsZT0gImZsb2F0OmxlZnQ7IHBvc2l0aW9uOiByZWxhdGl2ZTsgbWFyZ2luLXJpZ2h0OiAyNXB4IiBzcmM9ImltYWdlcy9HcmFwaDAxLnBuZyIvPg0KDQpDb25zaWRlciB0aGlzIGJveHBsb3Qgd2hpY2ggc2hvd3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB1c2Ugb2YgYW4gYWlyIGNsZWFuZXIgYW5kIHRoZSBudW1iZXIgb2Ygc3ltcHRvbS1mcmVlIGRheXMgb2YgYXN0aG1hdGljIGNoaWxkcmVuLiAoVGhlIHRvcCBhbmQgYm90dG9tIGxpbmVzIG9mIHRoZSBib3ggaW5kaWNhdGUgdGhlIDI1JSBhbmQgNzUlIHF1YXJ0aWxlcyBvZiB0aGUgZGF0YSwgYW5kIHRoZSBob3Jpem9udGFsIGxpbmUgaW4gdGhlIGJveCBzaG93cyB0aGUgNTAlLikgU2luY2UgdGhlIGJveCBpcyBhYm92ZSAwLCB0aGUgbnVtYmVyIG9mIHN5bXB0b20tZnJlZSBkYXlzIGZvciBjaGlsZHJlbiB3aXRoIGFzdGhtYSBpcyBiaWdnZXIgdXNpbmcgdGhlIGFpciBjbGVhbmVyLiBUaGlzIGlzIGdvb2QsIHJpZ2h0Pw0KDQpIb3cgbWFueSBkYXlzIG9mIGltcHJvdmVtZW50IGRvZXMgdGhlIG1lZGlhbiBjb3JyZXNwb25kIHRvPw0KDQoqKkFuc3dlcnM6KioNCg0KMQ0KDQpXaGlsZSBpdCdzIHNvbWV3aGF0IGluZm9ybWF0aXZlLCBpdCdzIGFsc28gc29tZXdoYXQgY3J5cHRpYywgc2luY2UgdGhlIHktYXhpcyBpcyBjbGFpbWluZyB0byBzaG93IGEgY2hhbmdlIGluIG51bWJlciBvZiBzeW1wdG9tLWZyZWUgZGF5cy4gV291bGRuJ3QgaXQgYmUgYmV0dGVyIHRvIHNob3cgYSBjb21wYXJpc29uPw0KDQo8L2JyPg0KDQo8aW1nIHN0eWxlPSAiZmxvYXQ6bGVmdDsgcG9zaXRpb246IHJlbGF0aXZlOyBtYXJnaW4tcmlnaHQ6IDI1cHgiIHNyYz0iaW1hZ2VzL0dyYXBoMDIucG5nIi8+DQoNCkxpa2UgdGhpcz8gSGVyZSdzIGEgZ3JhcGhpYyB3aGljaCBzaG93cyB0d28gYm94cGxvdHMsIHRoZSBvbmUgb24gdGhlIGxlZnQgc2hvd2luZyB0aGUgcmVzdWx0cyBmb3IgYSBjb250cm9sIGdyb3VwIHRoYXQgZG9lc24ndCB1c2UgYW4gYWlyIGNsZWFuZXIgYWxvbmdzaWRlIHRoZSBwcmV2aW91c2x5IHNob3duIGJveHBsb3QuDQoNCkJ5IHNob3dpbmcgdGhlIHR3byBib3hwbG90cyBzaWRlIGJ5IHNpZGUsIHlvdSBjYW4gY2xlYXJseSBzZWUgdGhhdCB1c2luZyB0aGUgYWlyIGNsZWFuZXIgaW5jcmVhc2VzIHRoZSBudW1iZXIgb2Ygc3ltcHRvbS1mcmVlIGRheXMgZm9yIG1vc3QgYXN0aG1hdGljIGNoaWxkcmVuLiBUaGUgcGxvdCBvbiB0aGUgcmlnaHQgKHVzaW5nIHRoZSBhaXIgY2xlYW5lcikgaXMgZ2VuZXJhbGx5IGhpZ2hlciB0aGFuIHRoZSBvbmUgb24gdGhlIGxlZnQgKHRoZSBjb250cm9sIGdyb3VwKS4NCg0KV2hhdCBkb2VzIHRoaXMgZ3JhcGggTk9UIHNob3cgeW91Pw0KDQogIDEuIDc1JSBvZiB0aGUgY2hpbGRyZW4gdXNpbmcgdGhlIGFpciBjbGVhbmVyIGhhZCBhdCBtb3N0IDMgc3ltcHRvbS1mcmVlIGRheXMNCiAgMi4gSGFsZiB0aGUgY2hpZHJlbiBpbiB0aGUgY29udHJvbCBncm91cCBoYWQgbm8gaW1wcm92ZW1lbnQNCiAgMy4gKipVc2luZyB0aGUgYWlyIGNsZWFuZXIgbWFrZXMgYXN0aG1hdGljIGNoaWxkcmVuIHNpY2tlcioqDQogIDQuIENoaWxkcmVuIGluIHRoZSBjb250cm9sIGdyb3VwIGhhZCBhdCBtb3N0IDMgc3ltcHRvbS1mcmVlIGRheXMNCg0KPC9icj4NCg0KU28gdGhlIGZpcnN0IHByaW5jaXBsZSB3YXMgdG8gc2hvdyBhIGNvbXBhcmlzb24uIFRoZSBzZWNvbmQgcHJpbmNpcGxlIGlzIHRvIHNob3cgY2F1c2FsaXR5IG9yIGEgbWVjaGFuaXNtIG9mIGhvdyB5b3VyIHRoZW9yeSBvZiB0aGUgZGF0YSB3b3Jrcy4gVGhpcyBleHBsYW5hdGlvbiBvciBzeXN0ZW1hdGljIHN0cnVjdHVyZSBzaG93cyB5b3VyIGNhdXNhbCBmcmFtZXdvcmsgZm9yIHRoaW5raW5nIGFib3V0IHRoZSBxdWVzdGlvbiB5b3UncmUgdHJ5aW5nIHRvIGFuc3dlci4NCg0KPGltZyBzdHlsZT0gImZsb2F0OmxlZnQ7IHBvc2l0aW9uOiByZWxhdGl2ZTsgbWFyZ2luLXJpZ2h0OiAyNXB4IiBzcmM9ImltYWdlcy9HcmFwaDAzLnBuZyIvPg0KDQpDb25zaWRlciB0aGlzIHBsb3Qgd2hpY2ggc2hvd3MgdGhlIGR1YWwgYm94cGxvdCB3ZSBqdXN0IHNob3dlZCwgYnV0IG5leHQgdG8gaXQgd2UgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgcGxvdCBvZiBjaGFuZ2VzIGluIG1lYXN1cmVzIG9mIHBhcnRpY3VsYXRlIG1hdHRlci4NCg0KVGhpcyBwaWN0dXJlIHRyaWVzIHRvIGV4cGxhaW4gaG93IHRoZSBhaXIgY2xlYW5lciBpbmNyZWFzZXMgdGhlIG51bWJlciBvZiBzeW1wdG9tLWZyZWUgZGF5cyBmb3IgYXN0aG1hdGljIGNoaWxkcmVuLiBXaGF0IG1lY2hhbmlzbSBkb2VzIHRoZSBncmFwaCBpbXBseT8NCg0KICAxLiAqKlRoYXQgdGhlIGFpciBjbGVhbmVyIHJlZHVjZXMgcG9sbHV0aW9uKioNCiAgMi4gVGhhdCB0aGUgY2hpbGRyZW4gaW4gdGhlIGNvbnRyb2wgZ3JvdXAgYXJlIGhlYWx0aGllcg0KICAzLiBUaGF0IHRoZSBhaXIgY2xlYW5lciBpbmNyZWFzZXMgcG9sbHV0aW9uDQogIDQuIFRoYXQgdGhlIGFpciBpbiB0aGUgY29udHJvbCBncm91cCBpcyBjbGVhbmVyIHRoYW4gdGhlIGFpciBpbiB0aGUgb3RoZXIgZ3JvdXANCg0KQnkgc2hvd2luZyB0aGUgdHdvIHNldHMgb2YgYm94cGxvdHMgc2lkZSBieSBzaWRlIHlvdSdyZSBleHBsYWluaW5nIHlvdXIgdGhlb3J5IG9mIHdoeSB0aGUgYWlyIGNsZWFuZXIgaW5jcmVhc2VzIHRoZSBudW1iZXIgb2Ygc3ltcHRvbS1mcmVlIGRheXMuDQoNClNvIHRoZSBmaXJzdCBwcmluY2lwbGUgd2FzIHRvICoqc2hvdyBzb21lIGNvbXBhcmlzb24qKiwgdGhlIHNlY29uZCB3YXMgdG8gKipzaG93IGEgbWVjaGFuaXNtKiosIHNvIHdoYXQgd2lsbCB0aGUgdGhpcmQgcHJpbmNpcGxlIHNheSB0byBzaG93Pw0KDQo8L2JyPg0KDQoqKk11bHRpdmFyaWF0ZSBkYXRhISoqDQoNCldoYXQgaXMgbXVsdGl2YXJpYXRlIGRhdGEgeW91IG1pZ2h0IGFzaz8gSW4gdGVjaG5pY2FsIChzY2llbnRpZmljKSBsaXRlcmF0dXJlIHRoaXMgdGVybSBtZWFucyBtb3JlIHRoYW4gMiB2YXJpYWJsZXMuIFR3by12YXJpYWJsZSBwbG90cyBhcmUgd2hhdCB5b3Ugc2F3IGluIGhpZ2ggc2Nob29sIGFsZ2VicmEuICBSZW1lbWJlciB0aG9zZSB4LHkgcGxvdHMgd2hlbiB5b3Ugd2VyZSBsZWFybmluZyBhYm91dCBzbG9wZXMgYW5kIGludGVyY2VwdHMgYW5kIGVxdWF0aW9ucyBvZiBsaW5lcz8gVGhleSdyZSB2YWx1YWJsZSwgYnV0IHVzdWFsbHkgcXVlc3Rpb25zIGFyZSBtb3JlIGNvbXBsaWNhdGVkIGFuZCByZXF1aXJlIG1vcmUgdmFyaWFibGVzLg0KDQpTb21ldGltZXMsIGlmIHlvdSByZXN0cmljdCB5b3Vyc2VsZiB0byB0d28gdmFyaWFibGVzIHlvdSdsbCBiZSBtaXNsZWQgYW5kIGRyYXcgYW4gaW5jb3JyZWN0IGNvbmNsdXNpb24uDQoNCjxpbWcgc3R5bGU9ICJmbG9hdDpsZWZ0OyBwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1yaWdodDogMjVweCIgc3JjPSJpbWFnZXMvR3JhcGgwNC5wbmciLz4NCg0KQ29uc2lkZXIgdGhpcyBwbG90IHdoaWNoIHNob3dzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhaXIgcG9sbHV0aW9uICh4LWF4aXMpIGFuZCBtb3J0YWxpdHkgcmF0ZXMgYW1vbmcgdGhlIGVsZGVybHkgKHktYXhpcykuIFRoZSBibHVlIHJlZ3Jlc3Npb24gbGluZSBzaG93cyBhIHN1cnByaXNpbmcgcmVzdWx0LiAoWW91J2xsIGxlYXJuIGFib3V0IHJlZ3Jlc3Npb24gbGluZXMgd2hlbiB5b3UgdGFrZSB0aGUgZmFidWxvdXMgUmVncmVzc2lvbiBNb2RlbHMgY291cnNlLikNCg0KV2hhdCBkb2VzIHRoZSBibHVlIHJlZ3Jlc3Npb24gbGluZSBpbmRpY2F0ZT8NCg0KICAxLiBBcyBwb2xsdXRpb24gaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YgZGVhdGhzIGRvZXNuJ3QgY2hhbmdlDQogIDIuIFBvbGx1dGlvbiBkb2Vzbid0IHJlYWxseSBpbmNyZWFzZSwgaXQganVzdCBnZXRzIHJlcG9ydGVkIG1vcmUNCiAgMy4gKipBcyBwb2xsdXRpb24gaW5jcmVhc2VzIGZld2VyIHBlb3BsZSBkaWUqKg0KICA0LiBBcyBwb2xsdXRpb24gaW5jcmVhc2VzIG1vcmUgcGVvcGxlIGRpZQ0KICANCkZld2VyIGRlYXRocyB3aXRoIG1vcmUgcG9sbHV0aW9uPyBUaGF0J3MgYSBzdXJwcmlzZSEgU29tZXRoaW5nJ3MgZ290dGEgYmUgd3JvbmcsIHJpZ2h0PyBJbiBmYWN0LCB0aGlzIGlzIGFuIGV4YW1wbGUgb2YgW1NpbXBzb24ncyBwYXJhZG94XShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NpbXBzb24lMjdzX3BhcmFkb3gpLCBvciB0aGUgWXVsZeKAk1NpbXBzb24gZWZmZWN0LiBJdCB0ZWxscyB1cyB0aGF0IHRoaXMgIippcyBhIHBhcmFkb3ggaW4gcHJvYmFiaWxpdHkgYW5kIHN0YXRpc3RpY3MsIGluIHdoaWNoIGEgdHJlbmQgdGhhdCBhcHBlYXJzIGluIGRpZmZlcmVudCBncm91cHMgb2YgZGF0YSBkaXNhcHBlYXJzIHdoZW4gdGhlc2UgZ3JvdXBzIGFyZSBjb21iaW5lZC4qIg0KDQpTdXBwb3NlIHdlIGRpdmlkZWQgdGhpcyBtb3J0YWxpdHkvcG9sbHV0aW9uIGRhdGEgaW50byB0aGUgZm91ciBzZWFzb25zLiBXb3VsZCB3ZSBzZWUgZGlmZmVyZW50IHRyZW5kcz8NCg0KPGltZyBzcmM9ImltYWdlcy9HcmFwaDA1LnBuZyIvPg0KDQpZZXMsIHdlIGRvISBQbG90dGluZyB0aGUgc2FtZSBkYXRhIGZvciB0aGUgNCBzZWFzb25zIGluZGl2aWR1YWxseSB3ZSBzZWUgYSBkaWZmZXJlbnQgcmVzdWx0Lg0KDQpXaGF0IGRvZXMgdGhlIG5ldyBwbG90IGluZGljYXRlPw0KDQogIDEuIEFzIHBvbGx1dGlvbiBpbmNyZWFzZXMgdGhlIHNlYXNvbnMgY2hhbmdlDQogIDIuIFBvbGx1dGlvbiBkb2Vzbid0IHJlYWxseSBpbmNyZWFzZSwgaXQganVzdCBnZXRzIHJlcG9ydGVkIG1vcmUNCiAgMy4gKipBcyBwb2xsdXRpb24gaW5jcmVhc2VzIG1vcmUgcGVvcGxlIGRpZSBpbiBhbGwgc2Vhc29ucyoqDQogIDQuIEFzIHBvbGx1dGlvbiBpbmNyZWFzZXMgZmV3ZXIgcGVvcGxlIGRpZSBpbiBhbGwgc2Vhc29ucw0KICANCjwvYnI+DQoNClRoZSBmb3VydGggcHJpbmNpcGxlIG9mIGFuYWx5dGljIGdyYXBoaW5nIGludm9sdmVzICoqaW50ZWdyYXRpbmcgZXZpZGVuY2UqKi4gVGhpcyBtZWFucyBub3QgbGltaXRpbmcgeW91cnNlbGYgdG8gb25lIGZvcm0gb2YgZXhwcmVzc2lvbi4gWW91IGNhbiB1c2Ugd29yZHMsIG51bWJlcnMsIGltYWdlcyBhcyB3ZWxsIGFzIGRpYWdyYW1zLiBHcmFwaGljcyBzaG91bGQgbWFrZSB1c2Ugb2YgbWFueSBtb2RlcyBvZiBkYXRhIHByZXNlbnRhdGlvbi4gUmVtZW1iZXIsICJEb24ndCBsZXQgdGhlIHRvb2wgZHJpdmUgdGhlIGFuYWx5c2lzISINCg0KPGRpdiBzdHlsZT0gImZsb2F0OmxlZnQ7IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDQwJTsgbWFyZ2luLXJpZ2h0OiAzMHB4OyI+DQpUbyBzaG93IHlvdSB3aGF0IHdlIG1lYW4sIGhlcmUncyBhbiBleGFtcGxlIG9mIGEgZmlndXJlIHRha2VuIGZyb20gYSBwYXBlciBwdWJsaXNoZWQgaW4gdGhlIEpvdXJuYWwgb2YgdGhlIEFNQS4gSXQgc2hvd3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvbGx1dGlvbiBhbmQgaG9zcGl0YWxpemF0aW9uIG9mIHBlb3BsZSB3aXRoIGhlYXJ0IGRpc2Vhc2UuDQoNCkFzIHlvdSBjYW4gc2VlLCBpdCdzIGEgbG90IGRpZmZlcmVudCBmcm9tIG91ciBwcmV2aW91cyBwbG90cy4gVGhlIHNvbGlkIGNpcmNsZXMgaW4gdGhlIGNlbnRlciBwb3J0aW9uIGluZGljYXRlIHBvaW50IGVzdGltYXRlcyBvZiBwZXJjZW50YWdlIGNoYW5nZXMgaW4gaG9zcGl0YWxpemF0aW9uIHJhdGVzIGZvciBkaWZmZXJlbnQgbGV2ZWxzIG9mIHBvbGx1dGlvbi4gVGhlIGxpbmVzIHRocm91Z2ggdGhlIGNpcmNsZXMgaW5kaWNhdGUgY29uZmlkZW5jZSBpbnRlcnZhbHMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGVzdGltYXRlcy4gKFlvdSdsbCBsZWFybiBtb3JlIGFib3V0IGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGluIGFub3RoZXIgZ3JlYXQgY291cnNlLCB0aGUgb25lIG9uIHN0YXRpc3RpY2FsIGluZmVyZW5jZS4pDQoNCk5vdGUgdGhhdCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgZmlndXJlIGlzIGFub3RoZXIgY29sdW1uIG9mIG51bWJlcnMsIG9uZSBmb3IgZWFjaCBvZiB0aGUgcG9pbnQgZXN0aW1hdGVzIGdpdmVuLiBUaGlzIGNvbHVtbiBzaG93cyBwb3N0ZXJpb3IgcHJvYmFiaWxpdGllcyB0aGF0IHJlbGF0aXZlIHJpc2sgaXMgZ3JlYXRlciB0aGFuIDAuIFRoaXMsIGluIGVmZmVjdCwgaXMgYSBtZWFzdXJlIG9mIHRoZSBzdHJlbmd0aCBvZiB0aGUgZXZpZGVuY2Ugc2hvd2luZyB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiBwb2xsdXRpb24gYW5kIGhvc3BpdGFsaXphdGlvbi4gIFRoZSBwb2ludCBoZXJlIGlzIHRoYXQgYWxsIG9mIHRoaXMgaW5mb3JtYXRpb24gaXMgbG9jYXRlZCBpbiBvbmUgcGljdHVyZSBzbyB0aGF0IHRoZSByZWFkZXIgY2FuIHNlZSB0aGUgc3RyZW5ndGggb2Ygbm90IG9ubHkgdGhlIGNvcnJlbGF0aW9ucyBidXQgdGhlIGV2aWRlbmNlIGFzIHdlbGwuDQo8L2Rpdj4NCg0KPGltZyBzcmM9ImltYWdlcy9HcmFwaDA2LnBuZyIvPg0KDQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNClRoZSBmaWZ0aCBwcmluY2lwbGUgb2YgZ3JhcGhpbmcgaW52b2x2ZXMgKipkZXNjcmliaW5nIGFuZCBkb2N1bWVudGluZyB0aGUgZXZpZGVuY2Ugd2l0aCBzb3VyY2VzIGFuZCBhcHByb3ByaWF0ZSBsYWJlbHMgYW5kIHNjYWxlcyoqLiBDcmVkaWJpbGl0eSBpcyBpbXBvcnRhbnQgc28gdGhlIGRhdGEgZ3JhcGhpY3Mgc2hvdWxkIHRlbGwgYSBjb21wbGV0ZSBzdG9yeS4gQWxzbywgdXNpbmcgUiwgeW91IHdhbnQgdG8gcHJlc2VydmUgYW55IGNvZGUgeW91IHVzZSB0byBnZW5lcmF0ZSB5b3VyIGRhdGEgYW5kIGdyYXBoaWNzIHNvIHRoYXQgdGhlIHJlc2VhcmNoIGNhbiBiZSByZXBsaWNhdGVkIGlmIG5lY2Vzc2FyeS4gVGhpcyBhbGxvd3MgZm9yIGVhc3kgdmVyaWZpY2F0aW9uIG9yIGZpbmRpbmcgYnVncyBpbiB5b3VyIGFuYWx5c2lzLg0KDQo8L2JyPg0KDQpUaGUgc2l4dGggYW5kIGZpbmFsIHByaW5jaXBsZSBvZiBhbmFseXRpYyBncmFwaGluZyBpcyBtYXliZSB0aGUgbW9zdCBpbXBvcnRhbnQuICoqQ29udGVudCBpcyBraW5nISoqIElmIHlvdSBkb24ndCBoYXZlIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byByZXBvcnQsIHlvdXIgZ3JhcGhzIHdvbid0IHNhdmUgeW91LiBBbmFseXRpY2FsIHByZXNlbnRhdGlvbnMgdWx0aW1hdGVseSBzdGFuZCBvciBmYWxsIGRlcGVuZGluZyBvbiB0aGUgcXVhbGl0eSwgcmVsZXZhbmNlLCBhbmQgaW50ZWdyaXR5IG9mIHRoZWlyIGNvbnRlbnQuDQoNCjwvYnI+DQoNClJldmlldyB0aW1lISEhDQoNCldoaWNoIG9mIHRoZSBmb2xsb3dpbmcgaXMgTk9UIGEgZ29vZCBwcmluY2lwbGUgb2YgZ3JhcGhpbmc/DQoNCjEuICoqSGF2aW5nIHVucmVhZGFibGUgbGFiZWxzKioNCjIuIENvbnRlbnQgaXMga2luZw0KMy4gVG8gZGVzY3JpYmUgYW5kIGRvY3VtZW50IGV2aWRlbmNlDQo0LiBUbyBpbnRlZ3JhdGUgbXVsdGlwbGUgbW9kZXMgb2YgZXZpZGVuY2UNCg0KDQpXaGljaCBvZiB0aGUgZm9sbG93aW5nIGlzIE5PVCBhIGdvb2QgcHJpbmNpcGxlIG9mIGdyYXBoaW5nPw0KDQoxLiAqKlRvIHByb3ZlIHlvdSdyZSBhbHdheXMgcmlnaHQqKg0KMi4gVG8gZGVtb25zdHJhdGUgYSBjYXVzYXRpdmUgbWVjaGFuaXNtIHVuZGVybHlpbmcgYSBjb3JyZWxhdGlvbg0KMy4gQ29udGVudCBpcyBraW5nDQo0LiBUbyBzaG93IHR3byBjb21wZXRpbmcgaHlwb3RoZXNlcw0KDQoNCldoaWNoIG9mIHRoZSBmb2xsb3dpbmcgaXMgTk9UIGEgZ29vZCBwcmluY2lwbGUgb2YgZ3JhcGhpbmc/DQoNCjEuIFRvIGludGVncmF0ZSBkaWZmZXJlbnQgdHlwZXMgb2YgZXZpZGVuY2UNCjIuIFRvIHNob3cgZ29vZCBsYWJlbHMgYW5kIHNjYWxlcw0KMy4gQ29udGVudCBpcyBraW5nDQo0LiAqKlRvIHNob3cgdGhhdCBzb21lIGZvbnRzIGFyZSBiZXR0ZXIgdGhhbiBvdGhlcnMqKg0KDQoNClRydWUgb3IgRmFsc2U/IENvbG9yIGlzIGtpbmcuDQoNCjEuICoqRmFsc2UqKg0KMi4gVHJ1ZQ0KDQo8L2JyPg0KDQpDb25ncmF0cyEgWW91J3ZlIGNvbmNsdWRlZCBleHBsb3JpbmcgdGhpcyBsZXNzb24gb24gcHJpbmNpcGxlcyBvZiBncmFwaGluZy4gV2UgaG9wZSB5b3UgZm91bmQgaXQgcHJpbmNpcGFsbHkgcHJpbmNpcGxlZC4NCg0KPC9icj4NCg0KLS0tDQoNCjwvYnI+DQoNCjxjZW50ZXI+RU5EPC9jZW50ZXI+DQoNCjwvYnI+DQoNCi0tLQ==