/* HaxBall @ 2024 - Mario Carbajal - All rights reserved. 15ee796a */ 'use strict'; (function(pa) { function ka() { return w.Pe(this, "") } function M(a, b) { if (null == b) return null; null == b.th && (b.th = pa.Jj++); var c; null == a.uj ? a.uj = {} : c = a.uj[b.th]; null == c && (c = b.bind(a), a.uj[b.th] = c); return c } function gc(a) { return 66 > a ? 66 : 400 < a ? 400 : a } class Sa { constructor() { this.jc = -1; this.ic = null; this.H = [] } ga(a) { a.m(this.H.length); let b = 0, c = this.H.length; for (; b < c;) { let d = b++, e = this.H[d]; e.Il = d; e.ga(a) } } ma(a) { this.H = []; let b = a.F(), c = 0; for (; c < b;) { ++c; let d = new qa; d.ma(a); this.H.push(d) } } A(a) { for (var b = 0, c = this.H; b < c.length;) { var d = c[b]; ++b; var e = d.a, f = d.a, g = d.G; e.x = f.x + g.x * a; e.y = f.y + g.y * a; f = e = d.G; g = d.ra; d = d.Ea; e.x = (f.x + g.x) * d; e.y = (f.y + g.y) * d } a = 0; for (b = this.H.length; a < b;) { d = a++; c = this.H[d]; d += 1; for (e = this.H.length; d < e;) f = this.H[d++], 0 != (f.i & c.B) && 0 != (f.B & c.i) && c.vo(f); if (0 != c.ca) { d = 0; for (e = this.sa; d < e.length;) if (f = e[d], ++d, 0 != (f.i & c.B) && 0 != (f.B & c.i)) { g = f.ya; var h = c.a; g = f.Va - (g.x * h.x + g.y * h.y) + c.V; if (0 < g) { var k = h = c.a, l = f.ya; h.x = k.x + l.x * g; h.y = k.y + l.y * g; g = c.G; h = f.ya; g = g.x * h.x + g.y * h.y; 0 > g && (g *= c.o * f.o + 1, k = h = c.G, f = f.ya, h.x = k.x - f.x * g, h.y = k.y - f.y * g) } } d = 0; for (e = this.X; d < e.length;) f = e[d], ++d, 0 != (f.i & c.B) && 0 != (f.B & c.i) && c.wo(f); d = 0; for (e = this.L; d < e.length;) if (f = e[d], ++d, 0 != (f.i & c.B) && 0 != (f.B & c.i) && (h = c.a, k = f.a, g = h.x - k.x, h = h.y - k.y, k = g * g + h * h, 0 < k && k <= c.V * c.V)) { k = Math.sqrt(k); g /= k; h /= k; k = c.V - k; let n = l = c.a; l.x = n.x + g * k; l.y = n.y + h * k; k = c.G; k = g * k.x + h * k.y; 0 > k && (k *= c.o * f.o + 1, l = f = c.G, f.x = l.x - g * k, f.y = l.y - h * k) } } } for (a = 0; 2 > a;) for (++a, b = 0, c = this.qb; b < c.length;) c[b++].A(this.H) } uc() { let a = ra.Cc, b = this.ic; this.jc != a && (null == b && (this.ic = b = new Sa), this.jc = a, Sa.zd(b, this)); return b } static zd(a, b) { if (null == b.H) a.H = null; else { null == a.H && (a.H = []); let d = a.H, e = b.H; for (var c = e.length; d.length > c;) d.pop(); c = 0; let f = e.length; for (; c < f;) { let g = c++; d[g] = e[g].uc() } } a.L = b.L; a.X = b.X; a.sa = b.sa; a.qb = b.qb } } class hc { constructor() { this.Jh = 0; this.bq = 400; this.Sk = 64; this.jj = 32; this.na = window.document.createElement("canvas"); this.fg = window.document.createElement("canvas"); this.f = window.document.createElement("div"); this.fg.width = this.na.width = this.jj; this.fg.height = this.na.height = this.Sk; this.Nh = this.fg.getContext("2d", null); this.c = this.na.getContext("2d", null); this.c.fillStyle = "green"; let a = [], b = 0, c = this.jj; for (; b < c;) ++b, a.push(0); this.Nq = a; this.f.appendChild(this.fg); this.f.className = "graph"; this.f.hidden = !0 } Vn(a) { this.f.hidden = !1; 0 > a ? (a = 150, this.c.fillStyle = "#c13535") : this.c.fillStyle = "#32FF32"; let b = this.jj, c = this.Sk, d = this.Jh++; this.Jh >= b && (this.Jh = 0); this.Nq[d] = a; this.c.clearRect(d, 0, 1, c); a = a * c / this.bq; this.c.fillRect(d, c - a, 1, a); this.Nh.clearRect(0, 0, b, c); this.Nh.drawImage(this.na, b - d - 1, 0); this.Nh.drawImage(this.na, -d - 1, 0) } } class T { constructor() {} ss() { return "idkey." + this.nj + "." + this.oj + "." + this.uk } gs(a) { try { let b = A.ka(1024); b.m(1); let c = b.a; b.Xb(0); let d = b.a; b.oc(this.nj); b.oc(this.oj); b.Lb(a); let e = b.a - d; b.s.setUint16(c, e, b.Ua); let f = new Uint8Array(b.s.buffer, b.s.byteOffset + d, e); return window.crypto.subtle.sign(T.Lm, this.Zl, f).then(function(g) { b.Yg(g); return b.Wb() }) } catch (b) { return Promise.reject(v.Mb(b).Fb()) } } static cp() { try { return window.crypto.subtle.generateKey(T.vh, !0, ["sign", "verify"]).then(function(a) { let b = a.privateKey; return window.crypto.subtle.exportKey("jwk", b).then(function(c) { let d = c.y, e = c.d, f = new T; f.nj = c.x; f.oj = d; f.uk = e; f.Zl = b; return f }) }) } catch (a) { return Promise.reject(v.Mb(a).Fb()) } } static bp(a) { a = a.split("."); if (4 != a.length || "idkey" != a[0]) return Promise.reject("Invalid id format"); let b = a[1], c = a[2], d = a[3]; return T.Is(b, c, d).then(function(e) { let f = new T; f.nj = b; f.oj = c; f.uk = d; f.Zl = e; return f }) } static Bs(a, b) { try { let c = new J(new DataView(a.buffer, a.byteOffset, a.byteLength), !1); c.F(); let d = c.sb(c.Sb()), e = c.sb(), f = new J(new DataView(d.buffer, d.byteOffset, d.byteLength), !1), g = f.kc(), h = f.kc(), k = f.sb(); if (k.byteLength != b.byteLength) return Promise.reject(null); a = 0; let l = k.byteLength; for (; a < l;) { let n = a++; if (k[n] != b[n]) return Promise.reject(null) } return T.Hs(g, h).then(function(n) { return window.crypto.subtle.verify(T.Lm, n, e, d) }).then(function(n) { if (!n) throw v.C(null); return g }) } catch (c) { return Promise.reject(v.Mb(c).Fb()) } } static Is(a, b, c) { try { return window.crypto.subtle.importKey("jwk", { crv: "P-256", ext: !0, key_ops: ["sign"], kty: "EC", d: c, x: a, y: b }, T.vh, !0, ["sign"]) } catch (d) { return Promise.reject(v.Mb(d).Fb()) } } static Hs(a, b) { try { return window.crypto.subtle.importKey("jwk", { crv: "P-256", ext: !0, key_ops: ["verify"], kty: "EC", x: a, y: b }, T.vh, !0, ["verify"]) } catch (c) { return Promise.reject(v.Mb(c).Fb()) } } } class gb { constructor() { this.Be = u.Oa; this.ea = new O(0, 0); this.$ = new O(0, 0) } ga(a) { var b = this.$; a.u(b.x); a.u(b.y); b = this.ea; a.u(b.x); a.u(b.y); a.m(this.Be.ba) } ma(a) { var b = this.$; b.x = a.w(); b.y = a.w(); b = this.ea; b.x = a.w(); b.y = a.w(); a = a.zf(); this.Be = 1 == a ? u.ia : 2 == a ? u.Da : u.Oa } } class ic { constructor() { function a(g) { return new sa(g, f, function(h) { if (null == h) return null; try { return la.Qh(h) } catch (k) { return null } }, function(h) { if (null == h) return null; try { return h.De() } catch (k) { return null } }) } function b(g, h) { return new sa(g, f, function(k) { return null != k ? "0" != k : h }, function(k) { return k ? "1" : "0" }) } function c(g, h) { return new sa(g, f, function(k) { let l = h; try { null != k && (l = parseFloat(k)) } catch (n) {} return l }, function(k) { return "" + k }) } function d(g, h) { return new sa(g, f, function(k) { let l = h; try { null != k && (l = Q.parseInt(k)) } catch (n) {} return l }, function(k) { return "" + k }) } function e(g, h, k) { return new sa(g, f, function(l) { return null == l ? h : ha.Xc(l, k) }, function(l) { return l }) } let f = Ac.pn(); this.qe = e("player_name", "", 25); this.Td = d("view_mode", -1); this.Oh = d("fps_limit", 0); this.xh = e("avatar", null, 2); e("rctoken", null, 1024); this.Vm = b("team_colors", !0); this.Uk = b("show_indicators", !0); this.Vi = c("sound_volume", 1); this.ye = b("sound_main", !0); this.Ui = b("sound_chat", !0); this.Nm = b("sound_highlight", !0); this.Mm = b("sound_crowd", !0); this.Yj = e("player_auth_key", null, 1024); this.Ad = d("extrapolation", 0); this.Ji = c("resolution_scale", 1); this.Km = b("show_avatars", !0); this.kk = d("chat_height", 160); this.Eh = d("chat_focus_height", 140); this.Fh = c("chat_opacity", .8); this.jk = e("chat_bg_mode", "compact", 50); this.ii = b("low_latency_canvas", !0); this.$e = a("geo"); this.af = a("geo_override"); this.Kd = function() { return new sa("player_keys", f, function(g) { if (null == g) return ta.vk(); try { return ta.Qh(g) } catch (h) { return ta.vk() } }, function(g) { try { return g.De() } catch (h) { return null } }) }() } Th() { return null != this.af.v() ? this.af.v() : null != this.$e.v() ? this.$e.v() : new la } } class jc { static h(a, b, c, d) { null != a && a(b, c, d) } } class hb { constructor() { this.S = 0; this.ze = 1 / 0; this.Ib = this.fc = 100; this.ie = this.je = 0 } ga(a) { a.m(this.ie); a.m(this.je); a.u(this.Ib); a.u(this.fc); a.u(this.ze); a.R(this.S) } ma(a) { this.ie = a.F(); this.je = a.F(); this.Ib = a.w(); this.fc = a.w(); this.ze = a.w(); this.S = a.N() } A(a) { var b = a[this.ie]; a = a[this.je]; if (null != b && null != a) { var c = b.a, d = a.a, e = c.x - d.x; c = c.y - d.y; var f = Math.sqrt(e * e + c * c); if (!(0 >= f)) { e /= f; c /= f; d = b.ca / (b.ca + a.ca); d != d && (d = .5); if (this.Ib >= this.fc) { var g = this.Ib; var h = 0 } else if (f <= this.Ib) g = this.Ib, h = 1; else if (f >= this.fc) g = this.fc, h = -1; else return; f = g - f; if (0 == 0 * this.ze) d = this.ze * f * .5, e *= d, c *= d, h = d = b.G, b = b.ca, d.x = h.x + e * b, d.y = h.y + c * b, d = b = a.G, a = a.ca, b.x = d.x + -e * a, b.y = d.y + -c * a; else { g = f * d; var k = b.a, l = b.a; k.x = l.x + e * g * .5; k.y = l.y + c * g * .5; l = k = a.a; f -= g; k.x = l.x - e * f * .5; k.y = l.y - c * f * .5; f = b.G; g = a.G; f = e * (f.x - g.x) + c * (f.y - g.y); 0 >= f * h && (d *= f, b = h = b.G, h.x = b.x - e * d, h.y = b.y - c * d, a = b = a.G, d = f - d, b.x = a.x + e * d, b.y = a.y + c * d) } } } } } class Bc { static Ym(a, b) { return new Promise(function(c, d) { let e = window.setTimeout(function() { d("Timed out") }, b); a.then(function(f) { window.clearTimeout(e); c(f) }, function(f) { window.clearTimeout(e); d(f) }) }) } } class ib { constructor(a, b) { this.f = x.Ia(ib.O); let c = x.Ba(this.f); this.nf = c.get("name"); this.Xf = c.get("admin"); this.df = c.get("kick"); this.wd = c.get("close"); let d = this; this.Xf.onclick = function() { ua.h(d.jq, d.Rb, !d.Pl) }; this.df.onclick = function() { D.h(d.ri, d.Rb) }; this.wd.onclick = function() { H.h(d.rb) }; this.Rb = a.Z; this.Wj(a.D); this.Vj(a.fb); this.Xf.disabled = !b || 0 == this.Rb; this.df.disabled = !b || 0 == this.Rb } A(a, b) { a = a.oa(this.Rb); null == a ? H.h(this.rb) : (this.ys(a), this.Xf.disabled = !b || 0 == this.Rb, this.df.disabled = !b || 0 == this.Rb) } ys(a) { this.qe != a.D && this.Wj(a.D); this.Pl != a.fb && this.Vj(a.fb) } Wj(a) { this.qe = a; this.nf.textContent = a } Vj(a) { this.Pl = a; this.Xf.textContent = a ? "Remove Admin" : "Give Admin" } } class kc { constructor() { this.Ga = 0; this.Ck = this.Dk = !1; this.Ye = 0; this.f = window.document.createElement("div"); this.f.className = "game-timer-view"; this.f.appendChild(this.Kq = this.ge("OVERTIME!", "overtime")); this.f.appendChild(this.fq = this.ge("0", "digit")); this.f.appendChild(this.eq = this.ge("0", "digit")); this.f.appendChild(this.ge(":", null)); this.f.appendChild(this.Mr = this.ge("0", "digit")); this.f.appendChild(this.Lr = this.ge("0", "digit")) } ge(a, b) { let c = window.document.createElement("span"); c.textContent = a; c.className = b; return c } cs(a) { if (a != this.Ye) { let b = a % 60, c = a / 60 | 0; this.Lr.textContent = "" + b % 10; this.Mr.textContent = "" + (b / 10 | 0) % 10; this.eq.textContent = "" + c % 10; this.fq.textContent = "" + (c / 10 | 0) % 10; this.Ye = a } this.im(); this.jm() } ds(a) { this.Ga = a; this.im(); this.jm() } im() { this.Yr(0 != this.Ga && this.Ye > this.Ga) } jm() { this.es(this.Ye < this.Ga && this.Ye > this.Ga - 30) } Yr(a) { a != this.Ck && (this.Kq.className = a ? "overtime on" : "overtime", this.Ck = a) } es(a) { a != this.Dk && (this.f.className = a ? "game-timer-view time-warn" : "game-timer-view", this.Dk = a) } } class Cc { static mn(a) { let b = []; if (null != a) { let d = Object.prototype.hasOwnProperty; for (var c in a) "__id__" != c && "hx__closures__" != c && d.call(a, c) && b.push(c) } return b } } class W { constructor(a) { W.yb || this.Za(a) } Za(a) { this.Y = 0; this.U = a } } class Ba { constructor(a) { function b() { let t = g[f]; a.Ol = e ? t : 0; c.get("spd").textContent = t + "x" } this.lg = !1; this.f = x.Ia(Ba.O); let c = x.Ba(this.f); this.Gi = a; let d = this; c.get("reset").onclick = function() { a.Hi(); d.Dl() }; let e = !0, f = 2, g = [.5, .75, 1, 2, 3]; b(); let h = c.get("playicon"); h.classList.add("icon-pause"); c.get("play").onclick = function() { e = !e; let t = h.classList; t.toggle("icon-play", !e); t.toggle("icon-pause", e); b() }; c.get("spdup").onclick = function() { f += 1; let t = g.length - 1; f > t && (f = t); b() }; c.get("spddn").onclick = function() { --f; 0 > f && (f = 0); b() }; this.os = c.get("time"); let k = c.get("timebar"); this.hr = c.get("progbar"); let l = c.get("timetooltip"), n = 0, r = a.ol; for (; n < r.length;) { let t = r[n]; ++n; let z = window.document.createElement("div"); z.className = "marker"; z.classList.add("k" + t.kind); z.style.left = 100 * t.Bj + "%"; k.appendChild(z) } k.onclick = function(t) { a.Nr((t.pageX - k.offsetLeft) / k.clientWidth * a.sh * a.Bf); d.lg || (d.lg = !0, d.Dq(), d.Dl()) }; k.onmousemove = function(t) { t = (t.pageX - k.offsetLeft) / k.clientWidth; l.textContent = Ba.pl(a.Bf * a.sh * t); return l.style.left = "calc(" + 100 * t + "% - 30px)" }; this.Mp = c.get("leave"); this.Mp.onclick = function() { H.h(d.oe) } } A() { this.os.textContent = Ba.pl(this.Gi.Ub); this.hr.style.width = 100 * this.Gi.lp() + "%"; !this.lg || 0 < this.Gi.Qd || (this.lg = !1, this.Cq()) } static pl(a) { a = a / 1E3 | 0; return (a / 60 | 0) + ":" + Y.Of(Q.Je(a % 60)) } } class Nb { constructor(a) { this.dt = a; this.cb = [] } add(a) { var b = this.cb.length; let c = 0, d = this.$d = 0; for (; d < b;) { let e = d++, f = this.cb[e]; f.index++; f.weight *= .97; this.cb[c].index < f.index && (c = e); this.$d += f.weight } b >= this.dt ? (b = this.cb[c], this.$d -= b.weight, this.cb.splice(c, 1)) : b = new lc; b.value = a; b.weight = 1; b.index = 0; this.$d += b.weight; for (a = 0; a < this.cb.length && this.cb[a].value <= b.value;) ++a; this.cb.splice(a, 0, b) } lh() { if (0 == this.cb.length) return 0; if (1 == this.cb.length) return this.cb[0].value; var a = .5 * this.$d; let b = this.cb[0].weight, c = 0; for (; c < this.cb.length - 1 && !(b >= a);) ++c, b += this.cb[c].weight; return this.cb[c].value } max() { return 0 == this.cb.length ? 0 : this.cb[this.cb.length - 1].value } } class Ta { constructor() { this.bf = this.ci = !1; this.f = x.Ia(Ta.O); let a = x.Ba(this.f); this.Lc = a.get("log"); this.hi = a.get("log-contents"); this.$a = a.get("input"); this.$a.maxLength = 140; let b = this; a.get("drag").onmousedown = function(c) { function d(h) { h.preventDefault(); m.j.kk.ha(gc(gc(e + (f - h.y)))); b.$a.blur(); b.bf = !1; b.Af() } b.f.classList.add("dragging"); let e = b.pk(), f = c.y; c.preventDefault(); let g = null; g = function(h) { b.f.classList.remove("dragging"); d(h); window.document.removeEventListener("mousemove", d, !1); window.document.removeEventListener("mouseup", g, !1) }; window.document.addEventListener("mousemove", d, !1); window.document.addEventListener("mouseup", g, !1) }; this.Fc = new Ob(a.get("autocompletebox"), function(c, d) { b.$a.value = c; b.$a.setSelectionRange(d, d) }); this.$a.onkeydown = function(c) { switch (c.keyCode) { case 9: c.preventDefault(); b.Fc.Qb.hidden ? b.$a.blur() : b.Fc.Vo(); break; case 13: null != b.El && "" != b.$a.value && b.El(b.$a.value); b.$a.value = ""; b.$a.blur(); break; case 27: b.Fc.Qb.hidden ? (b.$a.value = "", b.$a.blur()) : b.Fc.Zh(); break; case 38: b.Fc.hk(-1); break; case 40: b.Fc.hk(1) } c.stopPropagation() }; this.$a.onfocus = function() { null != b.wg && b.wg(!0); b.ci = !0; b.Af() }; this.$a.onblur = function() { null != b.wg && b.wg(!1); b.ci = !1; b.Fc.Zh(); b.Af() }; this.$a.oninput = function() { b.Fc.no(b.$a.value, b.$a.selectionStart) }; this.Af() } $m() { this.bf = !this.bf; this.Af(); if (!this.bf) { let a = this.Lc; window.setTimeout(function() { a.scrollTop = a.scrollHeight }, 200) } } Af() { let a = "" + this.pk(); this.f.style.height = a + "px" } pk() { let a = gc(m.j.kk.v()); if (this.ci) { let b = gc(m.j.Eh.v()); a <= b && (a = b) } else this.bf && (a = 0); return a } Wp(a, b, c) { let d = window.document.createElement("p"); d.className = "announcement"; d.textContent = a; 0 <= b && (d.style.color = U.nc(b)); switch (c) { case 1: case 4: d.style.fontWeight = "bold"; break; case 2: case 5: d.style.fontStyle = "italic" } switch (c) { case 3: case 4: case 5: d.style.fontSize = "12px" } this.hl(d) } hl(a) { var b = this.Lc.clientHeight; b = this.Lc.scrollTop + b - this.Lc.scrollHeight >= .5 * -b || !Ta.Dp(this.Lc); this.hi.appendChild(a); b && (this.Lc.scrollTop = this.Lc.scrollHeight); for (a = b ? 50 : 100; this.hi.childElementCount > a;) this.hi.firstElementChild.remove() } da(a, b) { let c = window.document.createElement("p"); null != b && (c.className = b); c.textContent = a; this.hl(c) } Hb(a) { this.da(a, "notice") } static Dp(a) { return a.parentElement.querySelector(":hover") == a } } class u { constructor(a, b, c, d, e, f, g, h) { this.Dg = null; this.ba = a; this.S = b; this.Lh = c; this.Ip = d; this.D = e; this.No = f; this.B = h; this.Um = new va; this.Um.hb.push(b) } } class jb { constructor() { this.f = x.Ia(jb.O); let a = x.Ba(this.f); this.Lc = a.get("log"); this.Ch = a.get("cancel") } da(a) { let b = window.document.createElement("p"); b.textContent = a; this.Lc.appendChild(b) } } class Z { constructor(a) { let b = new aa("Only humans", "", []); this.f = b.f; b.fe.style.minHeight = "78px"; let c = this; kb.Np().then(function(d) { null == Z.Kg && (Z.Kg = window.document.createElement("div"), b.fe.appendChild(Z.Kg), Z.kr = d.render(Z.Kg, { sitekey: a, callback: function(e) { D.h(Z.fm, e) }, theme: "dark" })); d.reset(Z.kr); Z.fm = function(e) { window.setTimeout(function() { D.h(c.Wa, e) }, 1E3); Z.fm = null }; b.fe.appendChild(Z.Kg) }) } } class Ca {} class lb { constructor(a) { this.ql = a.get("notice"); this.Go = a.get("notice-contents"); this.wd = a.get("notice-close"); this.hm() } hm() { let a = this; ba.Nk(m.Se + "api/notice").then(function(b) { let c = b.content; null != c && "" != c && lb.uo != c && (a.Go.innerHTML = c, a.ql.hidden = !1, a.wd.onclick = function() { lb.uo = c; return a.ql.hidden = !0 }) }) } } class mc { constructor() { this.hash = 0 } Ks(a) { let b = 0, c = a.length; for (; b < c;) this.hash = (this.hash += a[b++]) + (this.hash << 10), this.hash ^= this.hash >>> 6 } } class mb { constructor(a) { this.f = x.Ia(mb.O); x.Ba(this.f).get("features").textContent = a.join(", ") } } class Jc { static description(a) { switch (a) { case 4001: return "The room was closed."; case 4100: return "The room is full."; case 4101: return "Wrong password."; case 4102: return "You are banned from this room."; case 4103: return "Incompatible game version."; default: return "Connection closed (" + a + ")" } } } class Da {} class nb { constructor(a, b) { this.ek = a; this.fj = b; this.qc = a; this.jf = window.performance.now() } bn() { var a; null == a && (a = 1); this.A(); return a <= this.qc ? (this.qc -= a, !0) : !1 } ns() { this.A(); let a = 1 - this.qc; if (0 >= a) return 0; let b = window.performance.now(); return this.jf + a * this.fj - b } Fo(a) { let b = this.ns(); --this.qc; window.setTimeout(a, b | 0) } A() { let a = window.performance.now(), b = Math.floor((a - this.jf) / this.fj); this.jf += b * this.fj; this.qc += b; this.qc >= this.ek && (this.qc = this.ek, this.jf = a) } } class ob { constructor() { this.mg = !1; this.D = ""; this.zh = 0; this.Zf = ""; this.mb = new va; let a = window.document.createElement("canvas"); a.width = 64; a.height = 64; this.Kb = a.getContext("2d", null); this.$j = null; this.Lo() } Lo() { let a = window.document.createElement("canvas"); a.width = 160; a.height = 34; this.Ul = a.getContext("2d", null) } zs() { let a = this.Ul; a.resetTransform(); a.clearRect(0, 0, 160, 34); a.font = "26px sans-serif"; a.fillStyle = "white"; 160 < a.measureText(this.D).width ? (a.textAlign = "left", a.translate(2, 29)) : (a.textAlign = "center", a.translate(80, 29)); a.fillText(this.D, 0, 0) } Xo(a, b, c) { a.drawImage(this.Ul.canvas, 0, 0, 160, 34, b - 40, c - 34, 80, 17) } A(a, b) { if (null != a.I) { let c = m.j.Vm.v() ? b.mb[a.fa.ba] : a.fa.Um, d = null != a.Ud ? a.Ud : a.Zb, e = m.j.Km.v() && null != d; if (!ob.ro(this.mb, c) || !e && a.Nb != this.zh || e && this.Zf != d) ob.Ho(this.mb, c), e ? (this.Zf = d, this.zh = -1) : (this.Zf = "" + a.Nb, this.zh = a.Nb), this.pr(this.Zf) } this.Qo = 0 < b.M.Ta || !a.Yb ? "black" : a.Yb && 0 >= a.Zc && 0 <= a.Bc ? "white" : "black"; a.D != this.D && (this.D = a.D, this.zs()) } pr(a) { let b = this.mb.hb; if (!(1 > b.length)) { this.Kb.save(); this.Kb.translate(32, 32); this.Kb.rotate(3.141592653589793 * this.mb.sd / 128); for (var c = -32, d = 64 / b.length, e = 0; e < b.length;) this.Kb.fillStyle = U.nc(b[e++]), this.Kb.fillRect(c, -32, d + 4, 64), c += d; this.Kb.restore(); this.Kb.fillStyle = U.nc(this.mb.pd); this.Kb.textAlign = "center"; this.Kb.textBaseline = "alphabetic"; this.Kb.font = "900 34px 'Arial Black','Arial Bold',Gadget,sans-serif"; this.Kb.fillText(a, 32, 44); this.$j = this.Kb.createPattern(this.Kb.canvas, "no-repeat") } } static ro(a, b) { if (a.sd != b.sd || a.pd != b.pd) return !1; a = a.hb; b = b.hb; if (a.length != b.length) return !1; let c = 0, d = a.length; for (; c < d;) { let e = c++; if (a[e] != b[e]) return !1 } return !0 } static Ho(a, b) { a.sd = b.sd; a.pd = b.pd; a.hb = b.hb.slice(0) } } class nc {} class pb { constructor(a) { this.f = x.Ia(pb.O); var b = x.Ba(this.f); this.Ch = b.get("cancel"); this.rk = b.get("create"); this.pf = b.get("name"); this.Jl = b.get("pass"); this.ni = b.get("max-pl"); this.dn = b.get("unlisted"); this.pf.maxLength = 40; this.pf.value = a; let c = this; this.pf.oninput = function() { c.A() }; this.Jl.maxLength = 30; this.dn.onclick = function() { c.Xj(!c.en) }; this.Ch.onclick = function() { H.h(c.pi) }; this.rk.onclick = function() { if (c.Ic()) { let d = c.Jl.value; "" == d && (d = null); D.h(c.qq, { name: c.pf.value, password: d, ct: c.ni.selectedIndex + 2, ut: c.en }) } }; for (a = 2; 21 > a;) b = window.document.createElement("option"), b.textContent = "" + a++, this.ni.appendChild(b); this.ni.selectedIndex = 10; this.Xj(!1); this.A() } Xj(a) { this.en = a; this.dn.textContent = "Show in room list: " + (a ? "No" : "Yes") } Ic() { let a = this.pf.value; return 40 >= a.length ? 0 < a.length : !1 } A() { this.rk.disabled = !this.Ic() } } class la { constructor() { this.ub = ""; this.Jc = this.Mc = 0 } De() { return JSON.stringify({ lat: this.Jc, lon: this.Mc, code: this.ub }) } static Qh(a) { return la.gg(JSON.parse(a)) } static gg(a) { let b = new la; b.Jc = a.lat; b.Mc = a.lon; b.ub = a.code.toLowerCase(); return b } static kp() { return ba.Nk(m.Se + "api/geo").then(function(a) { return la.gg(a) }) } } class Pb { static h(a, b, c, d, e) { null != a && a(b, c, d, e) } } class Qb { constructor(a) { this.rd = null; this.lr = 1E4; this.Fd = !0; a.mk(); this.Sa = a.Sa; this.cd = a.cd; this.Ae = a.Ae; this.rd = a.rd; this.Wm = window.performance.now(); let b = null, c = this; b = function() { var e = c.lr - c.ms(); 0 >= e ? c.la() : (window.clearTimeout(c.Zm), e = window.setTimeout(b, e + 1E3), c.Zm = e) }; b(); this.Sa.oniceconnectionstatechange = function() { let e = c.Sa.iceConnectionState; "closed" != e && "failed" != e || c.la() }; a = 0; let d = this.cd; for (; a < d.length;) { let e = d[a]; ++a; e.onmessage = function(f) { c.Fd && (c.Wm = window.performance.now(), null != c.zg && c.zg(f.data)) }; e.onclose = function() { c.la() } } } ms() { return window.performance.now() - this.Wm } Vb(a, b) { if (this.Fd && (a = this.cd[a], "open" == a.readyState)) { b = b.Vg(); try { a.send(b) } catch (c) { b = v.Mb(c).Fb(), pa.console.log(b) } } } la() { window.clearTimeout(this.Zm); this.Fd && (this.Fd = !1, this.Sa.close(), null != this.tf && this.tf()) } } class H { static h(a) { null != a && a() } } class Rb { constructor() {} gk() { this.D = ha.Xc(this.D, 40); this.ub = ha.Xc(this.ub, 3) } ga(a) { this.gk(); a.Ua = !0; a.Xb(this.Sd); a.jn(this.D); a.jn(this.ub); a.kj(this.Jc); a.kj(this.Mc); a.m(this.Jb ? 1 : 0); a.m(this.lf); a.m(this.K); a.Ua = !1 } ma(a) { a.Ua = !0; this.Sd = a.Sb(); this.D = a.dm(); this.ub = a.dm(); this.Jc = a.zi(); this.Mc = a.zi(); this.Jb = 0 != a.F(); this.lf = a.F(); this.K = a.F(); a.Ua = !1; if (30 < this.K || 30 < this.lf) throw v.C(null); this.gk() } } class ca { constructor() { this.jc = -1; this.ic = null; this.Tb = this.Ob = this.Nc = this.Ta = 0; this.le = u.ia; this.yc = this.Cb = 0; this.va = new Sa; this.Ga = 0; this.kb = 5; this.T = null } Bp(a) { this.Ra = a; this.kb = a.kb; this.Ga = a.Ga; this.T = a.T; this.va.L = this.T.L; this.va.sa = this.T.sa; this.va.X = this.T.X; this.va.qb = this.T.qb; a = 0; let b = this.T.H; for (; a < b.length;) this.va.H.push(b[a++].Yp()); this.$k() } Wk(a) { if (a.fa == u.Oa) a.I = null; else { a.W = 0; var b = a.I; null == b && (b = new qa, a.I = b, this.va.H.push(b)); var c = this.T.Ld; b.S = 0; b.V = c.V; b.ca = c.ca; b.Ea = c.Ea; b.o = c.o; b.i = 39; b.B = a.fa.B | c.B; var d = a.fa == u.ia ? this.T.Nd : this.T.vd; 0 == d.length ? (b.a.x = a.fa.Lh * this.T.bc, b.a.y = 0) : (a = b.a, d = d[d.length - 1], a.x = d.x, a.y = d.y); d = b.G; d.x = 0; d.y = 0; b = b.ra; c = c.ra; b.x = c.x; b.y = c.y } } A(a) { if (0 < this.Ta) 120 > this.Ta && this.Ta--; else { var b = this.Ra.yt; null != b && b(); b = this.Ra.K; for (var c = 0; c < b.length;) { var d = b[c]; ++c; if (null != d.I) { 0 == (d.W & 16) && (d.Yb = !1); var e = this.T.Ld; 0 < d.Zc && d.Zc--; d.Bc < this.Ra.ne && d.Bc++; if (d.Yb && 0 >= d.Zc && 0 <= d.Bc) { for (var f = !1, g = 0, h = this.va.H; g < h.length;) { var k = h[g]; ++g; if (0 != (k.B & 64) && k != d.I) { var l = k.a, n = d.I.a, r = l.x - n.x; l = l.y - n.y; n = Math.sqrt(r * r + l * l); if (4 > n - k.V - d.I.V) { f = r / n; r = l / n; l = e.ef; var t = n = k.G; k = k.ca; n.x = t.x + f * l * k; n.y = t.y + r * l * k; t = d.I; k = -e.ff; n = l = t.G; t = t.ca; l.x = n.x + f * k * t; l.y = n.y + r * k * t; f = !0 } } } f && (null != this.Ra.wi && this.Ra.wi(d), d.Yb = !1, d.Zc = this.Ra.Hd, d.Bc -= this.Ra.gd) } f = d.W; h = g = 0; 0 != (f & 1) && --h; 0 != (f & 2) && ++h; 0 != (f & 4) && --g; 0 != (f & 8) && ++g; 0 != g && 0 != h && (f = Math.sqrt(g * g + h * h), g /= f, h /= f); f = d.I.G; k = d.Yb ? e.gf : e.Qe; f.x += g * k; f.y += h * k; d.I.Ea = d.Yb ? e.hf : e.Ea } } c = 0; d = this.va.H; e = 0; for (g = d.length; e < g;) f = e++, h = d[f], 0 != (h.B & 128) && (ca.yk[c] = f, f = ca.ul[c], h = h.a, f.x = h.x, f.y = h.y, ++c); this.va.A(a); if (0 == this.Cb) { for (a = 0; a < b.length;) c = b[a], ++a, null != c.I && (c.I.i = 39 | this.le.Ip); b = this.va.H[0].G; 0 < b.x * b.x + b.y * b.y && (this.Cb = 1) } else if (1 == this.Cb) { this.Nc += .016666666666666666; for (a = 0; a < b.length;) d = b[a], ++a, null != d.I && (d.I.i = 39); d = u.Oa; b = this.va.H; for (a = 0; a < c && (d = a++, d = this.T.qo(b[ca.yk[d]].a, ca.ul[d]), d == u.Oa);); d != u.Oa ? (this.Cb = 2, this.yc = 150, this.le = d, d == u.ia ? this.Ob++ : this.Tb++, null != this.Ra.aj && this.Ra.aj(d.Dg), null != this.Ra.nm && this.Ra.nm(d.ba)) : 0 < this.Ga && this.Nc >= 60 * this.Ga && this.Tb != this.Ob && (null != this.Ra.cj && this.Ra.cj(), this.Sm()) } else if (2 == this.Cb) this.yc--, 0 >= this.yc && (0 < this.kb && (this.Tb >= this.kb || this.Ob >= this.kb) || 0 < this.Ga && this.Nc >= 60 * this.Ga && this.Tb != this.Ob ? this.Sm() : (this.$k(), null != this.Ra.Tq && this.Ra.Tq())); else if (3 == this.Cb && (this.yc--, 0 >= this.yc && (b = this.Ra, null != b.M))) { b.M = null; a = 0; for (c = b.K; a < c.length;) d = c[a], ++a, d.I = null, d.Nb = 0; null != b.Kf && b.Kf(null) } } } Sm() { this.yc = 300; this.Cb = 3; null != this.Ra.bj && this.Ra.bj(this.Tb > this.Ob ? u.ia : u.Da) } $k() { let a = this.Ra.K; this.Cb = 0; for (var b = this.T.H, c = this.va.H, d = 0, e = this.T.Df ? b.length : 1; d < e;) { var f = d++; b[f].Vk(c[f]) } b = [0, 0, 0]; for (c = 0; c < a.length;) if (d = a[c], ++c, this.Wk(d), e = d.fa, e != u.Oa) { f = d.I.a; var g = this.T, h = b[e.ba], k = e == u.ia ? g.Nd : g.vd; 0 == k.length ? (k = h + 1 >> 1, 0 == (h & 1) && (k = -k), g = g.mc * e.Lh, h = 55 * k) : (h >= k.length && (h = k.length - 1), h = k[h], g = h.x, h = h.y); f.x = g; f.y = h; b[e.ba]++; d.Nb = b[e.ba] } } ga(a) { this.va.ga(a); a.R(this.yc); a.R(this.Cb); a.R(this.Tb); a.R(this.Ob); a.u(this.Nc); a.R(this.Ta); a.m(this.le.ba) } ma(a, b) { this.va.ma(a); this.yc = a.N(); this.Cb = a.N(); this.Tb = a.N(); this.Ob = a.N(); this.Nc = a.w(); this.Ta = a.N(); a = a.zf(); this.le = 1 == a ? u.ia : 2 == a ? u.Da : u.Oa; this.Ra = b; this.kb = b.kb; this.Ga = b.Ga; this.T = b.T; this.va.L = this.T.L; this.va.X = this.T.X; this.va.sa = this.T.sa; this.va.qb = this.T.qb } uc() { let a = ra.Cc, b = this.ic; this.jc != a && (null == b && (this.ic = b = new ca), this.jc = a, ca.zd(b, this)); return b } static zd(a, b) { a.Ra = b.Ra.uc(); a.kb = b.kb; a.Ga = b.Ga; a.va = b.va.uc(); a.yc = b.yc; a.Cb = b.Cb; a.Tb = b.Tb; a.Ob = b.Ob; a.Nc = b.Nc; a.Ta = b.Ta; a.T = b.T; a.le = b.le } } class oc { constructor(a) { function b(d) { return new Promise(function(e) { let f = a.file(d).asArrayBuffer(); c.c.decodeAudioData(f, e, function() { e(null) }) }) } this.c = new AudioContext; this.qg = this.c.createGain(); this.Di(); this.qg.connect(this.c.destination); let c = this; this.Wo = Promise.all([b("sounds/chat.wav").then(function(d) { return c.ik = d }), b("sounds/highlight.wav").then(function(d) { return c.Tk = d }), b("sounds/kick.wav").then(function(d) { return c.Hp = d }), b("sounds/goal.wav").then(function(d) { return c.np = d }), b("sounds/join.wav").then(function(d) { return c.Fp = d }), b("sounds/leave.wav").then(function(d) { return c.Lp = d }), b("sounds/crowd.ogg").then(function(d) { c.Mo = d; c.sk = new pc(c.Mo, c.c); c.sk.connect(c.qg) })]) } rm() { this.c.resume() } md(a) { let b = this.c.createBufferSource(); b.buffer = a; b.connect(this.qg); b.start() } Di() { let a = m.j.Vi.v(); m.j.ye.v() || (a = 0); this.qg.gain.value = a } } class C { static Xs() { try { return window.self != window.top } catch (a) { return !0 } } static hh(a) { return new Promise(function(b, c) { let d = window.document.createElement("img"); d.onload = function() { URL.revokeObjectURL(d.src); d.onload = null; b(d) }; d.onerror = function() { URL.revokeObjectURL(d.src); c(null) }; d.src = URL.createObjectURL(new Blob([a], { type: "image/png" })) }) } static vj(a) { C.Xs() && C.Rs(function() { Kc.vj(); let b = null == m.j.$e.v() ? la.kp().then(function(d) { m.j.$e.ha(d) }, function() {}) : Promise.resolve(null), c = ba.v("res.dat", "arraybuffer").then(function(d) { d = new JSZip(d); m.Qa = new oc(d); return Promise.all([m.Qa.Wo, C.hh(d.file("images/grass.png").asArrayBuffer()).then(function(e) { return m.pp = e }), C.hh(d.file("images/concrete.png").asArrayBuffer()).then(function(e) { return m.Bo = e }), C.hh(d.file("images/concrete2.png").asArrayBuffer()).then(function(e) { return m.zo = e }), C.hh(d.file("images/typing.png").asArrayBuffer()).then(function(e) { return m.cn = e })]) }); Promise.all([c, b]).then(function() { C.ft(a) }) }) } static Rs(a) { let b = Modernizr, c = "canvas datachannel dataview es6collections peerconnection promises websockets".split(" "), d = [], e = 0; for (; e < c.length;) { let f = c[e]; ++e; b[f] || d.push(f) } 0 != d.length ? (window.document.body.innerHTML = "", C.$g = window.document.createElement("div"), window.document.body.appendChild(C.$g), a = new mb(d), C.Na(a.f)) : a() } static ft(a) { window.document.body.innerHTML = ""; C.$g = window.document.createElement("div"); window.document.body.appendChild(C.$g); let b = null; b = function() { m.Qa.rm(); window.document.removeEventListener("click", b, !0) }; window.document.addEventListener("click", b, !0); a() } static Na(a) { null != C.vn && C.vn.remove(); null != a && (C.$g.appendChild(a), C.vn = a) } } class Ua { constructor(a) { function b(g, h) { function k() { l.className = n.Le ? "icon-ok" : "icon-cancel" } g = c.get(g); let l = g.querySelector("i"), n = { Le: h }; k(); g.onclick = function() { n.Le = !n.Le; k(); e.Cn(e.tj) }; return n } this.tj = []; this.Us = a; this.La = x.Ia(Ua.Hj); let c = x.Ba(this.La), d = new lb(c); this.Dj = c.get("refresh"); this.tn = c.get("join"); a = c.get("create"); this.Ps = c.get("count"); let e = this; a.onclick = function() { H.h(e.ht) }; c.get("changenick").onclick = function() { H.h(e.gt) }; c.get("settings").onclick = function() { H.h(e.jt) }; let f = c.get("replayfile"); f.onchange = function() { var g = f.files; if (!(1 > g.length)) { g = g.item(0); var h = new FileReader; h.onload = function() { D.h(e.it, h.result) }; h.readAsArrayBuffer(g) } }; this.Ts = b("fil-full", !0); this.kt = b("fil-pass", !0); this.Ss = b("fil-empty", !0); this.$s = c.get("listscroll"); this.mt = qb.ki(this.$s); this.wj = c.get("list"); this.Dj.onclick = function() { d.hm(); e.on() }; this.tn.onclick = function() { null != e.Yd && D.h(e.yn, e.Yd.qt) }; this.on() } on() { function a() { d.Dj.disabled = !1; d.Cn(b); return null } this.Hn(null); this.Dj.disabled = !0; x.Qf(this.wj); let b = []; this.tj = []; let c = Sb.get().then(function(e) { return b = e }, function() { return null }), d = this; Ua.lt(c).then(a, a) } Cn(a) { this.tj = a; Sb.st(this.Us, a); a.sort(function(k, l) { return k.Ze - l.Ze }); x.Qf(this.wj); let b = 0, c = 0, d = !this.Ts.Le, e = !this.kt.Le, f = !this.Ss.Le, g = this, h = 0; for (; h < a.length;) { let k = a[h]; ++h; let l = k.Ed; if (d && l.K >= l.lf) continue; if (e && l.Jb) continue; if (f && 0 == l.K) continue; let n = new rb(k); n.La.ondblclick = function() { D.h(g.yn, k) }; n.La.onclick = function() { g.Hn(n) }; this.wj.appendChild(n.La); b += l.K; ++c } this.Ps.textContent = "" + b + " players in " + c + " rooms"; this.mt.update() } Hn(a) { null != this.Yd && this.Yd.La.classList.remove("selected"); this.Yd = a; null != this.Yd && this.Yd.La.classList.add("selected"); this.tn.disabled = null == this.Yd } static lt(a) { let b = new Promise(function(c, d) { window.setTimeout(function() { d(null) }, 5E3) }); return Promise.race([b, a ]) } } class da { constructor(a, b) { let c = [], d = 0; for (; d < a.length;) c.push(this.Zp(a[d++], b)); this.kf = c } ep() { return 2.31 + .1155 * (this.kf.length - 1) } Rc(a, b) { b /= 2.31; let c = 0; a.imageSmoothingEnabled = !0; let d = 0, e = this.kf; for (; d < e.length;) { let g = e[d]; ++d; var f = b - .05 * c; let h = da.Kn.eval(f), k = 35 * -(this.kf.length - 1) + 70 * c; f = 180 * da.Ln.eval(f); a.globalAlpha = h; a.drawImage(g, f * (0 != (c & 1) ? -1 : 1) - .5 * g.width, k - .5 * g.height); a.globalAlpha = 1; ++c } a.imageSmoothingEnabled = !1 } Br(a) { let b = 0; a.imageSmoothingEnabled = !0; let c = 0, d = this.kf; for (; c < d.length;) { let e = d[c]; ++c; a.drawImage(e, .5 * -e.width, 35 * -(this.kf.length - 1) + 70 * b - .5 * e.height); ++b } a.imageSmoothingEnabled = !1 } nc(a) { return "rgba(" + [(a & 16711680) >>> 16, (a & 65280) >>> 8, a & 255].join() + ",255)" } Zp(a, b) { let c = window.document.createElement("canvas"), d = c.getContext("2d", null); d.font = "900 70px 'Arial Black','Arial Bold',Gadget,sans-serif"; c.width = Math.ceil(d.measureText(a).width) + 7; c.height = 90; d.font = "900 70px 'Arial Black','Arial Bold',Gadget,sans-serif"; d.textAlign = "left"; d.textBaseline = "middle"; d.fillStyle = "black"; d.fillText(a, 7, 52); d.fillStyle = this.nc(b); d.fillText(a, 0, 45); return c } } class B { static Xp() { C.vj(function() { B.Ek(B.er) }); B.Op() } static Op() { let a = m.j.Yj.v(); null == a ? T.cp().then(function(b) { B.Xe = b; m.j.Yj.ha(b.ss()) }).catch(function() {}) : T.bp(a).then(function(b) { return B.Xe = b }).catch(function() {}) } static gp() { let a = Ac.pn(); return null != a ? null != a.getItem("crappy_router") : !1 } static Ek(a) { let b = new sb(m.j.qe.v()); b.Bl = function(c) { m.j.qe.ha(c); m.Qa.rm(); a() }; C.Na(b.f); b.Db.focus() } static Fk(a, b) { a = new Z(a); a.Wa = b; C.Na(a.f) } static So(a, b) { function c() { let f = new Va("Failed", null); f.Wa = function() { B.xb() }; C.Na(f.f) } function d(f) { f = f.sitekey; if (null == f) throw v.C(null); B.Fk(f, function(g) { e(a, g) }) } C.Na((new aa("Connecting", "Connecting...", [])).f); let e = null; e = function(f, g) { ba.Yl(m.Se + "api/client", "room=" + f + "&rcr=" + g, ba.Lj).then(function(h) { switch (h.action) { case "connect": h = h.token; if (null == h) throw v.C(null); b(h); break; case "recaptcha": d(h); break; default: throw v.C(null); } }).catch(function() { c() }) }; e(a, "") } static er() { let a = Dc.v(), b = a.get("c"), c = a.get("p"); a.get("v"); null != b ? null != c ? B.Mh(b) : B.eg(b) : B.xb() } static xb() { let a = new Ua(m.j.Th()); C.Na(a.La); a.yn = function(b) { if (9 != b.Ed.Sd) { let c; 9 > b.Ed.Sd ? (b = "Old version room", c = "The room is running an older version, an update must have happened recently.") : (b = "New version", c = "The room is running a new version of haxball, refresh the site to update."); let d = new aa(b, c, ["Ok"]); C.Na(d.f); d.Wa = function() { C.Na(a.La); d.Wa = null } } else b.Ed.Jb ? B.Mh(b.ba) : B.eg(b.ba) }; a.ht = function() { B.To() }; a.gt = function() { B.Ek(B.xb) }; a.jt = function() { B.Hk() }; a.it = function(b) { B.Uo(b) } } static Hk() { let a = new ma(!0), b = window.document.createElement("div"); b.className = "view-wrapper"; b.appendChild(a.f); C.Na(b); a.rb = function() { B.xb() }; a.lq = function() { let c = new tb, d = window.document.createElement("div"); d.className = "view-wrapper"; d.appendChild(c.f); C.Na(d); c.rb = function() { B.Hk() } } } static mi(a, b) { return "" + pa.location.origin + "/play?c=" + a + (b ? "&p=1" : "") } static To() { let a = m.j.qe.v(), b = new pb("" + a + "'s room"); C.Na(b.f); b.pi = function() { B.xb() }; b.qq = function(c) { function d() { if (!c.ut) { var t = new Rb; t.Sd = 9; t.D = g.lc; t.K = g.K.length; t.lf = k.tg + 1; t.ub = f.ub; t.Jb = null != k.Jb; t.Jc = f.Jc; t.Mc = f.Mc; var z = A.ka(16); t.ga(z); k.Si(z.Vg()) } } C.Na((new aa("Creating room", "Connecting...", [])).f); let e = null, f = m.j.Th(), g = new wa; g.lc = c.name; let h = new xa; h.D = a; h.fb = !0; h.country = f.ub; h.Zb = m.j.xh.v(); g.K.push(h); let k = new Tb({ iceServers: m.kg, yj: m.Se + "api/host", state: g, version: 9 }); k.tg = c.ct - 1; k.Jb = c.password; d(); let l = new Ea(k), n = !1; k.vf = function(t, z) { B.Fk(t, function(K) { z(K); C.Na(l.l.f); n = !0 }) }; let r = window.setInterval(function() { k.ta(Fa.qa(k)) }, 3E3); k.yl = function(t) { null != g.oa(t) && k.ta(na.qa(t, "Bad actor", !1)) }; k.oq = function(t, z) { let K = z.kc(); if (25 < K.length) throw v.C("name too long"); let N = z.kc(); if (3 < N.length) throw v.C("country too long"); z = z.Ab(); if (null != z && 2 < z.length) throw v.C("avatar too long"); k.ta(Ga.qa(t, K, N, z)); d() }; k.pq = function(t) { null != g.oa(t) && k.ta(na.qa(t, null, !1)) }; k.yg = function(t) { e = t; l.Ng = B.mi(t, null != k.Jb); n || (n = !0, C.Na(l.l.f)) }; l.Rh.vq = function(t, z, K, N) { k.Yo(t, z, K, N) }; l.Rh.wq = function() { d() }; l.l.oe = function() { k.la(); l.la(); B.xb(); window.clearInterval(r) }; l.dg.Rg = function(t) { k.Jb = t; d(); null != e && (l.Ng = B.mi(e, null != k.Jb)) }; l.dg.Hm = function(t) { k.Ri(t) }; l.dg.ee = M(k, k.ee) } } static Mh(a) { let b = new ub; C.Na(b.f); b.Wa = function(c) { null == c ? B.xb() : B.eg(a, c) } } static Uo(a) { try { let b = new qc(new Ub(new Uint8Array(a), new wa, 3)); b.te.oe = function() { b.la(); B.xb() }; C.Na(b.l.f) } catch (b) { let c = v.Mb(b).Fb(); if (c instanceof Vb) a = new aa("Incompatible replay version", "The replay file is of a different version", ["Open player", "Cancel"]), C.Na(a.f), a.Wa = function(d) { 0 == d ? (d = window.top.location, window.top.open(d.protocol + "//" + d.hostname + (null != d.port ? ":" + d.port : "") + "/replay?v=" + c.Sd, "_self")) : B.xb() }; else { let d = new aa("Replay error", "Couldn't load the file.", ["Ok"]); C.Na(d.f); d.Wa = function() { d.Wa = null; B.xb() } } } } static eg(a, b, c) { try { let d = B.gp(), e = new wa, f = A.ka(); f.oc(m.j.qe.v()); f.oc(m.j.Th().ub); f.Eb(m.j.xh.v()); let g = new Ha(a, { iceServers: m.kg, yj: m.Gs, state: e, version: 9, wt: f.Vg(), password: b, Dn: d, Jn: c, Qs: B.Xe }), h = new jb; h.da("Connecting to master..."); h.Ch.onclick = function() { g.Jd = null; g.uf = null; g.la(); B.xb() }; C.Na(h.f); let k = function(r, t) { r = new Va(r, t); r.Wa = function() { B.xb() }; C.Na(r.f) }, l = function() { let r = new aa("Connection Failed", "", ["Ok"]); r.fe.innerHTML = "

Failed to connect to room host.

If this problem persists please see the troubleshooting guide.

"; r.Wa = function() { B.xb() }; C.Na(r.f) }, n = function() { let r = new Ea(g); g.Cl = function(t) { r.l.Jf.Zr(g.Gg.lh() | 0, g.Gg.max() | 0); r.l.Jf.Ml.Vn(t) }; r.Ng = B.mi(a, !1); C.Na(r.l.f); r.l.oe = function() { g.Jd = null; g.la(); r.la(); B.xb() }; g.Jd = function() { g.Jd = null; r.la(); let t = null == r.Od ? null : r.Od.stop(); k(g.zk, t) } }; g.uf = function(r) { g.uf = null; g.Jd = null; switch (r.pb) { case 1: l(); break; case 2: switch (r.reason) { case 4004: B.So(a, function(t) { B.eg(a, b, t) }); break; case 4101: null == b ? B.Mh(a) : k(Ha.Gh(r), null); break; default: k(Ha.Gh(r), null) } break; default: k(Ha.Gh(r), null) } }; g.Jd = function(r) { switch (r) { case 1: h.da("Connecting to peer..."); break; case 2: h.da("Awaiting state..."); break; case 3: n() } }; g.Aq = function() { h.da("Trying reverse connection...") } } catch (d) { c = v.Mb(d).Fb(), pa.console.log(c), c = new aa("Unexpected Error", "", []), c.fe.innerHTML = "An error ocurred while attempting to join the room.

This might be caused by a browser extension, try disabling all extensions and refreshing the site.

The error has been printed to the inspector console.", C.Na(c.f) } } } class G { constructor() { this.Dd = 0; this.B = 32; this.i = 63; this.o = 1; this.a = new O(0, 0) } ga(a) { let b = this.a; a.u(b.x); a.u(b.y); a.u(this.o); a.R(this.i); a.R(this.B) } ma(a) { let b = this.a; b.x = a.w(); b.y = a.w(); this.o = a.w(); this.i = a.N(); this.B = a.N() } } class pc { constructor(a, b) { this.rh = null; this.tt = .025; this.He = this.oh = this.Sf = 0; this.eh = b.createGain(); this.eh.gain.value = 0; b = b.createBufferSource(); b.buffer = a; b.connect(this.eh); b.loop = !0; b.start() } update() { var a = window.performance.now(); let b = a - this.un; this.un = a; this.He += (this.oh - this.He) * this.tt; this.Sf -= b; 0 >= this.Sf && (this.Sf = this.oh = 0); 0 >= this.oh && .05 > this.He && (window.clearInterval(this.rh), this.rh = null, this.He = 0); a = m.j.Mm.v() ? this.He : 0; this.eh.gain.value = a } Ej(a) { this.oh = a; this.Sf = 166.66666666666666; let b = this; null == this.rh && (this.rh = window.setInterval(function() { b.update() }, 17), this.un = window.performance.now()) } connect(a) { this.eh.connect(a) } vt(a) { let b = a.M; if (null != b) if (2 == b.Cb) 0 >= b.Ta && this.Ej(1); else if (1 == b.Cb) { let e = b.va.H[0], f = null, g = null, h = null, k = 0, l = null, n = null, r = null, t = 0, z = u.ia.Lh, K = 0; for (a = a.K; K < a.length;) { let N = a[K]; ++K; if (null == N.I) continue; var c = N.I.a; let vb = e.a; var d = c.x - vb.x; c = c.y - vb.y; d = d * d + c * c; if (N.fa == u.ia) { if (null == f || f.a.x * z < N.I.a.x * z) f = N.I; if (null == g || g.a.x * z > N.I.a.x * z) g = N.I; if (null == h || d < k) h = N.I, k = d } else if (N.fa == u.Da) { if (null == l || l.a.x * z < N.I.a.x * z) l = N.I; if (null == n || n.a.x * z > N.I.a.x * z) n = N.I; if (null == r || d < t) r = N.I, t = d } } null != n && null != g && 0 >= b.Ta && (h.a.x > n.a.x && e.a.x > n.a.x && 20 < e.a.x && this.Ej(.3), r.a.x < g.a.x && e.a.x < g.a.x && -20 > e.a.x && this.Ej(.3)) } } } class wb { constructor() { this.lb = null; this.f = x.Ia(wb.O); let a = x.Ba(this.f), b = this; a.get("cancel").onclick = function() { H.h(b.pi) }; this.ui = a.get("pick"); this.xk = a.get("delete"); this.Lk = a.get("export"); let c = a.get("list"), d = a.get("file"); this.Xg(); this.ui.onclick = function() { null != b.lb && b.lb.Zd().then(function(e) { D.h(b.Cg, e) }) }; this.xk.onclick = function() { if (null != b.lb) { var e = b.lb.ln; null != e && (b.lb.La.remove(), b.lb = null, e(), b.Xg()) } }; this.Lk.onclick = function() { null != b.lb && b.lb.Zd().then(function(e) { Wb.Kr(e.De(), e.D + ".hbs") }) }; this.xi(c); this.am = qb.ki(c); window.setTimeout(function() { b.am.update() }, 0); d.onchange = function() { var e = d.files; if (!(1 > e.length)) { e = e.item(0); var f = new FileReader; f.onload = function() { try { var g = f.result; let h = new q; h.el(g); D.h(b.Cg, h) } catch (h) { g = v.Mb(h).Fb(), g instanceof SyntaxError ? D.h(b.si, "SyntaxError in line: " + Q.Je(g.lineNumber)) : g instanceof Wa ? D.h(b.si, g.cq) : D.h(b.si, "Error loading stadium file.") } }; f.readAsText(e) } } } Xg() { this.ui.disabled = null == this.lb; this.xk.disabled = null == this.lb || null == this.lb.ln; this.Lk.disabled = null == this.lb } ll(a, b, c) { let d = window.document.createElement("div"); d.textContent = a; d.className = "elem"; null != c && d.classList.add("custom"); let e = { La: d, Zd: b, ln: c }, f = this; d.onclick = function() { null != f.lb && f.lb.La.classList.remove("selected"); f.lb = e; d.classList.add("selected"); f.Xg() }; d.ondblclick = function() { f.lb = e; f.Xg(); return f.ui.onclick() }; return d } xi(a) { let b = q.Sh(), c = 0; for (; c < b.length;) { let e = b[c]; ++c; a.appendChild(this.ll(e.D, function() { return Promise.resolve(e) }, null)) } let d = this; xb.getAll().then(function(e) { let f = 0; for (; f < e.length;) { let g = e[f]; ++f; let h = g.id; a.appendChild(d.ll(g.name, function() { return xb.get(h) }, function() { return xb.delete(h) })) } d.am.update() }) } } class sb { constructor(a) { function b() { d.Ic() && null != d.Bl && d.Bl(d.Db.value) } this.f = x.Ia(sb.O); let c = x.Ba(this.f); this.Db = c.get("input"); this.rf = c.get("ok"); let d = this; this.Db.maxLength = 25; this.Db.value = a; this.Db.oninput = function() { d.A() }; this.Db.onkeydown = function(e) { 13 == e.keyCode && b() }; this.rf.onclick = b; this.A() } Ic() { let a = this.Db.value; return 25 >= a.length ? 0 < a.length : !1 } A() { this.rf.disabled = !this.Ic() } } class qa { constructor() { this.jc = -1; this.ic = null; this.Il = 0; this.i = this.B = 63; this.dk = 0; this.S = 16777215; this.Ea = .99; this.ca = 1; this.o = .5; this.V = 10; this.ra = new O(0, 0); this.G = new O(0, 0); this.a = new O(0, 0) } ga(a) { var b = this.a; a.u(b.x); a.u(b.y); b = this.G; a.u(b.x); a.u(b.y); b = this.ra; a.u(b.x); a.u(b.y); a.u(this.V); a.u(this.o); a.u(this.ca); a.u(this.Ea); a.tb(this.S); a.R(this.i); a.R(this.B) } ma(a) { var b = this.a; b.x = a.w(); b.y = a.w(); b = this.G; b.x = a.w(); b.y = a.w(); b = this.ra; b.x = a.w(); b.y = a.w(); this.V = a.w(); this.o = a.w(); this.ca = a.w(); this.Ea = a.w(); this.S = a.jb(); this.i = a.N(); this.B = a.N() } vo(a) { var b = this.a, c = a.a, d = b.x - c.x; b = b.y - c.y; var e = a.V + this.V, f = d * d + b * b; if (0 < f && f <= e * e) { f = Math.sqrt(f); d /= f; b /= f; c = this.ca / (this.ca + a.ca); e -= f; f = e * c; var g = this.a, h = this.a; g.x = h.x + d * f; g.y = h.y + b * f; h = g = a.a; e -= f; g.x = h.x - d * e; g.y = h.y - b * e; e = this.G; f = a.G; e = d * (e.x - f.x) + b * (e.y - f.y); 0 > e && (e *= this.o * a.o + 1, c *= e, g = f = this.G, f.x = g.x - d * c, f.y = g.y - b * c, a = f = a.G, c = e - c, f.x = a.x + d * c, f.y = a.y + b * c) } } wo(a) { if (0 != 0 * a.vb) { var b = a.$.a; var c = a.ea.a; var d = c.x - b.x; var e = c.y - b.y, f = this.a; var g = f.x - c.x; c = f.y - c.y; f = this.a; if (0 >= (f.x - b.x) * d + (f.y - b.y) * e || 0 <= g * d + c * e) return; d = a.ya; b = d.x; d = d.y; g = b * g + d * c } else { d = a.he; g = this.a; b = g.x - d.x; d = g.y - d.y; g = a.Sg; c = a.Tg; if ((0 < g.x * b + g.y * d && 0 < c.x * b + c.y * d) == 0 >= a.vb) return; c = Math.sqrt(b * b + d * d); if (0 == c) return; g = c - a.tk; b /= c; d /= c } c = a.Hc; if (0 == c) 0 > g && (g = -g, b = -b, d = -d); else if (0 > c && (c = -c, g = -g, b = -b, d = -d), g < -c) return; g >= this.V || (g = this.V - g, e = c = this.a, c.x = e.x + b * g, c.y = e.y + d * g, g = this.G, g = b * g.x + d * g.y, 0 > g && (g *= this.o * a.o + 1, c = a = this.G, a.x = c.x - b * g, a.y = c.y - d * g)) } uc() { let a = ra.Cc, b = this.ic; this.jc != a && (null == b && (this.ic = b = new qa), this.jc = a, qa.zd(b, this)); return b } static zd(a, b) { a.V = b.V; a.o = b.o; a.ca = b.ca; a.Ea = b.Ea; a.S = b.S; a.dk = b.dk; a.i = b.i; a.B = b.B; var c = a.a, d = b.a; c.x = d.x; c.y = d.y; c = a.G; d = b.G; c.x = d.x; c.y = d.y; a = a.ra; b = b.ra; a.x = b.x; a.y = b.y } } class rc { constructor() { this.Wc = 0; this.eb = []; this.ls = new da(["Time is", "Up!"], 16777215); this.nr = new da(["Red is", "Victorious!" ], 15035990); this.mr = new da(["Red", "Scores!"], 15035990); this.io = new da(["Blue is", "Victorious!"], 625603); this.ho = new da(["Blue", "Scores!"], 625603); this.Mq = new da(["Game", "Paused"], 16777215) } Pa(a) { this.eb.push(a) } to() { this.eb = []; this.Wc = 0 } A(a) { 0 < this.eb.length && (this.Wc += a) > this.eb[0].ep() && (this.Wc = 0, this.eb.shift()) } Rc(a) { 0 < this.eb.length && this.eb[0].Rc(a, this.Wc) } } class yb { constructor(a) { this.f = x.Ia(yb.O); let b = x.Ba(this.f); this.nf = b.get("title"); this.Bi = b.get("reason"); this.ao = b.get("ban-btn"); this.co = b.get("ban-text"); this.df = b.get("kick"); this.wd = b.get("close"); let c = this; this.ao.onclick = function() { c.Sj(!c.ak) }; this.wd.onclick = function() { H.h(c.rb) }; this.df.onclick = function() { jc.h(c.ri, c.Rb, c.Bi.value, c.ak) }; this.Bi.onkeydown = function(d) { return d.stopPropagation() }; this.Bi.maxLength = 100; this.Rb = a.Z; this.nf.textContent = "Kick " + a.D; this.Sj(!1) } Sj(a) { this.ak = a; this.co.textContent = a ? "Yes" : "No" } } class ua { static h(a, b, c) { null != a && a(b, c) } } class ya { constructor(a) { this.tl = this.sl = this.vl = null; this.ib = new zb; this.od = !1; this.Jf = new Ab; this.Ka = new Ta; this.Xa = new Bb(a); this.ib.Rb = a; this.f = x.Ia(ya.O); a = x.Ba(this.f); this.ts = a.get("top-section"); this.yf = a.get("popups"); this.yf.style.display = "none"; a.get("gameplay").appendChild(this.ib.f); x.replaceWith(a.get("chatbox"), this.Ka.f); x.replaceWith(a.get("stats"), this.Jf.f); this.oi = a.get("menu"); let b = this; this.oi.onclick = function() { b.xe(!b.od); b.oi.blur() }; new sc(a.get("sound")); a.get("settings").onclick = function() { let c = new ma; c.rb = function() { b.ab(null) }; b.ab(c.f) }; this.Xa.oe = function() { let c = new Cb; c.rb = function(d) { b.ab(null); d && H.h(b.oe) }; b.ab(c.f) }; this.Xa.Fq = function() { let c = new wb; c.pi = function() { b.ab(null) }; c.Cg = function(d) { D.h(b.Cg, d); b.ab(null) }; c.si = function(d) { d = new aa("Error loading stadium", d, ["Ok"]); d.Wa = function() { b.ab(null) }; b.ab(d.f) }; b.ab(c.f) } } Tr(a) { this.tl != a && (this.tl = a, this.f.style.setProperty("--chat-opacity", "" + a)) } Sr(a) { this.sl != a && (this.sl = a, this.f.classList.toggle("chat-bg-full", a)) } bs(a) { this.vl != a && (this.vl = a, this.ib.f.classList.toggle("restricted", a)) } A(a) { null == a.U.M && this.xe(!0); this.od && this.Xa.A(a.U, a.U.oa(a.xc)); H.h(this.Xl); this.oi.disabled = null == a.U.M; let b = m.j.Td.v(), c = this.ib.gb; c.ue = m.j.Ji.v(); this.Tr(m.j.Fh.v()); this.Sr("full" == m.j.jk.v()); this.bs(0 == b); let d = this.Ka.f.getBoundingClientRect().height; 0 == b ? (c.Ig = 1, c.Md = 0, c.Wg = 0, this.ib.gb.Ah = 0, this.ib.f.style.paddingBottom = d + "px") : (c.Wg = 35, 0 >= b ? c.Md = 610 : (c.Md = 0, c.Ig = 1 + .25 * (b - 1)), this.ib.gb.Ah = d * window.devicePixelRatio, this.ib.f.style.paddingBottom = "0"); a = a.hg(); this.ib.A(a); m.Qa.sk.vt(a) } xe(a) { this.od != a && (this.od = a, this.f.classList.toggle("showing-room-view", this.od), this.od ? this.ts.appendChild(this.Xa.f) : this.Xa.f.remove()) } Zk() { return null != ya.Sq } ab(a, b) { x.Qf(this.yf); ya.Sq = a; null != a ? (this.yf.style.display = "flex", this.yf.appendChild(a), this.Xl = b) : (this.yf.style.display = "none", this.Xl = null) } } class ub { constructor() { this.f = x.Ia(ub.O); let a = x.Ba(this.f); this.Db = a.get("input"); this.rf = a.get("ok"); let b = this; a.get("cancel").onclick = function() { null != b.Wa && b.Wa(null) }; this.Db.maxLength = 30; this.Db.oninput = function() { b.A() }; this.Db.onkeydown = function(c) { 13 == c.keyCode && b.Ic() && null != b.Wa && b.Wa(b.Db.value) }; this.rf.onclick = function() { b.Ic() && null != b.Wa && b.Wa(b.Db.value) }; this.A() } Ic() { let a = this.Db.value; return 30 >= a.length ? 0 < a.length : !1 } A() { this.rf.disabled = !this.Ic() } } class Xb {} class tc { constructor(a) { this.rl = new uc(15); this.$h = 0; this.Pj = new Map; this.mp = new nb(100, 16); this.Lg = !1; this.zb = 0; this.ua = a; a = A.ka(8); a.u(Math.random()); this.Ve = a.Wb() } Vb(a, b) { null == b && (b = 0); this.ua.Vb(b, a) } } class Xa { constructor() { this.list = [] } rn(a) { let b = 0, c = a.ob, d = a.Dc, e = 0, f = this.list; for (; e < f.length;) { var g = f[e]; ++e; let h = g.ob; if (h > c) break; if (h == c) { g = g.Dc; if (g > d) break; g == d && ++d }++b } a.Dc = d; this.list.splice(b, 0, a) } nt(a) { let b = 0, c = 0, d = this.list; for (; c < d.length && !(d[c++].ob >= a);) ++b; this.list.splice(0, b) } Ns(a, b) { let c = this.list; for (; 0 < c.length;) c.pop(); Xa.et(a.list, b.list, this.list) } ot(a) { let b = 0, c = this.list, d = 0, e = c.length; for (; d < e;) { let f = c[d++]; f.Fe != a && (c[b] = f, ++b) } for (; c.length > b;) c.pop() } Os(a) { let b = 0, c = 0, d = this.list; for (; c < d.length && !(d[c++].ob >= a);) ++b; return b } static et(a, b, c) { if (0 == a.length) for (a = 0; a < b.length;) c.push(b[a++]); else if (0 == b.length) for (b = 0; b < a.length;) c.push(a[b++]); else { let d = 0, e = a.length, f = 0, g = b.length; for (;;) { let h = a[d], k = b[f]; if (h.ob <= k.ob) { if (c.push(h), ++d, d >= e) { for (; f < g;) c.push(b[f++]); break } } else if (c.push(k), ++f, f >= g) { for (; d < e;) c.push(a[d++]); break } } } } } class Ec { constructor(a, b) { this.x = a; this.y = b } } class va { constructor() { this.pd = 16777215; this.hb = [] } ga(a) { a.m(this.sd); a.R(this.pd); a.m(this.hb.length); let b = 0, c = this.hb; for (; b < c.length;) a.R(c[b++]) } ma(a) { this.sd = a.F(); this.pd = a.N(); let b = a.F(); if (3 < b) throw v.C("too many"); this.hb = []; let c = 0; for (; c < b;) ++c, this.hb.push(a.N()) } } class q { constructor() { this.L = []; this.X = []; this.sa = []; this.vc = []; this.H = []; this.qb = []; this.Nd = []; this.vd = []; this.Ld = new Yb; this.Kh = 255; this.Ue = this.mf = 0; this.$f = !0; this.Df = !1 } rg() { let a = new za; a.S = 16777215; a.i = 63; a.B = 193; a.V = 10; a.Ea = .99; a.ca = 1; a.o = .5; return a } ga(a) { a.m(this.Kh); if (!this.cf()) { a.Eb(this.D); a.R(this.ud); a.u(this.de); a.u(this.ce); a.u(this.bd); a.u(this.Gc); a.u(this.Te); a.R(this.td); a.u(this.bc); a.u(this.sc); a.u(this.mc); this.Ld.ga(a); a.Xb(this.mf); a.m(this.Ue); a.m(this.$f ? 1 : 0); a.m(this.Df ? 1 : 0); a.m(this.L.length); for (var b = 0, c = this.L.length; b < c;) { var d = b++; let e = this.L[d]; e.Dd = d; e.ga(a) } a.m(this.X.length); b = 0; for (c = this.X; b < c.length;) c[b++].ga(a); a.m(this.sa.length); b = 0; for (c = this.sa; b < c.length;) c[b++].ga(a); a.m(this.vc.length); b = 0; for (c = this.vc; b < c.length;) c[b++].ga(a); a.m(this.H.length); b = 0; for (c = this.H; b < c.length;) c[b++].ga(a); a.m(this.qb.length); b = 0; for (c = this.qb; b < c.length;) c[b++].ga(a); a.m(this.Nd.length); b = 0; for (c = this.Nd; b < c.length;) d = c[b], ++b, a.u(d.x), a.u(d.y); a.m(this.vd.length); b = 0; for (c = this.vd; b < c.length;) d = c[b], ++b, a.u(d.x), a.u(d.y) } } vs(a) { function b() { let f = [], g = a.F(), h = 0; for (; h < g;) { ++h; let k = new O(0, 0); k.x = a.w(); k.y = a.w(); f.push(k) } return f } this.D = a.Ab(); this.ud = a.N(); this.de = a.w(); this.ce = a.w(); this.bd = a.w(); this.Gc = a.w(); this.Te = a.w(); this.td = a.N(); this.bc = a.w(); this.sc = a.w(); this.mc = a.w(); this.Ld.ma(a); this.mf = a.Sb(); this.Ue = a.F(); this.$f = 0 != a.F(); this.Df = 0 != a.F(); this.L = []; for (var c = a.F(), d = 0; d < c;) { var e = new G; e.ma(a); e.Dd = d++; this.L.push(e) } this.X = []; c = a.F(); for (d = 0; d < c;) ++d, e = new I, e.ma(a, this.L), this.X.push(e); this.sa = []; c = a.F(); for (d = 0; d < c;) ++d, e = new R, e.ma(a), this.sa.push(e); this.vc = []; c = a.F(); for (d = 0; d < c;) ++d, e = new gb, e.ma(a), this.vc.push(e); this.H = []; c = a.F(); for (d = 0; d < c;) ++d, e = new za, e.ma(a), this.H.push(e); this.qb = []; c = a.F(); for (d = 0; d < c;) ++d, e = new hb, e.ma(a), this.qb.push(e); this.Nd = b(); this.vd = b(); this.re(); if (!this.gn()) throw v.C(new Wa("Invalid stadium")); } gn() { return 0 >= this.H.length || 0 > this.Gc || 0 > this.bd || 0 > this.Ld.V ? !1 : !0 } re() { let a = 0, b = this.X; for (; a < b.length;) b[a++].re() } cf() { return 255 != this.Kh } me(a, b) { a = a[b]; return null != a ? w.J(a, E) : 0 } Vp(a) { a = a.canBeStored; return null != a ? w.J(a, Fc) : !0 } De() { return JSON.stringify(this.rs()) } rs() { if (!this.$f) throw v.C(0); let a = {}; for (var b = 0, c = [], d = 0, e = this.L; d < e.length;) { var f = e[d]; ++d; f.Dd = b++; c.push(q.Ds(f)) } d = new I; b = []; e = 0; for (f = this.X; e < f.length;) b.push(q.Or(f[e++], d)); d = []; e = 0; for (f = this.sa; e < f.length;) d.push(q.Oq(f[e++])); e = []; f = 0; for (var g = this.vc; f < g.length;) e.push(q.op(g[f++])); f = q.Rq(this.Ld); var h = new za; g = []; for (var k = 0, l = this.H; k < l.length;) g.push(q.Ro(l[k++], h)); h = []; k = 0; for (l = this.qb; k < l.length;) h.push(q.Gp(l[k++])); k = []; l = 0; for (var n = this.Nd; l < n.length;) { var r = n[l]; ++l; k.push([r.x, r.y]) } l = []; n = 0; for (r = this.vd; n < r.length;) { let t = r[n]; ++n; l.push([t.x, t.y]) } c = { name: this.D, width: this.bc, height: this.sc, bg: a, vertexes: c, segments: b, planes: d, goals: e, discs: g, playerPhysics: f, ballPhysics: "disc0" }; q.pa(c, "maxViewWidth", this.mf, 0); q.pa(c, "cameraFollow", 1 == this.Ue ? "player" : "", ""); q.pa(c, "spawnDistance", this.mc, 200); 0 != h.length && (c.joints = h); 0 != k.length && (c.redSpawnPoints = k); 0 != l.length && (c.blueSpawnPoints = l); q.pa(c, "kickOffReset", this.Df ? "full" : "partial", "partial"); switch (this.ud) { case 1: b = "grass"; break; case 2: b = "hockey"; break; default: b = "none" } q.pa(a, "type", b, "none"); q.pa(a, "width", this.de, 0); q.pa(a, "height", this.ce, 0); q.pa(a, "kickOffRadius", this.bd, 0); q.pa(a, "cornerRadius", this.Gc, 0); q.Eg(a, this.td, 7441498); q.pa(a, "goalLine", this.Te, 0); return c } el(a) { function b(h) { let k = w.J(h[0], E); h = w.J(h[1], E); null == h && (h = 0); null == k && (k = 0); return new O(k, h) } function c(h, k, l, n) { null == n && (n = !1); var r = d[k]; if (!n || null != r) if (n = w.J(r, Array), null != n) for (r = 0; r < n.length;) { let t = n[r]; ++r; try { q.Yn(t, f), h.push(l(t)) } catch (z) { throw v.C(new Wa('Error in "' + k + '" index: ' + h.length)); } } } let d = JSON5.parse(a); this.L = []; this.X = []; this.sa = []; this.vc = []; this.H = []; this.qb = []; this.D = w.J(d.name, String); this.bc = w.J(d.width, E); this.sc = w.J(d.height, E); this.mf = this.me(d, "maxViewWidth") | 0; "player" == d.cameraFollow && (this.Ue = 1); this.mc = 200; a = d.spawnDistance; null != a && (this.mc = w.J(a, E)); a = d.bg; let e; switch (a.type) { case "grass": e = 1; break; case "hockey": e = 2; break; default: e = 0 } this.ud = e; this.de = this.me(a, "width"); this.ce = this.me(a, "height"); this.bd = this.me(a, "kickOffRadius"); this.Gc = this.me(a, "cornerRadius"); this.td = 7441498; null != a.color && (this.td = q.pg(a.color)); this.Te = this.me(a, "goalLine"); this.$f = this.Vp(d); this.Df = "full" == d.kickOffReset; let f = d.traits; a = d.ballPhysics; "disc0" != a && (null != a ? (a = q.fl(a, this.rg()), a.B |= 192, this.H.push(a)) : this.H.push(this.rg())); c(this.L, "vertexes", q.Up); let g = this; c(this.X, "segments", function(h) { return q.Tp(h, g.L) }); c(this.vc, "goals", q.Pp); c(this.H, "discs", function(h) { return q.fl(h, new za) }); c(this.sa, "planes", q.Rp); c(this.qb, "joints", function(h) { return q.Qp(h, g.H) }, !0); c(this.Nd, "redSpawnPoints", b, !0); c(this.vd, "blueSpawnPoints", b, !0); a = d.playerPhysics; null != a && (this.Ld = q.Sp(a)); if (255 < this.L.length || 255 < this.X.length || 255 < this.sa.length || 255 < this.vc.length || 255 < this.H.length) throw v.C("Error"); this.re(); if (!this.gn()) throw v.C(new Wa("Invalid stadium")); } lk() { let a = q.ps; a.a = 0; this.ga(a); let b = new mc; b.Ks(a.Wb()); b.hash = (b.hash += b.hash << 3) ^ b.hash >>> 11; b.hash += b.hash << 15; return b.hash | 0 } qo(a, b) { let c = 0, d = this.vc; for (; c < d.length;) { let h = d[c]; ++c; var e = h.$, f = h.ea, g = b.x - a.x; let k = b.y - a.y; 0 < -(e.y - a.y) * g + (e.x - a.x) * k == 0 < -(f.y - a.y) * g + (f.x - a.x) * k ? e = !1 : (g = f.x - e.x, f = f.y - e.y, e = 0 < -(a.y - e.y) * g + (a.x - e.x) * f == 0 < -(b.y - e.y) * g + (b.x - e.x) * f ? !1 : !0); if (e) return h.Be } return u.Oa } jd(a, b, c, d, e, f, g, h) { null == h && (h = 0); this.D = a; this.H.push(this.rg()); this.bc = b; this.sc = c; this.ud = 1; this.td = 7441498; this.de = d; this.ce = e; this.bd = g; this.Gc = h; this.mc = .75 * d; 400 < this.mc && (this.mc = 400); a = new R; var k = a.ya; k.x = 0; k.y = 1; a.Va = -c; a.o = 0; this.sa.push(a); a = new R; k = a.ya; k.x = 0; k.y = -1; a.Va = -c; a.o = 0; this.sa.push(a); a = new R; k = a.ya; k.x = 1; k.y = 0; a.Va = -b; a.o = 0; this.sa.push(a); a = new R; k = a.ya; k.x = -1; k.y = 0; a.Va = -b; a.o = 0; this.sa.push(a); this.sg(d, 1, f, 13421823, u.Da); this.sg(-d, -1, f, 16764108, u.ia); this.kl(g, c); b = new R; c = b.ya; c.x = 0; c.y = 1; b.Va = -e; b.i = 1; this.sa.push(b); b = new R; c = b.ya; c.x = 0; c.y = -1; b.Va = -e; b.i = 1; this.sa.push(b); b = new G; c = b.a; c.x = -d; c.y = -e; b.i = 0; c = new G; g = c.a; g.x = d; g.y = -e; c.i = 0; g = new G; a = g.a; a.x = d; a.y = -f; g.i = 0; a = new G; k = a.a; k.x = d; k.y = f; a.i = 0; k = new G; var l = k.a; l.x = d; l.y = e; k.i = 0; l = new G; var n = l.a; n.x = -d; n.y = e; l.i = 0; n = new G; var r = n.a; r.x = -d; r.y = f; n.i = 0; r = new G; var t = r.a; t.x = -d; t.y = -f; r.i = 0; f = new I; f.$ = c; f.ea = g; f.i = 1; f.bb = !1; t = new I; t.$ = a; t.ea = k; t.i = 1; t.bb = !1; let z = new I; z.$ = l; z.ea = n; z.i = 1; z.bb = !1; let K = new I; K.$ = r; K.ea = b; K.i = 1; K.bb = !1; this.L.push(b); this.L.push(c); this.L.push(g); this.L.push(a); this.L.push(k); this.L.push(l); this.L.push(n); this.L.push(r); this.X.push(f); this.X.push(t); this.X.push(z); this.X.push(K); this.il(d, e, h); this.re() } jl(a, b, c, d, e, f, g, h) { this.D = a; this.H.push(this.rg()); this.bc = b; this.sc = c; this.ud = 2; this.de = d; this.ce = e; this.bd = 75; this.Gc = h; this.Te = g; this.mc = .75 * (d - g); 400 < this.mc && (this.mc = 400); a = new R; var k = a.ya; k.x = 0; k.y = 1; a.Va = -c; a.o = 0; this.sa.push(a); a = new R; k = a.ya; k.x = 0; k.y = -1; a.Va = -c; a.o = 0; this.sa.push(a); a = new R; k = a.ya; k.x = 1; k.y = 0; a.Va = -b; a.o = 0; this.sa.push(a); a = new R; k = a.ya; k.x = -1; k.y = 0; a.Va = -b; a.o = 0; this.sa.push(a); this.sg(d - g, 1, f, 13421823, u.Da, 63); this.sg(-d + g, -1, f, 16764108, u.ia, 63); this.kl(75, c); b = new R; c = b.ya; c.x = 0; c.y = 1; b.Va = -e; b.i = 1; this.sa.push(b); b = new R; c = b.ya; c.x = 0; c.y = -1; b.Va = -e; b.i = 1; this.sa.push(b); b = new R; c = b.ya; c.x = 1; c.y = 0; b.Va = -d; b.i = 1; this.sa.push(b); b = new R; c = b.ya; c.x = -1; c.y = 0; b.Va = -d; b.i = 1; this.sa.push(b); this.il(d, e, h); this.re() } sg(a, b, c, d, e, f) { var g; null == g && (g = 32); null == f && (f = 1); var h = new G, k = h.a; k.x = a + 8 * b; k.y = -c; k = new G; var l = k.a; l.x = a + 8 * b; l.y = c; let n = new G; l = n.a; l.x = h.a.x + 22 * b; l.y = h.a.y + 22; let r = new G; l = r.a; l.x = k.a.x + 22 * b; l.y = k.a.y - 22; l = new I; l.$ = h; l.ea = n; l.Vc(90 * b); let t = new I; t.$ = r; t.ea = n; let z = new I; z.$ = r; z.ea = k; z.Vc(90 * b); b = this.L.length; this.L.push(h); this.L.push(k); this.L.push(n); this.L.push(r); h = b; for (b = this.L.length; h < b;) k = h++, this.L[k].i = f, this.L[k].B = g, this.L[k].o = .1; b = this.X.length; this.X.push(l); this.X.push(t); this.X.push(z); h = b; for (b = this.X.length; h < b;) k = h++, this.X[k].i = f, this.X[k].B = g, this.X[k].o = .1; f = new za; g = f.a; g.x = a; g.y = -c; f.ca = 0; f.V = 8; f.S = d; this.H.push(f); f = new za; g = f.a; g.x = a; g.y = c; f.ca = 0; f.V = 8; f.S = d; this.H.push(f); d = new gb; f = d.$; f.x = a; f.y = -c; f = d.ea; f.x = a; f.y = c; d.Be = e; this.vc.push(d) } kl(a, b) { let c = new G; var d = c.a; d.x = 0; d.y = -b; c.o = .1; c.B = 24; c.i = 6; d = new G; var e = d.a; e.x = 0; e.y = -a; d.o = .1; d.B = 24; d.i = 6; e = new G; var f = e.a; f.x = 0; f.y = a; e.o = .1; e.B = 24; e.i = 6; a = new G; f = a.a; f.x = 0; f.y = b; a.o = .1; a.B = 24; a.i = 6; b = new I; b.$ = c; b.ea = d; b.B = 24; b.i = 6; b.bb = !1; b.o = .1; f = new I; f.$ = e; f.ea = a; f.B = 24; f.i = 6; f.bb = !1; f.o = .1; let g = new I; g.$ = d; g.ea = e; g.B = 8; g.i = 6; g.bb = !1; g.Vc(180); g.o = .1; let h = new I; h.$ = e; h.ea = d; h.B = 16; h.i = 6; h.bb = !1; h.Vc(180); h.o = .1; this.L.push(c); this.L.push(d); this.L.push(e); this.L.push(a); this.X.push(b); this.X.push(f); this.X.push(g); this.X.push(h) } il(a, b, c) { if (!(0 >= c)) { var d = new G, e = d.a; e.x = -a + c; e.y = -b; d.i = 0; e = new G; var f = e.a; f.x = -a; f.y = -b + c; e.i = 0; f = new G; var g = f.a; g.x = -a + c; g.y = b; f.i = 0; g = new G; var h = g.a; h.x = -a; h.y = b - c; g.i = 0; h = new G; var k = h.a; k.x = a - c; k.y = b; h.i = 0; k = new G; var l = k.a; l.x = a; l.y = b - c; k.i = 0; l = new G; var n = l.a; n.x = a - c; n.y = -b; l.i = 0; n = new G; var r = n.a; r.x = a; r.y = -b + c; n.i = 0; a = new I; a.$ = d; a.ea = e; a.i = 1; a.bb = !1; a.o = 1; a.Vc(-90); b = new I; b.$ = f; b.ea = g; b.i = 1; b.bb = !1; b.o = 1; b.Vc(90); c = new I; c.$ = h; c.ea = k; c.i = 1; c.bb = !1; c.o = 1; c.Vc(-90); r = new I; r.$ = l; r.ea = n; r.i = 1; r.bb = !1; r.o = 1; r.Vc(90); this.L.push(d); this.L.push(e); this.L.push(f); this.L.push(g); this.L.push(h); this.L.push(k); this.L.push(l); this.L.push(n); this.X.push(a); this.X.push(b); this.X.push(c); this.X.push(r) } } static ma(a) { var b = a.F(); return 255 == b ? (b = new q, b.vs(a), b) : q.Sh()[b] } static Sh() { if (null == q.wb) { q.wb = []; var a = new q; a.jd("Classic", 420, 200, 370, 170, 64, 75); q.wb.push(a); a = new q; a.jd("Easy", 420, 200, 370, 170, 90, 75); q.wb.push(a); a = new q; a.jd("Small", 420, 200, 320, 130, 55, 70); q.wb.push(a); a = new q; a.jd("Big", 600, 270, 550, 240, 80, 80); q.wb.push(a); a = new q; a.jd("Rounded", 420, 200, 370, 170, 64, 75, 75); q.wb.push(a); a = new q; a.jl("Hockey", 420, 204, 398, 182, 68, 120, 100); q.wb.push(a); a = new q; a.jl("Big Hockey", 600, 270, 550, 240, 90, 160, 150); q.wb.push(a); a = new q; a.jd("Big Easy", 600, 270, 550, 240, 95, 80); q.wb.push(a); a = new q; a.jd("Big Rounded", 600, 270, 550, 240, 80, 75, 100); q.wb.push(a); a = new q; a.jd("Huge", 750, 350, 700, 320, 100, 80); q.wb.push(a); a = 0; let b = q.wb.length; for (; a < b;) { let c = a++; q.wb[c].Kh = c } } return q.wb } static Yn(a, b) { if (null != a.trait && (b = b[w.J(a.trait, String)], null != b)) { let c = 0, d = Cc.mn(b); for (; c < d.length;) { let e = d[c]; ++c; null == a[e] && (a[e] = b[e]) } } } static jo(a) { if (63 == a) return ["all"]; let b = []; 0 != (a & 2) && b.push("red"); 0 != (a & 4) && b.push("blue"); 0 != (a & 1) && b.push("ball"); 0 != (a & 8) && b.push("redKO"); 0 != (a & 16) && b.push("blueKO"); 0 != (a & 32) && b.push("wall"); 0 != (a & 64) && b.push("kick"); 0 != (a & 128) && b.push("score"); 0 != (a & 268435456) && b.push("c0"); 0 != (a & 536870912) && b.push("c1"); 0 != (a & 1073741824) && b.push("c2"); 0 != (a & -2147483648) && b.push("c3"); return b } static Kc(a) { a = w.J(a, Array); let b = 0, c = 0; for (; c < a.length;) switch (a[c++]) { case "all": b |= 63; break; case "ball": b |= 1; break; case "blue": b |= 4; break; case "blueKO": b |= 16; break; case "c0": b |= 268435456; break; case "c1": b |= 536870912; break; case "c2": b |= 1073741824; break; case "c3": b |= -2147483648; break; case "kick": b |= 64; break; case "red": b |= 2; break; case "redKO": b |= 8; break; case "score": b |= 128; break; case "wall": b |= 32 } return b } static Pc(a, b, c, d) { c != d && (a[b] = q.jo(c)) } static Eg(a, b, c) { b != c && (a.color = q.xo(b)) } static xo(a) { a |= 0; return 0 > a ? "transparent" : Y.gh(a) } static pg(a) { if ("transparent" == a) return -1; if ("string" == typeof a) return Q.parseInt("0x" + Q.Je(a)); if (a instanceof Array) return ((a[0] | 0) << 16) + ((a[1] | 0) << 8) + (a[2] | 0); throw v.C("Bad color"); } static Ds(a) { let b = { x: a.a.x, y: a.a.y }; q.pa(b, "bCoef", a.o, 1); q.Pc(b, "cMask", a.i, 63); q.Pc(b, "cGroup", a.B, 32); return b } static Up(a) { let b = new G; b.a.x = w.J(a.x, E); b.a.y = w.J(a.y, E); var c = a.bCoef; null != c && (b.o = w.J(c, E)); c = a.cMask; null != c && (b.i = q.Kc(c)); a = a.cGroup; null != a && (b.B = q.Kc(a)); return b } static Or(a, b) { let c = { v0: a.$.Dd, v1: a.ea.Dd }; q.pa(c, "bias", a.Hc, b.Hc); q.pa(c, "bCoef", a.o, b.o); let d = a.hp(); q.pa(c, "curve", d, 0); 0 != d && (c.curveF = a.vb); q.pa(c, "vis", a.bb, b.bb); q.Pc(c, "cMask", a.i, b.i); q.Pc(c, "cGroup", a.B, b.B); q.Eg(c, a.S, b.S); return c } static Tp(a, b) { let c = new I; var d = w.J(a.v1, Zb); c.$ = b[w.J(a.v0, Zb)]; c.ea = b[d]; b = a.bias; d = a.bCoef; let e = a.curve, f = a.curveF, g = a.vis, h = a.cMask, k = a.cGroup; a = a.color; null != b && (c.Hc = w.J(b, E)); null != d && (c.o = w.J(d, E)); null != f ? c.vb = w.J(f, E) : null != e && c.Vc(w.J(e, E)); null != g && (c.bb = w.J(g, Fc)); null != h && (c.i = q.Kc(h)); null != k && (c.B = q.Kc(k)); null != a && (c.S = q.pg(a)); return c } static Gp(a) { let b = { d0: a.ie, d1: a.je, length: a.Ib >= a.fc ? a.Ib : [a.Ib, a.fc] }; q.Eg(b, a.S, 0); q.pa(b, "strength", a.ze, 1 / 0); return b } static Qp(a, b) { let c = new hb; var d = w.J(a.d0, Zb), e = w.J(a.d1, Zb); let f = a.color, g = a.strength; a = a.length; if (d >= b.length || 0 > d) throw v.C(null); if (e >= b.length || 0 > e) throw v.C(null); c.ie = d; c.je = e; null == a ? (d = b[d], e = b[e], null == d || null == e ? c.fc = c.Ib = 100 : (b = d.a, d = e.a, e = b.x - d.x, b = b.y - d.y, c.fc = c.Ib = Math.sqrt(e * e + b * b))) : a instanceof Array ? (c.Ib = w.J(a[0], E), c.fc = w.J(a[1], E)) : c.fc = c.Ib = w.J(a, E); c.ze = null == g || "rigid" == g ? 1 / 0 : w.J(g, E); null != f && (c.S = q.pg(f)); return c } static Oq(a) { let b = { normal: [a.ya.x, a.ya.y], dist: a.Va }; q.pa(b, "bCoef", a.o, 1); q.Pc(b, "cMask", a.i, 63); q.Pc(b, "cGroup", a.B, 32); return b } static Rp(a) { let b = new R; var c = w.J(a.normal, Array), d = w.J(c[0], E), e = w.J(c[1], E); c = b.ya; let f = d; var g = e; null == e && (g = 0); null == d && (f = 0); d = f; e = Math.sqrt(d * d + g * g); c.x = d / e; c.y = g / e; b.Va = w.J(a.dist, E); c = a.bCoef; d = a.cMask; a = a.cGroup; null != c && (b.o = w.J(c, E)); null != d && (b.i = q.Kc(d)); null != a && (b.B = q.Kc(a)); return b } static op(a) { return { p0: [a.$.x, a.$.y], p1: [a.ea.x, a.ea.y], team: a.Be == u.ia ? "red" : "blue" } } static Pp(a) { let b = new gb; var c = w.J(a.p0, Array); let d = w.J(a.p1, Array), e = b.$; e.x = c[0]; e.y = c[1]; c = b.ea; c.x = d[0]; c.y = d[1]; switch (a.team) { case "blue": a = u.Da; break; case "red": a = u.ia; break; default: throw v.C("Bad team value"); } b.Be = a; return b } static Rq(a) { let b = {}; q.pa(b, "bCoef", a.o, .5); q.pa(b, "invMass", a.ca, .5); q.pa(b, "damping", a.Ea, .96); q.pa(b, "acceleration", a.Qe, .1); q.pa(b, "kickingAcceleration", a.gf, .07); q.pa(b, "kickingDamping", a.hf, .96); q.pa(b, "kickStrength", a.ef, 5); q.Pc(b, "cGroup", a.B, 0); if (0 != a.ra.x || 0 != a.ra.y) b.gravity = [a.ra.x, a.ra.y]; q.pa(b, "radius", a.V, 15); q.pa(b, "kickback", a.ff, 0); return b } static Sp(a) { let b = new Yb; var c = a.bCoef, d = a.invMass; let e = a.damping, f = a.acceleration, g = a.kickingAcceleration, h = a.kickingDamping, k = a.kickStrength, l = a.gravity, n = a.cGroup, r = a.radius; a = a.kickback; null != c && (b.o = w.J(c, E)); null != d && (b.ca = w.J(d, E)); null != e && (b.Ea = w.J(e, E)); null != f && (b.Qe = w.J(f, E)); null != g && (b.gf = w.J(g, E)); null != h && (b.hf = w.J(h, E)); null != k && (b.ef = w.J(k, E)); null != l && (c = b.ra, d = w.J(l[1], E), c.x = w.J(l[0], E), c.y = d); null != n && (b.B = q.Kc(n)); null != r && (b.V = w.J(r, E)); null != a && (b.ff = w.J(a, E)); return b } static Ro(a, b) { let c = {}; if (a.a.x != b.a.x || a.a.y != b.a.y) c.pos = [a.a.x, a.a.y]; if (a.G.x != b.G.x || a.G.y != b.G.y) c.speed = [a.G.x, a.G.y]; if (a.ra.x != b.ra.x || a.ra.y != b.ra.y) c.gravity = [a.ra.x, a.ra.y]; q.pa(c, "radius", a.V, b.V); q.pa(c, "bCoef", a.o, b.o); q.pa(c, "invMass", a.ca, b.ca); q.pa(c, "damping", a.Ea, b.Ea); q.Eg(c, a.S, b.S); q.Pc(c, "cMask", a.i, b.i); q.Pc(c, "cGroup", a.B, b.B); return c } static fl(a, b) { var c = a.pos, d = a.speed; let e = a.gravity, f = a.radius, g = a.bCoef, h = a.invMass, k = a.damping, l = a.color, n = a.cMask; a = a.cGroup; if (null != c) { let r = b.a; r.x = c[0]; r.y = c[1] } null != d && (c = b.G, c.x = d[0], c.y = d[1]); null != e && (d = b.ra, d.x = e[0], d.y = e[1]); null != f && (b.V = w.J(f, E)); null != g && (b.o = w.J(g, E)); null != h && (b.ca = w.J(h, E)); null != k && (b.Ea = w.J(k, E)); null != l && (b.S = q.pg(l)); null != n && (b.i = q.Kc(n)); null != a && (b.B = q.Kc(a)); return b } static pa(a, b, c, d) { c != d && (a[b] = c) } } class lc { constructor() {} } class P { static rj(a, b) { a = a.charCodeAt(b); if (a == a) return a } static substr(a, b, c) { if (null == c) c = a.length; else if (0 > c) if (0 == b) c = a.length + c; else return ""; return a.substr(b, c) } static remove(a, b) { b = a.indexOf(b); if (-1 == b) return !1; a.splice(b, 1); return !0 } static now() { return Date.now() } } class vc { constructor() {} } class Cb { constructor() { this.f = x.Ia(Cb.O); let a = x.Ba(this.f), b = this; a.get("cancel").onclick = function() { D.h(b.rb, !1) }; a.get("leave").onclick = function() { D.h(b.rb, !0) } } } class aa { constructor(a, b, c) { this.f = x.Ia(aa.O); var d = x.Ba(this.f); d.get("ok"); d.get("cancel"); this.fe = d.get("content"); let e = d.get("title"); d = d.get("buttons"); let f = 0, g = this, h = 0; for (; h < c.length;) { let k = c[h++], l = f++, n = window.document.createElement("button"); n.textContent = k; n.onclick = function() { D.h(g.Wa, l) }; d.appendChild(n) } this.fe.textContent = b; e.textContent = a } } class J { constructor(a, b) { null == b && (b = !1); this.s = a; this.Ua = b; this.a = 0 } sb(a) { null == a && (a = this.s.byteLength - this.a); if (this.a + a > this.s.byteLength) throw v.C("Read too much"); let b = new Uint8Array(this.s.buffer, this.s.byteOffset + this.a, a); this.a += a; return b } bm(a) { let b = this.sb(a); a = new ArrayBuffer(a); (new Uint8Array(a)).set(b); return a } zf() { return this.s.getInt8(this.a++) } F() { return this.s.getUint8(this.a++) } Ai() { let a = this.s.getInt16(this.a, this.Ua); this.a += 2; return a } Sb() { let a = this.s.getUint16(this.a, this.Ua); this.a += 2; return a } N() { let a = this.s.getInt32(this.a, this.Ua); this.a += 4; return a } jb() { let a = this.s.getUint32(this.a, this.Ua); this.a += 4; return a } zi() { let a = this.s.getFloat32(this.a, this.Ua); this.a += 4; return a } w() { let a = this.s.getFloat64(this.a, this.Ua); this.a += 8; return a } Bb() { let a = this.a, b = 0, c, d = 0; do c = this.s.getUint8(a + b), 5 > b && (d |= (c & 127) << 7 * b >>> 0), ++b; while (0 != (c & 128)); this.a += b; return d | 0 } se(a) { let b = this.a, c, d = ""; for (a = b + a; b < a;) c = J.Oo(this.s, b), b += c.length, d += String.fromCodePoint(c.char); if (b != a) throw v.C("Actual string length differs from the specified: " + (b - a) + " bytes"); this.a = b; return d } Ab() { let a = this.Bb(); return 0 >= a ? null : this.se(a - 1) } kc() { return this.se(this.Bb()) } dm() { return this.se(this.F()) } Jg() { let a = this.kc(); return JSON.parse(a) } static Oo(a, b) { var c = a.getUint8(b); let d, e, f, g, h = b; if (0 == (c & 128)) ++b; else if (192 == (c & 224)) d = a.getUint8(b + 1), c = (c & 31) << 6 | d & 63, b += 2; else if (224 == (c & 240)) d = a.getUint8(b + 1), e = a.getUint8(b + 2), c = (c & 15) << 12 | (d & 63) << 6 | e & 63, b += 3; else if (240 == (c & 248)) d = a.getUint8(b + 1), e = a.getUint8(b + 2), f = a.getUint8(b + 3), c = (c & 7) << 18 | (d & 63) << 12 | (e & 63) << 6 | f & 63, b += 4; else if (248 == (c & 252)) d = a.getUint8(b + 1), e = a.getUint8(b + 2), f = a.getUint8(b + 3), g = a.getUint8(b + 4), c = (c & 3) << 24 | (d & 63) << 18 | (e & 63) << 12 | (f & 63) << 6 | g & 63, b += 5; else if (252 == (c & 254)) d = a.getUint8(b + 1), e = a.getUint8(b + 2), f = a.getUint8(b + 3), g = a.getUint8(b + 4), a = a.getUint8(b + 5), c = (c & 1) << 30 | (d & 63) << 24 | (e & 63) << 18 | (f & 63) << 12 | (g & 63) << 6 | a & 63, b += 6; else throw v.C("Cannot decode UTF8 character at offset " + b + ": charCode (" + c + ") is invalid"); return { char: c, length: b - h } } } class ha { static Xc(a, b) { return a.length <= b ? a : P.substr(a, 0, b) } static Ls(a) { let b = "", c = 0, d = a.byteLength; for (; c < d;) b += Y.gh(a[c++], 2); return b } } class za { constructor() { this.i = this.B = 63; this.S = 16777215; this.Ea = .99; this.ca = 1; this.o = .5; this.V = 10; this.ra = new O(0, 0); this.G = new O(0, 0); this.a = new O(0, 0) } ga(a) { var b = this.a; a.u(b.x); a.u(b.y); b = this.G; a.u(b.x); a.u(b.y); b = this.ra; a.u(b.x); a.u(b.y); a.u(this.V); a.u(this.o); a.u(this.ca); a.u(this.Ea); a.tb(this.S); a.R(this.i); a.R(this.B) } ma(a) { var b = this.a; b.x = a.w(); b.y = a.w(); b = this.G; b.x = a.w(); b.y = a.w(); b = this.ra; b.x = a.w(); b.y = a.w(); this.V = a.w(); this.o = a.w(); this.ca = a.w(); this.Ea = a.w(); this.S = a.jb(); this.i = a.N(); this.B = a.N() } Yp() { let a = new qa; this.Vk(a); return a } Vk(a) { var b = a.a, c = this.a; b.x = c.x; b.y = c.y; b = a.G; c = this.G; b.x = c.x; b.y = c.y; b = a.ra; c = this.ra; b.x = c.x; b.y = c.y; a.V = this.V; a.o = this.o; a.ca = this.ca; a.Ea = this.Ea; a.S = this.S; a.i = this.i; a.B = this.B } } class ta { constructor() { this.fd = new Map } Pa(a, b) { this.fd.set(a, b) } v(a) { return this.fd.get(a) } rr(a) { this.fd.delete(a) } jp(a) { let b = [], c = this.fd.keys(), d = c.next(); for (; !d.done;) { let e = d.value; d = c.next(); this.fd.get(e) == a && b.push(e) } return b } De() { let a = {}, b = this.fd.keys(), c = b.next(); for (; !c.done;) { let d = c.value; c = b.next(); a[d] = this.fd.get(d) } return JSON.stringify(a) } static gg(a) { let b = new ta, c = Cc.mn(a), d = 0; for (; d < c.length;) { let e = c[d]; ++d; b.fd.set(e, a[e]) } return b } static Qh(a) { return ta.gg(JSON.parse(a)) } static vk() { let a = new ta; a.Pa("ArrowUp", "Up"); a.Pa("KeyW", "Up"); a.Pa("ArrowDown", "Down"); a.Pa("KeyS", "Down"); a.Pa("ArrowLeft", "Left"); a.Pa("KeyA", "Left"); a.Pa("ArrowRight", "Right"); a.Pa("KeyD", "Right"); a.Pa("KeyX", "Kick"); a.Pa("Space", "Kick"); a.Pa("ControlLeft", "Kick"); a.Pa("ControlRight", "Kick"); a.Pa("ShiftLeft", "Kick"); a.Pa("ShiftRight", "Kick"); a.Pa("Numpad0", "Kick"); return a } } class Bb { constructor(a) { this.Ak = !1; this.Om = new Ia(u.Oa); this.ck = new Ia(u.Da); this.gm = new Ia(u.ia); this.f = x.Ia(Bb.O); let b = x.Ba(this.f); this.lc = b.get("room-name"); this.Rm = b.get("start-btn"); this.Tm = b.get("stop-btn"); this.ti = b.get("pause-btn"); this.Zn = b.get("auto-btn"); this.gl = b.get("lock-btn"); this.qm = b.get("reset-all-btn"); this.em = b.get("rec-btn"); let c = b.get("link-btn"), d = b.get("leave-btn"), e = b.get("rand-btn"); this.Lf = b.get("time-limit-sel"); this.Ef = b.get("score-limit-sel"); this.Pm = b.get("stadium-name"); this.Qm = b.get("stadium-pick"); let f = this; this.Qm.onclick = function() { H.h(f.Fq) }; this.bi(b.get("red-list"), this.gm, a); this.bi(b.get("blue-list"), this.ck, a); this.bi(b.get("spec-list"), this.Om, a); this.nl(this.Lf, this.ml()); this.nl(this.Ef, this.ml()); this.Lf.onchange = function() { D.h(f.Jq, f.Lf.selectedIndex) }; this.Ef.onchange = function() { D.h(f.Bq, f.Ef.selectedIndex) }; this.Rm.onclick = function() { H.h(f.Gq) }; this.Tm.onclick = function() { H.h(f.Hq) }; this.ti.onclick = function() { H.h(f.uq) }; this.Zn.onclick = function() { H.h(f.kq) }; this.gl.onclick = function() { D.h(f.Iq, !f.gi) }; this.qm.onclick = function() { null != f.pe && (f.pe(u.Da), f.pe(u.ia)) }; this.em.onclick = function() { H.h(f.yq) }; c.onclick = function() { H.h(f.Eq) }; d.onclick = function() { H.h(f.oe) }; e.onclick = function() { H.h(f.xq) }; this.Tj(!1); this.Uj(!1) } bi(a, b, c) { x.replaceWith(a, b.f); let d = this; b.Ag = function(e, f) { ua.h(d.Ag, e, f) }; b.pe = function(e) { D.h(d.pe, e) }; b.rq = function(e) { ua.h(d.Ag, c, e) }; b.wf = function(e) { D.h(d.wf, e) } } ml() { let a = [], b = 0; for (; 15 > b;) { let c = b++; a.push(null == c ? "null" : "" + c) } return a } nl(a, b) { let c = 0; for (; c < b.length;) { let d = b[c++], e = window.document.createElement("option"); e.textContent = d; a.appendChild(e) } } $r(a) { this.em.classList.toggle("active", a) } A(a, b) { this.Cr != a.lc && (this.Cr = a.lc, this.lc.textContent = a.lc); b = null == b ? !1 : b.fb; this.Ak != b && (this.f.className = "room-view" + (b ? " admin" : ""), this.Ak = b); var c = !b || null != a.M; this.Lf.disabled = c; this.Ef.disabled = c; this.Qm.disabled = c; c = null != a.M; this.Rm.hidden = c; this.Tm.hidden = !c; this.ti.hidden = !c; this.Lf.selectedIndex = a.Ga; this.Ef.selectedIndex = a.kb; this.Pm.textContent = a.T.D; this.Pm.classList.toggle("custom", !a.T.cf()); let d = a.Ac; for (var e = this.gm, f = a.K, g = [], h = 0; h < f.length;) { var k = f[h]; ++h; k.fa == u.ia && g.push(k) } e.A(g, d, c, b); e = this.ck; f = a.K; g = []; for (h = 0; h < f.length;) k = f[h], ++h, k.fa == u.Da && g.push(k); e.A(g, d, c, b); e = this.Om; f = a.K; g = []; for (h = 0; h < f.length;) k = f[h], ++h, k.fa == u.Oa && g.push(k); e.A(g, d, c, b); this.qm.disabled = c; this.gi != a.Ac && this.Tj(a.Ac); c && (a = 120 == a.M.Ta, this.Kl != a && this.Uj(a)) } Tj(a) { this.gi = a; this.gl.innerHTML = this.gi ? "Unlock" : "Lock" } Uj(a) { this.Kl = a; this.ti.innerHTML = "" + (this.Kl ? "Resume (P)" : "Pause (P)") } } class $b { static ph(a) { return new Promise(function(b, c) { a.onsuccess = function() { b(a.result) }; a.onerror = c }) } } class ac { constructor(a, b) { this.ai = null; this.l = a; null != b && (this.ai = "@" + Y.replace(b, " ", "_")) } gj(a) { let b = this.l.Ka.Fc, c = [], d = 0; for (a = a.K; d < a.length;) { let e = a[d]; ++d; c.push({ D: e.D, ba: e.Z }) } b.Zj = c } Ei(a) { function b(d) { return null == d ? "" : " by " + d.D } this.gj(a); let c = this; a.Sl = function(d) { c.l.Ka.Hb("" + d.D + " has joined"); m.Qa.md(m.Qa.Fp); c.gj(a) }; a.Tl = function(d, e, f, g) { D.h(c.wq, d.Z); null == e ? d = "" + d.D + " has left" : (Pb.h(c.vq, d.Z, e, null != g ? g.D : null, f), d = "" + d.D + " was " + (f ? "banned" : "kicked") + b(g) + ("" != e ? " (" + e + ")" : "")); c.l.Ka.Hb(d); m.Qa.md(m.Qa.Lp); c.gj(a) }; a.Ql = function(d, e) { let f = null != c.ai && -1 != e.indexOf(c.ai); c.l.Ka.da("" + d.D + ": " + e, f ? "highlight" : null); m.j.Nm.v() && f ? m.Qa.md(m.Qa.Tk) : m.j.Ui.v() && m.Qa.md(m.Qa.ik) }; a.tm = function(d, e, f, g) { c.l.Ka.Wp(d, e, f); if (m.j.Ui.v()) switch (g) { case 1: m.Qa.md(m.Qa.ik); break; case 2: m.Qa.md(m.Qa.Tk) } }; a.wi = function() { m.Qa.md(m.Qa.Hp) }; a.aj = function(d) { m.Qa.md(m.Qa.np); let e = c.l.ib.gb.Cd; e.Pa(d == u.ia ? e.mr : e.ho) }; a.bj = function(d) { let e = c.l.ib.gb.Cd; e.Pa(d == u.ia ? e.nr : e.io); c.l.Ka.Hb("" + d.D + " team won the match") }; a.Ll = function(d, e, f) { e && !f && c.l.Ka.Hb("Game paused" + b(d)) }; a.cj = function() { let d = c.l.ib.gb.Cd; d.Pa(d.ls) }; a.Yi = function(d) { c.l.xe(!1); c.l.ib.gb.Cd.to(); c.l.Ka.Hb("Game started" + b(d)) }; a.Kf = function(d) { null != d && c.l.Ka.Hb("Game stopped" + b(d)) }; a.Wi = function(d, e) { if (!e.cf()) { let f = Y.gh(e.lk(), 8); c.l.Ka.Hb('Stadium "' + e.D + '" (' + f + ") loaded" + b(d)) } }; a.Rl = function(d) { c.l.Ka.Hb("" + d.D + " " + (d.Vd ? "has desynchronized" : "is back in sync")) }; a.Wl = function(d, e, f) { null != a.M && c.l.Ka.Hb("" + e.D + " was moved to " + f.D + b(d)) }; a.vi = function(d, e) { let f = e.D; d = (e.fb ? "" + f + " was given admin rights" : "" + f + "'s admin rights were taken away") + b(d); c.l.Ka.Hb(d) }; a.Vl = function(d, e) { c.l.ib.gb.up(d, e) }; a.al = function(d, e, f, g) { c.l.Ka.Hb("Kick Rate Limit set to (min: " + e + ", rate: " + f + ", burst: " + g + ")" + b(d)) } } ws(a) { a.Sl = null; a.Tl = null; a.Ql = null; a.tm = null; a.wi = null; a.aj = null; a.bj = null; a.Ll = null; a.cj = null; a.Yi = null; a.Kf = null; a.Wi = null; a.Rl = null; a.Wl = null; a.vi = null; a.Vl = null; a.al = null } } class p { constructor() { p.yb || this.Za() } Za() { this.En = this.Fn = this.Dc = 0 } An() { return !0 } apply() { throw v.C("missing implementation"); } xa() { throw v.C("missing implementation"); } wa() { throw v.C("missing implementation"); } static Ha(a) { null == a.delay && (a.delay = !0); null == a.Ca && (a.Ca = !0); return a } static Ja(a) { a.Pn = p.Nf; if (null == a.Aa) throw v.C("Class doesn't have a config"); a.prototype.Ge = a.Aa; p.qn.set(p.Nf, a); p.Nf++ } static Aj(a, b) { let c = w.nn(a).Pn; if (null == c) throw v.C("Tried to pack unregistered action"); b.m(c); a.wa(b) } static qh(a) { var b = a.F(); b = Object.create(p.qn.get(b).prototype); b.Dc = 0; b.ob = 0; b.xa(a); return b } } class D { static h(a, b) { null != a && a(b) } } class Kc { static vj() { p.Ja(Db); p.Ja(Ja); p.Ja(Ya); p.Ja(Ka); p.Ja(Za); p.Ja(Ga); p.Ja(na); p.Ja($a); p.Ja(ab); p.Ja(bb); p.Ja(Aa); p.Ja(La); p.Ja(fa); p.Ja(Ma); p.Ja(Na); p.Ja(cb); p.Ja(Oa); p.Ja(Fa); p.Ja(Pa); p.Ja(db); p.Ja(Eb); p.Ja(Qa); p.Ja(Fb); p.Ja(Gb) } } class ma { constructor(a) { function b(y) { let F = window.document.createElement("div"); F.className = "inputrow"; var L = window.document.createElement("div"); L.textContent = y; F.appendChild(L); L = Hb.jp(y); let ea = 0; for (; ea < L.length;) { let V = L[ea]; ++ea; let wc = window.document.createElement("div"); var S = V; V.startsWith("Key") && (S = P.substr(V, 3, null)); wc.textContent = S; F.appendChild(wc); S = window.document.createElement("i"); S.className = "icon-cancel"; S.onclick = function() { Hb.rr(V); m.j.Kd.ha(Hb); wc.remove() }; wc.appendChild(S) } L = window.document.createElement("i"); L.className = "icon-plus"; F.appendChild(L); L.onclick = function() { xc.classList.toggle("show", !0); xc.focus(); xc.onkeydown = function(V) { xc.classList.toggle("show", !1); V.stopPropagation(); V = V.code; null == Hb.v(V) && (Hb.Pa(V, y), m.j.Kd.ha(Hb), Gc()) } }; return F } function c(y, F, L) { y = l.get(y); if (null == L) y.hidden = !0; else { y.innerHTML = F + ":
"; F = y.querySelector(".flagico"); y = y.querySelector("span"); try { F.classList.add("f-" + L.ub) } catch (ea) {} y.textContent = L.ub.toUpperCase() } } function d() { let y = m.j.Eh.v(); K.textContent = "" + y; N.value = "" + y } function e() { let y = m.j.Fh.v(); t.textContent = "" + y; z.value = "" + y } function f(y, F, L, ea) { let S = l.get(y); y = F.v(); S.selectedIndex = ea(y); S.onchange = function() { F.ha(L(S.selectedIndex)) } } function g(y, F, L) { function ea(V) { S.classList.toggle("icon-ok", V); S.classList.toggle("icon-cancel", !V) } y = l.get(y); y.classList.add("toggle"); let S = window.document.createElement("i"); S.classList.add("icon-ok"); y.insertBefore(S, y.firstChild); y.onclick = function() { let V = !F.v(); F.ha(V); ea(V); null != L && L(V) }; ea(F.v()) } function h(y) { let F = { kn: l.get(y + "btn"), nh: l.get(y + "sec") }; n.push(F); F.kn.onclick = function() { k(F) } } function k(y) { let F = 0, L = 0; for (; L < n.length;) { let ea = n[L]; ++L; let S = ea == y; S && (ma.ym = F); ea.nh.classList.toggle("selected", S); ea.kn.classList.toggle("selected", S); ++F } } null == a && (a = !1); this.f = x.Ia(ma.O); let l = x.Ba(this.f); this.wd = l.get("close"); let n = []; h("sound"); h("video"); h("misc"); h("input"); k(n[ma.ym]); g("tsound-main", m.j.ye, function() { m.Qa.Di() }); g("tsound-chat", m.j.Ui); g("tsound-highlight", m.j.Nm); g("tsound-crowd", m.j.Mm); f("viewmode", m.j.Td, function(y) { return y - 1 }, function(y) { return y + 1 }); f("fps", m.j.Oh, function(y) { return y }, function(y) { return y }); let r = [1, .75, .5, .25]; f("resscale", m.j.Ji, function(y) { return r[y] }, function(y) { let F = 0, L = r.length - 1; for (; F < L && !(r[F] <= y);) ++F; return F }); g("tvideo-lowlatency", m.j.ii); g("tvideo-teamcol", m.j.Vm); g("tvideo-showindicators", m.j.Uk); g("tvideo-showavatars", m.j.Km); let t = l.get("chatopacity-value"), z = l.get("chatopacity-range"); e(); z.oninput = function() { m.j.Fh.ha(parseFloat(z.value)); e() }; let K = l.get("chatfocusheight-value"), N = l.get("chatfocusheight-range"); d(); N.oninput = function() { m.j.Eh.ha(Q.parseInt(N.value)); d() }; f("chatbgmode", m.j.jk, function(y) { return 0 == y ? "full" : "compact" }, function(y) { return "full" == y ? 0 : 1 }); let vb = null, Lc = this; vb = function() { let y = m.j.af.v(); c("loc", "Detected location", m.j.$e.v()); c("loc-ovr", "Location override", y); let F = l.get("loc-ovr-btn"); F.disabled = !a; null == y ? (F.textContent = "Override location", F.onclick = function() { H.h(Lc.lq) }) : (F.textContent = "Remove override", F.onclick = function() { m.j.af.ha(null); vb() }) }; vb(); let Hb = m.j.Kd.v(), xc = l.get("presskey"), Gc = null, eb = l.get("inputsec"); Gc = function() { x.Qf(eb); eb.appendChild(b("Up")); eb.appendChild(b("Down")); eb.appendChild(b("Left")); eb.appendChild(b("Right")); eb.appendChild(b("Kick")); eb.appendChild(b("ToggleChat")) }; Gc(); this.wd.onclick = function() { H.h(Lc.rb) } } } class bc { constructor(a, b) { this.La = a; this.value = b; a.textContent = "" + b } set(a) { this.value != a && (this.value = a, this.La.textContent = "" + this.value) } } class m {} class Ab { constructor() { this.Ml = new hc; this.f = x.Ia(Ab.O); let a = x.Ba(this.f); this.Fg = a.get("ping"); this.ap = a.get("fps"); x.replaceWith(a.get("graph"), this.Ml.f) } Zr(a, b) { this.Fg.textContent = "Ping: " + a + " - " + b } Gm(a) { this.ap.textContent = "Fps: " + a } } class Y { static Ys(a, b) { a = P.rj(a, b); return 8 < a && 14 > a ? !0 : 32 == a } static rt(a) { let b = a.length, c = 0; for (; c < b && Y.Ys(a, b - c - 1);) ++c; return 0 < c ? P.substr(a, 0, b - c) : a } static Of(a) { var b; let c = ""; for (b = 2 - a.length; c.length < b;) c += "0"; return c + (null == a ? "null" : "" + a) } static replace(a, b, c) { return a.split(b).join(c) } static gh(a, b) { let c = ""; do c = "0123456789ABCDEF".charAt(a & 15) + c, a >>>= 4; while (0 < a); if (null != b) for (; c.length < b;) c = "0" + c; return c } } class yc { constructor(a, b) { this.xn = 0; this.version = 1; this.mh = 0; this.Xd = A.ka(1E3); this.Rf = A.ka(16384); this.version = b; let c = this.mh = a.Y; this.xj = a; a.U.ga(this.Rf); let d = this; a.hc = function(f) { let g = a.Y; d.Rf.nb(g - c); c = g; d.Rf.Xb(f.P); p.Aj(f, d.Rf) }; this.Xd.Xb(0); let e = this.mh; a.U.Im(function(f) { let g = a.Y; d.Xd.nb(g - e); d.Xd.m(f); d.xn++; e = g }) } stop() { this.xj.hc = null; this.xj.U.Im(null); this.Xd.s.setUint16(0, this.xn, this.Xd.Ua); this.Xd.Lb(this.Rf.Wb()); let a = pako.deflateRaw(this.Xd.Wb()), b = A.ka(a.byteLength + 32); b.mj("HBR2"); b.tb(this.version); b.tb(this.xj.Y - this.mh); b.Lb(a); return b.Wb() } } class cc { constructor(a) { this.$b = a.slice() } eval(a) { var b = this.$b.length - 1; if (a <= this.$b[0]) return this.$b[1]; if (a >= this.$b[b]) return this.$b[b - 2]; var c = 0; b = b / 5 | 0; do { var d = b + c >>> 1; a > this.$b[5 * d] ? c = d + 1 : b = d - 1 } while (c <= b); c = 5 * b; b = this.$b[c]; a = (a - b) / (this.$b[c + 5] - b); b = a * a; d = b * a; return (2 * d - 3 * b + 1) * this.$b[c + 1] + (d - 2 * b + a) * this.$b[c + 2] + (-2 * d + 3 * b) * this.$b[c + 3] + (d - b) * this.$b[c + 4] } } class uc { constructor(a) { let b = [], c = 0; for (; c < a;) ++c, b.push(0); this.Og = b; this.Mf = this.qf = 0 } Pa(a) { this.Mf -= this.Og[this.qf]; this.Og[this.qf] = a; this.Mf += a; this.qf++; this.qf >= this.Og.length && (this.qf = 0) } $n() { return this.Mf / this.Og.length } } class wa { constructor() { this.jc = -1; this.T = this.ic = null; this.Hd = 2; this.gd = 0; this.ne = 1; this.kb = this.Ga = 3; this.Ac = !1; this.M = null; this.K = []; this.lc = ""; this.T = q.Sh()[0]; this.mb = [null, new va, new va]; this.mb[1].hb.push(u.ia.S); this.mb[2].hb.push(u.Da.S) } js(a) { if (null == this.M) { this.M = new ca; for (var b = 0, c = this.K; b < c.length;) { let d = c[b]; ++b; d.I = null; d.Nb = 0 } this.M.Bp(this); null != this.Yi && this.Yi(a) } } ag(a, b, c) { if (b.fa != c) { b.fa = c; P.remove(this.K, b); this.K.push(b); if (null != this.M) { null != b.I && (P.remove(this.M.va.H, b.I), b.I = null); this.M.Wk(b); let d = 0, e = !1; for (; !e;) { ++d; e = !0; let f = 0, g = this.K; for (; f < g.length;) { let h = g[f]; ++f; if (h != b && h.fa == b.fa && h.Nb == d) { e = !1; break } } } b.Nb = d } jc.h(this.Wl, a, b, c) } } oa(a) { let b = 0, c = this.K; for (; b < c.length;) { let d = c[b]; ++b; if (d.Z == a) return d } return null } A(a) { null != this.M && this.M.A(a) } ga(a) { a.Eb(this.lc); a.m(this.Ac ? 1 : 0); a.R(this.kb); a.R(this.Ga); a.lj(this.ne); a.m(this.gd); a.m(this.Hd); this.T.ga(a); a.m(null != this.M ? 1 : 0); null != this.M && this.M.ga(a); a.m(this.K.length); let b = 0, c = this.K; for (; b < c.length;) c[b++].wa(a); this.mb[1].ga(a); this.mb[2].ga(a) } ma(a) { this.lc = a.Ab(); this.Ac = 0 != a.F(); this.kb = a.N(); this.Ga = a.N(); this.ne = a.Ai(); this.gd = a.F(); this.Hd = a.F(); this.T = q.ma(a); var b = 0 != a.F(); this.M = null; b && (this.M = new ca, this.M.ma(a, this)); b = null == this.M ? null : this.M.va.H; let c = a.F(); for (var d = this.K; d.length > c;) d.pop(); for (d = 0; d < c;) { let e = new xa; e.xa(a, b); this.K[d++] = e } this.mb[1].ma(a); this.mb[2].ma(a) } Ok() { let a = 0; var b = A.ka(); this.ga(b); for (b = b.qs(); 4 <= b.s.byteLength - b.a;) a ^= b.N(); return a } fp() { let a = A.ka(4); a.R(this.Ok()); return a.Vg() } yo(a) { a = (new J(new DataView(a))).N(); D.h(this.Po, this.Ok() != a) } Im(a) { this.nm = a } Pb(a) { if (0 == a) return !0; a = this.oa(a); return null != a && a.fb ? !0 : !1 } Wr(a, b, c, d) { this.Hd = 0 > b ? 0 : 255 < b ? 255 : b; this.gd = 0 > c ? 0 : 255 < c ? 255 : c; 0 > d ? d = 0 : 100 < d && (d = 100); this.ne = this.gd * d; Pb.h(this.al, a, this.Hd, this.gd, d) } uc() { let a = ra.Cc, b = this.ic; this.jc != a && (null == b && (this.ic = b = new wa), this.jc = a, wa.zd(b, this)); return b } static zd(a, b) { a.lc = b.lc; if (null == b.K) a.K = null; else { null == a.K && (a.K = []); let d = a.K, e = b.K; for (var c = e.length; d.length > c;) d.pop(); c = 0; let f = e.length; for (; c < f;) { let g = c++; d[g] = e[g].Vs() } } a.M = null == b.M ? null : b.M.uc(); a.Ac = b.Ac; a.kb = b.kb; a.Ga = b.Ga; a.ne = b.ne; a.gd = b.gd; a.Hd = b.Hd; a.T = b.T; a.mb = b.mb } } class dc { constructor(a, b) { this.za = a; this.da = b } xf(a) { if ("/" != a.charAt(0)) return !1; if (1 == a.length) return !0; a = Y.rt(P.substr(a, 1, null)).split(" "); let b = a[0], c = this; switch (b) { case "avatar": 2 == a.length && (this.Em(a[1]), this.da("Avatar set")); break; case "checksum": var d = this.za.U.T; a = d.D; d.cf() ? this.da('Current stadium is original: "' + a + '"') : (d = Y.gh(d.lk(), 8), this.da('Stadium: "' + a + '" (checksum: ' + d + ")")); break; case "clear_avatar": this.Em(null); this.da("Avatar cleared"); break; case "clear_bans": null == this.ee ? this.da("Only the host can clear bans") : (this.ee(), this.da("All bans have been cleared")); break; case "clear_password": null == this.Rg ? this.da("Only the host can change the password") : (this.Rg(null), this.da("Password cleared")); break; case "colors": try { d = dc.Lq(a), this.za.ta(d) } catch (g) { a = v.Mb(g).Fb(), "string" == typeof a && this.da(a) } break; case "extrapolation": 2 == a.length ? (a = Q.parseInt(a[1]), null != a && -200 <= a && 1E3 >= a ? (m.j.Ad.ha(a), this.za.Fm(a), this.da("Extrapolation set to " + a + " msec")) : this.da("Extrapolation must be a value between -200 and 1000 milliseconds")) : this.da("Extrapolation requires a value in milliseconds."); break; case "handicap": 2 == a.length ? (a = Q.parseInt(a[1]), null != a && 0 <= a && 300 >= a ? (this.za.Ur(a), this.da("Ping handicap set to " + a + " msec")) : this.da("Ping handicap must be a value between 0 and 300 milliseconds")) : this.da("Ping handicap requires a value in milliseconds."); break; case "kick_ratelimit": if (4 > a.length) this.da("Usage: /kick_ratelimit "); else { d = Q.parseInt(a[1]); var e = Q.parseInt(a[2]); a = Q.parseInt(a[3]); null == d || null == e || null == a ? this.da("Invalid arguments") : this.za.ta(Qa.qa(d, e, a)) } break; case "recaptcha": if (null == this.Hm) this.da("Only the host can set recaptcha mode"); else try { if (2 == a.length) { switch (a[1]) { case "off": e = !1; break; case "on": e = !0; break; default: throw v.C(null); } this.Hm(e); this.da("Room join Recaptcha " + (e ? "enabled" : "disabled")) } else throw v.C(null); } catch (g) { this.da("Usage: /recaptcha ") } break; case "set_password": 2 == a.length && (null == this.Rg ? this.da("Only the host can change the password") : (this.Rg(a[1]), this.da("Password set"))); break; case "store": let f = this.za.U.T; f.cf() ? this.da("Can't store default stadium.") : xb.pt().then(function() { return xb.add(f) }).then(function() { c.da("Stadium stored") }, function() { c.da("Couldn't store stadium") }); break; default: this.da('Unrecognized command: "' + b + '"') } return !0 } Em(a) { null != a && (a = ha.Xc(a, 2)); m.j.xh.ha(a); this.za.ta(Pa.qa(a)) } static Lq(a) { if (3 > a.length) throw v.C("Not enough arguments"); if (7 < a.length) throw v.C("Too many arguments"); let b = new db, c = new va; b.dh = c; switch (a[1]) { case "blue": c.hb = [u.Da.S]; b.fa = u.Da; break; case "red": c.hb = [u.ia.S]; b.fa = u.ia; break; default: throw v.C('First argument must be either "red" or "blue"'); } if ("clear" == a[2]) return b; c.sd = 256 * Q.parseInt(a[2]) / 360 | 0; c.pd = Q.parseInt("0x" + a[3]); if (4 < a.length) { c.hb = []; let d = 4, e = a.length; for (; d < e;) c.hb.push(Q.parseInt("0x" + a[d++])) } return b } } class R { constructor() { this.B = 32; this.i = 63; this.o = 1; this.Va = 0; this.ya = new O(0, 0) } ga(a) { let b = this.ya; a.u(b.x); a.u(b.y); a.u(this.Va); a.u(this.o); a.R(this.i); a.R(this.B) } ma(a) { let b = this.ya; b.x = a.w(); b.y = a.w(); this.Va = a.w(); this.o = a.w(); this.i = a.N(); this.B = a.N() } } class Ia { constructor(a) { this.Gd = new Map; this.f = x.Ia(Ia.O); this.f.className += " " + a.No; let b = x.Ba(this.f); this.eb = b.get("list"); this.ei = b.get("join-btn"); this.Ii = b.get("reset-btn"); a == u.Oa && this.Ii.remove(); this.ei.textContent = "" + a.D; this.f.ondragover = this.f.Bt = function(d) { -1 != d.dataTransfer.types.indexOf("player") && d.preventDefault() }; let c = this; this.f.ondrop = function(d) { d.preventDefault(); d = d.dataTransfer.getData("player"); null != d && (d = Q.parseInt(d), null != d && ua.h(c.Ag, d, a)) }; this.ei.onclick = function() { D.h(c.rq, a) }; this.Ii.onclick = function() { D.h(c.pe, a) } } A(a, b, c, d) { this.ei.disabled = b || c; this.Ii.disabled = c; b = new Set; c = this.Gd.keys(); for (var e = c.next(); !e.done;) { var f = e.value; e = c.next(); b.add(f) } let g = this; for (c = 0; c < a.length;) e = a[c], ++c, f = this.Gd.get(e.Z), null == f && (f = new Ib(e), f.wf = function(h) { D.h(g.wf, h) }, this.Gd.set(e.Z, f), this.eb.appendChild(f.f)), f.A(e, d), b.delete(e.Z); d = b.values(); for (b = d.next(); !b.done;) c = b.value, b = d.next(), this.Gd.get(c).f.remove(), this.Gd.delete(c); d = 0; for (b = a.length - 1; d < b;) e = d++, c = this.Gd.get(a[e].Z).f, e = this.Gd.get(a[e + 1].Z).f, c.nextSibling != e && this.eb.insertBefore(c, e) } } class sa { constructor(a, b, c, d) { this.D = a; this.Fs = d; this.ji = b; d = null; null != b && (d = b.getItem(a)); this.hn = c(d) } v() { return this.hn } ha(a) { this.hn = a; if (null != this.ji) try { let b = this.Fs(a); null == b ? this.ji.removeItem(this.D) : this.ji.setItem(this.D, b) } catch (b) {} } } class zb { constructor() { this.Rb = -1; this.gb = new U(m.j.ii.v()); this.Wc = new kc; this.f = x.Ia(zb.O); let a = x.Ba(this.f); this.Tb = new bc(a.get("red-score"), 0); this.Ob = new bc(a.get("blue-score"), 0); x.replaceWith(a.get("timer"), this.Wc.f); x.replaceWith(a.get("canvas"), this.gb.na) } A(a) { var b = m.j.ii.v(); if (this.gb.Ep != b) { let c = this.gb.na; this.gb = new U(b); x.replaceWith(c, this.gb.na) } b = a.M; null == b ? this.f.hidden = !0 : (this.f.hidden = !1, this.Wc.ds(60 * a.Ga), this.Wc.cs(b.Nc | 0), this.Ob.set(b.Ob), this.Tb.set(b.Tb), this.gb.Rc(a, this.Rb)) } } class Yb { constructor() { this.ff = 0; this.V = 15; this.B = 0; this.ra = new O(0, 0); this.ca = this.o = .5; this.Ea = .96; this.Qe = .1; this.gf = .07; this.hf = .96; this.ef = 5 } ga(a) { a.u(this.o); a.u(this.ca); a.u(this.Ea); a.u(this.Qe); a.u(this.gf); a.u(this.hf); a.u(this.ef); let b = this.ra; a.u(b.x); a.u(b.y); a.R(this.B); a.u(this.V); a.u(this.ff) } ma(a) { this.o = a.w(); this.ca = a.w(); this.Ea = a.w(); this.Qe = a.w(); this.gf = a.w(); this.hf = a.w(); this.ef = a.w(); let b = this.ra; b.x = a.w(); b.y = a.w(); this.B = a.N(); this.V = a.w(); this.ff = a.w() } } class Ac { static pn() { try { let a = window.localStorage; a.getItem(""); if (0 == a.length) { let b = "_hx_" + Math.random(); a.setItem(b, b); a.removeItem(b) } return a } catch (a) { return null } } } class ba { static om(a, b, c, d, e) { return new Promise(function(f, g) { let h = new XMLHttpRequest; h.open(b, a); h.responseType = c; h.onload = function() { 200 <= h.status && 300 > h.status ? null != h.response ? f(h.response) : g(null) : g("status: " + h.status) }; h.onerror = function(k) { g(k) }; null != e && h.setRequestHeader("Content-type", e); h.send(d) }) } static v(a, b) { return ba.om(a, "GET", b, null) } static Nk(a) { return ba.v(a, "json").then(function(b) { let c = b.error; if (null != c) throw v.C(c); return b.data }) } static Uq(a, b, c) { return ba.om(a, "POST", "json", b, c) } static Yl(a, b, c) { return ba.Uq(a, b, c).then(function(d) { let e = d.error; if (null != e) throw v.C(e); return d.data }) } } class O { constructor(a, b) { this.x = a; this.y = b } } class qb { static ki(a) { return new PerfectScrollbar(a, { handlers: qb.zp }) } } class Hc { constructor(a) { this.current = 0; this.Js = a } next() { return this.Js[this.current++] } } class Ea { constructor(a) { this.cg = null; this.bl = this.Ih = !1; this.hd = window.performance.now(); this.Od = null; this.Re = 0; this.po = new nb(3, 1E3); this.W = new ec; this.Ng = "Waiting for link"; this.Ki = this.zm = !1; this.Bd = 0; let b = this; this.dg = new dc(a, function(d) { b.l.Ka.Hb(d) }); this.za = a; a.U.Po = function(d) { b.zm != d && (b.zm = d, a.ta(Oa.qa(d))) }; this.l = new ya(a.xc); window.top.document.body.classList.add("hb-playing"); this.Rh = new ac(this.l, a.U.oa(a.xc).D); this.Rh.Ei(a.U); this.l.Ka.El = M(this, this.nq); this.l.Ka.wg = M(this, this.mq); window.document.addEventListener("keydown", M(this, this.Fa)); window.document.addEventListener("keyup", M(this, this.ld)); window.onbeforeunload = function() { return "Are you sure you want to leave the room?" }; this.W.Bg = function(d) { a.A(); a.ta(d) }; this.W.xl = function(d) { "ToggleChat" == d && b.l.Ka.$m() }; this.l.Xa.Jq = function(d) { a.ta(Aa.qa(1, d)) }; this.l.Xa.Bq = function(d) { a.ta(Aa.qa(0, d)) }; this.l.Cg = function(d) { a.ta(La.qa(d)) }; this.l.Xa.Gq = function() { a.ta(new $a) }; this.l.Xa.Hq = function() { a.ta(new ab) }; this.l.Xa.uq = function() { b.an() }; this.l.Xa.Ag = function(d, e) { a.ta(fa.qa(d, e)) }; this.l.Xa.pe = M(this, this.Er); this.l.Xa.kq = function() { a.ta(new cb) }; this.l.Xa.xq = function() { Ea.ir(a) }; this.l.Xa.Iq = function(d) { a.ta(Ma.qa(d)) }; this.l.Xa.wf = function(d) { let e = a.U.oa(d); if (null != e) { let f = new ib(e, b.Ki); f.rb = function() { b.l.ab(null) }; f.jq = function(g, h) { a.ta(Na.qa(g, h)) }; f.ri = function() { b.fs(e) }; b.l.ab(f.f, function() { f.A(a.U, b.Ki) }) } }; this.l.Xa.Eq = function() { let d = new Jb; d.rb = function() { b.l.ab(null) }; b.l.ab(d.f, function() { d.Xr(b.Ng) }) }; this.l.Xa.yq = function() { if (null == b.Od) b.ks(); else { let d = b.Od.stop(); b.Od = null; Ea.wm(d) } b.l.Xa.$r(null != b.Od) }; window.requestAnimationFrame(M(this, this.sf)); this.Ph = window.setInterval(function() { b.l.Jf.Gm(b.Bd); b.Bd = 0 }, 1E3); this.ij = window.setInterval(function() { a.A() }, 50); var c = m.j.Ad.v(); c = -200 > c ? -200 : 1E3 < c ? 1E3 : c; 0 != c && (a.Fm(m.j.Ad.v()), this.l.Ka.Hb("Extrapolation set to " + c + " msec")) } ks() { this.Od = new yc(this.za, 3) } fs(a) { a = new yb(a); let b = this; a.rb = function() { b.l.ab(null) }; a.ri = function(c, d, e) { b.za.ta(na.qa(c, d, e)); b.l.ab(null) }; this.l.ab(a.f) } la() { window.document.removeEventListener("keydown", M(this, this.Fa)); window.document.removeEventListener("keyup", M(this, this.ld)); window.onbeforeunload = null; window.cancelAnimationFrame(this.Re); window.top.document.body.classList.remove("hb-playing"); this.W.la(); window.clearInterval(this.Ph); window.clearInterval(this.ij); window.clearTimeout(this.cg) } Er(a) { let b = [], c = 0, d = this.za.U.K; for (; c < d.length;) { let e = d[c]; ++c; e.fa == a && b.push(fa.qa(e.Z, u.Oa)) } for (a = 0; a < b.length;) this.za.ta(b[a++]) } sf() { this.Re = window.requestAnimationFrame(M(this, this.sf)); this.W.A(); this.za.A(); this.Rc() } Rc() { var a = window.performance.now(); 1 == m.j.Oh.v() && 28.333333333333336 > a - this.hd || (this.hd = a, this.Bd++, a = this.za.U.oa(this.za.xc), null != a && (this.Ki = a.fb), this.l.A(this.za)) } nq(a) { let b = this; this.dg.xf(a) || this.po.Fo(function() { let c = new Za; c.$c = a; b.za.ta(c) }) } mq(a) { this.Ih = a; let b = this; null == this.cg && (this.cg = window.setTimeout(function() { b.cg = null; b.Am(b.Ih) }, 1E3), this.Am(this.Ih)) } Am(a) { a != this.bl && (this.za.ta(Ja.qa(a ? 0 : 1)), this.bl = a) } an() { if (null != this.za.U.M) { let a = new bb; a.Pf = 120 != this.za.U.M.Ta; this.za.ta(a) } } Fa(a) { var b = m.j.Td; let c = null != m.j.Kd.v().v(a.code); switch (a.keyCode) { case 9: case 13: this.l.Ka.$a.focus({ preventScroll: !0 }); a.preventDefault(); break; case 27: this.l.Zk() ? this.l.ab(null) : (b = this.l, b.xe(!b.od)); a.preventDefault(); break; case 48: c ? this.W.Fa(a) : b.ha(0); break; case 49: c ? this.W.Fa(a) : b.ha(1); break; case 50: c ? this.W.Fa(a) : b.ha(2); break; case 51: c ? this.W.Fa(a) : b.ha(3); break; case 52: c ? this.W.Fa(a) : b.ha(4); break; case 53: c ? this.W.Fa(a) : b.ha(5); break; case 54: c ? this.W.Fa(a) : b.ha(6); break; case 55: c ? this.W.Fa(a) : b.ha(7); break; case 80: this.an(); break; default: this.W.Fa(a) } } ld(a) { this.W.ld(a) } static wm(a) { let b = new Date; Wb.Jr(a, "HBReplay-" + b.getFullYear() + "-" + Y.Of("" + (b.getMonth() + 1)) + "-" + Y.Of("" + b.getDate()) + "-" + Y.Of("" + b.getHours()) + "h" + Y.Of("" + b.getMinutes()) + "m.hbr2") } static ir(a) { var b = a.U.K; let c = []; var d = 0; let e = 0; for (var f = 0; f < b.length;) { let g = b[f]; ++f; g.fa == u.Oa && c.push(g.Z); g.fa == u.ia ? ++d : g.fa == u.Da && ++e } f = c.length; 0 != f && (b = function() { return c.splice(Math.random() * c.length | 0, 1)[0] }, e == d ? 2 > f || (a.ta(fa.qa(b(), u.ia)), a.ta(fa.qa(b(), u.Da))) : (d = e > d ? u.ia : u.Da, a.ta(fa.qa(b(), d)))) } } class Dc { static xf(a) { let b = new zc("([^&=]+)=?([^&]*)", "g"); a = a.substring(1); var c = 0; let d = new Map; for (; b.at(a, c);) { c = b.wn(1); c = decodeURIComponent(c.split("+").join(" ")); let e = b.wn(2); d.set(c, decodeURIComponent(e.split("+").join(" "))); c = b.bt(); c = c.Bj + c.Zs } return d } static v() { return Dc.xf(window.top.location.search) } } class Ra { constructor(a, b, c) { this.rd = this.Ce = null; this.Ae = []; this.wk = 0; this.Gl = !1; this.ig = []; this.cd = []; this.Sa = new RTCPeerConnection({ iceServers: b }, Ra.Eo); let d; this.jg = new Promise(function(f) { d = f }); let e = this; this.Sa.onicecandidate = function(f) { null == f.candidate ? d(e.ig) : (f = f.candidate, null != f.candidate && "" != f.candidate && (null != e.xg && e.xg(f), e.ig.push(f))) }; for (b = 0; b < c.length;) this.Jo(c[b++]); this.ba = a } $i(a) { null == a && (a = 1E4); window.clearTimeout(this.Ce); this.Ce = window.setTimeout(M(this, this.yp), a) } async Io(a, b) { await this.Sa.setRemoteDescription(a); a = await this.Sa.createAnswer(); await this.Sa.setLocalDescription(a); let c = 0; for (; c < b.length;) this.Qj(b[c++]); try { await Bc.Ym(this.jg, 500) } catch (d) {} return a } async Ko() { let a = await this.Sa.createOffer(); await this.Sa.setLocalDescription(a); try { await Bc.Ym(this.jg, 1E3) } catch (b) {} return a } Jo(a) { let b = { id: this.cd.length, negotiated: !0, ordered: a.ordered }; a.reliable || (b.maxRetransmits = 0); a = this.Sa.createDataChannel(a.name, b); a.binaryType = "arraybuffer"; let c = this; a.onopen = function() { let d = 0, e = c.cd; for (; d < e.length;) if ("open" != e[d++].readyState) return; null != c.Id && c.Id() }; a.onclose = function() { c.Vh() }; a.onmessage = function() { c.Vh() }; this.cd.push(a) } Qj(a) { let b = this; window.setTimeout(function() { b.Sa.addIceCandidate(a) }, this.wk) } yp() { this.Vh() } Vh() { null != this.kd && this.kd(); this.la() } la() { this.mk(); this.Sa.close() } mk() { window.clearTimeout(this.Ce); this.Id = this.xg = this.kd = null; this.Sa.onicecandidate = null; this.Sa.ondatachannel = null; this.Sa.onsignalingstatechange = null; this.Sa.oniceconnectionstatechange = null; let a = 0, b = this.cd; for (; a < b.length;) { let c = b[a]; ++a; c.onopen = null; c.onclose = null; c.onmessage = null } } } class kb { static Np() { if (null != kb.yi) return kb.yi; kb.yi = new Promise(function(a, b) { var c = window.grecaptcha; null != c ? a(c) : (c = window.document.createElement("script"), c.src = "https://www.google.com/recaptcha/api.js?onload=___recaptchaload&render=explicit", window.document.head.appendChild(c), window.___recaptchaload = function() { a(window.grecaptcha) }, c.onerror = function() { b(null) }) }); return kb.yi } } class qc { constructor(a) { this.hd = window.performance.now(); this.W = new ec; this.Bd = this.Re = 0; this.za = a; this.l = new ya(a.xc); let b = new ac(this.l); b.Ei(a.U); window.document.addEventListener("keydown", M(this, this.Fa)); window.document.addEventListener("keyup", M(this, this.ld)); let c = this; this.W.xl = function(d) { "ToggleChat" == d && c.l.Ka.$m() }; window.requestAnimationFrame(M(this, this.sf)); this.Ph = window.setInterval(function() { c.l.Jf.Gm(c.Bd); c.Bd = 0 }, 1E3); this.Jm(m.j.Td.v()); this.l.f.classList.add("replayer"); this.te = new Ba(a); this.te.Dq = function() { b.ws(a.U) }; this.te.Cq = function() { c.l.xe(null == a.U.M); b.Ei(a.U) }; this.te.Dl = function() { c.l.ib.gb.Fr() }; this.l.f.appendChild(this.te.f); this.ij = window.setInterval(function() { a.A() }, 50) } la() { window.document.removeEventListener("keydown", M(this, this.Fa)); window.document.removeEventListener("keyup", M(this, this.ld)); window.onbeforeunload = null; window.cancelAnimationFrame(this.Re); window.clearInterval(this.Ph); window.clearInterval(this.ij); this.W.la() } sf() { this.Re = window.requestAnimationFrame(M(this, this.sf)); this.za.A(); this.Rc() } Rc() { this.te.A(); let a = window.performance.now(); 1 == m.j.Oh.v() && 28.333333333333336 > a - this.hd || (this.hd = a, this.Bd++, this.Jm(m.j.Td.v()), 0 < this.za.Qd || this.l.A(this.za)) } Fa(a) { var b = m.j.Td; let c = null != m.j.Kd.v().v(a.code); switch (a.keyCode) { case 27: this.l.Zk() ? this.l.ab(null) : (b = this.l, b.xe(!b.od)); a.preventDefault(); break; case 48: c ? this.W.Fa(a) : b.ha(0); break; case 49: c ? this.W.Fa(a) : b.ha(1); break; case 50: c ? this.W.Fa(a) : b.ha(2); break; case 51: c ? this.W.Fa(a) : b.ha(3); break; case 52: c ? this.W.Fa(a) : b.ha(4); break; case 53: c ? this.W.Fa(a) : b.ha(5); break; case 54: c ? this.W.Fa(a) : b.ha(6); break; case 55: c ? this.W.Fa(a) : b.ha(7); break; default: this.W.Fa(a) } } ld(a) { this.W.ld(a) } Jm() { let a = m.j.Td.v(), b = this.l.ib.gb; b.ue = m.j.Ji.v(); b.Wg = 35; 0 >= a ? b.Md = 610 : (b.Md = 0, b.Ig = 1 + .25 * (a - 1)) } } class rb { constructor(a) { this.La = x.Ia(rb.Hj, "tbody"); var b = x.Ba(this.La); let c = b.get("name"), d = b.get("players"), e = b.get("distance"), f = b.get("pass"); b = b.get("flag"); this.qt = a; let g = a.Ed; c.textContent = g.D; d.textContent = "" + g.K + "/" + g.lf; f.textContent = g.Jb ? "Yes" : "No"; e.textContent = "" + (a.Ze | 0) + "km"; try { b.classList.add("f-" + g.ub.toLowerCase()) } catch (h) {} 9 > a.Ed.Sd && this.La.classList.add("old") } } class Vb { constructor(a) { this.Sd = a } } class Sb { static parse(a) { a.F(); let b = []; for (; 0 != a.s.byteLength - a.a;) { let c = a.se(a.Sb()), d = a.bm(a.Sb()); try { let e = new Rb; e.ma(new J(new DataView(d), !1)); let f = new vc; f.Ed = e; f.ba = c; b.push(f) } catch (e) {} } return b } static Ws(a, b, c, d) { return Math.acos(Math.sin(a) * Math.sin(c) + Math.cos(a) * Math.cos(c) * Math.cos(b - d)) } static st(a, b) { let c = a.Jc; a = a.Mc; let d = 0; for (; d < b.length;) { let e = b[d]; ++d; let f = e.Ed; e.Ze = 6378 * Sb.Ws(.017453292519943295 * f.Jc, .017453292519943295 * f.Mc, .017453292519943295 * c, .017453292519943295 * a); isFinite(e.Ze) || (e.Ze = 22E3) } } static get() { return ba.v(m.Se + "api/list", "arraybuffer").then(function(a) { return Sb.parse(new J(new DataView(a), !1)) }) } } class Ib { constructor(a) { this.D = a.D; this.zb = a.zb; this.ba = a.Z; this.f = x.Ia(Ib.O); let b = x.Ba(this.f); this.nf = b.get("name"); this.Fg = b.get("ping"); try { b.get("flag").classList.add("f-" + a.country) } catch (d) {} this.nf.textContent = this.D; this.Fg.textContent = "" + this.zb; let c = this; this.f.ondragstart = function(d) { d.dataTransfer.setData("player", Q.Je(c.ba)) }; this.f.oncontextmenu = function(d) { d.preventDefault(); D.h(c.wf, c.ba) }; this.Dm(a.fb) } A(a, b) { this.f.draggable = b; this.zb != a.zb && (this.zb = a.zb, this.Fg.textContent = "" + this.zb); this.Wn != a.fb && this.Dm(a.fb) } Dm(a) { this.Wn = a; this.f.className = "player-list-item" + (a ? " admin" : "") } } class U { constructor(a) { this.hd = window.performance.now(); this.Ug = new Map; this.nd = new Map; this.ue = 1; this.Ah = 100; this.Wg = 35; this.Md = 0; this.Ig = 1.5; this.Ya = new O(0, 0); this.Xk = !1; this.Cd = new rc; this.Ep = a; this.na = window.document.createElement("canvas"); this.na.mozOpaque = !0; this.c = this.na.getContext("2d", { alpha: !1, desynchronized: a }); this.qp = this.c.createPattern(m.pp, null); this.Co = this.c.createPattern(m.Bo, null); this.Ao = this.c.createPattern(m.zo, null) } up(a, b) { a = this.nd.get(a.Z); if (null != a) switch (b) { case 0: a.mg = !0; break; case 1: a.mg = !1 } } As() { if (null != this.na.parentElement) { var a = window.devicePixelRatio * this.ue; let b = this.na.getBoundingClientRect(), c = Math.round(b.width * a); a = Math.round(b.height * a); if (this.na.width != c || this.na.height != a) this.na.width = c, this.na.height = a } } Rc(a, b) { var c = window.performance.now(); let d = (c - this.hd) / 1E3; this.hd = c; this.Ug.clear(); this.As(); U.Ti(this.c, !0); this.c.resetTransform(); if (null != a.M) { c = a.M; var e = c.va, f = a.oa(b), g = null != f ? f.I : null, h = 0 != this.Md ? this.na.height / this.Md : this.Ig * window.devicePixelRatio * this.ue; b = this.Wg * this.ue; var k = this.Ah * this.ue, l = c.T.mf, n = this.na.width / h; 0 < l && n > l && (n = l, h = this.na.width / l); l = (this.na.height - b - k) / h; this.xs(c, g, n, l, d); for (var r = 0, t = a.K; r < t.length;) { let z = t[r]; ++r; if (null == z.I) continue; let K = this.nd.get(z.Z); null == K && (K = new ob, this.nd.set(z.Z, K)); K.A(z, a); this.Ug.set(z.I, K) } this.c.translate(this.na.width / 2, (this.na.height + b - k) / 2); this.c.scale(h, h); this.c.translate(-this.Ya.x, -this.Ya.y); this.c.lineWidth = 3; this.Ar(c.T); this.zr(c.T); h = e.H; r = 0; for (t = e.qb; r < t.length;) this.ur(t[r++], h); this.tr(a, n, l); this.vr(a, f); null != g && this.xr(g.a); this.c.lineWidth = 2; f = 0; for (g = a.K; f < g.length;) l = g[f], ++f, n = l.I, null != n && (l = this.nd.get(l.Z), this.km(n, l)); f = 0; for (e = e.H; f < e.length;) if (g = e[f], ++f, null == this.Ug.get(g)) { if (0 > g.V) break; this.km(g, null) } this.c.lineWidth = 3; this.c.resetTransform(); this.c.translate(this.na.width / 2, b + (this.na.height - b - k) / 2); this.wr(c); 0 >= c.Ta && (this.Cd.A(d), this.Cd.Rc(this.c)); this.Ug.clear(); this.sr(a) } } sr(a) { let b = new Set; var c = 0; for (a = a.K; c < a.length;) b.add(a[c++].Z); c = this.nd.keys(); for (a = c.next(); !a.done;) { let d = a.value; a = c.next(); b.has(d) || this.nd.delete(d) } } xs(a, b, c, d, e) { if (null != b && 1 == a.T.Ue) { var f = b.a; var g = f.x; f = f.y; null == f && (f = 0); null == g && (g = 0) } else if (f = a.va.H[0].a, g = f.x, f = f.y, null != b) { var h = b.a; g = .5 * (g + h.x); f = .5 * (f + h.y); var k = c; b = d; null == d && (b = 0); null == c && (k = 0); var l = .5 * k; let n = .5 * b; b = h.x - l + 50; k = h.y - n + 50; l = h.x + l - 50; h = h.y + n - 50; g = g > l ? l : g < b ? b : g; f = f > h ? h : f < k ? k : f } e *= 60; 1 < e && (e = 1); b = g; b == b ? (b = f, b = b == b) : b = !1; b && (k = b = this.Ya, e *= .04, h = k.x, k = k.y, b.x = h + (g - h) * e, b.y = k + (f - k) * e); this.Do(c, d, a.T) } Do(a, b, c) { a > 2 * c.bc ? this.Ya.x = 0 : this.Ya.x + .5 * a > c.bc ? this.Ya.x = c.bc - .5 * a : this.Ya.x - .5 * a < -c.bc && (this.Ya.x = -c.bc + .5 * a); b > 2 * c.sc ? this.Ya.y = 0 : this.Ya.y + .5 * b > c.sc ? this.Ya.y = c.sc - .5 * b : this.Ya.y - .5 * b < -c.sc && (this.Ya.y = -c.sc + .5 * b) } xr(a) { this.c.beginPath(); this.c.strokeStyle = "white"; this.c.globalAlpha = .3; this.c.arc(a.x, a.y, 25, 0, 2 * Math.PI, !1); this.c.stroke(); this.c.globalAlpha = 1 } wr(a) { let b = 0 < a.Ta; this.Vr(b); b && (120 != a.Ta && (a = a.Ta / 120 * 200, this.c.fillStyle = "white", this.c.fillRect(.5 * -a, 100, a, 20)), this.Cd.Mq.Br(this.c)) } Vr(a) { this.Xk != a && (this.na.style.filter = a ? "grayscale(70%)" : "", this.Xk = a) } um(a, b, c, d, e, f) { d = b + d; e = c + e; a.beginPath(); a.moveTo(d - f, c); a.arcTo(d, c, d, c + f, f); a.lineTo(d, e - f); a.arcTo(d, e, d - f, e, f); a.lineTo(b + f, e); a.arcTo(b, e, b, e - f, f); a.lineTo(b, c + f); a.arcTo(b, c, b + f, c, f); a.closePath() } Ar(a) { U.Ti(this.c, !1); var b = a.de; let c = a.ce, d = this; if (1 == a.ud) this.c.save(), this.c.resetTransform(), this.c.fillStyle = U.nc(a.td), this.c.fillRect(0, 0, this.na.width, this.na.height), this.c.restore(), this.c.strokeStyle = "#C7E6BD", this.c.fillStyle = this.qp, this.um(this.c, -b, -c, 2 * b, 2 * c, a.Gc), this.c.save(), this.c.scale(2, 2), this.c.fill(), this.c.restore(), this.c.moveTo(0, -c), this.c.lineTo(0, c), this.c.stroke(), this.c.beginPath(), this.c.arc(0, 0, a.bd, 0, 2 * Math.PI), this.c.stroke(); else if (2 == a.ud) { this.c.strokeStyle = "#E9CC6E"; this.c.save(); this.c.beginPath(); this.c.rect(this.Ya.x - 1E4, this.Ya.y - 1E4, 2E4, 2E4); this.c.scale(2, 2); this.c.fillStyle = this.Ao; this.c.fill(); this.c.restore(); this.c.save(); this.um(this.c, -b, -c, 2 * b, 2 * c, a.Gc); this.c.scale(2, 2); this.c.fillStyle = this.Co; this.c.fill(); this.c.restore(); this.c.stroke(); this.c.beginPath(); this.c.moveTo(0, -c); this.c.setLineDash([15, 15]); this.c.lineTo(0, c); this.c.stroke(); this.c.setLineDash([]); var e = a.Te; b -= e; e < a.Gc && (b = 0); e = function(f, g, h) { d.c.beginPath(); d.c.strokeStyle = f; d.c.arc(0, 0, a.bd, -1.5707963267948966, 1.5707963267948966, h); 0 != g && (d.c.moveTo(g, -c), d.c.lineTo(g, c)); d.c.stroke() }; e("#85ACF3", b, !1); e("#E18977", -b, !0) } else this.c.save(), this.c.resetTransform(), this.c.fillStyle = U.nc(a.td), this.c.fillRect(0, 0, this.na.width, this.na.height), this.c.restore(); U.Ti(this.c, !0) } vr(a, b) { let c = m.j.Uk.v(), d = 0; for (a = a.K; d < a.length;) { let f = a[d]; ++d; var e = f.I; if (null == e) continue; e = e.a; let g = this.nd.get(f.Z); c && g.mg && this.c.drawImage(m.cn, e.x - .5 * m.cn.width, e.y - 35); f != b && g.Xo(this.c, e.x, e.y + 50) } } km(a, b) { 0 > a.V || (this.c.beginPath(), null == b ? (this.c.fillStyle = U.nc(a.S), this.c.strokeStyle = "black") : (this.c.fillStyle = b.$j, this.c.strokeStyle = b.Qo), this.c.beginPath(), this.c.arc(a.a.x, a.a.y, a.V, 0, 2 * Math.PI, !1), null != b ? (this.c.save(), b = a.V / 32, this.c.translate(a.a.x, a.a.y), this.c.scale(b, b), this.c.translate(-32, -32), this.c.fill(), this.c.restore()) : -1 != (a.S | 0) && this.c.fill(), this.c.stroke()) } zr(a) { if (null != a) { var b = 0; for (a = a.X; b < a.length;) this.yr(a[b++]) } } ur(a, b) { if (!(0 > a.S)) { this.c.beginPath(); this.c.strokeStyle = U.nc(a.S); var c = b[a.ie]; a = b[a.je]; null != c && null != a && (c = c.a, a = a.a, this.c.moveTo(c.x, c.y), this.c.lineTo(a.x, a.y), this.c.stroke()) } } yr(a) { if (a.bb) { this.c.beginPath(); this.c.strokeStyle = U.nc(a.S); var b = a.$.a, c = a.ea.a; if (0 != 0 * a.vb) this.c.moveTo(b.x, b.y), this.c.lineTo(c.x, c.y); else { a = a.he; let d = b.x - a.x; b = b.y - a.y; this.c.arc(a.x, a.y, Math.sqrt(d * d + b * b), Math.atan2(b, d), Math.atan2(c.y - a.y, c.x - a.x)) } this.c.stroke() } } tr(a, b, c) { var d = a.M; if (null != d) for (d = d.va.H[0], this.Ik(d.a, d.S, b, c), d = 0, a = a.K; d < a.length;) { let e = a[d]; ++d; null != e.I && this.Ik(e.I.a, e.fa.S, b, c) } } Ik(a, b, c, d) { c = .5 * c - 25; var e = .5 * d - 25; null == e && (e = 0); null == c && (c = 0); d = c; c = e; var f = this.Ya; e = a.x - f.x; f = a.y - f.y; let g = -d, h = -c, k = this.Ya; d = k.x + (e > d ? d : e < g ? g : e); c = k.y + (f > c ? c : f < h ? h : f); e = a.x - d; a = a.y - c; 900 < e * e + a * a && (this.c.fillStyle = "rgba(0,0,0,0.5)", this.Jk(d + 2, c + 2, Math.atan2(a, e)), this.c.fillStyle = U.nc(b), this.Jk(d - 2, c - 2, Math.atan2(a, e))) } Jk(a, b, c) { this.c.save(); this.c.translate(a, b); this.c.rotate(c); this.c.beginPath(); this.c.moveTo(15, 0); this.c.lineTo(0, 7); this.c.lineTo(0, -7); this.c.closePath(); this.c.fill(); this.c.restore() } Fr() { let a = this.nd.values(), b = a.next(); for (; !b.done;) { let c = b.value; b = a.next(); c.mg = !1 } } static nc(a) { return "rgba(" + [(a & 16711680) >>> 16, (a & 65280) >>> 8, a & 255].join() + ",255)" } static Ti(a, b) { a.imageSmoothingEnabled = b; a.mozImageSmoothingEnabled = b } } class Wa { constructor(a) { this.cq = a } } class x { static Ba(a) { let b = new Map, c = 0; for (a = a.querySelectorAll("[data-hook]"); c < a.length;) { let d = a[c++]; b.set(d.getAttribute("data-hook"), d) } return b } static Ia(a, b) { null == b && (b = "div"); b = window.document.createElement(b); b.innerHTML = a; return b.firstElementChild } static replaceWith(a, b) { a.parentElement.replaceChild(b, a) } static Qf(a) { let b = a.firstChild; for (; null != b;) a.removeChild(b), b = a.firstChild } } class Va { constructor(a, b) { this.f = x.Ia(Va.O); let c = x.Ba(this.f); this.hq = c.get("ok"); let d = this; this.hq.onclick = function() { H.h(d.Wa) }; this.mm = c.get("replay"); let e = null != b; this.mm.hidden = !e; e && (this.mm.onclick = function() { Ea.wm(b) }); c.get("reason").textContent = a } } class Ic {} class Kb { constructor(a, b, c, d) { this.yh = new Set; this.Yf = new Set; this.Mg = this.Cf = this.Cm = !1; this.Tc = null; this.Ff = this.ba = ""; this.Ir = 5E4; this.Hr = 1E4; this.xd = new Map; this.hs = a; this.kg = b; this.oo = c; this.Ff = d; null == this.Ff && (this.Ff = ""); this.Xi() } la() { window.clearTimeout(this.sm); window.clearTimeout(this.ve); this.ve = null; window.clearInterval(this.Nl); this.aa.onmessage = null; this.aa.onerror = null; this.aa.onclose = null; this.aa.onopen = null; this.aa.close(); this.aa = null; this.Kk() } Si(a) { if (null != this.Tc || null != a) { if (null != this.Tc && null != a && this.Tc.byteLength == a.byteLength) { let c = new Uint8Array(this.Tc), d = new Uint8Array(a), e = !1, f = 0, g = this.Tc.byteLength; for (; f < g;) { let h = f++; if (c[h] != d[h]) { e = !0; break } } if (!e) return } this.Tc = a.slice(0); this.Mg = !0; var b = this; null != this.aa && 1 == this.aa.readyState && null == this.ve && (this.Ni(), this.ve = window.setTimeout(function() { b.ve = null; 1 == b.aa.readyState && b.Mg && b.Ni() }, 1E4)) } } Ri(a) { function b() { null != c.aa && 1 == c.aa.readyState && c.Cf != c.Cm && c.Bm(); c.pm = null } this.Cf = a; let c = this; null == this.pm && (b(), this.pm = window.setTimeout(b, 1E3)) } Xi(a) { function b(e) { e = e.sitekey; if (null == e) throw v.C(null); null != d.vf && d.vf(e, function(f) { d.Xi(f) }) } function c(e) { let f = e.url; if (null == f) throw v.C(null); e = e.token; if (null == e) throw v.C(null); d.aa = new WebSocket(f + "?token=" + e); d.aa.binaryType = "arraybuffer"; d.aa.onopen = function() { d.xp() }; d.aa.onclose = function(g) { d.Uh(4001 != g.code) }; d.aa.onerror = function() { d.Uh(!0) }; d.aa.onmessage = M(d, d.Yh) } null == a && (a = ""); let d = this; ba.Yl(this.hs, "token=" + this.Ff + "&rcr=" + a, ba.Lj).then(function(e) { switch (e.action) { case "connect": c(e); break; case "recaptcha": b(e) } }).catch(function() { d.Uh(!0) }) } xp() { null != this.Tc && this.Ni(); 0 != this.Cf && this.Bm(); let a = this; this.Nl = window.setInterval(function() { a.Mi() }, 4E4) } Yh(a) { a = new J(new DataView(a.data), !1); switch (a.F()) { case 1: this.Xh(a); break; case 4: this.Wh(a); break; case 5: this.sp(a); break; case 6: this.vp(a) } } Xh(a) { let b = a.jb(), c = ha.Ls(a.sb(a.F())), d, e, f; try { a = new J(new DataView(pako.inflateRaw(a.sb()).buffer), !1); d = 0 != a.F(); e = a.kc(); let g = a.Jg(), h = [], k = 0; for (; k < g.length;) h.push(new RTCIceCandidate(g[k++])); f = h } catch (g) { this.Hf(b, 0); return } this.wp(b, c, e, f, a, d) } wp(a, b, c, d, e, f) { if (16 <= this.xd.size) this.Hf(a, 4104); else if (this.yh.has(b)) this.Hf(a, 4102); else { for (var g = [], h = 0; h < d.length;) { let r = Kb.Pk(d[h++]); if (null != r) { if (this.Yf.has(r)) { this.Hf(a, 4102); return } g.push(r) } } if (null != this.qk && (h = new J(e.s), h.a = e.a, e = this.qk(b, h), 1 == e.pb)) { this.Hf(a, e.reason); return } var k = new Ra(a, this.kg, this.oo); f && (k.wk = 2500); k.Ae = g; k.rd = b; this.xd.set(a, k); var l = this, n = function() { l.Uc(0, k, null); l.xd.delete(k.ba) }; k.kd = n; k.Id = function() { l.xd.delete(k.ba); l.Uc(0, k, null); null != l.Al && l.Al(new Qb(k)) }; k.$i(); (async function() { try { let r = await k.Io(new RTCSessionDescription({ sdp: c, type: "offer" }), d); l.Oi(k, r, k.ig, null); k.jg.then(function() { l.Uc(0, k, null) }); k.xg = function(t) { l.Li(k, t) } } catch (r) { n() } })() } } Wh(a) { let b = a.jb(), c; try { a = new J(new DataView(pako.inflateRaw(a.sb()).buffer), !1), c = new RTCIceCandidate(a.Jg()) } catch (d) { return } this.rp(b, c) } rp(a, b) { a = this.xd.get(a); if (null != a) { let c = Kb.Pk(b); if (null != c && (a.Ae.push(c), this.Yf.has(c))) return; a.Qj(b) } } sp(a) { this.ba = a.se(a.F()); null != this.yg && this.yg(this.ba) } vp(a) { this.Ff = a.se(a.s.byteLength - a.a) } Uc(a, b, c) { if (!b.Gl) { 0 == a && (b.Gl = !0); var d = b.ba; b = A.ka(32, !1); b.m(a); b.tb(d); null != c && (a = pako.deflateRaw(c.Wb()), b.Lb(a)); this.aa.send(b.Rd()) } } Hf(a, b) { let c = A.ka(16, !1); c.m(0); c.tb(a); c.Xb(b); this.aa.send(c.Rd()) } Mi() { let a = A.ka(1, !1); a.m(8); this.aa.send(a.Rd()) } Ni() { this.Mg = !1; let a = A.ka(256, !1); a.m(7); null != this.Tc && a.Yg(this.Tc); this.aa.send(a.Rd()) } Bm() { let a = A.ka(2, !1); a.m(9); a.m(this.Cf ? 1 : 0); this.aa.send(a.Rd()); this.Cm = this.Cf } Oi(a, b, c, d) { let e = A.ka(32, !1); e.oc(b.sdp); e.Zg(c); null != d && e.Lb(d.Wb()); this.Uc(1, a, e) } Li(a, b) { let c = A.ka(32, !1); c.Zg(b); this.Uc(4, a, c) } Kk() { let a = this.xd.values(), b = a.next(); for (; !b.done;) { let c = b.value; b = a.next(); c.la() } this.xd.clear() } Uh(a) { this.Kk(); window.clearTimeout(this.ve); this.ve = null; this.Mg = !1; window.clearInterval(this.Nl); window.clearTimeout(this.sm); let b = this; a && (this.sm = window.setTimeout(function() { b.Xi() }, this.Hr + Math.random() * this.Ir | 0)) } bo(a) { let b = 0, c = a.Ae; for (; b < c.length;) this.Yf.add(c[b++]); null != a.rd && this.yh.add(a.rd); return { Ct: a.Ae, At: a.rd } } ee() { this.Yf.clear(); this.yh.clear() } static Pk(a) { try { let b = Mc.xf(a.candidate); if ("srflx" == b.us) return b.Cp } catch (b) {} return null } } class ra {} class zc { constructor(a, b) { this.r = new RegExp(a, b.split("u").join("")) } match(a) { this.r.global && (this.r.lastIndex = 0); this.r.pc = this.r.exec(a); this.r.nh = a; return null != this.r.pc } wn(a) { if (null != this.r.pc && 0 <= a && a < this.r.pc.length) return this.r.pc[a]; throw v.C("EReg::matched"); } bt() { if (null == this.r.pc) throw v.C("No string matched"); return { Bj: this.r.pc.index, Zs: this.r.pc[0].length } } at(a, b) { var c; null == c && (c = -1); if (this.r.global) { this.r.lastIndex = b; this.r.pc = this.r.exec(0 > c ? a : P.substr(a, 0, b + c)); if (b = null != this.r.pc) this.r.nh = a; return b } if (c = this.match(0 > c ? P.substr(a, b, null) : P.substr(a, b, c))) this.r.nh = a, this.r.pc.index += b; return c } } class ec { constructor() { this.Qc = new Set; this.ng = 0; window.document.addEventListener("focusout", M(this, this.zl)) } la() { window.document.removeEventListener("focusout", M(this, this.zl)) } A() { let a = 0; this.Qc.has("Up") && (a = 1); this.Qc.has("Down") && (a |= 2); this.Qc.has("Left") && (a |= 4); this.Qc.has("Right") && (a |= 8); this.Qc.has("Kick") && (a |= 16); if (null != this.Bg && a != this.ng) { this.ng = a; let b = new Ka; b.input = a; this.Bg(b) } } Fa(a) { var b = a.code; b = m.j.Kd.v().v(b); null != b && (a.preventDefault(), this.sq(b)) } ld(a) { a = m.j.Kd.v().v(a.code); null != a && this.iq(a) } sq(a) { this.Qc.has(a) || (this.Qc.add(a), this.A(), D.h(this.xl, a)) } iq(a) { this.Qc.delete(a) && this.A() } zl() { if (null != this.Bg && 0 != this.ng) { this.Qc.clear(); this.ng = 0; let a = new Ka; a.input = 0; this.Bg(a) } } } class Mc { static xf(a) { a = a.split(" "); let b = a[4]; if ("typ" != a[6]) throw v.C(null); return { us: a[7], Cp: b } } } class I { constructor() { this.Sg = this.Tg = this.ya = null; this.tk = 0; this.ea = this.$ = this.he = null; this.Hc = 0; this.o = 1; this.i = 63; this.B = 32; this.vb = 1 / 0; this.bb = !0; this.S = 0 } ga(a) { let b = 0, c = a.a; a.m(0); a.m(this.$.Dd); a.m(this.ea.Dd); 0 != this.Hc && (b = 1, a.u(this.Hc)); this.vb != 1 / 0 && (b |= 2, a.u(this.vb)); 0 != this.S && (b |= 4, a.R(this.S)); this.bb && (b |= 8); a.s.setUint8(c, b); a.u(this.o); a.R(this.i); a.R(this.B) } ma(a, b) { let c = a.F(); this.$ = b[a.F()]; this.ea = b[a.F()]; this.Hc = 0 != (c & 1) ? a.w() : 0; this.vb = 0 != (c & 2) ? a.w() : 1 / 0; this.S = 0 != (c & 4) ? a.N() : 0; this.bb = 0 != (c & 8); this.o = a.w(); this.i = a.N(); this.B = a.N() } Vc(a) { a *= .017453292519943295; if (0 > a) { a = -a; let b = this.$; this.$ = this.ea; this.ea = b; this.Hc = -this.Hc } a > I.Nn && a < I.Mn && (this.vb = 1 / Math.tan(a / 2)) } hp() { return 0 != 0 * this.vb ? 0 : 114.59155902616465 * Math.atan(1 / this.vb) } re() { if (0 == 0 * this.vb) { var a = this.ea.a, b = this.$.a, c = .5 * (a.x - b.x); a = .5 * (a.y - b.y); b = this.$.a; let d = this.vb; this.he = new O(b.x + c + -a * d, b.y + a + c * d); a = this.$.a; b = this.he; c = a.x - b.x; a = a.y - b.y; this.tk = Math.sqrt(c * c + a * a); c = this.$.a; a = this.he; this.Sg = new O(-(c.y - a.y), c.x - a.x); c = this.he; a = this.ea.a; this.Tg = new O(-(c.y - a.y), c.x - a.x); 0 >= this.vb && (a = c = this.Sg, c.x = -a.x, c.y = -a.y, a = c = this.Tg, c.x = -a.x, c.y = -a.y) } else a = this.$.a, b = this.ea.a, c = a.x - b.x, a = -(a.y - b.y), b = Math.sqrt(a * a + c * c), this.ya = new O(a / b, c / b) } } class xa { constructor() { this.Cc = -1; this.Bn = null; this.fa = u.Oa; this.I = null; this.Bc = this.Zc = 0; this.Yb = !1; this.W = this.Z = 0; this.D = "Player"; this.fh = this.zb = 0; this.country = null; this.Vd = !1; this.Zb = this.Ud = null; this.Nb = 0; this.fb = !1 } wa(a) { a.m(this.fb ? 1 : 0); a.R(this.Nb); a.Eb(this.Zb); a.Eb(this.Ud); a.m(this.Vd ? 1 : 0); a.Eb(this.country); a.R(this.fh); a.Eb(this.D); a.R(this.W); a.nb(this.Z); a.m(this.Yb ? 1 : 0); a.lj(this.Bc); a.m(this.Zc); a.m(this.fa.ba); a.lj(null == this.I ? -1 : this.I.Il) } xa(a, b) { this.fb = 0 != a.F(); this.Nb = a.N(); this.Zb = a.Ab(); this.Ud = a.Ab(); this.Vd = 0 != a.F(); this.country = a.Ab(); this.fh = a.N(); this.D = a.Ab(); this.W = a.N(); this.Z = a.Bb(); this.Yb = 0 != a.F(); this.Bc = a.Ai(); this.Zc = a.F(); let c = a.zf(); this.fa = 1 == c ? u.ia : 2 == c ? u.Da : u.Oa; a = a.Ai(); this.I = 0 > a ? null : b[a] } Vs() { let a = ra.Cc, b = this.Bn; this.Cc != a && (null == b && (this.Bn = b = new xa), this.Cc = a, xa.Ms(b, this)); return b } static Ms(a, b) { a.fb = b.fb; a.Nb = b.Nb; a.Zb = b.Zb; a.Ud = b.Ud; a.Vd = b.Vd; a.country = b.country; a.fh = b.fh; a.zb = b.zb; a.D = b.D; a.W = b.W; a.Z = b.Z; a.Yb = b.Yb; a.Bc = b.Bc; a.Zc = b.Zc; a.I = null == b.I ? null : b.I.uc(); a.fa = b.fa } } class Wb { static Jr(a, b) { Wb.vm(new Blob([a], { type: "octet/stream" }), b) } static Kr(a, b) { Wb.vm(new Blob([a], { type: "text/plain" }), b) } static vm(a, b) { let c = window.document.createElement("a"); c.style.display = "display: none"; window.document.body.appendChild(c); a = URL.createObjectURL(a); c.href = a; c.download = b; c.click(); URL.revokeObjectURL(a); c.remove() } } class Jb { constructor() { this.Bk = null; this.f = x.Ia(Jb.O); var a = x.Ba(this.f); this.og = a.get("link"); let b = a.get("copy"); a = a.get("close"); let c = this; this.og.onfocus = function() { c.og.select() }; b.onclick = function() { c.og.select(); return window.document.execCommand("Copy") }; a.onclick = function() { H.h(c.rb) } } Xr(a) { this.Bk != a && (this.Bk = a, this.og.value = a) } } class A { constructor(a, b) { null == b && (b = !1); this.s = a; this.Ua = b; this.a = 0 } Vg() { let a = new ArrayBuffer(this.a), b = new Uint8Array(this.s.buffer, this.s.byteOffset, this.a); (new Uint8Array(a)).set(b); return a } Wb() { return new Uint8Array(this.s.buffer, this.s.byteOffset, this.a) } Rd() { return new DataView(this.s.buffer, this.s.byteOffset, this.a) } qs() { return new J(this.Rd(), this.Ua) } tc(a) { this.s.byteLength < a && this.Gr(2 * this.s.byteLength >= a ? 2 * this.s.byteLength : a) } Gr(a) { if (1 > a) throw v.C("Can't resize buffer to a capacity lower than 1"); if (this.s.byteLength < a) { let b = new Uint8Array(this.s.buffer); a = new ArrayBuffer(a); (new Uint8Array(a)).set(b); this.s = new DataView(a) } } m(a) { let b = this.a++; this.tc(this.a); this.s.setUint8(b, a) } lj(a) { let b = this.a; this.a += 2; this.tc(this.a); this.s.setInt16(b, a, this.Ua) } Xb(a) { let b = this.a; this.a += 2; this.tc(this.a); this.s.setUint16(b, a, this.Ua) } R(a) { let b = this.a; this.a += 4; this.tc(this.a); this.s.setInt32(b, a, this.Ua) } tb(a) { let b = this.a; this.a += 4; this.tc(this.a); this.s.setUint32(b, a, this.Ua) } kj(a) { let b = this.a; this.a += 4; this.tc(this.a); this.s.setFloat32(b, a, this.Ua) } u(a) { let b = this.a; this.a += 8; this.tc(this.a); this.s.setFloat64(b, a, this.Ua) } Lb(a) { let b = this.a; this.a += a.byteLength; this.tc(this.a); (new Uint8Array(this.s.buffer, this.s.byteOffset, this.s.byteLength)).set(a, b) } Es(a) { a = new Uint8Array(a.buffer, a.byteOffset, a.byteLength); this.Lb(a) } Yg(a) { this.Lb(new Uint8Array(a)) } oc(a) { this.nb(A.Bh(a)); this.mj(a) } Eb(a) { null == a ? this.nb(0) : (this.nb(A.Bh(a) + 1), this.mj(a)) } jn(a) { a = (new TextEncoder).encode(a); let b = a.length; if (255 < b) throw v.C(null); this.m(b); this.Es(a) } Zg(a) { this.oc(JSON.stringify(a)) } mj(a) { let b = this.a; this.tc(b + A.Bh(a)); let c = a.length, d = 0; for (; d < c;) b += A.Zo(P.rj(a, d++), this.s, b); this.a = b } nb(a) { let b = this.a; a >>>= 0; this.tc(b + A.lo(a)); this.s.setUint8(b, a | 128); 128 <= a ? (this.s.setUint8(b + 1, a >> 7 | 128), 16384 <= a ? (this.s.setUint8(b + 2, a >> 14 | 128), 2097152 <= a ? (this.s.setUint8(b + 3, a >> 21 | 128), 268435456 <= a ? (this.s.setUint8(b + 4, a >> 28 & 127), a = 5) : (this.s.setUint8(b + 3, this.s.getUint8(b + 3) & 127), a = 4)) : (this.s.setUint8(b + 2, this.s.getUint8(b + 2) & 127), a = 3)) : (this.s.setUint8(b + 1, this.s.getUint8(b + 1) & 127), a = 2)) : (this.s.setUint8(b, this.s.getUint8(b) & 127), a = 1); this.a += a } static ka(a, b) { null == b && (b = !1); null == a && (a = 16); return new A(new DataView(new ArrayBuffer(a)), b) } static Zo(a, b, c) { let d = c; if (0 > a) throw v.C("Cannot encode UTF8 character: charCode (" + a + ") is negative"); if (128 > a) b.setUint8(c, a & 127), ++c; else if (2048 > a) b.setUint8(c, a >> 6 & 31 | 192), b.setUint8(c + 1, a & 63 | 128), c += 2; else if (65536 > a) b.setUint8(c, a >> 12 & 15 | 224), b.setUint8(c + 1, a >> 6 & 63 | 128), b.setUint8(c + 2, a & 63 | 128), c += 3; else if (2097152 > a) b.setUint8(c, a >> 18 & 7 | 240), b.setUint8(c + 1, a >> 12 & 63 | 128), b.setUint8(c + 2, a >> 6 & 63 | 128), b.setUint8(c + 3, a & 63 | 128), c += 4; else if (67108864 > a) b.setUint8(c, a >> 24 & 3 | 248), b.setUint8(c + 1, a >> 18 & 63 | 128), b.setUint8(c + 2, a >> 12 & 63 | 128), b.setUint8(c + 3, a >> 6 & 63 | 128), b.setUint8(c + 4, a & 63 | 128), c += 5; else if (-2147483648 > a) b.setUint8(c, a >> 30 & 1 | 252), b.setUint8(c + 1, a >> 24 & 63 | 128), b.setUint8(c + 2, a >> 18 & 63 | 128), b.setUint8(c + 3, a >> 12 & 63 | 128), b.setUint8(c + 4, a >> 6 & 63 | 128), b.setUint8(c + 5, a & 63 | 128), c += 6; else throw v.C("Cannot encode UTF8 character: charCode (" + a + ") is too large (>= 0x80000000)"); return c - d } static ko(a) { if (0 > a) throw v.C("Cannot calculate length of UTF8 character: charCode (" + a + ") is negative"); if (128 > a) return 1; if (2048 > a) return 2; if (65536 > a) return 3; if (2097152 > a) return 4; if (67108864 > a) return 5; if (-2147483648 > a) return 6; throw v.C("Cannot calculate length of UTF8 character: charCode (" + a + ") is too large (>= 0x80000000)"); } static Bh(a) { let b = 0, c = a.length, d = 0; for (; d < c;) b += A.ko(P.rj(a, d++)); return b } static lo(a) { a >>>= 0; return 128 > a ? 1 : 16384 > a ? 2 : 2097152 > a ? 3 : 268435456 > a ? 4 : 5 } } class fc { constructor(a, b, c, d, e, f) { this.wh = this.Hh = !1; this.ua = new Ra(0, b, d); let g = this; this.ua.kd = function() { g.ke(ia.ae) }; this.ua.Id = function() { null != g.Id && g.Id(new Qb(g.ua)); g.ua = null; g.nk() }; (async function() { try { let h = await g.ua.Ko(); g.aa = new WebSocket(a + "client?id=" + c + (null == f ? "" : "&token=" + f)); g.aa.binaryType = "arraybuffer"; g.aa.onclose = function(k) { g.Hh || g.ke(ia.Ne(k.code)) }; g.aa.onerror = function() { g.Hh || g.ke(ia.Error) }; g.aa.onmessage = M(g, g.Yh); g.aa.onopen = function() { null != g.Fl && g.Fl(); g.ua.$i(); g.Oi(h, g.ua.ig, e); g.ua.xg = M(g, g.Li); g.ua.jg.then(function() { g.Uc(0, null) }) } } catch (h) { g.ke(ia.ae) } })() } mo() { this.ke(ia.Me) } nk() { null != this.aa && (this.aa.onclose = null, this.aa.onmessage = null, this.aa.onerror = null, this.aa.onopen = null, this.aa.close(), this.aa = null); null != this.ua && (this.ua.la(), this.ua = null) } ke(a) { null != this.kd && this.kd(a); this.nk() } Yh(a) { var b = new J(new DataView(a.data)); a = b.F(); 0 < b.s.byteLength - b.a && (b = new J(new DataView(pako.inflateRaw(b.sb()).buffer), !1)); switch (a) { case 1: a = b.kc(); b = b.Jg(); let c = [], d = 0; for (; d < b.length;) c.push(new RTCIceCandidate(b[d++])); this.Xh(a, c); break; case 4: this.Wh(new RTCIceCandidate(b.Jg())) } } Xh(a, b) { this.ua.$i(this.wh ? 1E4 : 4E3); this.Hh = !0; null != this.wl && this.wl(); let c = this; this.ua.Sa.setRemoteDescription(new RTCSessionDescription({ sdp: a, type: "answer" })).then(function() { let d = 0; for (; d < b.length;) c.ua.Sa.addIceCandidate(b[d++]) }).catch(function() { c.ke(ia.Error) }) } Wh(a) { this.ua.Sa.addIceCandidate(a) } Uc(a, b) { if (null != this.aa) { var c = A.ka(32, !1); c.m(a); null != b && (a = pako.deflateRaw(b.Wb()), c.Lb(a)); this.aa.send(c.Rd()) } } Oi(a, b, c) { let d = A.ka(32, !1); d.m(this.wh ? 1 : 0); d.oc(a.sdp); d.Zg(b); null != c && d.Lb(c.Wb()); this.Uc(1, d) } Li(a) { let b = A.ka(32, !1); b.Zg(a); this.Uc(4, b) } static ip(a) { switch (a.pb) { case 0: return "Failed"; case 1: return Jc.description(a.code); case 2: return ""; case 3: return "Master connection error" } } } class sc { constructor(a) { this.f = a; let b = x.Ba(a); this.fo = b.get("sound-bar"); this.Ap = b.get("sound-icon"); this.eo = b.get("sound-bar-bg"); let c = this; b.get("sound-btn").onclick = function() { m.j.ye.ha(!m.j.ye.v()); c.A() }; b.get("sound-slider").onmousedown = function(d) { function e(g) { g.preventDefault(); { let h = c.eo.getBoundingClientRect(); g = (g.clientY - h.top) / h.height } g = 1 - g; m.j.Vi.ha(1 < g ? 1 : 0 > g ? 0 : g); m.j.ye.ha(!0); c.A() } e(d); let f = null; f = function(g) { e(g); a.classList.toggle("dragging", !1); window.document.removeEventListener("mousemove", e, !1); window.document.removeEventListener("mouseup", f, !1) }; a.classList.toggle("dragging", !0); window.document.addEventListener("mousemove", e, !1); window.document.addEventListener("mouseup", f, !1) }; this.A() } A() { let a = m.j.Vi.v(), b = !m.j.ye.v(); if (this.Kp != a || this.Jp != b) this.Kp = a, (this.Jp = b) && (a = 0), this.Ap.className = "icon-" + (0 >= a ? "volume-off" : .5 >= a ? "volume-down" : "volume-up"), this.fo.style.top = 100 * (1 - a) + "%", m.Qa.Di() } } class xb { static delete(a) { return null == window.indexedDB ? Promise.reject("IndexedDB not supported by browser.") : new Promise(function(b, c) { let d = window.indexedDB.open("stadiums", 1); d.onblocked = d.onerror = c; d.onupgradeneeded = function(e) { let f = d.result; f.onerror = c; 1 > e.oldVersion && (f.createObjectStore("files", { autoIncrement: !0 }), f.createObjectStore("meta", { keyPath: "id" })) }; d.onsuccess = function() { let e = d.result; e.onerror = c; let f = e.transaction(["meta", "files"], "readwrite"); f.onerror = f.onabort = function(g) { c(g); e.close() }; f.oncomplete = function() { b(0); e.close() }; f.objectStore("files").delete(a); f.objectStore("meta").delete(a) } }) } static get(a) { return null == window.indexedDB ? Promise.reject("IndexedDB not supported by browser.") : new Promise(function(b, c) { let d = window.indexedDB.open("stadiums", 1); d.onblocked = d.onerror = c; d.onupgradeneeded = function(e) { let f = d.result; f.onerror = c; 1 > e.oldVersion && (f.createObjectStore("files", { autoIncrement: !0 }), f.createObjectStore("meta", { keyPath: "id" })) }; d.onsuccess = function() { let e = d.result; e.onerror = c; let f = e.transaction(["files"]); f.onerror = f.onabort = function(g) { c(g); e.close() }; f.oncomplete = function() { e.close() }; $b.ph(f.objectStore("files").get(a)).then(function(g) { try { let h = new q; h.el(g); b(h) } catch (h) { g = v.Mb(h).Fb(), c(g) } }, c) } }) } static getAll() { return null == window.indexedDB ? Promise.reject("IndexedDB not supported by browser.") : new Promise(function(a, b) { let c = window.indexedDB.open("stadiums", 1); c.onblocked = c.onerror = b; c.onupgradeneeded = function(d) { let e = c.result; e.onerror = b; 1 > d.oldVersion && (e.createObjectStore("files", { autoIncrement: !0 }), e.createObjectStore("meta", { keyPath: "id" })) }; c.onsuccess = function() { let d = c.result; d.onerror = b; let e = d.transaction(["meta"]); e.onerror = e.onabort = function(f) { b(f); d.close() }; e.oncomplete = function() { d.close() }; $b.ph(e.objectStore("meta").getAll()).then(a, b) } }) } static pt() { let a = pa.navigator.storage; if (null == a || null == a.persist) return Promise.resolve(!1); try { return a.persisted().then(function(b) { return b ? !0 : a.persist() }).catch(function() { return !1 }) } catch (b) { return Promise.resolve(!1) } } static add(a) { return null == window.indexedDB ? Promise.reject("IndexedDB not supported by browser.") : new Promise(function(b, c) { let d = window.indexedDB.open("stadiums", 1); d.onblocked = d.onerror = c; d.onupgradeneeded = function(e) { let f = d.result; f.onerror = c; 1 > e.oldVersion && (f.createObjectStore("files", { autoIncrement: !0 }), f.createObjectStore("meta", { keyPath: "id" })) }; d.onsuccess = function() { let e = d.result; e.onerror = c; let f = e.transaction(["files", "meta"], "readwrite"); f.onerror = f.onabort = function(g) { c(g); e.close() }; f.oncomplete = function() { b(0); e.close() }; try { $b.ph(f.objectStore("files").add(a.De())).then(function(g) { g = { name: a.D, id: g }; return $b.ph(f.objectStore("meta").add(g)) }).catch(c) } catch (g) { c(0) } } }) } } class Ob { constructor(a, b) { this.Zj = []; this.qr = /[#@][^\s@#]*$/; this.Qb = a; this.zq = b; a.hidden = !0 } Zh() { this.hj(null) } no(a, b) { b = this.qr.exec(P.substr(a, 0, b)); if (null != b) { var c = b[0], d = P.substr(c, 1, null).split(""), e = Ob.$o, f = Array(d.length); let g = 0, h = d.length; for (; g < h;) { let l = g++; f[l] = e(d[l]) } let k = new RegExp(f.join(".*?"), "i"); this.Yk = "#" == c.charAt(0); this.Fi = b.index; this.Dr = c.length; this.lm = a; a = function(l) { l = k.exec(l.D); return null == l ? -1 : l.index + l[0].length }; b = []; c = 0; for (d = this.Zj; c < d.length;) e = d[c], ++c, f = a(e), 0 <= f && b.push({ Gn: f, item: e }); b.sort(function(l, n) { return l.Gn - n.Gn }); this.hj(b) } else this.hj(null) } Gk(a) { a = this.Yk ? "#" + a.ba : "@" + Y.replace(a.D, " ", "_"); this.zq(P.substr(this.lm, 0, this.Fi) + a + " " + P.substr(this.lm, this.Fi + this.Dr, null), this.Fi + a.length + 1) } hj(a) { var b = null != a && 0 != a.length; this.Qb.hidden || x.Qf(this.Qb); this.dd = null; this.Qb.hidden = !b; if (b) { var c = this; b = []; for (var d = 0; d < a.length;) { var e = a[d++]; let f = window.document.createElement("div"), g = e.item; e = g.D; this.Yk && (e = "(" + g.ba + ") " + e); f.textContent = e; this.Qb.appendChild(f); f.onclick = function() { c.Gk(g) }; b.push({ item: g, La: f }) } this.dd = b; this.dd[0].La.classList.toggle("selected", !0); this.zc = 0 } } hk(a) { if (null != this.dd) { var b = this.zc; this.zc += a; a = this.dd.length - 1; 0 > this.zc ? this.zc = a : this.zc > a && (this.zc = 0); a = this.dd[this.zc]; b != this.zc && (a.La.classList.toggle("selected", !0), this.dd[b].La.classList.toggle("selected", !1)); a = a.La; b = a.offsetTop; a = b + a.offsetHeight; var c = this.Qb.scrollTop + this.Qb.clientHeight; b < this.Qb.scrollTop ? this.Qb.scrollTop = b : a > c && (this.Qb.scrollTop = a - this.Qb.clientHeight) } } Vo() { null != this.dd && (this.Gk(this.dd[this.zc].item), this.Zh()) } static $o(a) { return -1 != ".$^{[(|)*+?\\".indexOf(a) ? "\\" + a : a } } class w { static nn(a) { if (null == a) return null; if (a instanceof Array) return Array; { let b = a.g; if (null != b) return b; a = w.Nj(a); return null != a ? w.Tn(a) : null } } static Pe(a, b) { if (null == a) return "null"; if (5 <= b.length) return "<...>"; var c = typeof a; "function" == c && (a.b || a.Wf) && (c = "object"); switch (c) { case "function": return ""; case "object": if (a.Gb) { var d = Lb[a.Gb].be[a.pb]; c = d.wc; if (d.Oe) { b += "\t"; var e = [], f = 0; for (d = d.Oe; f < d.length;) { let g = d[f]; f += 1; e.push(w.Pe(a[g], b)) } a = e; return c + "(" + a.join(",") + ")" } return c } if (a instanceof Array) { c = "["; b += "\t"; e = 0; for (f = a.length; e < f;) d = e++, c += (0 < d ? "," : "") + w.Pe(a[d], b); return c += "]" } try { e = a.toString } catch (g) { return "???" } if (null != e && e != Object.toString && "function" == typeof e && (c = a.toString(), "[object Object]" != c)) return c; c = "{\n"; b += "\t"; e = null != a.hasOwnProperty; f = null; for (f in a) e && !a.hasOwnProperty(f) || "prototype" == f || "__class__" == f || "__super__" == f || "__interfaces__" == f || "__properties__" == f || (2 != c.length && (c += ", \n"), c += b + f + " : " + w.Pe(a[f], b)); b = b.substring(1); return c += "\n" + b + "}"; case "string": return a; default: return String(a) } } static Mj(a, b) { for (;;) { if (null == a) return !1; if (a == b) return !0; let c = a.ad; if (null != c && (null == a.ja || a.ja.ad != c)) { let d = 0, e = c.length; for (; d < e;) { let f = c[d++]; if (f == b || w.Mj(f, b)) return !0 } } a = a.ja } } static Rn(a, b) { if (null == b) return !1; switch (b) { case Array: return a instanceof Array; case Fc: return "boolean" == typeof a; case Nc: return null != a; case E: return "number" == typeof a; case Zb: return "number" == typeof a ? (a | 0) === a : !1; case String: return "string" == typeof a; default: if (null != a) if ("function" == typeof b) { if (w.Qn(a, b)) return !0 } else { if ("object" == typeof b && w.Sn(b) && a instanceof b) return !0 } else return !1; return b == Oc && null != a.b || b == Pc && null != a.Wf ? !0 : null != a.Gb ? Lb[a.Gb] == b : !1 } } static Qn(a, b) { return a instanceof b ? !0 : b.uh ? w.Mj(w.nn(a), b) : !1 } static J(a, b) { if (null == a || w.Rn(a, b)) return a; throw v.C("Cannot cast " + Q.Je(a) + " to " + Q.Je(b)); } static Nj(a) { a = w.Un.call(a).slice(8, -1); return "Object" == a || "Function" == a || "Math" == a || "JSON" == a ? null : a } static Sn(a) { return null != w.Nj(a) } static Tn(a) { return pa[a] } } class Q { static Je(a) { return w.Pe(a, "") } static parseInt(a) { a = parseInt(a); return isNaN(a) ? null : a } } class tb { constructor() { this.Gf = null; this.f = x.Ia(tb.O); var a = x.Ba(this.f); let b = this; a.get("cancel").onclick = function() { H.h(b.rb) }; this.Dh = a.get("change"); this.Dh.disabled = !0; this.Dh.onclick = function() { null != b.Gf && b.xm(b.Gf.index) }; a = a.get("list"); this.xi(a); let c = qb.ki(a); window.setTimeout(function() { c.update() }, 0) } xi(a) { let b = this, c = 0, d = Da.eb.length >> 2; for (; c < d;) { var e = c++; let f = e, g = Da.eb[e << 2]; e = Da.eb[(e << 2) + 1].toLowerCase(); let h = window.document.createElement("div"); h.className = "elem"; h.innerHTML = '
' + g; a.appendChild(h); h.onclick = function() { null != b.Gf && b.Gf.La.classList.remove("selected"); b.Dh.disabled = !1; b.Gf = { La: h, index: f }; h.classList.add("selected") }; h.ondblclick = function() { b.xm(f) } } } xm(a) { let b = new la; b.ub = Da.eb[(a << 2) + 1].toLowerCase(); b.Jc = Da.eb[(a << 2) + 2]; b.Mc = Da.eb[(a << 2) + 3]; m.j.af.ha(b); H.h(this.rb) } } class Ya extends p { constructor() { super() } apply(a) { a.yo(this.bh) } wa(a) { a.nb(this.bh.byteLength); a.Yg(this.bh) } xa(a) { this.bh = a.bm(a.Bb()) } } class oa extends W { constructor(a) { W.yb ? super() : (W.yb = !0, super(), W.yb = !1, this.Za(a)) } Za(a) { this.ej = new Xa; this.Ee = this.ec = 0; this.we = new Xa; this.xc = this.dc = this.Ad = 0; this.Ec = .06; this.sh = 16.666666666666668; this.Vf = 120; super.Za(a) } ta() { throw v.C("missing implementation"); } hg() { throw v.C("missing implementation"); } A() { throw v.C("missing implementation"); } Rj(a) { let b = this.we.list, c = 0, d = b.length, e = 0; for (; e < a;) { for (++e; c < d;) { let f = b[c]; if (f.ob != this.Y) break; f.apply(this.U); null != this.hc && this.hc(f); this.ec++; ++c } this.U.A(1); this.Ee += this.ec; this.ec = 0; this.Y++ } for (; c < d;) { a = b[c]; if (a.ob != this.Y || a.Dc != this.ec) break; a.apply(this.U); null != this.hc && this.hc(a); this.ec++; ++c } b.splice(0, c) } Pg(a) { a.ob == this.Y && a.Dc <= this.ec ? (a.Dc = this.ec++, a.apply(this.U), null != this.hc && this.hc(a)) : this.we.rn(a) } Qk(a, b) { if (0 >= a) return this.U; a > this.Vf && (a = this.Vf); ra.Cc++; let c = this.U.uc(); null != b ? (this.ej.Ns(this.we, b), b = this.ej) : b = this.we; b = b.list; let d = 0, e = b.length, f = this.Y, g = a | 0, h = f + g; for (; f <= h;) { for (; d < e;) { let k = b[d]; if (k.ob > f) break; k.Ge.Ca && k.apply(c); ++d } c.A(f != h ? 1 : a - g); ++f } for (a = this.ej.list; 0 < a.length;) a.pop(); return c } Ur(a) { 300 < a && (a = 300); 0 > a && (a = 0); this.dc = this.Ec * a | 0 } Fm(a) { this.Ad = this.Ec * (-200 > a ? -200 : 1E3 < a ? 1E3 : a) } } class Ha extends oa { constructor(a, b) { W.yb = !0; super(); W.yb = !1; this.Za(a, b) } Za(a, b) { this.Qi = []; this.Ci = []; this.Hg = new Xa; this.gq = 1; this.yd = this.Xm = 0; this.dj = new Nb(50); this.Gg = new Nb(50); this.On = 500; this.zk = ""; super.Za(b.state); this.di = b.wt; this.Xe = b.Qs; let c = null, d = this; c = function(e) { d.If(0); let f = A.ka(); f.Xb(b.version); f.Eb(b.password); d.rc = new fc(b.yj, b.iceServers, a, nc.channels, f, b.Jn); d.rc.wh = e; d.rc.Id = function(h) { d.rc = null; d.ua = h; h.zg = function(k) { k = new J(new DataView(k)); d.br(k) }; h.tf = function() { 3 != d.yd && D.h(d.uf, ja.Tf("Connection closed")); d.la() }; h = window.setTimeout(function() { D.h(d.uf, ja.Tf("Game state timeout")); d.la() }, 1E4); d.Ce = h; d.If(2) }; d.rc.Fl = function() { d.If(1) }; let g = !1; d.rc.wl = function() { g = !0 }; d.rc.kd = function(h) { if (!e && 1 == d.yd && g) H.h(d.Aq), c(!0); else { let k = fc.ip(h); switch (h.pb) { case 0: h = ja.ae; break; case 1: h = ja.Ne(h.code); break; case 2: h = ja.Me; break; default: h = ja.Tf(k) } D.h(d.uf, h); d.la(k) } } }; c(null != b.Dn && b.Dn) } la(a) { null != this.rc && (this.rc.kd = null, this.rc.mo(), this.rc = null); window.clearTimeout(this.Ce); null != this.ua && (this.ua.tf = null, this.ua.la(), this.ua = null); this.zk = null == a ? "Connection closed" : a; this.If(4) } If(a) { this.yd != a && (this.yd = a, null != this.Jd && this.Jd(a)) } Fd() { return 3 == this.yd } A() { this.Fd() && window.performance.now() - this.Xm > this.On && this.Mi(); this.ed = window.performance.now() * this.Ec + this.dj.lh() - this.Y; this.fk() } hg() { return this.Fd() ? (0 > this.dc && (this.dc = 0), this.Qk(window.performance.now() * this.Ec + this.dj.lh() - this.Y + this.dc + this.Ad, this.Hg)) : this.U } fk() { 0 > this.ed && (this.ed = 0); this.ed > this.Vf && (this.ed = this.Vf) } br(a) { switch (a.F()) { case 0: this.Zq(a); break; case 1: this.Yq(a); break; case 2: this.Vq(a); break; case 3: this.dr(a); break; case 4: this.ar(a); break; case 5: this.Xq(a); break; case 6: this.cr(a) } } Zq(a) { a = a.sb(a.Bb()); let b = Promise.resolve(null); null != this.Xe && (b = this.Xe.gs(a)); let c = this; b.catch(function() { return null }).then(function(d) { c.Rr(d) }) } Yq(a) { a = pako.inflateRaw(a.sb()); a = new J(new DataView(a.buffer, a.byteOffset, a.byteLength)); this.xc = a.Sb(); this.Y = a.jb(); this.Ee = a.jb(); this.ec = a.Bb(); this.ed = 10; for (this.U.ma(a); 0 < a.s.byteLength - a.a;) this.Pg(this.fn(a)); window.clearTimeout(this.Ce); this.If(3) } Rr(a) { let b = A.ka(); b.m(0); null != a ? (b.nb(a.byteLength), b.Lb(a)) : b.nb(0); b.nb(this.di.byteLength); b.Yg(this.di); this.Vb(b); this.di = null } Vb(a, b) { null == b && (b = 0); this.ua.Vb(b, a) } fn(a) { let b = a.jb(), c = a.Bb(), d = a.Sb(), e = a.jb(); a = p.qh(a); a.P = d; a.Fe = e; a.ob = b; a.Dc = c; return a } Vq(a) { a = this.fn(a); this.Pg(a); a.P == this.xc && this.Hg.ot(a.Fe); this.$l() } cr(a) { a = p.qh(a); a.P = 0; a.Fe = 0; a.apply(this.U); null != this.hc && this.hc(a) } dr(a) { let b = a.jb(); a = a.jb(); this.Ci.push({ frame: b, Nf: a }); this.$l() } $l() { if (3 == this.yd) { for (var a = 0, b = this.Ci; a < b.length;) { var c = b[a]; ++a; c.frame <= this.Y || c.Nf == this.Ee + this.ec + this.we.Os(c.frame) && this.Xn(c.frame - this.Y) } a = 0; b = this.Ci; c = 0; for (var d = b.length; c < d;) { let e = b[c++]; e.frame > this.Y && (b[a] = e, ++a) } for (; b.length > a;) b.pop(); this.Hg.nt(this.Y) } } Xq(a) { let b = 0 != a.F(), c = a.kc(), d = ""; 0 < a.s.byteLength - a.a && (d = a.kc()); a = b ? "You were banned" : "You were kicked"; "" != d && (a += " by " + d); "" != c && (a += " (" + c + ")"); this.la(a) } ar(a) { var b = a.w(); a = a.w(); let c = window.performance.now() - a; this.dj.add(b - a * this.Ec); this.Gg.add(c); let d = b = 0, e = this.Qi; for (; d < e.length;) { let f = e[d]; ++d; if (f > a) break; f < a ? D.h(this.Cl, -1) : D.h(this.Cl, c); ++b } this.Qi.splice(0, b) } Mi() { let a = window.performance.now(); this.Xm = a; this.Qi.push(a); let b = this.Gg.lh() | 0, c = A.ka(); c.m(2); c.u(a); c.nb(b); this.Vb(c, 2) } Xn(a) { this.Rj(a); this.ed -= a; this.fk() } ta(a) { if (3 == this.yd) { var b = this.gq++, c = 0; 0 > this.dc && (this.dc = 0); a.Ge.delay && (c = this.Y + (this.ed | 0) + this.dc); var d = A.ka(); d.m(1); d.tb(c); d.tb(b); p.Aj(a, d); this.Vb(d); a.Ge.Ca && (a.Fe = b, a.P = this.xc, a.ob = c, this.Hg.rn(a)) } } static Gh(a) { switch (a.pb) { case 0: return "Cancelled"; case 1: return "Failed to connect to peer."; case 2: return Jc.description(a.reason); case 3: return a.description } } } class Tb extends oa { constructor(a) { W.yb = !0; super(); W.yb = !1; this.Za(a) } Za(a) { this.bk = new Map; this.Jb = null; this.tg = 32; this.We = new Map; this.cc = []; this.Pd = 2; this.so = 600; super.Za(a.state); this.$p = a.yj; this.Cs = a.version; this.aq = 1; this.cl = this.xc = 0; this.Zi = window.performance.now(); this.Oc = new Kb(this.$p, a.iceServers, nc.channels, a.Jn); this.Oc.qk = M(this, this.tp); let b = this; this.Oc.Al = function(c) { b.tq(c) }; this.Oc.yg = function(c) { D.h(b.yg, c) }; this.Oc.vf = function(c, d) { null != b.vf && b.vf(c, d) } } la() { this.Oc.la(); let a = 0, b = this.cc; for (; a < b.length;) { let c = b[a++].ua; c.tf = null; c.zg = null; c.la() } } Yo(a, b, c, d) { let e = this.We.get(a); if (null != e) { if (d) { let f = this.Oc.bo(e.ua); this.bk.set(a, f) } a = A.ka(); a.m(5); a.m(d ? 1 : 0); a.oc(b); null == c && (c = ""); a.oc(c); e.Vb(a); e.ua.la() } } ee() { this.Oc.ee(); this.bk.clear() } Si(a) { this.Oc.Si(a) } Ri(a) { this.Oc.Ri(a) } ta(a) { a.P = 0; let b = this.Y + this.Pd + this.dc; a.Ge.delay || (b = this.Y); a.ob = b; this.Pg(a); this.Pi(); 0 < this.cc.length && this.Qg(this.li(a), 1) } A() { let a = ((window.performance.now() - this.Zi) * this.Ec | 0) - this.Y; 0 < a && this.Rj(a); 7 <= this.Y - this.dl && this.Pi(); this.Y - this.cl >= this.so && (this.Pi(), this.Pr()) } hg() { 0 > this.dc && (this.dc = 0); return this.Qk((window.performance.now() - this.Zi) * this.Ec - this.Y + this.Pd + this.dc + this.Ad) } tp(a, b) { if (this.cc.length >= this.tg) return fb.Uf(4100); try { if (b.Sb() != this.Cs) throw v.C(null); } catch (c) { return fb.Uf(4103) } try { let c = b.Ab(); if (null != this.Jb && c != this.Jb) throw v.C(null); } catch (c) { return fb.Uf(4101) } return fb.Kj } tq(a) { if (this.cc.length >= this.tg) a.la(); else { var b = new tc(a); this.cc.push(b); var c = this; a.zg = function(d) { d = new J(new DataView(d)); c.Wq(d, b) }; a.tf = function() { P.remove(c.cc, b); c.We.delete(b.ba); D.h(c.pq, b.ba) }; a = A.ka(1 + b.Ve.byteLength); a.m(0); a.nb(b.Ve.byteLength); a.Lb(b.Ve); b.Vb(a) } } li(a) { let b = A.ka(); b.m(2); this.Hl(a, b); return b } Hl(a, b) { b.tb(a.ob); b.nb(a.Dc); b.Xb(a.P); b.tb(a.Fe); p.Aj(a, b) } Pi() { if (!(0 >= this.Y - this.dl) && 0 != this.cc.length) { var a = A.ka(); a.m(3); a.tb(this.Y); a.tb(this.Ee); this.Qg(a, 2); this.dl = this.Y } } Qg(a, b) { null == b && (b = 0); let c = 0, d = this.cc; for (; c < d.length;) { let e = d[c]; ++c; e.Lg && e.Vb(a, b) } } Qr(a) { let b = A.ka(); b.m(1); let c = A.ka(); c.Xb(a.ba); c.tb(this.Y); c.tb(this.Ee); c.nb(this.ec); this.U.ga(c); let d = this.we.list, e = 0, f = d.length; for (; e < f;) this.Hl(d[e++], c); b.Lb(pako.deflateRaw(c.Wb())); a.Vb(b) } Pr() { this.cl = this.Y; if (0 != this.cc.length) { var a = new Ya; a.ob = this.Y; a.Dc = this.ec++; a.P = 0; a.bh = this.U.fp(); this.Qg(this.li(a)) } } fr(a, b) { let c = a.sb(a.Bb()), d = a.sb(a.Bb()); a = b.Ve; b.Ve = null; let e = this; T.Bs(c, a).catch(function() { return null }).then(function(f) { try { if (-1 != e.cc.indexOf(b)) { b.xt = f; var g = e.aq++; b.ba = g; e.We.set(g, b); ua.h(e.oq, g, new J(new DataView(d.buffer, d.byteOffset, d.byteLength), !1)); b.Lg = !0; e.Qr(b) } } catch (h) { f = v.Mb(h).Fb(), e.Rk(b, f) } }) } Wq(a, b) { this.A(); try { if (!b.mp.bn()) throw v.C(1); let c = a.F(); if (b.Lg) switch (c) { case 1: this.gr(a, b); break; case 2: this.$q(a, b); break; default: throw v.C(0); } else if (0 == c) this.fr(a, b); else throw v.C(0); if (0 < a.s.byteLength - a.a) throw v.C(2); } catch (c) { this.Rk(b, v.Mb(c).Fb()) } } Rk(a, b) { pa.console.log(b); this.We.delete(a.ba); P.remove(this.cc, a); a.Lg && null != this.yl && this.yl(a.ba); a.ua.la() } $q(a, b) { let c = a.w(); b.zb = a.Bb(); a = A.ka(); a.m(4); a.u((window.performance.now() - this.Zi) * this.Ec + this.Pd); a.u(c); b.Vb(a, 2) } gr(a, b) { var c = a.jb(); let d = a.jb(); a = p.qh(a); var e = a.Ge.Cj; if (null != e) { var f = b.Pj.get(e); null == f && (f = new nb(e.pj, e.Ij), b.Pj.set(e, f)); if (!f.bn()) throw v.C(3); } e = this.Y + this.Pd; f = this.Y; var g = this.Y + 20; f = c < f ? f : c > g ? g : c; g = c - e; if (a.Ge.delay) { if (g < -this.Pd - 3) f = e; else { let h = -this.Pd, k = this.Pd; b.rl.Pa(g < h ? h : g > k ? k : g) } f < e && -.85 > b.rl.$n() && (f = e); f < b.$h && (f = b.$h); b.$h = f } a.En = g; c = f - c; a.Fn = 0 < c ? c : 0; a.Fe = d; a.P = b.ba; a.ob = f; a.An(this.U) && (this.Pg(a), this.Qg(this.li(a), 1)) } } class Ub extends oa { constructor(a, b, c) { W.yb = !0; super(); W.yb = !1; this.Za(a, b, c) } Za(a, b, c) { this.ol = []; this.Ol = 5; this.Qd = -1; this.vg = this.Ub = this.fi = this.Mk = 0; super.Za(b); a = new J(new DataView(a.buffer), !1); if (1212305970 != a.jb()) throw v.C(""); b = a.jb(); if (c != b) throw v.C(new Vb(b)); this.Bf = a.jb(); c = pako.inflateRaw(a.sb()); this.Sc = new J(new DataView(c.buffer, c.byteOffset, c.byteLength)); this.jr(this.Sc); c = this.Sc.sb(); this.Sc = new J(new DataView(c.buffer, c.byteOffset, c.byteLength), !1); this.Hi(); this.fi = window.performance.now(); this.xc = -1 } jr(a) { let b = a.Sb(), c = 0, d = 0; for (; d < b;) { ++d; c += a.Bb(); let e = a.F(); this.ol.push({ Bj: c / this.Bf, kind: e }) } } cm() { var a = this.Sc; 0 < a.s.byteLength - a.a ? (a = this.Sc.Bb(), this.vg += a, a = this.Sc.Sb(), this.ug = p.qh(this.Sc), this.ug.P = a) : this.ug = null } lp() { return this.Y / this.Bf } ta() {} hg() { this.A(); ra.Cc++; let a = this.U.uc(); a.A(this.Mk); return a } A() { var a = window.performance.now(), b = a - this.fi; this.fi = a; 0 < this.Qd ? (this.Ub += 1E4, this.Ub > this.Qd && (this.Ub = this.Qd, this.Qd = -1)) : this.Ub += b * this.Ol; a = this.Bf * this.sh; this.Ub > a && (this.Ub = a); b = this.Ub * this.Ec; a = b | 0; for (this.Mk = b - a; this.Y < a;) { for (; null != this.ug && this.vg == this.Y;) b = this.ug, b.apply(this.U), null != this.hc && this.hc(b), this.cm(); this.Y++; this.U.A(1) } } Nr(a) { this.Qd = a; a < this.Ub && this.Hi() } Hi() { this.vg = 0; this.Ub = this.Y = this.Sc.a = 0; this.U.ma(this.Sc); this.cm() } } class Oa extends p { constructor() { super() } apply(a) { let b = a.oa(this.P); null != b && this.jh != b.Vd && (b.Vd = this.jh, D.h(a.Rl, b)) } wa(a) { a.m(this.jh ? 1 : 0) } xa(a) { this.jh = 0 != a.F() } static qa(a) { let b = new Oa; b.jh = a; return b } } class Db extends p { constructor() { super() } apply(a) { 0 == this.P && Pb.h(a.tm, this.$c, this.color, this.style, this.In) } wa(a) { a.oc(ha.Xc(this.$c, 1E3)); a.R(this.color); a.m(this.style); a.m(this.In) } xa(a) { this.$c = a.kc(); if (1E3 < this.$c.length) throw v.C("message too long"); this.color = a.N(); this.style = a.F(); this.In = a.F() } } class cb extends p { constructor() { super() } apply(a) { if (a.Pb(this.P)) { for (var b = a.oa(this.P), c = a.K, d = [], e = 0, f = 0, g = 0; g < c.length;) { let h = c[g]; ++g; h.fa == u.Oa && d.push(h); h.fa == u.ia ? ++e : h.fa == u.Da && ++f } c = d.length; 0 != c && (f == e ? 2 > c || (a.ag(b, d[0], u.ia), a.ag(b, d[1], u.Da)) : a.ag(b, d[0], f > e ? u.ia : u.Da)) } } wa() {} xa() {} } class Aa extends p { constructor() { super() } apply(a) { if (a.Pb(this.P) && null == a.M) switch (this.Fj) { case 0: var b = this.newValue; a.kb = 0 > b ? 0 : 99 < b ? 99 : b; break; case 1: b = this.newValue, a.Ga = 0 > b ? 0 : 99 < b ? 99 : b } } wa(a) { a.R(this.Fj); a.R(this.newValue) } xa(a) { this.Fj = a.N(); this.newValue = a.N() } static qa(a, b) { let c = new Aa; c.Fj = a; c.newValue = b; return c } } class Na extends p { constructor() { super() } apply(a) { if (a.Pb(this.P)) { var b = a.oa(this.P), c = a.oa(this.Wd); null != c && 0 != c.Z && c.fb != this.ih && (c.fb = this.ih, null != a.vi && a.vi(b, c)) } } wa(a) { a.R(this.Wd); a.m(this.ih ? 1 : 0) } xa(a) { this.Wd = a.N(); this.ih = 0 != a.F() } static qa(a, b) { let c = new Na; c.Wd = a; c.ih = b; return c } } class Pa extends p { constructor() { super() } apply(a) { a = a.oa(this.P); null != a && (a.Zb = this.ac) } wa(a) { a.Eb(this.ac) } xa(a) { this.ac = a.Ab(); null != this.ac && (this.ac = ha.Xc(this.ac, 2)) } static qa(a) { let b = new Pa; b.ac = a; return b } } class fa extends p { constructor() { super() } apply(a) { let b = a.oa(this.Wd); if (null != b) { var c = a.oa(this.P), d = a.Pb(this.P); (d = d || b == c && !a.Ac && null == a.M) && a.ag(c, b, this.zj) } } wa(a) { a.R(this.Wd); a.m(this.zj.ba) } xa(a) { this.Wd = a.N(); a = a.zf(); this.zj = 1 == a ? u.ia : 2 == a ? u.Da : u.Oa } static qa(a, b) { let c = new fa; c.Wd = a; c.zj = b; return c } } class La extends p { constructor() { super() } apply(a) { if (a.Pb(this.P)) { var b = a.oa(this.P); null == a.M && (a.T = this.Zd, null != a.Wi && a.Wi(b, this.Zd)) } } wa(a) { var b = A.ka(); this.Zd.ga(b); b = pako.deflateRaw(b.Wb()); a.Xb(b.byteLength); a.Lb(b) } xa(a) { a = pako.inflateRaw(a.sb(a.Sb())); this.Zd = q.ma(new J(new DataView(a.buffer, a.byteOffset, a.byteLength))) } static qa(a) { let b = new La; b.Zd = a; return b } } class db extends p { constructor() { super() } apply(a) { a.Pb(this.P) && this.fa != u.Oa && (a.mb[this.fa.ba] = this.dh) } wa(a) { a.m(this.fa.ba); this.dh.ga(a) } xa(a) { let b = a.zf(); this.fa = 1 == b ? u.ia : 2 == b ? u.Da : u.Oa; this.dh = new va; this.dh.ma(a) } } class Ma extends p { constructor() { super() } apply(a) { if (a.Pb(this.P)) { var b = a.Ac; a.Ac = this.newValue; b != this.newValue && ua.h(a.zt, a.oa(this.P), this.newValue) } } wa(a) { a.m(this.newValue ? 1 : 0) } xa(a) { this.newValue = 0 != a.F() } static qa(a) { let b = new Ma; b.newValue = a; return b } } class Ga extends p { constructor() { super() } apply(a) { if (0 == this.P) { var b = new xa; b.Z = this.Z; b.D = this.name; b.country = this.sj; b.Zb = this.Zb; a.K.push(b); a = a.Sl; null != a && a(b) } } wa(a) { a.R(this.Z); a.Eb(this.name); a.Eb(this.sj); a.Eb(this.Zb) } xa(a) { this.Z = a.N(); this.name = a.Ab(); this.sj = a.Ab(); this.Zb = a.Ab() } static qa(a, b, c, d) { let e = new Ga; e.Z = a; e.name = b; e.sj = c; e.Zb = d; return e } } class Fb extends p { constructor() { super() } apply(a) { a = a.oa(this.Ke); null != a && 0 == this.P && (a.Ud = this.ac) } wa(a) { a.Eb(this.ac); a.R(this.Ke) } xa(a) { this.ac = a.Ab(); this.Ke = a.N(); null != this.ac && (this.ac = ha.Xc(this.ac, 2)) } } class bb extends p { constructor() { super() } apply(a) { let b = a.M; if (null != b && a.Pb(this.P)) { var c = a.oa(this.P), d = 120 == b.Ta, e = 0 < b.Ta; this.Pf ? b.Ta = 120 : 120 == b.Ta && (b.Ta = 119); d != this.Pf && jc.h(a.Ll, c, this.Pf, e) } } wa(a) { a.m(this.Pf ? 1 : 0) } xa(a) { this.Pf = 0 != a.F() } } class Za extends p { constructor() { super() } An(a) { if (null != a.Pq) { let b = a.oa(this.P); return null == b ? !1 : a.Pq(b, this.$c) } return !0 } apply(a) { let b = a.oa(this.P); null != b && ua.h(a.Ql, b, this.$c) } wa(a) { a.oc(ha.Xc(this.$c, 140)) } xa(a) { this.$c = a.kc(); if (140 < this.$c.length) throw v.C("message too long"); } } class Ka extends p { constructor() { super() } apply(a) { let b = a.oa(this.P); if (null != b) { var c = this.input; 0 == (b.W & 16) && 0 != (c & 16) && (b.Yb = !0); b.W = c; null != a.Qq && null != b.I && a.Qq(b, this.input, this.En, this.Fn) } } wa(a) { a.tb(this.input) } xa(a) { this.input = a.jb() } } class Ja extends p { constructor() { super() } apply(a) { let b = a.oa(this.P); null != b && ua.h(a.Vl, b, this.Gj) } wa(a) { a.m(this.Gj) } xa(a) { this.Gj = a.F() } static qa(a) { let b = new Ja; b.Gj = a; return b } } class na extends p { constructor() { p.yb = !0; super(); p.yb = !1; this.Za() } Za() { this.ah = !1; super.Za() } apply(a) { if (0 != this.Z && a.Pb(this.P)) { var b = a.oa(this.Z); if (null != b) { var c = a.oa(this.P); P.remove(a.K, b); null != a.M && P.remove(a.M.va.H, b.I); Pb.h(a.Tl, b, this.qd, this.ah, c) } } } wa(a) { null != this.qd && (this.qd = ha.Xc(this.qd, 100)); a.R(this.Z); a.Eb(this.qd); a.m(this.ah ? 1 : 0) } xa(a) { this.Z = a.N(); this.qd = a.Ab(); this.ah = 0 != a.F(); if (null != this.qd && 100 < this.qd.length) throw v.C("string too long"); } static qa(a, b, c) { let d = new na; d.Z = a; d.qd = b; d.ah = c; return d } } class Eb extends p { constructor() { super() } apply(a) { if (0 == this.P) { for (var b = new Map, c = 0, d = a.K; c < d.length;) { var e = d[c]; ++c; b.set(e.Z, e) } c = []; d = 0; for (e = this.kh; d < e.length;) { var f = e[d]; ++d; let g = b.get(f); null != g && (b.delete(f), c.push(g)) } d = []; b = b.values(); for (e = b.next(); !e.done;) f = e.value, e = b.next(), d.push(f); a.K = this.zn ? c.concat(d) : d.concat(c) } } wa(a) { a.m(this.zn ? 1 : 0); a.m(this.kh.length); let b = 0, c = this.kh; for (; b < c.length;) a.R(c[b++]) } xa(a) { this.zn = 0 != a.F(); let b = a.F(); this.kh = []; let c = 0; for (; c < b;) ++c, this.kh.push(a.N()) } } class Gb extends p { constructor() { super() } apply(a) { if (0 == this.P) { var b = a.M; if (null != b) { if (this.sn) { a = a.oa(this.Ke); if (null == a) return; a = a.I } else a = b.va.H[this.Ke]; null != a && (null != this.Ma[0] && (a.a.x = this.Ma[0]), null != this.Ma[1] && (a.a.y = this.Ma[1]), null != this.Ma[2] && (a.G.x = this.Ma[2]), null != this.Ma[3] && (a.G.y = this.Ma[3]), null != this.Ma[4] && (a.ra.x = this.Ma[4]), null != this.Ma[5] && (a.ra.y = this.Ma[5]), null != this.Ma[6] && (a.V = this.Ma[6]), null != this.Ma[7] && (a.o = this.Ma[7]), null != this.Ma[8] && (a.ca = this.Ma[8]), null != this.Ma[9] && (a.Ea = this.Ma[9]), null != this.Yc[0] && (a.S = this.Yc[0]), null != this.Yc[1] && (a.i = this.Yc[1]), null != this.Yc[2] && (a.B = this.Yc[2])) } } } wa(a) { a.R(this.Ke); a.m(this.sn ? 1 : 0); let b = a.a; a.Xb(0); let c = 0; for (var d = 1, e = 0, f = this.Ma; e < f.length;) { var g = f[e]; ++e; null != g && (c |= d, a.kj(g)); d <<= 1 } e = 0; for (f = this.Yc; e < f.length;) g = f[e], ++e, null != g && (c |= d, a.R(g)), d <<= 1; d = a.a; a.a = b; a.Xb(c); a.a = d } xa(a) { this.Ke = a.N(); this.sn = 0 != a.F(); let b = a.Sb(); this.Ma = []; for (var c = 0; 10 > c;) { var d = c++; this.Ma[d] = null; 0 != (b & 1) && (this.Ma[d] = a.zi()); b >>>= 1 } this.Yc = []; for (c = 0; 3 > c;) d = c++, this.Yc[d] = null, 0 != (b & 1) && (this.Yc[d] = a.N()), b >>>= 1 } } class Qa extends p { constructor() { super() } apply(a) { a.Pb(this.P) && a.Wr(a.oa(this.P), this.min, this.rate, this.qj) } wa(a) { a.R(this.min); a.R(this.rate); a.R(this.qj) } xa(a) { this.min = a.N(); this.rate = a.N(); this.qj = a.N() } static qa(a, b, c) { let d = new Qa; d.min = a; d.rate = b; d.qj = c; return d } } class $a extends p { constructor() { super() } apply(a) { a.Pb(this.P) && a.js(a.oa(this.P)) } wa() {} xa() {} } class ab extends p { constructor() { super() } apply(a) { if (a.Pb(this.P)) { var b = a.oa(this.P); if (null != a.M) { a.M = null; let c = 0, d = a.K; for (; c < d.length;) { let e = d[c]; ++c; e.I = null; e.Nb = 0 } null != a.Kf && a.Kf(b) } } } wa() {} xa() {} } class Fa extends p { constructor() { super() } apply(a) { if (0 == this.P) { a = a.K; for (var b = 0, c = a.length; b < c;) { let d = b++; if (d >= this.Ie.length) break; a[d].zb = this.Ie[d] } } } wa(a) { a.nb(this.Ie.length); let b = 0, c = this.Ie; for (; b < c.length;) a.nb(c[b++]) } xa(a) { this.Ie = []; let b = a.Bb(), c = 0; for (; c < b;) ++c, this.Ie.push(a.Bb()) } static qa(a) { let b = new Fa, c = a.U.K, d = [], e = 0; for (; e < c.length;) { let f = a.We.get(c[e++].Z); d.push(null == f ? 0 : f.zb) } b.Ie = d; return b } } class v extends Error { constructor(a, b, c) { super(a); this.message = a; this.Oj = null != c ? c : this } Fb() { return this.Oj } static Mb(a) { return a instanceof v ? a : a instanceof Error ? new v(a.message, null, a) : new Mb(a, null, a) } static C(a) { return a instanceof v ? a.Oj : a instanceof Error ? a : new Mb(a) } } class Mb extends v { constructor(a, b, c) { super(String(a), b, c); this.value = a } Fb() { return this.value } } var Lb = Lb || {}, X; zc.b = !0; Object.assign(zc.prototype, { g: zc }); P.b = !0; Math.b = !0; Cc.b = !0; Q.b = !0; Y.b = !0; ha.b = !0; mc.b = !0; Object.assign(mc.prototype, { g: mc }); var ia = Lb["bas.basnet.FailReason"] = { Wf: !0, be: null, ae: { wc: "PeerFailed", pb: 0, Gb: "bas.basnet.FailReason", toString: ka }, Ne: (X = function(a) { return { pb: 1, code: a, Gb: "bas.basnet.FailReason", toString: ka } }, X.wc = "Rejected", X.Oe = ["code"], X), Me: { wc: "Cancelled", pb: 2, Gb: "bas.basnet.FailReason", toString: ka }, Error: { wc: "Error", pb: 3, Gb: "bas.basnet.FailReason", toString: ka } }; ia.be = [ia.ae, ia.Ne, ia.Me, ia.Error]; fc.b = !0; Object.assign(fc.prototype, { g: fc }); Ic.b = !0; Ic.uh = !0; Ra.b = !0; Ra.ad = [Ic]; Object.assign(Ra.prototype, { g: Ra }); var fb = Lb["bas.basnet.ConnectionRequestResponse"] = { Wf: !0, be: null, Kj: { wc: "Accept", pb: 0, Gb: "bas.basnet.ConnectionRequestResponse", toString: ka }, Uf: (X = function(a) { return { pb: 1, reason: a, Gb: "bas.basnet.ConnectionRequestResponse", toString: ka } }, X.wc = "Reject", X.Oe = ["reason"], X) }; fb.be = [fb.Kj, fb.Uf]; Kb.b = !0; Object.assign(Kb.prototype, { g: Kb }); Mc.b = !0; Qb.b = !0; Object.assign(Qb.prototype, { g: Qb }); J.b = !0; Object.assign(J.prototype, { g: J }); A.b = !0; Object.assign(A.prototype, { g: A }); T.b = !0; Object.assign(T.prototype, { g: T }); kb.b = !0; qb.b = !0; Wb.b = !0; bc.b = !0; Object.assign(bc.prototype, { g: bc }); x.b = !0; $b.b = !0; Bc.b = !0; p.b = !0; Object.assign(p.prototype, { g: p }); Xa.b = !0; Object.assign(Xa.prototype, { g: Xa }); W.b = !0; Object.assign(W.prototype, { g: W }); Ya.b = !0; Ya.ja = p; Object.assign(Ya.prototype, { g: Ya }); Xb.b = !0; Xb.uh = !0; Object.assign(Xb.prototype, { g: Xb }); Nb.b = !0; Object.assign(Nb.prototype, { g: Nb }); lc.b = !0; Object.assign(lc.prototype, { g: lc }); yc.b = !0; Object.assign(yc.prototype, { g: yc }); Ca.b = !0; Ca.uh = !0; ra.b = !0; oa.b = !0; oa.ja = W; Object.assign(oa.prototype, { g: oa }); var ja = Lb["bas.marf.net.ConnFailReason"] = { Wf: !0, be: null, Me: { wc: "Cancelled", pb: 0, Gb: "bas.marf.net.ConnFailReason", toString: ka }, ae: { wc: "PeerFailed", pb: 1, Gb: "bas.marf.net.ConnFailReason", toString: ka }, Ne: (X = function(a) { return { pb: 2, reason: a, Gb: "bas.marf.net.ConnFailReason", toString: ka } }, X.wc = "Rejected", X.Oe = ["reason"], X), Tf: (X = function(a) { return { pb: 3, description: a, Gb: "bas.marf.net.ConnFailReason", toString: ka } }, X.wc = "Other", X.Oe = ["description"], X) }; ja.be = [ja.Me, ja.ae, ja.Ne, ja.Tf]; Ha.b = !0; Ha.ja = oa; Object.assign(Ha.prototype, { g: Ha }); Tb.b = !0; Tb.ja = oa; Object.assign(Tb.prototype, { g: Tb }); tc.b = !0; Object.assign(tc.prototype, { g: tc }); uc.b = !0; Object.assign(uc.prototype, { g: uc }); nc.b = !0; Vb.b = !0; Object.assign(Vb.prototype, { g: Vb }); Ub.b = !0; Ub.ja = oa; Object.assign(Ub.prototype, { g: Ub }); cc.b = !0; Object.assign(cc.prototype, { g: cc }); Ec.b = !0; Object.assign(Ec.prototype, { g: Ec }); O.b = !0; Object.assign(O.prototype, { g: O }); ba.b = !0; H.b = !0; D.b = !0; ua.b = !0; jc.b = !0; Pb.b = !0; nb.b = !0; Object.assign(nb.prototype, { g: nb }); Dc.b = !0; dc.b = !0; Object.assign(dc.prototype, { g: dc }); Da.b = !0; Ea.b = !0; Object.assign(Ea.prototype, { g: Ea }); ac.b = !0; Object.assign(ac.prototype, { g: ac }); ec.b = !0; Object.assign(ec.prototype, { g: ec }); la.b = !0; Object.assign(la.prototype, { g: la }); ic.b = !0; Object.assign(ic.prototype, { g: ic }); Ac.b = !0; sa.b = !0; Object.assign(sa.prototype, { g: sa }); ta.b = !0; Object.assign(ta.prototype, { g: ta }); m.b = !0; vc.b = !0; Object.assign(vc.prototype, { g: vc }); B.b = !0; C.b = !0; qc.b = !0; Object.assign(qc.prototype, { g: qc }); Rb.b = !0; Object.assign(Rb.prototype, { g: Rb }); Sb.b = !0; xb.b = !0; oc.b = !0; Object.assign(oc.prototype, { g: oc }); pc.b = !0; Object.assign(pc.prototype, { g: pc }); za.b = !0; Object.assign(za.prototype, { g: za }); ca.b = !0; ca.ad = [Ca]; Object.assign(ca.prototype, { g: ca }); gb.b = !0; Object.assign(gb.prototype, { g: gb }); Yb.b = !0; Object.assign(Yb.prototype, { g: Yb }); Wa.b = !0; Object.assign(Wa.prototype, { g: Wa }); q.b = !0; Object.assign(q.prototype, { g: q }); va.b = !0; Object.assign(va.prototype, { g: va }); u.b = !0; Object.assign(u.prototype, { g: u }); wa.b = !0; wa.ad = [Ca, Xb]; Object.assign(wa.prototype, { g: wa }); xa.b = !0; xa.ad = [Ca]; Object.assign(xa.prototype, { g: xa }); Oa.b = !0; Oa.ja = p; Object.assign(Oa.prototype, { g: Oa }); Db.b = !0; Db.ja = p; Object.assign(Db.prototype, { g: Db }); cb.b = !0; cb.ja = p; Object.assign(cb.prototype, { g: cb }); Aa.b = !0; Aa.ja = p; Object.assign(Aa.prototype, { g: Aa }); Na.b = !0; Na.ja = p; Object.assign(Na.prototype, { g: Na }); Pa.b = !0; Pa.ja = p; Object.assign(Pa.prototype, { g: Pa }); fa.b = !0; fa.ja = p; Object.assign(fa.prototype, { g: fa }); La.b = !0; La.ja = p; Object.assign(La.prototype, { g: La }); db.b = !0; db.ja = p; Object.assign(db.prototype, { g: db }); Ma.b = !0; Ma.ja = p; Object.assign(Ma.prototype, { g: Ma }); Ga.b = !0; Ga.ja = p; Object.assign(Ga.prototype, { g: Ga }); Fb.b = !0; Fb.ja = p; Object.assign(Fb.prototype, { g: Fb }); bb.b = !0; bb.ja = p; Object.assign(bb.prototype, { g: bb }); Za.b = !0; Za.ja = p; Object.assign(Za.prototype, { g: Za }); Ka.b = !0; Ka.ja = p; Object.assign(Ka.prototype, { g: Ka }); Ja.b = !0; Ja.ja = p; Object.assign(Ja.prototype, { g: Ja }); Kc.b = !0; na.b = !0; na.ja = p; Object.assign(na.prototype, { g: na }); Eb.b = !0; Eb.ja = p; Object.assign(Eb.prototype, { g: Eb }); Gb.b = !0; Gb.ja = p; Object.assign(Gb.prototype, { g: Gb }); Qa.b = !0; Qa.ja = p; Object.assign(Qa.prototype, { g: Qa }); $a.b = !0; $a.ja = p; Object.assign($a.prototype, { g: $a }); ab.b = !0; ab.ja = p; Object.assign(ab.prototype, { g: ab }); Fa.b = !0; Fa.ja = p; Object.assign(Fa.prototype, { g: Fa }); qa.b = !0; qa.ad = [Ca]; Object.assign(qa.prototype, { g: qa }); hb.b = !0; hb.ad = [Ca]; Object.assign(hb.prototype, { g: hb }); Sa.b = !0; Sa.ad = [Ca]; Object.assign(Sa.prototype, { g: Sa }); R.b = !0; Object.assign(R.prototype, { g: R }); I.b = !0; Object.assign(I.prototype, { g: I }); G.b = !0; Object.assign(G.prototype, { g: G }); U.b = !0; Object.assign(U.prototype, { g: U }); da.b = !0; Object.assign(da.prototype, { g: da }); rc.b = !0; Object.assign(rc.prototype, { g: rc }); ob.b = !0; Object.assign(ob.prototype, { g: ob }); tb.b = !0; Object.assign(tb.prototype, { g: tb }); Ta.b = !0; Object.assign(Ta.prototype, { g: Ta }); Ob.b = !0; Object.assign(Ob.prototype, { g: Ob }); sb.b = !0; Object.assign(sb.prototype, { g: sb }); jb.b = !0; Object.assign(jb.prototype, { g: jb }); pb.b = !0; Object.assign(pb.prototype, { g: pb }); Va.b = !0; Object.assign(Va.prototype, { g: Va }); zb.b = !0; Object.assign(zb.prototype, { g: zb }); kc.b = !0; Object.assign(kc.prototype, { g: kc }); sc.b = !0; Object.assign(sc.prototype, { g: sc }); ya.b = !0; Object.assign(ya.prototype, { g: ya }); yb.b = !0; Object.assign(yb.prototype, { g: yb }); Cb.b = !0; Object.assign(Cb.prototype, { g: Cb }); wb.b = !0; Object.assign(wb.prototype, { g: wb }); hc.b = !0; Object.assign(hc.prototype, { g: hc }); ib.b = !0; Object.assign(ib.prototype, { g: ib }); Ib.b = !0; Object.assign(Ib.prototype, { g: Ib }); Ia.b = !0; Object.assign(Ia.prototype, { g: Ia }); Z.b = !0; Object.assign(Z.prototype, { g: Z }); Ba.b = !0; Object.assign(Ba.prototype, { g: Ba }); Jb.b = !0; Object.assign(Jb.prototype, { g: Jb }); rb.b = !0; Object.assign(rb.prototype, { g: rb }); Ua.b = !0; Object.assign(Ua.prototype, { g: Ua }); lb.b = !0; Object.assign(lb.prototype, { g: lb }); ub.b = !0; Object.assign(ub.prototype, { g: ub }); Bb.b = !0; Object.assign(Bb.prototype, { g: Bb }); ma.b = !0; Object.assign(ma.prototype, { g: ma }); aa.b = !0; Object.assign(aa.prototype, { g: aa }); Ab.b = !0; Object.assign(Ab.prototype, { g: Ab }); mb.b = !0; Object.assign(mb.prototype, { g: mb }); v.b = !0; v.ja = Error; Object.assign(v.prototype, { g: v }); Mb.b = !0; Mb.ja = v; Object.assign(Mb.prototype, { g: Mb }); Hc.b = !0; Object.assign(Hc.prototype, { g: Hc }); w.b = !0; pa.Jj |= 0; "undefined" != typeof performance && "function" == typeof performance.now && (P.now = performance.now.bind(performance)); null == String.fromCodePoint && (String.fromCodePoint = function(a) { return 65536 > a ? String.fromCharCode(a) : String.fromCharCode((a >> 10) + 55232) + String.fromCharCode((a & 1023) + 56320) }); Object.defineProperty(String.prototype, "__class__", { value: String, enumerable: !1, writable: !0 }); String.b = !0; Array.b = !0; Date.prototype.g = Date; Date.b = "Date"; var Zb = {}, Nc = {}, E = Number, Fc = Boolean, Oc = {}, Pc = {}; u.Oa = new u(0, 16777215, 0, -1, "Spectators", "t-spec", 0, 0); u.ia = new u(1, 15035990, -1, 8, "Red", "t-red", 15035990, 2); u.Da = new u(2, 5671397, 1, 16, "Blue", "t-blue", 625603, 4); u.Oa.Dg = u.Oa; u.ia.Dg = u.Da; u.Da.Dg = u.ia; w.Un = {}.toString; Ra.Eo = { mandatory: { OfferToReceiveAudio: !1, OfferToReceiveVideo: !1 } }; T.vh = { name: "ECDSA", namedCurve: "P-256" }; T.Lm = { name: "ECDSA", hash: { name: "SHA-256" } }; qb.zp = ["click-rail", "drag-thumb", "wheel", "touch"]; p.yb = !1; p.qn = new Map; p.Nf = 0; W.yb = !1; Ya.Aa = p.Ha({ Ca: !1, delay: !1 }); ra.Cc = 0; nc.channels = [{ name: "ro", reliable: !0, ordered: !0 }, { name: "ru", reliable: !0, ordered: !1 }, { name: "uu", reliable: !1, ordered: !1 }]; ba.Lj = "application/x-www-form-urlencoded"; Da.eb = ["Afghanistan", "AF", 33.3, 65.1, "Albania", "AL", 41.1, 20.1, "Algeria", "DZ", 28, 1.6, "American Samoa", "AS", -14.2, -170.1, "Andorra", "AD", 42.5, 1.6, "Angola", "AO", -11.2, 17.8, "Anguilla", "AI", 18.2, -63, "Antigua and Barbuda", "AG", 17, -61.7, "Argentina", "AR", -34.5, -58.4, "Armenia", "AM", 40, 45, "Aruba", "AW", 12.5, -69.9, "Australia", "AU", -25.2, 133.7, "Austria", "AT", 47.5, 14.5, "Azerbaijan", "AZ", 40.1, 47.5, "Bahamas", "BS", 25, -77.3, "Bahrain", "BH", 25.9, 50.6, "Bangladesh", "BD", 23.6, 90.3, "Barbados", "BB", 13.1, -59.5, "Belarus", "BY", 53.7, 27.9, "Belgium", "BE", 50.5, 4.4, "Belize", "BZ", 17.1, -88.4, "Benin", "BJ", 9.3, 2.3, "Bermuda", "BM", 32.3, -64.7, "Bhutan", "BT", 27.5, 90.4, "Bolivia", "BO", -16.2, -63.5, "Bosnia and Herzegovina", "BA", 43.9, 17.6, "Botswana", "BW", -22.3, 24.6, "Bouvet Island", "BV", -54.4, 3.4, "Brazil", "BR", -14.2, -51.9, "British Indian Ocean Territory", "IO", -6.3, 71.8, "British Virgin Islands", "VG", 18.4, -64.6, "Brunei", "BN", 4.5, 114.7, "Bulgaria", "BG", 42.7, 25.4, "Burkina Faso", "BF", 12.2, -1.5, "Burundi", "BI", -3.3, 29.9, "Cambodia", "KH", 12.5, 104.9, "Cameroon", "CM", 7.3, 12.3, "Canada", "CA", 56.1, -106.3, "Cape Verde", "CV", 16, -24, "Cayman Islands", "KY", 19.5, -80.5, "Central African Republic", "CF", 6.6, 20.9, "Chad", "TD", 15.4, 18.7, "Chile", "CL", -35.6, -71.5, "China", "CN", 35.8, 104.1, "Christmas Island", "CX", -10.4, 105.6, "Colombia", "CO", 4.5, -74.2, "Comoros", "KM", -11.8, 43.8, "Congo [DRC]", "CD", -4, 21.7, "Congo [Republic]", "CG", -.2, 15.8, "Cook Islands", "CK", -21.2, -159.7, "Costa Rica", "CR", 9.7, -83.7, "Croatia", "HR", 45.1, 15.2, "Cuba", "CU", 21.5, -77.7, "Cyprus", "CY", 35.1, 33.4, "Czech Republic", "CZ", 49.8, 15.4, "C\u00f4te d'Ivoire", "CI", 7.5, -5.5, "Denmark", "DK", 56.2, 9.5, "Djibouti", "DJ", 11.8, 42.5, "Dominica", "DM", 15.4, -61.3, "Dominican Republic", "DO", 18.7, -70.1, "Ecuador", "EC", -1.8, -78.1, "Egypt", "EG", 26.8, 30.8, "El Salvador", "SV", 13.7, -88.8, "England", "ENG", 55.3, -3.4, "Equatorial Guinea", "GQ", 1.6, 10.2, "Eritrea", "ER", 15.1, 39.7, "Estonia", "EE", 58.5, 25, "Ethiopia", "ET", 9.1, 40.4, "Faroe Islands", "FO", 61.8, -6.9, "Fiji", "FJ", -16.5, 179.4, "Finland", "FI", 61.9, 25.7, "France", "FR", 46.2, 2.2, "French Guiana", "GF", 3.9, -53.1, "French Polynesia", "PF", -17.6, -149.4, "Gabon", "GA", -.8, 11.6, "Gambia", "GM", 13.4, -15.3, "Georgia", "GE", 42.3, 43.3, "Germany", "DE", 51.1, 10.4, "Ghana", "GH", 7.9, -1, "Gibraltar", "GI", 36.1, -5.3, "Greece", "GR", 39, 21.8, "Greenland", "GL", 71.7, -42.6, "Grenada", "GD", 12.2, -61.6, "Guadeloupe", "GP", 16.9, -62, "Guam", "GU", 13.4, 144.7, "Guatemala", "GT", 15.7, -90.2, "Guinea", "GN", 9.9, -9.6, "Guinea-Bissau", "GW", 11.8, -15.1, "Guyana", "GY", 4.8, -58.9, "Haiti", "HT", 18.9, -72.2, "Honduras", "HN", 15.1, -86.2, "Hong Kong", "HK", 22.3, 114.1, "Hungary", "HU", 47.1, 19.5, "Iceland", "IS", 64.9, -19, "India", "IN", 20.5, 78.9, "Indonesia", "ID", -.7, 113.9, "Iran", "IR", 32.4, 53.6, "Iraq", "IQ", 33.2, 43.6, "Ireland", "IE", 53.4, -8.2, "Israel", "IL", 31, 34.8, "Italy", "IT", 41.8, 12.5, "Jamaica", "JM", 18.1, -77.2, "Japan", "JP", 36.2, 138.2, "Jordan", "JO", 30.5, 36.2, "Kazakhstan", "KZ", 48, 66.9, "Kenya", "KE", -0, 37.9, "Kiribati", "KI", -3.3, -168.7, "Kosovo", "XK", 42.6, 20.9, "Kuwait", "KW", 29.3, 47.4, "Kyrgyzstan", "KG", 41.2, 74.7, "Laos", "LA", 19.8, 102.4, "Latvia", "LV", 56.8, 24.6, "Lebanon", "LB", 33.8, 35.8, "Lesotho", "LS", -29.6, 28.2, "Liberia", "LR", 6.4, -9.4, "Libya", "LY", 26.3, 17.2, "Liechtenstein", "LI", 47.1, 9.5, "Lithuania", "LT", 55.1, 23.8, "Luxembourg", "LU", 49.8, 6.1, "Macau", "MO", 22.1, 113.5, "Macedonia [FYROM]", "MK", 41.6, 21.7, "Madagascar", "MG", -18.7, 46.8, "Malawi", "MW", -13.2, 34.3, "Malaysia", "MY", 4.2, 101.9, "Maldives", "MV", 3.2, 73.2, "Mali", "ML", 17.5, -3.9, "Malta", "MT", 35.9, 14.3, "Marshall Islands", "MH", 7.1, 171.1, "Martinique", "MQ", 14.6, -61, "Mauritania", "MR", 21, -10.9, "Mauritius", "MU", -20.3, 57.5, "Mayotte", "YT", -12.8, 45.1, "Mexico", "MX", 23.6, -102.5, "Micronesia", "FM", 7.4, 150.5, "Moldova", "MD", 47.4, 28.3, "Monaco", "MC", 43.7, 7.4, "Mongolia", "MN", 46.8, 103.8, "Montenegro", "ME", 42.7, 19.3, "Montserrat", "MS", 16.7, -62.1, "Morocco", "MA", 31.7, -7, "Mozambique", "MZ", -18.6, 35.5, "Myanmar [Burma]", "MM", 21.9, 95.9, "Namibia", "NA", -22.9, 18.4, "Nauru", "NR", -.5, 166.9, "Nepal", "NP", 28.3, 84.1, "Netherlands", "NL", 52.1, 5.2, "Netherlands Antilles", "AN", 12.2, -69, "New Caledonia", "NC", -20.9, 165.6, "New Zealand", "NZ", -40.9, 174.8, "Nicaragua", "NI", 12.8, -85.2, "Niger", "NE", 17.6, 8, "Nigeria", "NG", 9, 8.6, "Niue", "NU", -19, -169.8, "Norfolk Island", "NF", -29, 167.9, "North Korea", "KP", 40.3, 127.5, "Northern Mariana Islands", "MP", 17.3, 145.3, "Norway", "NO", 60.4, 8.4, "Oman", "OM", 21.5, 55.9, "Pakistan", "PK", 30.3, 69.3, "Palau", "PW", 7.5, 134.5, "Palestinian Territories", "PS", 31.9, 35.2, "Panama", "PA", 8.5, -80.7, "Papua New Guinea", "PG", -6.3, 143.9, "Paraguay", "PY", -23.4, -58.4, "Peru", "PE", -9.1, -75, "Philippines", "PH", 12.8, 121.7, "Pitcairn Islands", "PN", -24.7, -127.4, "Poland", "PL", 51.9, 19.1, "Portugal", "PT", 39.3, -8.2, "Puerto Rico", "PR", 18.2, -66.5, "Qatar", "QA", 25.3, 51.1, "Romania", "RO", 45.9, 24.9, "Russia", "RU", 61.5, 105.3, "Rwanda", "RW", -1.9, 29.8, "R\u00e9union", "RE", -21.1, 55.5, "Saint Helena", "SH", -24.1, -10, "Saint Kitts", "KN", 17.3, -62.7, "Saint Lucia", "LC", 13.9, -60.9, "Saint Pierre", "PM", 46.9, -56.2, "Saint Vincent", "VC", 12.9, -61.2, "Samoa", "WS", -13.7, -172.1, "San Marino", "SM", 43.9, 12.4, "Saudi Arabia", "SA", 23.8, 45, "Scotland", "SCT", 56.5, 4.2, "Senegal", "SN", 14.4, -14.4, "Serbia", "RS", 44, 21, "Seychelles", "SC", -4.6, 55.4, "Sierra Leone", "SL", 8.4, -11.7, "Singapore", "SG", 1.3, 103.8, "Slovakia", "SK", 48.6, 19.6, "Slovenia", "SI", 46.1, 14.9, "Solomon Islands", "SB", -9.6, 160.1, "Somalia", "SO", 5.1, 46.1, "South Africa", "ZA", -30.5, 22.9, "South Georgia", "GS", -54.4, -36.5, "South Korea", "KR", 35.9, 127.7, "Spain", "ES", 40.4, -3.7, "Sri Lanka", "LK", 7.8, 80.7, "Sudan", "SD", 12.8, 30.2, "Suriname", "SR", 3.9, -56, "Svalbard and Jan Mayen", "SJ", 77.5, 23.6, "Swaziland", "SZ", -26.5, 31.4, "Sweden", "SE", 60.1, 18.6, "Switzerland", "CH", 46.8, 8.2, "Syria", "SY", 34.8, 38.9, "S\u00e3o Tom\u00e9 and Pr\u00edncipe", "ST", .1, 6.6, "Taiwan", "TW", 23.6, 120.9, "Tajikistan", "TJ", 38.8, 71.2, "Tanzania", "TZ", -6.3, 34.8, "Thailand", "TH", 15.8, 100.9, "Timor-Leste", "TL", -8.8, 125.7, "Togo", "TG", 8.6, .8, "Tokelau", "TK", -8.9, -171.8, "Tonga", "TO", -21.1, -175.1, "Trinidad and Tobago", "TT", 10.6, -61.2, "Tunisia", "TN", 33.8, 9.5, "Turkey", "TR", 38.9, 35.2, "Turkmenistan", "TM", 38.9, 59.5, "Turks and Caicos Islands", "TC", 21.6, -71.7, "Tuvalu", "TV", -7.1, 177.6, "U.S. Minor Outlying Islands", "UM", 0, 0, "U.S. Virgin Islands", "VI", 18.3, -64.8, "Uganda", "UG", 1.3, 32.2, "Ukraine", "UA", 48.3, 31.1, "United Arab Emirates", "AE", 23.4, 53.8, "United Kingdom", "GB", 55.3, -3.4, "United States", "US", 37, -95.7, "Uruguay", "UY", -32.5, -55.7, "Uzbekistan", "UZ", 41.3, 64.5, "Vanuatu", "VU", -15.3, 166.9, "Vatican City", "VA", 41.9, 12.4, "Venezuela", "VE", 6.4, -66.5, "Vietnam", "VN", 14, 108.2, "Wales", "WLS", 55.3, -3.4, "Wallis and Futuna", "WF", -13.7, -177.1, "Western Sahara", "EH", 24.2, -12.8, "Yemen", "YE", 15.5, 48.5, "Zambia", "ZM", -13.1, 27.8, "Zimbabwe", "ZW", -19, 29.1 ]; m.Gs = "wss://p2p.haxball.com/"; m.Se = "https://www.haxball.com/rs/"; m.kg = [{ urls: "stun:stun.l.google.com:19302" }]; m.j = new ic; ca.ul = function() { let a = []; { let b = 0; for (; 256 > b;) ++b, a.push(new O(0, 0)) } return a }(this); ca.yk = function() { let a = []; { let b = 0; for (; 256 > b;) ++b, a.push(0) } return a }(this); q.ps = A.ka(1024); Oa.Aa = p.Ha({ Ca: !1, delay: !1 }); Db.Aa = p.Ha({ Ca: !1, delay: !1, Cj: { pj: 10, Ij: 900 } }); cb.Aa = p.Ha({ Ca: !1, delay: !1 }); Aa.Aa = p.Ha({ Ca: !1, delay: !1 }); Na.Aa = p.Ha({ Ca: !1, delay: !1 }); Pa.Aa = p.Ha({ Ca: !1, delay: !1 }); fa.Aa = p.Ha({ Ca: !1, delay: !1 }); La.Aa = p.Ha({ Ca: !1, delay: !1, Cj: { pj: 10, Ij: 2E3 } }); db.Aa = p.Ha({ Ca: !1, delay: !1 }); Ma.Aa = p.Ha({ Ca: !1, delay: !1 }); Ga.Aa = p.Ha({ Ca: !1, delay: !1 }); Fb.Aa = p.Ha({ Ca: !1, delay: !1 }); bb.Aa = p.Ha({}); Za.Aa = p.Ha({ Ca: !1, delay: !1, Cj: { pj: 10, Ij: 900 } }); Ka.Aa = p.Ha({}); Ja.Aa = p.Ha({ Ca: !1, delay: !1 }); na.Aa = p.Ha({ Ca: !1, delay: !1 }); Eb.Aa = p.Ha({ Ca: !1, delay: !1 }); Gb.Aa = p.Ha({ Ca: !1, delay: !1 }); Qa.Aa = p.Ha({ Ca: !1, delay: !1 }); $a.Aa = p.Ha({ Ca: !1, delay: !1 }); ab.Aa = p.Ha({ Ca: !1, delay: !1 }); Fa.Aa = p.Ha({ Ca: !1, delay: !1 }); I.Nn = .17435839227423353; I.Mn = 5.934119456780721; da.Kn = new cc([0, 0, 2, 1, 0, .35, 1, 0, 1, 0, .7, 1, 0, 0, 0, 1]); da.Ln = new cc([0, -1, 3, 0, 0, .35, 0, 0, 0, 0, .65, 0, 0, 1, 3, 1]); tb.O = "

Change Location

"; Ta.O = "

Controls:
Move: WASD or Arrows
Kick: X, Space, Ctrl, Shift, Numpad 0
View: Numbers 1 to 4

"; sb.O = "

Choose nickname

"; jb.O = "

Connecting

"; pb.O = "

Create room

"; Va.O = "

Disconnected

"; zb.O = "
0
-
0
"; ya.O = "
"; yb.O = "

"; Cb.O = "

Leave room?

Are you sure you want to leave the room?

"; wb.O = "

Pick a stadium

"; ib.O = "

"; Ib.O = "
"; Ia.O = "
"; Ba.O = "
1x
00:00
"; Jb.O = ""; rb.Hj = "
"; Ua.Hj = "

Room list

Tip: Join rooms near you to reduce lag.

NamePlayersPassDistance
Show locked Show full Show empty

"; ub.O = "

Password required

"; Bb.O = "

"; ma.O = '

Settings

Press a key
Sounds enabled
Chat sound enabled
Nick highlight sound enabled
Crowd sound enabled
Viewport Mode:
FPS Limit:
Resolution Scaling:
Use low latency canvas
Custom team colors enabled
Show chat indicators
Show player avatars
Chat opacity
1
Chat focus height
200
Chat background width:
'; ma.ym = 0; aa.O = "

"; Ab.O = "

"; mb.O = '

Unsupported Browser

Sorry! Your browser doesn\'t yet implement some features which are required for HaxBall to work.

The missing features are:

Recommended browsers:

'; B.Xp() })("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this);