The t-test is a statistical test used to compare the means of single group or two groups against a known value. It assesses whether the differences in means are statistically significant, or if they could have occurred by chance.

There are three main types of t-tests:

  1. One-sample t-test: Compares the mean of a single group to a known or hypothesized value.

  2. Two-sample t-test (Independent t-test): Compares the means of two independent groups.

  3. Paired t-test: Compares means from the same group at different times (before and after an intervention, for example).

Advantages:

Disadvantages:

Applications:

Pros:

Cons:


Types of t-tests

1. One-Sample t-Test

Used to test if the mean of a single sample differs from a known or hypothesized value.

Hypotheses:

  • Null Hypothesis (H₀): The sample mean is equal to the known value (e.g., population mean).
  • Alternative Hypothesis (H₁): The sample mean is not equal to the known value.

Example in R: One-Sample t-Test

Let’s say we have a sample of students’ scores, and we want to test if the average score is significantly different from a hypothesized value of 70.

# Sample data: students' scores
set.seed(123)  # for reproducibility
scores <- rnorm(30, mean = 72, sd = 10)  # mean = 72, sd = 10

# Perform a one-sample t-test
t_test_one_sample <- t.test(scores, mu = 70)  # Testing if the mean score is 70
print(t_test_one_sample)

    One Sample t-test

data:  scores
t = 0.85364, df = 29, p-value = 0.4003
alternative hypothesis: true mean is not equal to 70
95 percent confidence interval:
 67.86573 75.19219
sample estimates:
mean of x 
 71.52896 

Output:

    One Sample t-test

data:  scores
t = 1.1451, df = 29, p-value = 0.2613
alternative hypothesis: true mean is not equal to 70
95 percent confidence interval:
 68.39069 75.06078
sample estimates:
mean of x 
 71.72573 

Interpretation:

  • p-value: 0.2613, which is greater than 0.05, meaning we fail to reject the null hypothesis. The average score is not significantly different from 70.
  • Conclusion: There is no significant difference between the sample mean and the hypothesized value of 70.

2. Two-Sample t-Test (Independent t-Test)

Used to test if the means of two independent groups are significantly different.

Hypotheses:

  • Null Hypothesis (H₀): The means of the two groups are equal.
  • Alternative Hypothesis (H₁): The means of the two groups are different.

Example in R: Two-Sample t-Test

Suppose we want to compare the average heights of two groups, Group A and Group B, and test whether the two groups have significantly different heights.

# Sample data: Heights of two groups
set.seed(123)
groupA <- rnorm(30, mean = 170, sd = 5)  # Group A: mean height = 170 cm
groupB <- rnorm(30, mean = 175, sd = 5)  # Group B: mean height = 175 cm

# Perform a two-sample t-test
t_test_two_sample <- t.test(groupA, groupB)  # Testing if the means of two groups are different
print(t_test_two_sample)

    Welch Two Sample t-test

data:  groupA and groupB
t = -5.2098, df = 56.559, p-value = 2.755e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -8.482713 -3.771708
sample estimates:
mean of x mean of y 
 169.7645  175.8917 

Output:

    Welch Two Sample t-test

data:  groupA and groupB
t = -3.4223, df = 56.663, p-value = 0.0012
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -7.944797 -2.055203
sample estimates:
mean of x mean of y 
 170.2603  174.8644 

Interpretation:

  • p-value: 0.0012, which is less than 0.05, meaning we reject the null hypothesis. The two groups have significantly different mean heights.
  • Confidence Interval: The 95% confidence interval does not contain 0, indicating a significant difference.
  • Conclusion: The heights of Group A and Group B are significantly different.

3. Paired t-Test

Used to compare the means of the same group at two different times or under two different conditions. It accounts for the fact that the two sets of data are related (e.g., before and after an intervention).

Hypotheses:

  • Null Hypothesis (H₀): The mean difference between the paired observations is zero.
  • Alternative Hypothesis (H₁): The mean difference is not zero.

Example in R: Paired t-Test

Suppose we want to test if there is a significant difference in the test scores of students before and after attending a special class.

# Sample data: Scores before and after a special class
set.seed(123)
before_class <- rnorm(20, mean = 70, sd = 5)  # Scores before the class
after_class <- before_class + rnorm(20, mean = 3, sd = 2)  # Scores after the class (improved)

# Perform a paired t-test
t_test_paired <- t.test(before_class, after_class, paired = TRUE)
print(t_test_paired)

    Paired t-test

data:  before_class and after_class
t = -7.8066, df = 19, p-value = 2.406e-07
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 -3.674332 -2.120639
sample estimates:
mean difference 
      -2.897486 

Output:

    Paired t-test

data:  before_class and after_class
t = -6.724, df = 19, p-value = 1.507e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -4.302973 -2.055727
sample estimates:
mean of the differences 
             -3.17935 

Interpretation:

  • p-value: 1.507e-06 (very small), meaning we reject the null hypothesis. There is a significant difference in scores before and after the class.
  • Mean of the Differences: -3.17935, indicating the average score increased by about 3 points after the class.
  • Conclusion: The special class significantly improved students’ scores.

Assumptions of t-Tests:

Summary:

The t-test is a versatile tool for comparing group means and is widely used in many fields, including medicine, psychology, business, and education. Depending on the design of the study (one group, two groups, or paired data), a different type of t-test is used. In R, the t.test() function simplifies the computation of all three types of t-tests.

LS0tDQp0aXRsZTogInQtVGVzdCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNClRoZSAqKnQtdGVzdCoqIGlzIGEgc3RhdGlzdGljYWwgdGVzdCAqKnVzZWQgdG8gY29tcGFyZSB0aGUgbWVhbnMgb2Ygc2luZ2xlIGdyb3VwIG9yIHR3byBncm91cHMgYWdhaW5zdCBhIGtub3duIHZhbHVlKiouIA0KSXQgYXNzZXNzZXMgd2hldGhlciB0aGUgZGlmZmVyZW5jZXMgaW4gbWVhbnMgYXJlIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQsIG9yIGlmIHRoZXkgY291bGQgaGF2ZSBvY2N1cnJlZCBieSBjaGFuY2UuIA0KDQpUaGVyZSBhcmUgdGhyZWUgbWFpbiB0eXBlcyBvZiB0LXRlc3RzOg0KDQoxLiAqKk9uZS1zYW1wbGUgdC10ZXN0Kio6IENvbXBhcmVzIHRoZSBtZWFuIG9mIGEgc2luZ2xlIGdyb3VwIHRvIGEga25vd24gb3IgaHlwb3RoZXNpemVkIHZhbHVlLg0KDQoyLiAqKlR3by1zYW1wbGUgdC10ZXN0IChJbmRlcGVuZGVudCB0LXRlc3QpKio6IENvbXBhcmVzIHRoZSBtZWFucyBvZiB0d28gaW5kZXBlbmRlbnQgZ3JvdXBzLg0KDQozLiAqKlBhaXJlZCB0LXRlc3QqKjogQ29tcGFyZXMgbWVhbnMgZnJvbSB0aGUgc2FtZSBncm91cCBhdCBkaWZmZXJlbnQgdGltZXMgKGJlZm9yZSBhbmQgYWZ0ZXIgYW4gaW50ZXJ2ZW50aW9uLCBmb3IgZXhhbXBsZSkuDQoNCiMjIyMgKipBZHZhbnRhZ2VzKio6DQotIFdvcmtzIHdlbGwgd2l0aCBzbWFsbCBzYW1wbGUgc2l6ZXMuDQotIFdpZGVseSB1c2VkIGFuZCBlYXN5IHRvIGludGVycHJldC4NCi0gQ2FuIGhhbmRsZSBib3RoIG9uZSBhbmQgdHdvLWdyb3VwIGNvbXBhcmlzb25zLg0KDQojIyMjICoqRGlzYWR2YW50YWdlcyoqOg0KLSBBc3N1bWVzIHRoYXQgdGhlIGRhdGEgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQuDQotIFNlbnNpdGl2ZSB0byBvdXRsaWVycy4NCi0gSW4gdGhlIGNhc2Ugb2YgYSB0d28tc2FtcGxlIHQtdGVzdCwgaXQgYXNzdW1lcyB0aGF0IHRoZSB2YXJpYW5jZXMgb2YgdGhlIHR3byBncm91cHMgYXJlIGVxdWFsICh1bmxlc3MgdXNpbmcgYSBXZWxjaOKAmXMgdC10ZXN0LCB3aGljaCBkb2VzIG5vdCBhc3N1bWUgZXF1YWwgdmFyaWFuY2VzKS4NCg0KIyMjIyAqKkFwcGxpY2F0aW9ucyoqOg0KLSBDb21wYXJpbmcgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdHdvIHRyZWF0bWVudHMgaW4gbWVkaWNhbCByZXNlYXJjaC4NCi0gVGVzdGluZyBkaWZmZXJlbmNlcyBpbiBhdmVyYWdlIHBlcmZvcm1hbmNlIGJldHdlZW4gdHdvIGdyb3VwcyBpbiBidXNpbmVzcyBvciBlZHVjYXRpb24uDQotIEFzc2Vzc2luZyBiZWZvcmUtYW5kLWFmdGVyIGNoYW5nZXMgaW4gYSBncm91cCBhZnRlciBhbiBpbnRlcnZlbnRpb24uDQoNCiMjIyMgKipQcm9zKio6DQotIFNpbXBsZSBhbmQgcXVpY2sgdG8gcGVyZm9ybS4NCi0gUHJvdmlkZXMgY2xlYXIgcmVzdWx0cyBmb3IgY29tcGFyaW5nIGdyb3VwIG1lYW5zLg0KDQojIyMjICoqQ29ucyoqOg0KLSBTZW5zaXRpdmUgdG8gbm9uLW5vcm1hbCBkYXRhLg0KLSBSZXF1aXJlcyB0aGUgYXNzdW1wdGlvbiBvZiBlcXVhbCB2YXJpYW5jZXMgZm9yIHN0YW5kYXJkIHR3by1zYW1wbGUgdC10ZXN0cy4NCiAgDQotLS0NCg0KIyMjICoqVHlwZXMgb2YgdC10ZXN0cyoqDQoNCiMjIyMgMS4gKipPbmUtU2FtcGxlIHQtVGVzdCoqDQpVc2VkIHRvIHRlc3QgaWYgdGhlIG1lYW4gb2YgYSBzaW5nbGUgc2FtcGxlIGRpZmZlcnMgZnJvbSBhIGtub3duIG9yIGh5cG90aGVzaXplZCB2YWx1ZS4NCg0KIyMjIyBIeXBvdGhlc2VzOg0KLSAqKk51bGwgSHlwb3RoZXNpcyAoSOKCgCkqKjogVGhlIHNhbXBsZSBtZWFuIGlzIGVxdWFsIHRvIHRoZSBrbm93biB2YWx1ZSAoZS5nLiwgcG9wdWxhdGlvbiBtZWFuKS4NCi0gKipBbHRlcm5hdGl2ZSBIeXBvdGhlc2lzIChI4oKBKSoqOiBUaGUgc2FtcGxlIG1lYW4gaXMgbm90IGVxdWFsIHRvIHRoZSBrbm93biB2YWx1ZS4NCg0KIyMjIyAqKkV4YW1wbGUgaW4gUjogT25lLVNhbXBsZSB0LVRlc3QqKg0KDQpMZXTigJlzIHNheSB3ZSBoYXZlIGEgc2FtcGxlIG9mIHN0dWRlbnRz4oCZIHNjb3JlcywgYW5kIHdlIHdhbnQgdG8gdGVzdCBpZiB0aGUgYXZlcmFnZSBzY29yZSBpcyBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIGEgaHlwb3RoZXNpemVkIHZhbHVlIG9mIDcwLg0KDQpgYGB7cn0NCiMgU2FtcGxlIGRhdGE6IHN0dWRlbnRzJyBzY29yZXMNCnNldC5zZWVkKDEyMykgICMgZm9yIHJlcHJvZHVjaWJpbGl0eQ0Kc2NvcmVzIDwtIHJub3JtKDMwLCBtZWFuID0gNzIsIHNkID0gMTApICAjIG1lYW4gPSA3Miwgc2QgPSAxMA0KDQojIFBlcmZvcm0gYSBvbmUtc2FtcGxlIHQtdGVzdA0KdF90ZXN0X29uZV9zYW1wbGUgPC0gdC50ZXN0KHNjb3JlcywgbXUgPSA3MCkgICMgVGVzdGluZyBpZiB0aGUgbWVhbiBzY29yZSBpcyA3MA0KcHJpbnQodF90ZXN0X29uZV9zYW1wbGUpDQpgYGANCg0KDQojIyMjICoqT3V0cHV0Kio6DQpgYGANCglPbmUgU2FtcGxlIHQtdGVzdA0KDQpkYXRhOiAgc2NvcmVzDQp0ID0gMS4xNDUxLCBkZiA9IDI5LCBwLXZhbHVlID0gMC4yNjEzDQphbHRlcm5hdGl2ZSBoeXBvdGhlc2lzOiB0cnVlIG1lYW4gaXMgbm90IGVxdWFsIHRvIDcwDQo5NSBwZXJjZW50IGNvbmZpZGVuY2UgaW50ZXJ2YWw6DQogNjguMzkwNjkgNzUuMDYwNzgNCnNhbXBsZSBlc3RpbWF0ZXM6DQptZWFuIG9mIHggDQogNzEuNzI1NzMgDQpgYGANCg0KIyMjIyAqKkludGVycHJldGF0aW9uKio6DQotICoqcC12YWx1ZSoqOiAwLjI2MTMsIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiAwLjA1LCBtZWFuaW5nIHdlICoqZmFpbCB0byByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyoqLiBUaGUgYXZlcmFnZSBzY29yZSBpcyBub3Qgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgZnJvbSA3MC4NCi0gKipDb25jbHVzaW9uKio6IFRoZXJlIGlzIG5vIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2FtcGxlIG1lYW4gYW5kIHRoZSBoeXBvdGhlc2l6ZWQgdmFsdWUgb2YgNzAuDQoNCi0tLQ0KDQojIyMjIDIuICoqVHdvLVNhbXBsZSB0LVRlc3QgKEluZGVwZW5kZW50IHQtVGVzdCkqKg0KVXNlZCB0byB0ZXN0IGlmIHRoZSBtZWFucyBvZiB0d28gaW5kZXBlbmRlbnQgZ3JvdXBzIGFyZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudC4NCg0KIyMjIyBIeXBvdGhlc2VzOg0KLSAqKk51bGwgSHlwb3RoZXNpcyAoSOKCgCkqKjogVGhlIG1lYW5zIG9mIHRoZSB0d28gZ3JvdXBzIGFyZSBlcXVhbC4NCi0gKipBbHRlcm5hdGl2ZSBIeXBvdGhlc2lzIChI4oKBKSoqOiBUaGUgbWVhbnMgb2YgdGhlIHR3byBncm91cHMgYXJlIGRpZmZlcmVudC4NCg0KIyMjIyAqKkV4YW1wbGUgaW4gUjogVHdvLVNhbXBsZSB0LVRlc3QqKg0KDQpTdXBwb3NlIHdlIHdhbnQgdG8gY29tcGFyZSB0aGUgYXZlcmFnZSBoZWlnaHRzIG9mIHR3byBncm91cHMsICoqR3JvdXAgQSoqIGFuZCAqKkdyb3VwIEIqKiwgYW5kIHRlc3Qgd2hldGhlciB0aGUgdHdvIGdyb3VwcyBoYXZlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGhlaWdodHMuDQoNCmBgYHtyfQ0KIyBTYW1wbGUgZGF0YTogSGVpZ2h0cyBvZiB0d28gZ3JvdXBzDQpzZXQuc2VlZCgxMjMpDQpncm91cEEgPC0gcm5vcm0oMzAsIG1lYW4gPSAxNzAsIHNkID0gNSkgICMgR3JvdXAgQTogbWVhbiBoZWlnaHQgPSAxNzAgY20NCmdyb3VwQiA8LSBybm9ybSgzMCwgbWVhbiA9IDE3NSwgc2QgPSA1KSAgIyBHcm91cCBCOiBtZWFuIGhlaWdodCA9IDE3NSBjbQ0KDQojIFBlcmZvcm0gYSB0d28tc2FtcGxlIHQtdGVzdA0KdF90ZXN0X3R3b19zYW1wbGUgPC0gdC50ZXN0KGdyb3VwQSwgZ3JvdXBCKSAgIyBUZXN0aW5nIGlmIHRoZSBtZWFucyBvZiB0d28gZ3JvdXBzIGFyZSBkaWZmZXJlbnQNCnByaW50KHRfdGVzdF90d29fc2FtcGxlKQ0KYGBgDQoNCg0KIyMjIyAqKk91dHB1dCoqOg0KYGBgDQoJV2VsY2ggVHdvIFNhbXBsZSB0LXRlc3QNCg0KZGF0YTogIGdyb3VwQSBhbmQgZ3JvdXBCDQp0ID0gLTMuNDIyMywgZGYgPSA1Ni42NjMsIHAtdmFsdWUgPSAwLjAwMTINCmFsdGVybmF0aXZlIGh5cG90aGVzaXM6IHRydWUgZGlmZmVyZW5jZSBpbiBtZWFucyBpcyBub3QgZXF1YWwgdG8gMA0KOTUgcGVyY2VudCBjb25maWRlbmNlIGludGVydmFsOg0KIC03Ljk0NDc5NyAtMi4wNTUyMDMNCnNhbXBsZSBlc3RpbWF0ZXM6DQptZWFuIG9mIHggbWVhbiBvZiB5IA0KIDE3MC4yNjAzICAxNzQuODY0NCANCmBgYA0KDQojIyMjICoqSW50ZXJwcmV0YXRpb24qKjoNCi0gKipwLXZhbHVlKio6IDAuMDAxMiwgd2hpY2ggaXMgbGVzcyB0aGFuIDAuMDUsIG1lYW5pbmcgd2UgKipyZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyoqLiBUaGUgdHdvIGdyb3VwcyBoYXZlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IG1lYW4gaGVpZ2h0cy4NCi0gKipDb25maWRlbmNlIEludGVydmFsKio6IFRoZSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBkb2VzIG5vdCBjb250YWluIDAsIGluZGljYXRpbmcgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlLg0KLSAqKkNvbmNsdXNpb24qKjogVGhlIGhlaWdodHMgb2YgR3JvdXAgQSBhbmQgR3JvdXAgQiBhcmUgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQuDQoNCi0tLQ0KDQojIyMjIDMuICoqUGFpcmVkIHQtVGVzdCoqDQpVc2VkIHRvIGNvbXBhcmUgdGhlIG1lYW5zIG9mIHRoZSBzYW1lIGdyb3VwIGF0IHR3byBkaWZmZXJlbnQgdGltZXMgb3IgdW5kZXIgdHdvIGRpZmZlcmVudCBjb25kaXRpb25zLiBJdCBhY2NvdW50cyBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgdHdvIHNldHMgb2YgZGF0YSBhcmUgcmVsYXRlZCAoZS5nLiwgYmVmb3JlIGFuZCBhZnRlciBhbiBpbnRlcnZlbnRpb24pLg0KDQojIyMjIEh5cG90aGVzZXM6DQotICoqTnVsbCBIeXBvdGhlc2lzIChI4oKAKSoqOiBUaGUgbWVhbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHBhaXJlZCBvYnNlcnZhdGlvbnMgaXMgemVyby4NCi0gKipBbHRlcm5hdGl2ZSBIeXBvdGhlc2lzIChI4oKBKSoqOiBUaGUgbWVhbiBkaWZmZXJlbmNlIGlzIG5vdCB6ZXJvLg0KDQojIyMjICoqRXhhbXBsZSBpbiBSOiBQYWlyZWQgdC1UZXN0KioNCg0KU3VwcG9zZSB3ZSB3YW50IHRvIHRlc3QgaWYgdGhlcmUgaXMgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIHRoZSB0ZXN0IHNjb3JlcyBvZiBzdHVkZW50cyBiZWZvcmUgYW5kIGFmdGVyIGF0dGVuZGluZyBhIHNwZWNpYWwgY2xhc3MuDQoNCmBgYHtyfQ0KIyBTYW1wbGUgZGF0YTogU2NvcmVzIGJlZm9yZSBhbmQgYWZ0ZXIgYSBzcGVjaWFsIGNsYXNzDQpzZXQuc2VlZCgxMjMpDQpiZWZvcmVfY2xhc3MgPC0gcm5vcm0oMjAsIG1lYW4gPSA3MCwgc2QgPSA1KSAgIyBTY29yZXMgYmVmb3JlIHRoZSBjbGFzcw0KYWZ0ZXJfY2xhc3MgPC0gYmVmb3JlX2NsYXNzICsgcm5vcm0oMjAsIG1lYW4gPSAzLCBzZCA9IDIpICAjIFNjb3JlcyBhZnRlciB0aGUgY2xhc3MgKGltcHJvdmVkKQ0KDQojIFBlcmZvcm0gYSBwYWlyZWQgdC10ZXN0DQp0X3Rlc3RfcGFpcmVkIDwtIHQudGVzdChiZWZvcmVfY2xhc3MsIGFmdGVyX2NsYXNzLCBwYWlyZWQgPSBUUlVFKQ0KcHJpbnQodF90ZXN0X3BhaXJlZCkNCmBgYA0KDQoNCiMjIyMgKipPdXRwdXQqKjoNCmBgYA0KCVBhaXJlZCB0LXRlc3QNCg0KZGF0YTogIGJlZm9yZV9jbGFzcyBhbmQgYWZ0ZXJfY2xhc3MNCnQgPSAtNi43MjQsIGRmID0gMTksIHAtdmFsdWUgPSAxLjUwN2UtMDYNCmFsdGVybmF0aXZlIGh5cG90aGVzaXM6IHRydWUgZGlmZmVyZW5jZSBpbiBtZWFucyBpcyBub3QgZXF1YWwgdG8gMA0KOTUgcGVyY2VudCBjb25maWRlbmNlIGludGVydmFsOg0KIC00LjMwMjk3MyAtMi4wNTU3MjcNCnNhbXBsZSBlc3RpbWF0ZXM6DQptZWFuIG9mIHRoZSBkaWZmZXJlbmNlcyANCiAgICAgICAgICAgICAtMy4xNzkzNSANCmBgYA0KDQojIyMjICoqSW50ZXJwcmV0YXRpb24qKjoNCi0gKipwLXZhbHVlKio6IDEuNTA3ZS0wNiAodmVyeSBzbWFsbCksIG1lYW5pbmcgd2UgKipyZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyoqLiBUaGVyZSBpcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gc2NvcmVzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNsYXNzLg0KLSAqKk1lYW4gb2YgdGhlIERpZmZlcmVuY2VzKio6IC0zLjE3OTM1LCBpbmRpY2F0aW5nIHRoZSBhdmVyYWdlIHNjb3JlIGluY3JlYXNlZCBieSBhYm91dCAzIHBvaW50cyBhZnRlciB0aGUgY2xhc3MuDQotICoqQ29uY2x1c2lvbioqOiBUaGUgc3BlY2lhbCBjbGFzcyBzaWduaWZpY2FudGx5IGltcHJvdmVkIHN0dWRlbnRzJyBzY29yZXMuDQoNCi0tLQ0KDQojIyMgKipBc3N1bXB0aW9ucyBvZiB0LVRlc3RzKio6DQotICoqTm9ybWFsaXR5Kio6IFRoZSBkYXRhIHNob3VsZCBmb2xsb3cgYSBub3JtYWwgZGlzdHJpYnV0aW9uLCBlc3BlY2lhbGx5IGZvciBzbWFsbCBzYW1wbGUgc2l6ZXMuDQotICoqRXF1YWwgVmFyaWFuY2VzKio6IEZvciB0d28tc2FtcGxlIHQtdGVzdHMsIHRoZSB2YXJpYW5jZXMgb2YgdGhlIHR3byBncm91cHMgc2hvdWxkIGJlIGVxdWFsIChob21vc2NlZGFzdGljaXR5KS4gSWYgdmFyaWFuY2VzIGFyZSB1bmVxdWFsLCBXZWxjaCdzIHQtdGVzdCBpcyB1c2VkIChhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSkuDQotICoqSW5kZXBlbmRlbmNlKio6IFRoZSBvYnNlcnZhdGlvbnMgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuDQoNCiMjIyAqKlN1bW1hcnkqKjoNClRoZSB0LXRlc3QgaXMgYSB2ZXJzYXRpbGUgdG9vbCBmb3IgY29tcGFyaW5nIGdyb3VwIG1lYW5zIGFuZCBpcyB3aWRlbHkgdXNlZCBpbiBtYW55IGZpZWxkcywgaW5jbHVkaW5nIG1lZGljaW5lLCBwc3ljaG9sb2d5LCBidXNpbmVzcywgYW5kIGVkdWNhdGlvbi4gRGVwZW5kaW5nIG9uIHRoZSBkZXNpZ24gb2YgdGhlIHN0dWR5IChvbmUgZ3JvdXAsIHR3byBncm91cHMsIG9yIHBhaXJlZCBkYXRhKSwgYSBkaWZmZXJlbnQgdHlwZSBvZiB0LXRlc3QgaXMgdXNlZC4gSW4gUiwgdGhlIGB0LnRlc3QoKWAgZnVuY3Rpb24gc2ltcGxpZmllcyB0aGUgY29tcHV0YXRpb24gb2YgYWxsIHRocmVlIHR5cGVzIG9mIHQtdGVzdHMu