Announcements

Announcements

  • grading
    • Piazza posted (will update again)
    • GitHub posted (split 1st & 2nd halves of term)
  • midterm exam
    • planning to return them & discuss on Wed (3/13)
    • Extra Credit survey (to boost avg slightly)
  • MDSR Ch 6 (ethics): no programming assigned
  • MDSR Ch 6 exercises–no code, but use GitHub, make commits, & submit R Notebook like always
  • MDSR Ch 10 programming notebook

MDSR Ch 10 Errata / Tips

  • Some sections don’t require programming, but please still include the headers for navigation purposes
  • p. 234-235: Rename the result for 20,000 simulations as sim_results20k
    • the authors reuse the object name sim_results for the example with 20,000 simulations, but this overwrites the object expected for the plot at the top of p. 235.
    • by renaming the object resulting form 20,000 simulations, the ggplot call will still be able to access the intended object

In the news…

These Two Charts Prove A College Education Just Isn’t Worth The Money Anymore

  • Q: Any thoughts?

source: https://www.businessinsider.com/these-two-charts-prove-a-college-education-just-isnt-worth-the-money-anymore-2012-6

Education vs Income Observations

source: https://io9.gizmodo.com/11-most-useless-and-misleading-infographics-on-the-inte-1688239674

Stand your ground

Professional Ethics

Professional Ethics

General principles

American Statistical Association (2018 ethical guidelines)

Data Science ethics

(PSU) Guidelines for decision making

  1. Percieved problem or ethical dilemma?
  2. What are the facts?
  3. What stakeholders, values, and guidelines are involved?
  4. What are the options (good & bad)?
  5. Consider the options (outcomes, virtues, …)?
  6. Which is the BEST (or “least bad”) option?
  7. How might we prevent this issue in the future?

Some Examples

Applying our guidelines: Employment Discrimination

Applying our guidelines: Employment Discrimination

Applying our guidelines: Data Scraping

Applying our guidelines: Data Scraping

Applying our guidelines: Reproducible spreadsheet analysis

Applying our guidelines: Reproducible spreadsheet analysis

Data reidentification and disclosure avoidance

Data scraping and terms of use

Reproducibility

Multiple Testing

Multiple Testing

More examples the ethical minefield we call Statistics & Data Science…

LS0tCnRpdGxlOiAiUHJvZmVzc2lvbmFsIEV0aGljcyIgIApzdWJ0aXRsZTogIk1EU1IgQ2ggNiIgIApvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQgIAogIHNsaWR5X3ByZXNlbnRhdGlvbjogZGVmYXVsdCAgCi0tLQoKCgpgYGB7ciBGcm9udCBNYXR0ZXIsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyBjbGVhbiB1cCBSIGVudmlyb25tZW50CnJtKGxpc3QgPSBscygpKQoKIyBnbG9iYWwgb3B0aW9ucwprbml0cjo6b3B0c19jaHVuayRzZXQoZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUpCm9wdGlvbnMoZGlnaXRzPTQpCgojIHBhY2thZ2VzIHVzZWQKCgojIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgCgoKIyBpbnB1dHMgc3VtbWFyeQoKCmBgYAoKCgojIyBBbm5vdW5jZW1lbnRzCgojIyMjIEFubm91bmNlbWVudHMKCi0gZ3JhZGluZwogICAgLSBQaWF6emEgcG9zdGVkICh3aWxsIHVwZGF0ZSBhZ2FpbikKICAgIC0gR2l0SHViIHBvc3RlZCAoc3BsaXQgMXN0ICYgMm5kIGhhbHZlcyBvZiB0ZXJtKQotIG1pZHRlcm0gZXhhbQogICAgLSBwbGFubmluZyB0byByZXR1cm4gdGhlbSAmIGRpc2N1c3Mgb24gV2VkICgzLzEzKQogICAgLSBFeHRyYSBDcmVkaXQgc3VydmV5ICh0byBib29zdCBhdmcgc2xpZ2h0bHkpCi0gTURTUiBDaCA2IChldGhpY3MpOiBubyBwcm9ncmFtbWluZyBhc3NpZ25lZAotIE1EU1IgQ2ggNiBleGVyY2lzZXMtLW5vIGNvZGUsIGJ1dCB1c2UgR2l0SHViLCBtYWtlIGNvbW1pdHMsICYgc3VibWl0IFIgTm90ZWJvb2sgbGlrZSBhbHdheXMKLSBNRFNSIENoIDEwIHByb2dyYW1taW5nIG5vdGVib29rCgoKIyMjIyBNRFNSIENoIDEwIEVycmF0YSAvIFRpcHMKCi0gU29tZSBzZWN0aW9ucyBkb24ndCByZXF1aXJlIHByb2dyYW1taW5nLCBidXQgcGxlYXNlIHN0aWxsIGluY2x1ZGUgdGhlIGhlYWRlcnMgZm9yIG5hdmlnYXRpb24gcHVycG9zZXMKLSBwLiAyMzQtMjM1OiBSZW5hbWUgdGhlIHJlc3VsdCBmb3IgMjAsMDAwIHNpbXVsYXRpb25zIGFzIGBzaW1fcmVzdWx0czIwa2AKICAgIC0gdGhlIGF1dGhvcnMgcmV1c2UgdGhlIG9iamVjdCBuYW1lIGBzaW1fcmVzdWx0c2AgZm9yIHRoZSBleGFtcGxlIHdpdGggMjAsMDAwIHNpbXVsYXRpb25zLCBidXQgdGhpcyBvdmVyd3JpdGVzIHRoZSBvYmplY3QgZXhwZWN0ZWQgZm9yIHRoZSBwbG90IGF0IHRoZSB0b3Agb2YgcC4gMjM1LiAgCiAgICAtIGJ5IHJlbmFtaW5nIHRoZSBvYmplY3QgcmVzdWx0aW5nIGZvcm0gMjAsMDAwIHNpbXVsYXRpb25zLCB0aGUgZ2dwbG90IGNhbGwgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgaW50ZW5kZWQgb2JqZWN0CgoKCiMjIEluIHRoZSBuZXdzLi4uCgojIyMjIFRoZXNlIFR3byBDaGFydHMgUHJvdmUgQSBDb2xsZWdlIEVkdWNhdGlvbiBKdXN0IElzbid0IFdvcnRoIFRoZSBNb25leSBBbnltb3JlCgotIFE6IEFueSB0aG91Z2h0cz8KCgohW10oYnVzaW5lc3NJbnNpZGVyLnBuZykKCnNvdXJjZTogPGh0dHBzOi8vd3d3LmJ1c2luZXNzaW5zaWRlci5jb20vdGhlc2UtdHdvLWNoYXJ0cy1wcm92ZS1hLWNvbGxlZ2UtZWR1Y2F0aW9uLWp1c3QtaXNudC13b3J0aC10aGUtbW9uZXktYW55bW9yZS0yMDEyLTY+CgoKIyMgRWR1Y2F0aW9uIHZzIEluY29tZSBPYnNlcnZhdGlvbnMKCi0gZG9lcyBub3Qgc2hvdyBjb21wYXJpc29uIHdpdGggbm9uLWNvbGxlZ2UgZ3JhZHVhdGVzCi0gaXMgYW5udWFsIGluY29tZSBhdCBncmFkdWF0aW9uIHRoZSBiZXN0IG1ldHJpYz8gCiAgICAtIChubyBkb3VidCBlYXNpZXIgdG8gYWNjZXNzKQogICAgLSBsaWZldGltZSB0b3RhbCBpbmNvbWUgZWFybmluZ3M/CiAgICAtIG1heGltdW0gaW5jb21lIGFjaGlldmVkPwogICAgLSBpcyBpbmNvbWUgdGhlIG9ubHkgYmVuZWZpdD8KICAgIC0gb3RoZXJzPwotIFE6IGNhbiB5b3UgcmVhbGx5IHRydXN0ICoqbWUqKiBvbiB0aGlzIHN1YmplY3Q/CiAgICAtIFE6IHdoeSBvciB3aHkgbm90PwoKc291cmNlOiA8aHR0cHM6Ly9pbzkuZ2l6bW9kby5jb20vMTEtbW9zdC11c2VsZXNzLWFuZC1taXNsZWFkaW5nLWluZm9ncmFwaGljcy1vbi10aGUtaW50ZS0xNjg4MjM5Njc0PgoKCiMjIFN0YW5kIHlvdXIgZ3JvdW5kCgotIEdyYXBoaWMgb25jZSBwdWJsaXNoZWQgYnkgbmV3cyBzb3VyY2UgUmV1dGVycwogICAgLSBROiBXaGF0IGNhbiB5b3UgbGVhcm4gZnJvbSB0aGlzIGdyYXBoaWM/CiAgICAtIFE6IEFueXRoaW5nIHlvdSB3b3VsZCBjaGFuZ2UgYWJvdXQgaXQ/CgohW10ocmV1dGVycy5naWYpCgoKCiMjIFByb2Zlc3Npb25hbCBFdGhpY3MKCi0gSW4gdGhlIFVTLCB0aGVyZSBhcmUgcG9wdWxhciBub3Rpb25zIG9mIHByb2Zlc3Npb25hbCBldGhpY3MgZm9yIHNvbWUgcHJvZmVzc2lvbnMgYnV0IG5vdCBvdGhlcnMKICAgIC0gTWVkaWNhbCBEb2N0b3JzLS1IaXBwb2NyYXRpYyBPYXRoIAogICAgICAgIC0gIihoZWxwIG9yKSBEbyBubyBoYXJtIiBpcyB3ZWxsLWtub3duLCBidXQgYWN0dWFsbHkgY29tZXMgZnJvbSBlbHNld2hlcmUKICAgICAgICAtICJJIHdpbGwgbm90IGJlIGFzaGFtZWQgdG8gc2F5ICdJIGtub3cgbm90LCcgbm9yIHdpbGwgSSBmYWlsIHRvIGNhbGwgaW4gbXkgY29sbGVhZ3VlcyB3aGVuIHRoZSBza2lsbHMgb2YgYW5vdGhlciBhcmUgbmVlZGVkIGZvciBhIHBhdGllbnQncyByZWNvdmVyeSIKICAgICAgICAtICJJIHdpbGwgcmVzcGVjdCB0aGUgcHJpdmFjeSBvZiBteSBwYXRpZW50cywgZm9yIHRoZWlyIHByb2JsZW1zIGFyZSBub3QgZGlzY2xvc2VkIHRvIG1lIHRoYXQgdGhlIHdvcmxkIG1heSBrbm93IgogICAgICAgIC0gIkkgd2lsbCByZW1lbWJlciB0aGF0IEkgYW0gYSBtZW1iZXIgb2Ygc29jaWV0eSwgd2l0aCBzcGVjaWFsIG9ibGlnYXRpb25zIHRvIGFsbCBteSBmZWxsb3cgaHVtYW4gYmVpbmdzLCB0aG9zZSBvZiBzb3VuZCBtaW5kIGFuZCBib2R5IGFzIHdlbGwgYXMgdGhlIGluZmlybSIKLSAqKlE6IEhvdyBkbyB0aGVzZSByZWxhdGUgdG8gcHJvZmVzc2lvbmFsIGV0aGljcyBpbiBTdGF0aXN0aWNzICYgRGF0YSBTY2llbmNlKioKCgojIyBQcm9mZXNzaW9uYWwgRXRoaWNzCgotIFNvbWUgYmVoYXZpb3JzIGFyZSBwcmV0dHkgdW5pdmVyc2FsbHkgdmlld2VkIGFzIHVuZXRoaWNhbDogbHlpbmcsIGNoZWF0aW5nLCBzdGVhbGluZwotIFByb2Zlc3Npb25hbCBldGhpY3MgYWRkaXRpb25hbGx5IHJlcXVpcmVzIGEgbW9yZSBudWFuY2VkIGludGVycHJldGF0aW9uCi0gKipSZWFzb25hYmxlIHBlb3BsZSBjYW4gZGlzYWdyZWUgYWJvdXQgd2hhdCBhY3Rpb25zIGFyZSBiZXN0LCoqIAogICAgLSBFdGhpY3MgYXJlIG5vdCBsYXcKICAgIC0gV2UgYXJlIGJlc3QgdG8gYXNzZXNzIGV0aGljYWwgYWN0aW9uIHRob3VnaCB1c2Ugb2YgY29uc2lzdGVudCBwcmluY2lwbGVzIGFuZCBndWlkZWxpbmVzCgojIyBHZW5lcmFsIHByaW5jaXBsZXMKCi0gKllvdSBoYXZlIHNraWxscyB0aGF0IGFyZW4ndCB3aWRlbHkgYXZhaWxhYmxlOyBkb24ndCB1c2UgdGhlbSB0byBkZWNlaXZlIG90aGVycyAoaW50ZW50aW9uYWxseSBvciBub3QpKgotIERvIHlvdXIgd29yayB3ZWxsIGJ5IHlvdXIgb3duIHN0YW5kYXJkcyBhbmQgYnkgdGhlIHN0YW5kYXJkcyBvZiB5b3VyIHByb2Zlc3Npb24KICAgIC0gZG8gd29yayB0aGF0IHdvdWxkIHBhc3Mgc2NydXRpbnkgYnkgcHJvZmVzc2lvbmFsIGNvbGxlYWd1ZXMKICAgIC0ga25vdyB5b3VyIGxpbWl0cyAoZS5nLiByZWdhcmRpbmcgdXNlIG9mIG1ldGhvZHMgeW91IGRvbid0IHVuZGVyc3RhbmQpCi0gUmVjb2duaXplIHRoZSBwYXJ0aWVzIChzdGFrZWhvbGRlcnMpIHRvIHdob20geW91IGhhdmUgYSBzcGVjaWFsIHByb2Zlc3Npb25hbCBvYmxpZ2F0aW9uCiAgICAtIGVtcGxveWVyICYgY2xpZW50CiAgICAtIGdlbmVyYWwgcHVibGljIG9yIHBhcnRpY2lwYW50cyBpbiBhIHN0dWR5CiAgICAtIHJlc2VhcmNoIGNvbW11bml0eSBvciB0aGUgcHJvZmVzc2lvbiBpdHNlbGYKLSBSZXBvcnQgcmVzdWx0cyBhbmQgbWV0aG9kcyBob25lc3RseSBhbmQgcmVzcGVjdCB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGlkZW50aWZ5IGFuZCByZXBvcnQgZmxhd3MgYW5kIHNob3J0Y29taW5ncyBpbiB5b3VyIHdvcmsuCiAgICAtIGRvbid0IG92ZXJzdGF0ZSB5b3VyIGNvbmZpZGVuY2UKICAgIC0gb2Z0ZW4sICJmbGF3cyBpbiB5b3VyIHdvcmsiIGFyZSB1bmF2b2lkYWJsZSBsaW1pdGF0aW9ucyBvciBuZWNlc3NhcnkgY29tcHJvbWlzZS4gIFRoZXNlIHNob3VsZCBzdGlsbCBiZSBrbm93biB0byB0aGUgY29uc3VtZXIgb2YgeW91ciBhbmFseXNpcwoKCiMjIEFtZXJpY2FuIFN0YXRpc3RpY2FsIEFzc29jaWF0aW9uICgyMDE4IGV0aGljYWwgZ3VpZGVsaW5lcykKCi0gUHJvZmVzc2lvbmFsIGludGVncml0eSBhbmQgYWNjb3VudGFiaWxpdHkgCi0gSW50ZWdyaXR5IG9mIGRhdGEgYW5kIG1ldGhvZHMgCiAgICAtIE5vdGU6IGJvdGggcGxvdHMgc2hvd24gYmVmb3JlIHZpb2xhdGUgdGhpcyBzZWN0aW9uIG9mIEFTQSBldGhpY2FsIGd1aWRlbGluZXMKLSBSZXNwb25zaWJpbGl0aWVzIHRvIFNjaWVuY2UvUHVibGljL0Z1bmRlci9DbGllbnQKLSBSZXNwb25zaWJpbGl0aWVzIHRvIHJlc2VhcmNoIHN1YmplY3RzCi0gUmVzcG9uc2liaWxpdGllcyB0byByZXNlYXJjaCB0ZWFtIGNvbGxlYWd1ZXMKLSBSZXNwb25zaWJpbGl0aWVzIHRvIG90aGVyIHN0YXRpc3RpY2lhbnMgYW5kIHN0YXRpc3RpY3MgcHJhY3RpdGlvbmVycwotIFJlc3BvbnNpYmlsaXRpZXMgcmVnYXJkaW5nIGFsbGVnYXRpb25zIG9mIG1pc2NvbmR1Y3QKLSBSZXNwb25zaWJpbGlsaWVzIG9mIFt0aG9zZV0gKmVtcGxveWluZyogc3RhdGlzdGljYWwgcHJhY3RpdGlvbmVycwoKCiFbc291cmNlOiA8aHR0cHM6Ly93d3cuYW1zdGF0Lm9yZy9BU0EvWW91ci1DYXJlZXIvRXRoaWNhbC1HdWlkZWxpbmVzLWZvci1TdGF0aXN0aWNhbC1QcmFjdGljZS5hc3B4Pl0oYXNhRXRoaWNzLnBuZykKCgojIyBEYXRhIFNjaWVuY2UgZXRoaWNzCgotIENsZWFybHkgYSB3ZWxsLWlkZW50aWZpZWQgaXNzdWUsIGJ1dCBzbyBmYXIgdW5jbGVhciB3aG8gc2hvdWxkIGJlIHRoZSBjb21wZXRlbnQgYXV0aG9yaXR5Ci0gU29tZSBleGFtcGxlcyBJIGZvdW5kIGVhc2lseQogICAgLSBQZW5uIFN0YXRlIElTVCA0MDI6IERhdGEgRXRoaWNzIAogICAgLSBVIENoaWNhZ28gRGF0YSBTY2llbmNlIGZvciBTb2NpYWwgR29vZAogICAgLSBVIE1pY2hpZ2FuIHNob3J0IGNvdXJzZSBvbiBEYXRhIFNjaWVuY2UgRXRoaWNzCiAgICAtIENvdXJzZXJhICYgZWRYIGNvdXJzZXMgb24gRGF0YSBTY2llbmNlIEV0aGljcwoKCiFbU291cmNlOiA8aHR0cHM6Ly93d3cuZm9yYmVzLmNvbS9zaXRlcy9rYWxldmxlZXRhcnUvMjAxOC8xMC8wOC9kby13ZS1uZWVkLXRvLXRlYWNoLWV0aGljcy1hbmQtZW1wYXRoeS10by1kYXRhLXNjaWVudGlzdHMvIzQxNTQwYjUxMmVlMT5dKGZvcmJlczIwMTgucG5nKQoKIyMgKFBTVSkgR3VpZGVsaW5lcyBmb3IgZGVjaXNpb24gbWFraW5nIAoKMS4gUGVyY2lldmVkIHByb2JsZW0gb3IgZXRoaWNhbCBkaWxlbW1hPwojLiBXaGF0IGFyZSB0aGUgZmFjdHM/CiMuIFdoYXQgc3Rha2Vob2xkZXJzLCB2YWx1ZXMsIGFuZCBndWlkZWxpbmVzIGFyZSBpbnZvbHZlZD8KIy4gV2hhdCBhcmUgdGhlIG9wdGlvbnMgKGdvb2QgJiBiYWQpPwojLiBDb25zaWRlciB0aGUgb3B0aW9ucyAob3V0Y29tZXMsIHZpcnR1ZXMsIC4uLik/CiMuIFdoaWNoIGlzIHRoZSBCRVNUIChvciAibGVhc3QgYmFkIikgb3B0aW9uPwojLiBIb3cgbWlnaHQgd2UgcHJldmVudCB0aGlzIGlzc3VlIGluIHRoZSBmdXR1cmU/CgoKIyMgU29tZSBFeGFtcGxlcwoKLSBFbXBsb3ltZW50IGRpc2NyaW1pbmF0aW9uCi0gU2NyYXBpbmcgT2tDdXBpZCBkYXRhCi0gUmVwcm9kdWNpYmxlIHNwcmVhZHNoZWV0IGFuYWx5c2lzIAotIExlZ2FsIG5lZ290aWF0aW9ucwoKIyMgQXBwbHlpbmcgb3VyIGd1aWRlbGluZXM6IEVtcGxveW1lbnQgRGlzY3JpbWluYXRpb24KCgojIyBBcHBseWluZyBvdXIgZ3VpZGVsaW5lczogRW1wbG95bWVudCBEaXNjcmltaW5hdGlvbgoKLSBFYXN5IHRvIGNyaXRpY2l6ZSB0aGUgbWV0aG9kLi4uIHF1aXRlIGxpa2VseSB0aGF0IGVtcGxveWVycyBhcmUgaW5hcHByb3ByaWF0ZWx5IGxhYmVsZWQgYXMgZGlzY3JpbWluYXRvcnMganVzdCBieSBjaGFuY2UgYWxvbmUKLSBPRkNDUCBkaWRuJ3QgKipjcmVhdGUqKiB0aGUgbWV0aG9kLCB0aGV5IGFyZSBhY3R1YWxseSByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2QuLi4gCiAgICAtIFVTIE9mZmljZSBvZiBQZXJzb25uZWwgTWFuYWdlbWVudCAod3d3Lm9wbS5nb3YpCiAgICAtICJUaGUgVW5pZm9ybSBHdWlkZWxpbmVzICg8aHR0cDovL3VuaWZvcm1ndWlkZWxpbmVzLmNvbS8+KSBhcHBseSB0byBhbGwgc2VsZWN0aW9uIHByb2NlZHVyZXMgdXNlZCB0byBtYWtlIGVtcGxveW1lbnQgZGVjaXNpb25zIiAoYWNjb3JkaW5nIHRvIE9QTSBGQVEgcGFnZSkKLSBPRkNDUCBlbmZvcmNlcyB0aGUgbGF3LCBhbmQgaGFzIGEgcmVzcG9uc2liaWxpdHkgdG8gdGhlIGNvdXJ0cwoKCgojIyBBcHBseWluZyBvdXIgZ3VpZGVsaW5lczogRGF0YSBTY3JhcGluZwoKCiMjIEFwcGx5aW5nIG91ciBndWlkZWxpbmVzOiBEYXRhIFNjcmFwaW5nCgotIHRoZSByZXNlYXJjaGVyIHNlZW1zIHRvIHVzZSBwZXJmZWN0bHkgbGVnaXRpbWF0ZSBtZWFucyB0byBhY2Nlc3MgdGhlIGRhdGEgCi0gU3Rha2Vob2xkZXJzOiAqKk9rQ3VwaWQgdXNlcnMqKgogICAgLSBVc2VycyBkaWQgbm90IGNvbnNlbnQgdG8gdGhpcyB1c2Ugb2YgdGhlaXIgZGF0YS4uLiAoJiBjb3VsZCBub3QgT3B0IG91dCkKICAgIC0gVGhlIGRhdGEgYXJlIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGFuZCB1c2VycyBjb3VsZCByZWFzb25hYmx5IGV4cGVyaWVuY2UgImRhbWFnZXMiIChlbWJhcmFzc21lbnQgb3IgcGVyc29uYWwgaGFybSkKLSBTdGFrZWhvbGRlcnM6ICoqT2tDdXBpZCoqCiAgICAtIGNvbXBhbmllcyBsaWtlIHRoaXMgb2Z0ZW4gc3BlY2lmeSAqdGVybXMgb2YgdXNlKiB0aGF0IHJlc3RyaWN0IGhvdyB0aGUgZGF0YSBtYXkgYmUgbGVnaXRpbWF0ZWx5IHVzZWQuCiAgICAtICoqdGVybXMgb2YgdXNlIGNhbm5vdCBldGhpY2FsbHkgYmUgZGlzcmVnYXJkZWQqKiBzaW5jZSB0aGV5IHJlcHJlc2VudCBhbiBleHBsaWNpdCBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgc2VydmljZSBwcm92aWRlciBhbmQgKGFueSkgdXNlciBvZiB0aGUgc2VydmljZQoKCiMjIEFwcGx5aW5nIG91ciBndWlkZWxpbmVzOiBSZXByb2R1Y2libGUgc3ByZWFkc2hlZXQgYW5hbHlzaXMKCgojIyBBcHBseWluZyBvdXIgZ3VpZGVsaW5lczogUmVwcm9kdWNpYmxlIHNwcmVhZHNoZWV0IGFuYWx5c2lzCgotIFJlc2VhcmNoZXJzIGhhdmUgYW4gZXRoaWNhbCBvYmxpZ2F0aW9uIHRvIGJlIHRydXRoZnVsIGluIHRoZWlyIHJlcG9ydGluZyBvZiByZXNlYXJjaAogICAgLSBob25lc3QgcmVwb3J0aW5nIG9mIHJlc3VsdHMKICAgIC0gcGVybWl0IHJlc3VsdHMgdG8gYmUgY2hhbGxlbmdlZCBvciBjb25maXJtZWQgKFJlaW5oYXJ0ICYgUm9nb2ZmIGRpZCB0aGlzIHdlbGwpCi0gSXQgaXMgbm90IHVuZXRoaWNhbCB0byBiZSAqKndyb25nKiogc28gdG8gc3BlYWsKICAgIC0gdGhlIGV0aGljYWwgb2JsaWdhdGlvbiBpcyB0byB0YWtlIGFsbCByZWFzb25hYmxlIHN0ZXBzIHRvIGVuc3VyZSB0aGF0IGNvbmNsdXNpb25zIGZhaXRoZnVsbHkgcmVwcmVzZW50IHRoZSBkYXRhIGFuZCB0aGUgYW5hbHlzaXMgZnJhbWV3b3JrCiAgICAtIFJlaW5oYXJ0ICYgUm9nb2ZmIG1heSBoYXZlIGRvbmUgc28gdG8gdGhlIGJlc3Qgb2YgdGhlaXIgYWJpbGl0eQotIEluIHN0YXRpc3RpY3MgYW5kIGRhdGEgc2NpZW5jZSwgd2UgaGF2ZSBhbiBldGhpY2FsIG9ibGlnYXRpb24gdG8gdXNlIHRvb2xzIHRoYXQgYXJlIHJlbGlhYmxlLCB2ZXJpZmlhYmxlLCBhbmQgY29uZHVjaXZlIHRvIHJlcHJvZHVjaWJsZSBkYXRhIGFuYWx5c2lzCiAgICAtIGEgcmVwcm9kdWNpYmxlIHdvcmtmbG93IGxpa2UgdGhhdCBvZiBSLCBSTWFya2Rvd24sIGFuZCBHaXQgYWNjb21wbGlzaGVzIHRoaXMgcHVycG9zZQogICAgLSB0b29scyBzaG91bGQgc3RyaXZlIHRvIGF2b2lkIHF1aWV0IChvciBzaWxlbnQpIGZhaWx1cmUgbW9kZXMKICAgIC0gTWljcm9zb2Z0IEV4Y2VsIGRvZXMgbm90CiAgICAgICAgLSBtaXhlcyB0aGUgZGF0YSB3aXRoIHRoZSBhbmFseXNpcwogICAgICAgIC0gZGlmZmljdWx0IHRvIHByb2dyYW0gaW4gYSBjb25jaXNlIGFuZCByZWFkYWJsZSB3YXkKICAgICAgICAtIGNvbW1hbmRzIGFyZSBjdXN0b21pemVkIHRvIGEgcGFydGljdWxhciBzaXplIGFuZCBvcmdhbml6YXRpb24gb2YgZGF0YQogICAgICAgIC0gdmFsaWRhdGluZyBhZ2FpbnN0IGEga25vd24gcmVzdWx0IGlzIG9mdGVuIGltcHJhY3RpY2FsIGluIEV4Y2VsCiAgICAgICAgLSBjbGljayAmIGRyYWcgb3BlcmF0aW9ucyBhcmUgZXJyb3ItcHJvbmUKCgoKIyMgRGF0YSByZWlkZW50aWZpY2F0aW9uIGFuZCBkaXNjbG9zdXJlIGF2b2lkYW5jZQoKLSBvYmxpZ2F0aW9uIHRvIHByaXZhY3kgcHJvdGVjdGlvbnMKICAgIC0gSElQQUEgcHJvdGVjdHMgcHJpdmFjeSBoZWFsdGggaW5mb3JtYXRpb24KICAgIC0gRkVSUEEgcHJvdGVjdHMgcHJpdmFjeSBvZiBzdHVkZW50IHJlY29yZHMKLSB0aGVyZSBpcyBhbiBhcHByb3ByaWF0ZSB0ZW5zaW9uIGJldHdlZW4gZGlzY2xvc3VyZXMgZm9yIHB1YmxpYyBnb29kIChoZWFsdGhjYXJlIGNvc3RzIGFuZCBvdXRjb21lcykgYW5kIG5vbmRpc2Nsb3N1cmVzIHRoYXQgcHJvdGVjdCBwZXJzb25hbCBwcml2YWN5Ci0gZGF0YSBzY2llbnRpc3RzIGhhdmUgc2tpbGxzIHRoYXQgY291bGQgY2lyY3VtdmVudCB0aGVzZSBwcm90ZWN0aW9ucyAoZXZlbiBhY2NpZGVudGFsbHkpLCBhbmQgdGhpcyBjYXJyaWVzIHdpdGggaXQgYSBjbGVhciBldGhpY2FsIHJlc3BvbnNpYmlsaXR5CgojIyBEYXRhIHNjcmFwaW5nIGFuZCB0ZXJtcyBvZiB1c2UKCi0gQWNjb3JkaW5nIHRvIE1EU1IsIChTbGF0ZS5jb20pW2h0dHBzOi8vc2xhdGUuY29tL3Rlcm1zXSByZWNlbnRseSBzdGF0ZWQgaW4gdGhlaXIgdGVybXMgb2YgdXNlIGV4cGxpY2l0bHkgcHJvaGliaXRlZCB1c2VycyBmcm9tIHNjcmFwaW5nIGNvbnRlbnQgb3IgaW5mb3JtYXRpb24gKHRoaXMgYXBwZWFycyB0byBoYXZlIGNoYW5nZWQpCi0gQW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIChBUEkpIGlzIGFuIGFwcHJvYWNoIHRvIHByb3ZpZGluZyBhIHByb2dyYW0gaW50ZXJmYWNlIHRvIGFsbG93IGNvbnN1bWVycyBjb250cm9sbGVkIGFjY2VzcyB0byBzZXJ2aWNlcyBvciBhcHBsaWNhdGlvbnMgb3duZWQgYnkgYSBjb21wYW55LgotIElmIHlvdSB3YW50IGRhdGEgZnJvbSBhIHB1YmxpYyBzb3VyY2UKICAgIC0gc2VlIGlmIHRoZSBjb21wYW55IGhhcyBhIHB1YmxpYyBBUEkKICAgIC0gc2VlIGlmIHNvbWVvbmUgaGFzIGFscmVhZHkgd3JpdHRlbiBhbiBSIHBhY2thZ2UgCiAgICAtIEFQSXMgdmFyeSwgYnV0IGxvdHMgb2YgQVBJcyBhbGxvdyB5b3UgdG8gcHVsbCBkYXRhIGludG8gUiB3aXRob3V0IHRoZSBuZWVkIHRvICJzY3JhcGUiIGl0Li4uIFIgcGFja2FnZXMgcHJvdmlkZSBmdW5jdGlvbnMgdG8gbWFrZSBpdCBlYXNpZXIKLSBJZiBpdCdzIG5vdCBvdGhlcndpc2UgY2xlYXIgaG93IHRvIGFwcHJvcHJpYXRlIGFjY2VzcyB0aGUgZGF0YS4uLiB5b3UgbmVlZCB0byBhc2sgcGVybWlzc2lvbi4KCgojIyBSZXByb2R1Y2liaWxpdHkKCi0gUmVwcm9kdWNpYmxlIGFuYWx5c2lzIGlzIHRoZSBwcmFjdGljZSBvZiByZWNvcmRpbmcgZWFjaCBhbmQgZXZlcnkgc3RlcCwgbm8gbWF0dGVyIGhvdyB0cml2aWFsLCBpbiBhIGRhdGEgYW5hbHlzaXMKLSBTb21lIGVsZW1lbnRzIG9mIGEgcmVwcm9kdWNpYmxlIGFuYWx5c2lzIGluY2x1ZGUgKHNlZSBNRFNSIGZvciBzb3VyY2UpCiAgICAtICoqRGF0YSoqOiBhbGwgc291cmNlIGRhdGEgaW4gb3JpZ2luYWwgZm9ybQogICAgLSAqKk1ldGFkYXRhKio6IGNvZGVib29rcyBhbmQgb3RoZXIgaW5mbyBuZWVkZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YQogICAgLSAqKkNvZGUqKjogc2NyaXB0IG5lZWRlZCB0byBwcm9jZXNzIGRhdGEsIGNvbmR1Y3QgYW5hbHlzaXMsIGV0YwogICAgLSAqKk1hcCoqOiBmaWxlIHRoYXQgbWFwcyBiZXR3ZWVuIG91dHB1dCBhbmQgcmVzdWx0cyBpbiB0aGUgcmVwb3J0Ci0gU3RhdGlzdGljaWFucyBhbmQgZGF0YSBzY2llbnRpc3RzIHNob3VsZCB3ZWxjb21lIGNvZGUgcmV2aWV3cyBhbmQgcmlnb3JvdXMgdmV0dGluZywgcGFydGljdWxhcmx5IHdoZW4gb3VyIHdvcmsgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBzaWduaWZpY2FudCBpbXBhY3Qgb3IgZXhwb3N1cmUuCi0gKipROiBIb3cgZG9lcyBvdXIgU1RBVCAzODAgd29ya2Zsb3cgY29tcGFyZSB0byB0aGlzIHN0YW5kYXJkPyoqCiAgICAtIHdoYXQgcGFydHMgYXJlIHdlIGRvaW5nIHdlbGw/CiAgICAtIHdoYXQgcGFydHMgc2hvdWxkIHdlIGltcHJvdmU/CgoKIyMgTXVsdGlwbGUgVGVzdGluZwoKLSBPbmUgY29tbW9uIHdheSBpbiB3aGljaCBhIHN0YXRpc3RpY2lhbiBvciBkYXRhIHNjaWVudGlzdCBjYW4gZWFzaWx5IG1pc2xlYWQgb3RoZXJzIChhbmQgdGhlbXNlbHZlcyBpbiB0aGUgcHJvY2VzcykgaXMgdGhyb3VnaCBtdWx0aXBsZSB0ZXN0aW5nCi0gSW1hZ2luZSAxMDAgcmVzZWFyY2ggdGVhbXMgd29ya2luZyB0byBzdHVkeSBlZmZpY2FjeSBvZiB0aGUgc2FtZSBtZWRpY2FsIGRydWcKICAgIC0gd2l0aCA1JSBzaWduaWZpY2FuY2UgbGV2ZWwgd2UgZXhwZWN0IDUgb2YgdGhvc2UgdGVhbXMgdG8gb2JzZXJ2ZSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IHJlc3VsdHMgKipieSBjaGFuY2UgYWxvbmUqKgogICAgLSA1IChmYWxzZSkgcG9zaXRpdmUgcmVwb3J0cyBhcmUgcHVibGlzaGVkOyA5NSBhcmUtLW9mIGNvdXJzZS0tbm90IHB1Ymxpc2hlZAogICAgLSBROiBpcyB0aGUgY29ycm9ib3JhdGluZyBldmlkZW5jZSBvZiB0aGVzZSA1IHB1YmxpY2F0aW9ucyBjb21wZWxsaW5nIGV2aWRlbmNlIG9mIGFuIGVmZmVjdD8KCiMjIE11bHRpcGxlIFRlc3RpbmcKCi0gd2Ugb2Z0ZW4gY29uc2lkZXIgZG96ZW5zIG9mIHZhcmlhYmxlcy4uLiBldmVuIGh1bmRyZWRzIChlLmcuLCBpbmRpY2F0b3JzIGZvciBsb3RzIG9mIGNhdGVnb3JpY2FsIHZhcmlhYmxlcyBjYW4gYWRkIHVwKQotIHdlIGFyZSBpbXBsaWNpdGx5IGNvbmR1Y3RpbmcgcGFyYWxsZWwgdGVzdHMgYXMgcGFydCBvZiBtb2RlbCBzZWxlY3Rpb24KLSB3ZSBhcmUgcmVzcG9uc2libGUgdG8gZmFpdGhmdWxseSBkaXNjbG9zZSBzdWNoIHBlcnRpbmVudCBkZXRhaWxzIG9mIHRoZSBhbmFseXNpcywgYW5kIHRha2UgcmVhc29uYWJsZSBzdGVwcyB0byBhdm9pZCBtaXNsZWFkaW5nIG9yIG92ZXJzdGF0ZWQgY29uY2x1c2lvbnMgaW4gdGhvc2UgY2FzZXMKLSBROiBXaGF0IGFyZSBzb21lIHN0cmV0ZWdpZXMgdGhhdCBoYXZlIHdlIGRpc2N1c3NlZCB0byBhdm9pZCB0aGlzIGlzc3VlPwoKIyMgTW9yZSBleGFtcGxlcyB0aGUgZXRoaWNhbCBtaW5lZmllbGQgd2UgY2FsbCBTdGF0aXN0aWNzICYgRGF0YSBTY2llbmNlLi4uCgotIFN0dWR5IGRlc2lnbiBjb25zaWRlcmF0aW9ucyAKICAgIC0gU2FtcGxlIHNpemUgIAogICAgLSBTYW1wbGluZyBtZXRob2RzICAKICAgIC0gQXNzaWdubWVudCBvZiBzdWJqZWN0cyB0byB0cmVhdG1lbnQgY29uZGl0aW9ucwogICAgLSBEYXRhIGNvbGxlY3Rpb24gcHJvdG9jb2wgCiAgICAtICJyZS1yYW5kb21pemluZyIKICAgIC0gU3RvcHBpbmcgcnVsZXMgKGUuZy4gY2xpbmljYWwgdHJpYWxzKQogICAgLSBSZXNwb25zaWJpbGl0eSBkdXJpbmcgZG91YmxlLWJsaW5kaW5nCgotIERhdGEgc3Rld2FyZHNoaXAKICAgIC0gRGF0YSBjbGVhbmluZyAoaS5lLiBwcmVwYXJpbmcgcmF3IGRhdGEgZm9yIGFuYWx5c2lzKQogICAgLSBEYXRhIHByaXZhY3kgLyBjb25maWRlbnRpYWxpdHkKICAgIC0gT3V0bGllciBoYW5kbGluZwogICAgLSBSZXByb2R1Y2liaWxpdHkgb2YgYW5hbHlzaXMgCgotIERhdGEgYW5hbHlzaXMgZGVjaXNpb25zCiAgICAtIEFuYWx5c2lzIGNvbnNpc3RlbnQgd2l0aCBkZXNpZ24gLyBkYXRhIGNvbGxlY3Rpb24KICAgIC0gTWlzbGVhZGluZyBncmFwaHMKICAgIC0gQ2hlY2tpbmcgYXNzdW1wdGlvbnMKICAgIC0gQW5hbHlzaXMgb2YgZGF0YSBmcm9tIHVua25vd24gb3JpZ2luCiAgICAtIFVzZSBvZiAoZGV2aWF0aW9uIGZyb20pIHByZXNjcmliZWQgcmVzZWFyY2ggcHJvdG9jb2wKICAgIC0gTXVsdGlwbGUgdGVzdGluZwogICAgLSBGaXR0aW5nIG11bHRpcGxlIHN0YXRpc3RpY2FsIG1vZGVscyAoaS5lLiBjb21wZXRpbmcgYW5hbHlzZXMpCiAgICAtIE91dGxpZXIgaGFuZGxpbmcKCi0gSW50ZXJwcmV0YXRpb25zIC8gQ29uY2x1c2lvbnMKICAgIC0gSW50ZXJwcmV0YXRpb24gb2YgcmVzdWx0cyAKICAgIC0gR2VuZXJhbGl6ZWFiaWxpdHkgb2YgY29uY2x1c2lvbnMKICAgIC0gV2hpY2ggaXMgd29yc2U6IGJhZCBkYXRhIG9yIG5vIGRhdGE/CiAgICAtIENhdXNhbCBpbmZlcmVuY2UKICAgIC0gQ29uZmlybWF0aW9uIGJpYXMgIAogICAgLSBwb3N0IGhvYyBjb25jbHVzaW9ucwogICAgLSBSb2xlIG9mIHN0YXRpc3RpY2lhbiBpbiBwb2xhcml6aW5nIGNvbnRleHRzICAKICAgICAgICAtIENvbnRyb3ZlcnNpYWwgaXNzdWVzIChlLmcuIGFuaW1hbCByZXNlYXJjaCkgIAogICAgICAgIC0gRXhwZXJ0IHRyaWFsIHdpdG5lc3MgKGUuZy4gbGl0aWdhdGlvbiBpbnZvbHZpbmcgeW91ciBlbXBsb3llcikgIAogICAgICAgIC0gUG9saXRpY2FsIHBvbGljeSAoZS5nLiBnZXJyeW1hbmRlcmluZykgIAoKCg==