Tugas Week 10

Essential of Probability


Adam Richie Wijaya Data Science Students

1 Introduction

Probabillity is a foundational pillar of statistical reasoning, offering a systematic and coherent framework for understanding uncertainty and guiding informed decision-making. Rather than relying on intuition or conjecture, probability enables us to quantify the likelihood of various outcomes, interpret patterns within data, and analyze phenomena that arise from natural or experimental processes. A strong command of probability concepts is essential for effective data analysis, scientific research, and evidence-based practice.

2 Fundamental Concept

2.1 Definition of Probability

Probability is defined as the likelihood that an event will occur. It is calculated using the formula: Total number of favorable outcomes / Total number of possible outcomes.

Example: The probability of getting “heads” when flipping a coin is 1/2, or 50% (0.5), as there is only one favorable outcome (heads) out of two possible outcomes (heads or tails).

2.2 Probability of Independent Events

To find the probability of two independent events occurring together, multiply the probability of each event.

Example: The probability of getting “heads” twice in a row when flipping a coin twice is 0.5 = 0.25 or 25%.

2.3 Sample Space

The sample space refers to the entire set of possible outcomes. When flipping a coin twice, a sample space diagram can be constructed to determine all possible outcomes: HH, HT, TH, and TT, for a total of four possible outcomes. The probability of each individual outcome is 0.5 = 0.25.

Example Problem: The probability of getting at least one “tails” in two coin flips is the sum of the probabilities for the outcomes HT, TH, and TT: 0.25 + 0.25 + 0.25 = 0.75.

2.4 Rules of Probability

All probability problems must always satisfy two conditions: The probability of an event occurring must always have a value between 0 and 1, inclusive of 0 and 1.

  1. A probability of 0 means the event will never happen.

  2. A probability of 1 means the event will always happen.

  3. A probability of 0.5 means the event is expected to occur 50% of the time.

(The probabilities of all possible outcomes must always sum up to 1).

2.5 The Complement Rule

This rule states that the probability of an event not occurring is equal to 1 minus the probability of the event occurring.

The formula is: P(A^c) = 1 - P(A), where P(A^c) is the probability of event A not occurring (the complement of A).

Example: What is the probability of not getting two “tails” when flipping two coins? P() = 1 - P(). P() = 1 - 0.25 = 0.75. This result is the same as summing the probabilities of all other outcomes (HH + HT + TH): 0.25 + 0.25 + 0.25 = 0.75. The video concludes by noting that there are many ways to solve probability problems, and users should use the method that works best for them.

3 Independent and Dependent

3.1 Independent Events

Definition: The occurrence of one event does not affect the probability of the other event occurring.

Example: Rolling a die and flipping a coin. The result of the die (e.g., getting a 6) does not change the probability of the coin landing on Heads or Tails.Formula for Joint Probability (A and B):\[P(A \text{ and } B) = P(A) \times P(B)\]Example Problem: Calculating the probability of getting a 5 on a die and Heads on a coin is \(1/6 \times 1/2 = 1/12\).

3.2 Dependent Events

Definition: The occurrence of one event affects the probability of the subsequent event. The probability of the second event relies on the outcome of the first event.

Example: Drawing two marbles sequentially without replacement from a bag containing green and blue marbles.Reason for Dependency: Because the first marble is not put back, the total number of marbles and the number of specific-colored marbles for the second draw change, thus altering the probability.Formula for Joint Probability (A and B):\[P(A \text{ and } B) = P(A) \times P(B \mid A)\](Where \(P(B \mid A)\) is the probability of B occurring after A has occurred.)

Example Problem: Calculating the probability of drawing a green marble, then a blue marble (without replacement). The first probability is \(7/10\), but the second probability becomes \(3/9\) because only 9 marbles are left. The result is \(7/10 \times 3/9 = 7/30\).

4 Union of Events

4.1 Basic Probability Concepts

Sample Space: The entire set of possible outcomes in a statistical experiment.

Example: Rolling two 6-sided dice results in 36 possible outcomes. Simple Probability: The total number of favorable outcomes divided by the total number of possible outcomes in the sample space.

4.2 Probability of the Union of Events

Definition: The probability of the union calculates the chance of at least one of two events occurring (Event A OR Event B). The keyword “OR” in a probability question typically indicates the need to use the union of events formula.Formula for Union Probability (A or B):\[P(A \text{ or } B) = P(A) + P(B) - P(A \text{ and } B)\]Importance of Subtraction: The term \(P(A \text{ and } B)\) must be subtracted because when \(P(A)\) and \(P(B)\) are added together, the outcomes common to both events (the intersection) are counted twice (duplication). This subtraction removes the duplicate outcomes and.

4.3 Example Problem (Rolling Two Dice)

Event A: Rolling two even numbers.\(P(A) = 9/36\)Event B: Rolling at least one 2.\(P(B) = 11/36\)Intersection (A and B): Rolling two even numbers and at least one 2.The result is found by observing the overlap (intersection) between the two events, which is 5 outcomes.\(P(A \text{ and } B) = 5/36\)Union (A or B): Rolling two even numbers or at least one 2.Using the formula: \(P(A \text{ or } B) = P(A) + P(B) - P(A \text{ and } B)\)\(P(A \text{ or } B) = 9/36 + 11/36 - 5/36 = 15/36\)

5 Exclusive and Exhaustive

5.1 Mutually Exclusive Events

Interpretation: This refers to two or more events that cannot happen at the same time during a single experiment.

Conceptual Example: If you roll a single die, the outcomes of getting a “2” and getting a “5” in one roll are mutually exclusive events.Key Characteristic: The intersection of the two event sets is null (\(\text{P(A and B)} = 0\)).

5.2 Exhaustive Events

Interpretation: This refers to a set of events that, when combined, include all possible outcomes in the sample space (all possible results of an experiment).

Conceptual Example: When rolling a die, the events of getting an “even number” (2, 4, 6) and an “odd number” (1, 3, 5) are exhaustive events because their union covers all possible results (1, 2, 3, 4, 5, 6).Key Characteristic: The union of all event sets equals the entire sample space (\(\text{P(A or B)} = 1\)).

6 Binomial Experiment

6.1 Core Concept of the Binomial Distribution

The binomial probability distribution refers to the probability of a success or a failure in an experiment that is repeated multiple times. The prefix bi (two) refers to the two possible outcomes: success or failure.

6.2 The Four Conditions for a Binomial Experiment

An experiment can only be called a Binomial Experiment if it satisfies all four of the following conditions:

  1. Fixed Number of Trials (\(n\)): The number of repetitions must be definite and set.

  2. Two Possible Outcomes: Each trial must only have two results: success or failure.

  3. Constant Probability of Success (\(p\)): The probability of success (\(p\)) must remain the same for every trial.

  4. Independent Trials: The outcome of one trial does not influence the outcome of another trial.

6.3 Application Examples

Example 1: Flipping a Coin 3 TimesQuestion: Calculate the probability of getting exactly one head from 3 coin flips.Analysis: This experiment meets the four binomial conditions (\(n=3, p=0.5\)).Manual Result: There are 3 ways to get 1 head (HTT, THT, TTH). The total probability is \(\mathbf{0.375}\).

Example 2: Drawing Marbles with ReplacementCrucial Condition: The drawing must be done with replacement to ensure that each trial remains independent and the probability of success is constant.Question: Calculate the probability of drawing exactly 2 green marbles out of 5 draws.Probabilities: \(p\) (success/green) \(= 2/10 = 0.2\). \(1-p\) (failure/not green) \(= 8/10 = 0.8\).Manual Result: There are 10 ways to get 2 successes and 3 failures. The total probability is \(\mathbf{0.2048}\).

6.4 The Binomial Formula

To simplify lengthy calculations, the Binomial Formula is used:\[P(k) = \binom{n}{k} p^k (1-p)^{n-k}\]Formula Components:\(P(k)\): The probability of getting exactly \(k\) successes.\(\binom{n}{k}\): The Combination formula (n choose k) which calculates the number of ways to achieve \(k\) successes in \(n\) trials.\(p^k\): The probability of success (\(p\)) raised to the power of the number of successes (\(k\)).\((1-p)^{n-k}\): The probability of failure (\(1-p\)) raised to the power of the number of failures (\(n-k\)).Formula Application: Applying the formula to the Marble Example (\(n=5, k=2, p=0.2\)) yields the same answer: \(\mathbf{0.2048}\).

7 Binomial Distribution

7.1 Visualizing the Binomial Distribution

The binomial distribution is visualized using a bar chart or histogram, where:The X-axis shows the possible values of \(k\) (the number of successes).The Y-axis shows the probability \(P(k)\) for each value of \(k\).

7.2 Parameters of the Binomial Distribution

If a variable \(X\) follows a binomial distribution, we can calculate its parameters (center and dispersion) using \(n\) (the number of trials) and \(p\) (the probability of success):Mean (\(\mu\)): \(\mu = n \times p\)Variance: \(np(1-p)\)Standard Deviation (\(\sigma\)): \(\sigma = \sqrt{np(1-p)}\)

7.3 Influence of \(n\) and \(p\) on the Distribution Shape

A. Influence of \(n\) (Number of Trials)As \(n\) increases (e.g., from 2 to 10), the shape of the binomial distribution begins to resemble the normal distribution (bell curve).

B. Influence of \(p\) (Probability of Success)The value of \(p\) controls the shape’s skewness:\(p = 0.5\): The distribution will be symmetrical (not skewed), with the mean (\(\mu\)) located exactly in the center.\(p < 0.5\): The distribution will be skewed to the right. This means there is a higher probability of getting a small number of successes (\(k\)) (closer to 0).\(p > 0.5\): The distribution will be skewed to the left. This means there is a higher probability of getting a large number of successes (\(k\)) (closer to \(n\)).In general, the data will always cluster around the Mean (\(\mu = np\)).

7.4 Normal Approximation Guideline

As \(n\) increases, even skewed binomial distributions will approach a normal shape. For calculation purposes, we can assume a normal approximation to the binomial distribution if both of the following conditions are met:\(n \times p \ge 10\)\(n \times (1-p) \ge 10\)(Note: Some guidelines use the value 5, but 10 is a common general guideline).


Example of Visualization

8 References

YouTube account : Simple Learning Pro

the video : 1. https://youtu.be/ynjHKBCiGXY 2. https://youtu.be/LS-_ihDKr2M 3. https://youtu.be/vqKAbhCqSTc 4. https://youtu.be/f7agTv9nA5k 5. https://youtu.be/nRuQAtajJYk 6. https://youtu.be/Y2-vSWFmgyI.

  1. Devore, J. L. (2016). Probability and statistics for engineering and the sciences.

  2. Mendenhall, W., Beaver, R. J., & Beaver, B. M. (2021). Introduction to probability and statistics.

LS0tDQp0aXRsZTogIlR1Z2FzIFdlZWsgMTAiDQpzdWJ0aXRsZTogIkVzc2VudGlhbCBvZiBQcm9iYWJpbGl0eSINCmF1dGhvcjoNCi0gIkFkYW0gUmljaGllIFdpamF5YSAoNTIyNTAwNjQpIg0KDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAid2FybmEuY3NzIg0KICAgIA0KLS0tDQo8ZGl2IGNsYXNzPSJjaGlsZGlzaC1ib3giPjxjZW50ZXI+DQo8aW1nIHNyYz0iQzpcVXNlcnNcc2VwdGlcUGljdHVyZXNccmljaGllXHJpY2kuanBnIj48YnI+DQo8Yj5BZGFtIFJpY2hpZSBXaWpheWEgRGF0YSBTY2llbmNlIFN0dWRlbnRzPC9iPjwvY2VudGVyPjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJub3RlLWJveCI+PGRpdiBjbGFzcz0ib3JhbmdlLWJveCI+PGRpdiBjbGFzcz0icGFzdGVsLXRpdGxlIj4NCiMgSW50cm9kdWN0aW9uDQpQcm9iYWJpbGxpdHkgaXMgYSBmb3VuZGF0aW9uYWwgcGlsbGFyIG9mIHN0YXRpc3RpY2FsIHJlYXNvbmluZywgb2ZmZXJpbmcgYSBzeXN0ZW1hdGljIGFuZCBjb2hlcmVudCBmcmFtZXdvcmsgZm9yIHVuZGVyc3RhbmRpbmcgdW5jZXJ0YWludHkgYW5kIGd1aWRpbmcgaW5mb3JtZWQgZGVjaXNpb24tbWFraW5nLiBSYXRoZXIgdGhhbiByZWx5aW5nIG9uIGludHVpdGlvbiBvciBjb25qZWN0dXJlLCBwcm9iYWJpbGl0eSBlbmFibGVzIHVzIHRvIHF1YW50aWZ5IHRoZSBsaWtlbGlob29kIG9mIHZhcmlvdXMgb3V0Y29tZXMsIGludGVycHJldCBwYXR0ZXJucyB3aXRoaW4gZGF0YSwgYW5kIGFuYWx5emUgcGhlbm9tZW5hIHRoYXQgYXJpc2UgZnJvbSBuYXR1cmFsIG9yIGV4cGVyaW1lbnRhbCBwcm9jZXNzZXMuIEEgc3Ryb25nIGNvbW1hbmQgb2YgcHJvYmFiaWxpdHkgY29uY2VwdHMgaXMgZXNzZW50aWFsIGZvciBlZmZlY3RpdmUgZGF0YSBhbmFseXNpcywgc2NpZW50aWZpYyByZXNlYXJjaCwgYW5kIGV2aWRlbmNlLWJhc2VkIHByYWN0aWNlLg0KPC9kaXY+PC9kaXY+PC9kaXY+DQoNCjxkaXYgY2xhc3M9Im5vdGUtYm94Ij4NCiMgRnVuZGFtZW50YWwgQ29uY2VwdA0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmtuaXRyOjppbmNsdWRlX3VybCgiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQveW5qSEtCQ2lHWFk/c2k9MU9hR0h4VzFyVlVwVEc2SiIpDQpgYGANCg0KPGRpdiBjbGFzcz0iZ3JlZW4tYm94Ij48ZGl2IGNsYXNzPSJwYXN0ZWwtdGl0bGUiPg0KIyMgRGVmaW5pdGlvbiBvZiBQcm9iYWJpbGl0eQ0KUHJvYmFiaWxpdHkgaXMgZGVmaW5lZCBhcyB0aGUgbGlrZWxpaG9vZCB0aGF0IGFuIGV2ZW50IHdpbGwgb2NjdXIuDQpJdCBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmb3JtdWxhOiBUb3RhbCBudW1iZXIgb2YgZmF2b3JhYmxlIG91dGNvbWVzIC8gVG90YWwgbnVtYmVyIG9mIHBvc3NpYmxlIG91dGNvbWVzLg0KDQpFeGFtcGxlOiBUaGUgcHJvYmFiaWxpdHkgb2YgZ2V0dGluZyAiaGVhZHMiIHdoZW4gZmxpcHBpbmcgYSBjb2luIGlzIDEvMiwgb3IgNTAlICgwLjUpLCBhcyB0aGVyZSBpcyBvbmx5IG9uZSBmYXZvcmFibGUgb3V0Y29tZSAoaGVhZHMpIG91dCBvZiB0d28gcG9zc2libGUgb3V0Y29tZXMgKGhlYWRzIG9yIHRhaWxzKS4NCjwvZGl2PjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJvcmFuZ2UtYm94Ij48ZGl2IGNsYXNzPSJwYXN0ZWwtdGl0bGUiPg0KIyMgUHJvYmFiaWxpdHkgb2YgSW5kZXBlbmRlbnQgRXZlbnRzDQpUbyBmaW5kIHRoZSBwcm9iYWJpbGl0eSBvZiB0d28gaW5kZXBlbmRlbnQgZXZlbnRzIG9jY3VycmluZyB0b2dldGhlciwgbXVsdGlwbHkgdGhlIHByb2JhYmlsaXR5IG9mIGVhY2ggZXZlbnQuDQoNCkV4YW1wbGU6IFRoZSBwcm9iYWJpbGl0eSBvZiBnZXR0aW5nICJoZWFkcyIgdHdpY2UgaW4gYSByb3cgd2hlbiBmbGlwcGluZyBhIGNvaW4gdHdpY2UgaXMgMC41IFx0aW1lcyAwLjUgPSAwLjI1IG9yIDI1JS4NCjwvZGl2PjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJwYXN0ZWwtYm94Ij48ZGl2IGNsYXNzPSJwYXN0ZWwtdGl0bGUiPg0KIyMgU2FtcGxlIFNwYWNlDQpUaGUgc2FtcGxlIHNwYWNlIHJlZmVycyB0byB0aGUgZW50aXJlIHNldCBvZiBwb3NzaWJsZSBvdXRjb21lcy4NCldoZW4gZmxpcHBpbmcgYSBjb2luIHR3aWNlLCBhIHNhbXBsZSBzcGFjZSBkaWFncmFtIGNhbiBiZSBjb25zdHJ1Y3RlZCB0byBkZXRlcm1pbmUgYWxsIHBvc3NpYmxlIG91dGNvbWVzOiBISCwgSFQsIFRILCBhbmQgVFQsIGZvciBhIHRvdGFsIG9mIGZvdXIgcG9zc2libGUgb3V0Y29tZXMuDQpUaGUgcHJvYmFiaWxpdHkgb2YgZWFjaCBpbmRpdmlkdWFsIG91dGNvbWUgaXMgMC41IFx0aW1lcyAwLjUgPSAwLjI1Lg0KDQpFeGFtcGxlIFByb2JsZW06IFRoZSBwcm9iYWJpbGl0eSBvZiBnZXR0aW5nIGF0IGxlYXN0IG9uZSAidGFpbHMiIGluIHR3byBjb2luIGZsaXBzIGlzIHRoZSBzdW0gb2YgdGhlIHByb2JhYmlsaXRpZXMgZm9yIHRoZSBvdXRjb21lcyBIVCwgVEgsIGFuZCBUVDogMC4yNSArIDAuMjUgKyAwLjI1ID0gMC43NS4NCjwvZGl2PjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJncmVlbi1ib3giPjxkaXYgY2xhc3M9InBhc3RlbC10aXRsZSI+DQojIyBSdWxlcyBvZiBQcm9iYWJpbGl0eQ0KQWxsIHByb2JhYmlsaXR5IHByb2JsZW1zIG11c3QgYWx3YXlzIHNhdGlzZnkgdHdvIGNvbmRpdGlvbnM6DQpUaGUgcHJvYmFiaWxpdHkgb2YgYW4gZXZlbnQgb2NjdXJyaW5nIG11c3QgYWx3YXlzIGhhdmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZSBvZiAwIGFuZCAxLg0KDQoxLiBBIHByb2JhYmlsaXR5IG9mIDAgbWVhbnMgdGhlIGV2ZW50IHdpbGwgbmV2ZXIgaGFwcGVuLg0KDQoyLiBBIHByb2JhYmlsaXR5IG9mIDEgbWVhbnMgdGhlIGV2ZW50IHdpbGwgYWx3YXlzIGhhcHBlbi4NCg0KMy4gQSBwcm9iYWJpbGl0eSBvZiAwLjUgbWVhbnMgdGhlIGV2ZW50IGlzIGV4cGVjdGVkIHRvIG9jY3VyIDUwJSBvZiB0aGUgdGltZS4NCg0KKFRoZSBwcm9iYWJpbGl0aWVzIG9mIGFsbCBwb3NzaWJsZSBvdXRjb21lcyBtdXN0IGFsd2F5cyBzdW0gdXAgdG8gMSkuDQo8L2Rpdj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0ib3JhbmdlLWJveCI+PGRpdiBjbGFzcz0icGFzdGVsLXRpdGxlIj4NCiMjIFRoZSBDb21wbGVtZW50IFJ1bGUNClRoaXMgcnVsZSBzdGF0ZXMgdGhhdCB0aGUgcHJvYmFiaWxpdHkgb2YgYW4gZXZlbnQgbm90IG9jY3VycmluZyBpcyBlcXVhbCB0byAxIG1pbnVzIHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgZXZlbnQgb2NjdXJyaW5nLg0KDQpUaGUgZm9ybXVsYSBpczogUChBXmMpID0gMSAtIFAoQSksIHdoZXJlIFAoQV5jKSBpcyB0aGUgcHJvYmFiaWxpdHkgb2YgZXZlbnQgQSBub3Qgb2NjdXJyaW5nICh0aGUgY29tcGxlbWVudCBvZiBBKS4NCg0KRXhhbXBsZTogV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgb2Ygbm90IGdldHRpbmcgdHdvICJ0YWlscyIgd2hlbiBmbGlwcGluZyB0d28gY29pbnM/DQpQKFx0ZXh0e25vdCBUVH0pID0gMSAtIFAoXHRleHR7VFR9KS4NClAoXHRleHR7bm90IFRUfSkgPSAxIC0gMC4yNSA9IDAuNzUuDQpUaGlzIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBzdW1taW5nIHRoZSBwcm9iYWJpbGl0aWVzIG9mIGFsbCBvdGhlciBvdXRjb21lcyAoSEggKyBIVCArIFRIKTogMC4yNSArIDAuMjUgKyAwLjI1ID0gMC43NS4NClRoZSB2aWRlbyBjb25jbHVkZXMgYnkgbm90aW5nIHRoYXQgdGhlcmUgYXJlIG1hbnkgd2F5cyB0byBzb2x2ZSBwcm9iYWJpbGl0eSBwcm9ibGVtcywgYW5kIHVzZXJzIHNob3VsZCB1c2UgdGhlIG1ldGhvZCB0aGF0IHdvcmtzIGJlc3QgZm9yIHRoZW0uDQo8L2Rpdj48L2Rpdj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0ibm90ZS1ib3giPg0KIyBJbmRlcGVuZGVudCBhbmQgRGVwZW5kZW50DQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Ka25pdHI6OmluY2x1ZGVfdXJsKCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9MUy1faWhES3IyTT9zaT1qcEhnUGsteUNzZndCdUJiIikgDQpgYGANCg0KPGRpdiBjbGFzcz0iZ3JlZW4tYm94Ij48ZGl2IGNsYXNzPSJwYXN0ZWwtdGl0bGUiPg0KIyMgSW5kZXBlbmRlbnQgRXZlbnRzDQpEZWZpbml0aW9uOiBUaGUgb2NjdXJyZW5jZSBvZiBvbmUgZXZlbnQgZG9lcyBub3QgYWZmZWN0IHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgb3RoZXIgZXZlbnQgb2NjdXJyaW5nLg0KDQpFeGFtcGxlOiBSb2xsaW5nIGEgZGllIGFuZCBmbGlwcGluZyBhIGNvaW4uIFRoZSByZXN1bHQgb2YgdGhlIGRpZSAoZS5nLiwgZ2V0dGluZyBhIDYpIGRvZXMgbm90IGNoYW5nZSB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIGNvaW4gbGFuZGluZyBvbiBIZWFkcyBvciBUYWlscy5Gb3JtdWxhIGZvciBKb2ludCBQcm9iYWJpbGl0eSAoQSBhbmQgQik6JCRQKEEgXHRleHR7IGFuZCB9IEIpID0gUChBKSBcdGltZXMgUChCKSQkRXhhbXBsZSBQcm9ibGVtOiBDYWxjdWxhdGluZyB0aGUgcHJvYmFiaWxpdHkgb2YgZ2V0dGluZyBhIDUgb24gYSBkaWUgYW5kIEhlYWRzIG9uIGEgY29pbiBpcyAkMS82IFx0aW1lcyAxLzIgPSAxLzEyJC4NCjwvZGl2PjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJvcmFuZ2UtYm94Ij48ZGl2IGNsYXNzPSJwYXN0ZWwtdGl0bGUiPg0KIyMgRGVwZW5kZW50IEV2ZW50cw0KRGVmaW5pdGlvbjogVGhlIG9jY3VycmVuY2Ugb2Ygb25lIGV2ZW50IGFmZmVjdHMgdGhlIHByb2JhYmlsaXR5IG9mIHRoZSBzdWJzZXF1ZW50IGV2ZW50LiBUaGUgcHJvYmFiaWxpdHkgb2YgdGhlIHNlY29uZCBldmVudCByZWxpZXMgb24gdGhlIG91dGNvbWUgb2YgdGhlIGZpcnN0IGV2ZW50Lg0KDQpFeGFtcGxlOiBEcmF3aW5nIHR3byBtYXJibGVzIHNlcXVlbnRpYWxseSB3aXRob3V0IHJlcGxhY2VtZW50IGZyb20gYSBiYWcgY29udGFpbmluZyBncmVlbiBhbmQgYmx1ZSBtYXJibGVzLlJlYXNvbiBmb3IgRGVwZW5kZW5jeTogQmVjYXVzZSB0aGUgZmlyc3QgbWFyYmxlIGlzIG5vdCBwdXQgYmFjaywgdGhlIHRvdGFsIG51bWJlciBvZiBtYXJibGVzIGFuZCB0aGUgbnVtYmVyIG9mIHNwZWNpZmljLWNvbG9yZWQgbWFyYmxlcyBmb3IgdGhlIHNlY29uZCBkcmF3IGNoYW5nZSwgdGh1cyBhbHRlcmluZyB0aGUgcHJvYmFiaWxpdHkuRm9ybXVsYSBmb3IgSm9pbnQgUHJvYmFiaWxpdHkgKEEgYW5kIEIpOiQkUChBIFx0ZXh0eyBhbmQgfSBCKSA9IFAoQSkgXHRpbWVzIFAoQiBcbWlkIEEpJCQoV2hlcmUgJFAoQiBcbWlkIEEpJCBpcyB0aGUgcHJvYmFiaWxpdHkgb2YgQiBvY2N1cnJpbmcgYWZ0ZXIgQSBoYXMgb2NjdXJyZWQuKQ0KDQpFeGFtcGxlIFByb2JsZW06IENhbGN1bGF0aW5nIHRoZSBwcm9iYWJpbGl0eSBvZiBkcmF3aW5nIGEgZ3JlZW4gbWFyYmxlLCB0aGVuIGEgYmx1ZSBtYXJibGUgKHdpdGhvdXQgcmVwbGFjZW1lbnQpLiBUaGUgZmlyc3QgcHJvYmFiaWxpdHkgaXMgJDcvMTAkLCBidXQgdGhlIHNlY29uZCBwcm9iYWJpbGl0eSBiZWNvbWVzICQzLzkkIGJlY2F1c2Ugb25seSA5IG1hcmJsZXMgYXJlIGxlZnQuIFRoZSByZXN1bHQgaXMgJDcvMTAgXHRpbWVzIDMvOSA9IDcvMzAkLg0KPC9kaXY+PC9kaXY+PC9kaXY+DQoNCjxkaXYgY2xhc3M9Im5vdGUtYm94Ij4NCiMgVW5pb24gb2YgRXZlbnRzDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Ka25pdHI6OmluY2x1ZGVfdXJsKCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC92cUtBYmhDcVNUYz9zaT1ZUGhRRkVTWkttZ2JsT3c5IikgDQpgYGANCg0KPGRpdiBjbGFzcz0iZ3JlZW4tYm94Ij48ZGl2IGNsYXNzPSJwYXN0ZWwtdGl0bGUiPg0KIyMgQmFzaWMgUHJvYmFiaWxpdHkgQ29uY2VwdHMNClNhbXBsZSBTcGFjZTogVGhlIGVudGlyZSBzZXQgb2YgcG9zc2libGUgb3V0Y29tZXMgaW4gYSBzdGF0aXN0aWNhbCBleHBlcmltZW50Lg0KDQpFeGFtcGxlOiBSb2xsaW5nIHR3byA2LXNpZGVkIGRpY2UgcmVzdWx0cyBpbiAzNiBwb3NzaWJsZSBvdXRjb21lcy4NClNpbXBsZSBQcm9iYWJpbGl0eTogVGhlIHRvdGFsIG51bWJlciBvZiBmYXZvcmFibGUgb3V0Y29tZXMgZGl2aWRlZCBieSB0aGUgdG90YWwgbnVtYmVyIG9mIHBvc3NpYmxlIG91dGNvbWVzIGluIHRoZSBzYW1wbGUgc3BhY2UuDQo8L2Rpdj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0ib3JhbmdlLWJveCI+PGRpdiBjbGFzcz0icGFzdGVsLXRpdGxlIj4NCiMjIFByb2JhYmlsaXR5IG9mIHRoZSBVbmlvbiBvZiBFdmVudHMNCkRlZmluaXRpb246IFRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgdW5pb24gY2FsY3VsYXRlcyB0aGUgY2hhbmNlIG9mIGF0IGxlYXN0IG9uZSBvZiB0d28gZXZlbnRzIG9jY3VycmluZyAoRXZlbnQgQSBPUiBFdmVudCBCKS4gVGhlIGtleXdvcmQgIk9SIiBpbiBhIHByb2JhYmlsaXR5IHF1ZXN0aW9uIHR5cGljYWxseSBpbmRpY2F0ZXMgdGhlIG5lZWQgdG8gdXNlIHRoZSB1bmlvbiBvZiBldmVudHMgZm9ybXVsYS5Gb3JtdWxhIGZvciBVbmlvbiBQcm9iYWJpbGl0eSAoQSBvciBCKTokJFAoQSBcdGV4dHsgb3IgfSBCKSA9IFAoQSkgKyBQKEIpIC0gUChBIFx0ZXh0eyBhbmQgfSBCKSQkSW1wb3J0YW5jZSBvZiBTdWJ0cmFjdGlvbjogVGhlIHRlcm0gJFAoQSBcdGV4dHsgYW5kIH0gQikkIG11c3QgYmUgc3VidHJhY3RlZCBiZWNhdXNlIHdoZW4gJFAoQSkkIGFuZCAkUChCKSQgYXJlIGFkZGVkIHRvZ2V0aGVyLCB0aGUgb3V0Y29tZXMgY29tbW9uIHRvIGJvdGggZXZlbnRzICh0aGUgaW50ZXJzZWN0aW9uKSBhcmUgY291bnRlZCB0d2ljZSAoZHVwbGljYXRpb24pLiBUaGlzIHN1YnRyYWN0aW9uIHJlbW92ZXMgdGhlIGR1cGxpY2F0ZSBvdXRjb21lcyBhbmQuDQo8L2Rpdj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0icGFzdGVsLWJveCI+PGRpdiBjbGFzcz0icGFzdGVsLXRpdGxlIj4NCiMjIEV4YW1wbGUgUHJvYmxlbSAoUm9sbGluZyBUd28gRGljZSkNCkV2ZW50IEE6IFJvbGxpbmcgdHdvIGV2ZW4gbnVtYmVycy4kUChBKSA9IDkvMzYkRXZlbnQgQjogUm9sbGluZyBhdCBsZWFzdCBvbmUgMi4kUChCKSA9IDExLzM2JEludGVyc2VjdGlvbiAoQSBhbmQgQik6IFJvbGxpbmcgdHdvIGV2ZW4gbnVtYmVycyBhbmQgYXQgbGVhc3Qgb25lIDIuVGhlIHJlc3VsdCBpcyBmb3VuZCBieSBvYnNlcnZpbmcgdGhlIG92ZXJsYXAgKGludGVyc2VjdGlvbikgYmV0d2VlbiB0aGUgdHdvIGV2ZW50cywgd2hpY2ggaXMgNSBvdXRjb21lcy4kUChBIFx0ZXh0eyBhbmQgfSBCKSA9IDUvMzYkVW5pb24gKEEgb3IgQik6IFJvbGxpbmcgdHdvIGV2ZW4gbnVtYmVycyBvciBhdCBsZWFzdCBvbmUgMi5Vc2luZyB0aGUgZm9ybXVsYTogJFAoQSBcdGV4dHsgb3IgfSBCKSA9IFAoQSkgKyBQKEIpIC0gUChBIFx0ZXh0eyBhbmQgfSBCKSQkUChBIFx0ZXh0eyBvciB9IEIpID0gOS8zNiArIDExLzM2IC0gNS8zNiA9IDE1LzM2JA0KPC9kaXY+PC9kaXY+PC9kaXY+DQoNCjxkaXYgY2xhc3M9Im5vdGUtYm94Ij4NCiMgRXhjbHVzaXZlIGFuZCBFeGhhdXN0aXZlDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Ka25pdHI6OmluY2x1ZGVfdXJsKCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9mN2FnVHY5bkE1az9zaT1XUkVTN1ZxMmRMSlNYTEtEIikNCmBgYA0KDQo8ZGl2IGNsYXNzPSJncmVlbi1ib3giPjxkaXYgY2xhc3M9InBhc3RlbC10aXRsZSI+DQojIyBNdXR1YWxseSBFeGNsdXNpdmUgRXZlbnRzDQpJbnRlcnByZXRhdGlvbjogVGhpcyByZWZlcnMgdG8gdHdvIG9yIG1vcmUgZXZlbnRzIHRoYXQgY2Fubm90IGhhcHBlbiBhdCB0aGUgc2FtZSB0aW1lIGR1cmluZyBhIHNpbmdsZSBleHBlcmltZW50Lg0KDQpDb25jZXB0dWFsIEV4YW1wbGU6IElmIHlvdSByb2xsIGEgc2luZ2xlIGRpZSwgdGhlIG91dGNvbWVzIG9mIGdldHRpbmcgYSAiMiIgYW5kIGdldHRpbmcgYSAiNSIgaW4gb25lIHJvbGwgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBldmVudHMuS2V5IENoYXJhY3RlcmlzdGljOiBUaGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gZXZlbnQgc2V0cyBpcyBudWxsICgkXHRleHR7UChBIGFuZCBCKX0gPSAwJCkuDQo8L2Rpdj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0ib3JhbmdlLWJveCI+PGRpdiBjbGFzcz0icGFzdGVsLXRpdGxlIj4NCiMjIEV4aGF1c3RpdmUgRXZlbnRzDQpJbnRlcnByZXRhdGlvbjogVGhpcyByZWZlcnMgdG8gYSBzZXQgb2YgZXZlbnRzIHRoYXQsIHdoZW4gY29tYmluZWQsIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG91dGNvbWVzIGluIHRoZSBzYW1wbGUgc3BhY2UgKGFsbCBwb3NzaWJsZSByZXN1bHRzIG9mIGFuIGV4cGVyaW1lbnQpLg0KDQpDb25jZXB0dWFsIEV4YW1wbGU6IFdoZW4gcm9sbGluZyBhIGRpZSwgdGhlIGV2ZW50cyBvZiBnZXR0aW5nIGFuICJldmVuIG51bWJlciIgKDIsIDQsIDYpIGFuZCBhbiAib2RkIG51bWJlciIgKDEsIDMsIDUpIGFyZSBleGhhdXN0aXZlIGV2ZW50cyBiZWNhdXNlIHRoZWlyIHVuaW9uIGNvdmVycyBhbGwgcG9zc2libGUgcmVzdWx0cyAoMSwgMiwgMywgNCwgNSwgNikuS2V5IENoYXJhY3RlcmlzdGljOiBUaGUgdW5pb24gb2YgYWxsIGV2ZW50IHNldHMgZXF1YWxzIHRoZSBlbnRpcmUgc2FtcGxlIHNwYWNlICgkXHRleHR7UChBIG9yIEIpfSA9IDEkKS4NCjwvZGl2PjwvZGl2PjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJub3RlLWJveCI+DQojIEJpbm9taWFsIEV4cGVyaW1lbnQNCg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL25SdVFBdGFqSllrP3NpPXdjVU5KT1JaQ3NVUHFiQVIiKQ0KYGBgDQoNCjxkaXYgY2xhc3M9ImdyZWVuLWJveCI+PGRpdiBjbGFzcz0icGFzdGVsLXRpdGxlIj4NCiMjIENvcmUgQ29uY2VwdCBvZiB0aGUgQmlub21pYWwgRGlzdHJpYnV0aW9uDQpUaGUgYmlub21pYWwgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIHJlZmVycyB0byB0aGUgcHJvYmFiaWxpdHkgb2YgYSBzdWNjZXNzIG9yIGEgZmFpbHVyZSBpbiBhbiBleHBlcmltZW50IHRoYXQgaXMgcmVwZWF0ZWQgbXVsdGlwbGUgdGltZXMuIFRoZSBwcmVmaXggYmkgKHR3bykgcmVmZXJzIHRvIHRoZSB0d28gcG9zc2libGUgb3V0Y29tZXM6IHN1Y2Nlc3Mgb3IgZmFpbHVyZS4NCjwvZGl2PjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJvcmFuZ2UtYm94Ij48ZGl2IGNsYXNzPSJwYXN0ZWwtdGl0bGUiPg0KIyMgVGhlIEZvdXIgQ29uZGl0aW9ucyBmb3IgYSBCaW5vbWlhbCBFeHBlcmltZW50DQpBbiBleHBlcmltZW50IGNhbiBvbmx5IGJlIGNhbGxlZCBhIEJpbm9taWFsIEV4cGVyaW1lbnQgaWYgaXQgc2F0aXNmaWVzIGFsbCBmb3VyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KMS4gRml4ZWQgTnVtYmVyIG9mIFRyaWFscyAoJG4kKTogVGhlIG51bWJlciBvZiByZXBldGl0aW9ucyBtdXN0IGJlIGRlZmluaXRlIGFuZCBzZXQuDQoNCjIuIFR3byBQb3NzaWJsZSBPdXRjb21lczogRWFjaCB0cmlhbCBtdXN0IG9ubHkgaGF2ZSB0d28gcmVzdWx0czogc3VjY2VzcyBvciBmYWlsdXJlLg0KDQozLiBDb25zdGFudCBQcm9iYWJpbGl0eSBvZiBTdWNjZXNzICgkcCQpOiBUaGUgcHJvYmFiaWxpdHkgb2Ygc3VjY2VzcyAoJHAkKSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBmb3IgZXZlcnkgdHJpYWwuDQoNCjQuIEluZGVwZW5kZW50IFRyaWFsczogVGhlIG91dGNvbWUgb2Ygb25lIHRyaWFsIGRvZXMgbm90IGluZmx1ZW5jZSB0aGUgb3V0Y29tZSBvZiBhbm90aGVyIHRyaWFsLg0KPC9kaXY+PC9kaXY+DQoNCjxkaXYgY2xhc3M9InBhc3RlbC1ib3giPjxkaXYgY2xhc3M9InBhc3RlbC10aXRsZSI+DQojIyBBcHBsaWNhdGlvbiBFeGFtcGxlcw0KRXhhbXBsZSAxOiBGbGlwcGluZyBhIENvaW4gMyBUaW1lc1F1ZXN0aW9uOiBDYWxjdWxhdGUgdGhlIHByb2JhYmlsaXR5IG9mIGdldHRpbmcgZXhhY3RseSBvbmUgaGVhZCBmcm9tIDMgY29pbiBmbGlwcy5BbmFseXNpczogVGhpcyBleHBlcmltZW50IG1lZXRzIHRoZSBmb3VyIGJpbm9taWFsIGNvbmRpdGlvbnMgKCRuPTMsIHA9MC41JCkuTWFudWFsIFJlc3VsdDogVGhlcmUgYXJlIDMgd2F5cyB0byBnZXQgMSBoZWFkIChIVFQsIFRIVCwgVFRIKS4gVGhlIHRvdGFsIHByb2JhYmlsaXR5IGlzICRcbWF0aGJmezAuMzc1fSQuDQoNCkV4YW1wbGUgMjogRHJhd2luZyBNYXJibGVzIHdpdGggUmVwbGFjZW1lbnRDcnVjaWFsIENvbmRpdGlvbjogVGhlIGRyYXdpbmcgbXVzdCBiZSBkb25lIHdpdGggcmVwbGFjZW1lbnQgdG8gZW5zdXJlIHRoYXQgZWFjaCB0cmlhbCByZW1haW5zIGluZGVwZW5kZW50IGFuZCB0aGUgcHJvYmFiaWxpdHkgb2Ygc3VjY2VzcyBpcyBjb25zdGFudC5RdWVzdGlvbjogQ2FsY3VsYXRlIHRoZSBwcm9iYWJpbGl0eSBvZiBkcmF3aW5nIGV4YWN0bHkgMiBncmVlbiBtYXJibGVzIG91dCBvZiA1IGRyYXdzLlByb2JhYmlsaXRpZXM6ICRwJCAoc3VjY2Vzcy9ncmVlbikgJD0gMi8xMCA9IDAuMiQuICQxLXAkIChmYWlsdXJlL25vdCBncmVlbikgJD0gOC8xMCA9IDAuOCQuTWFudWFsIFJlc3VsdDogVGhlcmUgYXJlIDEwIHdheXMgdG8gZ2V0IDIgc3VjY2Vzc2VzIGFuZCAzIGZhaWx1cmVzLiBUaGUgdG90YWwgcHJvYmFiaWxpdHkgaXMgJFxtYXRoYmZ7MC4yMDQ4fSQuDQo8L2Rpdj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZ3JlZW4tYm94Ij48ZGl2IGNsYXNzPSJwYXN0ZWwtdGl0bGUiPg0KIyMgVGhlIEJpbm9taWFsIEZvcm11bGENClRvIHNpbXBsaWZ5IGxlbmd0aHkgY2FsY3VsYXRpb25zLCB0aGUgQmlub21pYWwgRm9ybXVsYSBpcyB1c2VkOiQkUChrKSA9IFxiaW5vbXtufXtrfSBwXmsgKDEtcClee24ta30kJEZvcm11bGEgQ29tcG9uZW50czokUChrKSQ6IFRoZSBwcm9iYWJpbGl0eSBvZiBnZXR0aW5nIGV4YWN0bHkgJGskIHN1Y2Nlc3Nlcy4kXGJpbm9te259e2t9JDogVGhlIENvbWJpbmF0aW9uIGZvcm11bGEgKG4gY2hvb3NlIGspIHdoaWNoIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiB3YXlzIHRvIGFjaGlldmUgJGskIHN1Y2Nlc3NlcyBpbiAkbiQgdHJpYWxzLiRwXmskOiBUaGUgcHJvYmFiaWxpdHkgb2Ygc3VjY2VzcyAoJHAkKSByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICgkayQpLiQoMS1wKV57bi1rfSQ6IFRoZSBwcm9iYWJpbGl0eSBvZiBmYWlsdXJlICgkMS1wJCkgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiB0aGUgbnVtYmVyIG9mIGZhaWx1cmVzICgkbi1rJCkuRm9ybXVsYSBBcHBsaWNhdGlvbjogQXBwbHlpbmcgdGhlIGZvcm11bGEgdG8gdGhlIE1hcmJsZSBFeGFtcGxlICgkbj01LCBrPTIsIHA9MC4yJCkgeWllbGRzIHRoZSBzYW1lIGFuc3dlcjogJFxtYXRoYmZ7MC4yMDQ4fSQuDQo8L2Rpdj48L2Rpdj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0ibm90ZS1ib3giPg0KIyBCaW5vbWlhbCBEaXN0cmlidXRpb24NCg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1kyLXZTV0ZtZ3lJP3NpPTZEdnJOWGM1MC1QQUpWdVciKQ0KYGBgDQoNCjxkaXYgY2xhc3M9ImdyZWVuLWJveCI+PGRpdiBjbGFzcz0icGFzdGVsLXRpdGxlIj4NCiMjIFZpc3VhbGl6aW5nIHRoZSBCaW5vbWlhbCBEaXN0cmlidXRpb24NClRoZSBiaW5vbWlhbCBkaXN0cmlidXRpb24gaXMgdmlzdWFsaXplZCB1c2luZyBhIGJhciBjaGFydCBvciBoaXN0b2dyYW0sIHdoZXJlOlRoZSBYLWF4aXMgc2hvd3MgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiAkayQgKHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzKS5UaGUgWS1heGlzIHNob3dzIHRoZSBwcm9iYWJpbGl0eSAkUChrKSQgZm9yIGVhY2ggdmFsdWUgb2YgJGskLg0KPC9kaXY+PC9kaXY+DQoNCjxkaXYgY2xhc3M9Im9yYW5nZS1ib3giPjxkaXYgY2xhc3M9InBhc3RlbC10aXRsZSI+DQojIyBQYXJhbWV0ZXJzIG9mIHRoZSBCaW5vbWlhbCBEaXN0cmlidXRpb24NCklmIGEgdmFyaWFibGUgJFgkIGZvbGxvd3MgYSBiaW5vbWlhbCBkaXN0cmlidXRpb24sIHdlIGNhbiBjYWxjdWxhdGUgaXRzIHBhcmFtZXRlcnMgKGNlbnRlciBhbmQgZGlzcGVyc2lvbikgdXNpbmcgJG4kICh0aGUgbnVtYmVyIG9mIHRyaWFscykgYW5kICRwJCAodGhlIHByb2JhYmlsaXR5IG9mIHN1Y2Nlc3MpOk1lYW4gKCRcbXUkKTogJFxtdSA9IG4gXHRpbWVzIHAkVmFyaWFuY2U6ICRucCgxLXApJFN0YW5kYXJkIERldmlhdGlvbiAoJFxzaWdtYSQpOiAkXHNpZ21hID0gXHNxcnR7bnAoMS1wKX0kDQo8L2Rpdj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0icGFzdGVsLWJveCI+PGRpdiBjbGFzcz0icGFzdGVsLXRpdGxlIj4NCiMjIEluZmx1ZW5jZSBvZiAkbiQgYW5kICRwJCBvbiB0aGUgRGlzdHJpYnV0aW9uIFNoYXBlDQpBLiBJbmZsdWVuY2Ugb2YgJG4kIChOdW1iZXIgb2YgVHJpYWxzKUFzICRuJCBpbmNyZWFzZXMgKGUuZy4sIGZyb20gMiB0byAxMCksIHRoZSBzaGFwZSBvZiB0aGUgYmlub21pYWwgZGlzdHJpYnV0aW9uIGJlZ2lucyB0byByZXNlbWJsZSB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbiAoYmVsbCBjdXJ2ZSkuDQoNCkIuIEluZmx1ZW5jZSBvZiAkcCQgKFByb2JhYmlsaXR5IG9mIFN1Y2Nlc3MpVGhlIHZhbHVlIG9mICRwJCBjb250cm9scyB0aGUgc2hhcGUncyBza2V3bmVzczokcCA9IDAuNSQ6IFRoZSBkaXN0cmlidXRpb24gd2lsbCBiZSBzeW1tZXRyaWNhbCAobm90IHNrZXdlZCksIHdpdGggdGhlIG1lYW4gKCRcbXUkKSBsb2NhdGVkIGV4YWN0bHkgaW4gdGhlIGNlbnRlci4kcCA8IDAuNSQ6IFRoZSBkaXN0cmlidXRpb24gd2lsbCBiZSBza2V3ZWQgdG8gdGhlIHJpZ2h0LiBUaGlzIG1lYW5zIHRoZXJlIGlzIGEgaGlnaGVyIHByb2JhYmlsaXR5IG9mIGdldHRpbmcgYSBzbWFsbCBudW1iZXIgb2Ygc3VjY2Vzc2VzICgkayQpIChjbG9zZXIgdG8gMCkuJHAgPiAwLjUkOiBUaGUgZGlzdHJpYnV0aW9uIHdpbGwgYmUgc2tld2VkIHRvIHRoZSBsZWZ0LiBUaGlzIG1lYW5zIHRoZXJlIGlzIGEgaGlnaGVyIHByb2JhYmlsaXR5IG9mIGdldHRpbmcgYSBsYXJnZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICgkayQpIChjbG9zZXIgdG8gJG4kKS5JbiBnZW5lcmFsLCB0aGUgZGF0YSB3aWxsIGFsd2F5cyBjbHVzdGVyIGFyb3VuZCB0aGUgTWVhbiAoJFxtdSA9IG5wJCkuDQo8L2Rpdj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZ3JlZW4tYm94Ij48ZGl2IGNsYXNzPSJwYXN0ZWwtdGl0bGUiPg0KIyMgTm9ybWFsIEFwcHJveGltYXRpb24gR3VpZGVsaW5lDQpBcyAkbiQgaW5jcmVhc2VzLCBldmVuIHNrZXdlZCBiaW5vbWlhbCBkaXN0cmlidXRpb25zIHdpbGwgYXBwcm9hY2ggYSBub3JtYWwgc2hhcGUuIEZvciBjYWxjdWxhdGlvbiBwdXJwb3Nlcywgd2UgY2FuIGFzc3VtZSBhIG5vcm1hbCBhcHByb3hpbWF0aW9uIHRvIHRoZSBiaW5vbWlhbCBkaXN0cmlidXRpb24gaWYgYm90aCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDokbiBcdGltZXMgcCBcZ2UgMTAkJG4gXHRpbWVzICgxLXApIFxnZSAxMCQoTm90ZTogU29tZSBndWlkZWxpbmVzIHVzZSB0aGUgdmFsdWUgNSwgYnV0IDEwIGlzIGEgY29tbW9uIGdlbmVyYWwgZ3VpZGVsaW5lKS4NCjwvZGl2PjwvZGl2Pg0KDQo8Y2VudGVyPg0KPGltZyBzcmM9IkM6XFVzZXJzXHNlcHRpXFBpY3R1cmVzXHJpY2hpZVxiaW5vbWlhbC5wbmciPjxicj4NCjxiPkV4YW1wbGUgb2YgVmlzdWFsaXphdGlvbjwvYj48L2NlbnRlcj48L2Rpdj4NCg0KPGRpdiBjbGFzcz0ibm90ZS1ib3giPjxkaXYgY2xhc3M9Im9yYW5nZS1ib3giPjxkaXYgY2xhc3M9InBhc3RlbC10aXRsZSI+DQojIFJlZmVyZW5jZXMNCllvdVR1YmUgYWNjb3VudCA6IFNpbXBsZSBMZWFybmluZyBQcm8NCg0KdGhlIHZpZGVvIDogMS4gaHR0cHM6Ly95b3V0dS5iZS95bmpIS0JDaUdYWQ0KMi4gaHR0cHM6Ly95b3V0dS5iZS9MUy1faWhES3IyTQ0KMy4gaHR0cHM6Ly95b3V0dS5iZS92cUtBYmhDcVNUYw0KNC4gaHR0cHM6Ly95b3V0dS5iZS9mN2FnVHY5bkE1aw0KNS4gaHR0cHM6Ly95b3V0dS5iZS9uUnVRQXRhakpZaw0KNi4gaHR0cHM6Ly95b3V0dS5iZS9ZMi12U1dGbWd5SS4NCg0KMS4gRGV2b3JlLCBKLiBMLiAoMjAxNikuIFByb2JhYmlsaXR5IGFuZCBzdGF0aXN0aWNzIGZvciBlbmdpbmVlcmluZyBhbmQgdGhlIHNjaWVuY2VzLg0KDQoyLiBNZW5kZW5oYWxsLCBXLiwgQmVhdmVyLCBSLiBKLiwgJiBCZWF2ZXIsIEIuIE0uICgyMDIxKS4gSW50cm9kdWN0aW9uIHRvIHByb2JhYmlsaXR5IGFuZCBzdGF0aXN0aWNzLg0KDQo8L2Rpdj48L2Rpdj48L2Rpdj4=