Problem 10.2 (10 points)

  1. A Type I error means we conclude that the drug will induce sleep in fewer than \(80\%\) of people suffering from insomnia, when the drug actually is \(80\%\) effective.
  2. The random variable \(Y\) has a Binomial distribution with parameters \(n=20\) and \(p\), where the drug being tested induces sleep in \(p \cdot 100\%\) of people suffering from insomnia. The rejection region is the set \(RR: \{y \le 12\}\). The probability of a Type I error is \(\alpha = P(Y \le 12 \mid p = 0.8) = 0.032\) (Table 1d, page 784).
  3. A Type II error means we conclude that the drug will induce sleep in (at least) \(80\%\) of people suffering from insomnia, when the drug is less than \(80\%\) effective.
  4. If \(p = 0.6\), then the probability of a Type II error is \(\beta = P(Y > 12 \mid p = 0.6) = 1 - P(Y \le 12 \mid p = 0.6) = 1 - 0.584 = 0.416\).
  5. If \(p = 0.4\), then the probability of a Type II error is \(\beta = P(Y > 12 \mid p = 0.4) = 1 - P(Y \le 12 \mid p = 0.4) = 1 - 0.979 = 0.021\).

Problem 10.4 (8 points)

Let \(p\) be the proportion of ledger sheets that contain an error. We will test the null hypothesis \(H_0 : p = 0.05\) versus the alternative hypothesis \(H_a : p > 0.05\). We will choose two ledger sheets at random. We reject \(H_0\) if both sheets contain errors (i.e. both are bad). If there is one bad sheet and one good sheet, we choose a third sheet and we reject \(H_0\) if the third sheet is bad. Otherwise, we fail to reject \(H_0\). Thus, we can respectively denote the rejection set and its compliment by \(RR : \{bb,bgb,gbb\}\) and \(\overline{RR} : \{gg,bgg,gbg\}\). Also, in this notation, \(P(\{b\}) = p\) and \(P(\{g\}) = 1 - p\).
  1. A Type I error means we conclude the error rate, \(p\), is greater than 0.05 when the true value of \(p\) is 0.05.
  2. The Type I error probability is \[ \alpha = P(RR \mid p = 0.05) = (0.05)^2 + 2(0.95)(0.05)^2 = 0.0073. \]
  3. A Type II error means we conclude the error rate, \(p\), is 0.05 when the real error rate is greater than 0.05.
  4. The Type II error probability is \[ \beta = P(\overline{RR} \mid p) = (1 - p)^2 + 2p(1 - p)^2 = (1 + 2p)(1 - p)^2. \] Notice that \(\beta\) is a function of the unknown parameter, \(p\), whereas \(\alpha\) is a constant. This difference occurs because \(H_a\) is a composite hypothesis, whereas \(H_0\) is a simple hypothesis.

Problem 10.6 (6 points)

Let \(Y\) have a Binomial distribution with \(n = 15\) and probability mass function \(P(Y = y) = \binom{15}{y} p^{y} (1 - p)^{15 - y}\), \(y = 0,1,2,\dotsc,15\), \(0 \le p \le 1\). We will test the null hypothesis \(H_0 : p = 0.10\). We reject \(H_0\) if \(Y_1 \ge 4\) or \(Y_1 \le 3\) and \(Y_1 + Y_2 \ge 6\), where \(Y_1\) and \(Y_2\) are independent and have the same Binomial distribution as \(Y\).
  1. The Type I error probability, \(\alpha\), is the probability we reject \(H_0\) when it is true. Thus \[\begin{align*} \alpha &= P(Y_1 \ge 4 \mid p = 0.10) + P(Y_1 + Y_2 \ge 6, Y_1 \le 3 \mid p = 0.10) \\ &= (1 - P(Y_1 \le 3 \mid p = 0.10)) + \sum_{k=0}^{3} P(Y_2 \ge 6 - k, Y_1 = k \mid p = 0.10) \\ &= (1 - P(Y_1 \le 3 \mid p = 0.10)) + \sum_{k=0}^{3} P(Y_2 \ge 6 - k \mid p = 0.10)\cdot P(Y_1 = k \mid p = 0.10) \\ &= (1 - P(Y_1 \le 3 \mid p = 0.10)) + \sum_{k=0}^{3} (1 - P(Y_2 \le 5 - k \mid p = 0.10))\cdot P(Y_1 = k \mid p = 0.10). \end{align*}\]
  2. Using the statistical software package “R,” rather than a table, we find \(\alpha \doteq 0.099\).
  3. Suppose now that the null hypothesis is \(H_0 : p = 0.30\). Replacing \(p = 0.10\) with \(p = 0.30\) in part (a) and using “R” again, we calculate \(\alpha \doteq 0.932\) (over \(93\%\) chance of a Type I error!).
  4. The given test procedure fails to reject the null hypothesis when \(Y_1 \le 3\) and \(Y_1 + Y_2 \le 5\). Therefore, when \(p = 0.30\), the Type II error probability is \[\begin{align*} \beta &= P(Y_1 \le 3, Y_1 + Y_2 \le 5 \mid p = 0.30) \\ &= \sum_{k=0}^{3} P(Y_2 \le 5 - k, Y_1 = k \mid p = 0.30) \\ &= \sum_{k=0}^{3} P(Y_2 \le 5 - k \mid p = 0.30)\cdot P(Y_1 = k \mid p = 0.30). \end{align*}\] Using “R” we find \(\beta = 0.068\).

Problem 10.12 (6 points)

  1. Conjecture: Boys have a greater interest in sports, as a leisure time activity, than do girls. As an alternative hypothesis to the null hypothesis of no difference in the mean LIC scores for boys and girls, I would say that the mean for boys is greater than the mean for girls. \[ H_0 : \mu_b - \mu_g = 0, \qquad H_a : \mu_b - \mu_b > 0. \]
  2. \(H_a\) corresponds to a one-tailed statistical test.
  3. We use \(\overline{Y}_b - \overline{Y}_g\) as an (approximately normal) unbiased point estimator for \(\mu_b - \mu_a\). We estimate the variance of \(\overline{Y}_b - \overline{Y}_g\) by \[\begin{align*} \sigma^{2}_{\overline{Y}_b - \overline{Y}_g} &= \frac{\sigma^2_b}{n_1} + \frac{\sigma^2_g}{n_2} \\ &\doteq \frac{s^2_b}{n_1} + \frac{s^2_g}{n_2} \\ &\doteq \frac{(4.82)^2}{252} + \frac{(4.41)^2}{307} \\ &\doteq 0.1555. \end{align*}\] The estimated value for the standard deviation is therefore \(\sigma_{\overline{Y}_b - \overline{Y}_g} \doteq 0.3944\). We use the standard normal random variable as the test statistic. Testing at the level \(\alpha = 0.01\), the right-tailed rejection region is \(RR : \{z > z_{0.01}\} \doteq \{z > 2.325\}\). From the data, the value of the test statistic is \[ z = \frac{\bar{y}_b - \bar{y}_g}{\sigma_{\overline{Y}_b - \overline{Y}_g}} \doteq \frac{13.65 - 9.88}{0.3944} \doteq 9.56. \] Since \(z = 9.56 > 2.325\), these data support the conjecture, rather strongly, that the mean LIC scores for sports is higher for boys than for girls at the \(0.01\)-level of significance.

Problem 10.14

The data for the large scale hypothesis test are as follows: \[ n = 300,\quad y = 98,\quad \hat{p} = 98/300 \doteq 0.3267. \]
  1. We will perform a two-tailed hypothesis test at the significance level \(\alpha = 0.05\). The elements of this test are \[\begin{align*} H_0 &: p = 0.25 \\ H_a &: p \ne 0.25 \\ \sigma_{\hat{p}} &= \sqrt{p_0(1 - p_0)/300} = \sqrt{(0.25)(0.75)/300} = 0.025 \\ TS &: z = \frac{\hat{p} - 0.25}{\sigma_{\hat{p}}} \doteq \frac{0.3267 - 0.25}{0.025} \doteq 3.0667 \\ RR &: \{\lvert z \rvert > z_{0.025}\} = \{\lvert z \rvert > 1.96\} \end{align*}\] Since \(\lvert z \rvert = 3.0667 > 1.96\) we conclude that at the \(\alpha = 0.05\) level of significance, these data support the alternative hypothesis that \(p \ne 0.25\).
  2. This study indicates that either the columnist underestimated the proportion of students over \(30\), or that this campus has a greater proportion than the average over many campuses.

Problem 10.18 (6 points)

Assume two independent samples. Each population has the same (large) sample size, \(n_1 = n_2 = 1000\). The data provide point estimates for each population’s proportion, \(\hat{p}_1 = 0.45\) and \(\hat{p}_2 = 0.34\).
  1. We will perform a two-tailed hypothesis test at significance level \(\alpha = 0.05\). We are interested in whether these data support the claim that \(p_1 \ne p_2\). The respective null and alternative hypotheses are \[ H_0 : p_1 - p_2 = 0, \quad H_a : p_1 - p_2 \ne 0. \] Under the null hypothesis, \(\hat{p}_1\) and \(\hat{p}_2\) are independent unbiased point estimators for the same parameter \(p_1 = p_2\). We arrive at an improved estimate of this parameter by pooling the individual results as follows: \[ \hat{p}_{pooled} = \frac{n_1\cdot \hat{p}_1 + n_2\cdot \hat{p}_2}{n_1 + n_2} = \frac{450 + 340}{1000 + 1000} = \frac{790}{2000} = 0.395. \] Using \(\hat{p}_{pooled}\) as an estimate for both \(p_1\) and \(p_2\) provides an estimate for the standard deviation \[ \sigma_{\hat{p}_1 - \hat{p}_2} = \sqrt{p_1(1 - p_1)/n_1 + p_2(1 - p_2)/n_2} \doteq \sqrt{2(0.395)(0.605)/1000} \doteq 0.02186. \] The large sample sizes imply that the probability distribution of \(\hat{p}_1 - \hat{p}_2\) is approximately normal. Under the null hypothesis, \(E[\hat{p}_1 - \hat{p}_2] = 0\). Thus the probability distribution of \(Z = (\hat{p}_1 - \hat{p}_2)/\sigma_{\hat{p}_1 - \hat{p}_2}\) is approximately the standard normal distribution. We will use \(Z\) as our test statistic. The rejection region for our two-tailed hypothesis test is therefore \(RR : \{\lvert z \rvert > z_{0.025}\} \doteq \{\lvert z \rvert > 1.96\}\). Now, the value of the test statistic is \[ TS : z = (\hat{p}_1 - \hat{p}_2)/\sigma_{\hat{p}_1 - \hat{p}_2} \doteq (0.45 - 0.34)/0.02186 \doteq 5.03. \] Since \(\lvert z \rvert = 5.03 > 1.96\), these data support the claim that the proportion of aspirin users for 1986 differs from the proportion of aspirin users for 1991.
  2. We perform a similar test on the proportion of ibuprofen users. This test will be a right-tailed test. The data provide point estimates for each population’s proportion, \(\hat{p}_1 = 0.14\) and \(\hat{p}_2 = 0.26\). We are interested in whether these data support the claim that \(p_1 < p_2\). The respective null and alternative hypotheses are \[ H_0 : p_2 - p_1 = 0, \quad H_a : p_2 - p_1 > 0. \] Under the null hypothesis, \(\hat{p}_1\) and \(\hat{p}_2\) are independent unbiased point estimators for the same parameter \(p_1 = p_2\). We arrive at an improved estimate of this parameter by pooling the individual results as follows: \[ \hat{p}_{pooled} = \frac{n_1\cdot \hat{p}_1 + n_2\cdot \hat{p}_2}{n_1 + n_2} = \frac{140 + 260}{1000 + 1000} = \frac{400}{2000} = 0.200. \] Using \(\hat{p}_{pooled}\) as an estimate for both \(p_1\) and \(p_2\) provides an estimate for the standard deviation \[ \sigma_{\hat{p}_2 - \hat{p}_1} = \sqrt{p_1(1 - p_1)/n_1 + p_2(1 - p_2)/n_2} \doteq \sqrt{2(0.2)(0.8)/1000} \doteq 0.01789. \] The large sample sizes imply that the probability distribution of \(\hat{p}_2 - \hat{p}_1\) is approximately normal. Under the null hypothesis, \(E[\hat{p}_2 - \hat{p}_1] = 0\). Thus the probability distribution of \(Z = (\hat{p}_2 - \hat{p}_1)/\sigma_{\hat{p}_2 - \hat{p}_1}\) is approximately the standard normal distribution. We will use \(Z\) as our test statistic. The rejection region for our right-tailed hypothesis test is therefore \(RR : \{ z > z_{0.05}\} \doteq \{ z > 1.645\}\). Now, the value of the test statistic is \[ TS : z = (\hat{p}_2 - \hat{p}_1)/\sigma_{\hat{p}_2 - \hat{p}_1} \doteq (0.26 - 0.14)/0.01789 \doteq 6.7. \] Since \(z = 6.7 > 1.645\), these data provide sufficient evidence to indicate that ibuprofen has a greater market share in 1991 than it did in 1986.
  3. The tests in (a) and (b) are related. Since most people use just one type of pain reliever at a time, an increased proportion of ibuprofen users indicates a decreased use among the remaining types. The proportion for acetaminophen seems stable, so the decrease must come from aspirin.

Problem 10.21 (2 points)

To use a \(Z\)-test to test a hypothesis concerning a population mean \(\mu\), we need an independent and random sample \(Y_1,\dotsc,Y_n\). Moreover, the sample size \(n\) should be sufficiently large for the probability distribution of \(\sqrt{n}\cdot(\overline{Y} - \mu)/S\) to be well approximated by the standard normal probability distribution.

Problem 10.26 (2 points)

Let \((Y_1,Y_2,Y_3,Y_4)\) have a multinomial distribution with \(n\) trials and probabilities \((p_1,p_2,p_3,p_4)\) for the four cells. Theorem 5.13 implies that \[ E[Y_i] = n\cdot p_i, \quad V[Y_i] = n\cdot p_i\cdot (1 - p_i), \quad i = 1,2,3,4, \] and \(Cov[Y_i, Y_j] = -n\cdot p_i\cdot p_j\), for \(1 \le i,j \le 4\) and \(i \ne j\).

Unbiased point estimators for \(p_i\) are \(\hat{p}_i = \frac{1}{n}Y_i\).

The Florida study has a sample size of \(n=500\) and estimates the following proportions for nuisance alligator management: We will test for a difference in \(p_1\) and \(p_2\) at the \(\alpha = 0.01\) level of significance. The respective null and alternative hypotheses are \[ H_0 : p_2 - p_1 = 0, \quad H_a : p_2 - p_1 \ne 0. \] Since the sample size is large, \(\hat{p}_2 - \hat{p}_1\) is approximately normal. Under the null hypothesis, \(E[\hat{p}_2 - \hat{p}_1] = 0\). Now, \[\begin{align*} V[\hat{p}_2 - \hat{p}_1] &= \frac{1}{n^2} V[Y_2 - Y_1] \\ &= \frac{1}{n^2}(V[Y_2] + V[Y_1] - 2Cov[Y_2,Y_1]) \\ &= \frac{1}{n^2}(n\cdot p_2\cdot (1-p_2) + n\cdot p_1\cdot (1-p_1) + 2n\cdot p_1\cdot p_2) \\ &= \frac{1}{n}(p_2\cdot (1-p_2) + p_1\cdot (1-p_1) + 2p_1\cdot p_2) \\ &= \frac{1}{n}((p_2 + p_1) - (p_2 - p_1)^2). \end{align*}\]

Using this, we estimate the standard deviation \[ \sigma_{\hat{p}_2 - \hat{p}_1} \doteq \sqrt{[(0.16 + 0.06) - (0.16 - 0.06)^2]/500} \doteq 0.0205. \] The rejection region for our two-tailed \(Z\)-test is \(RR : \{\lvert z \rvert > z_{0.005}\}\doteq \{\lvert z \rvert > 2.575\}\). From the data, the value of our test statistic is \[ z = \frac{\hat{p}_2 - \hat{p}_1}{\sigma_{\hat{p}_2 - \hat{p}_1}} \doteq \frac{0.16 - 0.06}{0.0205} \doteq 4.8795, \] and since \(\lvert z \rvert \doteq 4.8795 > 2.575\) we conclude that this data provides sufficient evidence for a difference in the proportions at the \(\alpha = 0.01\) level of significance.

Problem 10.30 (2 points)

Consider a hypothesis test that compares two proportions. Here are the details. \[ H_0 : p_1 - p_2 = 0, \quad H_a : p_1 - p_2 = 0.1, \quad \alpha = 0.05, \quad \beta \le 0.20, \quad n_1 = n_2 = n. \] Let \(X = \hat{p}_1 - \hat{p}_2\), then \(\sigma_X = \sqrt{p_1(1-p_1)/n + p_2(1-p_2)/n} \le 1/\sqrt{2n}\), for all \(0 \le p_1, p_2 \le 1\), since \(p(1-p) \le 1/4\).

Let \(\sigma_{X,0}\) be the value of \(\sigma_X\) under \(H_0\), and let \(\sigma_{X,a}\) be the value of \(\sigma_X\) under \(H_a\).

Under the null hypothesis, \(H_0\), \(X = \sigma_{X,0} Z\), so the rejection region is \(RR : \{x > z_{0.05}\sigma_{X,0}\} \doteq \{x > 1.645\sigma_{X,0}\}\), thus \[ \beta = P(X \le 1.645\sigma_{X,0} \mid H_a) \le P(X \le 1.645/\sqrt{2n} \mid H_a). \]

Under the alternative hypothesis, \(H_a\), \(X = \sigma_{X,0} Z + 0.10\), therefore \[\begin{align*} \beta &\le P(X \le 1.645/\sqrt{2n} \mid H_a) = P(\sigma_{X,a} Z + 0.1 \le 1.645/\sqrt{2n}). \\ \beta &\le P(\sigma_{X,a}\sqrt{2n} Z + 0.1 \sqrt{2n} \le 1.645) = P\left(Z \ge \frac{0.10 \sqrt{2n} - 1.645}{\sigma_{X,a}\sqrt{2n}}\right) \\ &\le P(Z \ge 0.10\sqrt{2n} - 1.645), \end{align*}\]

since \(\sigma_{X,a}\cdot \sqrt{2n} \le 1\).

Since \(\beta \le P(Z \ge 0.10\sqrt{2n} - 1.645)\), we will have \(\beta \le 0.20\) if we choose \(n\) large enough so that \(0.10\sqrt{2n} - 1.645 \ge z_{0.20} \doteq 0.84\). A direct calculation shows that we need \(n \ge 308.8\), so it suffices to choose \[ n = 309. \]

Problem 10.32

This sample size calculation is a direct application of the formula on page \(479\). The elements of this right-tail hypothesis test are \[ \alpha = 0.01, \quad \beta = 0.05, \quad \mu_0 = 5, \quad \mu_a = 5.5, \quad \sigma \doteq s = 3.1. \] So, \[ n \ge \frac{(z_{\alpha}+z_{\beta})^2\sigma^2}{(\mu_a - \mu_0)^2} \doteq \frac{(2.33 + 1.645)^2(3.1)^2}{(0.5)^2} \doteq 607.4. \] It suffices to take \(n=608\).

Problem 10.34 (2 points)

Let \(X = \overline{Y}_1 - \overline{Y}_2\) be our unbiased point estimator for \(\mu_1 - \mu_2\). We have estimates \(\sigma_1 \doteq s_1 =4.34\) and \(\sigma_2 \doteq s_2 = 4.56\), so assuming equal sample sizes \(n_1 = n_2 = n\) we estimate the variance of \(X\); \[ V[X] = (\sigma_1^2 + \sigma_2^2)/n \doteq [(4.34)^2 + (4.56)^2]/n \doteq 39.63/n, \] which implies that \(\sigma_X \doteq 6.295/\sqrt{n}\). The respective null and alternative hypotheses are \(H_0 : \mu_1 - \mu_2 = 0\) and \(H_a : \mu_1 - \mu_2 = 3\).

\(H_0\) implies that \(X = \sigma_X\cdot Z\) and that the rejection region for a right-tailed \(\alpha\)-level hypothesis test is \(RR : \{x > \sigma_X \cdot z_{\alpha}\}\).

\(H_a\) implies that \(X = \sigma_X\cdot Z + 3\). Notice that \[ \beta = P(Z \ge z_{\beta}) = P(Z \le -z_{\beta}) = P(X \le -\sigma_X\cdot z_{\beta} + 3). \] Since the Type II error probability \(\beta = P(X \le \sigma_X\cdot z_{\alpha} \mid H_a)\), we must have that \(\sigma_X\cdot z_{\alpha} = -\sigma_X\cdot z_{\beta} + 3\). This leads to \[ \frac{(z_{\alpha} + z_{\beta})^2}{3^2} = \frac{1}{\sigma_{X}^{2}} = \frac{n}{39.63}. \] Given \(\alpha = \beta = 0.05\), we have \(z_{\alpha} = z_{\beta} \doteq 1.645\) and therefore \(n \ge 4\cdot (1.645)^2 / 9 \doteq 47.66\), which implies that it suffices to take \(n = 48\).

LS0tCnRpdGxlOiAiU29sdXRpb25zIHRvIEhvbWV3b3JrIEFzc2lnbm1lbnQgMTEiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCiMjUHJvYmxlbSAxMC4yICgxMCBwb2ludHMpCjxvbCB0eXBlPSJhIj4KPGxpPgpBIFR5cGUgSSBlcnJvciBtZWFucyB3ZSBjb25jbHVkZSB0aGF0IHRoZSBkcnVnIHdpbGwgaW5kdWNlIHNsZWVwIGluIGZld2VyIHRoYW4gXCg4MFwlXCkgb2YKcGVvcGxlIHN1ZmZlcmluZyBmcm9tIGluc29tbmlhLCB3aGVuIHRoZSBkcnVnIGFjdHVhbGx5IGlzIFwoODBcJVwpIGVmZmVjdGl2ZS4KPC9saT4KPGxpPgpUaGUgcmFuZG9tIHZhcmlhYmxlIFwoWVwpIGhhcyBhIEJpbm9taWFsIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMgXChuPTIwXCkgYW5kIFwocFwpLAp3aGVyZSB0aGUgZHJ1ZyBiZWluZyB0ZXN0ZWQgaW5kdWNlcyBzbGVlcCBpbiBcKHAgXGNkb3QgMTAwXCVcKSBvZiBwZW9wbGUgc3VmZmVyaW5nIGZyb20gaW5zb21uaWEuIApUaGUgcmVqZWN0aW9uIHJlZ2lvbiBpcyB0aGUgc2V0IFwoUlI6IFx7eSBcbGUgMTJcfVwpLiBUaGUgcHJvYmFiaWxpdHkgb2YgYSBUeXBlIEkgZXJyb3IKaXMgXChcYWxwaGEgPSBQKFkgXGxlIDEyIFxtaWQgcCA9IDAuOCkgPSAwLjAzMlwpIChUYWJsZSAxZCwgcGFnZSA3ODQpLgo8L2xpPgo8bGk+CkEgVHlwZSBJSSBlcnJvciBtZWFucyB3ZSBjb25jbHVkZSB0aGF0IHRoZSBkcnVnIHdpbGwgaW5kdWNlIHNsZWVwIGluIChhdCBsZWFzdCkgXCg4MFwlXCkKb2YgcGVvcGxlIHN1ZmZlcmluZyBmcm9tIGluc29tbmlhLCB3aGVuIHRoZSBkcnVnIGlzIGxlc3MgdGhhbiBcKDgwXCVcKSBlZmZlY3RpdmUuCjwvbGk+CjxsaT4KSWYgXChwID0gMC42XCksIHRoZW4gdGhlIHByb2JhYmlsaXR5IG9mIGEgVHlwZSBJSSBlcnJvciBpcwpcKFxiZXRhID0gUChZID4gMTIgXG1pZCBwID0gMC42KSA9IDEgLSBQKFkgXGxlIDEyIFxtaWQgcCA9IDAuNikKPSAxIC0gMC41ODQgPSAwLjQxNlwpLgo8L2xpPgo8bGk+CklmIFwocCA9IDAuNFwpLCB0aGVuIHRoZSBwcm9iYWJpbGl0eSBvZiBhIFR5cGUgSUkgZXJyb3IgaXMKXChcYmV0YSA9IFAoWSA+IDEyIFxtaWQgcCA9IDAuNCkgPSAxIC0gUChZIFxsZSAxMiBcbWlkIHAgPSAwLjQpCj0gMSAtIDAuOTc5ID0gMC4wMjFcKS4KPC9saT4KPC9vbD4KCiMjUHJvYmxlbSAxMC40ICg4IHBvaW50cykKTGV0IFwocFwpIGJlIHRoZSBwcm9wb3J0aW9uIG9mIGxlZGdlciBzaGVldHMgdGhhdCBjb250YWluIGFuIGVycm9yLgpXZSB3aWxsIHRlc3QgdGhlIG51bGwgaHlwb3RoZXNpcyBcKEhfMCA6IHAgPSAwLjA1XCkgdmVyc3VzIHRoZQphbHRlcm5hdGl2ZSBoeXBvdGhlc2lzIFwoSF9hIDogcCA+IDAuMDVcKS4gV2Ugd2lsbCBjaG9vc2UgdHdvIGxlZGdlciBzaGVldHMgYXQgcmFuZG9tLgpXZSByZWplY3QgXChIXzBcKSBpZiBib3RoIHNoZWV0cyBjb250YWluIGVycm9ycyAoaS5lLiBib3RoIGFyZSBiYWQpLiBJZiB0aGVyZSBpcwpvbmUgYmFkIHNoZWV0IGFuZCBvbmUgZ29vZCBzaGVldCwgd2UgY2hvb3NlIGEgdGhpcmQgc2hlZXQgYW5kIHdlIHJlamVjdCBcKEhfMFwpIGlmCnRoZSB0aGlyZCBzaGVldCBpcyBiYWQuIE90aGVyd2lzZSwgd2UgZmFpbCB0byByZWplY3QgXChIXzBcKS4gVGh1cywgd2UgY2FuIApyZXNwZWN0aXZlbHkgZGVub3RlIHRoZSByZWplY3Rpb24gc2V0IGFuZCBpdHMKY29tcGxpbWVudCBieSBcKFJSIDogXHtiYixiZ2IsZ2JiXH1cKSBhbmQgClwoXG92ZXJsaW5le1JSfSA6IFx7Z2csYmdnLGdiZ1x9XCkuIEFsc28sIGluIHRoaXMgbm90YXRpb24sIApcKFAoXHtiXH0pID0gcFwpIGFuZCBcKFAoXHtnXH0pID0gMSAtIHBcKS4KPG9sIHR5cGU9ImEiPgo8bGk+CkEgVHlwZSBJIGVycm9yIG1lYW5zIHdlIGNvbmNsdWRlIHRoZSBlcnJvciByYXRlLCBcKHBcKSwgaXMgZ3JlYXRlciB0aGFuIDAuMDUgd2hlbiB0aGUKdHJ1ZSB2YWx1ZSBvZiBcKHBcKSBpcyAwLjA1Lgo8L2xpPgo8bGk+ClRoZSBUeXBlIEkgZXJyb3IgcHJvYmFiaWxpdHkgaXMKXFsKXGFscGhhID0gUChSUiBcbWlkIHAgPSAwLjA1KSA9ICgwLjA1KV4yICsgMigwLjk1KSgwLjA1KV4yID0gMC4wMDczLgpcXQo8L2xpPgo8bGk+CkEgVHlwZSBJSSBlcnJvciBtZWFucyB3ZSBjb25jbHVkZSB0aGUgZXJyb3IgcmF0ZSwgXChwXCksIGlzIDAuMDUgd2hlbiB0aGUgcmVhbCBlcnJvcgpyYXRlIGlzIGdyZWF0ZXIgdGhhbiAwLjA1Lgo8L2xpPgo8bGk+ClRoZSBUeXBlIElJIGVycm9yIHByb2JhYmlsaXR5IGlzClxbClxiZXRhID0gUChcb3ZlcmxpbmV7UlJ9IFxtaWQgcCkgPSAoMSAtIHApXjIgKyAycCgxIC0gcCleMiA9ICgxICsgMnApKDEgLSBwKV4yLgpcXQpOb3RpY2UgdGhhdCBcKFxiZXRhXCkgaXMgYSA8ZW0+ZnVuY3Rpb248L2VtPiBvZiB0aGUgdW5rbm93biBwYXJhbWV0ZXIsIFwocFwpLCB3aGVyZWFzIApcKFxhbHBoYVwpIGlzIGEgPGVtPmNvbnN0YW50PC9lbT4uIFRoaXMgZGlmZmVyZW5jZSBvY2N1cnMgYmVjYXVzZSBcKEhfYVwpIGlzIGEgCjxlbT5jb21wb3NpdGU8L2VtPiBoeXBvdGhlc2lzLCB3aGVyZWFzIFwoSF8wXCkgaXMgYSA8ZW0+c2ltcGxlPC9lbT4gaHlwb3RoZXNpcy4KPC9saT4KPC9vbD4KCiMjUHJvYmxlbSAxMC42ICg2IHBvaW50cykKTGV0IFwoWVwpIGhhdmUgYSBCaW5vbWlhbCBkaXN0cmlidXRpb24gd2l0aCBcKG4gPSAxNVwpIGFuZCBwcm9iYWJpbGl0eQptYXNzIGZ1bmN0aW9uIFwoUChZID0geSkgPSBcYmlub217MTV9e3l9IHBee3l9ICgxIC0gcCleezE1IC0geX1cKSwKXCh5ID0gMCwxLDIsXGRvdHNjLDE1XCksIFwoMCBcbGUgcCBcbGUgMVwpLiBXZSB3aWxsIHRlc3QgdGhlIG51bGwKaHlwb3RoZXNpcyBcKEhfMCA6IHAgPSAwLjEwXCkuIFdlIHJlamVjdCBcKEhfMFwpIGlmIFwoWV8xIFxnZSA0XCkgb3IKXChZXzEgXGxlIDNcKSBhbmQgXChZXzEgKyBZXzIgXGdlIDZcKSwgd2hlcmUgXChZXzFcKSBhbmQgXChZXzJcKSBhcmUKaW5kZXBlbmRlbnQgYW5kIGhhdmUgdGhlIHNhbWUgQmlub21pYWwgZGlzdHJpYnV0aW9uIGFzIFwoWVwpLgo8b2wgdHlwZT0iYSI+CjxsaT4KVGhlIFR5cGUgSSBlcnJvciBwcm9iYWJpbGl0eSwgXChcYWxwaGFcKSwgaXMgdGhlIHByb2JhYmlsaXR5IHdlIApyZWplY3QgXChIXzBcKSB3aGVuIGl0IGlzIHRydWUuIFRodXMKXGJlZ2lue2FsaWduKn0KXGFscGhhICY9IFAoWV8xIFxnZSA0IFxtaWQgcCA9IDAuMTApIAorIFAoWV8xICsgWV8yIFxnZSA2LCBZXzEgXGxlIDMgXG1pZCBwID0gMC4xMCkgXFwKJj0KKDEgLSBQKFlfMSBcbGUgMyBcbWlkIHAgPSAwLjEwKSkgCisgXHN1bV97az0wfV57M30gUChZXzIgXGdlIDYgLSBrLCBZXzEgPSBrIFxtaWQgcCA9IDAuMTApIFxcCiY9CigxIC0gUChZXzEgXGxlIDMgXG1pZCBwID0gMC4xMCkpIAorIFxzdW1fe2s9MH1eezN9IFAoWV8yIFxnZSA2IC0gayBcbWlkIHAgPSAwLjEwKVxjZG90ClAoWV8xID0gayBcbWlkIHAgPSAwLjEwKSBcXAomPQooMSAtIFAoWV8xIFxsZSAzIFxtaWQgcCA9IDAuMTApKSAKKyBcc3VtX3trPTB9XnszfSAoMSAtIFAoWV8yIFxsZSA1IC0gayBcbWlkIHAgPSAwLjEwKSlcY2RvdApQKFlfMSA9IGsgXG1pZCBwID0gMC4xMCkuClxlbmR7YWxpZ24qfQo8L2xpPgpVc2luZyB0aGUgc3RhdGlzdGljYWwgc29mdHdhcmUgcGFja2FnZSAiUiwiIHJhdGhlciB0aGFuIGEgdGFibGUsCndlIGZpbmQgXChcYWxwaGEgXGRvdGVxIDAuMDk5XCkuCjxsaT4KU3VwcG9zZSBub3cgdGhhdCB0aGUgbnVsbCBoeXBvdGhlc2lzIGlzIFwoSF8wIDogcCA9IDAuMzBcKS4gUmVwbGFjaW5nClwocCA9IDAuMTBcKSB3aXRoIFwocCA9IDAuMzBcKSBpbiBwYXJ0IChhKSBhbmQgdXNpbmcgIlIiIGFnYWluLAp3ZSBjYWxjdWxhdGUgXChcYWxwaGEgXGRvdGVxIDAuOTMyXCkgKG92ZXIgXCg5M1wlXCkgY2hhbmNlIG9mIGEgVHlwZSBJIAplcnJvciEpLgo8L2xpPgo8bGk+ClRoZSBnaXZlbiB0ZXN0IHByb2NlZHVyZSBmYWlscyB0byByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyB3aGVuClwoWV8xIFxsZSAzXCkgYW5kIFwoWV8xICsgWV8yIFxsZSA1XCkuIFRoZXJlZm9yZSwgd2hlbiBcKHAgPSAwLjMwXCksCnRoZSBUeXBlIElJIGVycm9yIHByb2JhYmlsaXR5IGlzClxiZWdpbnthbGlnbip9ClxiZXRhCiY9ClAoWV8xIFxsZSAzLCBZXzEgKyBZXzIgXGxlIDUgXG1pZCBwID0gMC4zMCkgXFwKJj0KXHN1bV97az0wfV57M30gUChZXzIgXGxlIDUgLSBrLCBZXzEgPSBrIFxtaWQgcCA9IDAuMzApIFxcCiY9ClxzdW1fe2s9MH1eezN9IFAoWV8yIFxsZSA1IC0gayBcbWlkIHAgPSAwLjMwKVxjZG90IFAoWV8xID0gayBcbWlkIHAgPSAwLjMwKS4KXGVuZHthbGlnbip9ClVzaW5nICJSIiB3ZSBmaW5kIFwoXGJldGEgPSAwLjA2OFwpLgo8L2xpPgo8L29sPgoKIyNQcm9ibGVtIDEwLjEyICg2IHBvaW50cykKPG9sIHR5cGU9ImEiPgo8bGk+CkNvbmplY3R1cmU6IEJveXMgaGF2ZSBhIGdyZWF0ZXIgaW50ZXJlc3QgaW4gc3BvcnRzLCBhcyBhIGxlaXN1cmUgdGltZSBhY3Rpdml0eSwgCnRoYW4gZG8gZ2lybHMuIEFzIGFuIGFsdGVybmF0aXZlIGh5cG90aGVzaXMgdG8gdGhlIG51bGwgaHlwb3RoZXNpcyBvZiBubyBkaWZmZXJlbmNlIAppbiB0aGUgbWVhbiBMSUMgc2NvcmVzIGZvciBib3lzIGFuZCBnaXJscywgSSB3b3VsZCBzYXkgdGhhdCB0aGUgbWVhbiBmb3IgYm95cyAKaXMgZ3JlYXRlciB0aGFuIHRoZSBtZWFuIGZvciBnaXJscy4KXFsKSF8wIDogXG11X2IgLSBcbXVfZyA9IDAsIFxxcXVhZCBIX2EgOiBcbXVfYiAtIFxtdV9iID4gMC4KXF0KPC9saT4KPGxpPgpcKEhfYVwpIGNvcnJlc3BvbmRzIHRvIGEgb25lLXRhaWxlZCBzdGF0aXN0aWNhbCB0ZXN0Lgo8L2xpPgo8bGk+CldlIHVzZSBcKFxvdmVybGluZXtZfV9iIC0gXG92ZXJsaW5le1l9X2dcKSBhcyBhbiAoYXBwcm94aW1hdGVseSBub3JtYWwpIHVuYmlhc2VkIApwb2ludCBlc3RpbWF0b3IgZm9yIFwoXG11X2IgLSBcbXVfYVwpLiBXZSBlc3RpbWF0ZSB0aGUgdmFyaWFuY2Ugb2YgClwoXG92ZXJsaW5le1l9X2IgLSBcb3ZlcmxpbmV7WX1fZ1wpIGJ5ClxiZWdpbnthbGlnbip9ClxzaWdtYV57Mn1fe1xvdmVybGluZXtZfV9iIC0gXG92ZXJsaW5le1l9X2d9CiY9ClxmcmFje1xzaWdtYV4yX2J9e25fMX0gKyBcZnJhY3tcc2lnbWFeMl9nfXtuXzJ9IFxcCiZcZG90ZXEKXGZyYWN7c14yX2J9e25fMX0gKyBcZnJhY3tzXjJfZ317bl8yfSBcXAomXGRvdGVxClxmcmFjeyg0LjgyKV4yfXsyNTJ9ICsgXGZyYWN7KDQuNDEpXjJ9ezMwN30gXFwKJlxkb3RlcSAwLjE1NTUuClxlbmR7YWxpZ24qfQpUaGUgZXN0aW1hdGVkIHZhbHVlIGZvciB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGlzIHRoZXJlZm9yZQpcKFxzaWdtYV97XG92ZXJsaW5le1l9X2IgLSBcb3ZlcmxpbmV7WX1fZ30gXGRvdGVxIDAuMzk0NFwpLgpXZSB1c2UgdGhlIHN0YW5kYXJkIG5vcm1hbCByYW5kb20gdmFyaWFibGUgYXMgdGhlIHRlc3Qgc3RhdGlzdGljLgpUZXN0aW5nIGF0IHRoZSBsZXZlbCBcKFxhbHBoYSA9IDAuMDFcKSwgdGhlIHJpZ2h0LXRhaWxlZCByZWplY3Rpb24KcmVnaW9uIGlzIFwoUlIgOiBce3ogPiB6X3swLjAxfVx9IFxkb3RlcSBce3ogPiAyLjMyNVx9XCkuIEZyb20gdGhlCmRhdGEsIHRoZSB2YWx1ZSBvZiB0aGUgdGVzdCBzdGF0aXN0aWMgaXMKXFsKeiA9IFxmcmFje1xiYXJ7eX1fYiAtIFxiYXJ7eX1fZ317XHNpZ21hX3tcb3ZlcmxpbmV7WX1fYiAtIFxvdmVybGluZXtZfV9nfX0KXGRvdGVxIFxmcmFjezEzLjY1IC0gOS44OH17MC4zOTQ0fSBcZG90ZXEgOS41Ni4KXF0KU2luY2UgXCh6ID0gOS41NiA+IDIuMzI1XCksIHRoZXNlIGRhdGEgc3VwcG9ydCB0aGUgY29uamVjdHVyZSwgcmF0aGVyCnN0cm9uZ2x5LCB0aGF0IHRoZSBtZWFuIExJQyBzY29yZXMgZm9yIHNwb3J0cyBpcyBoaWdoZXIgZm9yIGJveXMKdGhhbiBmb3IgZ2lybHMgYXQgdGhlIFwoMC4wMVwpLWxldmVsIG9mIHNpZ25pZmljYW5jZS4KPC9saT4KPC9vbD4KCiMjUHJvYmxlbSAxMC4xNApUaGUgZGF0YSBmb3IgdGhlIGxhcmdlIHNjYWxlIGh5cG90aGVzaXMgdGVzdCBhcmUgYXMgZm9sbG93czoKXFsKbiA9IDMwMCxccXVhZCB5ID0gOTgsXHF1YWQgXGhhdHtwfSA9IDk4LzMwMCBcZG90ZXEgMC4zMjY3LgpcXQo8b2wgdHlwZT0iYSI+CjxsaT4KV2Ugd2lsbCBwZXJmb3JtIGEgdHdvLXRhaWxlZCBoeXBvdGhlc2lzIHRlc3QgYXQgdGhlIHNpZ25pZmljYW5jZQpsZXZlbCBcKFxhbHBoYSA9IDAuMDVcKS4gVGhlIGVsZW1lbnRzIG9mIHRoaXMgdGVzdCBhcmUKXGJlZ2lue2FsaWduKn0KSF8wICY6IHAgPSAwLjI1IFxcCkhfYSAmOiBwIFxuZSAwLjI1IFxcClxzaWdtYV97XGhhdHtwfX0gJj0gXHNxcnR7cF8wKDEgLSBwXzApLzMwMH0gCj0gXHNxcnR7KDAuMjUpKDAuNzUpLzMwMH0gPSAwLjAyNSBcXApUUyAmOiB6ID0gXGZyYWN7XGhhdHtwfSAtIDAuMjV9e1xzaWdtYV97XGhhdHtwfX19Clxkb3RlcSBcZnJhY3swLjMyNjcgLSAwLjI1fXswLjAyNX0gXGRvdGVxIDMuMDY2NyBcXApSUiAmOiBce1xsdmVydCB6IFxydmVydCA+IHpfezAuMDI1fVx9ID0gXHtcbHZlcnQgeiBccnZlcnQgPiAxLjk2XH0KXGVuZHthbGlnbip9ClNpbmNlIFwoXGx2ZXJ0IHogXHJ2ZXJ0ID0gMy4wNjY3ID4gMS45NlwpIHdlIGNvbmNsdWRlIHRoYXQKYXQgdGhlIFwoXGFscGhhID0gMC4wNVwpIGxldmVsIG9mIHNpZ25pZmljYW5jZSwgdGhlc2UgZGF0YQpzdXBwb3J0IHRoZSBhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzIHRoYXQgXChwIFxuZSAwLjI1XCkuCjwvbGk+CjxsaT4KVGhpcyBzdHVkeSBpbmRpY2F0ZXMgdGhhdCBlaXRoZXIgdGhlIGNvbHVtbmlzdCB1bmRlcmVzdGltYXRlZCB0aGUKcHJvcG9ydGlvbiBvZiBzdHVkZW50cyBvdmVyIFwoMzBcKSwgb3IgdGhhdCB0aGlzIGNhbXB1cyBoYXMKYSBncmVhdGVyIHByb3BvcnRpb24gdGhhbiB0aGUgYXZlcmFnZSBvdmVyIG1hbnkgY2FtcHVzZXMuCjwvbGk+Cjwvb2w+CgojI1Byb2JsZW0gMTAuMTggKDYgcG9pbnRzKQpBc3N1bWUgdHdvIGluZGVwZW5kZW50IHNhbXBsZXMuIEVhY2ggcG9wdWxhdGlvbiBoYXMgdGhlCnNhbWUgKGxhcmdlKSBzYW1wbGUgc2l6ZSwgXChuXzEgPSBuXzIgPSAxMDAwXCkuIFRoZSBkYXRhCnByb3ZpZGUgcG9pbnQgZXN0aW1hdGVzIGZvciBlYWNoIHBvcHVsYXRpb24ncyBwcm9wb3J0aW9uLApcKFxoYXR7cH1fMSA9IDAuNDVcKSBhbmQgXChcaGF0e3B9XzIgPSAwLjM0XCkuCjxvbCB0eXBlPSJhIj4KPGxpPgpXZSB3aWxsIHBlcmZvcm0gYSB0d28tdGFpbGVkIGh5cG90aGVzaXMgdGVzdCBhdCBzaWduaWZpY2FuY2UKbGV2ZWwgXChcYWxwaGEgPSAwLjA1XCkuIFdlIGFyZSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlc2UgZGF0YQpzdXBwb3J0IHRoZSBjbGFpbSB0aGF0IFwocF8xIFxuZSBwXzJcKS4gVGhlIHJlc3BlY3RpdmUgbnVsbCBhbmQKYWx0ZXJuYXRpdmUgaHlwb3RoZXNlcyBhcmUKXFsKSF8wIDogcF8xIC0gcF8yID0gMCwgXHF1YWQgSF9hIDogcF8xIC0gcF8yIFxuZSAwLgpcXQpVbmRlciB0aGUgbnVsbCBoeXBvdGhlc2lzLCBcKFxoYXR7cH1fMVwpIGFuZCBcKFxoYXR7cH1fMlwpIGFyZSAKaW5kZXBlbmRlbnQgdW5iaWFzZWQgcG9pbnQgZXN0aW1hdG9ycyBmb3IgdGhlIHNhbWUgcGFyYW1ldGVyIFwocF8xID0gcF8yXCkuCldlIGFycml2ZSBhdCBhbiBpbXByb3ZlZCBlc3RpbWF0ZSBvZiB0aGlzIHBhcmFtZXRlciBieSBwb29saW5nIHRoZSBpbmRpdmlkdWFsCnJlc3VsdHMgYXMgZm9sbG93czoKXFsKXGhhdHtwfV97cG9vbGVkfSA9IFxmcmFje25fMVxjZG90IFxoYXR7cH1fMSArIG5fMlxjZG90IFxoYXR7cH1fMn17bl8xICsgbl8yfQo9IFxmcmFjezQ1MCArIDM0MH17MTAwMCArIDEwMDB9ID0gXGZyYWN7NzkwfXsyMDAwfSA9IDAuMzk1LgpcXQpVc2luZyBcKFxoYXR7cH1fe3Bvb2xlZH1cKSBhcyBhbiBlc3RpbWF0ZSBmb3IgYm90aCBcKHBfMVwpIGFuZCBcKHBfMlwpIHByb3ZpZGVzCmFuIGVzdGltYXRlIGZvciB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uClxbClxzaWdtYV97XGhhdHtwfV8xIC0gXGhhdHtwfV8yfSA9ClxzcXJ0e3BfMSgxIC0gcF8xKS9uXzEgKyBwXzIoMSAtIHBfMikvbl8yfSBcZG90ZXEKXHNxcnR7MigwLjM5NSkoMC42MDUpLzEwMDB9IFxkb3RlcSAwLjAyMTg2LgpcXQpUaGUgbGFyZ2Ugc2FtcGxlIHNpemVzIGltcGx5IHRoYXQgdGhlIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBvZgpcKFxoYXR7cH1fMSAtIFxoYXR7cH1fMlwpIGlzIGFwcHJveGltYXRlbHkgbm9ybWFsLiBVbmRlciB0aGUgbnVsbCBoeXBvdGhlc2lzLApcKEVbXGhhdHtwfV8xIC0gXGhhdHtwfV8yXSA9IDBcKS4gVGh1cyB0aGUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIG9mClwoWiA9IChcaGF0e3B9XzEgLSBcaGF0e3B9XzIpL1xzaWdtYV97XGhhdHtwfV8xIC0gXGhhdHtwfV8yfVwpIGlzIGFwcHJveGltYXRlbHkKdGhlIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24uIFdlIHdpbGwgdXNlIFwoWlwpIGFzIG91ciB0ZXN0IHN0YXRpc3RpYy4KVGhlIHJlamVjdGlvbiByZWdpb24gZm9yIG91ciB0d28tdGFpbGVkIGh5cG90aGVzaXMgdGVzdCBpcyB0aGVyZWZvcmUKXChSUiA6IFx7XGx2ZXJ0IHogXHJ2ZXJ0ID4gel97MC4wMjV9XH0gXGRvdGVxIFx7XGx2ZXJ0IHogXHJ2ZXJ0ID4gMS45Nlx9XCkuCk5vdywgdGhlIHZhbHVlIG9mIHRoZSB0ZXN0IHN0YXRpc3RpYyBpcyAKXFsKVFMgOiB6ID0gKFxoYXR7cH1fMSAtIFxoYXR7cH1fMikvXHNpZ21hX3tcaGF0e3B9XzEgLSBcaGF0e3B9XzJ9Clxkb3RlcSAoMC40NSAtIDAuMzQpLzAuMDIxODYgXGRvdGVxIDUuMDMuClxdClNpbmNlIFwoXGx2ZXJ0IHogXHJ2ZXJ0ID0gNS4wMyA+IDEuOTZcKSwgdGhlc2UgZGF0YSBzdXBwb3J0IHRoZSBjbGFpbSB0aGF0CnRoZSBwcm9wb3J0aW9uIG9mIGFzcGlyaW4gdXNlcnMgZm9yIDE5ODYgZGlmZmVycyBmcm9tIHRoZSBwcm9wb3J0aW9uIG9mCmFzcGlyaW4gdXNlcnMgZm9yIDE5OTEuCjwvbGk+CjxsaT4KV2UgcGVyZm9ybSBhIHNpbWlsYXIgdGVzdCBvbiB0aGUgcHJvcG9ydGlvbiBvZiBpYnVwcm9mZW4gdXNlcnMuClRoaXMgdGVzdCB3aWxsIGJlIGEgcmlnaHQtdGFpbGVkIHRlc3QuIFRoZSBkYXRhCnByb3ZpZGUgcG9pbnQgZXN0aW1hdGVzIGZvciBlYWNoIHBvcHVsYXRpb24ncyBwcm9wb3J0aW9uLApcKFxoYXR7cH1fMSA9IDAuMTRcKSBhbmQgXChcaGF0e3B9XzIgPSAwLjI2XCkuIApXZSBhcmUgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXNlIGRhdGEKc3VwcG9ydCB0aGUgY2xhaW0gdGhhdCBcKHBfMSA8IHBfMlwpLiBUaGUgcmVzcGVjdGl2ZSBudWxsIGFuZAphbHRlcm5hdGl2ZSBoeXBvdGhlc2VzIGFyZQpcWwpIXzAgOiBwXzIgLSBwXzEgPSAwLCBccXVhZCBIX2EgOiBwXzIgLSBwXzEgPiAwLgpcXQpVbmRlciB0aGUgbnVsbCBoeXBvdGhlc2lzLCBcKFxoYXR7cH1fMVwpIGFuZCBcKFxoYXR7cH1fMlwpIGFyZSAKaW5kZXBlbmRlbnQgdW5iaWFzZWQgcG9pbnQgZXN0aW1hdG9ycyBmb3IgdGhlIHNhbWUgcGFyYW1ldGVyIFwocF8xID0gcF8yXCkuCldlIGFycml2ZSBhdCBhbiBpbXByb3ZlZCBlc3RpbWF0ZSBvZiB0aGlzIHBhcmFtZXRlciBieSBwb29saW5nIHRoZSBpbmRpdmlkdWFsCnJlc3VsdHMgYXMgZm9sbG93czoKXFsKXGhhdHtwfV97cG9vbGVkfSA9IFxmcmFje25fMVxjZG90IFxoYXR7cH1fMSArIG5fMlxjZG90IFxoYXR7cH1fMn17bl8xICsgbl8yfQo9IFxmcmFjezE0MCArIDI2MH17MTAwMCArIDEwMDB9ID0gXGZyYWN7NDAwfXsyMDAwfSA9IDAuMjAwLgpcXQpVc2luZyBcKFxoYXR7cH1fe3Bvb2xlZH1cKSBhcyBhbiBlc3RpbWF0ZSBmb3IgYm90aCBcKHBfMVwpIGFuZCBcKHBfMlwpIHByb3ZpZGVzCmFuIGVzdGltYXRlIGZvciB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uClxbClxzaWdtYV97XGhhdHtwfV8yIC0gXGhhdHtwfV8xfSA9ClxzcXJ0e3BfMSgxIC0gcF8xKS9uXzEgKyBwXzIoMSAtIHBfMikvbl8yfSBcZG90ZXEKXHNxcnR7MigwLjIpKDAuOCkvMTAwMH0gXGRvdGVxIDAuMDE3ODkuClxdClRoZSBsYXJnZSBzYW1wbGUgc2l6ZXMgaW1wbHkgdGhhdCB0aGUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIG9mClwoXGhhdHtwfV8yIC0gXGhhdHtwfV8xXCkgaXMgYXBwcm94aW1hdGVseSBub3JtYWwuIFVuZGVyIHRoZSBudWxsIGh5cG90aGVzaXMsClwoRVtcaGF0e3B9XzIgLSBcaGF0e3B9XzFdID0gMFwpLiBUaHVzIHRoZSBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24gb2YKXChaID0gKFxoYXR7cH1fMiAtIFxoYXR7cH1fMSkvXHNpZ21hX3tcaGF0e3B9XzIgLSBcaGF0e3B9XzF9XCkgaXMgYXBwcm94aW1hdGVseQp0aGUgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gV2Ugd2lsbCB1c2UgXChaXCkgYXMgb3VyIHRlc3Qgc3RhdGlzdGljLgpUaGUgcmVqZWN0aW9uIHJlZ2lvbiBmb3Igb3VyIHJpZ2h0LXRhaWxlZCBoeXBvdGhlc2lzIHRlc3QgaXMgdGhlcmVmb3JlClwoUlIgOiBceyB6ICA+IHpfezAuMDV9XH0gXGRvdGVxIFx7IHogID4gMS42NDVcfVwpLgpOb3csIHRoZSB2YWx1ZSBvZiB0aGUgdGVzdCBzdGF0aXN0aWMgaXMgClxbClRTIDogeiA9IChcaGF0e3B9XzIgLSBcaGF0e3B9XzEpL1xzaWdtYV97XGhhdHtwfV8yIC0gXGhhdHtwfV8xfQpcZG90ZXEgKDAuMjYgLSAwLjE0KS8wLjAxNzg5IFxkb3RlcSA2LjcuClxdClNpbmNlIFwoeiA9IDYuNyA+IDEuNjQ1XCksIHRoZXNlIGRhdGEgcHJvdmlkZSBzdWZmaWNpZW50IGV2aWRlbmNlCnRvIGluZGljYXRlIHRoYXQgaWJ1cHJvZmVuIGhhcyBhIGdyZWF0ZXIgbWFya2V0IHNoYXJlIGluIDE5OTEgdGhhbgppdCBkaWQgaW4gMTk4Ni4KPC9saT4KPGxpPgpUaGUgdGVzdHMgaW4gKGEpIGFuZCAoYikgYXJlIHJlbGF0ZWQuIFNpbmNlIG1vc3QgcGVvcGxlIHVzZSBqdXN0IApvbmUgdHlwZSBvZiBwYWluIHJlbGlldmVyIGF0IGEgdGltZSwgYW4gaW5jcmVhc2VkIHByb3BvcnRpb24gb2YgaWJ1cHJvZmVuIAp1c2VycyBpbmRpY2F0ZXMgYSBkZWNyZWFzZWQgdXNlIGFtb25nIHRoZSByZW1haW5pbmcgdHlwZXMuIFRoZQpwcm9wb3J0aW9uIGZvciBhY2V0YW1pbm9waGVuIHNlZW1zIHN0YWJsZSwgc28gdGhlIGRlY3JlYXNlIG11c3QgY29tZQpmcm9tIGFzcGlyaW4uCjwvbGk+Cjwvb2w+CgojI1Byb2JsZW0gMTAuMjEgKDIgcG9pbnRzKQpUbyB1c2UgYSBcKFpcKS10ZXN0IHRvIHRlc3QgYSBoeXBvdGhlc2lzIGNvbmNlcm5pbmcgYSBwb3B1bGF0aW9uCm1lYW4gXChcbXVcKSwgd2UgbmVlZCBhbiBpbmRlcGVuZGVudCBhbmQgcmFuZG9tIHNhbXBsZQpcKFlfMSxcZG90c2MsWV9uXCkuIE1vcmVvdmVyLCB0aGUgc2FtcGxlIHNpemUgXChuXCkgc2hvdWxkCmJlIHN1ZmZpY2llbnRseSBsYXJnZSBmb3IgdGhlIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBvZgpcKFxzcXJ0e259XGNkb3QoXG92ZXJsaW5le1l9IC0gXG11KS9TXCkgdG8gYmUgd2VsbCBhcHByb3hpbWF0ZWQKYnkgdGhlIHN0YW5kYXJkIG5vcm1hbCBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb24uCgojI1Byb2JsZW0gMTAuMjYgKDIgcG9pbnRzKQpMZXQgXCgoWV8xLFlfMixZXzMsWV80KVwpIGhhdmUgYSBtdWx0aW5vbWlhbCBkaXN0cmlidXRpb24gd2l0aApcKG5cKSB0cmlhbHMgYW5kIHByb2JhYmlsaXRpZXMgXCgocF8xLHBfMixwXzMscF80KVwpIGZvciB0aGUKZm91ciBjZWxscy4gVGhlb3JlbSA1LjEzIGltcGxpZXMgdGhhdApcWwpFW1lfaV0gPSBuXGNkb3QgcF9pLCBccXVhZCBWW1lfaV0gPSBuXGNkb3QgcF9pXGNkb3QgKDEgLSBwX2kpLApccXVhZCBpID0gMSwyLDMsNCwKXF0KYW5kIFwoQ292W1lfaSwgWV9qXSA9IC1uXGNkb3QgcF9pXGNkb3QgcF9qXCksIGZvciBcKDEgXGxlIGksaiBcbGUgNFwpIAphbmQgXChpIFxuZSBqXCkuCgpVbmJpYXNlZCBwb2ludCBlc3RpbWF0b3JzIGZvciBcKHBfaVwpIGFyZSAKXChcaGF0e3B9X2kgPSBcZnJhY3sxfXtufVlfaVwpLgoKVGhlIEZsb3JpZGEgc3R1ZHkgaGFzIGEgc2FtcGxlIHNpemUgb2YgXChuPTUwMFwpIGFuZCBlc3RpbWF0ZXMKdGhlIGZvbGxvd2luZyBwcm9wb3J0aW9ucyBmb3IgbnVpc2FuY2UgYWxsaWdhdG9yIG1hbmFnZW1lbnQ6Cjx1bD4KPGxpPgpcKFxoYXR7cH1fMSA9IDAuMDZcKSBzYXkgYWxsaWdhdG9ycyBzaG91bGQgYmUgY29tcGxldGVseSBwcm90ZWN0ZWQuCjwvbGk+CjxsaT4KXChcaGF0e3B9XzIgPSAwLjE2XCkgc2F5IGFsbGlnYXRvcnMgc2hvdWxkIGJlIGRlc3Ryb3llZCBieSB3aWxkbGlmZSBvZmZpY2Vycy4KPC9saT4KPGxpPgpcKFxoYXR7cH1fMyA9IDAuNTJcKSBzYXkgYWxsaWdhdG9ycyBzaG91bGQgYmUgcmVsb2NhdGVkIGxpdmUuCjwvbGk+CjxsaT4KXChcaGF0e3B9XzQgPSAwLjI2XCkgc2F5IHRoZXJlIHNob3VsZCBiZSBhIHJlZ3VsYXRlZCBjb21tZXJjaWFsIGhhcnZlc3QuCjwvbGk+CjwvdWw+CgpXZSB3aWxsIHRlc3QgZm9yIGEgZGlmZmVyZW5jZSBpbiBcKHBfMVwpIGFuZCBcKHBfMlwpIGF0IHRoZQpcKFxhbHBoYSA9IDAuMDFcKSBsZXZlbCBvZiBzaWduaWZpY2FuY2UuIFRoZSByZXNwZWN0aXZlIG51bGwgYW5kIAphbHRlcm5hdGl2ZSBoeXBvdGhlc2VzIGFyZQpcWwpIXzAgOiBwXzIgLSBwXzEgPSAwLCBccXVhZCBIX2EgOiBwXzIgLSBwXzEgXG5lIDAuClxdClNpbmNlIHRoZSBzYW1wbGUgc2l6ZSBpcyBsYXJnZSwKXChcaGF0e3B9XzIgLSBcaGF0e3B9XzFcKSBpcyBhcHByb3hpbWF0ZWx5IG5vcm1hbC4gVW5kZXIgdGhlIG51bGwKaHlwb3RoZXNpcywgXChFW1xoYXR7cH1fMiAtIFxoYXR7cH1fMV0gPSAwXCkuIE5vdywKXGJlZ2lue2FsaWduKn0KVltcaGF0e3B9XzIgLSBcaGF0e3B9XzFdCiY9IApcZnJhY3sxfXtuXjJ9IFZbWV8yIC0gWV8xXSBcXAomPQpcZnJhY3sxfXtuXjJ9KFZbWV8yXSArIFZbWV8xXSAtIDJDb3ZbWV8yLFlfMV0pIFxcCiY9ClxmcmFjezF9e25eMn0oblxjZG90IHBfMlxjZG90ICgxLXBfMikgKyBuXGNkb3QgcF8xXGNkb3QgKDEtcF8xKQorIDJuXGNkb3QgcF8xXGNkb3QgcF8yKSBcXAomPQpcZnJhY3sxfXtufShwXzJcY2RvdCAoMS1wXzIpICsgcF8xXGNkb3QgKDEtcF8xKQorIDJwXzFcY2RvdCBwXzIpIFxcCiY9ClxmcmFjezF9e259KChwXzIgKyBwXzEpIC0gKHBfMiAtIHBfMSleMikuClxlbmR7YWxpZ24qfQpVc2luZyB0aGlzLCB3ZSBlc3RpbWF0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uClxbClxzaWdtYV97XGhhdHtwfV8yIC0gXGhhdHtwfV8xfSBcZG90ZXEgClxzcXJ0e1soMC4xNiArIDAuMDYpIC0gKDAuMTYgLSAwLjA2KV4yXS81MDB9IFxkb3RlcSAwLjAyMDUuClxdClRoZSByZWplY3Rpb24gcmVnaW9uIGZvciBvdXIgdHdvLXRhaWxlZCBcKFpcKS10ZXN0IGlzClwoUlIgOiBce1xsdmVydCB6IFxydmVydCA+IHpfezAuMDA1fVx9XGRvdGVxIFx7XGx2ZXJ0IHogXHJ2ZXJ0ID4gMi41NzVcfVwpLgpGcm9tIHRoZSBkYXRhLCB0aGUgdmFsdWUgb2Ygb3VyIHRlc3Qgc3RhdGlzdGljIGlzClxbCnogPSBcZnJhY3tcaGF0e3B9XzIgLSBcaGF0e3B9XzF9e1xzaWdtYV97XGhhdHtwfV8yIC0gXGhhdHtwfV8xfX0gXGRvdGVxClxmcmFjezAuMTYgLSAwLjA2fXswLjAyMDV9IFxkb3RlcSA0Ljg3OTUsClxdCmFuZCBzaW5jZSBcKFxsdmVydCB6IFxydmVydCBcZG90ZXEgNC44Nzk1ID4gMi41NzVcKSB3ZSBjb25jbHVkZSB0aGF0CnRoaXMgZGF0YSBwcm92aWRlcyBzdWZmaWNpZW50IGV2aWRlbmNlIGZvciBhIGRpZmZlcmVuY2UgaW4gdGhlIHByb3BvcnRpb25zCmF0IHRoZSBcKFxhbHBoYSA9IDAuMDFcKSBsZXZlbCBvZiBzaWduaWZpY2FuY2UuCgojI1Byb2JsZW0gMTAuMzAgKDIgcG9pbnRzKQpDb25zaWRlciBhIGh5cG90aGVzaXMgdGVzdCB0aGF0IGNvbXBhcmVzIHR3byBwcm9wb3J0aW9ucy4gSGVyZSBhcmUgdGhlCmRldGFpbHMuClxbCkhfMCA6IHBfMSAtIHBfMiA9IDAsIFxxdWFkIEhfYSA6IHBfMSAtIHBfMiA9IDAuMSwKXHF1YWQgXGFscGhhID0gMC4wNSwgXHF1YWQgXGJldGEgXGxlIDAuMjAsClxxdWFkIG5fMSA9IG5fMiA9IG4uClxdCkxldCBcKFggPSBcaGF0e3B9XzEgLSBcaGF0e3B9XzJcKSwgdGhlbgpcKFxzaWdtYV9YID0gXHNxcnR7cF8xKDEtcF8xKS9uICsgcF8yKDEtcF8yKS9ufSBcbGUgMS9cc3FydHsybn1cKSwKZm9yIGFsbCBcKDAgXGxlIHBfMSwgcF8yIFxsZSAxXCksIHNpbmNlIFwocCgxLXApIFxsZSAxLzRcKS4gCgpMZXQgXChcc2lnbWFfe1gsMH1cKSBiZSB0aGUgdmFsdWUgb2YgXChcc2lnbWFfWFwpIHVuZGVyIFwoSF8wXCksCmFuZCBsZXQgXChcc2lnbWFfe1gsYX1cKSBiZSB0aGUgdmFsdWUgb2YgXChcc2lnbWFfWFwpIHVuZGVyClwoSF9hXCkuCgpVbmRlciB0aGUgbnVsbCBoeXBvdGhlc2lzLCBcKEhfMFwpLCBcKFggPSBcc2lnbWFfe1gsMH0gWlwpLCBzbyB0aGUgcmVqZWN0aW9uIHJlZ2lvbgppcyBcKFJSIDogXHt4ID4gel97MC4wNX1cc2lnbWFfe1gsMH1cfSBcZG90ZXEgXHt4ID4gMS42NDVcc2lnbWFfe1gsMH1cfVwpLAp0aHVzIApcWwpcYmV0YSA9IFAoWCBcbGUgMS42NDVcc2lnbWFfe1gsMH0gXG1pZCBIX2EpClxsZSBQKFggXGxlIDEuNjQ1L1xzcXJ0ezJufSBcbWlkIEhfYSkuClxdCgpVbmRlciB0aGUgYWx0ZXJuYXRpdmUgaHlwb3RoZXNpcywgXChIX2FcKSwgXChYID0gXHNpZ21hX3tYLDB9IFogKyAwLjEwXCksIHRoZXJlZm9yZQpcYmVnaW57YWxpZ24qfQpcYmV0YSAmXGxlIFAoWCBcbGUgMS42NDUvXHNxcnR7Mm59IFxtaWQgSF9hKSAKPSBQKFxzaWdtYV97WCxhfSBaICsgMC4xIFxsZSAxLjY0NS9cc3FydHsybn0pLiBcXApcYmV0YSAmXGxlIFAoXHNpZ21hX3tYLGF9XHNxcnR7Mm59IFogKyAwLjEgXHNxcnR7Mm59IFxsZSAxLjY0NSkKPSBQXGxlZnQoWiBcZ2UgXGZyYWN7MC4xMCBcc3FydHsybn0gLSAxLjY0NX17XHNpZ21hX3tYLGF9XHNxcnR7Mm59fVxyaWdodCkgXFwKJlxsZSBQKFogXGdlIDAuMTBcc3FydHsybn0gLSAxLjY0NSksClxlbmR7YWxpZ24qfQpzaW5jZSBcKFxzaWdtYV97WCxhfVxjZG90IFxzcXJ0ezJufSBcbGUgMVwpLgoKU2luY2UgXChcYmV0YSBcbGUgUChaIFxnZSAwLjEwXHNxcnR7Mm59IC0gMS42NDUpXCksIHdlIHdpbGwgaGF2ZSBcKFxiZXRhIFxsZSAwLjIwXCkgaWYKd2UgY2hvb3NlIFwoblwpIGxhcmdlIGVub3VnaCBzbyB0aGF0IApcKDAuMTBcc3FydHsybn0gLSAxLjY0NSBcZ2Ugel97MC4yMH0gXGRvdGVxIDAuODRcKS4gQSBkaXJlY3QgY2FsY3VsYXRpb24gc2hvd3MKdGhhdCB3ZSBuZWVkIFwobiBcZ2UgMzA4LjhcKSwgc28gaXQgc3VmZmljZXMgdG8gY2hvb3NlClxbCm4gPSAzMDkuClxdCgojI1Byb2JsZW0gMTAuMzIKVGhpcyBzYW1wbGUgc2l6ZSBjYWxjdWxhdGlvbiBpcyBhIGRpcmVjdCBhcHBsaWNhdGlvbiBvZiB0aGUKZm9ybXVsYSBvbiBwYWdlIFwoNDc5XCkuIFRoZSBlbGVtZW50cyBvZiB0aGlzIHJpZ2h0LXRhaWwKaHlwb3RoZXNpcyB0ZXN0IGFyZQpcWwpcYWxwaGEgPSAwLjAxLCBccXVhZCBcYmV0YSA9IDAuMDUsIFxxdWFkClxtdV8wID0gNSwgXHF1YWQgXG11X2EgPSA1LjUsIFxxdWFkClxzaWdtYSBcZG90ZXEgcyA9IDMuMS4KXF0KU28sIApcWwpuIFxnZSBcZnJhY3soel97XGFscGhhfSt6X3tcYmV0YX0pXjJcc2lnbWFeMn17KFxtdV9hIC0gXG11XzApXjJ9Clxkb3RlcSBcZnJhY3soMi4zMyArIDEuNjQ1KV4yKDMuMSleMn17KDAuNSleMn0KXGRvdGVxIDYwNy40LgpcXQpJdCBzdWZmaWNlcyB0byB0YWtlIFwobj02MDhcKS4KCiMjUHJvYmxlbSAxMC4zNCAoMiBwb2ludHMpCkxldCBcKFggPSBcb3ZlcmxpbmV7WX1fMSAtIFxvdmVybGluZXtZfV8yXCkgYmUgb3VyIHVuYmlhc2VkIHBvaW50IGVzdGltYXRvcgpmb3IgXChcbXVfMSAtIFxtdV8yXCkuIFdlIGhhdmUgZXN0aW1hdGVzClwoXHNpZ21hXzEgXGRvdGVxIHNfMSA9NC4zNFwpIGFuZCBcKFxzaWdtYV8yIFxkb3RlcSBzXzIgPSA0LjU2XCksCnNvIGFzc3VtaW5nIGVxdWFsIHNhbXBsZSBzaXplcyBcKG5fMSA9IG5fMiA9IG5cKSB3ZSBlc3RpbWF0ZSB0aGUgCnZhcmlhbmNlIG9mIFwoWFwpOwpcWwpWW1hdID0gKFxzaWdtYV8xXjIgKyBcc2lnbWFfMl4yKS9uIFxkb3RlcSBbKDQuMzQpXjIgKyAoNC41NileMl0vbiBcZG90ZXEgMzkuNjMvbiwKXF0Kd2hpY2ggaW1wbGllcyB0aGF0IFwoXHNpZ21hX1ggXGRvdGVxIDYuMjk1L1xzcXJ0e259XCkuIApUaGUgcmVzcGVjdGl2ZSBudWxsCmFuZCBhbHRlcm5hdGl2ZSBoeXBvdGhlc2VzIGFyZQpcKEhfMCA6IFxtdV8xIC0gXG11XzIgPSAwXCkgYW5kIFwoSF9hIDogXG11XzEgLSBcbXVfMiA9IDNcKS4gCgpcKEhfMFwpIGltcGxpZXMgdGhhdApcKFggPSBcc2lnbWFfWFxjZG90IFpcKSBhbmQgdGhhdCB0aGUgcmVqZWN0aW9uIHJlZ2lvbiBmb3IgYSByaWdodC10YWlsZWQKXChcYWxwaGFcKS1sZXZlbCBoeXBvdGhlc2lzIHRlc3QgaXMgXChSUiA6IFx7eCA+IFxzaWdtYV9YIFxjZG90IHpfe1xhbHBoYX1cfVwpLgoKXChIX2FcKSBpbXBsaWVzIHRoYXQgXChYID0gXHNpZ21hX1hcY2RvdCBaICsgM1wpLiBOb3RpY2UgdGhhdCAKXFsKXGJldGEgPSBQKFogXGdlIHpfe1xiZXRhfSkgPSBQKFogXGxlIC16X3tcYmV0YX0pIAo9IFAoWCBcbGUgLVxzaWdtYV9YXGNkb3Qgel97XGJldGF9ICsgMykuClxdClNpbmNlIHRoZSBUeXBlIElJIGVycm9yIHByb2JhYmlsaXR5ClwoXGJldGEgPSBQKFggXGxlIFxzaWdtYV9YXGNkb3Qgel97XGFscGhhfSBcbWlkIEhfYSlcKSwgd2UgbXVzdCBoYXZlCnRoYXQgXChcc2lnbWFfWFxjZG90IHpfe1xhbHBoYX0gPSAtXHNpZ21hX1hcY2RvdCB6X3tcYmV0YX0gKyAzXCkuIFRoaXMKbGVhZHMgdG8KXFsKXGZyYWN7KHpfe1xhbHBoYX0gKyB6X3tcYmV0YX0pXjJ9ezNeMn0gPSBcZnJhY3sxfXtcc2lnbWFfe1h9XnsyfX0KPSBcZnJhY3tufXszOS42M30uClxdCkdpdmVuIFwoXGFscGhhID0gXGJldGEgPSAwLjA1XCksIHdlIGhhdmUgClwoel97XGFscGhhfSA9IHpfe1xiZXRhfSBcZG90ZXEgMS42NDVcKSBhbmQgdGhlcmVmb3JlClwobiBcZ2UgNFxjZG90ICgxLjY0NSleMiAvIDkgXGRvdGVxIDQ3LjY2XCksIHdoaWNoIGltcGxpZXMKdGhhdCBpdCBzdWZmaWNlcyB0byB0YWtlIFwobiA9IDQ4XCku