Notes for SRA 2021 Workshop 7, “Monte Carlo simulation and probability bounds analysis in R with hardly any data (Instructors: Ferson & Grey)” held 2021-12-05.

Description

Description from https://www.sra.org/events-webinars/annual-meeting/program/annual-meeting-workshops/. Attend virtual session on Pathable.

Workshop #7: Full Day 8AM-5PM | Monte Carlo simulation and probability bounds analysis in R with hardly any data (Instructors: Ferson & Grey)

  • Features hands-on examples worked in R on your own laptop, from raw data to final decision.
  • Introduces and compares Monte Carlo simulation and probability bounds analysis for developing probabilistic risk analyses when little or no empirical data are available.
  • You can use your laptop to work the examples, or just follow along if you prefer.
  • The examples illustrate the basic problems risk analysts face: not having much data to estimate inputs, not knowing the distribution shapes, not knowing their correlations, and not even being sure about the model form.
  • Monte Carlo models will be parameterized using the method of matching moments and other common strategies.
  • Probability bounds will be developed from both large and small data sets, from data with non-negligible measurement uncertainty, and from published summaries that lack data altogether.
  • Explains how to avoid common pitfalls in risk analyses, including the multiple instantiation problem, unjustified independence assumptions, repeated variable problem, and what to do when there’s little or no data.
  • The numerical examples will be developed into fully probabilistic estimates useful for quantitative decisions and other risk-informed planning.
  • Emphasis will be placed on the interpretation of results and on how defensible decisions can be made even when little information is available.
  • The presentation style will be casual and interactive.
  • Participants will receive handouts of the slides and electronic files with software for the examples.

Presentation

Notes from Slide Presentation:

Does maximum entropy maximize uncertainty? Arguably yes, but in fact it can throw out information, see slide 79.

Application of these methods requires judgment; choices of distributions and methods should be defensible, but ultimately are analyst opinions.

Monte Carlo assumes that each variable is independent, and different. Be careful about how values are represented, see slide 88, and be careful about variables that are not independent.

Probability bounds analysis (slide 111) is more rigorous than Monte Carlo, and works with even terrible data.

Robust Bayesian analysis (slide 115) addresses the problem of arbitrary priors by using multiple appropriate priors - this is the missing piece that has always bothered me about Bayesian math.

PBA is really interesting way to communicate both variability and ambiguity. Is PBA better at communicating ambiguity than MC? [Quite possibly]

What if we added a p-box to a Monte Carlo CDF? (or complementary CDF?) this should add insight into the level of ambiguity (epistemic uncertainty).

What we’re doing with FAIR and similar analyses is really just scratching the surface of what’s possible.

Second-order Monte Carlo analysis will be bounded within the p-box, and it’s highly unlikely it will show the complete p-box.

Are Monte Carlo and PBA combined? Yes, they are “nested” typically. This is what’s done in Info-Gap Analysis - first present a more deterministic solution with all assumptions, then a p-box showing when the assumptions are relaxed.

Summary of the “Neuroscience of Risk”: address people’s perception of incertitude and variability (which are different) in risk communication - see slides 231-234.

pba.r has the ability to constrain bounds based on dependence and correlation.

This is a bit off-topic, do you have general advice on applying these principles risk analysis and communication (for people with less math/statistics training)? Is it just as simple as “work to communicate both the variability and incertitude?”

“Fermi Estimates” is a pretty good description of FAIR and Hubbard-style risk quantification.

This paper and podcast make a good case to simply average the expert estimates - that there’s no clear evidence that there’s anything better. https://doi.org/10.1016/j.ssci.2017.02.018 - https://safetyofwork.com/episodes/ep40-when-should-we-trust-expert-opinions-about-risk

Paper on elliptical estimates from the Fermi estimation: https://scholarworks.utep.edu/cgi/viewcontent.cgi?article=1130&context=cs_techrep

Recommends Mark Burgman’s work on expert elicitation.

Overall, Alex and Scott are making the case for using p-boxes to make better decisions under variability and incertitude (risk).

Notes

This is the game on Alex’s shelf. Risk with hidden objectives: https://en.wikipedia.org/wiki/RisiKo!

This looks to be a pretty good introduction to basic Monte Carlo using R. https://www.countbayesie.com/blog/2015/3/3/6-amazing-trick-with-monte-carlo-simulations

Workshop Site

Additional links and downloads available at https://sites.google.com/site/hardlyanydata (files have been downloaded to this repository):

This tutorial explains how you can develop a fully probabilistic risk analysis even though there may be very little empirical data available on which to base the analysis. It compares the strengths and weakness of a traditional Monte Carlo assessment with probability bounds analysis in the R statistical computing environment which is freely available over the internet.

Overview of topics

Introduction

Welcome Case studies: civil and aerospace engineering, exposure analysis, and conservation biology Installation of R and workshop software

Monte Carlo simulation

Random values and replications Distributions Independent and perfect sampling Calculations in R Interpreting results: tails are where the action is

Probability bounds analysis

Kinds of uncertainty: the ‘open question’ Probability boxes Independent, perfect, and Fréchet Calculation in R Interpreting results: fully probabilistic answers

Approximation versus enveloping

Integrating Monte Carlo and probability bounding Fixed but unknown, or actually varying? Distributions, p-boxes, and interval ranges What you know and what you assume

Selecting input distributions

Moments and ranges Maximum likelihood and maximum entropy Confidence boxes Shape assumptions to refine estimates

Correlations and dependencies

Making no assumptions about dependence Perfect correlations Dispersive Monte Carlo dependence Independence maximizes entropy

Case studies in R

Civil engineering: dam safety Aerospace engineering: spacecraft design Environmental protection: contaminant exposure analysis Conservation biology: estimating endangerment

Model uncertainty

What-if studies Stochastic mixtures and Bayes model averaging Bounding methods Conservative methods for polynomial models

Sensitivity analyses

Bang-for-buck control analysis Value of information: what data to collect More samples or better measurements

Presenters

Alexander Wimbush, Ph.D. (2022), University of Liverpool, optimising medical diagnostic algorithms under uncertainty, communicating risks to patients, and calculation with confidence structures and possibility distributions; https://www.researchgate.net/profile/Alexander-Wimbush

Scott Ferson, Chair of Risk and Uncertainty at the University of Liverpool School of Engineering and director of the Institute for Risk and Uncertainty; developing reliable mathematical and statistical tools for risk assessments and on methods for uncertainty analysis when empirical information is very sparse

LS0tCnRpdGxlOiBTUkEgV29ya3Nob3AgNyBOb3RlcwphdXRob3I6IEpvaG4gQmVubmluZ2hvZmYKZGF0ZTogJzIwMjEtMTItMDQnCmRhdGUtbW9kaWZpZWQ6ICcyMDIyLTA2LTIxJwpjYXRlZ29yaWVzOiBbXQpvcmRlcjogfgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRoZW1lOgogICAgICB2ZXJzaW9uOiA1CiAgICAgIHByZXNldDogYm9vdHN0cmFwCiAgICBjc3M6IGFzc2V0cy9leHRyYS5jc3MKICAgIHBhbmRvY19hcmdzOiAtLXNoaWZ0LWhlYWRpbmctbGV2ZWwtYnk9MQogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBubwogICAgICBzbW9vdGhfc2Nyb2xsOiBubwotLS0KCk5vdGVzIGZvciBTUkEgMjAyMSBXb3Jrc2hvcCA3LCAiTW9udGUgQ2FybG8gc2ltdWxhdGlvbiBhbmQgcHJvYmFiaWxpdHkgYm91bmRzIGFuYWx5c2lzIGluIFIgd2l0aCBoYXJkbHkgYW55IGRhdGEgKEluc3RydWN0b3JzOiBGZXJzb24gJiBHcmV5KSIgaGVsZCAyMDIxLTEyLTA1LgoKIyBEZXNjcmlwdGlvbgoKRGVzY3JpcHRpb24gZnJvbSA8aHR0cHM6Ly93d3cuc3JhLm9yZy9ldmVudHMtd2ViaW5hcnMvYW5udWFsLW1lZXRpbmcvcHJvZ3JhbS9hbm51YWwtbWVldGluZy13b3Jrc2hvcHMvPi4gQXR0ZW5kIHZpcnR1YWwgc2Vzc2lvbiBvbiBbUGF0aGFibGVdKGh0dHBzOi8vc3JhMjEudXMyLnBhdGhhYmxlLmNvbS9tZWV0aW5ncy92aXJ0dWFsLzlHOHJpMmlBUHF2VDVpejVxKS4KCioqV29ya3Nob3AgIzc6IEZ1bGwgRGF5IDhBTS01UE0qKiB8IE1vbnRlIENhcmxvIHNpbXVsYXRpb24gYW5kIHByb2JhYmlsaXR5IGJvdW5kcyBhbmFseXNpcyBpbiBSIHdpdGggaGFyZGx5IGFueSBkYXRhIChJbnN0cnVjdG9yczogRmVyc29uICYgR3JleSkKCiogRmVhdHVyZXMgaGFuZHMtb24gZXhhbXBsZXMgd29ya2VkIGluIFIgb24geW91ciBvd24gbGFwdG9wLCBmcm9tIHJhdyBkYXRhIHRvIGZpbmFsIGRlY2lzaW9uLgoqIEludHJvZHVjZXMgYW5kIGNvbXBhcmVzIE1vbnRlIENhcmxvIHNpbXVsYXRpb24gYW5kIHByb2JhYmlsaXR5IGJvdW5kcyBhbmFseXNpcyBmb3IgZGV2ZWxvcGluZyBwcm9iYWJpbGlzdGljIHJpc2sgYW5hbHlzZXMgd2hlbiBsaXR0bGUgb3Igbm8gZW1waXJpY2FsIGRhdGEgYXJlIGF2YWlsYWJsZS4KKiBZb3UgY2FuIHVzZSB5b3VyIGxhcHRvcCB0byB3b3JrIHRoZSBleGFtcGxlcywgb3IganVzdCBmb2xsb3cgYWxvbmcgaWYgeW91IHByZWZlci4KKiBUaGUgZXhhbXBsZXMgaWxsdXN0cmF0ZSB0aGUgYmFzaWMgcHJvYmxlbXMgcmlzayBhbmFseXN0cyBmYWNlOiBub3QgaGF2aW5nIG11Y2ggZGF0YSB0byBlc3RpbWF0ZSBpbnB1dHMsIG5vdCBrbm93aW5nIHRoZSBkaXN0cmlidXRpb24gc2hhcGVzLCBub3Qga25vd2luZyB0aGVpciBjb3JyZWxhdGlvbnMsIGFuZCBub3QgZXZlbiBiZWluZyBzdXJlIGFib3V0IHRoZSBtb2RlbCBmb3JtLgoqIE1vbnRlIENhcmxvIG1vZGVscyB3aWxsIGJlIHBhcmFtZXRlcml6ZWQgdXNpbmcgdGhlIG1ldGhvZCBvZiBtYXRjaGluZyBtb21lbnRzIGFuZCBvdGhlciBjb21tb24gc3RyYXRlZ2llcy4KKiBQcm9iYWJpbGl0eSBib3VuZHMgd2lsbCBiZSBkZXZlbG9wZWQgZnJvbSBib3RoIGxhcmdlIGFuZCBzbWFsbCBkYXRhIHNldHMsIGZyb20gZGF0YSB3aXRoIG5vbi1uZWdsaWdpYmxlIG1lYXN1cmVtZW50IHVuY2VydGFpbnR5LCBhbmQgZnJvbSBwdWJsaXNoZWQgc3VtbWFyaWVzIHRoYXQgbGFjayBkYXRhIGFsdG9nZXRoZXIuCiogRXhwbGFpbnMgaG93IHRvIGF2b2lkIGNvbW1vbiBwaXRmYWxscyBpbiByaXNrIGFuYWx5c2VzLCBpbmNsdWRpbmcgdGhlIG11bHRpcGxlIGluc3RhbnRpYXRpb24gcHJvYmxlbSwgdW5qdXN0aWZpZWQgaW5kZXBlbmRlbmNlIGFzc3VtcHRpb25zLCByZXBlYXRlZCB2YXJpYWJsZSBwcm9ibGVtLCBhbmQgd2hhdCB0byBkbyB3aGVuIHRoZXJl4oCZcyBsaXR0bGUgb3Igbm8gZGF0YS4KKiBUaGUgbnVtZXJpY2FsIGV4YW1wbGVzIHdpbGwgYmUgZGV2ZWxvcGVkIGludG8gZnVsbHkgcHJvYmFiaWxpc3RpYyBlc3RpbWF0ZXMgdXNlZnVsIGZvciBxdWFudGl0YXRpdmUgZGVjaXNpb25zIGFuZCBvdGhlciByaXNrLWluZm9ybWVkIHBsYW5uaW5nLgoqIEVtcGhhc2lzIHdpbGwgYmUgcGxhY2VkIG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiByZXN1bHRzIGFuZCBvbiBob3cgZGVmZW5zaWJsZSBkZWNpc2lvbnMgY2FuIGJlIG1hZGUgZXZlbiB3aGVuIGxpdHRsZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuCiogVGhlIHByZXNlbnRhdGlvbiBzdHlsZSB3aWxsIGJlIGNhc3VhbCBhbmQgaW50ZXJhY3RpdmUuCiogUGFydGljaXBhbnRzIHdpbGwgcmVjZWl2ZSBoYW5kb3V0cyBvZiB0aGUgc2xpZGVzIGFuZCBlbGVjdHJvbmljIGZpbGVzIHdpdGggc29mdHdhcmUgZm9yIHRoZSBleGFtcGxlcy4KCiMgUHJlc2VudGF0aW9uCgpOb3RlcyBmcm9tIFtTbGlkZSBQcmVzZW50YXRpb25dKGFzc2V0cy9Ob0RhdGEtMjAyMS1ab29tLnBwdHgpOgoKRG9lcyBtYXhpbXVtIGVudHJvcHkgbWF4aW1pemUgdW5jZXJ0YWludHk/IEFyZ3VhYmx5IHllcywgYnV0IGluIGZhY3QgaXQgY2FuIHRocm93IG91dCBpbmZvcm1hdGlvbiwgc2VlIHNsaWRlIDc5LgoKQXBwbGljYXRpb24gb2YgdGhlc2UgbWV0aG9kcyByZXF1aXJlcyBqdWRnbWVudDsgY2hvaWNlcyBvZiBkaXN0cmlidXRpb25zIGFuZCBtZXRob2RzIHNob3VsZCBiZSBkZWZlbnNpYmxlLCBidXQgdWx0aW1hdGVseSBhcmUgYW5hbHlzdCBvcGluaW9ucy4KCk1vbnRlIENhcmxvIGFzc3VtZXMgdGhhdCBlYWNoIHZhcmlhYmxlIGlzIGluZGVwZW5kZW50LCBhbmQgZGlmZmVyZW50LiBCZSBjYXJlZnVsIGFib3V0IGhvdyB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkLCBzZWUgc2xpZGUgODgsIGFuZCBiZSBjYXJlZnVsIGFib3V0IHZhcmlhYmxlcyB0aGF0IGFyZSBub3QgaW5kZXBlbmRlbnQuCgpQcm9iYWJpbGl0eSBib3VuZHMgYW5hbHlzaXMgKHNsaWRlIDExMSkgaXMgbW9yZSByaWdvcm91cyB0aGFuIE1vbnRlIENhcmxvLCBhbmQgd29ya3Mgd2l0aCBldmVuIHRlcnJpYmxlIGRhdGEuCgpSb2J1c3QgQmF5ZXNpYW4gYW5hbHlzaXMgKHNsaWRlIDExNSkgYWRkcmVzc2VzIHRoZSBwcm9ibGVtIG9mIGFyYml0cmFyeSBwcmlvcnMgYnkgdXNpbmcgbXVsdGlwbGUgYXBwcm9wcmlhdGUgcHJpb3JzIC0gdGhpcyBpcyB0aGUgbWlzc2luZyBwaWVjZSB0aGF0IGhhcyBhbHdheXMgYm90aGVyZWQgbWUgYWJvdXQgQmF5ZXNpYW4gbWF0aC4KClBCQSBpcyByZWFsbHkgaW50ZXJlc3Rpbmcgd2F5IHRvIGNvbW11bmljYXRlIGJvdGggdmFyaWFiaWxpdHkgYW5kIGFtYmlndWl0eS4gSXMgUEJBIGJldHRlciBhdCBjb21tdW5pY2F0aW5nIGFtYmlndWl0eSB0aGFuIE1DPyBbUXVpdGUgcG9zc2libHldCgpXaGF0IGlmIHdlIGFkZGVkIGEgcC1ib3ggdG8gYSBNb250ZSBDYXJsbyBDREY/IChvciBjb21wbGVtZW50YXJ5IENERj8pIHRoaXMgc2hvdWxkIGFkZCBpbnNpZ2h0IGludG8gdGhlIGxldmVsIG9mIGFtYmlndWl0eSAoZXBpc3RlbWljIHVuY2VydGFpbnR5KS4KCldoYXQgd2UncmUgZG9pbmcgd2l0aCBGQUlSIGFuZCBzaW1pbGFyIGFuYWx5c2VzIGlzIHJlYWxseSBqdXN0IHNjcmF0Y2hpbmcgdGhlIHN1cmZhY2Ugb2Ygd2hhdCdzIHBvc3NpYmxlLgoKU2Vjb25kLW9yZGVyIE1vbnRlIENhcmxvIGFuYWx5c2lzIHdpbGwgYmUgYm91bmRlZCB3aXRoaW4gdGhlIHAtYm94LCBhbmQgaXQncyBoaWdobHkgdW5saWtlbHkgaXQgd2lsbCBzaG93IHRoZSBjb21wbGV0ZSBwLWJveC4KCkFyZSBNb250ZSBDYXJsbyBhbmQgUEJBIGNvbWJpbmVkPyBZZXMsIHRoZXkgYXJlICJuZXN0ZWQiIHR5cGljYWxseS4gVGhpcyBpcyB3aGF0J3MgZG9uZSBpbiBbSW5mby1HYXAgQW5hbHlzaXNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0luZm8tZ2FwX2RlY2lzaW9uX3RoZW9yeSkgLSBmaXJzdCBwcmVzZW50IGEgbW9yZSBkZXRlcm1pbmlzdGljIHNvbHV0aW9uIHdpdGggYWxsIGFzc3VtcHRpb25zLCB0aGVuIGEgcC1ib3ggc2hvd2luZyB3aGVuIHRoZSBhc3N1bXB0aW9ucyBhcmUgcmVsYXhlZC4KClN1bW1hcnkgb2YgdGhlICJOZXVyb3NjaWVuY2Ugb2YgUmlzayI6IGFkZHJlc3MgcGVvcGxlJ3MgcGVyY2VwdGlvbiBvZiBpbmNlcnRpdHVkZSBhbmQgdmFyaWFiaWxpdHkgKHdoaWNoIGFyZSBkaWZmZXJlbnQpIGluIHJpc2sgY29tbXVuaWNhdGlvbiAtIHNlZSBzbGlkZXMgMjMxLTIzNC4KCmBwYmEucmAgaGFzIHRoZSBhYmlsaXR5IHRvIGNvbnN0cmFpbiBib3VuZHMgYmFzZWQgb24gZGVwZW5kZW5jZSBhbmQgY29ycmVsYXRpb24uCgpUaGlzIGlzIGEgYml0IG9mZi10b3BpYywgZG8geW91IGhhdmUgZ2VuZXJhbCBhZHZpY2Ugb24gYXBwbHlpbmcgdGhlc2UgcHJpbmNpcGxlcyByaXNrIGFuYWx5c2lzIGFuZCBjb21tdW5pY2F0aW9uIChmb3IgcGVvcGxlIHdpdGggbGVzcyBtYXRoL3N0YXRpc3RpY3MgdHJhaW5pbmcpPyBJcyBpdCBqdXN0IGFzIHNpbXBsZSBhcyAid29yayB0byBjb21tdW5pY2F0ZSBib3RoIHRoZSB2YXJpYWJpbGl0eSBhbmQgaW5jZXJ0aXR1ZGU/IgoKIkZlcm1pIEVzdGltYXRlcyIgaXMgYSBwcmV0dHkgZ29vZCBkZXNjcmlwdGlvbiBvZiBGQUlSIGFuZCBIdWJiYXJkLXN0eWxlIHJpc2sgcXVhbnRpZmljYXRpb24uCgpUaGlzIHBhcGVyIGFuZCBwb2RjYXN0IG1ha2UgYSBnb29kIGNhc2UgdG8gc2ltcGx5IGF2ZXJhZ2UgdGhlIGV4cGVydCBlc3RpbWF0ZXMgLSB0aGF0IHRoZXJlJ3Mgbm8gY2xlYXIgZXZpZGVuY2UgdGhhdCB0aGVyZeKAmXMgYW55dGhpbmcgYmV0dGVyLiBodHRwczovL2RvaS5vcmcvMTAuMTAxNi9qLnNzY2kuMjAxNy4wMi4wMTggLSBodHRwczovL3NhZmV0eW9md29yay5jb20vZXBpc29kZXMvZXA0MC13aGVuLXNob3VsZC13ZS10cnVzdC1leHBlcnQtb3BpbmlvbnMtYWJvdXQtcmlzawoKUGFwZXIgb24gZWxsaXB0aWNhbCBlc3RpbWF0ZXMgZnJvbSB0aGUgRmVybWkgZXN0aW1hdGlvbjogaHR0cHM6Ly9zY2hvbGFyd29ya3MudXRlcC5lZHUvY2dpL3ZpZXdjb250ZW50LmNnaT9hcnRpY2xlPTExMzAmY29udGV4dD1jc190ZWNocmVwCgpSZWNvbW1lbmRzIFtNYXJrIEJ1cmdtYW4nc10oaHR0cHM6Ly9zY2hvbGFyLmdvb2dsZS5jb20vY2l0YXRpb25zP3VzZXI9TzRZWUtDc0FBQUFKJmhsPWVuJm9pPWFvKSB3b3JrIG9uIGV4cGVydCBlbGljaXRhdGlvbi4KCk92ZXJhbGwsIEFsZXggYW5kIFNjb3R0IGFyZSBtYWtpbmcgdGhlIGNhc2UgZm9yIHVzaW5nIHAtYm94ZXMgdG8gbWFrZSBiZXR0ZXIgZGVjaXNpb25zIHVuZGVyIHZhcmlhYmlsaXR5IGFuZCBpbmNlcnRpdHVkZSAocmlzaykuCgojIE5vdGVzCgpUaGlzIGlzIHRoZSBnYW1lIG9uIEFsZXgncyBzaGVsZi4gUmlzayB3aXRoIGhpZGRlbiBvYmplY3RpdmVzOiA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmlzaUtvIT4KClRoaXMgbG9va3MgdG8gYmUgYSBwcmV0dHkgZ29vZCBpbnRyb2R1Y3Rpb24gdG8gYmFzaWMgTW9udGUgQ2FybG8gdXNpbmcgUi4gaHR0cHM6Ly93d3cuY291bnRiYXllc2llLmNvbS9ibG9nLzIwMTUvMy8zLzYtYW1hemluZy10cmljay13aXRoLW1vbnRlLWNhcmxvLXNpbXVsYXRpb25zCgojIFdvcmtzaG9wIFNpdGUKCkFkZGl0aW9uYWwgbGlua3MgYW5kIGRvd25sb2FkcyBhdmFpbGFibGUgYXQgPGh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2hhcmRseWFueWRhdGE+IChmaWxlcyBoYXZlIGJlZW4gZG93bmxvYWRlZCB0byB0aGlzIHJlcG9zaXRvcnkpOgoKVGhpcyB0dXRvcmlhbCBleHBsYWlucyBob3cgeW91IGNhbiBkZXZlbG9wIGEgZnVsbHkgcHJvYmFiaWxpc3RpYyByaXNrIGFuYWx5c2lzIGV2ZW4gdGhvdWdoIHRoZXJlIG1heSBiZSB2ZXJ5IGxpdHRsZSBlbXBpcmljYWwgZGF0YSBhdmFpbGFibGUgb24gd2hpY2ggdG8gYmFzZSB0aGUgYW5hbHlzaXMuIEl0IGNvbXBhcmVzIHRoZSBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzIG9mIGEgdHJhZGl0aW9uYWwgTW9udGUgQ2FybG8gYXNzZXNzbWVudCB3aXRoIHByb2JhYmlsaXR5IGJvdW5kcyBhbmFseXNpcyBpbiB0aGUgUiBzdGF0aXN0aWNhbCBjb21wdXRpbmcgZW52aXJvbm1lbnQgd2hpY2ggaXMgZnJlZWx5IGF2YWlsYWJsZSBvdmVyIHRoZSBpbnRlcm5ldC4KCiMjIE92ZXJ2aWV3IG9mIHRvcGljcwoKIyMjIEludHJvZHVjdGlvbgoKV2VsY29tZQpDYXNlIHN0dWRpZXM6IGNpdmlsIGFuZCBhZXJvc3BhY2UgZW5naW5lZXJpbmcsIGV4cG9zdXJlIGFuYWx5c2lzLCBhbmQgY29uc2VydmF0aW9uIGJpb2xvZ3kgCkluc3RhbGxhdGlvbiBvZiBSIGFuZCB3b3Jrc2hvcCBzb2Z0d2FyZQoKIyMjIE1vbnRlIENhcmxvIHNpbXVsYXRpb24KClJhbmRvbSB2YWx1ZXMgYW5kIHJlcGxpY2F0aW9ucwpEaXN0cmlidXRpb25zCkluZGVwZW5kZW50IGFuZCBwZXJmZWN0IHNhbXBsaW5nCkNhbGN1bGF0aW9ucyBpbiBSCkludGVycHJldGluZyByZXN1bHRzOiB0YWlscyBhcmUgd2hlcmUgdGhlIGFjdGlvbiBpcwoKIyMjIFByb2JhYmlsaXR5IGJvdW5kcyBhbmFseXNpcwoKS2luZHMgb2YgdW5jZXJ0YWludHk6IHRoZSDigJhvcGVuIHF1ZXN0aW9u4oCZClByb2JhYmlsaXR5IGJveGVzCkluZGVwZW5kZW50LCBwZXJmZWN0LCBhbmQgRnLDqWNoZXQKQ2FsY3VsYXRpb24gaW4gUgpJbnRlcnByZXRpbmcgcmVzdWx0czogZnVsbHkgcHJvYmFiaWxpc3RpYyBhbnN3ZXJzCgojIyMgQXBwcm94aW1hdGlvbiB2ZXJzdXMgZW52ZWxvcGluZwoKSW50ZWdyYXRpbmcgTW9udGUgQ2FybG8gYW5kIHByb2JhYmlsaXR5IGJvdW5kaW5nCkZpeGVkIGJ1dCB1bmtub3duLCBvciBhY3R1YWxseSB2YXJ5aW5nPwpEaXN0cmlidXRpb25zLCBwLWJveGVzLCBhbmQgaW50ZXJ2YWwgcmFuZ2VzCldoYXQgeW91IGtub3cgYW5kIHdoYXQgeW91IGFzc3VtZQoKIyMjIFNlbGVjdGluZyBpbnB1dCBkaXN0cmlidXRpb25zCgpNb21lbnRzIGFuZCByYW5nZXMKTWF4aW11bSBsaWtlbGlob29kIGFuZCBtYXhpbXVtIGVudHJvcHkKQ29uZmlkZW5jZSBib3hlcwpTaGFwZSBhc3N1bXB0aW9ucyB0byByZWZpbmUgZXN0aW1hdGVzCgojIyMgQ29ycmVsYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMKCk1ha2luZyBubyBhc3N1bXB0aW9ucyBhYm91dCBkZXBlbmRlbmNlClBlcmZlY3QgY29ycmVsYXRpb25zCkRpc3BlcnNpdmUgTW9udGUgQ2FybG8gZGVwZW5kZW5jZQpJbmRlcGVuZGVuY2UgbWF4aW1pemVzIGVudHJvcHkKCiMjIyBDYXNlIHN0dWRpZXMgaW4gUgoKQ2l2aWwgZW5naW5lZXJpbmc6ICBkYW0gc2FmZXR5CkFlcm9zcGFjZSBlbmdpbmVlcmluZzogIHNwYWNlY3JhZnQgZGVzaWduCkVudmlyb25tZW50YWwgcHJvdGVjdGlvbjogY29udGFtaW5hbnQgZXhwb3N1cmUgYW5hbHlzaXMKQ29uc2VydmF0aW9uIGJpb2xvZ3k6IGVzdGltYXRpbmcgZW5kYW5nZXJtZW50CgojIyMgTW9kZWwgdW5jZXJ0YWludHkKCldoYXQtaWYgc3R1ZGllcwpTdG9jaGFzdGljIG1peHR1cmVzIGFuZCBCYXllcyBtb2RlbCBhdmVyYWdpbmcKQm91bmRpbmcgbWV0aG9kcwpDb25zZXJ2YXRpdmUgbWV0aG9kcyBmb3IgcG9seW5vbWlhbCBtb2RlbHMKCiMjIyBTZW5zaXRpdml0eSBhbmFseXNlcwoKQmFuZy1mb3ItYnVjayBjb250cm9sIGFuYWx5c2lzClZhbHVlIG9mIGluZm9ybWF0aW9uOiB3aGF0IGRhdGEgdG8gY29sbGVjdApNb3JlIHNhbXBsZXMgb3IgYmV0dGVyIG1lYXN1cmVtZW50cwoKIyMgUHJlc2VudGVycwoKW0FsZXhhbmRlciBXaW1idXNoXShodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3Byb2ZpbGUvQWxleGFuZGVyLVdpbWJ1c2gpLCBQaC5ELiAoMjAyMiksIFVuaXZlcnNpdHkgb2YgTGl2ZXJwb29sLCBvcHRpbWlzaW5nIG1lZGljYWwgZGlhZ25vc3RpYyBhbGdvcml0aG1zIHVuZGVyIHVuY2VydGFpbnR5LCBjb21tdW5pY2F0aW5nIHJpc2tzIHRvIHBhdGllbnRzLCBhbmQgY2FsY3VsYXRpb24gd2l0aCBjb25maWRlbmNlIHN0cnVjdHVyZXMgYW5kIHBvc3NpYmlsaXR5IGRpc3RyaWJ1dGlvbnM7IGh0dHBzOi8vd3d3LnJlc2VhcmNoZ2F0ZS5uZXQvcHJvZmlsZS9BbGV4YW5kZXItV2ltYnVzaAoKW1Njb3R0IEZlcnNvbl0oaHR0cHM6Ly9zaXRlcy5nb29nbGUuY29tL3NpdGUvc2NvdHRmZXJzb25zaXRlLyksIENoYWlyIG9mIFJpc2sgYW5kIFVuY2VydGFpbnR5IGF0IHRoZSBbVW5pdmVyc2l0eSBvZiBMaXZlcnBvb2xdKGh0dHBzOi8vd3d3LmxpdmVycG9vbC5hYy51aykgW1NjaG9vbCBvZiBFbmdpbmVlcmluZ10oaHR0cHM6Ly93d3cubGl2ZXJwb29sLmFjLnVrL2VuZ2luZWVyaW5nLykgYW5kIGRpcmVjdG9yIG9mIHRoZSBbSW5zdGl0dXRlIGZvciBSaXNrIGFuZCBVbmNlcnRhaW50eV0oaHR0cHM6Ly93d3cubGl2ZXJwb29sLmFjLnVrL3Jpc2stYW5kLXVuY2VydGFpbnR5Lyk7IGRldmVsb3BpbmcgcmVsaWFibGUgbWF0aGVtYXRpY2FsIGFuZCBzdGF0aXN0aWNhbCB0b29scyBmb3IgcmlzayBhc3Nlc3NtZW50cyBhbmQgb24gbWV0aG9kcyBmb3IgdW5jZXJ0YWludHkgYW5hbHlzaXMgd2hlbiBlbXBpcmljYWwgaW5mb3JtYXRpb24gaXMgdmVyeSBzcGFyc2UKCiMjIFJlbGF0ZWQgbGlua3MKClNvY2lldHkgZm9yIFJpc2sgQW5hbHlzaXMgaHR0cHM6Ly93d3cuc3JhLm9yZwpTb2NpZXR5IGZvciBSaXNrIEFuYWx5c2lzIEFubnVhbCBNZWV0aW5nIGh0dHBzOi8vd3d3LnNyYS5vcmcvZXZlbnRzLXdlYmluYXJzL2FubnVhbC1tZWV0aW5nLwpPbi1saW5lIHdvcmtzaG9wIHJlZ2lzdHJhdGlvbiBodHRwczovL3NyYS5tZW1iZXJzaGlwc29mdHdhcmUub3JnL2V2X2NhbGVuZGFyX2RheS5hc3A/ZXZlbnRpZD0yMiZldnJlZzE9MiZ0PSZ0ZXN0bXR5cGU9JnB1Yj0xIGh0dHBzOi8vbWVtYmVycy5zcmEub3JnL2V2X2NhbGVuZGFyX2RheS5hc3A/ZXZlbnRpZD0yMiZldnJlZzE9MiZ0PSZ0ZXN0bXR5cGU9JnB1Yj0xClNvY2lldHkgZm9yIEltcHJlY2lzZSBQcm9iYWJpbGl0aWVzIGh0dHBzOi8vc2lwdGEub3JnLwpMaXZlcnBvb2wgSW5zdGl0dXRlIGZvciBSaXNrIGFuZCBVbmNlcnRhaW50eSBodHRwczovL3Jpc2tpbnN0aXR1dGUudWsgaHR0cHM6Ly93d3cubGl2ZXJwb29sLmFjLnVrL3Jpc2stYW5kLXVuY2VydGFpbnR5LwpTYW5kaWEgTmF0aW9uYWwgTGFib3JhdG9yaWVzJyBFcGlzdGVtaWMgVW5jZXJ0YWludHkgUHJvamVjdCBodHRwczovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS91bmNlcnRhaW50eXByb2plY3Rpb24vCkFwcGxpZWQgQmlvbWF0aGVtYXRpY3MgdW5jZXJ0YWludHkgcHJvamVjdHMgaHR0cHM6Ly9zaXRlcy5nb29nbGUuY29tL3NpdGUvYWJ1bmNlcnRhaW50eS8KTlNGIHdvcmtzaG9wIG9uIHJpc2sgcGVyY2VwdGlvbiBhbmQgY29tbXVuaWNhdGlvbiBodHRwczovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9tb250YXVrcmlza2NvbW11bmljYXRpb24vCg==