dynamic
- #4588 @ 2026-06-01 21:42:56 Selected tier: 2
- #4589 @ 2026-06-01 21:42:56 - Roundstart population: 31
- #4590 @ 2026-06-01 21:42:56 - Roundstart ruleset count: 2
- #4591 @ 2026-06-01 21:42:56 - Light midround ruleset count: 3
- #4592 @ 2026-06-01 21:42:56 - Heavy midround ruleset count: 2
- #4593 @ 2026-06-01 21:42:56 - Latejoin ruleset count: 2
- #4594 @ 2026-06-01 21:42:56 Roundstart: Ruleset Roundstart Spies (Chance: 12.22%)
- #4595 @ 2026-06-01 21:42:56 Roundstart: Ruleset Roundstart Heretics (Chance: 9.3%)
- #4597 @ 2026-06-01 21:42:56 Roundstart: Fordan_greeman/(Fordan_greeman) has been selected for Roundstart Spies.
- #4598 @ 2026-06-01 21:42:56 Roundstart: Cardboard_F0x/(Cardboard_F0x) has been selected for Roundstart Spies.
- #4599 @ 2026-06-01 21:42:56 Roundstart: Jaffersin/(Jaffersin) has been selected for Roundstart Spies.
- #4600 @ 2026-06-01 21:42:56 Roundstart: Wethrrman/(Wethrrman) has been selected for Roundstart Heretics.
- #4601 @ 2026-06-01 21:42:56 Roundstart: Kuriketto/(Kuriketto) has been selected for Roundstart Heretics.
- #46241 @ 2026-06-01 22:39:52 Midround (light_midround): mentaldecayed/(Arcticus Cecropia) has been selected for Midround Traitor.
- #55248 @ 2026-06-01 22:51:44 Latejoin: tamuren/(Renton Novak) has been selected for Latejoin Traitor.
- #58026 @ 2026-06-01 22:55:12 Midround (light_midround): Ruleset chance failed (78.5714% chance)
- #58303 @ 2026-06-01 22:55:28 Midround (heavy_midround): borisvanmemes/(Tam Lin) has been selected for Blob Infection.
- #63939 @ 2026-06-01 23:03:17 Latejoin: Selected ruleset Traitor for thatrandomperson124/(Percy H. Briggs), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1
- #66113 @ 2026-06-01 23:06:23 Latejoin: Selected ruleset Traitor for acersago/(Bryan Somner), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1
- #68708 @ 2026-06-01 23:10:46 Latejoin: Selected ruleset Changeling for termtag/(Peter Chevs), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1
- #69500 @ 2026-06-01 23:11:49 Midround (light_midround): stiix/(Ija) has been selected for Voidwalker.
- #69825 @ 2026-06-01 23:12:12 Latejoin: ituraxi/(Louis Cooper) has been selected for Latejoin Traitor.
Raw Data
{
"data": {
"1": {
"ts": {
"date": "2026-06-01 21:42:56.127000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Selected tier: 2",
"data": null,
"w-state": {
"tick_usage": 901.942,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.128008"
},
"s-store": null,
"id": 4588,
"s-ver": "1.0.0"
},
"2": {
"ts": {
"date": "2026-06-01 21:42:56.128000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Roundstart population: 31",
"data": null,
"w-state": {
"tick_usage": 902.374,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.128224"
},
"s-store": null,
"id": 4589,
"s-ver": "1.0.0"
},
"3": {
"ts": {
"date": "2026-06-01 21:42:56.128000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Roundstart ruleset count: 2",
"data": null,
"w-state": {
"tick_usage": 902.714,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.128394"
},
"s-store": null,
"id": 4590,
"s-ver": "1.0.0"
},
"4": {
"ts": {
"date": "2026-06-01 21:42:56.128000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Light midround ruleset count: 3",
"data": null,
"w-state": {
"tick_usage": 903.03,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.128552"
},
"s-store": null,
"id": 4591,
"s-ver": "1.0.0"
},
"5": {
"ts": {
"date": "2026-06-01 21:42:56.128000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Heavy midround ruleset count: 2",
"data": null,
"w-state": {
"tick_usage": 903.342,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.128709"
},
"s-store": null,
"id": 4592,
"s-ver": "1.0.0"
},
"6": {
"ts": {
"date": "2026-06-01 21:42:56.128000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "- Latejoin ruleset count: 2",
"data": null,
"w-state": {
"tick_usage": 903.666,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.128870"
},
"s-store": null,
"id": 4593,
"s-ver": "1.0.0"
},
"7": {
"ts": {
"date": "2026-06-01 21:42:56.129000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Roundstart: Ruleset Roundstart Spies (Chance: 12.22%)",
"data": null,
"w-state": {
"tick_usage": 905.466,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.129770"
},
"s-store": null,
"id": 4594,
"s-ver": "1.0.0"
},
"8": {
"ts": {
"date": "2026-06-01 21:42:56.129000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Roundstart: Ruleset Roundstart Heretics (Chance: 9.3%)",
"data": null,
"w-state": {
"tick_usage": 905.844,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.129960"
},
"s-store": null,
"id": 4595,
"s-ver": "1.0.0"
},
"9": {
"ts": {
"date": "2026-06-01 21:42:56.142000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Roundstart: Fordan_greeman\/(Fordan_greeman) has been selected for Roundstart Spies.",
"data": null,
"w-state": {
"tick_usage": 930.502,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.142288"
},
"s-store": null,
"id": 4597,
"s-ver": "1.0.0"
},
"10": {
"ts": {
"date": "2026-06-01 21:42:56.142000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Roundstart: Cardboard_F0x\/(Cardboard_F0x) has been selected for Roundstart Spies.",
"data": null,
"w-state": {
"tick_usage": 930.928,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.142501"
},
"s-store": null,
"id": 4598,
"s-ver": "1.0.0"
},
"11": {
"ts": {
"date": "2026-06-01 21:42:56.142000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Roundstart: Jaffersin\/(Jaffersin) has been selected for Roundstart Spies.",
"data": null,
"w-state": {
"tick_usage": 931.304,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.142689"
},
"s-store": null,
"id": 4599,
"s-ver": "1.0.0"
},
"12": {
"ts": {
"date": "2026-06-01 21:42:56.144000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Roundstart: Wethrrman\/(Wethrrman) has been selected for Roundstart Heretics.",
"data": null,
"w-state": {
"tick_usage": 934.656,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.144365"
},
"s-store": null,
"id": 4600,
"s-ver": "1.0.0"
},
"13": {
"ts": {
"date": "2026-06-01 21:42:56.144000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Roundstart: Kuriketto\/(Kuriketto) has been selected for Roundstart Heretics.",
"data": null,
"w-state": {
"tick_usage": 935.034,
"tick_lag": 0.5,
"time": 2590,
"timestamp": "1780350176.144554"
},
"s-store": null,
"id": 4601,
"s-ver": "1.0.0"
},
"14": {
"ts": {
"date": "2026-06-01 22:39:52.366000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (light_midround): mentaldecayed\/(Arcticus Cecropia) has been selected for Midround Traitor.",
"data": null,
"w-state": {
"tick_usage": 45.11,
"tick_lag": 0.5,
"time": 35723.5,
"timestamp": "1780353592.367219"
},
"s-store": null,
"id": 46241,
"s-ver": "1.0.0"
},
"15": {
"ts": {
"date": "2026-06-01 22:51:44.252000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Latejoin: tamuren\/(Renton Novak) has been selected for Latejoin Traitor.",
"data": null,
"w-state": {
"tick_usage": 278.73,
"tick_lag": 0.5,
"time": 42569,
"timestamp": "1780354304.253132"
},
"s-store": null,
"id": 55248,
"s-ver": "1.0.0"
},
"16": {
"ts": {
"date": "2026-06-01 22:55:12.627000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (light_midround): Ruleset chance failed (78.5714% chance)",
"data": null,
"w-state": {
"tick_usage": 37.616,
"tick_lag": 0.5,
"time": 44574,
"timestamp": "1780354512.628114"
},
"s-store": null,
"id": 58026,
"s-ver": "1.0.0"
},
"17": {
"ts": {
"date": "2026-06-01 22:55:28.079000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (heavy_midround): borisvanmemes\/(Tam Lin) has been selected for Blob Infection.",
"data": null,
"w-state": {
"tick_usage": 45.814,
"tick_lag": 0.5,
"time": 44724,
"timestamp": "1780354528.079674"
},
"s-store": null,
"id": 58303,
"s-ver": "1.0.0"
},
"18": {
"ts": {
"date": "2026-06-01 23:03:17.729000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Latejoin: Selected ruleset Traitor for thatrandomperson124\/(Percy H. Briggs), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1",
"data": null,
"w-state": {
"tick_usage": 294.34,
"tick_lag": 0.5,
"time": 49161,
"timestamp": "1780354997.730332"
},
"s-store": null,
"id": 63939,
"s-ver": "1.0.0"
},
"19": {
"ts": {
"date": "2026-06-01 23:06:23.477000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Latejoin: Selected ruleset Traitor for acersago\/(Bryan Somner), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1",
"data": null,
"w-state": {
"tick_usage": 233.452,
"tick_lag": 0.5,
"time": 50937,
"timestamp": "1780355183.477882"
},
"s-store": null,
"id": 66113,
"s-ver": "1.0.0"
},
"20": {
"ts": {
"date": "2026-06-01 23:10:46.448000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Latejoin: Selected ruleset Changeling for termtag\/(Peter Chevs), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1",
"data": null,
"w-state": {
"tick_usage": 377.38,
"tick_lag": 0.5,
"time": 53456.5,
"timestamp": "1780355446.448527"
},
"s-store": null,
"id": 68708,
"s-ver": "1.0.0"
},
"21": {
"ts": {
"date": "2026-06-01 23:11:49.070000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Midround (light_midround): stiix\/(Ija) has been selected for Voidwalker.",
"data": null,
"w-state": {
"tick_usage": 263.31,
"tick_lag": 0.5,
"time": 54042,
"timestamp": "1780355509.070549"
},
"s-store": null,
"id": 69500,
"s-ver": "1.0.0"
},
"22": {
"ts": {
"date": "2026-06-01 23:12:12.233000",
"timezone_type": 3,
"timezone": "UTC"
},
"cat": "dynamic",
"msg": "Latejoin: ituraxi\/(Louis Cooper) has been selected for Latejoin Traitor.",
"data": null,
"w-state": {
"tick_usage": 363.686,
"tick_lag": 0.5,
"time": 54251,
"timestamp": "1780355532.233298"
},
"s-store": null,
"id": 69825,
"s-ver": "1.0.0"
}
},
"parser": "\\App\\Entity\\Stat\\dynamic",
"id": -1,
"datetime": {
"date": "2026-06-01 21:37:16.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"round": 262299,
"key": "dynamic",
"type": "generated",
"version": 1,
"json": "[{\"ts\":\"1780349836.363739\",\"round-id\":\"262299\",\"secret\":0,\"cat-list\":[\"dynamic\"],\"cat\":\"dynamic\"},{\"ts\":\"2026-06-01 21:42:56.127\",\"cat\":\"dynamic\",\"msg\":\"Selected tier: 2\",\"data\":null,\"w-state\":{\"tick_usage\":901.942,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.128008\"},\"s-store\":null,\"id\":4588,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.128\",\"cat\":\"dynamic\",\"msg\":\"- Roundstart population: 31\",\"data\":null,\"w-state\":{\"tick_usage\":902.374,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.128224\"},\"s-store\":null,\"id\":4589,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.128\",\"cat\":\"dynamic\",\"msg\":\"- Roundstart ruleset count: 2\",\"data\":null,\"w-state\":{\"tick_usage\":902.714,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.128394\"},\"s-store\":null,\"id\":4590,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.128\",\"cat\":\"dynamic\",\"msg\":\"- Light midround ruleset count: 3\",\"data\":null,\"w-state\":{\"tick_usage\":903.03,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.128552\"},\"s-store\":null,\"id\":4591,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.128\",\"cat\":\"dynamic\",\"msg\":\"- Heavy midround ruleset count: 2\",\"data\":null,\"w-state\":{\"tick_usage\":903.342,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.128709\"},\"s-store\":null,\"id\":4592,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.128\",\"cat\":\"dynamic\",\"msg\":\"- Latejoin ruleset count: 2\",\"data\":null,\"w-state\":{\"tick_usage\":903.666,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.128870\"},\"s-store\":null,\"id\":4593,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.129\",\"cat\":\"dynamic\",\"msg\":\"Roundstart: Ruleset Roundstart Spies (Chance: 12.22%)\",\"data\":null,\"w-state\":{\"tick_usage\":905.466,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.129770\"},\"s-store\":null,\"id\":4594,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.129\",\"cat\":\"dynamic\",\"msg\":\"Roundstart: Ruleset Roundstart Heretics (Chance: 9.3%)\",\"data\":null,\"w-state\":{\"tick_usage\":905.844,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.129960\"},\"s-store\":null,\"id\":4595,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.142\",\"cat\":\"dynamic\",\"msg\":\"Roundstart: Fordan_greeman\\\/(Fordan_greeman) has been selected for Roundstart Spies.\",\"data\":null,\"w-state\":{\"tick_usage\":930.502,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.142288\"},\"s-store\":null,\"id\":4597,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.142\",\"cat\":\"dynamic\",\"msg\":\"Roundstart: Cardboard_F0x\\\/(Cardboard_F0x) has been selected for Roundstart Spies.\",\"data\":null,\"w-state\":{\"tick_usage\":930.928,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.142501\"},\"s-store\":null,\"id\":4598,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.142\",\"cat\":\"dynamic\",\"msg\":\"Roundstart: Jaffersin\\\/(Jaffersin) has been selected for Roundstart Spies.\",\"data\":null,\"w-state\":{\"tick_usage\":931.304,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.142689\"},\"s-store\":null,\"id\":4599,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.144\",\"cat\":\"dynamic\",\"msg\":\"Roundstart: Wethrrman\\\/(Wethrrman) has been selected for Roundstart Heretics.\",\"data\":null,\"w-state\":{\"tick_usage\":934.656,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.144365\"},\"s-store\":null,\"id\":4600,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 21:42:56.144\",\"cat\":\"dynamic\",\"msg\":\"Roundstart: Kuriketto\\\/(Kuriketto) has been selected for Roundstart Heretics.\",\"data\":null,\"w-state\":{\"tick_usage\":935.034,\"tick_lag\":0.5,\"time\":2590,\"timestamp\":\"1780350176.144554\"},\"s-store\":null,\"id\":4601,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 22:39:52.366\",\"cat\":\"dynamic\",\"msg\":\"Midround (light_midround): mentaldecayed\\\/(Arcticus Cecropia) has been selected for Midround Traitor.\",\"data\":null,\"w-state\":{\"tick_usage\":45.11,\"tick_lag\":0.5,\"time\":35723.5,\"timestamp\":\"1780353592.367219\"},\"s-store\":null,\"id\":46241,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 22:51:44.252\",\"cat\":\"dynamic\",\"msg\":\"Latejoin: tamuren\\\/(Renton Novak) has been selected for Latejoin Traitor.\",\"data\":null,\"w-state\":{\"tick_usage\":278.73,\"tick_lag\":0.5,\"time\":42569,\"timestamp\":\"1780354304.253132\"},\"s-store\":null,\"id\":55248,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 22:55:12.627\",\"cat\":\"dynamic\",\"msg\":\"Midround (light_midround): Ruleset chance failed (78.5714% chance)\",\"data\":null,\"w-state\":{\"tick_usage\":37.616,\"tick_lag\":0.5,\"time\":44574,\"timestamp\":\"1780354512.628114\"},\"s-store\":null,\"id\":58026,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 22:55:28.079\",\"cat\":\"dynamic\",\"msg\":\"Midround (heavy_midround): borisvanmemes\\\/(Tam Lin) has been selected for Blob Infection.\",\"data\":null,\"w-state\":{\"tick_usage\":45.814,\"tick_lag\":0.5,\"time\":44724,\"timestamp\":\"1780354528.079674\"},\"s-store\":null,\"id\":58303,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 23:03:17.729\",\"cat\":\"dynamic\",\"msg\":\"Latejoin: Selected ruleset Traitor for thatrandomperson124\\\/(Percy H. Briggs), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1\",\"data\":null,\"w-state\":{\"tick_usage\":294.34,\"tick_lag\":0.5,\"time\":49161,\"timestamp\":\"1780354997.730332\"},\"s-store\":null,\"id\":63939,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 23:06:23.477\",\"cat\":\"dynamic\",\"msg\":\"Latejoin: Selected ruleset Traitor for acersago\\\/(Bryan Somner), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1\",\"data\":null,\"w-state\":{\"tick_usage\":233.452,\"tick_lag\":0.5,\"time\":50937,\"timestamp\":\"1780355183.477882\"},\"s-store\":null,\"id\":66113,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 23:10:46.448\",\"cat\":\"dynamic\",\"msg\":\"Latejoin: Selected ruleset Changeling for termtag\\\/(Peter Chevs), but preparation failed! Latejoin chance has increased. Reason: Not enough eligible candidates. Have: 0, Need: 1\",\"data\":null,\"w-state\":{\"tick_usage\":377.38,\"tick_lag\":0.5,\"time\":53456.5,\"timestamp\":\"1780355446.448527\"},\"s-store\":null,\"id\":68708,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 23:11:49.070\",\"cat\":\"dynamic\",\"msg\":\"Midround (light_midround): stiix\\\/(Ija) has been selected for Voidwalker.\",\"data\":null,\"w-state\":{\"tick_usage\":263.31,\"tick_lag\":0.5,\"time\":54042,\"timestamp\":\"1780355509.070549\"},\"s-store\":null,\"id\":69500,\"s-ver\":\"1.0.0\"},{\"ts\":\"2026-06-01 23:12:12.233\",\"cat\":\"dynamic\",\"msg\":\"Latejoin: ituraxi\\\/(Louis Cooper) has been selected for Latejoin Traitor.\",\"data\":null,\"w-state\":{\"tick_usage\":363.686,\"tick_lag\":0.5,\"time\":54251,\"timestamp\":\"1780355532.233298\"},\"s-store\":null,\"id\":69825,\"s-ver\":\"1.0.0\"},null]",
"originalUrl": "https:\/\/manuel-logs.tgstation13.org\/2026\/06\/01\/round-262299\/dynamic.log.json"
}
Install Gentoo