library(s20x)
ballBearings.df = read.table("C:\\R_ENGSCI_211\\BallBearings.txt", header = TRUE)

line1=with(ballBearings.df, diameter[productionline=="line1"])
line2=with(ballBearings.df, diameter[productionline=="line2"])

diffDiameter=line1-line2

summaryStats(diffDiameter)
Minimum value:           -1 
Maximum value:           0.33 
Mean value:              -0.21 
Median:                  -0.19 
Upper quartile:          0.09 
Lower quartile:          -0.47 
Variance:                0.2 
Standard deviation:      0.45 
Midspread (IQR):         0.56 
Skewness:                -0.37 
Number of data values:   10 
boxplot(diffDiameter, main = "Difference in diameter between line 1 and line 2")

We can see that the data is centered around -0.2 microns. The data ranges between -1.0 and -0.33 microns. It is slightly left-skewed.

normcheck(diffDiameter)

t.test(diffDiameter)

    One Sample t-test

data:  diffDiameter
t = -1.4973, df = 9, p-value = 0.1686
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 -0.5323046  0.1083046
sample estimates:
mean of x 
   -0.212 

Methods and Assumption Checks

We are attempting to estimate the difference between the diameters of bearings produced by each line, so a paired-sample analysis is appropriate.

The diameter measurements should be independent of one another.

The data does not appear very normal based on the histogram, and the Q-Q plot shows that the data is somewhat left-skewed so it is possible that it does not fulfill the normality assumption. We do not have a enough observations to invoke the central limit theorem.

The model fitted is diffDiameteri = µ + εi, where µ is the mean difference in ball bearing diameters between line 1 and 2, and εi ∼ N(0, σ2).

Executive Summary

We are interesting in determining the difference, if one exists, in the diameter of ball bearings produced by line one and line two.

Because we are analysing two related measurements, we analysed the difference between the diameters of balls from each line.

We observe that there is no evidence that the difference between the diameters of each line is not zero.

We estimate that the mean difference between the diameter of bearings from line one and line two is between -0.532 microns and 0.108 microns.

Task 2: Rope Failures

library(s20x)
RopeFailure.df = read.table("C:\\R_ENGSCI_211\\Ropefailure.txt", header = TRUE)
trendscatter(Time ~ Load, data = RopeFailure.df)

Fitting a simple linear regression model:

RopeFailure.lm1 = lm(Time ~ Load, data = RopeFailure.df)
plot(RopeFailure.lm1, which = 1)

We observe the fan affect in the residual plot, so a multiplicative model may be appropriate.

LogTimeLoad.fit = lm(log(Time) ~ Load, data = RopeFailure.df)
modcheck(LogTimeLoad.fit)

summary(LogTimeLoad.fit)

Call:
lm(formula = log(Time) ~ Load, data = RopeFailure.df)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.9788 -2.1590  0.4689  1.6371  3.4915 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  42.1482     8.8328   4.772 0.000208 ***
Load         -0.4932     0.1055  -4.675 0.000253 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.179 on 16 degrees of freedom
Multiple R-squared:  0.5774,    Adjusted R-squared:  0.551 
F-statistic: 21.86 on 1 and 16 DF,  p-value: 0.0002533
exp(confint(LogTimeLoad.fit))
                  2.5 %       97.5 %
(Intercept) 1.48835e+10 2.733706e+26
Load        4.88267e-01 7.636826e-01
100 * (exp(confint(LogTimeLoad.fit)) - 1)
                   2.5 %        97.5 %
(Intercept)  1.48835e+12  2.733706e+28
Load        -5.11733e+01 -2.363174e+01
PREDICTION INTERVAL THINGY

Methods and Assumption Checks

The fan effect observed in our residual plot indicated that a multiplicative model would be more appropriate, as equality of variance was clearly not fulfilled. Because of this, a log transformation was attempted.

We assume that observations of the failure time of ropes were independent, but there may be correlations such as wet weather that were not accounted for.

A linear model fitted to the log of Time proved to fulfill equality our assumptions of variance and is mostly normal (slightly right-tailed), and there were no excessively influential observations.

Our final model (for the median) is log(Timei) = Bo + B1 * Loadi + εi where εi ∼ N(0, σ2).

Executive Summary

We are interested in determining how the time for polyester mooring lines varies with heavy loading, and to predict the average time to failure of ropes loaded to 79% of breaking load.

We found that the an increase in the loading on a mooring rope of 1% is associated with a decrease in time to failure of between 2.36% and 5.12%

Our model explains 57.7% of variation in time to failure

Task 3: Pet Stress

library(s20x)
PetStress.df = read.table("C:\\R_ENGSCI_211\\petstress.txt", header = TRUE)
boxplot(Rate ~ Group, data = PetStress.df)

We observe that the control group is centered around 85 bpm and ranges from 62 to 99. The friend group is centered around 92 and ranges from 78 to 102. The pet group is centered around 71 and ranges between 59 and 88.

stress.fit = lm(Rate ~ Group, data = PetStress.df)
modcheck(stress.fit)

summary(stress.fit)

Call:
lm(formula = Rate ~ Group, data = PetStress.df)

Residuals:
    Min      1Q  Median      3Q     Max 
-19.878  -4.724  -1.221   6.179  24.055 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   82.524      2.378  34.709   <2e-16 ***
GroupF         8.801      3.362   2.617   0.0123 *  
GroupP        -9.041      3.362  -2.689   0.0102 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 9.208 on 42 degrees of freedom
Multiple R-squared:  0.4014,    Adjusted R-squared:  0.3729 
F-statistic: 14.08 on 2 and 42 DF,  p-value: 2.092e-05
anova(stress.fit)
Analysis of Variance Table

Response: Rate
          Df Sum Sq Mean Sq F value    Pr(>F)    
Group      2 2387.7 1193.84  14.079 2.092e-05 ***
Residuals 42 3561.3   84.79                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
multipleComp(stress.fit)
         Estimate  Tukey.L Tukey.U Tukey.p
C  -  F -8.801067 -16.9700 -0.6321  0.0322
C  -  P  9.041000   0.8721 17.2099  0.0271
F  -  P 17.842067   9.6731 26.0110  0.0000

Methods and Assumption Checks

We are analysing the quantitative response on heart rate of three categorical variables, so we fitted a one-way ANOVA model.

We assume that the measurements taken were independent.

The residuals plot indicates that equality of variance is fulfilled. The Q-Q plot indicates that the data is quite normal. None of our observations are unduly influential.

The model fitted is Rate = µ + αi + εij where where µ is the grand mean, αi are the group effects for each category and εij is the residual for each observation, and εij ∼ N(0, σ2)

Executive Summary

We are interested in determining the effect of the presence of dogs or friends during stressful tasks, as measured by the heart rate of participants.

We found evidence that, on average, being accompanied by a pet decreased the heartrate of dog-lovers when performing stressful tasks; as well as evidence that, on average, being accompanied by a friend increased the heart rate of participants.

We found that the presence of a friend increased the heart rate of participants by between 0.632 and 17.0BPM, while the presence of a pet decreased the heartrate of participants by between 0.872 and 17.2 BPM.

Our model explains 40.1% of the variation in the data.

LS0tDQp0aXRsZTogIkVOR1NDSSAyMTEgRGF0YSBBbmFseXNpcyBBc3NpZ25tZW50Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KDQpgYGB7cn0NCmxpYnJhcnkoczIweCkNCmJhbGxCZWFyaW5ncy5kZiA9IHJlYWQudGFibGUoIkM6XFxSX0VOR1NDSV8yMTFcXEJhbGxCZWFyaW5ncy50eHQiLCBoZWFkZXIgPSBUUlVFKQ0KDQpsaW5lMT13aXRoKGJhbGxCZWFyaW5ncy5kZiwgZGlhbWV0ZXJbcHJvZHVjdGlvbmxpbmU9PSJsaW5lMSJdKQ0KbGluZTI9d2l0aChiYWxsQmVhcmluZ3MuZGYsIGRpYW1ldGVyW3Byb2R1Y3Rpb25saW5lPT0ibGluZTIiXSkNCg0KZGlmZkRpYW1ldGVyPWxpbmUxLWxpbmUyDQoNCnN1bW1hcnlTdGF0cyhkaWZmRGlhbWV0ZXIpDQoNCg0KDQpgYGANCmBgYHtyfQ0KYm94cGxvdChkaWZmRGlhbWV0ZXIsIG1haW4gPSAiRGlmZmVyZW5jZSBpbiBkaWFtZXRlciBiZXR3ZWVuIGxpbmUgMSBhbmQgbGluZSAyIikNCmBgYA0KV2UgY2FuIHNlZSB0aGF0IHRoZSBkYXRhIGlzIGNlbnRlcmVkIGFyb3VuZCAtMC4yIG1pY3JvbnMuIFRoZSBkYXRhIHJhbmdlcyBiZXR3ZWVuIC0xLjAgYW5kIC0wLjMzIG1pY3JvbnMuIEl0IGlzIHNsaWdodGx5IGxlZnQtc2tld2VkLg0KIA0KYGBge3J9DQpub3JtY2hlY2soZGlmZkRpYW1ldGVyKQ0KYGBgDQpgYGB7cn0NCnQudGVzdChkaWZmRGlhbWV0ZXIpDQoNCmBgYA0KIyMjIE1ldGhvZHMgYW5kIEFzc3VtcHRpb24gQ2hlY2tzDQpXZSBhcmUgYXR0ZW1wdGluZyB0byBlc3RpbWF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkaWFtZXRlcnMgb2YgYmVhcmluZ3MgcHJvZHVjZWQgYnkgZWFjaCBsaW5lLCBzbyBhIHBhaXJlZC1zYW1wbGUgYW5hbHlzaXMgaXMgYXBwcm9wcmlhdGUuDQoNClRoZSBkaWFtZXRlciBtZWFzdXJlbWVudHMgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIG9uZSBhbm90aGVyLg0KDQpUaGUgZGF0YSBkb2VzIG5vdCBhcHBlYXIgdmVyeSBub3JtYWwgYmFzZWQgb24gdGhlIGhpc3RvZ3JhbSwgYW5kIHRoZSBRLVEgcGxvdCBzaG93cyB0aGF0IHRoZSBkYXRhIGlzIHNvbWV3aGF0IGxlZnQtc2tld2VkIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgaXQgZG9lcyBub3QgZnVsZmlsbCB0aGUgbm9ybWFsaXR5IGFzc3VtcHRpb24uIFdlIGRvIG5vdCBoYXZlIGEgZW5vdWdoIG9ic2VydmF0aW9ucyB0byBpbnZva2UgdGhlIGNlbnRyYWwgbGltaXQgdGhlb3JlbS4gDQoNClRoZSBtb2RlbCBmaXR0ZWQgaXMgZGlmZkRpYW1ldGVyaSA9IMK1ICsgzrVpLCB3aGVyZSDCtSBpcyB0aGUgbWVhbiBkaWZmZXJlbmNlIGluIGJhbGwgYmVhcmluZyBkaWFtZXRlcnMgYmV0d2VlbiBsaW5lIDEgYW5kIDIsIGFuZCDOtWkg4oi8IE4oMCwgz4MyKS4NCg0KIyMjIEV4ZWN1dGl2ZSBTdW1tYXJ5DQpXZSBhcmUgaW50ZXJlc3RpbmcgaW4gZGV0ZXJtaW5pbmcgdGhlIGRpZmZlcmVuY2UsIGlmIG9uZSBleGlzdHMsIGluIHRoZSBkaWFtZXRlciBvZiBiYWxsIGJlYXJpbmdzIHByb2R1Y2VkIGJ5IGxpbmUgb25lIGFuZCBsaW5lIHR3by4gDQoNCkJlY2F1c2Ugd2UgYXJlIGFuYWx5c2luZyB0d28gcmVsYXRlZCBtZWFzdXJlbWVudHMsIHdlIGFuYWx5c2VkIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGRpYW1ldGVycyBvZiBiYWxscyBmcm9tIGVhY2ggbGluZS4NCg0KV2Ugb2JzZXJ2ZSB0aGF0IHRoZXJlIGlzIG5vIGV2aWRlbmNlIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZGlhbWV0ZXJzIG9mIGVhY2ggbGluZSBpcyBub3QgemVyby4NCg0KV2UgZXN0aW1hdGUgdGhhdCB0aGUgbWVhbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGRpYW1ldGVyIG9mIGJlYXJpbmdzIGZyb20gbGluZSBvbmUgYW5kIGxpbmUgdHdvIGlzIGJldHdlZW4gLTAuNTMyIG1pY3JvbnMgYW5kIDAuMTA4IG1pY3JvbnMuDQoNCg0KIyMgVGFzayAyOiBSb3BlIEZhaWx1cmVzDQpgYGB7cn0NCmxpYnJhcnkoczIweCkNClJvcGVGYWlsdXJlLmRmID0gcmVhZC50YWJsZSgiQzpcXFJfRU5HU0NJXzIxMVxcUm9wZWZhaWx1cmUudHh0IiwgaGVhZGVyID0gVFJVRSkNCnRyZW5kc2NhdHRlcihUaW1lIH4gTG9hZCwgZGF0YSA9IFJvcGVGYWlsdXJlLmRmKQ0KYGBgDQoNCkZpdHRpbmcgYSBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWw6DQpgYGB7cn0NClJvcGVGYWlsdXJlLmxtMSA9IGxtKFRpbWUgfiBMb2FkLCBkYXRhID0gUm9wZUZhaWx1cmUuZGYpDQpwbG90KFJvcGVGYWlsdXJlLmxtMSwgd2hpY2ggPSAxKQ0KYGBgDQpXZSBvYnNlcnZlIHRoZSBmYW4gYWZmZWN0IGluIHRoZSByZXNpZHVhbCBwbG90LCBzbyBhIG11bHRpcGxpY2F0aXZlIG1vZGVsIG1heSBiZSBhcHByb3ByaWF0ZS4NCg0KYGBge3J9DQpMb2dUaW1lTG9hZC5maXQgPSBsbShsb2coVGltZSkgfiBMb2FkLCBkYXRhID0gUm9wZUZhaWx1cmUuZGYpDQptb2RjaGVjayhMb2dUaW1lTG9hZC5maXQpDQpgYGANCg0KDQoNCg0KDQpgYGB7cn0NCnN1bW1hcnkoTG9nVGltZUxvYWQuZml0KQ0KYGBgDQpgYGB7cn0NCmV4cChjb25maW50KExvZ1RpbWVMb2FkLmZpdCkpDQpgYGANCg0KYGBge3J9DQoxMDAgKiAoZXhwKGNvbmZpbnQoTG9nVGltZUxvYWQuZml0KSkgLSAxKQ0KYGBgDQoNCg0KYGBge3J9DQpQUkVESUNUSU9OIElOVEVSVkFMIFRISU5HWQ0KYGBgDQoNCiMjIyBNZXRob2RzIGFuZCBBc3N1bXB0aW9uIENoZWNrcw0KVGhlIGZhbiBlZmZlY3Qgb2JzZXJ2ZWQgaW4gb3VyIHJlc2lkdWFsIHBsb3QgaW5kaWNhdGVkIHRoYXQgYSBtdWx0aXBsaWNhdGl2ZSBtb2RlbCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBhcyBlcXVhbGl0eSBvZiB2YXJpYW5jZSB3YXMgY2xlYXJseSBub3QgZnVsZmlsbGVkLiBCZWNhdXNlIG9mIHRoaXMsIGEgbG9nIHRyYW5zZm9ybWF0aW9uIHdhcyBhdHRlbXB0ZWQuDQoNCldlIGFzc3VtZSB0aGF0IG9ic2VydmF0aW9ucyBvZiB0aGUgZmFpbHVyZSB0aW1lIG9mIHJvcGVzIHdlcmUgaW5kZXBlbmRlbnQsIGJ1dCB0aGVyZSBtYXkgYmUgY29ycmVsYXRpb25zIHN1Y2ggYXMgd2V0IHdlYXRoZXIgdGhhdCB3ZXJlIG5vdCBhY2NvdW50ZWQgZm9yLg0KDQpBIGxpbmVhciBtb2RlbCBmaXR0ZWQgdG8gdGhlIGxvZyBvZiBUaW1lIHByb3ZlZCB0byBmdWxmaWxsIGVxdWFsaXR5IG91ciBhc3N1bXB0aW9ucyBvZiB2YXJpYW5jZSBhbmQgaXMgbW9zdGx5IG5vcm1hbCAoc2xpZ2h0bHkgcmlnaHQtdGFpbGVkKSwgYW5kIHRoZXJlIHdlcmUgbm8gZXhjZXNzaXZlbHkgaW5mbHVlbnRpYWwgb2JzZXJ2YXRpb25zLg0KDQpPdXIgZmluYWwgbW9kZWwgKGZvciB0aGUgbWVkaWFuKSBpcyBsb2coVGltZWkpID0gQm8gKyBCMSAqIExvYWRpICsgzrVpIHdoZXJlIM61aSDiiLwgTigwLCDPgzIpLg0KDQojIyMgRXhlY3V0aXZlIFN1bW1hcnkNCldlIGFyZSBpbnRlcmVzdGVkIGluIGRldGVybWluaW5nIGhvdyB0aGUgdGltZSBmb3IgcG9seWVzdGVyIG1vb3JpbmcgbGluZXMgdmFyaWVzIHdpdGggaGVhdnkgbG9hZGluZywgYW5kIHRvIHByZWRpY3QgdGhlIGF2ZXJhZ2UgdGltZSB0byBmYWlsdXJlIG9mIHJvcGVzIGxvYWRlZCB0byA3OSUgb2YgYnJlYWtpbmcgbG9hZC4NCg0KV2UgZm91bmQgdGhhdCB0aGUgYW4gaW5jcmVhc2UgaW4gdGhlIGxvYWRpbmcgb24gYSBtb29yaW5nIHJvcGUgb2YgMSUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVjcmVhc2UgaW4gdGltZSB0byBmYWlsdXJlIG9mIGJldHdlZW4gMi4zNiUgYW5kIDUuMTIlDQoNCk91ciBtb2RlbCBleHBsYWlucyA1Ny43JSBvZiB2YXJpYXRpb24gaW4gdGltZSB0byBmYWlsdXJlDQoNCg0KDQoNCg0KIyMgVGFzayAzOiBQZXQgU3RyZXNzDQpgYGB7cn0NCmxpYnJhcnkoczIweCkNClBldFN0cmVzcy5kZiA9IHJlYWQudGFibGUoIkM6XFxSX0VOR1NDSV8yMTFcXHBldHN0cmVzcy50eHQiLCBoZWFkZXIgPSBUUlVFKQ0KYm94cGxvdChSYXRlIH4gR3JvdXAsIGRhdGEgPSBQZXRTdHJlc3MuZGYpDQpgYGANCldlIG9ic2VydmUgdGhhdCB0aGUgY29udHJvbCBncm91cCBpcyBjZW50ZXJlZCBhcm91bmQgODUgYnBtIGFuZCByYW5nZXMgZnJvbSA2MiB0byA5OS4gVGhlIGZyaWVuZCBncm91cCBpcyBjZW50ZXJlZCBhcm91bmQgOTIgYW5kIHJhbmdlcyBmcm9tIDc4IHRvIDEwMi4gVGhlIHBldCBncm91cCBpcyBjZW50ZXJlZCBhcm91bmQgNzEgYW5kIHJhbmdlcyBiZXR3ZWVuIDU5IGFuZCA4OC4NCg0KYGBge3J9DQpzdHJlc3MuZml0ID0gbG0oUmF0ZSB+IEdyb3VwLCBkYXRhID0gUGV0U3RyZXNzLmRmKQ0KbW9kY2hlY2soc3RyZXNzLmZpdCkNCmBgYA0KDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHN0cmVzcy5maXQpDQpgYGANCg0KDQpgYGB7cn0NCmFub3ZhKHN0cmVzcy5maXQpDQpgYGANCg0KYGBge3J9DQptdWx0aXBsZUNvbXAoc3RyZXNzLmZpdCkNCmBgYA0KDQojIyMgTWV0aG9kcyBhbmQgQXNzdW1wdGlvbiBDaGVja3MNCldlIGFyZSBhbmFseXNpbmcgdGhlIHF1YW50aXRhdGl2ZSByZXNwb25zZSBvbiBoZWFydCByYXRlIG9mIHRocmVlIGNhdGVnb3JpY2FsIHZhcmlhYmxlcywgc28gd2UgZml0dGVkIGEgb25lLXdheSBBTk9WQSBtb2RlbC4NCg0KV2UgYXNzdW1lIHRoYXQgdGhlIG1lYXN1cmVtZW50cyB0YWtlbiB3ZXJlIGluZGVwZW5kZW50Lg0KDQpUaGUgcmVzaWR1YWxzIHBsb3QgaW5kaWNhdGVzIHRoYXQgZXF1YWxpdHkgb2YgdmFyaWFuY2UgaXMgZnVsZmlsbGVkLiBUaGUgUS1RIHBsb3QgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgcXVpdGUgbm9ybWFsLiBOb25lIG9mIG91ciBvYnNlcnZhdGlvbnMgYXJlIHVuZHVseSBpbmZsdWVudGlhbC4NCg0KVGhlIG1vZGVsIGZpdHRlZCBpcyBSYXRlID0gwrUgKyDOsWkgKyDOtWlqIHdoZXJlIHdoZXJlIMK1IGlzIHRoZSBncmFuZCBtZWFuLCDOsWkgYXJlIHRoZSBncm91cCBlZmZlY3RzIGZvciBlYWNoIGNhdGVnb3J5IGFuZCDOtWlqIGlzIHRoZSByZXNpZHVhbCBmb3IgZWFjaCBvYnNlcnZhdGlvbiwgYW5kIM61aWog4oi8IE4oMCwgz4MyKQ0KDQojIyMgRXhlY3V0aXZlIFN1bW1hcnkNCldlIGFyZSBpbnRlcmVzdGVkIGluIGRldGVybWluaW5nIHRoZSBlZmZlY3Qgb2YgdGhlIHByZXNlbmNlIG9mIGRvZ3Mgb3IgZnJpZW5kcyBkdXJpbmcgc3RyZXNzZnVsIHRhc2tzLCBhcyBtZWFzdXJlZCBieSB0aGUgaGVhcnQgcmF0ZSBvZiBwYXJ0aWNpcGFudHMuDQoNCldlIGZvdW5kIGV2aWRlbmNlIHRoYXQsIG9uIGF2ZXJhZ2UsIGJlaW5nIGFjY29tcGFuaWVkIGJ5IGEgcGV0IGRlY3JlYXNlZCB0aGUgaGVhcnRyYXRlIG9mIGRvZy1sb3ZlcnMgd2hlbiBwZXJmb3JtaW5nIHN0cmVzc2Z1bCB0YXNrczsgYXMgd2VsbCBhcyBldmlkZW5jZSB0aGF0LCBvbiBhdmVyYWdlLCBiZWluZyBhY2NvbXBhbmllZCBieSBhIGZyaWVuZCBpbmNyZWFzZWQgdGhlIGhlYXJ0IHJhdGUgb2YgcGFydGljaXBhbnRzLg0KDQpXZSBmb3VuZCB0aGF0IHRoZSBwcmVzZW5jZSBvZiBhIGZyaWVuZCBpbmNyZWFzZWQgdGhlIGhlYXJ0IHJhdGUgb2YgcGFydGljaXBhbnRzIGJ5IGJldHdlZW4gMC42MzIgYW5kIDE3LjBCUE0sIHdoaWxlIHRoZSBwcmVzZW5jZSBvZiBhIHBldCBkZWNyZWFzZWQgdGhlIGhlYXJ0cmF0ZSBvZiBwYXJ0aWNpcGFudHMgYnkgYmV0d2VlbiAwLjg3MiBhbmQgMTcuMiBCUE0uDQoNCk91ciBtb2RlbCBleHBsYWlucyA0MC4xJSBvZiB0aGUgdmFyaWF0aW9uIGluIHRoZSBkYXRhLg==