diff --git a/.gitignore b/.gitignore index a1fd655bf975b1cefedb8977e60eac74fde228ef..8ac5267c1ffc9b4a6bedbc26cca1d33b7ba2ab39 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ src/liowebrtc src/rtcpeerconnection src/signalbuddy src/yjs +src/tiny-worker ### macOS ### # General diff --git a/.gitmodules b/.gitmodules index ddaddd31d0dc09cb5d1af99e79a14a5669247859..0f4d7924a306f0f82e445aa31d6c729d23fd3ef5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "src/yjs"] path = src/yjs url = git@gitlab.doc.ic.ac.uk:sweng-group-15/yjs.git +[submodule "src/tiny-worker"] + path = src/tiny-worker + url = git@gitlab.doc.ic.ac.uk:sweng-group-15/tiny-worker.git diff --git a/__tests__/benchmark.test.js b/__tests__/benchmark.test.js index e596b817c99cb0b41083923f67057d40286c7311..005888305a588b47a9e6d14ea4716a4d73d8570d 100644 --- a/__tests__/benchmark.test.js +++ b/__tests__/benchmark.test.js @@ -5,14 +5,31 @@ import MockConnection, { getPeerHandle, getPeerFootprint, send, + //sendListener, broadcast, + broadcastListener, terminatePeer, destructor, addEventListener, + eventListeners, } from "../src/connection/MockConnection.js" +const handshake = { + uid: "tiger", + channel: "tw-ml", + message: { + uuid: "42c4566d-0cfe-4c00-a645-254b7887e477", + message: Uint8Array.of(162, 109, 108), + slice: 0, + length: 1, + compressed: false, + }, +} + +let room = null + describe("drawing app mesh", () => { - beforeEach(() => { + beforeEach(async () => { getUserID.mockClear() getPeerHandle.mockClear() getPeerFootprint.mockClear() @@ -22,1852 +39,95 @@ describe("drawing app mesh", () => { destructor.mockClear() addEventListener.mockClear() MockConnection.mockClear() + + room = await connect("data", MockConnection) + eventListeners.get("messageReceived")({ detail: handshake }) + }) + + afterEach(() => { + room.disconnect() + room = null }) - it("works with a MockConnection", async () => { - const room = await connect("test", MockConnection) + it("communicates a single draw and erase update", () => { + let dotID - const dotID = room.addPath([209, 88, 5.000000000000001, "#0000ff"]) + return new Promise((resolve) => { + broadcastListener.callback = (channel, message) => { + expect(channel).toEqual("y-js") + expect(message.message instanceof Uint8Array).toBe(true) + resolve() + } - room.extendErasureIntervals(dotID, 0, 0, 0) + dotID = room.addPath([209, 88, 5.000000000000001, "#0000ff"]) - const pathID = room.addPath([229, 147, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [239, 149, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [265, 154, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [329, 158, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [428, 168, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [559, 172, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [689, 176, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [789, 176, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [871, 178, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [915, 179, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [937, 179, 5.000000000000001, "#0000ff"]) - room.extendPath(pathID, [942, 179, 5.000000000000001, "#0000ff"]) + room.extendErasureIntervals(dotID, 0, 0, 0) + }).then( + () => + new Promise((resolve) => { + broadcastListener.callback = (channel, message) => { + expect(channel).toEqual("y-js") + expect(message.message instanceof Uint8Array).toBe(true) + resolve() + } - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.030367582231477598) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.21377102974828613) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.2537463508623564) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.34615384615384587) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.4383613354449363) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.5303675822314777) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.6221712759429692) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.7137710297482863) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.8051653782004998) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 0.9383613354449363) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.011716311379342382) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.11776520948773353) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.24006055181058228) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.3107159148890084) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.3810746303975673) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.4329788671985464) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.46835801309405006) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.5036636541863274) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.5740522382479196) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.6441399664465288) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.731854882371686) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.8021237085400632) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.8371448744989799) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.88955025220044) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 0.9599984343180302) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.028177027652500065) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.03543420592413073) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.06582991759489924) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.10275381734879) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.11799692411252251) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.13323648198760243) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.16370490408198182) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.2154080009026301) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.24595364724469834) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.27648544742767633) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.31247481764398494) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.3478072470007028) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.3785134252130592) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.3938616312677431) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.42869266182685783) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.44408271983476183) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.4594695941376009) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.4902337694168022) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.505611059005356) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.5246181146997148) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.5400397300348875) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.6047746406708809) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.6202304708442001) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.6356832087546725) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.6535687967630837) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.7000469301249926) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.7155335204468358) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.7484433368793898) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.8415551828545537) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.8896745156013701) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.9207665061568425) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.9518463520584276) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 0.9840324922550672) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.01983903263791853) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.029876622283678104) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.03990912701215377) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.0806437862168895) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.09070123866218649) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.10101007524615979) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.11110799523965204) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.12120077057322706) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.13128840847448436) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.15144829885129574) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.16152056375068494) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.1818098260284825) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.20202009896967427) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.21211750416023725) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.2727084630640253) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.29292802997685985) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.3030300711783685) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.33330532017010783) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.3636029076253441) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.37371993253130364) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.3838317824361028) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.40403999188002426) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.41413636769223433) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.42422760105585006) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.43431369907567324) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.4443662699271226) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.4544931529993546) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.46461484324950236) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.4747313502489194) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.5050498610823838) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.5151457223183467) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.5353220266951074) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.5454024835564785) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.5858535321955943) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.5959591836309699) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.616155025527601) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.6463920624411829) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.6666385590106888) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.6767540304709369) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.6969694650467834) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.7474179601261248) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.7675614683096057) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.7776255556078067) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.8282626561208872) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.8484256216002729) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.8584994213492495) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.8685681068775302) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.9087918074364576) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.9188349938933553) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.9288730921857218) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.9889949697600137) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 0.99974858647489) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.015052512188419602) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.03029426962088413) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.06839243749770468) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.0836292133608997) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.0912470672285808) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.09886456497394153) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.13734696870310906) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.14497397901135212) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.16022693354357556) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.16785287776755597) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.2061009857691912) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.2213715432205954) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.2290062878232259) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.23664067642184725) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.31287013784360607) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.33579551026422) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.3434365859114192) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.37399731542592607) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.3892755376794567) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.3969141134976991) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.41219019494203474) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.47328026274975304) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.48854921795242295) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.5267153779648435) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.5343475426943275) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.5419793517647892) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.5496108052135158) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.5801330634496403) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.5877627392618375) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.5953920596237392) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.610649634073643) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.6487873509046499) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.6564138281707615) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.6640399500759696) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.7174128527857359) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.7326590547531385) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.7402816225030254) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.7555256913985305) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.8469602239274668) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.8621943289183245) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.8698108469953234) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.8774270087010998) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.9078880903271799) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.9155024690411608) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.9231164909119645) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.9307301558520772) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.9769418956440951) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.9845647300195252) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.992187208890867) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 0.9998093322301707) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.03820574873127833) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.045884233047770166) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.061240109456200745) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.1226490440345489) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.13032352057732857) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.14567137935938093) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.15334476144043718) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.19170619534531316) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.19937738618962128) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.2070482114971963) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.2453968513383652) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.26073374476033434) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.26840164189649224) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.3067356268350702) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.322066651341349) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.32973161244332394) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.34506043162274563) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.39869970096661816) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.4063609788597506) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.41402188753199426) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.4676378950251564) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.47529584340574377) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.5518548940788806) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.5595087511478618) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.56716223496407) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.5824680819078778) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.6686904305673842) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.6917061953453132) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.7070482114971963) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.7766873397479431) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.7923021861323849) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.7999923098661218) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.8076820697480561) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.8614794103478556) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.8768764254973112) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.8845743850827851) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.8922719794659787) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.9458689803376649) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.9612817605421127) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 0.9689875986837584) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.029749843554381775) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.059749843554381774) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.06974984355438178) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.13974984355438178) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.14974984355438178) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.15974984355438177) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.16974984355438177) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.17974984355438178) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.21974984355438176) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.22974984355438177) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.23974984355438178) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.2497498435543818) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.3197498435543818) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.3397498435543818) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.3497498435543818) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.35974984355438183) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.468997487421324) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.48899748742132404) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.49899748742132405) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.518997487421324) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.6277371993328519) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.6377371993328519) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.6477371993328519) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.6677371993328519) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.7777371993328519) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.7877371993328519) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.8077371993328519) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.9377371993328519) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.957737199332852) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 0.977737199332852) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.08434122461529223) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.09736319249220814) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.12177670236609432) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.13398291047706393) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.2560176149231152) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.26820494288749264) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.2803919084377965) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.30476475227840155) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.42434250381943905) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.4364947880419225) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.44864670195280104) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.4607982453870106) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.5822932659066377) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.5944407226857343) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.6065878068658583) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.7298557216513387) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.7420139098657976) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.7541717301678039) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.7663291824206042) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.8284299052782537) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.8406001691299525) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.8649396036740605) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.9753340606845997) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.9875148632580261) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 0.9996953030971739) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.022133273001338587) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.20418547065439502) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.22693303640624127) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.24968001232099726) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.272426398521291) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.47595107564942674) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.5214835194176608) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.5442488489860375) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.5670135839399206) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.5897777244732638) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.749110080215568) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.7718694720767475) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.7946282711542776) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 0.8173864776180217) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 0.04431747070173535) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 0.0897720161562808) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 0.18068110706537172) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 0.4988629252471899) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 0.5897720161562808) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 0.6352265616108262) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 0.7261356525199172) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 1) - room.extendErasureIntervals(pathID, 10, 0, 1) - room.extendErasureIntervals(pathID, 11, 0, 0) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 1) - room.extendErasureIntervals(pathID, 10, 0, 1) - room.extendErasureIntervals(pathID, 11, 0, 0) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 1) - room.extendErasureIntervals(pathID, 10, 0, 1) - room.extendErasureIntervals(pathID, 11, 0, 0) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 1) - room.extendErasureIntervals(pathID, 10, 0, 1) - room.extendErasureIntervals(pathID, 11, 0, 0) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 1) - room.extendErasureIntervals(pathID, 10, 0, 1) - room.extendErasureIntervals(pathID, 11, 0, 0) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 1) - room.extendErasureIntervals(pathID, 10, 0, 1) - room.extendErasureIntervals(pathID, 11, 0, 0) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 1) - room.extendErasureIntervals(pathID, 10, 0, 1) - room.extendErasureIntervals(pathID, 11, 0, 0) - room.extendErasureIntervals(dotID, 0, 0, 0) - room.extendErasureIntervals(pathID, 0, 0, 1) - room.extendErasureIntervals(pathID, 1, 0, 1) - room.extendErasureIntervals(pathID, 2, 0, 1) - room.extendErasureIntervals(pathID, 3, 0, 1) - room.extendErasureIntervals(pathID, 4, 0, 1) - room.extendErasureIntervals(pathID, 5, 0, 1) - room.extendErasureIntervals(pathID, 6, 0, 1) - room.extendErasureIntervals(pathID, 7, 0, 1) - room.extendErasureIntervals(pathID, 8, 0, 1) - room.extendErasureIntervals(pathID, 9, 0, 1) - room.extendErasureIntervals(pathID, 10, 0, 1) - room.extendErasureIntervals(pathID, 11, 0, 0) + room.extendErasureIntervals(dotID, 0, [[0, 0]]) + }), + ) + }) - room.disconnect() + it("benchmarks a single draw and erase update", () => { + const ITERATIONS = 1000 + + jest.setTimeout(ITERATIONS * 10) + + const dotIDs = [] + let prevTime + + let broadcasts = 0 + let addTime = 0 + let eraseTime = 0 + + return new Promise((resolve) => { + broadcastListener.callback = () => { + const currTime = process.hrtime() + + broadcasts += 1 + + if (broadcasts <= ITERATIONS) { + addTime += + (currTime[0] - prevTime[0]) * 1e9 + (currTime[1] - prevTime[1]) + } else { + eraseTime += + (currTime[0] - prevTime[0]) * 1e9 + (currTime[1] - prevTime[1]) + } + + prevTime = process.hrtime() + + if (broadcasts < ITERATIONS) { + dotIDs.push(room.addPath([209, 88, 5.000000000000001, "#0000ff"])) + } else if (broadcasts < ITERATIONS * 2) { + room.extendErasureIntervals(dotIDs[broadcasts - ITERATIONS], 0, [ + [0, 0], + ]) + } else { + console.log( + `single draw and erase (${ITERATIONS} iterations):\n\taddPath: ${( + addTime / + (1e6 * ITERATIONS) + ).toFixed(3)}ms\n\textendErasureIntervals: ${( + eraseTime / + (1e6 * ITERATIONS) + ).toFixed(3)}ms`, + ) + + resolve() + } + } + + prevTime = process.hrtime() + + dotIDs.push(room.addPath([209, 88, 5.000000000000001, "#0000ff"])) + }) }) }) diff --git a/package-lock.json b/package-lock.json index 6ff5306fd5e427c157a326aa14a4c7e58d285483..d0759b22ab5e921d0e6ea4679f617a0c4fe82c81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2600,9 +2600,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001011", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001011.tgz", - "integrity": "sha512-h+Eqyn/YA6o6ZTqpS86PyRmNWOs1r54EBDcd2NTwwfsXQ8re1B38SnB+p2RKF8OUsyEIjeDU8XGec1RGO/wYCg==", + "version": "1.0.30001012", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001012.tgz", + "integrity": "sha512-7RR4Uh04t9K1uYRWzOJmzplgEOAXbfK72oVNokCdMzA67trrhPzy93ahKk1AWHiA0c58tD2P+NHqxrA8FZ+Trg==", "dev": true }, "canvas-renderer": { @@ -3488,9 +3488,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.312", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.312.tgz", - "integrity": "sha512-/Nk6Hvwt+RfS9X3oA4IXpWqpcnS7cdWsTMP4AmrP8hPpxtZbHemvTEYzjAKghk28aS9zIV8NwGHNt8H+6OmJug==", + "version": "1.3.314", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.314.tgz", + "integrity": "sha512-IKDR/xCxKFhPts7h+VaSXS02Z1mznP3fli1BbXWXeN89i2gCzKraU8qLpEid8YzKcmZdZD3Mly3cn5/lY9xsBQ==", "dev": true }, "elegant-spinner": { @@ -3710,18 +3710,18 @@ } }, "es-abstract": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz", + "integrity": "sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.0", + "has-symbols": "^1.0.1", "is-callable": "^1.1.4", "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", + "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "string.prototype.trimleft": "^2.1.0", "string.prototype.trimright": "^2.1.0" @@ -3771,9 +3771,9 @@ } }, "eslint": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.0.tgz", - "integrity": "sha512-dQpj+PaHKHfXHQ2Imcw5d853PTvkUGbHk/MR68KQUl98EgKDCdh4vLRH1ZxhqeQjQFJeg8fgN0UwmNhN3l8dDQ==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.1.tgz", + "integrity": "sha512-UWzBS79pNcsDSxgxbdjkmzn/B6BhsXMfUaOHnNwyE8nD+Q6pyT96ow2MccVayUTV4yMid4qLhMiQaywctRkBLA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -8906,9 +8906,9 @@ } }, "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" }, "socket.io-client": { "version": "2.3.0", @@ -9669,9 +9669,9 @@ } }, "execa": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.3.0.tgz", - "integrity": "sha512-j5Vit5WZR/cbHlqU97+qcnw9WHRCIL4V1SVe75VcHcD1JRBdt8fv0zw89b7CQHQdUHTt2VjuhcF5ibAgVOxqpg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -10115,9 +10115,7 @@ } }, "tiny-worker": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tiny-worker/-/tiny-worker-2.3.0.tgz", - "integrity": "sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==", + "version": "file:src/tiny-worker", "dev": true, "requires": { "esm": "^3.2.25" @@ -10339,9 +10337,9 @@ "dev": true }, "uglify-js": { - "version": "3.6.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.9.tgz", - "integrity": "sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.0.tgz", + "integrity": "sha512-PC/ee458NEMITe1OufAjal65i6lB58R1HWMRcxwvdz1UopW0DYqlRL3xdu3IcTvTXsB02CRHykidkTRL+A3hQA==", "dev": true, "optional": true, "requires": { diff --git a/package.json b/package.json index a68ea0668670993f141b8da36431f4f53b1a499b..a04ebf298a88890565ca890ca5740fb8db278495 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ "build:dev": "webpack --config webpack.dev.js", "watch": "webpack --watch --config webpack.dev.js", "start": "node --experimental-modules src/server.js", - "test": "jest --testPathIgnorePatterns src/liowebrtc src/rtcpeerconnection src/signalbuddy src/yjs", - "test-changed": "jest --only-changed --testPathIgnorePatterns src/liowebrtc src/rtcpeerconnection src/signalbuddy src/yjs", - "test-coverage": "jest --coverage --testPathIgnorePatterns src/liowebrtc src/rtcpeerconnection src/signalbuddy src/yjs", + "test": "jest --testPathIgnorePatterns src/liowebrtc src/rtcpeerconnection src/signalbuddy src/yjs src/tiny-worker", + "test-changed": "jest --only-changed --testPathIgnorePatterns src/liowebrtc src/rtcpeerconnection src/signalbuddy src/yjs src/tiny-worker", + "test-coverage": "jest --coverage --testPathIgnorePatterns src/liowebrtc src/rtcpeerconnection src/signalbuddy src/yjs src/tiny-worker", "test-e2e:peer1": "testcafe chrome:headless __e2e_tests__/peer1.e2e.js", "test-e2e:peer2": "testcafe chrome:headless __e2e_tests__/peer2.e2e.js", "test-e2e": "run-p test-e2e:*", @@ -56,7 +56,7 @@ "npm-run-all": "^4.1.5", "prettier": "^1.18.2", "testcafe": "^1.5.0", - "tiny-worker": "^2.3.0", + "tiny-worker": "file:src/tiny-worker", "webpack": "^4.41.0", "webpack-bundle-analyzer": "^3.6.0", "webpack-cli": "^3.3.9", diff --git a/src/connection/MockConnection.js b/src/connection/MockConnection.js index fa339f56af4a321bbc5fcf5697d1b2fedf64ae25..edc563fe116c1738f5e7d98c1ee5796bb8ffef58 100644 --- a/src/connection/MockConnection.js +++ b/src/connection/MockConnection.js @@ -2,12 +2,35 @@ export const getUserID = jest.fn(() => "moritz") export const getPeerHandle = jest.fn((/*uid*/) => undefined) export const getPeerFootprint = jest.fn((/*uid*/) => Promise.resolve(Date.now())) -export const send = jest.fn() -export const broadcast = jest.fn() + +export const sendListener = { callback: null } +export const send = jest.fn((uid, channel, message) => { + if (sendListener.callback) { + sendListener.callback(uid, channel, message) + } +}) +const sendMockClear = send.mockClear +send.mockClear = () => { + sendListener.callback = null + sendMockClear() +} + +export const broadcastListener = { callback: null } +export const broadcast = jest.fn((channel, message) => { + if (broadcastListener.callback) { + broadcastListener.callback(channel, message) + } +}) +const broadcastMockClear = broadcast.mockClear +broadcast.mockClear = () => { + broadcastListener.callback = null + broadcastMockClear() +} + export const terminatePeer = jest.fn() export const destructor = jest.fn(() => eventListeners.clear()) -const eventListeners = new Map() +export const eventListeners = new Map() export const addEventListener = jest.fn((event, callback) => eventListeners.set(event, callback), ) diff --git a/src/queue.js b/src/queue.js index e950c5494cbee858e4d4ea705c88ea39be4f262b..cfafaf3bc2ba5ec547ad811d30e974f2cedac647 100644 --- a/src/queue.js +++ b/src/queue.js @@ -4,6 +4,8 @@ import MessagePack from "what-the-pack" import pako from "pako" import uuidv4 from "uuid/v4" +const UintBuffer = MessagePack.Buffer || Buffer + const MESSAGE_BUFFER_SIZE = 2 ** 24 // 16MB const MESSAGE_SLICE_SIZE = 2 ** 10 // 1KB @@ -21,6 +23,8 @@ onmessage = (event) => { const compressed = typeof message == "object" const uuid = uuidv4() + //console.log("send in", message) + message = encode(message) if (compressed) { @@ -40,11 +44,15 @@ onmessage = (event) => { compressed, } + //console.log("send out", event.data) + self.postMessage(event.data) } } else if (event.data.method == "received") { let message = event.data.message.message + //console.log("receive in", message) + if (event.data.message.length > 1) { let messages = buffer[event.data.uid] if (!messages) { @@ -81,13 +89,19 @@ onmessage = (event) => { } if (event.data.message.compressed) { - message = pako.inflate(message) + message = pako.inflate(Uint8Array.from(message)) } - message = decode(MessagePack.Buffer.from(message)) + if (!UintBuffer.isBuffer(message)) { + message = UintBuffer.from(message) + } + + message = decode(message) event.data.message = message + //console.log("receive out", event.data) + self.postMessage(event.data) } } diff --git a/src/tiny-worker b/src/tiny-worker new file mode 160000 index 0000000000000000000000000000000000000000..60d95bad97b43bb73dda1ef86b605b1114ae1294 --- /dev/null +++ b/src/tiny-worker @@ -0,0 +1 @@ +Subproject commit 60d95bad97b43bb73dda1ef86b605b1114ae1294 diff --git a/src/y-p2p-mesh.js b/src/y-p2p-mesh.js index 098c5ed3d801d342a00466304976b4a7fd0ab6b4..9b1ed12307726c5998f3efc974571b71ea33d185 100644 --- a/src/y-p2p-mesh.js +++ b/src/y-p2p-mesh.js @@ -3,6 +3,7 @@ /* webpack should NOT import Worker */ // #!if false +import path from "path" import Worker from "tiny-worker" // #!endif @@ -31,11 +32,11 @@ function extend(Y) { this.options.heartbeat.timeout = this.options.heartbeat.timeout || 10000 /* webpack should use the packaged queue.js path */ - let path = "js/queue.js" + let workerPath = "js/queue.js" // #!if false - path = "./src/queue.js" + workerPath = path.join(__dirname, "./queue.js") // #!endif - this.queue = new Worker(path, [], { esm: true }) + this.queue = new Worker(workerPath, [], { esm: true }) this.queue.onmessage = (event) => { const method = event.data.method