Introduction
This report analyzes the 2024 WNBA season box score data to build a
regression model predicting the Las Vegas Aces’ team score. The dataset
includes game statistics for all WNBA teams. All-Star game observations
were removed, leaving only regular season games. The goal is to identify
which performance metrics (field goal percentage, rebounds, 3-point
percentage, and steals) best predict how many points the Aces score in a
given game.
Tables
The league summary table shows mean and standard deviation of key
statistics for all 12 WNBA teams. The Aces summary table breaks these
statistics down by game result. On average, the Aces scored 88.6 points
in wins and 79.8 points in losses, a difference of 8.8 points.
#Creates table with summary of each teams statistics
summary_by_team %>%
kbl(digits = 2, caption = "Summary Statistics by Team") %>%
kable_classic(full_width = FALSE, html_font = "Cambria")
Summary Statistics by Team
|
team_name
|
mean_score
|
sd_score
|
mean_reb
|
sd_reb
|
mean_fg_pct
|
sd_fg_pct
|
mean_3ptfgpct
|
sd_3ptfgpct
|
mean_steals
|
sd_steals
|
|
Aces
|
85.52
|
9.56
|
33.78
|
5.88
|
45.27
|
5.82
|
35.27
|
7.08
|
6.80
|
2.67
|
|
Dream
|
76.93
|
10.59
|
35.95
|
4.41
|
41.28
|
6.78
|
30.83
|
9.32
|
7.14
|
2.82
|
|
Fever
|
84.50
|
10.17
|
35.10
|
5.49
|
45.56
|
5.38
|
35.00
|
8.99
|
5.88
|
2.29
|
|
Liberty
|
84.98
|
9.92
|
36.90
|
5.77
|
44.53
|
5.61
|
35.38
|
10.06
|
7.75
|
2.19
|
|
Lynx
|
82.36
|
11.39
|
33.15
|
5.06
|
45.21
|
6.34
|
37.80
|
9.43
|
8.36
|
3.17
|
|
Mercury
|
81.93
|
12.60
|
32.26
|
5.39
|
44.28
|
7.34
|
32.97
|
10.34
|
6.55
|
2.12
|
|
Mystics
|
79.30
|
8.69
|
31.85
|
4.66
|
43.36
|
4.82
|
36.64
|
8.69
|
7.28
|
2.24
|
|
Sky
|
77.40
|
9.62
|
36.60
|
5.57
|
42.44
|
5.22
|
31.74
|
11.62
|
7.00
|
3.30
|
|
Sparks
|
78.40
|
10.57
|
32.67
|
5.52
|
42.63
|
6.15
|
32.09
|
11.00
|
7.30
|
2.78
|
|
Storm
|
82.67
|
9.65
|
34.67
|
6.02
|
43.43
|
5.39
|
28.35
|
9.03
|
9.24
|
3.27
|
|
Sun
|
80.36
|
9.89
|
33.43
|
4.62
|
44.30
|
5.28
|
32.84
|
11.67
|
7.89
|
3.29
|
|
Wings
|
84.20
|
11.47
|
34.75
|
4.65
|
44.47
|
5.24
|
32.06
|
11.75
|
7.12
|
2.95
|
#Creates table with summary of Aces win/loss stats
summaryAces %>%
kbl(digits = 2, caption = "Aces Summary by Game Result") %>%
kable_classic(full_width = FALSE, html_font = "Cambria")
Aces Summary by Game Result
|
team_winner
|
mean
|
sd_score
|
mean_reb
|
sd_reb
|
mean_fg_pct
|
sd_fg_pct
|
mean_3ptfgpct
|
sd_3ptfgpct
|
mean_steals
|
sd_steals
|
|
FALSE
|
79.81
|
9.95
|
29.56
|
6.64
|
42.08
|
5.65
|
33.74
|
7.19
|
5.94
|
2.57
|
|
TRUE
|
88.57
|
7.93
|
36.03
|
3.97
|
46.97
|
5.23
|
36.08
|
7.00
|
7.27
|
2.65
|
Graphs
The histogram and boxplot show the distribution of Aces team scores
separated by game result. Wins tend to cluster at higher scores, while
losses are concentrated at lower values. Both distributions appear
roughly symmetric. The boxplot confirms that winning games are
associated with notably higher point totals, with less overlap than
expected by chance.
#Creates a side by side histogram with a distribution of Aces Team score seperated by game results (win/loss)
ggplot(data_hist, aes(x = team_score, fill = result)) +
geom_histogram(color = "white", alpha = 0.7, bins = 15, position = "dodge") +
scale_fill_manual(values = c("Win" = "#69b3a2", "Loss" = "#404080")) +
labs(title = "Distribution of Team Score by Game Result (Aces)",
x = "Team Score",
y = "Count",
fill = "Result") +
theme_minimal()

#Creates a Box plot with distribution of Aces Team score seperated by game results (win/loss)
boxplot(team_score ~ result, data = data_hist,
col=c('lightblue','lightpink'),
main = "points score by game result",
xlab = "Result", ylab = "Points"
)

First Order Model
Multicollinearity Check (Model 1 → Model 2)
The full first-order model included field goal percentage, total
rebounds, 3-point percentage, and steals. Examining the correlation
matrix, no pair of predictors exceeded |r| = 0.8 — the highest
correlation among predictors was between field_goal_pct and
three_point_field_goal_pct (r = 0.41). VIF values for all predictors
were below 1.25, confirming no multicollinearity concern. However,
steals showed virtually no linear relationship with team score (r =
0.016) and was removed to simplify the model. Model 2 retains
field_goal_pct, total_rebounds, and three_point_field_goal_pct.
Interaction Model
The full interaction model (Model 3) was built on the three variables
from Model 2. Interaction terms were evaluated at the alpha = 0.15
significance level. Two of the three interactions were non-significant
and removed:
- field_goal_pct:total_rebounds (p = 0.489)
- total_rebounds:three_point_field_goal_pct (p = 0.250)
The interaction field_goal_pct:three_point_field_goal_pct was
retained (p = 0.072 < 0.15), producing the final Model 4.
My final model is:
team_score = -35.972 + 2.228 * field_goal_pct + 0.451 *
total_rebounds + 1.582 * three_point_field_goal_pct + -0.031 *
(field_goal_pct * three_point_field_goal_pct)
This model is statistically significant, F(4, 41) = 22.04, p <
0.0001, adjusted R² = 0.652, indicating that the model explains 65.2% of
the variance in team score.
Residuals
Residual analysis of Model 4 shows that residuals are approximately
normally distributed with no strong skew. The versus-fits plot shows no
obvious fan shape, suggesting constant variance is reasonably satisfied.
No observations had a studentized residual exceeding |3|, so there are
no extreme outliers.
Four observations were flagged as influential by Cook’s distance
(threshold = 4/n = 0.087): games on 2024-09-24 vs. Storm, 2024-09-08
vs. Liberty, 2024-06-09 vs. Sparks, and 2024-05-14 vs. Mercury. These
games represent unusual combinations of the predictor variables but are
legitimate observations and were retained in the model.
# histogram of residuals — checking normality assumption
hist(model4$residual)

# versus fits plot — checking constant variance assumption
plot(model4$fitted.values, model4$residuals)

# studentized residuals — flagging outliers beyond |3|
plot(rstudent(model4))

# leverage plot — identifying high influence on model fit
plot(hatvalues(model4))

# Cook's distance — identifying observations that strongly affect coefficients
plot(cooks.distance(model4))

Prediction
Using the median values of each predictor — field goal percentage of
45.4%, 34 total rebounds, and 3-point percentage of 36% — Model 4
predicts a team score of 86.4 points, with a 95% confidence interval of
(84.6, 88.2) points.
The experimental region for this model is: field_goal_pct ∈ [31.3,
59.4], total_rebounds ∈ [17, 45], three_point_field_goal_pct ∈ [20.7,
47.8]. Predictions outside this range should be made with caution.
LS0tDQp0aXRsZTogIklTUCBTdGF0aXN0aWNhbCBBbmFseXNpcyBSZXBvcnQiDQphdXRob3I6ICJKb3NodWEgWGF2aWVyIg0KZGF0ZTogIjUvNC8yMDI2Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICB0aGVtZTogbHVtZW4NCiAgcGRmX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIGZpZ193aWR0aDogMw0KICAgIGZpZ19oZWlnaHQ6IDMNCiAgd29yZF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAga2VlcF9tZDogeWVzDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOw0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zaXplOiAxLjJlbTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGNvbG9yOiBuYXZ5Ow0KICBtYXJnaW4tYm90dG9tOiAxMHB4Ow0KfQ0KDQoNCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8NCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCg0KaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8NCiAgZm9udC1zaXplOiAyMnB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgY29sb3I6IERhcmtSZWQ7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KfQ0KDQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE1cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoNC5kYXRlIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoMiB7IC8qIEhlYWRlciAyIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmgzIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE2cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KLyogQWRkIGRvdHMgYWZ0ZXIgbnVtYmVyZWQgaGVhZGVycyAqLw0KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgew0KICBjb250ZW50OiAiLiI7DQoNCmJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9DQoNCi5oaWdobGlnaHRtZSB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyB9DQoNCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9DQoNCn0NCmBgYA0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCg0Kc2V0d2QoIkM6L1VzZXJzL2pvc2h1L09uZURyaXZlL0Rlc2t0b3AvU3RhdDMxOVNwcmluZyIpDQpkYXRhIDwtIHJlYWQuY3N2KCJXTkJBXzIwMjRfYm94LXNjb3Jlcy5jc3YiKQ0KDQoNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGNhcikNCmxpYnJhcnkob2xzcnIpDQojIGthYmxlRXh0cmEgbWFrZXMgdGhlIHRhYmxlcyBsb29rIG5pY2UNCmxpYnJhcnkoa2FibGVFeHRyYSkNCg0KDQoNCmBgYA0KDQpgYGB7ciB3cmFuZ2xpbmcsIGluY2x1ZGUgPSBGfQ0KDQojcmVtb3ZlcyB0ZWFtIHNjb3JlcyBmcm9tIEFsbCBzdGFyIGdhbWUgc28gb25seSBtYWluIFdOQkEgdGVhbXMgYXJlIGluY2x1ZGVkDQpkYXRhPWRhdGElPiUNCiAgZmlsdGVyKHRlYW1fbmFtZSAhPSAiVGVhbSBXTkJBIiwNCiAgICAgICAgIHRlYW1fbmFtZSAhPSAiVGVhbSBVU0EiKQ0KDQoNCiMgR3JvdXAgZGF0YSBieSB0ZWFtIGFuZCBjb21wdXRlIG1lYW4gJiBzZCBmb3IgYWxsIHJlcXVpcmVkIHZhcmlhYmxlcw0KIyBjb21wdXRlIGxlYWd1ZS13aWRlIHN1bW1hcnkgc28gd2UgY2FuIGNvbXBhcmUgQWNlcyB0byBhbGwgb3RoZXIgdGVhbXMNCiBzdW1tYXJ5X2J5X3RlYW0gPSBkYXRhICU+JQ0KICAgZ3JvdXBfYnkodGVhbV9uYW1lKSAlPiUNCiAgIHN1bW1hcmlzZSgNCiAgICAgbWVhbl9zY29yZT1tZWFuKHRlYW1fc2NvcmUpLCANCiAgICAgc2Rfc2NvcmU9c2QodGVhbV9zY29yZSksDQogICAgIG1lYW5fcmViPW1lYW4odG90YWxfcmVib3VuZHMpLCANCiAgICAgc2RfcmViPXNkKHRvdGFsX3JlYm91bmRzKSwNCiAgICAgbWVhbl9mZ19wY3Q9bWVhbihmaWVsZF9nb2FsX3BjdCksDQogICAgIHNkX2ZnX3BjdD1zZChmaWVsZF9nb2FsX3BjdCksDQogICAgIG1lYW5fM3B0ZmdwY3Q9bWVhbih0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCksDQogICAgIHNkXzNwdGZncGN0PXNkKHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KSwNCiAgICAgbWVhbl9zdGVhbHM9bWVhbihzdGVhbHMpLA0KICAgICBzZF9zdGVhbHM9c2Qoc3RlYWxzKQ0KICAgICkNCiAgIA0KDQojU2VsZWN0IHZhcmlhYmxlcyBhbmQgZmlsdGVyIHRvIG15IHRlYW0NCiNjcmVhdGVzIGEgZGF0YSBzZXQgd2l0aCBvbmx5IHRoZSBzbGVjdGVkIHZhcmlhYmxlcyBmb3IgbXkgdGVhbSAoQWNlcykNCm15X3RlYW0gPC0gZGF0YSAlPiUNCiAgc2VsZWN0KHRlYW1fc2NvcmUsIGZpZWxkX2dvYWxfcGN0LCB0b3RhbF9yZWJvdW5kcywgDQogICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCwgc3RlYWxzLCB0ZWFtX25hbWUsIA0KICAgICAgICAgdGVhbV93aW5uZXIpICU+JQ0KICANCiAgZmlsdGVyKHRlYW1fbmFtZSA9PSAiQWNlcyIpDQoNCiNHcm91cHMgY2FzZXMgYnkgd2luIHZzLiBsb3NzDQojc3VtbWFyaXplIGFsbCB2YXJpYWJsZXMgd2l0aCBtZWFuIGFuZCBzZCBmb3IgbXkgdGVhbQ0KI0Vzc2VudGlhbGx5IHNhbWUgYXMgc3VtbWFyeSBieSB0ZWFtLCBidXQgZm9yIEFjZXMgc3RhdHMgb25seQ0Kc3VtbWFyeUFjZXMgPSBteV90ZWFtICU+JQ0KICBncm91cF9ieSh0ZWFtX3dpbm5lciklPiUNCiAgc3VtbWFyaXNlKA0KICAgICAgICAgICAgbWVhbj1tZWFuKHRlYW1fc2NvcmUpLA0KICAgICAgICAgICAgc2Rfc2NvcmU9c2QodGVhbV9zY29yZSksDQogICAgICAgICAgICBtZWFuX3JlYj1tZWFuKHRvdGFsX3JlYm91bmRzKSwgDQogICAgICAgICAgICBzZF9yZWI9c2QodG90YWxfcmVib3VuZHMpLA0KICAgICAgICAgICAgbWVhbl9mZ19wY3Q9bWVhbihmaWVsZF9nb2FsX3BjdCksDQogICAgICAgICAgICBzZF9mZ19wY3Q9c2QoZmllbGRfZ29hbF9wY3QpLA0KICAgICAgICAgICAgbWVhbl8zcHRmZ3BjdD1tZWFuKHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KSwNCiAgICAgICAgICAgIHNkXzNwdGZncGN0PXNkKHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KSwNCiAgICAgICAgICAgIG1lYW5fc3RlYWxzPW1lYW4oc3RlYWxzKSwNCiAgICAgICAgICAgIHNkX3N0ZWFscz1zZChzdGVhbHMpDQogICAgICAgICAgKQ0KDQojQ3JlYXRlcyBjbGVhbiBkYXRhIHNldCBmb3IgaGlzdG9ncmFtIHRvIHVzZQ0KZGF0YV9oaXN0IDwtIGRhdGElPiUNCmZpbHRlcih0ZWFtX25hbWU9PSJBY2VzIikgJT4lDQogIG11dGF0ZShyZXN1bHQ9Y2FzZV93aGVuKA0KICAgIHRlYW1fd2lubmVyPT1UUlVFfiAiV2luIiwNCiAgICB0ZWFtX3dpbm5lcj09RkFMU0V+Ikxvc3MiKSkNCg0KDQoNCmBgYA0KDQojIEludHJvZHVjdGlvbg0KVGhpcyByZXBvcnQgYW5hbHl6ZXMgdGhlIDIwMjQgV05CQSBzZWFzb24gYm94IHNjb3JlIGRhdGEgdG8gYnVpbGQgYSByZWdyZXNzaW9uIA0KbW9kZWwgcHJlZGljdGluZyB0aGUgTGFzIFZlZ2FzIEFjZXMnIHRlYW0gc2NvcmUuIFRoZSBkYXRhc2V0IGluY2x1ZGVzIGdhbWUgDQpzdGF0aXN0aWNzIGZvciBhbGwgV05CQSB0ZWFtcy4gQWxsLVN0YXIgZ2FtZSBvYnNlcnZhdGlvbnMgd2VyZSByZW1vdmVkLCBsZWF2aW5nIA0Kb25seSByZWd1bGFyIHNlYXNvbiBnYW1lcy4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgd2hpY2ggcGVyZm9ybWFuY2UgbWV0cmljcyANCihmaWVsZCBnb2FsIHBlcmNlbnRhZ2UsIHJlYm91bmRzLCAzLXBvaW50IHBlcmNlbnRhZ2UsIGFuZCBzdGVhbHMpIGJlc3QgcHJlZGljdCANCmhvdyBtYW55IHBvaW50cyB0aGUgQWNlcyBzY29yZSBpbiBhIGdpdmVuIGdhbWUuDQoNCiMgVGFibGVzDQpUaGUgbGVhZ3VlIHN1bW1hcnkgdGFibGUgc2hvd3MgbWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGtleSBzdGF0aXN0aWNzIA0KZm9yIGFsbCAxMiBXTkJBIHRlYW1zLiBUaGUgQWNlcyBzdW1tYXJ5IHRhYmxlIGJyZWFrcyB0aGVzZSBzdGF0aXN0aWNzIGRvd24gYnkgDQpnYW1lIHJlc3VsdC4gT24gYXZlcmFnZSwgdGhlIEFjZXMgc2NvcmVkIGByIHJvdW5kKHN1bW1hcnlBY2VzJG1lYW5bMl0sIDEpYCANCnBvaW50cyBpbiB3aW5zIGFuZCBgciByb3VuZChzdW1tYXJ5QWNlcyRtZWFuWzFdLCAxKWAgcG9pbnRzIGluIGxvc3NlcywgDQphIGRpZmZlcmVuY2Ugb2YgYHIgcm91bmQoc3VtbWFyeUFjZXMkbWVhblsyXSAtIHN1bW1hcnlBY2VzJG1lYW5bMV0sIDEpYCBwb2ludHMuDQoNCmBgYHtyIHRhYmxlcywgaW5jbHVkZSA9IFR9DQoNCiNDcmVhdGVzIHRhYmxlIHdpdGggc3VtbWFyeSBvZiBlYWNoIHRlYW1zIHN0YXRpc3RpY3MNCnN1bW1hcnlfYnlfdGVhbSAlPiUNCiAga2JsKGRpZ2l0cyA9IDIsIGNhcHRpb24gPSAiU3VtbWFyeSBTdGF0aXN0aWNzIGJ5IFRlYW0iKSAlPiUNCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRkFMU0UsIGh0bWxfZm9udCA9ICJDYW1icmlhIikNCg0KI0NyZWF0ZXMgdGFibGUgd2l0aCBzdW1tYXJ5IG9mIEFjZXMgd2luL2xvc3Mgc3RhdHMNCnN1bW1hcnlBY2VzICU+JQ0KICBrYmwoZGlnaXRzID0gMiwgY2FwdGlvbiA9ICJBY2VzIFN1bW1hcnkgYnkgR2FtZSBSZXN1bHQiKSAlPiUNCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRkFMU0UsIGh0bWxfZm9udCA9ICJDYW1icmlhIikNCg0KYGBgDQoNCg0KDQoNCiMgR3JhcGhzDQpUaGUgaGlzdG9ncmFtIGFuZCBib3hwbG90IHNob3cgdGhlIGRpc3RyaWJ1dGlvbiBvZiBBY2VzIHRlYW0gc2NvcmVzIHNlcGFyYXRlZCANCmJ5IGdhbWUgcmVzdWx0LiBXaW5zIHRlbmQgdG8gY2x1c3RlciBhdCBoaWdoZXIgc2NvcmVzLCB3aGlsZSBsb3NzZXMgYXJlIA0KY29uY2VudHJhdGVkIGF0IGxvd2VyIHZhbHVlcy4gQm90aCBkaXN0cmlidXRpb25zIGFwcGVhciByb3VnaGx5IHN5bW1ldHJpYy4gDQpUaGUgYm94cGxvdCBjb25maXJtcyB0aGF0IHdpbm5pbmcgZ2FtZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCBub3RhYmx5IGhpZ2hlciANCnBvaW50IHRvdGFscywgd2l0aCBsZXNzIG92ZXJsYXAgdGhhbiBleHBlY3RlZCBieSBjaGFuY2UuDQpgYGB7ciBncmFwaHMsIGluY2x1ZGU9IFQsIGZpZy53aWR0aD01LCBmaWcuaGVpZ2h0PTV9DQoNCiNDcmVhdGVzIGEgc2lkZSBieSBzaWRlIGhpc3RvZ3JhbSB3aXRoIGEgZGlzdHJpYnV0aW9uIG9mIEFjZXMgVGVhbSBzY29yZSBzZXBlcmF0ZWQgYnkgZ2FtZSByZXN1bHRzICh3aW4vbG9zcykNCmdncGxvdChkYXRhX2hpc3QsIGFlcyh4ID0gdGVhbV9zY29yZSwgZmlsbCA9IHJlc3VsdCkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oY29sb3IgPSAid2hpdGUiLCBhbHBoYSA9IDAuNywgYmlucyA9IDE1LCBwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiV2luIiA9ICIjNjliM2EyIiwgIkxvc3MiID0gIiM0MDQwODAiKSkgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBvZiBUZWFtIFNjb3JlIGJ5IEdhbWUgUmVzdWx0IChBY2VzKSIsDQogICAgICAgeCA9ICJUZWFtIFNjb3JlIiwNCiAgICAgICB5ID0gIkNvdW50IiwNCiAgICAgICBmaWxsID0gIlJlc3VsdCIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiNDcmVhdGVzIGEgQm94IHBsb3Qgd2l0aCBkaXN0cmlidXRpb24gb2YgQWNlcyBUZWFtIHNjb3JlIHNlcGVyYXRlZCBieSBnYW1lIHJlc3VsdHMgKHdpbi9sb3NzKQ0KYm94cGxvdCh0ZWFtX3Njb3JlIH4gcmVzdWx0LCBkYXRhID0gZGF0YV9oaXN0LA0KICAgICAgICBjb2w9YygnbGlnaHRibHVlJywnbGlnaHRwaW5rJyksDQogICAgICAgIG1haW4gPSAicG9pbnRzIHNjb3JlIGJ5IGdhbWUgcmVzdWx0IiwNCiAgICAgICAgeGxhYiA9ICJSZXN1bHQiLCB5bGFiID0gIlBvaW50cyINCg0KICAgICAgICApDQoNCmBgYA0KDQoNCg0KYGBge3IgRmlyc3QgT3JkZXIgTW9kZWwsIGluY2x1ZGUgPSBULCBlY2hvPUYsIH0NCiMgZnVsbCBmaXJzdC1vcmRlciBtb2RlbCB3aXRoIGFsbCA0IGNhbmRpZGF0ZSBwcmVkaWN0b3JzDQptb2RlbDEgPC0gbG0odGVhbV9zY29yZSB+IGZpZWxkX2dvYWxfcGN0ICsgdG90YWxfcmVib3VuZHMgKw0KICAgICAgICAgICAgICAgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QgKyBzdGVhbHMsDQogICAgICAgICAgICAgZGF0YSA9IG15X3RlYW0pDQogDQojQ29ycmVsYXRpb24gbWF0cml4IG9mIEFjZXMgdmFyaWFibGVzDQpjb3JfZGF0YT0gbXlfdGVhbSAlPiUNCiAgc2VsZWN0KHRlYW1fc2NvcmUsZmllbGRfZ29hbF9wY3QsIHRvdGFsX3JlYm91bmRzLHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0LA0KICAgICAgICAgc3RlYWxzKQ0KI2Nvcihjb3JfZGF0YSkNCg0KDQojbGV0cyB1cyBsb29rIGF0IHRoZSBzdGF0cyBvZiB0aGUgYWNlcyBmcm9tIHRoZSBmaXJzdCBtb2RlbA0KI3N1bW1hcnkobW9kZWwxKQ0KI3ZpZihtb2RlbDEpDQoNCiNOZXcgcmVkY3VlZCBtb2RlbCBnZXRzIHJpZCBvZiB2YXJpYWJsZSBzdGVhbHMgc2luY2UgaXQncyB8cnw+MC44DQptb2RlbDIgPC0gbG0odGVhbV9zY29yZSB+IGZpZWxkX2dvYWxfcGN0ICsgdG90YWxfcmVib3VuZHMgKw0KICAgICAgICAgICAgICAgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIGRhdGEgPSBteV90ZWFtKQ0KDQojc3VtbWFyeShtb2RlbDIpDQojdmlmKG1vZGVsMikNCmBgYA0KIyBGaXJzdCBPcmRlciBNb2RlbA0KKipNdWx0aWNvbGxpbmVhcml0eSBDaGVjayAoTW9kZWwgMSDihpIgTW9kZWwgMikqKg0KDQpUaGUgZnVsbCBmaXJzdC1vcmRlciBtb2RlbCBpbmNsdWRlZCBmaWVsZCBnb2FsIHBlcmNlbnRhZ2UsIHRvdGFsIHJlYm91bmRzLCANCjMtcG9pbnQgcGVyY2VudGFnZSwgYW5kIHN0ZWFscy4gRXhhbWluaW5nIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXgsIG5vIHBhaXIgb2YgDQpwcmVkaWN0b3JzIGV4Y2VlZGVkIHxyfCA9IDAuOCDigJQgdGhlIGhpZ2hlc3QgY29ycmVsYXRpb24gYW1vbmcgcHJlZGljdG9ycyB3YXMgDQpiZXR3ZWVuIGZpZWxkX2dvYWxfcGN0IGFuZCB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCAociA9IDAuNDEpLiBWSUYgdmFsdWVzIA0KZm9yIGFsbCBwcmVkaWN0b3JzIHdlcmUgYmVsb3cgMS4yNSwgY29uZmlybWluZyBubyBtdWx0aWNvbGxpbmVhcml0eSBjb25jZXJuLiANCkhvd2V2ZXIsIHN0ZWFscyBzaG93ZWQgdmlydHVhbGx5IG5vIGxpbmVhciByZWxhdGlvbnNoaXAgd2l0aCB0ZWFtIHNjb3JlIA0KKHIgPSAwLjAxNikgYW5kIHdhcyByZW1vdmVkIHRvIHNpbXBsaWZ5IHRoZSBtb2RlbC4gTW9kZWwgMiByZXRhaW5zIA0KZmllbGRfZ29hbF9wY3QsIHRvdGFsX3JlYm91bmRzLCBhbmQgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QuDQoNCg0KYGBge3IgSW50ZXJhY3Rpb24gTW9kZWwsIHJlc3VsdHM9J2FzaXMnLCBlY2hvPUYsIGluY2x1ZGU9VCwgY29tbWVudD1OQX0NCg0KIyBmdWxsIGludGVyYWN0aW9uIG1vZGVsIGJ1aWx0IGZyb20gbW9kZWwyIHZhcmlhYmxlcyBvbmx5IChzdGVhbHMgYWxyZWFkeSByZW1vdmVkKSAgICAgIA0KbW9kZWwzIDwtIGxtKHRlYW1fc2NvcmUgfiAoZmllbGRfZ29hbF9wY3QgKyB0b3RhbF9yZWJvdW5kcyArIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QpXjIsIGRhdGEgPSBteV90ZWFtKQ0KI3N1bW1hcnkobW9kZWwzKQ0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiNzdW1tYXJ5KG1vZGVsNCkNCiMgcmVtb3ZlZCBmZzpyZWIgKHA9MC40ODkpIGFuZCByZWI6M3B0IChwPTAuMjUwKSDigJQgYm90aCBleGNlZWRlZCBhbHBoYT0wLjE1DQptb2RlbDQ9bG0odGVhbV9zY29yZX5maWVsZF9nb2FsX3BjdCt0b3RhbF9yZWJvdW5kcyt0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCtmaWVsZF9nb2FsX3BjdCp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCxkYXRhPW15X3RlYW0pDQoNCiMgc2F2ZSBzdW1tYXJ5IHNvIHdlIGNhbiByZWZlcmVuY2UgRi1zdGF0IGFuZCBSXjIgd2l0aCBpbmxpbmUgY29kZQ0KbW9kZWw0c3VtIDwtIHN1bW1hcnkobW9kZWw0KQ0KDQojc3VtbWFyeShtb2RlbDQpDQoNCiMNCiNsaWJyYXJ5KG1vZGVybmRpdmUpDQojdDQ9Z2V0X3JlZ3Jlc3Npb25fdGFibGUobW9kZWw0KQ0KI3Q0ICU+JSANCiMga2JsKGRpZ2l0cyA9IDMsIGNhcHRpb249IkZpbmFsIE1vZGVsIFJlc3VsdHMiKSAlPiUNCiMgIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYpDQogIA0KYGBgDQojIEludGVyYWN0aW9uIE1vZGVsDQpUaGUgZnVsbCBpbnRlcmFjdGlvbiBtb2RlbCAoTW9kZWwgMykgd2FzIGJ1aWx0IG9uIHRoZSB0aHJlZSB2YXJpYWJsZXMgZnJvbSANCk1vZGVsIDIuIEludGVyYWN0aW9uIHRlcm1zIHdlcmUgZXZhbHVhdGVkIGF0IHRoZSBhbHBoYSA9IDAuMTUgc2lnbmlmaWNhbmNlIGxldmVsLiANClR3byBvZiB0aGUgdGhyZWUgaW50ZXJhY3Rpb25zIHdlcmUgbm9uLXNpZ25pZmljYW50IGFuZCByZW1vdmVkOg0KDQotIGZpZWxkX2dvYWxfcGN0OnRvdGFsX3JlYm91bmRzIChwID0gMC40ODkpDQotIHRvdGFsX3JlYm91bmRzOnRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0IChwID0gMC4yNTApDQoNClRoZSBpbnRlcmFjdGlvbiBmaWVsZF9nb2FsX3BjdDp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCB3YXMgcmV0YWluZWQgDQoocCA9IDAuMDcyIDwgMC4xNSksIHByb2R1Y2luZyB0aGUgZmluYWwgTW9kZWwgNC4NCg0KTXkgZmluYWwgbW9kZWwgaXM6DQoNCnRlYW1fc2NvcmUgPSBgciByb3VuZChtb2RlbDQkY29lZmZpY2llbnRzWzFdLCAzKWAgKyANCmByIHJvdW5kKG1vZGVsNCRjb2VmZmljaWVudHNbMl0sIDMpYCAqIGZpZWxkX2dvYWxfcGN0ICsgDQpgciByb3VuZChtb2RlbDQkY29lZmZpY2llbnRzWzNdLCAzKWAgKiB0b3RhbF9yZWJvdW5kcyArIA0KYHIgcm91bmQobW9kZWw0JGNvZWZmaWNpZW50c1s0XSwgMylgICogdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QgKyANCmByIHJvdW5kKG1vZGVsNCRjb2VmZmljaWVudHNbNV0sIDMpYCAqIChmaWVsZF9nb2FsX3BjdCAqIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KQ0KDQpUaGlzIG1vZGVsIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQsIEYoYHIgbW9kZWw0c3VtJGZzdGF0aXN0aWNbMl1gLCANCmByIG1vZGVsNHN1bSRmc3RhdGlzdGljWzNdYCkgPSBgciByb3VuZChtb2RlbDRzdW0kZnN0YXRpc3RpY1sxXSwgMilgLCANCnAgPCAwLjAwMDEsIGFkanVzdGVkIFLCsiA9IGByIHJvdW5kKG1vZGVsNHN1bSRhZGouci5zcXVhcmVkLCAzKWAsIGluZGljYXRpbmcgDQp0aGF0IHRoZSBtb2RlbCBleHBsYWlucyBgciByb3VuZChtb2RlbDRzdW0kYWRqLnIuc3F1YXJlZCAqIDEwMCwgMSlgJSBvZiB0aGUgDQp2YXJpYW5jZSBpbiB0ZWFtIHNjb3JlLg0KDQpgYGB7ciBpbmZsdWVudGlhbC1nYW1lcywgaW5jbHVkZT1GQUxTRX0NCiMgUHVsbCBmdWxsIGRhdGFzZXQgd2l0aCBnYW1lIGluZm8gdG8gaWRlbnRpZnkgaW5mbHVlbnRpYWwgb2JzZXJ2YXRpb25zDQpteV90ZWFtX2Z1bGwgPC0gZGF0YSAlPiUNCiAgZmlsdGVyKHRlYW1fbmFtZSA9PSAiQWNlcyIpICU+JQ0KICBzZWxlY3QodGVhbV9zY29yZSwgZmllbGRfZ29hbF9wY3QsIHRvdGFsX3JlYm91bmRzLA0KICAgICAgICAgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIHN0ZWFscywgdGVhbV9uYW1lLA0KICAgICAgICAgdGVhbV93aW5uZXIsIGdhbWVfZGF0ZSwgb3Bwb25lbnRfdGVhbV9uYW1lKQ0KDQojIFJvd3MgNSwgMTIsIDM4LCA0NiB3ZXJlIGZsYWdnZWQgYnkgQ29vaydzIGRpc3RhbmNlDQppbmZsdWVudGlhbCA8LSBteV90ZWFtX2Z1bGxbYyg1LCAxMiwgMzgsIDQ2KSwgXQ0KYGBgDQoNCg0KIyBSZXNpZHVhbHMNClJlc2lkdWFsIGFuYWx5c2lzIG9mIE1vZGVsIDQgc2hvd3MgdGhhdCByZXNpZHVhbHMgYXJlIGFwcHJveGltYXRlbHkgbm9ybWFsbHkgDQpkaXN0cmlidXRlZCB3aXRoIG5vIHN0cm9uZyBza2V3LiBUaGUgdmVyc3VzLWZpdHMgcGxvdCBzaG93cyBubyBvYnZpb3VzIA0KZmFuIHNoYXBlLCBzdWdnZXN0aW5nIGNvbnN0YW50IHZhcmlhbmNlIGlzIHJlYXNvbmFibHkgc2F0aXNmaWVkLiBObyBvYnNlcnZhdGlvbnMgDQpoYWQgYSBzdHVkZW50aXplZCByZXNpZHVhbCBleGNlZWRpbmcgfDN8LCBzbyB0aGVyZSBhcmUgbm8gZXh0cmVtZSBvdXRsaWVycy4NCg0KRm91ciBvYnNlcnZhdGlvbnMgd2VyZSBmbGFnZ2VkIGFzIGluZmx1ZW50aWFsIGJ5IENvb2sncyBkaXN0YW5jZSANCih0aHJlc2hvbGQgPSA0L24gPSBgciByb3VuZCg0L25yb3cobXlfdGVhbSksIDMpYCk6IGdhbWVzIG9uIA0KYHIgaW5mbHVlbnRpYWwkZ2FtZV9kYXRlWzFdYCB2cy4gYHIgaW5mbHVlbnRpYWwkb3Bwb25lbnRfdGVhbV9uYW1lWzFdYCwgDQpgciBpbmZsdWVudGlhbCRnYW1lX2RhdGVbMl1gIHZzLiBgciBpbmZsdWVudGlhbCRvcHBvbmVudF90ZWFtX25hbWVbMl1gLCANCmByIGluZmx1ZW50aWFsJGdhbWVfZGF0ZVszXWAgdnMuIGByIGluZmx1ZW50aWFsJG9wcG9uZW50X3RlYW1fbmFtZVszXWAsIGFuZCANCmByIGluZmx1ZW50aWFsJGdhbWVfZGF0ZVs0XWAgdnMuIGByIGluZmx1ZW50aWFsJG9wcG9uZW50X3RlYW1fbmFtZVs0XWAuIA0KVGhlc2UgZ2FtZXMgcmVwcmVzZW50IHVudXN1YWwgY29tYmluYXRpb25zIG9mIHRoZSBwcmVkaWN0b3IgdmFyaWFibGVzIA0KYnV0IGFyZSBsZWdpdGltYXRlIG9ic2VydmF0aW9ucyBhbmQgd2VyZSByZXRhaW5lZCBpbiB0aGUgbW9kZWwuDQoNCmBgYHtyIFJlc2lkdWFsc30NCg0KIyBoaXN0b2dyYW0gb2YgcmVzaWR1YWxzIOKAlCBjaGVja2luZyBub3JtYWxpdHkgYXNzdW1wdGlvbg0KaGlzdChtb2RlbDQkcmVzaWR1YWwpDQoNCiMgdmVyc3VzIGZpdHMgcGxvdCDigJQgY2hlY2tpbmcgY29uc3RhbnQgdmFyaWFuY2UgYXNzdW1wdGlvbg0KcGxvdChtb2RlbDQkZml0dGVkLnZhbHVlcywgbW9kZWw0JHJlc2lkdWFscykNCg0KIyBzdHVkZW50aXplZCByZXNpZHVhbHMg4oCUIGZsYWdnaW5nIG91dGxpZXJzIGJleW9uZCB8M3wNCnBsb3QocnN0dWRlbnQobW9kZWw0KSkNCg0KIyBsZXZlcmFnZSBwbG90IOKAlCBpZGVudGlmeWluZyBoaWdoIGluZmx1ZW5jZSBvbiBtb2RlbCBmaXQNCnBsb3QoaGF0dmFsdWVzKG1vZGVsNCkpDQoNCiMgQ29vaydzIGRpc3RhbmNlIOKAlCBpZGVudGlmeWluZyBvYnNlcnZhdGlvbnMgdGhhdCBzdHJvbmdseSBhZmZlY3QgY29lZmZpY2llbnRzDQpwbG90KGNvb2tzLmRpc3RhbmNlKG1vZGVsNCkpDQoNCmBgYA0KDQoNCg0KDQoNCmBgYHtyIFByZWRpY3Rpb24sIGluY2x1ZGU9Rn0NCiNzdW1tYXJ5KGNvcl9kYXRhKQ0KDQpuZXdkYXRhPWRhdGEuZnJhbWUoZmllbGRfZ29hbF9wY3Q9NDUuNCwgDQogICAgICAgICAgICAgICAgICB0b3RhbF9yZWJvdW5kcz0zNCwgDQogICAgICAgICAgICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdD0zNiwNCiAgICAgICAgICAgICAgICAgIHN0ZWFscz03KQ0KDQoNCiNwcmVkaWN0KG1vZGVsNCwgbmV3ZGF0YSwgaW50ZXJ2YWwgPSAiY29uZmlkZW5jZSIsIGxldmVsPSAwLjk1KQ0KcHJlZGljdGlvbiA8LSBwcmVkaWN0KG1vZGVsNCwgbmV3ZGF0YSwgaW50ZXJ2YWwgPSAiY29uZmlkZW5jZSIsIGxldmVsID0gMC45NSkNCg0KYGBgDQojIFByZWRpY3Rpb24NClVzaW5nIHRoZSBtZWRpYW4gdmFsdWVzIG9mIGVhY2ggcHJlZGljdG9yIOKAlCBmaWVsZCBnb2FsIHBlcmNlbnRhZ2Ugb2YgNDUuNCUsIA0KMzQgdG90YWwgcmVib3VuZHMsIGFuZCAzLXBvaW50IHBlcmNlbnRhZ2Ugb2YgMzYlIOKAlCBNb2RlbCA0IHByZWRpY3RzIGEgdGVhbSANCnNjb3JlIG9mIGByIHJvdW5kKHByZWRpY3Rpb25bMV0sIDEpYCBwb2ludHMsIHdpdGggYSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCANCm9mIChgciByb3VuZChwcmVkaWN0aW9uWzJdLCAxKWAsIGByIHJvdW5kKHByZWRpY3Rpb25bM10sIDEpYCkgcG9pbnRzLg0KDQpUaGUgZXhwZXJpbWVudGFsIHJlZ2lvbiBmb3IgdGhpcyBtb2RlbCBpczogZmllbGRfZ29hbF9wY3Qg4oiIIA0KW2ByIG1pbihteV90ZWFtJGZpZWxkX2dvYWxfcGN0KWAsIGByIG1heChteV90ZWFtJGZpZWxkX2dvYWxfcGN0KWBdLCANCnRvdGFsX3JlYm91bmRzIOKIiCBbYHIgbWluKG15X3RlYW0kdG90YWxfcmVib3VuZHMpYCwgDQpgciBtYXgobXlfdGVhbSR0b3RhbF9yZWJvdW5kcylgXSwgdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3Qg4oiIIA0KW2ByIG1pbihteV90ZWFtJHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KWAsIA0KYHIgbWF4KG15X3RlYW0kdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QpYF0uIA0KUHJlZGljdGlvbnMgb3V0c2lkZSB0aGlzIHJhbmdlIHNob3VsZCBiZSBtYWRlIHdpdGggY2F1dGlvbi4NCg0K