This is part of a series of pages related to EPL Away Wins:
Exploratory data analysis for English Premier League results, for seasons 2000/01 to 2018/19. How well can Away wins be predicted from individual match variables?
Summary of Selected Variables
For each game, we have home team and away team data for:
- shots for and against
- shots on target for and against
- corners for and against
- fouls for and against
- yellow cards for and against
- expected goals (xG) for and against
- goals scored for and against
- match result (win, draw or loss)
- average bookmaker odds for home win, draw and away win
We have data for the previous 4 games for the home team and away team. We also have data for:
- season win percentage
- current table position
- fractional points gain against against top 6 sides
- geographical distance between teams
- table finishes over last two seasons
- date
We can look at summary statistics and distributions of some of these variables.
HS HST HC HF HY HomexG
Min. : 0.00 Min. : 0.000 Min. : 0.000 Min. : 0.00 Min. :0.000 Min. :0.000
1st Qu.:10.00 1st Qu.: 4.000 1st Qu.: 4.000 1st Qu.: 9.00 1st Qu.:0.000 1st Qu.:0.850
Median :13.00 Median : 6.000 Median : 6.000 Median :11.00 Median :1.000 Median :1.370
Mean :13.53 Mean : 6.363 Mean : 6.167 Mean :11.37 Mean :1.376 Mean :1.505
3rd Qu.:17.00 3rd Qu.: 8.000 3rd Qu.: 8.000 3rd Qu.:14.00 3rd Qu.:2.000 3rd Qu.:2.030
Max. :43.00 Max. :24.000 Max. :19.000 Max. :33.00 Max. :7.000 Max. :5.730
NA's :4620
Dist winpc_H top6_perfH
Min. : 0.9521 Min. : 0.00 Min. :0.0000
1st Qu.:108.4414 1st Qu.: 24.00 1st Qu.:0.1482
Median :174.1738 Median : 33.33 Median :0.2667
Mean :187.5508 Mean : 36.70 Mean :0.3031
3rd Qu.:278.3909 3rd Qu.: 48.15 3rd Qu.:0.4444
Max. :472.2527 Max. :100.00 Max. :1.0000
NA's :61

We only have xG data for a couple of seasons, so there are a lot of missing values for this. There are a small number of missing values for top 6 performance variables, but all the other variables are complete.
Yellow card data is very discrete and will not be investigated further at this stage.
Normalisation of these distributions using transformations is not deemed to be required.
Feature Correlations
We will now demonstrate how much correlation is observed between the feature variables. We will just compare Home variables for the previous game as indicators.

Only variables with at least one correlation coefficient outside ±0.65 are included in the above plot.
This plot shows that:
- win percentage is highly inversely correlated to table position -> just keep win percentage
- shots, shots on target and xG are reasonably correlated with each other -> we have less data for xG and shots on target are likely to be more useful than total shots, so will just keep shots on target
- away team win percentage and table position are correlated with their performance against the top 6 -> we can keep win percentage and top 6 performance data as it could add additional information
Away Wins
What proportion of results are Away Wins and how does this vary?
overall, how many games are Away wins:
0 1
4514 1756
by season:

Therefore, approximately 28% of these games are Away wins. The proportion of these that are Away wins varies on a season basis from ~22-33%. The change in proportion over time suggests that the proportion could be increasing, however the p-value for the season component of a linear fit to this data is 0.104.
Two Variable Plots
We will now create plots to illustrate how feature variables affect the observed proportion of Away wins. We will sum the match variables over the previous 4 matches to give perhaps a better representation of current form.






Some of the conclusions on relationship with Away Win proportion that we can draw from these:
- Clear relationships with Home and Away win percentage and performance against top 6
- Also clear relationships with last Home and Away table finish, although Away finish relationship may not be linear
- Last Home shots on target, corners, goals scored, goals conceded have relationship, but not fouls
- Last Away shots on target, corners, fouls, goals scored and goals conceded have some relationship
- Last Home and Away opposition shots on target and corners have relationship, but not fouls
- Distance seems to perhaps have a minor effect, with fewer Away wins for teams that travel further
- Unclear effect of Month - slightly higher proportions in Dec and Mar, around the Christmas and Easter intensive periods
So recommended to take the following forward for predictive purposes:
- winpc_H, winpc_A
- top6_perfH, top6perfA
- HomeFin1-2, AwayFin1-2
- Distance, Month
- sumHST, sumHC, sumHGS, sumHGC
- sumAST, sumAC, sumAF, sumAGS, sumAGC
- sumHoppST, sumHoppC
- sumAoppST, sumAoppC
End
LS0tDQp0aXRsZTogIkVQTCBFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KVGhpcyBpcyBwYXJ0IG9mIGEgc2VyaWVzIG9mIHBhZ2VzIHJlbGF0ZWQgdG8gRVBMIEF3YXkgV2luczogIA0KDQoqIEV4cGxvcmF0b3J5IERhdGEgQW5hbHlzaXMgKHRoaXMgcGFnZSkNCiogW0RhdGEgTW9kZWxsaW5nXShodHRwczovL3JwdWJzLmNvbS9HYXJldGhDaGFkL0VQTF9tb2RlbGxpbmcpDQoqIFtCZXR0aW5nIFN0cmF0ZWdpZXNdKGh0dHBzOi8vcnB1YnMuY29tL0dhcmV0aENoYWQvRVBMX3N0cmF0ZWd5KQ0KDQoNCkV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgZm9yIEVuZ2xpc2ggUHJlbWllciBMZWFndWUgcmVzdWx0cywgZm9yIHNlYXNvbnMgMjAwMC8wMSB0byAyMDE4LzE5LiBIb3cgd2VsbCBjYW4gQXdheSB3aW5zIGJlIHByZWRpY3RlZCBmcm9tIGluZGl2aWR1YWwgbWF0Y2ggdmFyaWFibGVzPyAgDQoNCg0KYGBge3IgSW5pdGlhbGlzZSBhbmQgTG9hZCBEYXRhLCBpbmNsdWRlPUZBTFNFfQ0Kcm0obGlzdCA9IGxzKCkpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShncmlkRXh0cmEpDQoNCmxvYWQoaGVyZTo6aGVyZSgiZGF0YS9pbnRlcmltL0VuX2ZlYXR1cmVzLlJEYXRhIikpDQpFbl9mZWF0dXJlcyA8LSBFbl9mZWF0dXJlcyAlPiUNCiAgZmlsdGVyKGluZGV4IDwgMTkwMDApDQoNCkVuX2ZlYXR1cmVzJG1vbnRoIDwtIGZhY3Rvcihmb3JtYXQoRW5fZmVhdHVyZXMkRGF0ZSwgIiVCIiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIiwgIkphbnVhcnkiLCAiRmVicnVhcnkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIpKQ0KYGBgDQoNCmBgYHtyIEZ1bmN0aW9uIGRlZmluaXRpb24sIGluY2x1ZGU9RkFMU0V9DQp0d29fdmFyX3Bsb3QgPC0gZnVuY3Rpb24oZGYsIHZhcil7DQogIA0KICBuZXdfdmFyIDwtIGVucXVvKHZhcikNCiAgDQogIHBsb3RfZGYgPC0gZGYgJT4lDQogICAgbXV0YXRlKHZhcl9iaW4gPSBjdXQoISFuZXdfdmFyLCBicmVha3MgPSAxMCkpICU+JQ0KICAgIGdyb3VwX2J5KHZhcl9iaW4pICU+JQ0KICAgIHN1bW1hcmlzZShwcm9wX2F3YXlzID0gbWVhbihBd2F5V2luKSwNCiAgICAgICAgICAgICAgbnVtX2JpbiA9IG4oKSkNCiAgDQogIHZhcl9zdHJpbmcgPC0gZGVwYXJzZShzdWJzdGl0dXRlKHZhcikpDQogIA0KICBwbG90IDwtIGdncGxvdChwbG90X2RmLCBhZXModmFyX2JpbiwgcHJvcF9hd2F5cywgZ3JvdXAgPSAxKSkgKyBnZW9tX2xpbmUoKSArIGdlb21fcG9pbnQoYWVzKHNpemUgPSBudW1fYmluKSkgKw0KICAgIHRoZW1lX2J3KCkgKyBsYWJzKHggPSBwYXN0ZTAoIkJpbiBmb3IgIiwgdmFyX3N0cmluZyksIHkgPSAiUHJvcG9ydGlvbiBBd2F5IFdpbnMiKSArIA0KICAgIHRoZW1lKGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpDQogIA0KICByZXR1cm4ocGxvdCkNCn0NCmBgYA0KDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjp0ZWFsOyI+U3VtbWFyeSBvZiBTZWxlY3RlZCBWYXJpYWJsZXM8L3NwYW4+ICANCkZvciBlYWNoIGdhbWUsIHdlIGhhdmUgaG9tZSB0ZWFtIGFuZCBhd2F5IHRlYW0gZGF0YSBmb3I6ICANCg0KKiBzaG90cyBmb3IgYW5kIGFnYWluc3QNCiogc2hvdHMgb24gdGFyZ2V0IGZvciBhbmQgYWdhaW5zdA0KKiBjb3JuZXJzIGZvciBhbmQgYWdhaW5zdA0KKiBmb3VscyBmb3IgYW5kIGFnYWluc3QNCiogeWVsbG93IGNhcmRzIGZvciBhbmQgYWdhaW5zdA0KKiBleHBlY3RlZCBnb2FscyAoeEcpIGZvciBhbmQgYWdhaW5zdA0KKiBnb2FscyBzY29yZWQgZm9yIGFuZCBhZ2FpbnN0DQoqIG1hdGNoIHJlc3VsdCAod2luLCBkcmF3IG9yIGxvc3MpDQoqIGF2ZXJhZ2UgYm9va21ha2VyIG9kZHMgZm9yIGhvbWUgd2luLCBkcmF3IGFuZCBhd2F5IHdpbg0KDQpXZSBoYXZlIGRhdGEgZm9yIHRoZSBwcmV2aW91cyA0IGdhbWVzIGZvciB0aGUgaG9tZSB0ZWFtIGFuZCBhd2F5IHRlYW0uIFdlIGFsc28gaGF2ZSBkYXRhIGZvcjoNCg0KKiBzZWFzb24gd2luIHBlcmNlbnRhZ2UNCiogY3VycmVudCB0YWJsZSBwb3NpdGlvbg0KKiBmcmFjdGlvbmFsIHBvaW50cyBnYWluIGFnYWluc3QgYWdhaW5zdCB0b3AgNiBzaWRlcw0KKiBnZW9ncmFwaGljYWwgZGlzdGFuY2UgYmV0d2VlbiB0ZWFtcw0KKiB0YWJsZSBmaW5pc2hlcyBvdmVyIGxhc3QgdHdvIHNlYXNvbnMNCiogZGF0ZQ0KDQpXZSBjYW4gbG9vayBhdCBzdW1tYXJ5IHN0YXRpc3RpY3MgYW5kIGRpc3RyaWJ1dGlvbnMgb2Ygc29tZSBvZiB0aGVzZSB2YXJpYWJsZXMuDQoNCg0KYGBge3IgRGF0YSBTdW1tYXJ5LCBlY2hvPUZBTFNFfQ0Kc3VtbWFyeShFbl9mZWF0dXJlcyAlPiUgc2VsZWN0KEhTLCBIU1QsIEhDLCBIRiwgSFksIEhvbWV4RywgRGlzdCwgd2lucGNfSCwgdG9wNl9wZXJmSCkpDQpgYGANCg0KYGBge3IgUGxvdCBIaXN0b2dyYW1zLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcGxvdF8xIDwtIGdncGxvdChFbl9mZWF0dXJlcywgYWVzKEhTKSkgKyBnZW9tX2RlbnNpdHkoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpICsgdGhlbWVfbWluaW1hbCgpDQpwbG90XzIgPC0gZ2dwbG90KEVuX2ZlYXR1cmVzLCBhZXMoSFNUKSkgKyBnZW9tX2RlbnNpdHkoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpICsgdGhlbWVfbWluaW1hbCgpDQpwbG90XzMgPC0gZ2dwbG90KEVuX2ZlYXR1cmVzLCBhZXMoSEMpKSArIGdlb21fZGVuc2l0eShmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikgKyB0aGVtZV9taW5pbWFsKCkNCnBsb3RfNCA8LSBnZ3Bsb3QoRW5fZmVhdHVyZXMsIGFlcyhIRikpICsgZ2VvbV9kZW5zaXR5KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKSArIHRoZW1lX21pbmltYWwoKQ0KcGxvdF81IDwtIGdncGxvdChFbl9mZWF0dXJlcywgYWVzKEhZKSkgKyBnZW9tX2hpc3RvZ3JhbShmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikgKyB0aGVtZV9taW5pbWFsKCkNCnBsb3RfNiA8LSBnZ3Bsb3QoRW5fZmVhdHVyZXMsIGFlcyhIb21leEcpKSArIGdlb21fZGVuc2l0eShmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikgKyB0aGVtZV9taW5pbWFsKCkNCnBsb3RfNyA8LSBnZ3Bsb3QoRW5fZmVhdHVyZXMsIGFlcyhEaXN0KSkgKyBnZW9tX2hpc3RvZ3JhbShmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikgKyB0aGVtZV9taW5pbWFsKCkNCnBsb3RfOCA8LSBnZ3Bsb3QoRW5fZmVhdHVyZXMsIGFlcyh3aW5wY19IKSkgKyBnZW9tX2RlbnNpdHkoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpICsgdGhlbWVfbWluaW1hbCgpDQpwbG90XzkgPC0gZ2dwbG90KEVuX2ZlYXR1cmVzLCBhZXModG9wNl9wZXJmSCkpICsgZ2VvbV9kZW5zaXR5KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKSArIHRoZW1lX21pbmltYWwoKQ0KDQoNCmdyaWRfcGxvdDEgPC0gYXJyYW5nZUdyb2IocGxvdF8xLCBwbG90XzIsIHBsb3RfMywgcGxvdF80LCBwbG90XzUsIHBsb3RfNiwgcGxvdF83LCBwbG90XzgsIHBsb3RfOSwgDQogICAgICAgICAgICAgbmNvbCA9IDIpDQpnZ3NhdmUoaGVyZTo6aGVyZSgicGxvdHMvZWRhX2dyaWRfcGxvdDEucG5nIiksIGdyaWRfcGxvdDEsIGRwaSA9IDYwMCwgaGVpZ2h0ID0gNykNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoInBsb3RzL2VkYV9ncmlkX3Bsb3QxLnBuZyIpKQ0KDQpgYGANCg0KV2Ugb25seSBoYXZlIHhHIGRhdGEgZm9yIGEgY291cGxlIG9mIHNlYXNvbnMsIHNvIHRoZXJlIGFyZSBhIGxvdCBvZiBtaXNzaW5nIHZhbHVlcyBmb3IgdGhpcy4gVGhlcmUgYXJlIGEgc21hbGwgbnVtYmVyIG9mIG1pc3NpbmcgdmFsdWVzIGZvciB0b3AgNiBwZXJmb3JtYW5jZSB2YXJpYWJsZXMsIGJ1dCBhbGwgdGhlIG90aGVyIHZhcmlhYmxlcyBhcmUgY29tcGxldGUuICANCg0KWWVsbG93IGNhcmQgZGF0YSBpcyB2ZXJ5IGRpc2NyZXRlIGFuZCB3aWxsIG5vdCBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlciBhdCB0aGlzIHN0YWdlLiAgDQoNCk5vcm1hbGlzYXRpb24gb2YgdGhlc2UgZGlzdHJpYnV0aW9ucyB1c2luZyB0cmFuc2Zvcm1hdGlvbnMgaXMgbm90IGRlZW1lZCB0byBiZSByZXF1aXJlZC4gIA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6dGVhbDsiPkZlYXR1cmUgQ29ycmVsYXRpb25zPC9zcGFuPiAgDQpXZSB3aWxsIG5vdyBkZW1vbnN0cmF0ZSBob3cgbXVjaCBjb3JyZWxhdGlvbiBpcyBvYnNlcnZlZCBiZXR3ZWVuIHRoZSBmZWF0dXJlIHZhcmlhYmxlcy4gV2Ugd2lsbCBqdXN0IGNvbXBhcmUgSG9tZSB2YXJpYWJsZXMgZm9yIHRoZSBwcmV2aW91cyBnYW1lIGFzIGluZGljYXRvcnMuICANCg0KDQpgYGB7ciBGZWF0dXJlIENvcnJlbGF0aW9uLCBlY2hvPUZBTFNFLCBmaWcud2lkdGg9MTB9DQpjb3JyIDwtIGNvcihFbl9mZWF0dXJlc1ssIGMoMzo3LCA5OjE0LCAxNiwgMTg6MTksIDE2OSwgMTcxLCAxNzM6MTc3LCAxODA6MTgxKV0sIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKQ0KDQpsaW1pdCA8LSAwLjY1DQprZWVwX3ZlYyA8LSBudW1lcmljKCkNCg0KIyByZW1vdmUgYWxsIHZhcmlhYmxlcyB3aXRoIG9ubHkgbG93IGNvcnJlbGF0aW9uDQpmb3IgKGkgaW4gMTpuY29sKGNvcnIpKXsNCiAgY29ycltpLCBpXSA8LSAwDQogIGlmIChhbnkoYWJzKGNvcnJbLCBpXSkgPiBsaW1pdCkpew0KICAgIGtlZXBfdmVjW2xlbmd0aChrZWVwX3ZlYykgKyAxXSA8LSBpDQogIH0NCn0NCg0KcmVkdWNlZF9jb3JyIDwtIGNvcnJba2VlcF92ZWMsIGtlZXBfdmVjXQ0KDQpnZ2NvcnJwbG90OjpnZ2NvcnJwbG90KHJlZHVjZWRfY29yciwgdHlwZSA9ICJsb3dlciIsIGxhYiA9IFRSVUUpDQoNCmBgYA0KDQpPbmx5IHZhcmlhYmxlcyB3aXRoIGF0IGxlYXN0IG9uZSBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBvdXRzaWRlIMKxYHIgbGltaXRgIGFyZSBpbmNsdWRlZCBpbiB0aGUgYWJvdmUgcGxvdC4gIA0KDQpUaGlzIHBsb3Qgc2hvd3MgdGhhdDogIA0KDQogKiB3aW4gcGVyY2VudGFnZSBpcyBoaWdobHkgaW52ZXJzZWx5IGNvcnJlbGF0ZWQgdG8gdGFibGUgcG9zaXRpb24gLT4ganVzdCBrZWVwIHdpbiBwZXJjZW50YWdlDQogKiBzaG90cywgc2hvdHMgb24gdGFyZ2V0IGFuZCB4RyBhcmUgcmVhc29uYWJseSBjb3JyZWxhdGVkIHdpdGggZWFjaCBvdGhlciAtPiB3ZSBoYXZlIGxlc3MgZGF0YSBmb3IgeEcgYW5kIHNob3RzIG9uIHRhcmdldCBhcmUgbGlrZWx5IHRvIGJlIG1vcmUgdXNlZnVsIHRoYW4gdG90YWwgc2hvdHMsIHNvIHdpbGwganVzdCBrZWVwIHNob3RzIG9uIHRhcmdldA0KICogYXdheSB0ZWFtIHdpbiBwZXJjZW50YWdlIGFuZCB0YWJsZSBwb3NpdGlvbiBhcmUgY29ycmVsYXRlZCB3aXRoIHRoZWlyIHBlcmZvcm1hbmNlIGFnYWluc3QgdGhlIHRvcCA2IC0+IHdlIGNhbiBrZWVwIHdpbiBwZXJjZW50YWdlIGFuZCB0b3AgNiBwZXJmb3JtYW5jZSBkYXRhIGFzIGl0IGNvdWxkIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQogDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6dGVhbDsiPkF3YXkgV2luczwvc3Bhbj4gIA0KV2hhdCBwcm9wb3J0aW9uIG9mIHJlc3VsdHMgYXJlIEF3YXkgV2lucyBhbmQgaG93IGRvZXMgdGhpcyB2YXJ5PyAgDQogDQpgYGB7ciBGaWx0ZXIgRGF0YSBieSBPZGRzIGFuZCBTdW1tYXJpc2UgQXdheSBXaW5zLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9MTB9DQpFbl9mZWF0dXJlcyA8LSBFbl9mZWF0dXJlcyAlPiUNCiAgbXV0YXRlKHNlYXNvbiA9IChpbmRleCAlLyUgMTAwMCkgKyAyMDAwKQ0KDQpjYXQoIm92ZXJhbGwsIGhvdyBtYW55IGdhbWVzIGFyZSBBd2F5IHdpbnM6IikNCnRhYmxlKEVuX2ZlYXR1cmVzJEF3YXlXaW4pDQoNCmNhdCgiXG5ieSBzZWFzb246IikNCnRibF9kYXRhIDwtIGFzX3RpYmJsZSh0YWJsZShFbl9mZWF0dXJlcyRzZWFzb24sIEVuX2ZlYXR1cmVzJEF3YXlXaW4pLCAubmFtZV9yZXBhaXIgPSAidW5pcXVlIikNCm5hbWVzKHRibF9kYXRhKVsxXSA8LSAic2Vhc29uIg0KbmFtZXModGJsX2RhdGEpWzJdIDwtICJyZXN1bHQiDQoNCnRibF9kYXRhIDwtIHRibF9kYXRhICU+JQ0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gcmVzdWx0LCBuYW1lc19wcmVmaXggPSAiQXdheVdpbl8iLCB2YWx1ZXNfZnJvbSA9IG4pICU+JQ0KICBtdXRhdGUocHJvcF9Bd2F5ID0gQXdheVdpbl8xIC8gKEF3YXlXaW5fMCArIEF3YXlXaW5fMSksDQogICAgICAgICBzZWFzb24gPSBhcy5udW1lcmljKHNlYXNvbikpDQoNCnByaW50KHRibF9kYXRhKQ0KDQphd2F5X21vZGVsIDwtIGxtKHByb3BfQXdheSB+IHNlYXNvbiwgZGF0YSA9IHRibF9kYXRhKQ0KYXdheV9tb2RlbF9zdW1tYXJ5IDwtIHN1bW1hcnkoYXdheV9tb2RlbCkNCg0Kc2Vhc29uX3Bsb3QgPC0gZ2dwbG90KHRibF9kYXRhLCBhZXMoc2Vhc29uLCBwcm9wX0F3YXksIGdyb3VwID0gMSkpICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KCkgKw0KICB0aGVtZV9idygpICsgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKyANCiAgbGFicyh4ID0gIlNlYXNvbiIsIHkgPSAiUHJvcG9ydGlvbiBBd2F5IFdpbnMiKQ0KZ2dzYXZlKGhlcmU6OmhlcmUoInBsb3RzL3Bsb3RfMS5wbmciKSwgZHBpID0gNjAwLCBoZWlnaHQgPSA1KQ0KDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJwbG90cy9wbG90XzEucG5nIikpDQoNCmBgYA0KIA0KVGhlcmVmb3JlLCBhcHByb3hpbWF0ZWx5IGByIHJvdW5kKG1lYW4oRW5fZmVhdHVyZXMkQXdheVdpbikgKiAxMDAsIDApYCUgb2YgdGhlc2UgZ2FtZXMgYXJlIEF3YXkgd2lucy4gVGhlIHByb3BvcnRpb24gb2YgdGhlc2UgdGhhdCBhcmUgQXdheSB3aW5zIHZhcmllcyBvbiBhIHNlYXNvbiBiYXNpcyBmcm9tIH4yMi0zMyUuIFRoZSBjaGFuZ2UgaW4gcHJvcG9ydGlvbiBvdmVyIHRpbWUgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvcG9ydGlvbiBjb3VsZCBiZSBpbmNyZWFzaW5nLCBob3dldmVyIHRoZSBwLXZhbHVlIGZvciB0aGUgKipzZWFzb24qKiBjb21wb25lbnQgb2YgYSBsaW5lYXIgZml0IHRvIHRoaXMgZGF0YSBpcyANCmByIHJvdW5kKGF3YXlfbW9kZWxfc3VtbWFyeSRjb2VmZmljaWVudHNbMiwgNF0sIDMpYC4NCiANCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjp0ZWFsOyI+VHdvIFZhcmlhYmxlIFBsb3RzPC9zcGFuPiAgDQoNCldlIHdpbGwgbm93IGNyZWF0ZSBwbG90cyB0byBpbGx1c3RyYXRlIGhvdyBmZWF0dXJlIHZhcmlhYmxlcyBhZmZlY3QgdGhlIG9ic2VydmVkIHByb3BvcnRpb24gb2YgQXdheSB3aW5zLiBXZSB3aWxsIHN1bSB0aGUgbWF0Y2ggdmFyaWFibGVzIG92ZXIgdGhlIHByZXZpb3VzIDQgbWF0Y2hlcyB0byBnaXZlIHBlcmhhcHMgYSBiZXR0ZXIgcmVwcmVzZW50YXRpb24gb2YgY3VycmVudCBmb3JtLiAgDQoNCmBgYHtyIFR3byBWYXJpYWJsZSBQbG90cywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCkVuX2ZlYXR1cmVzIDwtIEVuX2ZlYXR1cmVzICU+JQ0KICBtdXRhdGUoc3VtX0hTVCA9IExhc3RIU1QxICsgTGFzdEhTVDIgKyBMYXN0SFNUMyArIExhc3RIU1Q0LA0KICAgICAgICAgc3VtX0hDID0gTGFzdEhDMSArIExhc3RIQzIgKyBMYXN0SEMzICsgTGFzdEhDNCwNCiAgICAgICAgIHN1bV9IRiA9IExhc3RIRjEgKyBMYXN0SEYyICsgTGFzdEhGMyArIExhc3RIRjQsDQogICAgICAgICBzdW1fSEdTID0gTGFzdEhHUzEgKyBMYXN0SEdTMiArIExhc3RIR1MzICsgTGFzdEhHUzQsDQogICAgICAgICBzdW1fSEdDID0gTGFzdEhHQzEgKyBMYXN0SEdDMiArIExhc3RIR0MzICsgTGFzdEhHQzQsDQogICAgICAgICBzdW1fQVNUID0gTGFzdEFTVDEgKyBMYXN0QVNUMiArIExhc3RBU1QzICsgTGFzdEFTVDQsDQogICAgICAgICBzdW1fQUMgPSBMYXN0QUMxICsgTGFzdEFDMiArIExhc3RBQzMgKyBMYXN0QUM0LA0KICAgICAgICAgc3VtX0FGID0gTGFzdEFGMSArIExhc3RBRjIgKyBMYXN0QUYzICsgTGFzdEFGNCwNCiAgICAgICAgIHN1bV9BR1MgPSBMYXN0QUdTMSArIExhc3RBR1MyICsgTGFzdEFHUzMgKyBMYXN0QUdTNCwNCiAgICAgICAgIHN1bV9BR0MgPSBMYXN0QUdDMSArIExhc3RBR0MyICsgTGFzdEFHQzMgKyBMYXN0QUdDNCwNCiAgICAgICAgIHN1bV9Ib3BwU1QgPSBMYXN0SG9wcFNUMSArIExhc3RIb3BwU1QyICsgTGFzdEhvcHBTVDMgKyBMYXN0SG9wcFNUNCwNCiAgICAgICAgIHN1bV9Ib3BwQyA9IExhc3RIb3BwQzEgKyBMYXN0SG9wcEMyICsgTGFzdEhvcHBDMyArIExhc3RIb3BwQzQsDQogICAgICAgICBzdW1fSG9wcEYgPSBMYXN0SG9wcEYxICsgTGFzdEhvcHBGMiArIExhc3RIb3BwRjMgKyBMYXN0SG9wcEY0LA0KICAgICAgICAgc3VtX0FvcHBTVCA9IExhc3RBb3BwU1QxICsgTGFzdEFvcHBTVDIgKyBMYXN0QW9wcFNUMyArIExhc3RBb3BwU1Q0LA0KICAgICAgICAgc3VtX0FvcHBDID0gTGFzdEFvcHBDMSArIExhc3RBb3BwQzIgKyBMYXN0QW9wcEMzICsgTGFzdEFvcHBDNCwNCiAgICAgICAgIHN1bV9Bb3BwRiA9IExhc3RBb3BwRjEgKyBMYXN0QW9wcEYyICsgTGFzdEFvcHBGMyArIExhc3RBb3BwRjQpDQoNCnN1bUhTVF9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgc3VtX0hTVCkNCnN1bUhDX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fSEMpDQpzdW1IRl9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgc3VtX0hGKQ0Kc3VtSEdDX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fSEdDKQ0Kc3VtSEdTX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fSEdTKQ0Kc3VtQVNUX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fQVNUKQ0Kc3VtQUNfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHN1bV9BQykNCnN1bUFGX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fQUYpDQpzdW1BR0NfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHN1bV9BR0MpDQpzdW1BR1NfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHN1bV9BR1MpDQoNCnN1bUhvcHBTVF9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgc3VtX0hvcHBTVCkNCnN1bUhvcHBDX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fSG9wcEMpDQpzdW1Ib3BwRl9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgc3VtX0hvcHBGKQ0Kc3VtQW9wcFNUX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fQW9wcFNUKQ0Kc3VtQW9wcENfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHN1bV9Bb3BwQykNCnN1bUFvcHBGX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBzdW1fQW9wcEYpDQoNCndpbnBjX0hfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHdpbnBjX0gpDQp3aW5wY19BX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCB3aW5wY19BKQ0KdG9wNl9wZXJmSF9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgdG9wNl9wZXJmSCkNCnRvcDZfcGVyZkFfcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIHRvcDZfcGVyZkEpDQpIb21lRmluX3Bsb3QgPC0gdHdvX3Zhcl9wbG90KEVuX2ZlYXR1cmVzLCBIb21lRmluMSkNCkF3YXlGaW5fcGxvdCA8LSB0d29fdmFyX3Bsb3QoRW5fZmVhdHVyZXMsIEF3YXlGaW4xKQ0KRGlzdF9wbG90IDwtIHR3b192YXJfcGxvdChFbl9mZWF0dXJlcywgRGlzdCkNCg0KbW9udGhfZGYgPC0gRW5fZmVhdHVyZXMgJT4lDQogIGdyb3VwX2J5KG1vbnRoKSAlPiUNCiAgc3VtbWFyaXNlKHByb3BfYXdheXMgPSBtZWFuKEF3YXlXaW4pLA0KICAgICAgICAgICAgICBudW1fYmluID0gbigpKQ0KDQptb250aF9wbG90IDwtIGdncGxvdChtb250aF9kZiwgYWVzKG1vbnRoLCBwcm9wX2F3YXlzLCBncm91cCA9IDEpKSArIGdlb21fbGluZSgpICsgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IG51bV9iaW4pKSArDQogICAgdGhlbWVfYncoKSArIGxhYnMoeCA9ICJNb250aCIsIHkgPSAiUHJvcG9ydGlvbiBBd2F5IFdpbnMiKSArIA0KICAgIHRoZW1lKGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCkpDQoNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KZ3JpZF9wbG90MiA8LSBhcnJhbmdlR3JvYih3aW5wY19IX3Bsb3QsIHdpbnBjX0FfcGxvdCwgdG9wNl9wZXJmSF9wbG90LCB0b3A2X3BlcmZBX3Bsb3QsIG5jb2wgPSAyKQ0KZ2dzYXZlKGhlcmU6OmhlcmUoInBsb3RzL2VkYV9ncmlkX3Bsb3QyLnBuZyIpLCBncmlkX3Bsb3QyLCBkcGkgPSA2MDAsIHdpZHRoID0gMTIsIGhlaWdodCA9IDEwKQ0KZ3JpZF9wbG90MyA8LSBhcnJhbmdlR3JvYihIb21lRmluX3Bsb3QsIEF3YXlGaW5fcGxvdCwgRGlzdF9wbG90LCBtb250aF9wbG90LCBuY29sID0gMikNCmdnc2F2ZShoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90My5wbmciKSwgZ3JpZF9wbG90MywgZHBpID0gNjAwLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCkNCmdyaWRfcGxvdDQgPC0gYXJyYW5nZUdyb2Ioc3VtSFNUX3Bsb3QsIHN1bUhDX3Bsb3QsIHN1bUhGX3Bsb3QsIHN1bUhHU19wbG90LCBuY29sID0gMikNCmdnc2F2ZShoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90NC5wbmciKSwgZ3JpZF9wbG90NCwgZHBpID0gNjAwLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCkNCmdyaWRfcGxvdDUgPC0gYXJyYW5nZUdyb2Ioc3VtSEdDX3Bsb3QsIHN1bUFTVF9wbG90LCBzdW1BQ19wbG90LCBzdW1BRl9wbG90LCBuY29sID0gMikNCmdnc2F2ZShoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90NS5wbmciKSwgZ3JpZF9wbG90NSwgZHBpID0gNjAwLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCkNCmdyaWRfcGxvdDYgPC0gYXJyYW5nZUdyb2Ioc3VtQUdTX3Bsb3QsIHN1bUFHQ19wbG90LCBzdW1Ib3BwU1RfcGxvdCwgc3VtSG9wcENfcGxvdCwgbmNvbCA9IDIpDQpnZ3NhdmUoaGVyZTo6aGVyZSgicGxvdHMvZWRhX2dyaWRfcGxvdDYucG5nIiksIGdyaWRfcGxvdDYsIGRwaSA9IDYwMCwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTApDQpncmlkX3Bsb3Q3IDwtIGFycmFuZ2VHcm9iKHN1bUhvcHBGX3Bsb3QsIHN1bUFvcHBTVF9wbG90LCBzdW1Bb3BwQ19wbG90LCBzdW1Bb3BwRl9wbG90LCBuY29sID0gMikNCmdnc2F2ZShoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90Ny5wbmciKSwgZ3JpZF9wbG90NywgZHBpID0gNjAwLCB3aWR0aCA9IDEyLCBoZWlnaHQgPSAxMCkNCg0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgicGxvdHMvZWRhX2dyaWRfcGxvdDIucG5nIikpDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90My5wbmciKSkNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoInBsb3RzL2VkYV9ncmlkX3Bsb3Q0LnBuZyIpKQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgicGxvdHMvZWRhX2dyaWRfcGxvdDUucG5nIikpDQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJwbG90cy9lZGFfZ3JpZF9wbG90Ni5wbmciKSkNCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoInBsb3RzL2VkYV9ncmlkX3Bsb3Q3LnBuZyIpKQ0KYGBgDQoNCg0KIFNvbWUgb2YgdGhlIGNvbmNsdXNpb25zIG9uIHJlbGF0aW9uc2hpcCB3aXRoIEF3YXkgV2luIHByb3BvcnRpb24gdGhhdCB3ZSBjYW4gZHJhdyBmcm9tIHRoZXNlOiAgDQogDQogKiBDbGVhciByZWxhdGlvbnNoaXBzIHdpdGggSG9tZSBhbmQgQXdheSB3aW4gcGVyY2VudGFnZSBhbmQgcGVyZm9ybWFuY2UgYWdhaW5zdCB0b3AgNg0KICogQWxzbyBjbGVhciByZWxhdGlvbnNoaXBzIHdpdGggbGFzdCBIb21lIGFuZCBBd2F5IHRhYmxlIGZpbmlzaCwgYWx0aG91Z2ggQXdheSBmaW5pc2ggcmVsYXRpb25zaGlwIG1heSBub3QgYmUgbGluZWFyDQogKiBMYXN0IEhvbWUgc2hvdHMgb24gdGFyZ2V0LCBjb3JuZXJzLCBnb2FscyBzY29yZWQsIGdvYWxzIGNvbmNlZGVkIGhhdmUgcmVsYXRpb25zaGlwLCBidXQgbm90IGZvdWxzDQogKiBMYXN0IEF3YXkgc2hvdHMgb24gdGFyZ2V0LCBjb3JuZXJzLCBmb3VscywgZ29hbHMgc2NvcmVkIGFuZCBnb2FscyBjb25jZWRlZCBoYXZlIHNvbWUgcmVsYXRpb25zaGlwDQogKiBMYXN0IEhvbWUgYW5kIEF3YXkgb3Bwb3NpdGlvbiBzaG90cyBvbiB0YXJnZXQgYW5kIGNvcm5lcnMgaGF2ZSByZWxhdGlvbnNoaXAsIGJ1dCBub3QgZm91bHMNCiAqIERpc3RhbmNlIHNlZW1zIHRvIHBlcmhhcHMgaGF2ZSBhIG1pbm9yIGVmZmVjdCwgd2l0aCBmZXdlciBBd2F5IHdpbnMgZm9yIHRlYW1zIHRoYXQgdHJhdmVsIGZ1cnRoZXINCiAqIFVuY2xlYXIgZWZmZWN0IG9mIE1vbnRoIC0gc2xpZ2h0bHkgaGlnaGVyIHByb3BvcnRpb25zIGluIERlYyBhbmQgTWFyLCBhcm91bmQgdGhlIENocmlzdG1hcyBhbmQgRWFzdGVyIGludGVuc2l2ZSBwZXJpb2RzDQogDQogU28gcmVjb21tZW5kZWQgdG8gdGFrZSB0aGUgZm9sbG93aW5nIGZvcndhcmQgZm9yIHByZWRpY3RpdmUgcHVycG9zZXM6DQogDQogKiB3aW5wY19ILCB3aW5wY19BDQogKiB0b3A2X3BlcmZILCB0b3A2cGVyZkENCiAqIEhvbWVGaW4xLTIsIEF3YXlGaW4xLTINCiAqIERpc3RhbmNlLCBNb250aA0KICogc3VtSFNULCBzdW1IQywgc3VtSEdTLCBzdW1IR0MNCiAqIHN1bUFTVCwgc3VtQUMsIHN1bUFGLCBzdW1BR1MsIHN1bUFHQw0KICogc3VtSG9wcFNULCBzdW1Ib3BwQw0KICogc3VtQW9wcFNULCBzdW1Bb3BwQw0KIA0KDQoqKioNCkVuZA0K