mtg-playerinfo 1.5.2 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/package.json +1 -1
- package/src/fetchers/mtgElo.js +58 -1
- package/src/fetchers/topdeck.js +24 -1
- package/src/fetchers/unityLeague.js +33 -0
- package/src/index.js +35 -1
- package/src/utils/eventDedup.js +33 -0
- package/test/data/mtgEloEvents.json +1 -0
- package/test/data/mtgEloMatches.json +1 -0
- package/test/data/topdeck.html +2 -2
- package/test/data/unityLeague.html +56 -21
- package/test/data/untapped.json +1 -1
- package/test/eventDedup.test.js +84 -0
- package/test/mtgElo.test.js +73 -4
package/README.md
CHANGED
|
@@ -37,6 +37,12 @@ General meta-data fields like `name`, `photo`, `age`, `country`, and `hometown`
|
|
|
37
37
|
|
|
38
38
|
> If you notice any inconsistencies or unexpected fields values, you can run the tool with the `-v` or `--verbose` flag to see the full list of extracted fields and if they were promoted to the `general` section or deviated from a previous source.
|
|
39
39
|
|
|
40
|
+
### Global win rate and event-level deduplication
|
|
41
|
+
|
|
42
|
+
The global `win rate` is computed from a deduplicated union of per-event records to avoid double-counting tournaments reported by multiple platforms. Sources that expose per-event data (see [Supported Sources](#supported-sources)) contribute events instead of their aggregate `record`; other sources contribute their aggregate `record` as-is. Two events are merged when they share the **same date**, **same W-L-D**, and have at least a **partial name match**. Per-source `win rate` values are unaffected.
|
|
43
|
+
|
|
44
|
+
> Use `-v` / `--verbose` to see how many duplicates were removed.
|
|
45
|
+
|
|
40
46
|
### Example output
|
|
41
47
|
|
|
42
48
|
```json
|
|
@@ -133,11 +139,10 @@ The following sites are currently supported based on HTML scraping and/or API ca
|
|
|
133
139
|
| Site | Method |
|
|
134
140
|
|-----------------|---------------------------------------------------------------------------------|
|
|
135
141
|
| Unity League | ✅Scraping |
|
|
136
|
-
| MTG Elo Project | ✅Scraping
|
|
142
|
+
| MTG Elo Project | ✅Scraping / ✅API |
|
|
137
143
|
| Topdeck | ✅Scraping / ✅API |
|
|
138
144
|
| Melee | ✅Scraping / 🚧API ([#1](https://github.com/bkimminich/mtg-playerinfo/issues/1)) |
|
|
139
145
|
| Untapped.gg | ✅API |
|
|
140
|
-
|
|
141
146
|
_Note: Some sites may have anti-bot protections that can lead to "Maximum number of redirects exceeded" or "403 Forbidden" errors depending on the execution environment._
|
|
142
147
|
|
|
143
148
|
## Contribution Guidelines
|
package/package.json
CHANGED
package/src/fetchers/mtgElo.js
CHANGED
|
@@ -8,13 +8,70 @@ class MtgEloFetcher {
|
|
|
8
8
|
maxRedirects: 10
|
|
9
9
|
})
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
const data = this.parseHtml(html, url, id)
|
|
12
|
+
if (data) {
|
|
13
|
+
await this.fetchEvents(id, data)
|
|
14
|
+
}
|
|
15
|
+
return data
|
|
12
16
|
} catch (error) {
|
|
13
17
|
console.error(`Error fetching MTG Elo Project profile ${id}:`, error.message)
|
|
14
18
|
return null
|
|
15
19
|
}
|
|
16
20
|
}
|
|
17
21
|
|
|
22
|
+
async fetchEvents (id, playerInfo) {
|
|
23
|
+
// MTG Elo Project exposes per-tournament data via two JSON endpoints:
|
|
24
|
+
// /api/players/:id/events -> { data: [{ code, name, date, format, ... }] }
|
|
25
|
+
// /api/players/:id/matches -> { <eventCode>: [{ result: "Won 2-0"|"Lost 0-2"|"Draw 1-1", ... }] }
|
|
26
|
+
// Calling them directly is more stable than waiting for the JS-rendered HTML
|
|
27
|
+
// (where W-L-D per tournament is computed client-side from these same payloads).
|
|
28
|
+
try {
|
|
29
|
+
const [eventsRes, matchesRes] = await Promise.all([
|
|
30
|
+
httpClient.request(`https://mtgeloproject.net/api/players/${id}/events`),
|
|
31
|
+
httpClient.request(`https://mtgeloproject.net/api/players/${id}/matches`)
|
|
32
|
+
])
|
|
33
|
+
const eventsJson = typeof eventsRes.data === 'string' ? JSON.parse(eventsRes.data) : eventsRes.data
|
|
34
|
+
const matchesJson = typeof matchesRes.data === 'string' ? JSON.parse(matchesRes.data) : matchesRes.data
|
|
35
|
+
const events = this.buildEvents(eventsJson, matchesJson)
|
|
36
|
+
if (events.length) {
|
|
37
|
+
playerInfo.events = events
|
|
38
|
+
}
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error(`Error fetching MTG Elo Project events for ${id}:`, error.message)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
buildEvents (eventsJson, matchesJson) {
|
|
45
|
+
const list = Array.isArray(eventsJson) ? eventsJson : (eventsJson && Array.isArray(eventsJson.data) ? eventsJson.data : [])
|
|
46
|
+
const matchesByCode = matchesJson && typeof matchesJson === 'object' ? matchesJson : {}
|
|
47
|
+
const events = []
|
|
48
|
+
for (const ev of list) {
|
|
49
|
+
if (!ev || !ev.code || !ev.date) continue
|
|
50
|
+
const matches = matchesByCode[ev.code]
|
|
51
|
+
if (!Array.isArray(matches)) continue
|
|
52
|
+
let wins = 0
|
|
53
|
+
let losses = 0
|
|
54
|
+
let draws = 0
|
|
55
|
+
for (const m of matches) {
|
|
56
|
+
const r = String((m && m.result) || '').trim()
|
|
57
|
+
if (/^Won\b/i.test(r)) wins++
|
|
58
|
+
else if (/^Lost\b/i.test(r)) losses++
|
|
59
|
+
else if (/^Dr(ew|aw)\b/i.test(r)) draws++
|
|
60
|
+
}
|
|
61
|
+
if (wins + losses + draws === 0) continue
|
|
62
|
+
events.push({
|
|
63
|
+
source: 'MTG Elo Project',
|
|
64
|
+
date: String(ev.date).slice(0, 10),
|
|
65
|
+
name: ev.name || '',
|
|
66
|
+
format: ev.format || null,
|
|
67
|
+
wins,
|
|
68
|
+
losses,
|
|
69
|
+
draws
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
return events
|
|
73
|
+
}
|
|
74
|
+
|
|
18
75
|
parseHtml (html, url, id) {
|
|
19
76
|
const cheerio = require('cheerio')
|
|
20
77
|
const $ = cheerio.load(html)
|
package/src/fetchers/topdeck.js
CHANGED
|
@@ -11,7 +11,7 @@ class TopdeckFetcher {
|
|
|
11
11
|
const htmlStr = typeof data === 'string' ? data : ''
|
|
12
12
|
const playerInfo = this.parseHtml(data, url, cleanHandle)
|
|
13
13
|
|
|
14
|
-
const internalIdMatch = htmlStr.match(/https:\/\/topdeck\.gg\/profile\/([a-zA-Z0-9]+)\/stats/) ||
|
|
14
|
+
const internalIdMatch = htmlStr.match(/https:\/\/topdeck\.gg\/profile\/([a-zA-Z0-9]+)\/stats/) ||
|
|
15
15
|
htmlStr.match(/const playerId = "([a-zA-Z0-9]+)";/) ||
|
|
16
16
|
htmlStr.match(/window\.PROFILE_PLAYER_ID\s*=\s*"([a-zA-Z0-9]+)"/) ||
|
|
17
17
|
htmlStr.match(/<meta name="player-id" content="([a-zA-Z0-9]+)"/)
|
|
@@ -36,6 +36,29 @@ class TopdeckFetcher {
|
|
|
36
36
|
const stats = typeof statsJson === 'string' ? JSON.parse(statsJson) : statsJson
|
|
37
37
|
|
|
38
38
|
if (stats) {
|
|
39
|
+
if (stats.gameFormats && typeof stats.gameFormats === 'object') {
|
|
40
|
+
const events = []
|
|
41
|
+
Object.values(stats.gameFormats).forEach(arr => {
|
|
42
|
+
if (!Array.isArray(arr)) return
|
|
43
|
+
arr.forEach(e => {
|
|
44
|
+
if (!e || !e.date || !e.record) return
|
|
45
|
+
const recordMatch = String(e.record).match(/^(\d+)-(\d+)-(\d+)$/)
|
|
46
|
+
if (!recordMatch) return
|
|
47
|
+
events.push({
|
|
48
|
+
source: 'Topdeck',
|
|
49
|
+
date: String(e.date).slice(0, 10),
|
|
50
|
+
name: e.name || '',
|
|
51
|
+
format: e.rawFormat || null,
|
|
52
|
+
wins: parseInt(recordMatch[1], 10),
|
|
53
|
+
losses: parseInt(recordMatch[2], 10),
|
|
54
|
+
draws: parseInt(recordMatch[3], 10)
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
if (events.length) {
|
|
59
|
+
playerInfo.events = events
|
|
60
|
+
}
|
|
61
|
+
}
|
|
39
62
|
if (stats.yearlyStats) {
|
|
40
63
|
let totalTournaments = 0
|
|
41
64
|
let wins = 0
|
|
@@ -77,6 +77,39 @@ class UnityLeagueFetcher {
|
|
|
77
77
|
})
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
// Extract per-event tournament list (normalized for cross-source dedup)
|
|
81
|
+
const events = []
|
|
82
|
+
$('table.table').each((_, table) => {
|
|
83
|
+
const headers = $(table).find('th').map((i, el) => $(el).text().trim()).get()
|
|
84
|
+
if (headers.length === 5 && headers[0] === 'Rank' && headers[1] === 'Event/Date' && headers[3] === 'Record' && headers[4] === 'Type/Format') {
|
|
85
|
+
$(table).find('tbody tr').each((__, tr) => {
|
|
86
|
+
const cells = $(tr).find('td')
|
|
87
|
+
if (cells.length < 5) return
|
|
88
|
+
const eventDateCell = $(cells[1])
|
|
89
|
+
const eventName = eventDateCell.find('a').first().text().trim() || eventDateCell.text().trim()
|
|
90
|
+
const dateMatch = eventDateCell.text().match(/(\d{2})\.(\d{2})\.(\d{4})/)
|
|
91
|
+
const recordRaw = $(cells[3]).text().trim().replace(/\s+/g, '')
|
|
92
|
+
const recordMatch = recordRaw.match(/^(\d+)-(\d+)-(\d+)$/)
|
|
93
|
+
const formatDivs = $(cells[4]).find('div > div')
|
|
94
|
+
const format = formatDivs.length >= 2 ? $(formatDivs[1]).text().trim() : $(cells[4]).text().trim()
|
|
95
|
+
if (dateMatch && recordMatch) {
|
|
96
|
+
events.push({
|
|
97
|
+
source: 'Unity League',
|
|
98
|
+
date: `${dateMatch[3]}-${dateMatch[2]}-${dateMatch[1]}`,
|
|
99
|
+
name: eventName,
|
|
100
|
+
format,
|
|
101
|
+
wins: parseInt(recordMatch[1], 10),
|
|
102
|
+
losses: parseInt(recordMatch[2], 10),
|
|
103
|
+
draws: parseInt(recordMatch[3], 10)
|
|
104
|
+
})
|
|
105
|
+
}
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
if (events.length) {
|
|
110
|
+
data.events = events
|
|
111
|
+
}
|
|
112
|
+
|
|
80
113
|
// Extract tournament record and win rate
|
|
81
114
|
const overallRow = $('table.table tr').filter((i, el) => {
|
|
82
115
|
return $(el).find('td').first().text().trim() === 'Overall'
|
package/src/index.js
CHANGED
|
@@ -3,6 +3,7 @@ const MtgEloFetcher = require('./fetchers/mtgElo')
|
|
|
3
3
|
const MeleeFetcher = require('./fetchers/melee')
|
|
4
4
|
const TopdeckFetcher = require('./fetchers/topdeck')
|
|
5
5
|
const UntappedFetcher = require('./fetchers/untapped')
|
|
6
|
+
const { dedupeEvents } = require('./utils/eventDedup')
|
|
6
7
|
|
|
7
8
|
class PlayerInfoManager {
|
|
8
9
|
constructor () {
|
|
@@ -87,7 +88,9 @@ class PlayerInfoManager {
|
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
|
|
90
|
-
|
|
91
|
+
// Aggregate record only used for sources that don't expose per-event data;
|
|
92
|
+
// sources with `events` contribute via the deduped union below.
|
|
93
|
+
if (!Array.isArray(res.events) && res.record && typeof res.record === 'string' && res.record.includes('-')) {
|
|
91
94
|
const parts = res.record.split('-').map(Number)
|
|
92
95
|
if (parts.length >= 2 && parts.every(p => !isNaN(p))) {
|
|
93
96
|
totalWins += parts[0]
|
|
@@ -99,6 +102,7 @@ class PlayerInfoManager {
|
|
|
99
102
|
const sourceData = { ...res }
|
|
100
103
|
delete sourceData.source
|
|
101
104
|
delete sourceData.url
|
|
105
|
+
delete sourceData.events
|
|
102
106
|
|
|
103
107
|
player.sources[res.source] = {
|
|
104
108
|
url: res.url,
|
|
@@ -106,6 +110,36 @@ class PlayerInfoManager {
|
|
|
106
110
|
}
|
|
107
111
|
})
|
|
108
112
|
|
|
113
|
+
// Cross-source dedup of per-event data (currently UnityLeague + Topdeck).
|
|
114
|
+
// Same date + same W-L-D + at least partial name match collapses to one event.
|
|
115
|
+
const allEvents = results.flatMap(r => Array.isArray(r.events) ? r.events : [])
|
|
116
|
+
if (allEvents.length > 0) {
|
|
117
|
+
const uniqueEvents = dedupeEvents(allEvents)
|
|
118
|
+
uniqueEvents.forEach(e => {
|
|
119
|
+
totalWins += e.wins
|
|
120
|
+
totalLosses += e.losses
|
|
121
|
+
totalDraws += e.draws
|
|
122
|
+
})
|
|
123
|
+
if (verbose) {
|
|
124
|
+
const removed = allEvents.length - uniqueEvents.length
|
|
125
|
+
if (removed > 0) {
|
|
126
|
+
// Group dropped events by their kept counterpart so the log shows which event
|
|
127
|
+
// (and from which source) was kept and which duplicate(s) were removed.
|
|
128
|
+
const { isSameEvent } = require('./utils/eventDedup')
|
|
129
|
+
const groups = uniqueEvents.map(k => ({ kept: k, dups: [] }))
|
|
130
|
+
for (const e of allEvents) {
|
|
131
|
+
const g = groups.find(gr => gr.kept === e) || groups.find(gr => isSameEvent(gr.kept, e))
|
|
132
|
+
if (g && g.kept !== e) g.dups.push(e)
|
|
133
|
+
}
|
|
134
|
+
const details = groups
|
|
135
|
+
.filter(g => g.dups.length > 0)
|
|
136
|
+
.map(g => `"${g.kept.name}" [${g.kept.source}] (duplicates: ${g.dups.map(d => `"${d.name}" [${d.source}]`).join(', ')})`)
|
|
137
|
+
.join('; ')
|
|
138
|
+
console.log(`🧹: Removed ${removed} duplicate event(s) across sources for global win rate (${details})`)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
109
143
|
const totalGames = totalWins + totalLosses + totalDraws
|
|
110
144
|
if (totalGames > 0) {
|
|
111
145
|
const overall = (totalWins / totalGames) * 100
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
function normName (s) {
|
|
2
|
+
return (s || '').toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim()
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
function tokenSet (s) {
|
|
6
|
+
return new Set(normName(s).split(' ').filter(t => t.length > 2))
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function nameSimilarity (a, b) {
|
|
10
|
+
const A = tokenSet(a)
|
|
11
|
+
const B = tokenSet(b)
|
|
12
|
+
if (!A.size || !B.size) return 0
|
|
13
|
+
let n = 0
|
|
14
|
+
A.forEach(t => { if (B.has(t)) n++ })
|
|
15
|
+
return n / Math.min(A.size, B.size)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function isSameEvent (a, b, threshold = 0.34) {
|
|
19
|
+
if (!a || !b) return false
|
|
20
|
+
if (a.date !== b.date) return false
|
|
21
|
+
if (a.wins !== b.wins || a.losses !== b.losses || a.draws !== b.draws) return false
|
|
22
|
+
return nameSimilarity(a.name, b.name) >= threshold
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function dedupeEvents (events, threshold = 0.34) {
|
|
26
|
+
const kept = []
|
|
27
|
+
for (const e of events || []) {
|
|
28
|
+
if (!kept.some(k => isSameEvent(k, e, threshold))) kept.push(e)
|
|
29
|
+
}
|
|
30
|
+
return kept
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = { dedupeEvents, isSameEvent, nameSimilarity, normName }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"data":[{"code":"ssutr25","cut_before":"10","date":"2025-03-15","is_pro":false,"name":"Spotlight Series Utrecht 2025","site":"https://melee.gg/Tournament/View/239247","type":"ss","format":"modern"},{"code":"ssliv25","cut_before":"10","date":"2025-11-01","is_pro":false,"name":"Spotlight Series Liverpool 2025","site":"https://melee.gg/Tournament/View/375305","type":"ss","format":"SPM standard"},{"code":"sslyo26","cut_before":"10","date":"2026-01-10","is_pro":false,"name":"Spotlight Series Lyon 2026","site":"https://melee.gg/Tournament/View/392401","type":"ss","format":"TLA standard"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"ssutr25":[{"match_id":3852678,"round":"1","table":712,"format":"modern","result":"Lost 0-2","own_elo":{"start":1500,"end":1488.04},"opp_data":{"id":"x38ds0oe","opp":"Toledo, Daniel","start":1844.57}},{"match_id":3853344,"round":"2","table":584,"format":"modern","result":"Won 2-0","own_elo":{"start":1488.04,"end":1508.72},"opp_data":{"id":"b70ry18z","opp":"Gosset, Alexis","start":1635.77}},{"match_id":3853791,"round":"3","table":242,"format":"modern","result":"Won 2-0","own_elo":{"start":1508.72,"end":1525.74},"opp_data":{"id":"j9f8abqh","opp":"Veldhuizen, Jeroen","start":1455.08}},{"match_id":3854671,"round":"4","table":334,"format":"modern","result":"Lost 0-2","own_elo":{"start":1525.74,"end":1512.3},"opp_data":{"id":"qja1vwmq","opp":"Hoshino, Masaya","start":1780.9}},{"match_id":3855605,"round":"5","table":490,"format":"modern","result":"Won 2-1","own_elo":{"start":1512.3,"end":1529.7},"opp_data":{"id":"9jbh4hda","opp":"Marin, Tudor","start":1479.93}},{"match_id":3856120,"round":"6","table":256,"format":"modern","result":"Won 2-1","own_elo":{"start":1529.7,"end":1548.69},"opp_data":{"id":"pwwvf4q6","opp":"Mander, Chris","start":1583.62}},{"match_id":3856758,"round":"7","table":211,"format":"modern","result":"Won 2-0","own_elo":{"start":1548.69,"end":1568.13},"opp_data":{"id":"fa0rg67x","opp":"Gomez Galvan, Carlos","start":1628.06}},{"match_id":3857246,"round":"8","table":98,"format":"modern","result":"Lost 1-2","own_elo":{"start":1568.13,"end":1552.31},"opp_data":{"id":"whw1wk6p","opp":"Verkooren, Renzo","start":1687.92}},{"match_id":3857842,"round":"9","table":180,"format":"modern","result":"Lost 0-2","own_elo":{"start":1552.31,"end":1534.59},"opp_data":{"id":"n7n6wpml","opp":"Silva Santos, Italo","start":1567.59}}],"ssliv25":[{"match_id":3927777,"round":"1","table":108,"format":"standard","result":"Lost 0-2","own_elo":{"start":1534.59,"end":1515.96},"opp_data":{"id":"ekt2eukl","opp":"Shirt, Ben","start":1500}},{"match_id":3928235,"round":"2","table":274,"format":"standard","result":"Lost 1-2","own_elo":{"start":1515.96,"end":1497.4},"opp_data":{"id":"256rmshr","opp":"Piras, Gabriele","start":1485.5}},{"match_id":3928535,"round":"3","table":284,"format":"standard","result":"Won 2-1","own_elo":{"start":1497.4,"end":1513.53},"opp_data":{"id":"y3ghykrx","opp":"chagas, guilherme","start":1394.6}},{"match_id":3928782,"round":"4","table":241,"format":"standard","result":"Lost 0-2","own_elo":{"start":1513.53,"end":1494.94},"opp_data":{"id":"d5g0whn0","opp":"Perez Torres, Daniel","start":1480.84}},{"match_id":3929079,"round":"5","table":252,"format":"standard","result":"Lost 0-2","own_elo":{"start":1494.94,"end":1477.64},"opp_data":{"id":"tj1dneb3","opp":"Jakubec, Stepan","start":1533.82}}],"sslyo26":[{"match_id":3965812,"round":"1","table":322,"format":"standard","result":"Lost 0-2","own_elo":{"start":1477.64,"end":1459.93},"opp_data":{"id":"88b6ruie","opp":"Pinto, Rafael","start":1493.13}},{"match_id":3966098,"round":"2","table":232,"format":"standard","result":"Won 2-1","own_elo":{"start":1459.93,"end":1476.77},"opp_data":{"id":"ng8uqupo","opp":"Barbieri, Guglielmo","start":1396.57}},{"match_id":3966396,"round":"3","table":158,"format":"standard","result":"Lost 1-2","own_elo":{"start":1476.77,"end":1461.85},"opp_data":{"id":"xjwz8wb0","opp":"Rossire, Patrick","start":1646.91}},{"match_id":3966819,"round":"4","table":210,"format":"standard","result":"Won 2-0","own_elo":{"start":1461.85,"end":1478.35},"opp_data":{"id":"26zy3coo","opp":"Mathisen, Truls","start":1379.66}},{"match_id":3967116,"round":"5","table":139,"format":"standard","result":"Lost 1-2","own_elo":{"start":1478.35,"end":1462.16},"opp_data":{"id":"j19q6u1e","opp":"Wang, Zijun","start":1577.65}},{"match_id":3967530,"round":"6","table":201,"format":"standard","result":"Won 2-0","own_elo":{"start":1462.16,"end":1480.67},"opp_data":{"id":"iqe0zi0v","opp":"Furet, Antoine","start":1490.26}},{"match_id":3967857,"round":"7","table":205,"format":"standard","result":"Draw 1-1","own_elo":{"start":1480.67,"end":1483.17},"opp_data":{"id":"q2ps6rte","opp":"Boulinguiez, Dylan","start":1618.78}},{"match_id":3968119,"round":"8","table":177,"format":"standard","result":"Lost 0-2","own_elo":{"start":1483.17,"end":1465.68},"opp_data":{"id":"e8qbslqc","opp":"Naumann, Tom","start":1511.06}}]}
|
package/test/data/topdeck.html
CHANGED
|
@@ -96,7 +96,7 @@ gtag('config', 'G-56527VG23P');
|
|
|
96
96
|
}).then((ret) => {
|
|
97
97
|
location.reload();
|
|
98
98
|
});
|
|
99
|
-
}</script><!-- Page content--><div class="offcanvas offcanvas-end w-100" id="viewDecklistOffcanvas" tabindex="-1" aria-labelledby="viewDecklistOffcanvasLabel" aria-hidden="true"><div class="offcanvas-header bg-primary"><h5 class="offcanvas-title" id="viewDecklistOffcanvasLabel">Decklist</h5><button class="btn-close btn-close-white" type="button" data-bs-dismiss="offcanvas" aria-label="Close"></button></div><div class="offcanvas-body bg-dark"><pre class="mb-3"><code class="language-json" id="decklistContent"></code></pre></div></div><script src="/js/supportedGames?t=
|
|
99
|
+
}</script><!-- Page content--><div class="offcanvas offcanvas-end w-100" id="viewDecklistOffcanvas" tabindex="-1" aria-labelledby="viewDecklistOffcanvasLabel" aria-hidden="true"><div class="offcanvas-header bg-primary"><h5 class="offcanvas-title" id="viewDecklistOffcanvasLabel">Decklist</h5><button class="btn-close btn-close-white" type="button" data-bs-dismiss="offcanvas" aria-label="Close"></button></div><div class="offcanvas-body bg-dark"><pre class="mb-3"><code class="language-json" id="decklistContent"></code></pre></div></div><script src="/js/supportedGames?t=1777778083040"></script><script>function viewTextDecklist(decklist, title, tournamentId = null, playerId = null, game = null) {
|
|
100
100
|
// Use dynamically served games list
|
|
101
101
|
const supportedGames = window.SUPPORTED_GAMES;
|
|
102
102
|
|
|
@@ -139,7 +139,7 @@ gtag('config', 'G-56527VG23P');
|
|
|
139
139
|
#viewDecklistOffcanvas {
|
|
140
140
|
width: 660px !important;
|
|
141
141
|
}
|
|
142
|
-
}</style><div class="pp-hero" style="background-image: url(https://imagedelivery.net/kN_u_RUfFF6xsGMKYWhO1g/aa6d70ad-de73-4c09-a4d7-1e64d5ed6d00/cover)"></div><div class="container"><div class="pp-profile-card"><div class="pp-profile-row"><div class="pp-avatar-col"><img class="pp-avatar" src="https://imagedelivery.net/kN_u_RUfFF6xsGMKYWhO1g/2a7b8d12-5924-4a58-5f9c-c0bf55766800/square" alt="Björn Kimminich" onerror="this.src='/img/logo/TopDeckLogoBorder.png'"></div><div class="pp-info"><h1 class="pp-name">Björn Kimminich<span class="pp-pronouns">He/Him</span></h1><div class="pp-socials"><a class="pp-social-link" href="https://twitter.com/bkimminich" target="_blank" rel="noopener" title="Twitter"><i class="fa-brands fa-twitter"></i></a><a class="pp-social-link" href="https://www.youtube.com/@Bj%C3%B6rnKimminich" target="_blank" rel="noopener" title="YouTube"><i class="fa-brands fa-youtube"></i></a></div></div></div><div class="pp-stats" id="ppStats"><div class="pp-stat"><span class="pp-stat-value" id="totalTournaments">–</span><span class="pp-stat-label">Events</span></div><div class="pp-stat-divider"></div><div class="pp-stat"><span class="pp-stat-value" id="overallRecord">–</span><span class="pp-stat-label">Record</span></div><div class="pp-stat-divider"></div><div class="pp-stat"><span class="pp-stat-value" id="overallWinRate">–</span><span class="pp-stat-label">Win Rate</span></div><div class="pp-stat-divider"></div><div class="pp-stat"><span class="pp-stat-value" id="conversionRate">–</span><span class="pp-stat-label">Conversion</span></div></div></div></div><div class="container pp-content"><div class="pp-filter-bar eh-filter-bar mt-2"><div class="eh-filter-row"><span class="eh-filter-label">Game</span><div class="eh-chips" id="ppGameChips"><button class="eh-chip active" data-filter="game" data-value="all" type="button">All</button></div></div><div class="eh-filter-row"><span class="eh-filter-label">Year</span><div class="eh-chips" id="ppYearChips"><button class="eh-chip active" data-filter="year" data-value="all" type="button">All</button></div></div></div><section class="pp-heatmap-section" id="ppHeatmapSection" style="display:none"><div class="pp-heatmap-inner"><div class="pp-panel-header"><h3 class="pp-panel-title"><i class="fa-solid fa-fire"></i><span>Activity</span></h3><div class="pp-heatmap-legend"><span class="pp-legend-label">Less</span><span class="pp-legend-cell" data-intensity="1"></span><span class="pp-legend-cell" data-intensity="2"></span><span class="pp-legend-cell" data-intensity="3"></span><span class="pp-legend-cell" data-intensity="4"></span><span class="pp-legend-label">More</span></div></div><div class="pp-heatmap" id="ppHeatmap"></div><div class="pp-streak" id="ppStreak" style="display:none"></div></div></section><div class="pp-h2h" id="ppH2H" style="display:none"></div><div class="pp-tabs-wrap"><ul class="nav pp-tabs" role="tablist"><li class="nav-item"><a class="nav-link active" href="#history" data-bs-toggle="tab"><i class="fa-solid fa-trophy me-2"></i>Tournaments</a></li></ul></div><div class="tab-content pp-tab-content"><div class="tab-pane fade show active" id="history"><div class="pp-elo-group" id="ppEloGroup" style="display:none"><span class="pp-elo-heading">Elo</span><div class="pp-elo-list" id="ppEloList"></div></div><div class="pp-badges" id="badgeContainer"></div><div class="pp-tournament-list" id="tournamentList"></div></div></div></div></main><footer class="footer bg-black py-5"><div class="container pt-md-2 pt-lg-3"><div class="row pt-sm-2"><!-- Logo, description, and social column--><div class="col-md-4 col-lg-3 pb-2 pb-md-0 mb-4 mb-md-0"><a class="d-block mb-3 mb-md-4" href="/"><img class="img-fluid" src="/img/logo/TopDeckFullWhiteNS.png" alt="TopDeck.gg" style="max-width: 200px;"></a><p class="text-muted pb-2 pb-md-3 mb-3 fs-sm">Discover, organize, and compete in trading card game events. Connect with players worldwide and elevate your game.</p><div class="d-flex gap-1"><a class="btn-social bs-outline bs-light bs-facebook bs-lg me-2" href="https://discord.gg/RjS3mDf3wt" target="_blank"><i class="fa-brands fa-discord"></i></a><a class="btn-social bs-outline bs-light bs-youtube bs-lg me-2" href="https://www.youtube.com/@TopDeckGG_" target="_blank"><i class="fa-brands fa-youtube"></i></a></div></div><!-- Nested columns for links--><div class="col-md-8 col-lg-7 offset-lg-2"><div class="row row-cols-1 row-cols-sm-3"><!-- Company column--><div class="col mb-4 mb-md-0"><div class="widget widget-light"><h4 class="widget-title mb-3">Company</h4><ul><li><a class="widget-link" href="/subscribe">Run a Tournament</a></li><li><a class="widget-link" href="https://newsletter.topdeck.gg/">Newsletter</a></li><li><a class="widget-link" href="/docs/tournaments-v2">API Documentation</a></li><li><a class="widget-link" href="/championship-series-2026">Championship Series</a></li></ul></div></div><!-- Support column--><div class="col mb-4 mb-md-0"><div class="widget widget-light"><h4 class="widget-title mb-3">Support</h4><ul><li><a class="widget-link" href="/cdn-cgi/l/email-protection#
|
|
142
|
+
}</style><div class="pp-hero" style="background-image: url(https://imagedelivery.net/kN_u_RUfFF6xsGMKYWhO1g/aa6d70ad-de73-4c09-a4d7-1e64d5ed6d00/cover)"></div><div class="container"><div class="pp-profile-card"><div class="pp-profile-row"><div class="pp-avatar-col"><img class="pp-avatar" src="https://imagedelivery.net/kN_u_RUfFF6xsGMKYWhO1g/2a7b8d12-5924-4a58-5f9c-c0bf55766800/square" alt="Björn Kimminich" onerror="this.src='/img/logo/TopDeckLogoBorder.png'"></div><div class="pp-info"><h1 class="pp-name">Björn Kimminich<span class="pp-pronouns">He/Him</span></h1><div class="pp-socials"><a class="pp-social-link" href="https://twitter.com/bkimminich" target="_blank" rel="noopener" title="Twitter"><i class="fa-brands fa-twitter"></i></a><a class="pp-social-link" href="https://www.youtube.com/@Bj%C3%B6rnKimminich" target="_blank" rel="noopener" title="YouTube"><i class="fa-brands fa-youtube"></i></a></div></div></div><div class="pp-stats" id="ppStats"><div class="pp-stat"><span class="pp-stat-value" id="totalTournaments">–</span><span class="pp-stat-label">Events</span></div><div class="pp-stat-divider"></div><div class="pp-stat"><span class="pp-stat-value" id="overallRecord">–</span><span class="pp-stat-label">Record</span></div><div class="pp-stat-divider"></div><div class="pp-stat"><span class="pp-stat-value" id="overallWinRate">–</span><span class="pp-stat-label">Win Rate</span></div><div class="pp-stat-divider"></div><div class="pp-stat"><span class="pp-stat-value" id="conversionRate">–</span><span class="pp-stat-label">Conversion</span></div></div></div></div><div class="container pp-content"><div class="pp-filter-bar eh-filter-bar mt-2"><div class="eh-filter-row"><span class="eh-filter-label">Game</span><div class="eh-chips" id="ppGameChips"><button class="eh-chip active" data-filter="game" data-value="all" type="button">All</button></div></div><div class="eh-filter-row"><span class="eh-filter-label">Year</span><div class="eh-chips" id="ppYearChips"><button class="eh-chip active" data-filter="year" data-value="all" type="button">All</button></div></div></div><section class="pp-heatmap-section" id="ppHeatmapSection" style="display:none"><div class="pp-heatmap-inner"><div class="pp-panel-header"><h3 class="pp-panel-title"><i class="fa-solid fa-fire"></i><span>Activity</span></h3><div class="pp-heatmap-legend"><span class="pp-legend-label">Less</span><span class="pp-legend-cell" data-intensity="1"></span><span class="pp-legend-cell" data-intensity="2"></span><span class="pp-legend-cell" data-intensity="3"></span><span class="pp-legend-cell" data-intensity="4"></span><span class="pp-legend-label">More</span></div></div><div class="pp-heatmap" id="ppHeatmap"></div><div class="pp-streak" id="ppStreak" style="display:none"></div></div></section><div class="pp-h2h" id="ppH2H" style="display:none"></div><div class="pp-tabs-wrap"><ul class="nav pp-tabs" role="tablist"><li class="nav-item"><a class="nav-link active" href="#history" data-bs-toggle="tab"><i class="fa-solid fa-trophy me-2"></i>Tournaments</a></li></ul></div><div class="tab-content pp-tab-content"><div class="tab-pane fade show active" id="history"><div class="pp-elo-group" id="ppEloGroup" style="display:none"><span class="pp-elo-heading">Elo</span><div class="pp-elo-list" id="ppEloList"></div></div><div class="pp-badges" id="badgeContainer"></div><div class="pp-tournament-list" id="tournamentList"></div></div></div></div></main><footer class="footer bg-black py-5"><div class="container pt-md-2 pt-lg-3"><div class="row pt-sm-2"><!-- Logo, description, and social column--><div class="col-md-4 col-lg-3 pb-2 pb-md-0 mb-4 mb-md-0"><a class="d-block mb-3 mb-md-4" href="/"><img class="img-fluid" src="/img/logo/TopDeckFullWhiteNS.png" alt="TopDeck.gg" style="max-width: 200px;"></a><p class="text-muted pb-2 pb-md-3 mb-3 fs-sm">Discover, organize, and compete in trading card game events. Connect with players worldwide and elevate your game.</p><div class="d-flex gap-1"><a class="btn-social bs-outline bs-light bs-facebook bs-lg me-2" href="https://discord.gg/RjS3mDf3wt" target="_blank"><i class="fa-brands fa-discord"></i></a><a class="btn-social bs-outline bs-light bs-youtube bs-lg me-2" href="https://www.youtube.com/@TopDeckGG_" target="_blank"><i class="fa-brands fa-youtube"></i></a></div></div><!-- Nested columns for links--><div class="col-md-8 col-lg-7 offset-lg-2"><div class="row row-cols-1 row-cols-sm-3"><!-- Company column--><div class="col mb-4 mb-md-0"><div class="widget widget-light"><h4 class="widget-title mb-3">Company</h4><ul><li><a class="widget-link" href="/subscribe">Run a Tournament</a></li><li><a class="widget-link" href="https://newsletter.topdeck.gg/">Newsletter</a></li><li><a class="widget-link" href="/docs/tournaments-v2">API Documentation</a></li><li><a class="widget-link" href="/championship-series-2026">Championship Series</a></li></ul></div></div><!-- Support column--><div class="col mb-4 mb-md-0"><div class="widget widget-light"><h4 class="widget-title mb-3">Support</h4><ul><li><a class="widget-link" href="/cdn-cgi/l/email-protection#1675797862777562566279667273757d387171">Contact Us</a></li><li><a class="widget-link" href="/cdn-cgi/l/email-protection#ff929a9b969ebf8b908f9b9a9c94d19898">Media Inquiries</a></li><li><a class="widget-link" href="/privacy-policy" target="_blank">Privacy Policy</a></li><li><a class="widget-link" href="/terms-and-conditions" target="_blank">Terms & Conditions</a></li></ul></div></div><!-- Install App column--><div class="col"><h4 class="h6 fw-bold pb-2 mb-0 mb-lg-1">Install App</h4><a class="btn btn-outline-secondary d-inline-flex align-items-center px-3 py-2 mt-3 me-3 me-md-0" href="https://apple.co/3A4Z0FK" role="button" style="min-width: 160px;"><i class="fa-brands fa-apple fs-xl me-2"></i><span class="d-flex flex-column align-items-start"><small class="fs-xs text-white-50">Download on the</small><span class="fs-sm">App Store</span></span></a><a class="btn btn-outline-secondary d-inline-flex align-items-center px-3 py-2 mt-3 me-3 me-md-0" href="https://play.google.com/store/apps/details?id=com.topdeck.app" role="button" style="min-width: 160px;"><i class="fa-brands fa-google-play fs-xl me-2"></i><span class="d-flex flex-column align-items-start"><small class="fs-xs text-white-50">Get it on</small><span class="fs-sm">Google Play</span></span></a></div></div></div></div></div></footer><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>window.PROFILE_PLAYER_ID = "m4VSTJShiXR1PCSCWaM9TBY0rcg1";
|
|
143
143
|
window.PROFILE_PLAYER_USERNAME = "@k0shiii";
|
|
144
144
|
window.PROFILE_VIEWER_UID = null;
|
|
145
145
|
</script><script src="/js/player-profile-v2.js?v=1.3" defer></script><!-- Back to top button--><a class="btn-scroll-top" href="#top" data-scroll data-fixed-element><span class="btn-scroll-top-tooltip text-muted fs-sm me-2">Top</span><i class="btn-scroll-top-icon ai-arrow-up"> </i></a><!-- Vendor scrits: js libraries and plugins--><script src="/vendor/bootstrap/dist/js/bootstrap.bundle.min.js"></script><script src="/vendor/simplebar/dist/simplebar.min.js"></script><script src="/vendor/smooth-scroll/dist/smooth-scroll.polyfills.min.js"></script><!-- Main theme script--><script src="/js/theme.min.js"></script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"0e3ccdaf832b48f5a3585d27a3a6e921","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
|
|
169
169
|
<td>513th</td>
|
|
170
170
|
|
|
171
|
-
<td>
|
|
171
|
+
<td>494</td>
|
|
172
172
|
</tr>
|
|
173
173
|
</tbody>
|
|
174
174
|
</table>
|
|
@@ -211,7 +211,7 @@
|
|
|
211
211
|
|
|
212
212
|
<td>513th</td>
|
|
213
213
|
|
|
214
|
-
<td>
|
|
214
|
+
<td>494</td>
|
|
215
215
|
</tr>
|
|
216
216
|
</tbody>
|
|
217
217
|
</table>
|
|
@@ -307,9 +307,9 @@
|
|
|
307
307
|
|
|
308
308
|
<td>78</td>
|
|
309
309
|
|
|
310
|
-
<td>
|
|
310
|
+
<td>380</td>
|
|
311
311
|
|
|
312
|
-
<td>
|
|
312
|
+
<td>494</td>
|
|
313
313
|
|
|
314
314
|
</tr>
|
|
315
315
|
|
|
@@ -321,9 +321,9 @@
|
|
|
321
321
|
|
|
322
322
|
<td>1</td>
|
|
323
323
|
|
|
324
|
-
<td>
|
|
324
|
+
<td>42</td>
|
|
325
325
|
|
|
326
|
-
<td>
|
|
326
|
+
<td>44</td>
|
|
327
327
|
|
|
328
328
|
</tr>
|
|
329
329
|
|
|
@@ -373,6 +373,17 @@
|
|
|
373
373
|
</thead>
|
|
374
374
|
<tbody>
|
|
375
375
|
|
|
376
|
+
<tr>
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
<td>Premodern</td>
|
|
380
|
+
<td>8 - 3 - 1</td>
|
|
381
|
+
<td>69.4%</td>
|
|
382
|
+
<td>72.7%</td>
|
|
383
|
+
<td>8.3%</td>
|
|
384
|
+
|
|
385
|
+
</tr>
|
|
386
|
+
|
|
376
387
|
<tr>
|
|
377
388
|
|
|
378
389
|
|
|
@@ -417,17 +428,6 @@
|
|
|
417
428
|
|
|
418
429
|
</tr>
|
|
419
430
|
|
|
420
|
-
<tr>
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
<td>Premodern</td>
|
|
424
|
-
<td>6 - 1 - 1</td>
|
|
425
|
-
<td>79.2%</td>
|
|
426
|
-
<td>85.7%</td>
|
|
427
|
-
<td>12.5%</td>
|
|
428
|
-
|
|
429
|
-
</tr>
|
|
430
|
-
|
|
431
431
|
<tr>
|
|
432
432
|
|
|
433
433
|
|
|
@@ -443,10 +443,10 @@
|
|
|
443
443
|
|
|
444
444
|
|
|
445
445
|
<td><b>Overall</b></td>
|
|
446
|
-
<td><b>
|
|
447
|
-
<td><b>52.
|
|
448
|
-
<td><b>53.
|
|
449
|
-
<td><b>5.
|
|
446
|
+
<td><b>88 - 77 - 9</b></td>
|
|
447
|
+
<td><b>52.3%</b></td>
|
|
448
|
+
<td><b>53.3%</b></td>
|
|
449
|
+
<td><b>5.2%</b></td>
|
|
450
450
|
|
|
451
451
|
</tr>
|
|
452
452
|
|
|
@@ -480,6 +480,41 @@
|
|
|
480
480
|
</thead>
|
|
481
481
|
<tbody>
|
|
482
482
|
|
|
483
|
+
<tr>
|
|
484
|
+
<td>6th</td>
|
|
485
|
+
<td>
|
|
486
|
+
<div class="d-flex flex-column-reverse flex-lg-row">
|
|
487
|
+
<div style="min-width: 150px;" >Wed, 29.04.2026</div>
|
|
488
|
+
<a href="/events/31446/">Premodern Weekly</a>
|
|
489
|
+
</div>
|
|
490
|
+
</td>
|
|
491
|
+
<td>
|
|
492
|
+
<span data-bs-toggle="tooltip"
|
|
493
|
+
data-bs-placement="left"
|
|
494
|
+
data-bs-html="true"
|
|
495
|
+
data-bs-title="
|
|
496
|
+
<ul>
|
|
497
|
+
<li>Match points: 6</li>
|
|
498
|
+
<li>Participation: 3</li>
|
|
499
|
+
</ul>
|
|
500
|
+
<span>Multiplied by 1x: 9 total</span>
|
|
501
|
+
">
|
|
502
|
+
9
|
|
503
|
+
</span>
|
|
504
|
+
</td>
|
|
505
|
+
<td class="text-nowrap">2 - 2 - 0</td>
|
|
506
|
+
<td>
|
|
507
|
+
<div class="d-flex flex-column flex-lg-row">
|
|
508
|
+
<div style="min-width: 150px;">
|
|
509
|
+
|
|
510
|
+
<img src="/static/types/text_icons/regular.svg" alt="Regular" style="height: 24px;" title="Regular" itemprop="image">
|
|
511
|
+
|
|
512
|
+
</div>
|
|
513
|
+
<div>Premodern</div>
|
|
514
|
+
</div>
|
|
515
|
+
</td>
|
|
516
|
+
</tr>
|
|
517
|
+
|
|
483
518
|
<tr>
|
|
484
519
|
<td>5th</td>
|
|
485
520
|
<td>
|
package/test/data/untapped.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"short_id":"Uav8DY3MHck6GdCYVSP4EX","match_start":1776793359000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":273,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQT-wDGLkQRSwAQB1Mo4A-jAMZKAEMamAgq6MfBH4AjiQMXQAerCKanAAYKrA8OVBN_TCwEFjAUCBejAMbcPQPxP-akGAunUGYyZKAKexjG5WQAAAA","player_opening_hands":["AAQAAQWKggHevjDzkQTABM3TCwGMBQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQTzpRm_4BO0zgvY2QgCgBWfyC0AAAEFhwUA":null},"opponent_revealed_deckstrings":["AAQAAQTzpRm_4BO0zgvY2QgCgBWfyC0AAAEFhwUA"]},{"game_number":2,"game_duration_seconds":525,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQT-wDHdX66xA5IFA-jAMY2tEMv5AQOKggHKyDem9ggJujHwR8JJxdAB6sIpqcABgqsDw5UE39MLAQWMBQIFioIBlc4wQPyBBOWUDgLp1Bn_6xcCnsYxuVkAAAA","player_opening_hands":["AAQAAQO6Mc-lNcvzAgLGwTG0_w8AAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQiJEODEGbaIFIfuCr4JAtDlBxUFgBWapUA10HMfAAHzpRkBC4cFAA":null},"opponent_revealed_deckstrings":["AAQAAQiJEODEGbaIFIfuCr4JAtDlBxUFgBWapUA10HMfAAHzpRkBC4cFAA"]},{"game_number":3,"game_duration_seconds":421,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQX-wDHdX66xA1LABAL17UHL-QEC1Mo4pvYICrox8EfgCOJAxdAB6sIpqcABgqsDw5UE39MLAQWMBQIDn9AxQOGWEgHp1BkCnsYxuVkB6MAxAAA","player_opening_hands":["AAQAAQW6MffhAqO3NZTgCJIWAYqCAQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQiJEO7ELO3_CwLQ5QcV1HMfAAABhwUAAA":null},"opponent_revealed_deckstrings":["AAQAAQiJEO7ELO3_CwLQ5QcV1HMfAAABhwUAAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQT-wDGLkQRSwAQB1Mo4A-jAMZKAEMamAgq6MfBH4AjiQMXQAerCKanAAYKrA8OVBN_TCwEFjAUCBejAMbcPQPxP-akGAunUGYyZKAKexjG5WQAAAA","friendly_deck_name":"flow","friendly_deck_id":"c94c0684-8668-474c-a1da-d8c87a1cfc7a","friendly_deck_colors":10,"friendly_deck_tile_id":97320,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Justinfromthewest","team_id":2}]},{"short_id":"5Nv9a7MKK9nQgcFse8rQCv","match_start":1776794767000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":316,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","player_opening_hands":["AAQAAQG16wEDwIYtm8wInZoMAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[8],"opponent_revealed_archetype":{"AAQAAQS_wzHJXpSyA__jDQPiCdgCoOFBAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQS_wzHJXpSyA__jDQPiCdgCoOFBAAAAAA"]},{"game_number":2,"game_duration_seconds":304,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQPykBrLzBPezhMFo7wC5JsrnPsH7vUCNgTngC3LywSphgSrAwa16wGLmyvJygTvmxC_Apk6AQuNBQID_3qw1yvYhQEBurwBAvuULsmiEgGkLgAA","player_opening_hands":["AAQAAQW16wHuUI-QL9SJBPKWDAGNBQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[8],"opponent_revealed_archetype":{"AAQAAQW_wzE2jl3XzA_BygEAAAABCOIJAA":null},"opponent_revealed_deckstrings":["AAQAAQW_wzE2jl3XzA_BygEAAAABCOIJAA"]},{"game_number":3,"game_duration_seconds":360,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQPykBrLzBPezhMFo7wC5JsrnPsH7vUCNgTngC3LywSphgSrAwa16wGLmyvJygTvmxC_Apk6AQuNBQID_3qw1yvYhQEBurwBAvuULsmiEgGkLgAA","player_opening_hands":["AAQAAQeNBajmAYubK8dRwPEKsaMJvwIAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[8],"opponent_revealed_archetype":{"AAQAAQeV1Cyq7wQ26gykUJmzA76ZDALswgH5kDQAAAEG4gkA":null},"opponent_revealed_deckstrings":["AAQAAQeV1Cyq7wQ26gykUJmzA76ZDALswgH5kDQAAAEG4gkA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"billypiorrea92","team_id":2}]},{"short_id":"CLcEpGLhLhGwdqTBYvxw79","match_start":1776873454000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":159,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","player_opening_hands":["AAQAAQOjvAKPkC-phgQCjQWzgS0AAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[25],"opponent_revealed_archetype":{"AAQAAQuHBYR0mMMBxVGxzyrU8AOfA4SGBJ3-AqbUCOVEAb3wQQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuHBYR0mMMBxVGxzyrU8AOfA4SGBJ3-AqbUCOVEAb3wQQAAAAA"]},{"game_number":2,"game_duration_seconds":590,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQP_erDXK46LAQS6vAHpf4CXM-71AgbngC2gV_Q8t7cDqYYE6eQKBbXrAYubK8nKBK6eEJk6AQuNBQIC8pAaqZsnAcfJOAGG1jUCpC7UvkEAAA","player_opening_hands":["AAQAAQG16wEDjQWWtwKh-z0AAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[25],"opponent_revealed_archetype":{"AAQAARHiCalvr3LpUJnCKuBe0TWAuwPyAi3YgwSsAp_xAsQOIaSXCcP4AQWHBQHczzhJkJsJAAAAAA":null},"opponent_revealed_deckstrings":["AAQAARHiCalvr3LpUJnCKuBe0TWAuwPyAi3YgwSsAp_xAsQOIaSXCcP4AQWHBQHczzhJkJsJAAAAAA"]},{"game_number":3,"game_duration_seconds":373,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQP_erDXK46LAQS6vAHpf4CXM-71AgbngC2gV_Q8t7cDqYYE6eQKBbXrAYubK8nKBK6eEJk6AQuNBQIC8pAaqZsnAcfJOAGG1jUCpC7UvkEAAA","player_opening_hands":["AAQAAQeNBfJ1u0GGyivHUdT6B0gAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[25],"opponent_revealed_archetype":{"AAQAAQyHBQGDdK9yBOVQypEvnwPYgwSAgANJzpELBOIJ_cYx0PcG5Q4B06lBAAAA":null},"opponent_revealed_deckstrings":["AAQAAQyHBQGDdK9yBOVQypEvnwPYgwSAgANJzpELBOIJ_cYx0PcG5Q4B06lBAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":4,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"yomi","team_id":2}]},{"short_id":"Jf7gAZAKsD4hedWf38ukZj","match_start":1776874761000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":226,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","player_opening_hands":["AAQAAQeNBZcpw9IslJQBt7cD3_wGv-AJAAAAAAA","AAQAAQLEt0DztwEBtesBAY0FAAAA"],"player_mulligan_put_on_bottom":[11809],"opponent_revealed_colors":[12],"opponent_revealed_archetype":{"AAQAAQTvlC65vge39gKb9wgCjQXN1C0AAaVkAAA":null},"opponent_revealed_deckstrings":["AAQAAQTvlC65vge39gKb9wgCjQXN1C0AAaVkAAA"]},{"game_number":2,"game_duration_seconds":183,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQPykBrLzBPezhMFo7wC5JsrnPsH7vUCNgTngC3LywSphgSrAwa16wGLmyvJygTvmxC_Apk6AQuNBQID_3qw1yvYhQEBurwBAvuULsmiEgGkLgAA","player_opening_hands":["AAQAAQOjvAKdyiq45hQCsswxnt0QAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[4],"opponent_revealed_archetype":{"AAQAAQOAgS2o0gjS7QsB75QuAaVkAAAA":null},"opponent_revealed_deckstrings":["AAQAAQOAgS2o0gjS7QsB75QuAaVkAAAA"]},{"game_number":3,"game_duration_seconds":391,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQPykBrLzBPezhMFo7wC5JsrnPsH7vUCNgTngC3LywSphgSrAwa16wGLmyvJygTvmxC_Apk6AQuNBQID_3qw1yvYhQEBurwBAvuULsmiEgGkLgAA","player_opening_hands":["AAQAAQXAhi39Vub1B_jYC7V9AY0FAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[4],"opponent_revealed_archetype":{"AAQAAQbiCajMLPP6BKuCBLf2Apv3CASAgS2AV-88tL4HAueALa1XAAAA":null},"opponent_revealed_deckstrings":["AAQAAQbiCajMLPP6BKuCBLf2Apv3CASAgS2AV-88tL4HAueALa1XAAAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":4,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"rakdos34","team_id":2}]},{"short_id":"3KsyAsCPekQa8nuvpUKoZp","match_start":1776875723000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":175,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2-N6CXEwKjvAKTq0EGpC7D0iygV6v0A6mGBLb2Aga16wGLmyvJygTvmxC_Apk6AQuNBQIEpC7bTPOVGb3BEgS6vAHpljSk9gL97QcBhtY1AAAA","player_opening_hands":["AAQAAQORyTi_4AnmvQECjQWzgS0AAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQab1iypwAHctwPpiATL8wKm9ggBqnkAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQab1iypwAHctwPpiATL8wKm9ggBqnkAAAAA"]},{"game_number":2,"game_duration_seconds":131,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQTykBqVxxO2Bd7OEwajvAKPkC-phgRI7vUCNgPngC2f1QjK0wwGpC6RvQGLmyvJygTvmxC_AgELjQUCB_96sNcrzMIBt7cDqYYEtvYCv-AJBLq8Ac2bLL3fEvKvAwAAAAA","player_opening_hands":["AAQAAQWNBZa3Ap3KKsnKBJLbDwH47EEAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQSqeZ6xIMGsFMLmCwABv8MxAAAA":null},"opponent_revealed_deckstrings":["AAQAAQSqeZ6xIMGsFMLmCwABv8MxAAAA"]},{"game_number":3,"game_duration_seconds":239,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQTykBqVxxO2Bd7OEwajvAKPkC-phgRI7vUCNgPngC2f1QjK0wwGpC6RvQGLmyvJygTvmxC_AgELjQUCB_96sNcrzMIBt7cDqYYEtvYCv-AJBLq8Ac2bLL3fEvKvAwAAAAA","player_opening_hands":["AAQAAQOyzDHGoBC_AgAAAY0FAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQbIqiG5mwSakAepwAGQtAq0DQO_wzHKkwTx6QsAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQbIqiG5mwSakAepwAGQtAq0DQO_wzHKkwTx6QsAAAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQO93S2-N6CXEwKjvAKTq0EGpC7D0iygV6v0A6mGBLb2Aga16wGLmyvJygTvmxC_Apk6AQuNBQIEpC7bTPOVGb3BEgS6vAHpljSk9gL97QcBhtY1AAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":4,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Wsquires","team_id":1}]},{"short_id":"fHojHrk3WcrjxbyGaedpeC","match_start":1776876532000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":197,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2-N6CXEwKjvAKTq0EGpC7D0iygV6v0A6mGBLb2Aga16wGLmyvJygTvmxC_Apk6AQuNBQIEpC7bTPOVGb3BEgS6vAHpljSk9gL97QcBhtY1AAAA","player_opening_hands":["AAQAAQWNBajmAf3gL8agENg8AYfYLQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQuMBa4s8EfgCKeRAurCKavrBMOQBMv4ApTgCNi8AgLowDGhlgQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuMBa4s8EfgCKeRAurCKavrBMOQBMv4ApTgCNi8AgLowDGhlgQAAAAA"]},{"game_number":2,"game_duration_seconds":405,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQbykBqVxxO2Bb43lrQKiuMIBKO8Ao-QL_GGBKT2AgWkLsPSLPTRCKsDytMMBbXrAYubK8nKBO-bEL8CAQuNBQIFpC7bTLDXK4P6BJ7dEAW6vAHNmyyK8Qqz7gfyrwMAAAAA","player_opening_hands":["AAQAAQfngC2UlAG3twOphgSrA5XWC7V9AAAAAAA","AAQAAQWkLv-NAriWM7b2AuejCQG16wEAAAAA"],"player_mulligan_put_on_bottom":[95585],"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQeMBf58kdQrzeoEtgX9kATf6QsHujHwR5zIMMOVBMvzApTgCNi8AgAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQeMBf58kdQrzeoEtgX9kATf6QsHujHwR5zIMMOVBMvzApTgCNi8AgAAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQO93S2-N6CXEwKjvAKTq0EGpC7D0iygV6v0A6mGBLb2Aga16wGLmyvJygTvmxC_Apk6AQuNBQIEpC7bTPOVGb3BEgS6vAHpljSk9gL97QcBhtY1AAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":4,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Shadowboy","team_id":1}]},{"short_id":"dN9MTCXWrYy78h3A5epZnb","match_start":1776877262000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":16,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","player_opening_hands":["AAQAAQONBYTEOOejCQKyzDGe3RAAAAAA","AAQAAQXngC2UlAG3twPXBMfYEAGRyTgAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[0],"opponent_revealed_archetype":{"AAQAAA":null},"opponent_revealed_deckstrings":["AAQAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Shredder34","team_id":1}]},{"short_id":"kgkgav4sCLWtYfJdxShc4X","match_start":1776877325000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":411,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","player_opening_hands":["AAQAAQeNBajmAf3gL6mGBLb2Ar_gCea9AQAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQiNBab_LNWdBY61A7HyAtjkCLlA2_0BAoAVoP4CAYcFAAAA":null},"opponent_revealed_deckstrings":["AAQAAQiNBab_LNWdBY61A7HyAtjkCLlA2_0BAoAVoP4CAYcFAAAA"]},{"game_number":2,"game_duration_seconds":320,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2-N8miEgWjvALkmyuc-wf42AubuwIE54Aty8sEqYYEtvYCBrXrAYubK8nKBO-bEL8CmToBC40FAgT_evOVGb3BEpXlEwK6vAGNjTcBhtY1AaQuAAA","player_opening_hands":["AAQAAQHAhi0BidExAAGNBQAA","AAQAAQSJ0THSgQS29gKmpgkAAY0FAAAA"],"player_mulligan_put_on_bottom":[11809],"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQuHBQav5gGrlSuXzASKVb-nBrP3CN4t_PkB9AIAAaQuAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuHBQav5gGrlSuXzASKVb-nBrP3CN4t_PkB9AIAAaQuAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"tmoneysnipe","team_id":2}]},{"short_id":"FKFC6cMkWiQyUq93aaKj5S","match_start":1776878146000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":389,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","player_opening_hands":["AAQAAQONBZa3Au6MNgL47EHYPAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[11],"opponent_revealed_archetype":{"AAQAAQeqeYq1ILueF-DpB8W2AbTKAfguA-xj2NM_y7UBArrrAffCHwAAAA":null},"opponent_revealed_deckstrings":["AAQAAQeqeYq1ILueF-DpB8W2AbTKAfguA-xj2NM_y7UBArrrAffCHwAAAA"]},{"game_number":2,"game_duration_seconds":409,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQK93S2-NwajvALkmyuc-weh5ArXdJu7AgXngC3LywSphgS29gLnowkFtesBi5srycoErp4QmToBC40FAgT_evOVGb3BEsmaFQK6vAGNjTcBhtY1AaQuAAA","player_opening_hands":["AAQAAQONBYTEOKamCQL47EHYPAAAAAA","AAQAAQW93S3M8wPSgQTA2QubuwIBt-9BAAAAAA"],"player_mulligan_put_on_bottom":[97369],"opponent_revealed_colors":[11],"opponent_revealed_archetype":{"AAQAAQuIBaJ0h7UgA4vSC8fQBKn3BsAE5-AIuT-x-QEE7GP98Bjb4iaEgAMAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuIBaJ0h7UgA4vSC8fQBKn3BsAE5-AIuT-x-QEE7GP98Bjb4iaEgAMAAAAA"]},{"game_number":3,"game_duration_seconds":533,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQK93S2-NwajvALkmyuc-weh5ArXdJu7AgXngC3LywSphgS29gLnowkFtesBi5srycoErp4QmToBC40FAgT_evOVGb3BEsmaFQK6vAGNjTcBhtY1AaQuAAA","player_opening_hands":["AAQAAQPb0jXcnAyZOgKNBajmAQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[11],"opponent_revealed_archetype":{"AAQAAQrsY86HAfrCH4vSC8tbpewKwASgoAm5ygH4LgOqeYGFLKuvFAGxriEAAAA":null},"opponent_revealed_deckstrings":["AAQAAQrsY86HAfrCH4vSC8tbpewKwASgoAm5ygH4LgOqeYGFLKuvFAGxriEAAAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":4,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"KGX","team_id":1}]},{"short_id":"EA4XtBUKd7Q3AzTeC6XRVU","match_start":1776960884000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":253,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","player_opening_hands":["AAQAAQWH2C30PI68A5qCBJScDAGNBQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[2],"opponent_revealed_archetype":{"AAQAAQmNBajmAYqVK9iTAfS2AxfmVoC2BvLoCAGJ0TEAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQmNBajmAYqVK9iTAfS2AxfmVoC2BvLoCAGJ0TEAAAAA"]},{"game_number":2,"game_duration_seconds":448,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQOjvALY2CvMtAoEh9gttgXezhObuwIF54At9NEISO71AuejCQa16wGLmyvyxQTXBK6eEJk6AQqNBQICo9M1pPYCA5cQyLk45e0HAYbWNQGkLgAA","player_opening_hands":["AAQAAQW16wHc3Tbnowm_Apk6AY0FAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQWNBbemAvvUKuPKBOcFBYwF2_ss2QXImwXvkhEBtoAtAAAA":null},"opponent_revealed_deckstrings":["AAQAAQWNBbemAvvUKuPKBOcFBYwF2_ss2QXImwXvkhEBtoAtAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","friendly_deck_name":"Doooooom","friendly_deck_id":"e3e7cd7f-ff8d-4061-93b2-0a21913688d8","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"bobmachine","team_id":2}]},{"short_id":"MLVj8oB5MhwmZ84kxwyQ2b","match_start":1776961668000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":636,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","player_opening_hands":["AAQAAQS16wHS7CuC-QPH2BAAAY0FAAAA","AAQAAQXAhi3yxQTf_AampgmZOgGJ0TEAAAAA"],"player_mulligan_put_on_bottom":[92170],"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQO93S3P0xPHtgIE_f8scdIFuOYUAAiMBQGo5gG53y-bBsaFBKvqC-orBQXY1SwFjysF3bYTBZq1AQXu-wEA":null},"opponent_revealed_deckstrings":["AAQAAQO93S3P0xPHtgIE_f8scdIFuOYUAAiMBQGo5gG53y-bBsaFBKvqC-orBQXY1SwFjysF3bYTBZq1AQXu-wEA"]},{"game_number":2,"game_duration_seconds":235,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQOjvALjmTOwkQ4Fh9gttgXU6wpOvOIIA-eALfTRCJ2aDAe16wGLmyvyxQTXBJqCBJScDJk6AQqNBQID-5QulrQKpZ4LBJcQ78U1wfMC_e0HAAGkLgAA","player_opening_hands":["AAQAAQeNBajmAbKVK6LQBNb4BpmjCdg8AAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQi16wG06RfvgBOPK6LQBMaFBL3aC8C3AgLe7EEGAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQi16wG06RfvgBOPK6LQBMaFBL3aC8C3AgLe7EEGAAAAAA"]},{"game_number":3,"game_duration_seconds":311,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQOjvALjmTOwkQ4Fh9gttgXU6wpOvOIIA-eALfTRCJ2aDAe16wGLmyvyxQTXBJqCBJScDJk6AQqNBQID-5QulrQKpZ4LBJcQ78U1wfMC_e0HAAGkLgAA","player_opening_hands":["AAQAAQeNBdr7LNZc5vUH-NgLnEOZOgAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQqNBcvQLI8rB89cse0DtYgEvPYC5e0HtokBAbXrAQHe7EEAAAA":null},"opponent_revealed_deckstrings":["AAQAAQqNBcvQLI8rB89cse0DtYgEvPYC5e0HtokBAbXrAQHe7EEAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","friendly_deck_name":"Doooooom","friendly_deck_id":"e3e7cd7f-ff8d-4061-93b2-0a21913688d8","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":4,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Delmo","team_id":2}]},{"short_id":"W5goxvY8nVxrPSynfz7ykj","match_start":1776962962000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":267,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","player_opening_hands":["AAQAAQeNBajmAe5Qncoq8sUE3_wGv-AJAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQegkwP4wymYvgGurwOgCJiKBLKUDgGNBQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQegkwP4wymYvgGurwOgCJiKBLKUDgGNBQAAAAA"]},{"game_number":2,"game_duration_seconds":404,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsEh9gttgWH2hLyrwME54At9NEItvYC56MJB7XrAYubK_LFBNcEmoIElJwMmToBCo0FAgAElxCwuTgYvOIIAYbWNQGkLgAA","player_opening_hands":["AAQAAQe16wGI8iv17gPf_Aaz7gfztwGZOgAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQ2HBQav5gH0qSylBaqnA_8KilWbsQPzA5vhDZczawKgkwP4wykAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQ2HBQav5gH0qSylBaqnA_8KilWbsQPzA5vhDZczawKgkwP4wykAAAAA"]},{"game_number":3,"game_duration_seconds":191,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsEh9gttgWH2hLyrwME54At9NEItvYC56MJB6Qukb0Bi5sr8sUE1wSunhCZOgEKjQUCAASXELC5OBi84ggBhtY1AaPTNQAA","player_opening_hands":["AAQAAQSkLuOpLav0A4SbEgABwIYtAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[0],"opponent_revealed_archetype":{"AAQAAA":null},"opponent_revealed_deckstrings":["AAQAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","friendly_deck_name":"Doooooom","friendly_deck_id":"e3e7cd7f-ff8d-4061-93b2-0a21913688d8","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":4,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Mythic","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":95.48816680908203,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"bonn","team_id":2}]},{"short_id":"ishsoS8aptTjTdE56QtebG","match_start":1776964624000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":440,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQOJ0jXL-ALg4AgD6MAx85EEn-4LAAu6MfBH4AjiQMXQAerCKanAAYKrA8OVBN_TC9i8AgEHjAUCAq2ZAfi5NwXEqwKlqRf_6xe_Cs6iEAGexjEAAAA","player_opening_hands":["AAQAAQO6Ma75QJIWAonXNbeQDgAAAAA","AAQAAQH6wEEDjAXgvQHF0AEAAAAA","AAQAAQWMBbiRLoKrA5WRBI3YCwHswgEAAAAA"],"player_mulligan_put_on_bottom":[93905,93905],"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQuMBfterocB4-sqqC-VlAGzvQrm1AiKQOc7hsABA7zrAdrrM9P0AgAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuMBfterocB4-sqqC-VlAGzvQrm1AiKQOc7hsABA7zrAdrrM9P0AgAAAAA"]},{"game_number":2,"game_duration_seconds":438,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQG0q0EDxKsCl6czn-4LAuzCAbKDMAq6MfBH4AinkQLqwimpwAGCqwPDlQTf0wvYvAIBB4wFAgWtmQG_KZ2PNMv4AtEIA-nUGb72F86iEAAB6MAxAAA","player_opening_hands":["AAQAAQOMBaWOA-rCKQKexjG9jAQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQiHBQWw5gHc6yqm9AuUAS6fngsFh2SP8zTT9AKfDIDXCAHVmi4AAAA":null},"opponent_revealed_deckstrings":["AAQAAQiHBQWw5gHc6yqm9AuUAS6fngsFh2SP8zTT9AKfDIDXCAHVmi4AAAA"]},{"game_number":3,"game_duration_seconds":368,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQG0q0EDxKsCl6czn-4LAuzCAbKDMAq6MfBH4AinkQLqwimpwAGCqwPDlQTf0wvYvAIBB4wFAgWtmQG_KZ2PNMv4AtEIA-nUGb72F86iEAAB6MAxAAA","player_opening_hands":["AAQAAQW6MdBQp5ECla4uoukPAcSWLgAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQaMBQHa-yyCywuf4wjduQIDh2S1hwHa6zMB-OxBAAAA":null},"opponent_revealed_deckstrings":["AAQAAQaMBQHa-yyCywuf4wjduQIDh2S1hwHa6zMB-OxBAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQOJ0jXL-ALg4AgD6MAx85EEn-4LAAu6MfBH4AjiQMXQAerCKanAAYKrA8OVBN_TC9i8AgEHjAUCAq2ZAfi5NwXEqwKlqRf_6xe_Cs6iEAGexjEAAAA","friendly_deck_name":"Izzet Prowess","friendly_deck_id":"e50c3a8b-e4cd-449d-a6fd-feb78c8f604a","friendly_deck_colors":10,"friendly_deck_tile_id":12053,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Mythic","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":95.50251770019531,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Mythic","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":96.33772277832031,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"LoveSosa95","team_id":2}]},{"short_id":"3M2UwRUABF6x2n7KYRxSw4","match_start":1776966113000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":90,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8DrRGt3EHBygECqYwLwPYhCKp5wknYkyv9vwH7rAMDxwqDiQQBDeIJAgWtEZqFLpi6A_ucEBsB6dQZAAKYli7drQMAAA","player_opening_hands":["AAQAAQWtEb-xAdXTLMjAB_HpCwG_wzEAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[2],"opponent_revealed_archetype":{"AAQAAQTsY74V39cw0oEEAAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQTsY74V39cw0oEEAAAAAAA"]},{"game_number":2,"game_duration_seconds":311,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8Bm7hDAumCLfHqFAmqecJJ2JMr_b8B-6wDAzaRCoOJBAEN4gkCA8eWLpi6A5adEAHp1BkCrRH8-goBmJYuAAA","player_opening_hands":["AAQAAQfiCeLMLP2_Af6sA8cKg4kEkuENAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[15],"opponent_revealed_archetype":{"AAQAAQqIBfK-AbG6K4xfA-v1Ct_jB9q0AyNbAqp56tI3AAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQqIBfK-AbG6K4xfA-v1Ct_jB9q0AyNbAqp56tI3AAAAAA"]},{"game_number":3,"game_duration_seconds":222,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQSxkwPngivrigT3nw8Bm7hDA6mMC8D2IfHqFAiqecJJ2JMr-OwEAzaRCoOJBAEN4gkCA8eWLpi6A5adEAHp1BkCrRHrhC4BwZYuAAA","player_opening_hands":["AAQAAQfiCYq5Ab3JCZvKIfjsBDnlqRAAAAAAAA","AAQAAQTswgG9yQnA9iGytRYAAeIJAAAA"],"player_mulligan_put_on_bottom":[93905],"opponent_revealed_colors":[11],"opponent_revealed_archetype":{"AAQAAQeuEvxm0Eq36h_YohDSgQTKgAMB3OxDAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQeuEvxm0Eq36h_YohDSgQTKgAMB3OxDAAAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8DrRGt3EHBygECqYwLwPYhCKp5wknYkyv9vwH7rAMDxwqDiQQBDeIJAgWtEZqFLpi6A_ucEBsB6dQZAAKYli7drQMAAA","friendly_deck_name":"Quinniac","friendly_deck_id":"e950459b-553e-4f44-845b-379e097c0b91","friendly_deck_colors":8,"friendly_deck_tile_id":11815,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Mythic","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":96.33772277832031,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Mythic","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":95.121337890625,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"PlayerOne","team_id":1}]},{"short_id":"e6WQfHd2tgq4arq3LTdgKK","match_start":1776966908000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":201,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8DrRGt3EHBygECqYwLwPYhCKp5wknYkyv9vwH7rAMDxwqDiQQBDeIJAgWtEZqFLpi6A_ucEBsB6dQZAAKYli7drQMAAA","player_opening_hands":["AAQAAQfiCchvwknQgDDHXYa2A5LhDQAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQbngC3WXAOVPbO9CuaRCwG370EAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQbngC3WXAOVPbO9CuaRCwG370EAAAAA"]},{"game_number":2,"game_duration_seconds":123,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQWxkwOuvS6kUPefD_ssAq0R7qZDAumCLfHqFAiqecJJ2JMr_b8B_qwDNpEKg4kEAQ3iCQICrRGahS4B6dQZAamMCwKYli6krQMAAA","player_opening_hands":["AAQAAQPBli7FtwPUnxAC4gnduTEAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQaNBajmAYjyK4faErS1Ae37AQAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQaNBajmAYjyK4faErS1Ae37AQAAAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8DrRGt3EHBygECqYwLwPYhCKp5wknYkyv9vwH7rAMDxwqDiQQBDeIJAgWtEZqFLpi6A_ucEBsB6dQZAAKYli7drQMAAA","friendly_deck_name":"Quinniac","friendly_deck_id":"e950459b-553e-4f44-845b-379e097c0b91","friendly_deck_colors":8,"friendly_deck_tile_id":11815,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Mythic","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":95.121337890625,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Mythic","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":96.21765899658203,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Naoya","team_id":2}]}]
|
|
1
|
+
[{"short_id":"Uav8DY3MHck6GdCYVSP4EX","match_start":1776793359000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":273,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQT-wDGLkQRSwAQB1Mo4A-jAMZKAEMamAgq6MfBH4AjiQMXQAerCKanAAYKrA8OVBN_TCwEFjAUCBejAMbcPQPxP-akGAunUGYyZKAKexjG5WQAAAA","player_opening_hands":["AAQAAQWKggHevjDzkQTABM3TCwGMBQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQTzpRm_4BO0zgvY2QgCgBWfyC0AAAEFhwUA":null},"opponent_revealed_deckstrings":["AAQAAQTzpRm_4BO0zgvY2QgCgBWfyC0AAAEFhwUA"]},{"game_number":2,"game_duration_seconds":525,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQT-wDHdX66xA5IFA-jAMY2tEMv5AQOKggHKyDem9ggJujHwR8JJxdAB6sIpqcABgqsDw5UE39MLAQWMBQIFioIBlc4wQPyBBOWUDgLp1Bn_6xcCnsYxuVkAAAA","player_opening_hands":["AAQAAQO6Mc-lNcvzAgLGwTG0_w8AAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQiJEODEGbaIFIfuCr4JAtDlBxUFgBWapUA10HMfAAHzpRkBC4cFAA":null},"opponent_revealed_deckstrings":["AAQAAQiJEODEGbaIFIfuCr4JAtDlBxUFgBWapUA10HMfAAHzpRkBC4cFAA"]},{"game_number":3,"game_duration_seconds":421,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQX-wDHdX66xA1LABAL17UHL-QEC1Mo4pvYICrox8EfgCOJAxdAB6sIpqcABgqsDw5UE39MLAQWMBQIDn9AxQOGWEgHp1BkCnsYxuVkB6MAxAAA","player_opening_hands":["AAQAAQW6MffhAqO3NZTgCJIWAYqCAQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQiJEO7ELO3_CwLQ5QcV1HMfAAABhwUAAA":null},"opponent_revealed_deckstrings":["AAQAAQiJEO7ELO3_CwLQ5QcV1HMfAAABhwUAAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQT-wDGLkQRSwAQB1Mo4A-jAMZKAEMamAgq6MfBH4AjiQMXQAerCKanAAYKrA8OVBN_TCwEFjAUCBejAMbcPQPxP-akGAunUGYyZKAKexjG5WQAAAA","friendly_deck_name":"flow","friendly_deck_id":"c94c0684-8668-474c-a1da-d8c87a1cfc7a","friendly_deck_colors":10,"friendly_deck_tile_id":97320,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Justinfromthewest","team_id":2}]},{"short_id":"5Nv9a7MKK9nQgcFse8rQCv","match_start":1776794767000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":316,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","player_opening_hands":["AAQAAQG16wEDwIYtm8wInZoMAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[8],"opponent_revealed_archetype":{"AAQAAQS_wzHJXpSyA__jDQPiCdgCoOFBAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQS_wzHJXpSyA__jDQPiCdgCoOFBAAAAAA"]},{"game_number":2,"game_duration_seconds":304,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQPykBrLzBPezhMFo7wC5JsrnPsH7vUCNgTngC3LywSphgSrAwa16wGLmyvJygTvmxC_Apk6AQuNBQID_3qw1yvYhQEBurwBAvuULsmiEgGkLgAA","player_opening_hands":["AAQAAQW16wHuUI-QL9SJBPKWDAGNBQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[8],"opponent_revealed_archetype":{"AAQAAQW_wzE2jl3XzA_BygEAAAABCOIJAA":null},"opponent_revealed_deckstrings":["AAQAAQW_wzE2jl3XzA_BygEAAAABCOIJAA"]},{"game_number":3,"game_duration_seconds":360,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQPykBrLzBPezhMFo7wC5JsrnPsH7vUCNgTngC3LywSphgSrAwa16wGLmyvJygTvmxC_Apk6AQuNBQID_3qw1yvYhQEBurwBAvuULsmiEgGkLgAA","player_opening_hands":["AAQAAQeNBajmAYubK8dRwPEKsaMJvwIAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[8],"opponent_revealed_archetype":{"AAQAAQeV1Cyq7wQ26gykUJmzA76ZDALswgH5kDQAAAEG4gkA":null},"opponent_revealed_deckstrings":["AAQAAQeV1Cyq7wQ26gykUJmzA76ZDALswgH5kDQAAAEG4gkA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"billypiorrea92","team_id":2}]},{"short_id":"CLcEpGLhLhGwdqTBYvxw79","match_start":1776873454000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":159,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","player_opening_hands":["AAQAAQOjvAKPkC-phgQCjQWzgS0AAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[25],"opponent_revealed_archetype":{"AAQAAQuHBYR0mMMBxVGxzyrU8AOfA4SGBJ3-AqbUCOVEAb3wQQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuHBYR0mMMBxVGxzyrU8AOfA4SGBJ3-AqbUCOVEAb3wQQAAAAA"]},{"game_number":2,"game_duration_seconds":590,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQP_erDXK46LAQS6vAHpf4CXM-71AgbngC2gV_Q8t7cDqYYE6eQKBbXrAYubK8nKBK6eEJk6AQuNBQIC8pAaqZsnAcfJOAGG1jUCpC7UvkEAAA","player_opening_hands":["AAQAAQG16wEDjQWWtwKh-z0AAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[25],"opponent_revealed_archetype":{"AAQAARHiCalvr3LpUJnCKuBe0TWAuwPyAi3YgwSsAp_xAsQOIaSXCcP4AQWHBQHczzhJkJsJAAAAAA":null},"opponent_revealed_deckstrings":["AAQAARHiCalvr3LpUJnCKuBe0TWAuwPyAi3YgwSsAp_xAsQOIaSXCcP4AQWHBQHczzhJkJsJAAAAAA"]},{"game_number":3,"game_duration_seconds":373,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQP_erDXK46LAQS6vAHpf4CXM-71AgbngC2gV_Q8t7cDqYYE6eQKBbXrAYubK8nKBK6eEJk6AQuNBQIC8pAaqZsnAcfJOAGG1jUCpC7UvkEAAA","player_opening_hands":["AAQAAQeNBfJ1u0GGyivHUdT6B0gAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[25],"opponent_revealed_archetype":{"AAQAAQyHBQGDdK9yBOVQypEvnwPYgwSAgANJzpELBOIJ_cYx0PcG5Q4B06lBAAAA":null},"opponent_revealed_deckstrings":["AAQAAQyHBQGDdK9yBOVQypEvnwPYgwSAgANJzpELBOIJ_cYx0PcG5Q4B06lBAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":4,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"yomi","team_id":2}]},{"short_id":"Jf7gAZAKsD4hedWf38ukZj","match_start":1776874761000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":226,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","player_opening_hands":["AAQAAQeNBZcpw9IslJQBt7cD3_wGv-AJAAAAAAA","AAQAAQLEt0DztwEBtesBAY0FAAAA"],"player_mulligan_put_on_bottom":[11809],"opponent_revealed_colors":[12],"opponent_revealed_archetype":{"AAQAAQTvlC65vge39gKb9wgCjQXN1C0AAaVkAAA":null},"opponent_revealed_deckstrings":["AAQAAQTvlC65vge39gKb9wgCjQXN1C0AAaVkAAA"]},{"game_number":2,"game_duration_seconds":183,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQPykBrLzBPezhMFo7wC5JsrnPsH7vUCNgTngC3LywSphgSrAwa16wGLmyvJygTvmxC_Apk6AQuNBQID_3qw1yvYhQEBurwBAvuULsmiEgGkLgAA","player_opening_hands":["AAQAAQOjvAKdyiq45hQCsswxnt0QAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[4],"opponent_revealed_archetype":{"AAQAAQOAgS2o0gjS7QsB75QuAaVkAAAA":null},"opponent_revealed_deckstrings":["AAQAAQOAgS2o0gjS7QsB75QuAaVkAAAA"]},{"game_number":3,"game_duration_seconds":391,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQPykBrLzBPezhMFo7wC5JsrnPsH7vUCNgTngC3LywSphgSrAwa16wGLmyvJygTvmxC_Apk6AQuNBQID_3qw1yvYhQEBurwBAvuULsmiEgGkLgAA","player_opening_hands":["AAQAAQXAhi39Vub1B_jYC7V9AY0FAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[4],"opponent_revealed_archetype":{"AAQAAQbiCajMLPP6BKuCBLf2Apv3CASAgS2AV-88tL4HAueALa1XAAAA":null},"opponent_revealed_deckstrings":["AAQAAQbiCajMLPP6BKuCBLf2Apv3CASAgS2AV-88tL4HAueALa1XAAAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQO93S2H2hLXdAKjvALujDYGpC7D0iygV_Q8t7cDqYYEBrXrAYubK8nKBO-bEL8CmToBC40FAgSkLttM85UZvcESBLq8AemWNKT2Av3tBwGG1jUAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":4,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"rakdos34","team_id":2}]},{"short_id":"3KsyAsCPekQa8nuvpUKoZp","match_start":1776875723000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":175,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2-N6CXEwKjvAKTq0EGpC7D0iygV6v0A6mGBLb2Aga16wGLmyvJygTvmxC_Apk6AQuNBQIEpC7bTPOVGb3BEgS6vAHpljSk9gL97QcBhtY1AAAA","player_opening_hands":["AAQAAQORyTi_4AnmvQECjQWzgS0AAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQab1iypwAHctwPpiATL8wKm9ggBqnkAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQab1iypwAHctwPpiATL8wKm9ggBqnkAAAAA"]},{"game_number":2,"game_duration_seconds":131,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQTykBqVxxO2Bd7OEwajvAKPkC-phgRI7vUCNgPngC2f1QjK0wwGpC6RvQGLmyvJygTvmxC_AgELjQUCB_96sNcrzMIBt7cDqYYEtvYCv-AJBLq8Ac2bLL3fEvKvAwAAAAA","player_opening_hands":["AAQAAQWNBZa3Ap3KKsnKBJLbDwH47EEAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQSqeZ6xIMGsFMLmCwABv8MxAAAA":null},"opponent_revealed_deckstrings":["AAQAAQSqeZ6xIMGsFMLmCwABv8MxAAAA"]},{"game_number":3,"game_duration_seconds":239,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQTykBqVxxO2Bd7OEwajvAKPkC-phgRI7vUCNgPngC2f1QjK0wwGpC6RvQGLmyvJygTvmxC_AgELjQUCB_96sNcrzMIBt7cDqYYEtvYCv-AJBLq8Ac2bLL3fEvKvAwAAAAA","player_opening_hands":["AAQAAQOyzDHGoBC_AgAAAY0FAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQbIqiG5mwSakAepwAGQtAq0DQO_wzHKkwTx6QsAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQbIqiG5mwSakAepwAGQtAq0DQO_wzHKkwTx6QsAAAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQO93S2-N6CXEwKjvAKTq0EGpC7D0iygV6v0A6mGBLb2Aga16wGLmyvJygTvmxC_Apk6AQuNBQIEpC7bTPOVGb3BEgS6vAHpljSk9gL97QcBhtY1AAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":4,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Wsquires","team_id":1}]},{"short_id":"fHojHrk3WcrjxbyGaedpeC","match_start":1776876532000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":197,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2-N6CXEwKjvAKTq0EGpC7D0iygV6v0A6mGBLb2Aga16wGLmyvJygTvmxC_Apk6AQuNBQIEpC7bTPOVGb3BEgS6vAHpljSk9gL97QcBhtY1AAAA","player_opening_hands":["AAQAAQWNBajmAf3gL8agENg8AYfYLQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQuMBa4s8EfgCKeRAurCKavrBMOQBMv4ApTgCNi8AgLowDGhlgQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuMBa4s8EfgCKeRAurCKavrBMOQBMv4ApTgCNi8AgLowDGhlgQAAAAA"]},{"game_number":2,"game_duration_seconds":405,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQbykBqVxxO2Bb43lrQKiuMIBKO8Ao-QL_GGBKT2AgWkLsPSLPTRCKsDytMMBbXrAYubK8nKBO-bEL8CAQuNBQIFpC7bTLDXK4P6BJ7dEAW6vAHNmyyK8Qqz7gfyrwMAAAAA","player_opening_hands":["AAQAAQfngC2UlAG3twOphgSrA5XWC7V9AAAAAAA","AAQAAQWkLv-NAriWM7b2AuejCQG16wEAAAAA"],"player_mulligan_put_on_bottom":[95585],"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQeMBf58kdQrzeoEtgX9kATf6QsHujHwR5zIMMOVBMvzApTgCNi8AgAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQeMBf58kdQrzeoEtgX9kATf6QsHujHwR5zIMMOVBMvzApTgCNi8AgAAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQO93S2-N6CXEwKjvAKTq0EGpC7D0iygV6v0A6mGBLb2Aga16wGLmyvJygTvmxC_Apk6AQuNBQIEpC7bTPOVGb3BEgS6vAHpljSk9gL97QcBhtY1AAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":4,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Shadowboy","team_id":1}]},{"short_id":"dN9MTCXWrYy78h3A5epZnb","match_start":1776877262000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":16,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","player_opening_hands":["AAQAAQONBYTEOOejCQKyzDGe3RAAAAAA","AAQAAQXngC2UlAG3twPXBMfYEAGRyTgAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[0],"opponent_revealed_archetype":{"AAQAAA":null},"opponent_revealed_deckstrings":["AAQAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Shredder34","team_id":1}]},{"short_id":"kgkgav4sCLWtYfJdxShc4X","match_start":1776877325000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":411,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","player_opening_hands":["AAQAAQeNBajmAf3gL6mGBLb2Ar_gCea9AQAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQiNBab_LNWdBY61A7HyAtjkCLlA2_0BAoAVoP4CAYcFAAAA":null},"opponent_revealed_deckstrings":["AAQAAQiNBab_LNWdBY61A7HyAtjkCLlA2_0BAoAVoP4CAYcFAAAA"]},{"game_number":2,"game_duration_seconds":320,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQO93S2-N8miEgWjvALkmyuc-wf42AubuwIE54Aty8sEqYYEtvYCBrXrAYubK8nKBO-bEL8CmToBC40FAgT_evOVGb3BEpXlEwK6vAGNjTcBhtY1AaQuAAA","player_opening_hands":["AAQAAQHAhi0BidExAAGNBQAA","AAQAAQSJ0THSgQS29gKmpgkAAY0FAAAA"],"player_mulligan_put_on_bottom":[11809],"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQuHBQav5gGrlSuXzASKVb-nBrP3CN4t_PkB9AIAAaQuAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuHBQav5gGrlSuXzASKVb-nBrP3CN4t_PkB9AIAAaQuAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"tmoneysnipe","team_id":2}]},{"short_id":"FKFC6cMkWiQyUq93aaKj5S","match_start":1776878146000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":389,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","player_opening_hands":["AAQAAQONBZa3Au6MNgL47EHYPAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[11],"opponent_revealed_archetype":{"AAQAAQeqeYq1ILueF-DpB8W2AbTKAfguA-xj2NM_y7UBArrrAffCHwAAAA":null},"opponent_revealed_deckstrings":["AAQAAQeqeYq1ILueF-DpB8W2AbTKAfguA-xj2NM_y7UBArrrAffCHwAAAA"]},{"game_number":2,"game_duration_seconds":409,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQK93S2-NwajvALkmyuc-weh5ArXdJu7AgXngC3LywSphgS29gLnowkFtesBi5srycoErp4QmToBC40FAgT_evOVGb3BEsmaFQK6vAGNjTcBhtY1AaQuAAA","player_opening_hands":["AAQAAQONBYTEOKamCQL47EHYPAAAAAA","AAQAAQW93S3M8wPSgQTA2QubuwIBt-9BAAAAAA"],"player_mulligan_put_on_bottom":[97369],"opponent_revealed_colors":[11],"opponent_revealed_archetype":{"AAQAAQuIBaJ0h7UgA4vSC8fQBKn3BsAE5-AIuT-x-QEE7GP98Bjb4iaEgAMAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuIBaJ0h7UgA4vSC8fQBKn3BsAE5-AIuT-x-QEE7GP98Bjb4iaEgAMAAAAA"]},{"game_number":3,"game_duration_seconds":533,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQK93S2-NwajvALkmyuc-weh5ArXdJu7AgXngC3LywSphgS29gLnowkFtesBi5srycoErp4QmToBC40FAgT_evOVGb3BEsmaFQK6vAGNjTcBhtY1AaQuAAA","player_opening_hands":["AAQAAQPb0jXcnAyZOgKNBajmAQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[11],"opponent_revealed_archetype":{"AAQAAQrsY86HAfrCH4vSC8tbpewKwASgoAm5ygH4LgOqeYGFLKuvFAGxriEAAAA":null},"opponent_revealed_deckstrings":["AAQAAQrsY86HAfrCH4vSC8tbpewKwASgoAm5ygH4LgOqeYGFLKuvFAGxriEAAAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQK93S2-NwSjvALkmyuU1BObuwIFpC7D0izLywSphgS29gIGtesBi5srycoE75sQvwKZOgELjQUCBKQu20zzlRm9wRIEurwB6ZY0pPYC_e0HAYbWNQAAAA","friendly_deck_name":"Excr","friendly_deck_id":"939bf139-11d5-480a-8a0b-b41d6d03333f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":4,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"KGX","team_id":1}]},{"short_id":"EA4XtBUKd7Q3AzTeC6XRVU","match_start":1776960884000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":253,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","player_opening_hands":["AAQAAQWH2C30PI68A5qCBJScDAGNBQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[2],"opponent_revealed_archetype":{"AAQAAQmNBajmAYqVK9iTAfS2AxfmVoC2BvLoCAGJ0TEAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQmNBajmAYqVK9iTAfS2AxfmVoC2BvLoCAGJ0TEAAAAA"]},{"game_number":2,"game_duration_seconds":448,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQOjvALY2CvMtAoEh9gttgXezhObuwIF54At9NEISO71AuejCQa16wGLmyvyxQTXBK6eEJk6AQqNBQICo9M1pPYCA5cQyLk45e0HAYbWNQGkLgAA","player_opening_hands":["AAQAAQW16wHc3Tbnowm_Apk6AY0FAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQWNBbemAvvUKuPKBOcFBYwF2_ss2QXImwXvkhEBtoAtAAAA":null},"opponent_revealed_deckstrings":["AAQAAQWNBbemAvvUKuPKBOcFBYwF2_ss2QXImwXvkhEBtoAtAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","friendly_deck_name":"Doooooom","friendly_deck_id":"e3e7cd7f-ff8d-4061-93b2-0a21913688d8","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"bobmachine","team_id":2}]},{"short_id":"MLVj8oB5MhwmZ84kxwyQ2b","match_start":1776961668000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":636,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","player_opening_hands":["AAQAAQS16wHS7CuC-QPH2BAAAY0FAAAA","AAQAAQXAhi3yxQTf_AampgmZOgGJ0TEAAAAA"],"player_mulligan_put_on_bottom":[92170],"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQO93S3P0xPHtgIE_f8scdIFuOYUAAiMBQGo5gG53y-bBsaFBKvqC-orBQXY1SwFjysF3bYTBZq1AQXu-wEA":null},"opponent_revealed_deckstrings":["AAQAAQO93S3P0xPHtgIE_f8scdIFuOYUAAiMBQGo5gG53y-bBsaFBKvqC-orBQXY1SwFjysF3bYTBZq1AQXu-wEA"]},{"game_number":2,"game_duration_seconds":235,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQOjvALjmTOwkQ4Fh9gttgXU6wpOvOIIA-eALfTRCJ2aDAe16wGLmyvyxQTXBJqCBJScDJk6AQqNBQID-5QulrQKpZ4LBJcQ78U1wfMC_e0HAAGkLgAA","player_opening_hands":["AAQAAQeNBajmAbKVK6LQBNb4BpmjCdg8AAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQi16wG06RfvgBOPK6LQBMaFBL3aC8C3AgLe7EEGAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQi16wG06RfvgBOPK6LQBMaFBL3aC8C3AgLe7EEGAAAAAA"]},{"game_number":3,"game_duration_seconds":311,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQOjvALjmTOwkQ4Fh9gttgXU6wpOvOIIA-eALfTRCJ2aDAe16wGLmyvyxQTXBJqCBJScDJk6AQqNBQID-5QulrQKpZ4LBJcQ78U1wfMC_e0HAAGkLgAA","player_opening_hands":["AAQAAQeNBdr7LNZc5vUH-NgLnEOZOgAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQqNBcvQLI8rB89cse0DtYgEvPYC5e0HtokBAbXrAQHe7EEAAAA":null},"opponent_revealed_deckstrings":["AAQAAQqNBcvQLI8rB89cse0DtYgEvPYC5e0HtokBAbXrAQHe7EEAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","friendly_deck_name":"Doooooom","friendly_deck_id":"e3e7cd7f-ff8d-4061-93b2-0a21913688d8","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Diamond","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":4,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Delmo","team_id":2}]},{"short_id":"W5goxvY8nVxrPSynfz7ykj","match_start":1776962962000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":267,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","player_opening_hands":["AAQAAQeNBajmAe5Qncoq8sUE3_wGv-AJAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQegkwP4wymYvgGurwOgCJiKBLKUDgGNBQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQegkwP4wymYvgGurwOgCJiKBLKUDgGNBQAAAAA"]},{"game_number":2,"game_duration_seconds":404,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsEh9gttgWH2hLyrwME54At9NEItvYC56MJB7XrAYubK_LFBNcEmoIElJwMmToBCo0FAgAElxCwuTgYvOIIAYbWNQGkLgAA","player_opening_hands":["AAQAAQe16wGI8iv17gPf_Aaz7gfztwGZOgAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQ2HBQav5gH0qSylBaqnA_8KilWbsQPzA5vhDZczawKgkwP4wykAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQ2HBQav5gH0qSylBaqnA_8KilWbsQPzA5vhDZczawKgkwP4wykAAAAA"]},{"game_number":3,"game_duration_seconds":191,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQKjvALY2CsEh9gttgWH2hLyrwME54At9NEItvYC56MJB6Qukb0Bi5sr8sUE1wSunhCZOgEKjQUCAASXELC5OBi84ggBhtY1AaPTNQAA","player_opening_hands":["AAQAAQSkLuOpLav0A4SbEgABwIYtAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[0],"opponent_revealed_archetype":{"AAQAAA":null},"opponent_revealed_deckstrings":["AAQAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQKjvALY2CsGpC7jqS22Beb1B_jYC5u7AgTngC300Qi29gLnowkGtesBi5sr8sUE1wSunhCZOgEKjQUCAAaXEI0e_6Q1pPYCGOXtBwGG1jUAAAA","friendly_deck_name":"Doooooom","friendly_deck_id":"e3e7cd7f-ff8d-4061-93b2-0a21913688d8","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Diamond","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":4,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Mythic","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":95.48816680908203,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"bonn","team_id":2}]},{"short_id":"ishsoS8aptTjTdE56QtebG","match_start":1776964624000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":440,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQOJ0jXL-ALg4AgD6MAx85EEn-4LAAu6MfBH4AjiQMXQAerCKanAAYKrA8OVBN_TC9i8AgEHjAUCAq2ZAfi5NwXEqwKlqRf_6xe_Cs6iEAGexjEAAAA","player_opening_hands":["AAQAAQO6Ma75QJIWAonXNbeQDgAAAAA","AAQAAQH6wEEDjAXgvQHF0AEAAAAA","AAQAAQWMBbiRLoKrA5WRBI3YCwHswgEAAAAA"],"player_mulligan_put_on_bottom":[93905,93905],"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQuMBfterocB4-sqqC-VlAGzvQrm1AiKQOc7hsABA7zrAdrrM9P0AgAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQuMBfterocB4-sqqC-VlAGzvQrm1AiKQOc7hsABA7zrAdrrM9P0AgAAAAA"]},{"game_number":2,"game_duration_seconds":438,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQG0q0EDxKsCl6czn-4LAuzCAbKDMAq6MfBH4AinkQLqwimpwAGCqwPDlQTf0wvYvAIBB4wFAgWtmQG_KZ2PNMv4AtEIA-nUGb72F86iEAAB6MAxAAA","player_opening_hands":["AAQAAQOMBaWOA-rCKQKexjG9jAQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQiHBQWw5gHc6yqm9AuUAS6fngsFh2SP8zTT9AKfDIDXCAHVmi4AAAA":null},"opponent_revealed_deckstrings":["AAQAAQiHBQWw5gHc6yqm9AuUAS6fngsFh2SP8zTT9AKfDIDXCAHVmi4AAAA"]},{"game_number":3,"game_duration_seconds":368,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQG0q0EDxKsCl6czn-4LAuzCAbKDMAq6MfBH4AinkQLqwimpwAGCqwPDlQTf0wvYvAIBB4wFAgWtmQG_KZ2PNMv4AtEIA-nUGb72F86iEAAB6MAxAAA","player_opening_hands":["AAQAAQW6MdBQp5ECla4uoukPAcSWLgAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQaMBQHa-yyCywuf4wjduQIDh2S1hwHa6zMB-OxBAAAA":null},"opponent_revealed_deckstrings":["AAQAAQaMBQHa-yyCywuf4wjduQIDh2S1hwHa6zMB-OxBAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQOJ0jXL-ALg4AgD6MAx85EEn-4LAAu6MfBH4AjiQMXQAerCKanAAYKrA8OVBN_TC9i8AgEHjAUCAq2ZAfi5NwXEqwKlqRf_6xe_Cs6iEAGexjEAAAA","friendly_deck_name":"Izzet Prowess","friendly_deck_id":"e50c3a8b-e4cd-449d-a6fd-feb78c8f604a","friendly_deck_colors":10,"friendly_deck_tile_id":12053,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Mythic","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":95.50251770019531,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Mythic","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":96.33772277832031,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"LoveSosa95","team_id":2}]},{"short_id":"3M2UwRUABF6x2n7KYRxSw4","match_start":1776966113000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":90,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8DrRGt3EHBygECqYwLwPYhCKp5wknYkyv9vwH7rAMDxwqDiQQBDeIJAgWtEZqFLpi6A_ucEBsB6dQZAAKYli7drQMAAA","player_opening_hands":["AAQAAQWtEb-xAdXTLMjAB_HpCwG_wzEAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[2],"opponent_revealed_archetype":{"AAQAAQTsY74V39cw0oEEAAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQTsY74V39cw0oEEAAAAAAA"]},{"game_number":2,"game_duration_seconds":311,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8Bm7hDAumCLfHqFAmqecJJ2JMr_b8B-6wDAzaRCoOJBAEN4gkCA8eWLpi6A5adEAHp1BkCrRH8-goBmJYuAAA","player_opening_hands":["AAQAAQfiCeLMLP2_Af6sA8cKg4kEkuENAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[15],"opponent_revealed_archetype":{"AAQAAQqIBfK-AbG6K4xfA-v1Ct_jB9q0AyNbAqp56tI3AAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQqIBfK-AbG6K4xfA-v1Ct_jB9q0AyNbAqp56tI3AAAAAA"]},{"game_number":3,"game_duration_seconds":222,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQSxkwPngivrigT3nw8Bm7hDA6mMC8D2IfHqFAiqecJJ2JMr-OwEAzaRCoOJBAEN4gkCA8eWLpi6A5adEAHp1BkCrRHrhC4BwZYuAAA","player_opening_hands":["AAQAAQfiCYq5Ab3JCZvKIfjsBDnlqRAAAAAAAA","AAQAAQTswgG9yQnA9iGytRYAAeIJAAAA"],"player_mulligan_put_on_bottom":[93905],"opponent_revealed_colors":[11],"opponent_revealed_archetype":{"AAQAAQeuEvxm0Eq36h_YohDSgQTKgAMB3OxDAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQeuEvxm0Eq36h_YohDSgQTKgAMB3OxDAAAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8DrRGt3EHBygECqYwLwPYhCKp5wknYkyv9vwH7rAMDxwqDiQQBDeIJAgWtEZqFLpi6A_ucEBsB6dQZAAKYli7drQMAAA","friendly_deck_name":"Quinniac","friendly_deck_id":"e950459b-553e-4f44-845b-379e097c0b91","friendly_deck_colors":8,"friendly_deck_tile_id":11815,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Mythic","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":96.33772277832031,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Mythic","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":95.121337890625,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"PlayerOne","team_id":1}]},{"short_id":"e6WQfHd2tgq4arq3LTdgKK","match_start":1776966908000,"season_ordinal":88,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":201,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8DrRGt3EHBygECqYwLwPYhCKp5wknYkyv9vwH7rAMDxwqDiQQBDeIJAgWtEZqFLpi6A_ucEBsB6dQZAAKYli7drQMAAA","player_opening_hands":["AAQAAQfiCchvwknQgDDHXYa2A5LhDQAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQbngC3WXAOVPbO9CuaRCwG370EAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQbngC3WXAOVPbO9CuaRCwG370EAAAAA"]},{"game_number":2,"game_duration_seconds":123,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQWxkwOuvS6kUPefD_ssAq0R7qZDAumCLfHqFAiqecJJ2JMr_b8B_qwDNpEKg4kEAQ3iCQICrRGahS4B6dQZAamMCwKYli6krQMAAA","player_opening_hands":["AAQAAQPBli7FtwPUnxAC4gnduTEAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQaNBajmAYjyK4faErS1Ae37AQAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQaNBajmAYjyK4faErS1Ae37AQAAAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQOxkwPSjS_3nw8DrRGt3EHBygECqYwLwPYhCKp5wknYkyv9vwH7rAMDxwqDiQQBDeIJAgWtEZqFLpi6A_ucEBsB6dQZAAKYli7drQMAAA","friendly_deck_name":"Quinniac","friendly_deck_id":"e950459b-553e-4f44-845b-379e097c0b91","friendly_deck_colors":8,"friendly_deck_tile_id":11815,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Mythic","friendly_ranking_tier_before":1,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":95.121337890625,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Mythic","friendly_ranking_tier_after":1,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":96.21765899658203,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Naoya","team_id":2}]},{"short_id":"8SAecpSzjEcb3Yas8A5VkD","match_start":1777475388000,"season_ordinal":null,"event_name":"Constructed_BestOf3","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":231,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQHfyTgFpC7_jQLkmyu2Bd7OEwTngC300Qi29gKlngsHtesBi5sr8sUE1wTvmxC_Apk6AQmNBQIC38k4sZ4LBZcQ8gSbGdM20OQ3AYbWNQAAAA","player_opening_hands":["AAQAAQeNBdr7LNkFycoE0oEE3JwM__cBAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQaqeRT3cYngNvsFxOoHAqVkte03AAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQaqeRT3cYngNvsFxOoHAqVkte03AAAAAA"]},{"game_number":2,"game_duration_seconds":211,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQHfyTgFpC7_jQLkmyu2Bd7OEwTngC300Qi29gKlngsHtesBi5sr8sUE1wTvmxC_Apk6AQmNBQIC38k4sZ4LBZcQ8gSbGdM20OQ3AYbWNQAAAA","player_opening_hands":["AAQAAQWNBZa3Ao-QL9cErp4QAfjsQQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[31],"opponent_revealed_archetype":{"AAQAAQu16wG-uhfsox_aByHJ5gfHAxOu7AGtAQ0BpWQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQu16wG-uhfsox_aByHJ5gfHAxOu7AGtAQ0BpWQAAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQHfyTgFpC7_jQLkmyu2Bd7OEwTngC300Qi29gKlngsHtesBi5sr8sUE1wTvmxC_Apk6AQmNBQIC38k4sZ4LBZcQ8gSbGdM20OQ3AYbWNQAAAA","friendly_deck_name":null,"friendly_deck_id":"b7587478-e179-5ab0-af26-907daa29dbf3","friendly_deck_colors":6,"friendly_deck_tile_id":null,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":null,"friendly_ranking_tier_before":null,"friendly_ranking_tier_steps_before":null,"friendly_mythic_percentile_before":null,"friendly_mythic_leaderboard_place_before":null,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":null,"friendly_ranking_tier_after":null,"friendly_ranking_tier_steps_after":null,"friendly_mythic_percentile_after":null,"friendly_mythic_leaderboard_place_after":null,"friendly_course_wins_before":1,"friendly_course_losses_before":1,"opponents":[{"player_name":"capnblacksparrow","team_id":2}]},{"short_id":"6sfefqRtDu9zvFmvPZqPNR","match_start":1777577746000,"season_ordinal":null,"event_name":"Constructed_BestOf3","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":54,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQHfyTgFpC7_jQLkmyu2Bd7OEwTngC300Qi29gKlngsHtesBi5sr8sUE1wTvmxC_Apk6AQmNBQIC38k4sZ4LBZcQ8gSbGdM20OQ3AYbWNQAAAA","player_opening_hands":["AAQAAQWNBZa3ApqhK6LsCvHfCQH47EEAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[3],"opponent_revealed_archetype":{"AAQAAQSIBeCIA9XPKuXtAwAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQSIBeCIA9XPKuXtAwAAAAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQHfyTgFpC7_jQLkmyu2Bd7OEwTngC300Qi29gKlngsHtesBi5sr8sUE1wTvmxC_Apk6AQmNBQIC38k4sZ4LBZcQ8gSbGdM20OQ3AYbWNQAAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":null,"friendly_ranking_tier_before":null,"friendly_ranking_tier_steps_before":null,"friendly_mythic_percentile_before":null,"friendly_mythic_leaderboard_place_before":null,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":null,"friendly_ranking_tier_after":null,"friendly_ranking_tier_steps_after":null,"friendly_mythic_percentile_after":null,"friendly_mythic_leaderboard_place_after":null,"friendly_course_wins_before":1,"friendly_course_losses_before":1,"opponents":[{"player_name":"sbuck","team_id":2}]},{"short_id":"VpjyZzkNP2Bo5FawWLFRip","match_start":1777577835000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":184,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQGjvAIFpC7jqS22Beb1B_jYCwXngC300Qi29gLnowm--gEGtesBi5sr8sUE1wSunhCZOgEKjQUCAqPTNZOUDgWXEI0e0zbQ5DcYAYbWNQAAAA","player_opening_hands":["AAQAAQONBYTEOKamCQLngC3ZBQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQSAFZ_ILZTEBJyZDgGb1TgAAAEFhwUA":null},"opponent_revealed_deckstrings":["AAQAAQSAFZ_ILZTEBJyZDgGb1TgAAAEFhwUA"]},{"game_number":2,"game_duration_seconds":120,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQKjvALkmysDlxCmzS2i7AoG54At9NEISO71AuejCb76AQa16wGLmyvyxQTXBK6eEJk6AQqNBQICh9gtr48WA_dk0OQ31OIIAYbWNQGkLgAA","player_opening_hands":["AAQAAQeNBajmAe5QxMQq2QWQoxXmvQEAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQeJEPcEn8gtl90S6XMfrEAAAYcFAAAA":null},"opponent_revealed_deckstrings":["AAQAAQeJEPcEn8gtl90S6XMfrEAAAYcFAAAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQGjvAIFpC7jqS22Beb1B_jYCwXngC300Qi29gLnowm--gEGtesBi5sr8sUE1wSunhCZOgEKjQUCAqPTNZOUDgWXEI0e0zbQ5DcYAYbWNQAAAA","friendly_deck_name":"Doooooom","friendly_deck_id":"e3e7cd7f-ff8d-4061-93b2-0a21913688d8","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"LegendLini","team_id":1}]},{"short_id":"ZABZDBqNDzzSai8EBWNTZU","match_start":1777578214000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":289,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQGjvAIFpC7jqS22Beb1B_jYCwXngC300Qi29gLnowm--gEGtesBi5sr8sUE1wSunhCZOgEKjQUCAqPTNZOUDgWXEI0e0zbQ5DcYAYbWNQAAAA","player_opening_hands":["AAQAAQWNBZcpnNgs26UUnEMB29I1AAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQa6MfBHh5oCla4u-qUS5AQE6MAxoZYE39MLuMECAowF_nwAAAA":null},"opponent_revealed_deckstrings":["AAQAAQa6MfBHh5oCla4u-qUS5AQE6MAxoZYE39MLuMECAowF_nwAAAA"]},{"game_number":2,"game_duration_seconds":445,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQGjvAIGvd0t1OsKNhi84gibuwIG54Aty8sEqYYEqwPylgzYPAWkLpG9AYubK8nKBK6eEAEKjQUCA7LMMd_8Br_gCQSXEOBUkPMsr48WAaPTNQAAAA","player_opening_hands":["AAQAAQO16wH94C-phgQCjQWOp0EAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQmqeZzIMJWRBK4E39MLkhb7LMH5Ae4EBbox0FDevjC2BaKhEgABjAUAAA":null},"opponent_revealed_deckstrings":["AAQAAQmqeZzIMJWRBK4E39MLkhb7LMH5Ae4EBbox0FDevjC2BaKhEgABjAUAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQGjvAIFpC7jqS22Beb1B_jYCwXngC300Qi29gLnowm--gEGtesBi5sr8sUE1wSunhCZOgEKjQUCAqPTNZOUDgWXEI0e0zbQ5DcYAYbWNQAAAA","friendly_deck_name":"Doooooom","friendly_deck_id":"e3e7cd7f-ff8d-4061-93b2-0a21913688d8","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"GSCNow","team_id":2}]},{"short_id":"UMLV6VpmBPeMx3nf47Lzzb","match_start":1777579067000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":91,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","player_opening_hands":["AAQAAQOb1izu-wir2QsCjAW04kMAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[8],"opponent_revealed_archetype":{"AAQAAQK_wzHJXgLiCbaMLgAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQK_wzHJXgLiCbaMLgAAAAA"]},{"game_number":2,"game_duration_seconds":358,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQKJ0jWSBQL6wEH7LAAMujHwR-AI4kDF0AHqwimpwAGkqgNew5UE39ML2LwCAQaMBQIErZkBp7E30QiP2AgExKsCpakXvvYXtIcEAZ7GMQAAAA","player_opening_hands":["AAQAAQWMBf58p5ECk4MrgqsDAboxAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[8],"opponent_revealed_archetype":{"AAQAAQTswgHYkyvUvwHxwAcBrrlAAAHiCQAA":null},"opponent_revealed_deckstrings":["AAQAAQTswgHYkyvUvwHxwAcBrrlAAAHiCQAA"]},{"game_number":3,"game_duration_seconds":282,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQKJ0jWSBQTEli7jtAPT9Q_7LAALujHwR-AI4kDF0AHqwinN6gRew5UE39ML2LwCAQaMBQIErZkBp7E30QiP2AgExKsCpakX28EUl7wHAZ7GMQAAAA","player_opening_hands":["AAQAAQH17UEDjAWedPHcKwAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[8],"opponent_revealed_archetype":{"AAQAAQXE1iz9vwHFtwOCVIG1AwLiCcyvQAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQXE1iz9vwHFtwOCVIG1AwLiCcyvQAAAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","friendly_deck_name":"Izzet Prowess","friendly_deck_id":"e50c3a8b-e4cd-449d-a6fd-feb78c8f604a","friendly_deck_colors":10,"friendly_deck_tile_id":90492,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"miserablemarriage","team_id":2}]},{"short_id":"3twDaqVrVZhRAMkoXuwi7L","match_start":1777624884000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":276,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQeNBajmAdLsK6v0A9_8BuejCb76AQAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[26],"opponent_revealed_archetype":{"AAQAAQv0D4wFh0-isy3VqQOnEPaFBMn9AvTUCSPSjAEBiNg4AfvMOAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQv0D4wFh0-isy3VqQOnEPaFBMn9AvTUCSPSjAEBiNg4AfvMOAAAAA"]},{"game_number":2,"game_duration_seconds":151,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQGbrEEFiRWapwLkmyu2BaLsCgTngC300Qidmgy--gEHtesBi5sr8sUE1wSI-AampgmZOgEJjQUCA9vSNcDZC91AA5cQsLk4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQKNBaniQwHQqUIBidExAAAA","AAQAAQWNBdr7LNkF8sUEnt0QAYnRMQAAAAA"],"player_mulligan_put_on_bottom":[92360],"opponent_revealed_colors":[18],"opponent_revealed_archetype":{"AAQAAQOHZJTzNLiUDgGAFQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQOHZJTzNLiUDgGAFQAAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":4,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":3,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"ASH_RAY","team_id":2}]},{"short_id":"oLL7PqkpzoYNZTibJx6j2u","match_start":1777625396000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":413,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQWNBfzLMYj4Bk7YpQkBsswxAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQqMBQGo5gHrpwHpvS7J-wamoAm--gEKiAQCvOsBq5UrAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQqMBQGo5gHrpwHpvS7J-wamoAm--gEKiAQCvOsBq5UrAAAAAA"]},{"game_number":2,"game_duration_seconds":195,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQAFlxDyBJqnApqhK9OKFgOkLsPSLM_mFgi16wGLmyvyxQTXBNKBBLb2AqamCZk6AQmNBQIABIfYLcDxChi84ggBhtY1AfjsQQAA","player_opening_hands":["AAQAAQeNBZa3Ap3KKvfoFJk65r0BWgAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQqMBQH6XrWHAeSnAcXJKuE3jwaj0hO--gEB0sw4AYnRMQAAAA":null},"opponent_revealed_deckstrings":["AAQAAQqMBQH6XrWHAeSnAcXJKuE3jwaj0hO--gEB0sw4AYnRMQAAAA"]},{"game_number":3,"game_duration_seconds":398,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQAFlxDyBJqnApqhK9OKFgOkLsPSLM_mFgi16wGLmyvyxQTXBNKBBLb2AqamCZk6AQmNBQIABIfYLcDxChi84ggBhtY1AfjsQQAA","player_opening_hands":["AAQAAQe16wGLmyvyxQSphgS29gK_4AnmvQEAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[22],"opponent_revealed_archetype":{"AAQAAQv0D8jbAeSnAaaBK48GirYDKu-bEL76AQqIBAG16wEAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQv0D8jbAeSnAaaBK48GirYDKu-bEL76AQqIBAG16wEAAAAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":3,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":3,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Yuhi","team_id":2}]},{"short_id":"gusfnX5fgJkLykoUH4eXZ7","match_start":1777626574000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":315,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQWNBfrSLbYFu48UvvoBAYnRMQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQaxriH2nBC0hwSf_gKA8AjEqgIAAsSWLo3UFQm6MfBH4AjiQMXQAbetLl7DlQS3kA4CCIwFBdylQQA":null},"opponent_revealed_deckstrings":["AAQAAQaxriH2nBC0hwSf_gKA8AjEqgIAAsSWLo3UFQm6MfBH4AjiQMXQAbetLl7DlQS3kA4CCIwFBdylQQA"]},{"game_number":2,"game_duration_seconds":212,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQGkLgajvAKaoSuK7AoYvOIIm7sCBueALcvLBKmGBKsDi_MCv-AJBbXrAYubK8nKBO-bEL8CAQmNBQIFsswxqYYEtvYCv-AJ5r0BBZcQ8gSbGeOpLYmQFgAAAAA","player_opening_hands":["AAQAAQe16wGLmyubzAiE9wK84gjdQNg8AAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQqMBf58uqkB7WeAmx6VkxCVkQSuBPHpC9epAgHA50MAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQqMBf58uqkB7WeAmx6VkxCVkQSuBPHpC9epAgHA50MAAAAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":3,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":4,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"kiyo","team_id":2}]},{"short_id":"VSD4XM8DhZK3uBRWizBSfG","match_start":1777627185000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":127,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQO93S3U6wrnowkCjQWp4kMAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQiqeYeaAoCbHrL8HzCCAp4CiLoCAYwFAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQiqeYeaAoCbHrL8HzCCAp4CiLoCAYwFAAAAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":4,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":2,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Lumiukko","team_id":2}]},{"short_id":"4NdEjDctmg3t5NCaxBo8Zk","match_start":1777627356000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":23,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQONBdr7LNDuFALb0jX11gwAAAAA","AAQAAQXngC3LywTXBNKBBNuUDgGH2C0AAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[0],"opponent_revealed_archetype":{"AAQAAA":null},"opponent_revealed_deckstrings":["AAQAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"oda","team_id":2}]},{"short_id":"2NtNS8SxubD6LrwdYRaMGM","match_start":1777627424000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":219,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQPb0jW29gKK4wgCjQXa-ywAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQmMBdYEyG-HtSDKlBCOlASy1gsM7AEDsZMDspc-IQHP1jUAAAA":null},"opponent_revealed_deckstrings":["AAQAAQmMBdYEyG-HtSDKlBCOlASy1gsM7AEDsZMDspc-IQHP1jUAAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Vomitory","team_id":2}]},{"short_id":"nFtvhpCNJQPfiDe9dvxu4f","match_start":1777627693000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":153,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","player_opening_hands":["AAQAAQWMBa4sro8x85EE-fcCAap5AAAAAA","AAQAAQOxkwOqvzKuBAKMBbiRLgAAAAA"],"player_mulligan_put_on_bottom":[12053],"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQWAFaQZmL0BzLYwjrUDAZ-uQQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQWAFaQZmL0BzLYwjrUDAZ-uQQAAAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","friendly_deck_name":"Izzet Prowess","friendly_deck_id":"e50c3a8b-e4cd-449d-a6fd-feb78c8f604a","friendly_deck_colors":10,"friendly_deck_tile_id":90492,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"gyapugyapu","team_id":2}]},{"short_id":"QC5PqhFqX9oRVhNaE333Vh","match_start":1777627918000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":686,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","player_opening_hands":["AAQAAQPGwTHDlQQSAqp5mp0tAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQikLtM2voYBi5srvroESJmIB5v3CAaKggHevjC_CrSHBJ2aDMj6AQKMBf3LMQAAAA":null},"opponent_revealed_deckstrings":["AAQAAQikLtM2voYBi5srvroESJmIB5v3CAaKggHevjC_CrSHBJ2aDMj6AQKMBf3LMQAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","friendly_deck_name":"Izzet Prowess","friendly_deck_id":"e50c3a8b-e4cd-449d-a6fd-feb78c8f604a","friendly_deck_colors":10,"friendly_deck_tile_id":90492,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"h67","team_id":1}]},{"short_id":"937RRm2o7NfC9CiGE7SaNb","match_start":1777628634000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":269,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQLngC300QgBo7wCAY0FAAAA","AAQAAQW16wGLmyvyxQTXBMfYEAGNBQAAAAA"],"player_mulligan_put_on_bottom":[68740],"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQa6MfBHwknF0AGN2EBiBIwF_dE139ML6b8CAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQa6MfBHwknF0AGN2EBiBIwF_dE139ML6b8CAAAAAA"]},{"game_number":2,"game_duration_seconds":289,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQAHiRWapwKaoSuK7AoYvOIIm7sCB-eALcvLBKmGBKsDi_MC56MJ2DwEtesBi5srycoErp4QAQmNBQIGsswxqYYEtvYC56MJ2DzmvQEDlxDwxy2JkBYBpC4AAAA","player_opening_hands":["AAQAAQW16wGylSuf1QiL8wK_4AkBjQUAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQaqeb7HMF6i6Q-SFqarAgSMBa4sz6U1yJMOAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQaqeb7HMF6i6Q-SFqarAgSMBa4sz6U1yJMOAAAAAA"]},{"game_number":3,"game_duration_seconds":123,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQAHiRWapwKaoSuK7AoYvOIIm7sCB-eALcvLBKmGBKsDi_MC56MJ2DwEtesBi5srycoErp4QAQmNBQIGsswxqYYEtvYC56MJ2DzmvQEDlxDwxy2JkBYBpC4AAAA","player_opening_hands":["AAQAAQfngC3ZBZvMCOz2AtTiCJxD__cBAAAAAAA","AAQAAQWNBZa3AriWM8DZC7V9AYnRMQAAAAA"],"player_mulligan_put_on_bottom":[87435],"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQW6MdBQnckwmZwSkQMCjAX90TUAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQW6MdBQnckwmZwSkQMCjAX90TUAAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"chung","team_id":1}]},{"short_id":"C5Pf4BkqLs2qx7HFEGE8ov","match_start":1777629434000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":374,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQW16wGLmyvHUav0A9cEAY0FAAAAAA","AAQAAQWNBdr7LNkF_VbM8wMBm6xBAAAAAA","AAQAAQWNBdr7LNkF26UUtX0B29I1AAAAAA"],"player_mulligan_put_on_bottom":[94869,97369],"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQmqeeAInckw-AS8ggSuBPHpC8amApEDArGTA5ODKwKMBeC9AQAAAA":null},"opponent_revealed_deckstrings":["AAQAAQmqeeAInckw-AS8ggSuBPHpC8amApEDArGTA5ODKwKMBeC9AQAAAA"]},{"game_number":2,"game_duration_seconds":228,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQAFo7wCmqEriuwKGNedCwekLsPSLMvLBKmGBKsDi_MCv-AJBbXrAYubK8nKBO-bEL8CAQmNBQIFsswxqYYEtvYCv-AJ5r0BBZcQ8gT-wi2U1BP1uwIAAAAA","player_opening_hands":["AAQAAQWNBZcpkb0Bw4FA2DwB54AtAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQfTEbdwuqkB7We3rS7zkQSf7gsEujHwR5qdLfzQFQGMBQAAAA":null},"opponent_revealed_deckstrings":["AAQAAQfTEbdwuqkB7We3rS7zkQSf7gsEujHwR5qdLfzQFQGMBQAAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"sejima","team_id":2}]},{"short_id":"mfhyQ9E55oC8knqPZ7ZCrQ","match_start":1777630126000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":265,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQWNBajmAbKVK6BXq_QDAZHJOAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQWyhi2yzgvn5QcE73MCiRCSxTgAAAEGhwUA":null},"opponent_revealed_deckstrings":["AAQAAQWyhi2yzgvn5QcE73MCiRCSxTgAAAEGhwUA"]},{"game_number":2,"game_duration_seconds":99,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQHfyTgGiRWapwLkmyu2Bd7OE5u7AgLngC3LywQItesBi5srycoE0oEEtvYC56MJvwKZOgEJjQUCA7LMMa39BtedCwOXELC5OMmeCwKkLuKnNQAAAA","player_opening_hands":["AAQAAQeNBajmAYubK_LFBNcEiPgGv-AJAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQSJEPcEn8gtn9ETAYcFAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQSJEPcEn8gtn9ETAYcFAAAAAA"]},{"game_number":3,"game_duration_seconds":634,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQHfyTgGiRWapwLkmyu2Bd7OE5u7AgLngC3LywQItesBi5srycoE0oEEtvYC56MJvwKZOgEJjQUCA7LMMa39BtedCwOXELC5OMmeCwKkLuKnNQAAAA","player_opening_hands":["AAQAAQeJFbfxLP1WzPMD0oEEtvYCpqYJAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[16],"opponent_revealed_archetype":{"AAQAAQuJEPcE85AZ9i6OgBO7MdFT4foKu9kIH6xABJ_dLfz3CpvlBxkAAAEJhwUA":null},"opponent_revealed_deckstrings":["AAQAAQuJEPcE85AZ9i6OgBO7MdFT4foKu9kIH6xABJ_dLfz3CpvlBxkAAAEJhwUA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Kieff","team_id":2}]},{"short_id":"CkY5JQS4o5uZtdnuqcNSMW","match_start":1777634314000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":508,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQOjvAKdyiqfwwsCtesBspUrAAAAAA","AAQAAQWNBdr7LKLQBO-bEL8CAbLMMQAAAAA"],"player_mulligan_put_on_bottom":[92170],"opponent_revealed_colors":[10],"opponent_revealed_archetype":{"AAQAAQSKggG6qQHjny-qnxIGqnnCScXQAZWuLsOVBN_TCwOMBdy7MdimEgG6MQAA":null},"opponent_revealed_deckstrings":["AAQAAQSKggG6qQHjny-qnxIGqnnCScXQAZWuLsOVBN_TCwOMBdy7MdimEgG6MQAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"LUCA","team_id":2}]},{"short_id":"aR4n6NiLzhRvJUdkqEPSXY","match_start":1777665979000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":193,"active_player_id":1,"winning_team_id":2,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","player_opening_hands":["AAQAAQeKggHiQJ2UNBK58wKU4AhMAAAAAAA","AAQAAQeMBeC9AdjTLKSqA6GWBN_TC9i8AgAAAAAA"],"player_mulligan_put_on_bottom":[97320],"opponent_revealed_colors":[3],"opponent_revealed_archetype":{"AAQAAQa1hi24jAGeuAOk_Qag7gerigEAAYgFAAAA":null},"opponent_revealed_deckstrings":["AAQAAQa1hi24jAGeuAOk_Qag7gerigEAAYgFAAAA"]}],"winning_team_id":2,"active_player_id":1,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","friendly_deck_name":"Izzet Prowess","friendly_deck_id":"e50c3a8b-e4cd-449d-a6fd-feb78c8f604a","friendly_deck_colors":10,"friendly_deck_tile_id":90492,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Xx_Xibalba_xX","team_id":2}]},{"short_id":"JyZGQK92kQ4beHCh6HWRts","match_start":1777669659000,"season_ordinal":89,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":74,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","player_opening_hands":["AAQAAQeMBf58upQtl7wHwATN0wvYvAIAAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[1],"opponent_revealed_archetype":{"AAQAAQOG0TGChwfP3gcAAAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQOG0TGChwfP3gcAAAAAAA"]}],"winning_team_id":1,"active_player_id":1,"friendly_deckstring":"AAQAAQSJ0jWSBbnzAuDgCAPowDHzkQSf7gsAC7ox8EfgCOJAxdAB6sIpqcABgqsDw5UE39ML2LwCAQaMBQICrZkB-Lk3BcSrAqWpF__rF78KzqIQAZ7GMQAAAA","friendly_deck_name":"Izzet Prowess","friendly_deck_id":"e50c3a8b-e4cd-449d-a6fd-feb78c8f604a","friendly_deck_colors":10,"friendly_deck_tile_id":90492,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":"Platinum","friendly_ranking_tier_after":4,"friendly_ranking_tier_steps_after":0,"friendly_mythic_percentile_after":0.0,"friendly_mythic_leaderboard_place_after":0,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Blaze","team_id":1}]},{"short_id":"hf6b8YV9AJB7jfAL5TuuQ8","match_start":1777674921000,"season_ordinal":null,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":317,"active_player_id":2,"winning_team_id":1,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","player_opening_hands":["AAQAAQWH2C2K8QqK4wjdQNg8AbbnQwAAAAA","AAQAAQWjvALExCrZBZvMCLb2AgGNBQAAAAA"],"player_mulligan_put_on_bottom":[11809],"opponent_revealed_colors":[6],"opponent_revealed_archetype":{"AAQAAQeNBajmAfupLPK1A9gEgPEP_fMBAYnRMQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQeNBajmAfupLPK1A9gEgPEP_fMBAYnRMQAAAAA"]}],"winning_team_id":1,"active_player_id":2,"friendly_deckstring":"AAQAAQHfyTgEo7wC5JsrtgXezhMC54Atz-YWCbXrAYubK_LFBNcE0oEEtvYC56MJvwKZOgEJjQUCAd_JOASXEPIEvrQ4yZ4LAqQu4qc1AAAA","friendly_deck_name":"Doooooom 2.0.","friendly_deck_id":"fbec4789-a0b2-4c8a-b93e-e569a7576d0f","friendly_deck_colors":6,"friendly_deck_tile_id":87235,"friendly_deck_archetype":null,"friendly_system_seat_id":2,"friendly_team_id":2,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":0,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":null,"friendly_ranking_tier_after":null,"friendly_ranking_tier_steps_after":null,"friendly_mythic_percentile_after":null,"friendly_mythic_leaderboard_place_after":null,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"Felipe_Gon","team_id":1}]},{"short_id":"XC7Ft5Y7ZdD2a8Qwmw22eL","match_start":1777714616000,"season_ordinal":null,"event_name":"Traditional_Ladder","super_format":2,"match_win_condition":2,"games":[{"game_number":1,"game_duration_seconds":689,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQP-wDGdlgSw5gsC1Mo4pvYIAZvWLAu6MfBH4AjiQMXQAZODK4KrA8OVBN_TC9i8ApEDAQaMBQIFm9Ysg_AEgQqghQS2mAwFxKsCpakX_-sXvwrunRIAAAAA","player_opening_hands":["AAQAAQWqecJJr5MrzdQU2LwCAYqCAQAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQ2NBa_mAdzrKs8poFfHBJH0A7eGBND9AtDlB9J05roCBQGHBQAAAAA":null},"opponent_revealed_deckstrings":["AAQAAQ2NBa_mAdzrKs8poFfHBJH0A7eGBND9AtDlB9J05roCBQGHBQAAAAA"]},{"game_number":2,"game_duration_seconds":999,"active_player_id":1,"winning_team_id":1,"friendly_deckstring":"AAQAAQWexjGhjwTcAbDmC6owAfrAQQGb1iwLujHwR-AI4kDF0AGTgyuCqwPDlQTf0wvYvAKRAwEGjAUCA5vWLOPqBKEPBsSrAqWpF__rF78Krf8GwZ4LAAAAAA","player_opening_hands":["AAQAAQWxkwPqwimpwAGklBPpvwIBwOdDAAAAAA","AAQAAQeMBf58_9Q0Es3TC9i8ApEDAAAAAAA"],"player_mulligan_put_on_bottom":[95072],"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQqJELPbAdzrKraFAbM6470K0uUHwrIB0P4BawTzpRmUshTY-AOUmRIBltc1AocFBgAA":null},"opponent_revealed_deckstrings":["AAQAAQqJELPbAdzrKraFAbM6470K0uUHwrIB0P4BawTzpRmUshTY-AOUmRIBltc1AocFBgAA"]},{"game_number":3,"game_duration_seconds":699,"active_player_id":2,"winning_team_id":2,"friendly_deckstring":"AAQAAQWexjGhjwTcAbDmC6owAfrAQQGb1iwLujHwR-AI4kDF0AGTgyuCqwPDlQTf0wvYvAKRAwEGjAUCA5vWLOPqBKEPBsSrAqWpF__rF78Krf8GwZ4LAAAAAA","player_opening_hands":["AAQAAQW6MdBQp5ECk4MrjdQVAZvWLAAAAAA"],"player_mulligan_put_on_bottom":null,"opponent_revealed_colors":[20],"opponent_revealed_archetype":{"AAQAAQe86wGrlSvuBduOAa-7A7eGBJ2VDgSJEI_HLOm_AbWjEgKNBeagGQGHBQAA":null},"opponent_revealed_deckstrings":["AAQAAQe86wGrlSvuBduOAa-7A7eGBJ2VDgSJEI_HLOm_AbWjEgKNBeagGQGHBQAA"]}],"winning_team_id":2,"active_player_id":2,"friendly_deckstring":"AAQAAQP-wDGdlgSw5gsC1Mo4pvYIAZvWLAu6MfBH4AjiQMXQAZODK4KrA8OVBN_TC9i8ApEDAQaMBQIFm9Ysg_AEgQqghQS2mAwFxKsCpakX_-sXvwrunRIAAAAA","friendly_deck_name":"PT Aggro","friendly_deck_id":"72406585-d770-4464-8831-3bf1f2d6c63d","friendly_deck_colors":10,"friendly_deck_tile_id":86940,"friendly_deck_archetype":null,"friendly_system_seat_id":1,"friendly_team_id":1,"friendly_ranking_class_before":"Platinum","friendly_ranking_tier_before":4,"friendly_ranking_tier_steps_before":2,"friendly_mythic_percentile_before":0.0,"friendly_mythic_leaderboard_place_before":0,"friendly_rating_before":null,"friendly_rating_deviation_before":null,"friendly_rating_volatility_before":null,"friendly_rating_mythic_before":null,"friendly_ranking_class_after":null,"friendly_ranking_tier_after":null,"friendly_ranking_tier_steps_after":null,"friendly_mythic_percentile_after":null,"friendly_mythic_leaderboard_place_after":null,"friendly_course_wins_before":null,"friendly_course_losses_before":null,"opponents":[{"player_name":"grinche","team_id":2}]}]
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const test = require('node:test')
|
|
2
|
+
const assert = require('node:assert/strict')
|
|
3
|
+
const { dedupeEvents, isSameEvent, nameSimilarity } = require('../src/utils/eventDedup')
|
|
4
|
+
const UnityLeagueFetcher = require('../src/fetchers/unityLeague')
|
|
5
|
+
const { readFixture } = require('../test_utils/helpers')
|
|
6
|
+
|
|
7
|
+
test('nameSimilarity: partial match between Unity and Topdeck event names', () => {
|
|
8
|
+
const score = nameSimilarity('Premodern Weekly', 'Untap Altona Premodern Weekly 18.03')
|
|
9
|
+
assert.ok(score >= 0.5, `expected >= 0.5, got ${score}`)
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
test('isSameEvent: same date + same record + partial name match -> duplicate', () => {
|
|
13
|
+
const a = { date: '2026-03-18', name: 'Premodern Weekly', wins: 3, losses: 0, draws: 1 }
|
|
14
|
+
const b = { date: '2026-03-18', name: 'Untap Altona Premodern Weekly 18.03', wins: 3, losses: 0, draws: 1 }
|
|
15
|
+
assert.strictEqual(isSameEvent(a, b), true)
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
test('isSameEvent: same date but different record -> not a duplicate', () => {
|
|
19
|
+
const a = { date: '2026-03-18', name: 'Premodern Weekly', wins: 3, losses: 0, draws: 1 }
|
|
20
|
+
const b = { date: '2026-03-18', name: 'Premodern Weekly', wins: 2, losses: 1, draws: 1 }
|
|
21
|
+
assert.strictEqual(isSameEvent(a, b), false)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
test('isSameEvent: same record but different date -> not a duplicate', () => {
|
|
25
|
+
const a = { date: '2026-03-18', name: 'Premodern Weekly', wins: 3, losses: 0, draws: 1 }
|
|
26
|
+
const b = { date: '2026-03-11', name: 'Premodern Weekly', wins: 3, losses: 0, draws: 1 }
|
|
27
|
+
assert.strictEqual(isSameEvent(a, b), false)
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
test('isSameEvent: same date + same record but unrelated names -> not a duplicate', () => {
|
|
31
|
+
const a = { date: '2026-03-18', name: 'Premodern Weekly', wins: 3, losses: 0, draws: 1 }
|
|
32
|
+
const b = { date: '2026-03-18', name: 'Modern Showdown', wins: 3, losses: 0, draws: 1 }
|
|
33
|
+
assert.strictEqual(isSameEvent(a, b), false)
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
test('UnityLeagueFetcher: parseHtml emits normalized events array from fixture', () => {
|
|
37
|
+
const html = readFixture('unityLeague.html')
|
|
38
|
+
const fetcher = new UnityLeagueFetcher()
|
|
39
|
+
const result = fetcher.parseHtml(html, 'https://unityleague.gg/player/16215/')
|
|
40
|
+
|
|
41
|
+
assert.ok(Array.isArray(result.events), 'expected events array')
|
|
42
|
+
assert.ok(result.events.length > 0, 'expected non-empty events array')
|
|
43
|
+
for (const e of result.events) {
|
|
44
|
+
assert.match(e.date, /^\d{4}-\d{2}-\d{2}$/, `bad date: ${e.date}`)
|
|
45
|
+
assert.strictEqual(typeof e.wins, 'number')
|
|
46
|
+
assert.strictEqual(typeof e.losses, 'number')
|
|
47
|
+
assert.strictEqual(typeof e.draws, 'number')
|
|
48
|
+
assert.ok(e.name, 'expected event name')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Two known duplicates exist with Topdeck data: 2026-03-18/3-0-1 and 2026-03-11/3-1-0
|
|
52
|
+
const has0318 = result.events.some(e => e.date === '2026-03-18' && e.wins === 3 && e.losses === 0 && e.draws === 1)
|
|
53
|
+
const has0311 = result.events.some(e => e.date === '2026-03-11' && e.wins === 3 && e.losses === 1 && e.draws === 0)
|
|
54
|
+
assert.ok(has0318, 'expected 2026-03-18 3-0-1 event')
|
|
55
|
+
assert.ok(has0311, 'expected 2026-03-11 3-1-0 event')
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
test('dedupeEvents: collapses two known UnityLeague/Topdeck duplicates from fixtures', () => {
|
|
59
|
+
const html = readFixture('unityLeague.html')
|
|
60
|
+
const fetcher = new UnityLeagueFetcher()
|
|
61
|
+
const ulResult = fetcher.parseHtml(html, 'url')
|
|
62
|
+
|
|
63
|
+
const td = JSON.parse(readFixture('topdeck.json'))
|
|
64
|
+
const tdEvents = []
|
|
65
|
+
Object.values(td.gameFormats || {}).forEach(arr => {
|
|
66
|
+
arr.forEach(e => {
|
|
67
|
+
const m = String(e.record).match(/^(\d+)-(\d+)-(\d+)$/)
|
|
68
|
+
if (!m) return
|
|
69
|
+
tdEvents.push({
|
|
70
|
+
source: 'Topdeck',
|
|
71
|
+
date: String(e.date).slice(0, 10),
|
|
72
|
+
name: e.name,
|
|
73
|
+
format: e.rawFormat,
|
|
74
|
+
wins: parseInt(m[1], 10),
|
|
75
|
+
losses: parseInt(m[2], 10),
|
|
76
|
+
draws: parseInt(m[3], 10)
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
const merged = [...ulResult.events, ...tdEvents]
|
|
82
|
+
const unique = dedupeEvents(merged)
|
|
83
|
+
assert.strictEqual(merged.length - unique.length, 2, `expected exactly 2 duplicates removed, got ${merged.length - unique.length}`)
|
|
84
|
+
})
|
package/test/mtgElo.test.js
CHANGED
|
@@ -46,14 +46,83 @@ test('MtgEloFetcher: parseHtml handles malformed astro-island JSON', async () =>
|
|
|
46
46
|
})
|
|
47
47
|
})
|
|
48
48
|
|
|
49
|
+
test('MtgEloFetcher: buildEvents joins events with matches and tallies W-L-D from result strings', () => {
|
|
50
|
+
const fetcher = new MtgEloFetcher()
|
|
51
|
+
const events = JSON.parse(readFixture('mtgEloEvents.json'))
|
|
52
|
+
const matches = JSON.parse(readFixture('mtgEloMatches.json'))
|
|
53
|
+
|
|
54
|
+
const result = fetcher.buildEvents(events, matches)
|
|
55
|
+
|
|
56
|
+
assert.strictEqual(result.length, 3)
|
|
57
|
+
const byCode = (date) => result.find(e => e.date === date)
|
|
58
|
+
|
|
59
|
+
// ssutr25 (2025-03-15): 5W-4L-0D
|
|
60
|
+
assert.deepStrictEqual(
|
|
61
|
+
{ date: byCode('2025-03-15').date, w: byCode('2025-03-15').wins, l: byCode('2025-03-15').losses, d: byCode('2025-03-15').draws },
|
|
62
|
+
{ date: '2025-03-15', w: 5, l: 4, d: 0 }
|
|
63
|
+
)
|
|
64
|
+
// ssliv25 (2025-11-01): 1W-4L-0D
|
|
65
|
+
assert.deepStrictEqual(
|
|
66
|
+
{ w: byCode('2025-11-01').wins, l: byCode('2025-11-01').losses, d: byCode('2025-11-01').draws },
|
|
67
|
+
{ w: 1, l: 4, d: 0 }
|
|
68
|
+
)
|
|
69
|
+
// sslyo26 (2026-01-10): 3W-4L-1D (one "Draw 1-1" round)
|
|
70
|
+
assert.deepStrictEqual(
|
|
71
|
+
{ w: byCode('2026-01-10').wins, l: byCode('2026-01-10').losses, d: byCode('2026-01-10').draws },
|
|
72
|
+
{ w: 3, l: 4, d: 1 }
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
for (const ev of result) {
|
|
76
|
+
assert.strictEqual(ev.source, 'MTG Elo Project')
|
|
77
|
+
assert.match(ev.date, /^\d{4}-\d{2}-\d{2}$/)
|
|
78
|
+
assert.ok(ev.name)
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
test('MtgEloFetcher: buildEvents tolerates empty/malformed inputs', () => {
|
|
83
|
+
const fetcher = new MtgEloFetcher()
|
|
84
|
+
assert.deepStrictEqual(fetcher.buildEvents(null, null), [])
|
|
85
|
+
assert.deepStrictEqual(fetcher.buildEvents({ data: [] }, {}), [])
|
|
86
|
+
// event with no matching match list -> skipped
|
|
87
|
+
assert.deepStrictEqual(
|
|
88
|
+
fetcher.buildEvents({ data: [{ code: 'x', date: '2025-01-01', name: 'X' }] }, {}),
|
|
89
|
+
[]
|
|
90
|
+
)
|
|
91
|
+
// event with empty match list -> skipped (no W-L-D info)
|
|
92
|
+
assert.deepStrictEqual(
|
|
93
|
+
fetcher.buildEvents({ data: [{ code: 'x', date: '2025-01-01', name: 'X' }] }, { x: [] }),
|
|
94
|
+
[]
|
|
95
|
+
)
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
test('MtgEloFetcher: fetchById populates events via API endpoints', async (t) => {
|
|
99
|
+
const fetcher = new MtgEloFetcher()
|
|
100
|
+
const events = JSON.parse(readFixture('mtgEloEvents.json'))
|
|
101
|
+
const matches = JSON.parse(readFixture('mtgEloMatches.json'))
|
|
102
|
+
|
|
103
|
+
const mockRequest = t.mock.method(httpClient, 'request', async (url) => {
|
|
104
|
+
if (url.endsWith('/events')) return { data: events, status: 200 }
|
|
105
|
+
if (url.endsWith('/matches')) return { data: matches, status: 200 }
|
|
106
|
+
return { data: '<html><div class="text-[22pt]">Test User</div></html>', status: 200 }
|
|
107
|
+
})
|
|
108
|
+
const result = await fetcher.fetchById('3irvwtmk')
|
|
109
|
+
mockRequest.mock.restore()
|
|
110
|
+
|
|
111
|
+
assert.ok(Array.isArray(result.events))
|
|
112
|
+
assert.strictEqual(result.events.length, 3)
|
|
113
|
+
assert.ok(result.events.every(e => e.source === 'MTG Elo Project'))
|
|
114
|
+
})
|
|
115
|
+
|
|
49
116
|
test('MtgEloFetcher: fetchById handles success and error scenarios', async (t) => {
|
|
50
117
|
const fetcher = new MtgEloFetcher()
|
|
51
118
|
|
|
52
119
|
await t.test('successful fetch', async () => {
|
|
53
|
-
const mockRequest = t.mock.method(httpClient, 'request', async () =>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
120
|
+
const mockRequest = t.mock.method(httpClient, 'request', async (url) => {
|
|
121
|
+
if (url.includes('/api/players/')) {
|
|
122
|
+
return { data: url.endsWith('/events') ? { data: [] } : {}, status: 200 }
|
|
123
|
+
}
|
|
124
|
+
return { data: '<html><div class="text-[22pt]">Test User</div></html>', status: 200 }
|
|
125
|
+
})
|
|
57
126
|
const result = await fetcher.fetchById('123')
|
|
58
127
|
assert.strictEqual(result.name, 'Test User')
|
|
59
128
|
mockRequest.mock.restore()
|