forked from donadigo/donadigo.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
a01.html
270 lines (217 loc) · 21.3 KB
/
a01.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
---
layout: default
---
<head>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<style>
#leaderboard {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
#leaderboard td, #leaderboard th {
border: 1px solid #ddd;
padding: 8px;
}
/* #leaderboard tr:nth-child(even){background-color: #f2f2f2;} */
#leaderboard tr:hover {background-color: rgb(15, 15, 15);}
#leaderboard tr:first-child td {
/* background-color:rgb(185, 220, 248); */
}
* {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
}
.lap-cell {
background-color:rgb(2, 36, 17) !important;
}
.race-time-cell {
background-color:rgb(2, 36, 17) !important;
}
.container {
margin-left: 200px;
margin-right: 200px;
}
</style>
<meta charset="UTF-8">
<title>A01-Race Report</title>
</head>
<div id="options" class="container">
<h2>Options</h2>
<input type="checkbox" id="relative-diff-checkbox"> Display differences to the fastest record<br>
</div>
<br>
<div id="main" class="container">
</div>
<script>
let mainElement = document.getElementById('main');
function padNumber(num) {
return num.toString().padStart(2, "0");
}
function formatDiff(diff) {
const d = Math.abs(diff);
const seconds = Math.floor((d % 60000) / 1000);
const ms = Math.floor(d / 10) % 100;
const s = padNumber(seconds) + "." + padNumber(ms);
if (diff > 0) {
return '<font color="#eb5252">+' + s + '</font>'
} else {
return '<font color="#7aabde">-' + s + '</font>'
}
}
function timeIsInvalid(time) {
return time == 0xFFFFFFFF;
}
function formatRaceTime(time) {
if (timeIsInvalid(time)) {
return '<font color="red">Not finished</font>'
}
const minutes = Math.floor(time / 60000);
const seconds = Math.floor((time % 60000) / 1000);
const ms = Math.floor(time / 10) % 100;
return padNumber(minutes) + ":" + padNumber(seconds) + "." + padNumber(ms);
}
function sortGhosts(ghosts) {
ghosts.sort(function (a, b) {
if (a.race_time < b.race_time) {
return -1;
} else if (a.race_time > b.race_time) {
return 1;
} else {
return 0;
}
});
}
function anylyzeCPTimes(prev_ghost, next_ghost) {
const times = [];
const end = Math.min(prev_ghost.cp_times.length, next_ghost.cp_times.length);
for (let i = 0; i < end; i++) {
const cpTime = prev_ghost.cp_times[i];
const diff = next_ghost.cp_times[i] - cpTime;
const s = formatRaceTime(next_ghost.cp_times[i])
+ " (" + formatDiff(diff) + ")";
times.push(s);
}
return times;
}
function createLapIndexes(numCPs, lapCPCount) {
let indexes = [];
for (let i = lapCPCount; i <= numCPs; i++) {
if (i % lapCPCount == 0) {
indexes.push(i);
}
}
return indexes;
}
function makeRow(table, driver_login, race_time, cpDiffs, cpSpeeds, lapIndexes) {
let row = table.insertRow();
row.insertCell().innerHTML = driver_login;
let cell = row.insertCell();
cell.innerHTML = race_time;
cell.className = "race-time-cell";
for (let i = 1; i <= cpDiffs.length; i++) {
cell = row.insertCell();
cell.setAttribute("title", "Speed before this CP: " + cpSpeeds[i-1] + " km/h");
cell.innerHTML = cpDiffs[i-1];
if (lapIndexes.includes(i)) {
cell.className = "lap-cell";
}
}
}
function createLBTable(num_cps, lapIndexes) {
let table = document.createElement('table');
table.id = 'leaderboard';
let header = table.insertRow();
header.insertCell().innerHTML = "Author";
let cell = header.insertCell();
cell.innerHTML = "Time";
cell.className = "race-time-cell";
for (let i = 1; i <= num_cps; i++) {
let cell = header.insertCell();
if (lapIndexes.includes(i)) {
cell.innerHTML = "CP " + i + " (lap " + (lapIndexes.indexOf(i) + 1) + ")";
cell.className = "lap-cell";
} else {
cell.innerHTML = "CP " + i;
}
}
return table;
}
function countUnfinishedGhosts(ghosts) {
let count = 0;
for (let ghost of ghosts) {
if (timeIsInvalid(ghost.race_time)) {
count++;
}
}
return count;
}
function anylyzeCPSpeeds(ghost) {
let cpSpeeds = [];
for (let i = 0; i < ghost.cp_times.length; i++) {
let ghostIndex = Math.floor(ghost.cp_times[i] / ghost.sample_period);
if (ghostIndex < ghost.record_speeds.length) {
cpSpeeds.push(ghost.record_speeds[ghostIndex]);
}
}
return cpSpeeds;
}
function populateCPTable(data, relativeToFastest, showUnfinished) {
for (let map of Object.keys(data)) {
const ghosts = data[map].ghosts;
if (!showUnfinished && countUnfinishedGhosts(ghosts) == ghosts.length) {
continue;
}
sortGhosts(ghosts);
let title = document.createElement('h3');
title.innerHTML = data[map].map_name;
mainElement.appendChild(title);
const lapCPCount = "lap_cp_count" in data[map] ? data[map].lap_cp_count : -1;
let lapIndexes;
if (lapCPCount != -1) {
lapIndexes = createLapIndexes(ghosts[0].cp_times.length, lapCPCount);
} else {
lapIndexes = [];
}
let table = createLBTable(ghosts[0].cp_times.length, lapIndexes);
let cpDiffs = [];
for (let cpTime of ghosts[0].cp_times) {
cpDiffs.push(formatRaceTime(cpTime));
}
let cpSpeeds = anylyzeCPSpeeds(ghosts[0]);
makeRow(table, ghosts[0].driver_login, formatRaceTime(ghosts[0].race_time), cpDiffs, cpSpeeds, lapIndexes);
for (let i = 1; i < ghosts.length; i++) {
if (!showUnfinished && timeIsInvalid(ghosts[i].race_time)) {
continue;
}
let rtDiff;
if (relativeToFastest) {
cpDiffs = anylyzeCPTimes(ghosts[0], ghosts[i]);
rtDiff = ghosts[i].race_time - ghosts[0].race_time;
} else {
cpDiffs = anylyzeCPTimes(ghosts[i - 1], ghosts[i]);
rtDiff = ghosts[i].race_time - ghosts[i - 1].race_time;
}
cpSpeeds = anylyzeCPSpeeds(ghosts[i]);
let rtStr = formatRaceTime(ghosts[i].race_time) + " (" + formatDiff(rtDiff) + ")";
makeRow(table, ghosts[i].driver_login, rtStr, cpDiffs, cpSpeeds, lapIndexes);
}
mainElement.appendChild(table);
mainElement.appendChild(document.createElement("br"));
mainElement.appendChild(document.createElement("br"));
}
}
function parseData(data, relativeToFastest, showUnfinished) {
while (mainElement.firstChild) {
mainElement.removeChild(mainElement.firstChild);
}
populateCPTable(data, relativeToFastest, showUnfinished);
}
let relativeCheckbox = document.getElementById("relative-diff-checkbox");
relativeCheckbox.onclick = onOptionsChanged;
function onOptionsChanged(e) {
parseData(data, relativeCheckbox.checked, false);
}
let data = {"BeySZdnfuSh4nHY5xztiXLmlrXe": {"map_name": "A01-Race", "ghosts": [{"driver_login": "_555af__fc7.link_9c7max", "race_time": 23890, "cp_times": [15650, 19660, 23890], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 50, 57, 63, 70, 76, 82, 88, 94, 99, 102, 102, 102, 106, 111, 116, 120, 125, 129, 133, 137, 141, 144, 148, 152, 156, 160, 162, 162, 165, 169, 172, 176, 180, 184, 188, 192, 196, 200, 202, 205, 207, 210, 212, 215, 217, 220, 222, 224, 227, 229, 232, 234, 235, 235, 236, 238, 241, 243, 246, 248, 251, 253, 256, 258, 261, 263, 265, 267, 270, 268, 263, 262, 262, 263, 263, 264, 266, 267, 269, 271, 273, 276, 280, 286, 294, 300, 307, 315, 322, 329, 336, 343, 346, 349, 352, 354, 356, 359, 361, 364, 366, 369, 372, 374, 376, 379, 381, 384, 386, 388, 391, 393, 395, 397, 399, 401, 403, 404, 406, 407, 409, 411, 412, 414, 415, 416, 419, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 449, 451, 453, 454, 456, 458, 459, 461, 464, 466, 468, 470, 472, 474, 477, 479, 481, 483, 486, 488, 491, 493, 495, 497, 500, 502, 504, 507, 509, 511, 513, 515, 517, 519, 521, 521, 516, 512, 506, 501, 497, 494, 491, 488, 485, 482, 476, 471, 466, 461, 457, 452, 448, 444, 440, 436, 432, 429, 426, 422, 420, 417, 414, 412, 410, 408, 407, 405, 404, 403, 402, 401, 401, 400, 400, 400, 401, 401, 402, 403, 404, 405, 407, 409, 410, 412, 373, 372, 370, 358, 346, 335, 324, 314, 305, 296, 287, 280, 272, 265, 259, 253, 248, 243, 238, 234, 231, 227, 224, 222, 220, 218, 216, 215, 213, 212, 212, 211]}, {"driver_login": "shneyki", "race_time": 23920, "cp_times": [15660, 19680, 23920], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 50, 57, 63, 70, 76, 82, 88, 94, 99, 102, 102, 102, 106, 111, 116, 120, 125, 129, 133, 137, 141, 144, 148, 152, 156, 160, 162, 162, 165, 169, 173, 176, 180, 184, 188, 192, 196, 200, 202, 205, 207, 210, 212, 215, 217, 220, 222, 224, 227, 229, 232, 234, 235, 235, 236, 238, 241, 243, 246, 248, 251, 253, 256, 258, 260, 262, 265, 267, 269, 270, 263, 262, 262, 263, 263, 264, 265, 267, 269, 270, 273, 275, 279, 286, 293, 300, 307, 314, 322, 329, 336, 343, 346, 349, 352, 354, 356, 359, 361, 364, 366, 369, 372, 374, 376, 379, 381, 384, 386, 388, 391, 393, 395, 397, 399, 401, 402, 404, 406, 407, 409, 410, 412, 413, 415, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 441, 444, 445, 448, 449, 451, 452, 454, 456, 458, 459, 461, 464, 466, 468, 470, 472, 475, 477, 479, 481, 483, 486, 488, 490, 492, 495, 497, 499, 501, 504, 506, 508, 511, 512, 514, 516, 518, 520, 520, 516, 512, 506, 501, 497, 493, 490, 487, 484, 481, 475, 470, 465, 460, 456, 451, 447, 443, 439, 435, 431, 428, 424, 421, 419, 416, 413, 411, 409, 407, 405, 404, 402, 401, 400, 400, 399, 399, 399, 399, 400, 400, 401, 402, 403, 404, 406, 407, 409, 410, 375, 374, 372, 363, 351, 339, 327, 317, 307, 298, 289, 281, 273, 266, 260, 253, 248, 243, 238, 234, 230, 226, 223, 220, 218, 216, 214, 212, 211, 210, 209, 209, 208]}, {"driver_login": "drei10", "race_time": 23920, "cp_times": [15660, 19680, 23920], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 50, 57, 63, 70, 76, 82, 88, 94, 99, 102, 102, 103, 106, 111, 116, 120, 125, 129, 133, 137, 141, 145, 148, 152, 156, 160, 162, 162, 165, 169, 173, 176, 180, 184, 188, 192, 196, 200, 202, 205, 207, 210, 212, 215, 217, 220, 222, 225, 227, 229, 232, 234, 235, 235, 236, 239, 241, 243, 246, 249, 251, 253, 256, 258, 261, 263, 265, 267, 270, 270, 263, 263, 263, 263, 264, 265, 266, 267, 269, 271, 273, 276, 280, 287, 294, 301, 308, 316, 323, 330, 337, 344, 346, 350, 352, 354, 357, 359, 362, 364, 367, 369, 372, 374, 377, 379, 382, 384, 387, 389, 391, 393, 395, 397, 399, 401, 403, 404, 406, 407, 409, 411, 412, 414, 415, 417, 419, 421, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 449, 448, 450, 452, 454, 456, 458, 460, 463, 465, 467, 469, 471, 473, 476, 478, 480, 482, 484, 486, 488, 491, 493, 495, 498, 500, 502, 504, 507, 509, 511, 512, 514, 516, 518, 518, 514, 510, 504, 499, 496, 493, 490, 487, 484, 481, 475, 470, 465, 460, 455, 451, 447, 442, 438, 435, 431, 427, 424, 421, 418, 416, 413, 411, 409, 407, 405, 404, 402, 401, 400, 400, 399, 399, 399, 399, 400, 400, 401, 402, 403, 404, 406, 407, 409, 395, 375, 373, 372, 221, 205, 198, 192, 186, 181, 177, 173, 169, 167, 164, 163, 161, 160, 160, 159]}, {"driver_login": "adribouchon", "race_time": 23830, "cp_times": [15630, 19620, 23830], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 50, 57, 63, 70, 76, 82, 88, 94, 99, 102, 102, 103, 106, 111, 116, 120, 125, 129, 133, 137, 141, 145, 148, 152, 156, 160, 162, 162, 165, 169, 173, 176, 180, 184, 188, 192, 196, 200, 202, 205, 207, 210, 212, 215, 217, 220, 222, 225, 227, 229, 232, 234, 235, 235, 236, 238, 241, 243, 246, 248, 251, 253, 256, 258, 260, 263, 265, 267, 270, 267, 264, 263, 263, 264, 264, 265, 266, 268, 270, 272, 274, 276, 282, 288, 295, 302, 309, 316, 324, 331, 338, 344, 347, 351, 353, 355, 357, 360, 363, 365, 367, 370, 373, 375, 378, 380, 382, 385, 387, 390, 392, 394, 396, 398, 400, 402, 403, 405, 407, 408, 409, 411, 413, 414, 416, 418, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 448, 450, 451, 453, 455, 457, 459, 461, 464, 466, 468, 470, 472, 475, 477, 479, 481, 484, 486, 489, 491, 493, 496, 498, 500, 503, 505, 508, 510, 512, 514, 516, 518, 520, 522, 524, 522, 517, 512, 506, 501, 499, 496, 493, 490, 487, 482, 477, 472, 467, 462, 458, 453, 449, 444, 440, 437, 433, 430, 427, 424, 421, 418, 416, 414, 411, 410, 408, 407, 405, 405, 404, 403, 402, 402, 402, 402, 403, 403, 404, 405, 406, 408, 409, 411, 413, 377, 363, 362, 353, 340, 329, 318, 309, 299, 291, 282, 275, 267, 261, 255, 249, 244, 239, 235, 231, 227, 224, 222, 219, 217, 215, 213, 212, 211, 210, 210, 209, 209]}, {"driver_login": "acceleracer_01", "race_time": 23860, "cp_times": [15630, 19640, 23860], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 51, 57, 63, 70, 76, 82, 88, 94, 99, 102, 102, 103, 106, 111, 116, 121, 125, 129, 133, 137, 141, 145, 148, 152, 156, 160, 162, 162, 165, 169, 172, 176, 180, 184, 188, 192, 196, 200, 202, 205, 207, 210, 212, 215, 217, 220, 222, 225, 227, 229, 232, 234, 235, 235, 236, 239, 241, 243, 246, 249, 251, 253, 256, 258, 261, 263, 265, 267, 270, 270, 264, 263, 263, 264, 265, 265, 267, 268, 270, 272, 274, 277, 282, 289, 296, 302, 309, 316, 324, 331, 338, 344, 347, 351, 353, 355, 357, 360, 362, 365, 367, 370, 373, 375, 378, 380, 382, 385, 387, 389, 392, 394, 396, 398, 400, 402, 403, 405, 407, 408, 409, 411, 413, 414, 416, 418, 420, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 448, 450, 452, 453, 455, 457, 459, 461, 464, 465, 468, 470, 472, 474, 477, 479, 481, 482, 485, 487, 489, 491, 493, 496, 498, 500, 503, 505, 507, 510, 512, 514, 515, 517, 519, 521, 519, 515, 510, 504, 499, 496, 494, 491, 488, 485, 481, 475, 470, 465, 460, 456, 451, 447, 443, 439, 435, 431, 428, 425, 422, 419, 416, 414, 411, 410, 408, 406, 405, 404, 402, 402, 401, 400, 400, 400, 400, 401, 402, 402, 403, 405, 406, 407, 409, 411, 388, 373, 371, 366, 354, 343, 331, 321, 311, 302, 293, 285, 278, 270, 264, 257, 252, 247, 242, 238, 234, 230, 227, 224, 222, 220, 218, 216, 215, 214, 213, 212, 212]}, {"driver_login": "kripke", "race_time": 23880, "cp_times": [15670, 19670, 23880], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 51, 57, 64, 70, 76, 82, 88, 94, 99, 102, 102, 102, 106, 111, 116, 120, 125, 129, 133, 137, 141, 144, 148, 152, 156, 160, 162, 162, 165, 169, 172, 176, 180, 184, 188, 192, 196, 200, 202, 205, 207, 210, 212, 215, 217, 220, 222, 225, 227, 229, 232, 234, 235, 235, 236, 239, 241, 243, 246, 248, 251, 253, 256, 258, 261, 263, 265, 267, 270, 267, 263, 262, 262, 263, 263, 264, 266, 267, 269, 271, 273, 276, 279, 287, 294, 300, 308, 315, 322, 329, 337, 343, 346, 349, 352, 354, 356, 359, 361, 364, 366, 369, 372, 374, 376, 379, 381, 384, 386, 388, 391, 393, 395, 397, 399, 401, 402, 404, 405, 407, 409, 410, 412, 414, 415, 417, 419, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 449, 451, 452, 454, 456, 458, 460, 463, 465, 467, 469, 471, 473, 476, 478, 481, 483, 485, 487, 490, 492, 495, 497, 499, 501, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 522, 518, 513, 508, 503, 500, 496, 493, 491, 487, 484, 479, 473, 468, 464, 459, 454, 450, 446, 442, 438, 434, 431, 427, 424, 421, 419, 416, 414, 412, 410, 408, 407, 405, 405, 403, 403, 402, 402, 402, 402, 402, 403, 404, 405, 405, 407, 408, 410, 411, 414, 374, 375, 238, 205, 196, 189, 182, 176, 171, 166, 162, 158, 155, 153, 151, 149, 149, 153, 158, 163, 168, 173, 179, 185, 191, 198, 204, 211, 217, 224, 229, 229]}, {"driver_login": "l94", "race_time": 23910, "cp_times": [15660, 19680, 23910], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 50, 57, 63, 70, 76, 82, 88, 94, 99, 102, 102, 103, 106, 111, 116, 120, 125, 129, 133, 137, 141, 145, 148, 152, 156, 160, 162, 162, 165, 169, 173, 176, 180, 184, 188, 192, 196, 200, 203, 205, 207, 210, 212, 215, 217, 220, 222, 225, 227, 229, 232, 234, 235, 235, 236, 239, 241, 243, 246, 249, 251, 254, 256, 258, 261, 263, 265, 268, 259, 261, 263, 263, 263, 263, 263, 265, 266, 267, 269, 271, 273, 276, 280, 287, 294, 300, 307, 314, 322, 329, 336, 343, 346, 349, 352, 354, 356, 359, 361, 364, 366, 369, 371, 374, 376, 379, 381, 384, 386, 388, 391, 393, 395, 397, 399, 401, 403, 404, 406, 407, 409, 410, 412, 414, 415, 417, 419, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 449, 449, 452, 453, 455, 458, 459, 462, 464, 466, 468, 471, 473, 475, 477, 480, 482, 484, 486, 489, 491, 493, 496, 498, 500, 503, 505, 508, 510, 512, 514, 516, 517, 520, 522, 523, 518, 514, 508, 503, 499, 495, 492, 489, 486, 482, 477, 472, 467, 462, 458, 453, 448, 444, 440, 437, 433, 429, 426, 423, 420, 417, 415, 412, 410, 408, 407, 405, 404, 403, 402, 401, 400, 400, 400, 400, 400, 401, 402, 402, 404, 405, 407, 408, 410, 412, 372, 374, 373, 362, 350, 339, 328, 317, 308, 299, 290, 282, 275, 267, 261, 255, 250, 244, 240, 236, 232, 228, 225, 223, 220, 218, 216, 215, 213, 212, 212, 211, 211]}, {"driver_login": "samgusta", "race_time": 23920, "cp_times": [15650, 19670, 23920], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 51, 57, 63, 70, 76, 82, 88, 94, 99, 102, 102, 103, 106, 111, 116, 120, 125, 129, 133, 137, 141, 144, 148, 152, 156, 160, 162, 162, 165, 169, 173, 176, 180, 184, 188, 192, 196, 200, 202, 205, 207, 210, 212, 215, 217, 220, 222, 225, 227, 229, 232, 234, 235, 234, 236, 238, 241, 243, 246, 248, 251, 253, 256, 258, 260, 263, 265, 267, 270, 266, 262, 261, 261, 262, 262, 263, 265, 266, 268, 270, 272, 275, 279, 286, 293, 300, 307, 315, 322, 329, 336, 343, 346, 349, 352, 354, 356, 359, 361, 364, 366, 369, 371, 374, 376, 379, 381, 384, 386, 389, 391, 393, 395, 397, 399, 401, 403, 404, 406, 407, 409, 411, 412, 414, 415, 417, 419, 421, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 449, 451, 453, 454, 456, 458, 460, 462, 464, 466, 469, 471, 473, 475, 477, 480, 481, 484, 486, 488, 490, 493, 495, 497, 500, 502, 504, 507, 509, 511, 512, 514, 516, 518, 520, 520, 516, 512, 506, 500, 496, 493, 490, 487, 484, 481, 475, 470, 465, 460, 455, 451, 446, 442, 438, 434, 431, 427, 424, 421, 418, 415, 413, 411, 409, 407, 405, 403, 402, 401, 400, 400, 399, 399, 399, 399, 399, 400, 400, 401, 402, 404, 405, 407, 409, 411, 373, 372, 371, 362, 350, 338, 327, 317, 308, 299, 290, 282, 275, 268, 261, 255, 250, 245, 240, 236, 232, 229, 226, 223, 221, 219, 217, 216, 214, 213, 212, 212, 211]}, {"driver_login": "protraintrack", "race_time": 23870, "cp_times": [15650, 19640, 23870], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 51, 57, 63, 70, 76, 82, 88, 94, 99, 102, 102, 103, 106, 111, 116, 120, 125, 129, 133, 137, 141, 145, 148, 152, 156, 160, 162, 162, 165, 169, 173, 176, 180, 184, 188, 192, 196, 200, 202, 205, 207, 210, 212, 215, 217, 220, 222, 225, 227, 229, 232, 234, 235, 234, 236, 239, 241, 243, 246, 248, 251, 253, 256, 258, 261, 263, 265, 267, 270, 269, 264, 263, 263, 264, 265, 265, 267, 268, 270, 272, 274, 276, 281, 288, 295, 301, 308, 315, 323, 330, 337, 344, 346, 350, 352, 354, 357, 359, 362, 364, 367, 369, 372, 375, 377, 379, 382, 384, 387, 389, 391, 393, 395, 398, 400, 401, 403, 405, 406, 408, 409, 411, 412, 414, 415, 417, 419, 421, 423, 424, 427, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 450, 452, 454, 456, 458, 460, 463, 465, 467, 469, 471, 474, 476, 478, 481, 483, 485, 487, 490, 492, 494, 497, 499, 502, 504, 506, 509, 511, 513, 515, 517, 519, 521, 523, 521, 517, 512, 507, 501, 498, 495, 493, 490, 487, 482, 477, 472, 467, 462, 458, 453, 448, 444, 440, 437, 433, 430, 427, 424, 421, 418, 416, 413, 411, 409, 408, 406, 405, 404, 403, 402, 402, 402, 402, 402, 402, 403, 404, 405, 406, 407, 408, 410, 412, 414, 358, 340]}, {"driver_login": "jack1998-1998", "race_time": 23870, "cp_times": [15650, 19660, 23870], "sample_period": 100, "record_speeds": [0, 9, 10, 16, 22, 27, 33, 39, 44, 50, 57, 63, 70, 76, 82, 88, 94, 100, 102, 102, 103, 106, 111, 116, 120, 125, 129, 133, 137, 141, 145, 148, 152, 156, 160, 162, 162, 165, 169, 173, 176, 180, 184, 188, 192, 196, 200, 203, 205, 208, 210, 212, 215, 217, 220, 222, 225, 227, 229, 232, 234, 235, 235, 236, 239, 241, 243, 246, 249, 251, 254, 256, 258, 261, 263, 265, 268, 270, 269, 262, 262, 262, 262, 263, 264, 265, 266, 268, 270, 272, 275, 280, 287, 294, 300, 307, 315, 322, 329, 336, 343, 346, 349, 351, 354, 356, 359, 361, 364, 366, 369, 371, 374, 376, 379, 381, 384, 386, 388, 391, 393, 395, 397, 399, 401, 402, 404, 406, 407, 409, 410, 412, 414, 415, 416, 419, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 449, 450, 452, 454, 456, 458, 460, 463, 465, 467, 469, 471, 473, 476, 478, 480, 482, 484, 486, 489, 491, 493, 496, 498, 500, 503, 505, 508, 510, 512, 514, 516, 517, 520, 522, 521, 517, 512, 507, 501, 498, 495, 493, 490, 487, 483, 478, 472, 467, 463, 458, 453, 449, 445, 441, 437, 433, 430, 427, 424, 421, 418, 416, 413, 411, 409, 408, 406, 405, 404, 403, 402, 402, 402, 401, 402, 402, 402, 403, 404, 405, 407, 408, 409, 411, 413, 373, 372]}]}};
parseData(data, relativeCheckbox.checked, false);
</script>