├── .github └── workflows │ └── pr-test.yml ├── .gitignore ├── .readthedocs.yml ├── LICENSE ├── Makefile ├── README.md ├── STYLE.md ├── circleguard ├── __init__.py ├── circleguard.py ├── frametime_graph.py ├── game_version.py ├── hitobjects.py ├── investigations.py ├── judgment.py ├── loadables.py ├── loader.py ├── map_info.py ├── mod.py ├── postgres.py ├── span.py ├── utils.py └── version.py ├── docs ├── advanced-usage.rst ├── appendix.rst ├── caching.rst ├── conf.py ├── contributing.rst ├── foreword.rst ├── index.rst ├── loading.rst ├── replay-containers.rst ├── representing-replays.rst └── using-circleguard.rst ├── readme_resources └── logo.png ├── setup.py └── tests ├── __init__.py ├── benchmark_hits.py ├── benchmarks.py ├── resources ├── auto │ ├── auto-1.osr │ ├── auto-2.osr │ ├── auto-3.osr │ ├── auto-4.osr │ ├── auto-5.osr │ ├── cursordance-1.osr │ ├── cursordance-2.osr │ ├── cursordance-3.osr │ ├── cursordance-4.osr │ ├── cursordance-5.osr │ ├── cursordance-6.osr │ ├── cursordance-7.osr │ ├── pilot-1.osr │ ├── pilot-2.osr │ └── pilot-3.osr ├── corrected_replay1.osr ├── example_replay.osr ├── legit │ ├── 2_histogram_peaks │ │ ├── replay-osu_1115068_3537832838.osr │ │ ├── replay-osu_1649060_2653254255.osr │ │ ├── replay-osu_1649528_2728075053.osr │ │ ├── replay-osu_1681124_2636614839.osr │ │ ├── replay-osu_2058788_3072716370.osr │ │ ├── replay-osu_255700_1740153425.osr │ │ ├── replay-osu_276366_1720366862.osr │ │ ├── replay-osu_332962_1722917912.osr │ │ ├── replay-osu_338544_1718949811.osr │ │ ├── replay-osu_838487_3513254185.osr │ │ └── replay-osu_988793_2526343524.osr │ ├── 3_histogram_peaks │ │ ├── Malai_-_Big_Time_Rush_-_Worldwide_Paris_London_Tokyo_2021-05-29_Osu-1.osr │ │ ├── Malai_-_Big_Time_Rush_-_Worldwide_Paris_London_Tokyo_2021-05-29_Osu.osr │ │ ├── Malai_-_Travis_Scott_-_SICKO_MODE_feat._Drake_Insane_2021-05-29_Osu.osr │ │ └── replay-osu_2520609_3690741716.osr │ ├── legit-1.osr │ ├── legit-10.osr │ ├── legit-11.osr │ ├── legit-12.osr │ ├── legit-2.osr │ ├── legit-3.osr │ ├── legit-4.osr │ ├── legit-5.osr │ ├── legit-6.osr │ ├── legit-7.osr │ ├── legit-8.osr │ ├── legit-9.osr │ ├── legit_100fps_30s_map_no_keypresses_nm.osr │ ├── legit_100fps_30s_map_with_keypresses_nm.osr │ ├── legit_100fps_98s_map_no_keypresses_nm-1.osr │ ├── legit_100fps_98s_map_no_keypresses_nm-2.osr │ ├── legit_120fps_dt-1.osr │ ├── legit_120fps_dt-2.osr │ ├── legit_120fps_nm.osr │ ├── legit_144fps-nm.osr │ ├── legit_144fps_dt.osr │ ├── legit_144fps_nmrx.osr │ ├── legit_1peak_nm.osr │ ├── legit_1peak_short_frames_from_break_nm.osr │ ├── legit_288fps_dt.osr │ ├── legit_2peaks_dtrx.osr │ ├── legit_2peaks_nm-1.osr │ ├── legit_2peaks_nm-2.osr │ ├── legit_2peaks_short_frames_from_break_nm.osr │ ├── legit_3peaks_dt-1.osr │ ├── legit_3peaks_dt-2.osr │ ├── legit_3peaks_dtrx.osr │ ├── legit_3peaks_nm-1.osr │ ├── legit_frametime-1.osr │ ├── legit_frametime-10.osr │ ├── legit_frametime-11.osr │ ├── legit_frametime-12.osr │ ├── legit_frametime-13.osr │ ├── legit_frametime-14.osr │ ├── legit_frametime-15.osr │ ├── legit_frametime-2.osr │ ├── legit_frametime-3.osr │ ├── legit_frametime-4.osr │ ├── legit_frametime-5.osr │ ├── legit_frametime-6.osr │ ├── legit_frametime-7.osr │ ├── legit_frametime-8.osr │ ├── legit_frametime-9.osr │ ├── legit_lots_of_lag_frames_dt.osr │ ├── legit_lots_of_lag_frames_nm-1.osr │ ├── legit_lots_of_lag_frames_nm-2.osr │ ├── legit_lots_of_short_frames_really_messy_nm.osr │ ├── legit_old_replay_dt.osr │ ├── legit_old_replay_ht.osr │ ├── legit_snaps-1.osr │ ├── legit_snaps-10.osr │ ├── legit_snaps-11.osr │ ├── legit_snaps-12.osr │ ├── legit_snaps-13.osr │ ├── legit_snaps-14.osr │ ├── legit_snaps-15.osr │ ├── legit_snaps-16.osr │ ├── legit_snaps-17.osr │ ├── legit_snaps-18.osr │ ├── legit_snaps-19.osr │ ├── legit_snaps-2.osr │ ├── legit_snaps-20.osr │ ├── legit_snaps-21.osr │ ├── legit_snaps-22.osr │ ├── legit_snaps-23.osr │ ├── legit_snaps-24.osr │ ├── legit_snaps-3.osr │ ├── legit_snaps-4.osr │ ├── legit_snaps-5.osr │ ├── legit_snaps-6.osr │ ├── legit_snaps-7.osr │ ├── legit_snaps-8.osr │ ├── legit_snaps-9.osr │ ├── legit_triangle_shape_really_messy_dt-1.osr │ ├── legit_triangle_shape_really_messy_dt-2.osr │ ├── legit_unlimited_fps_dt-1.osr │ ├── legit_unlimited_fps_dt-2.osr │ ├── legit_unlimited_fps_nm-1.osr │ ├── legit_unlimited_fps_nm-2.osr │ ├── legit_unlimited_fps_nm-3.osr │ ├── legit_wide_peak_dt.osr │ ├── legit_wide_peak_long_map_nm.osr │ ├── low_frametime_old │ │ ├── replay-osu_16266_138416739.osr │ │ ├── replay-osu_22993_236660902.osr │ │ ├── replay-osu_24722_433541214.osr │ │ ├── replay-osu_26502_203747354.osr │ │ ├── replay-osu_26799_401403603.osr │ │ └── replay-osu_86044_552532194.osr │ ├── low_histogram_peak │ │ ├── replay-osu_2261702_3613908998.osr │ │ └── replay-osu_2397803_3626238208.osr │ ├── low_similarity │ │ ├── replay-osu_1352234_2953940624.osr │ │ ├── replay-osu_1352234_3354603437.osr │ │ ├── replay-osu_16266_756655679.osr │ │ ├── replay-osu_16266_815970815.osr │ │ ├── replay-osu_1817356_3004221396.osr │ │ ├── replay-osu_1817356_3396967055.osr │ │ ├── replay-osu_1871291_3218608210.osr │ │ ├── replay-osu_1871291_3222258037.osr │ │ ├── replay-osu_1909836_3099438014.osr │ │ ├── replay-osu_1909836_3586026443.osr │ │ ├── replay-osu_2505634_3170492636.osr │ │ ├── replay-osu_2505634_3301915571.osr │ │ ├── replay-osu_2510846_3519733477.osr │ │ ├── replay-osu_2510846_3576606916.osr │ │ ├── replay-osu_2511210_3293960241.osr │ │ ├── replay-osu_2511210_3597195342.osr │ │ ├── replay-osu_2513983_3438227958.osr │ │ ├── replay-osu_2513983_3531785446.osr │ │ ├── replay-osu_2528044_3431786037.osr │ │ ├── replay-osu_2528044_3583239446.osr │ │ ├── replay-osu_2544530_3381338195.osr │ │ ├── replay-osu_2544530_3517917994.osr │ │ ├── replay-osu_2635266_3298780630.osr │ │ ├── replay-osu_2635266_3302908426.osr │ │ ├── replay-osu_2665747_3550690802.osr │ │ ├── replay-osu_2665747_3562357907.osr │ │ ├── replay-osu_2769504_3439027349.osr │ │ ├── replay-osu_2769504_3509136743.osr │ │ ├── replay-osu_341_1503979225.osr │ │ └── replay-osu_341_944992613.osr │ └── replay-osu_1049018_3681047610.osr ├── other │ └── empty_replay_data.osr ├── relax_cheated │ ├── blatant │ │ ├── relax_cheated-4.osr │ │ ├── replay-osu_1373950_2900807505.osr │ │ └── replay-osu_1617643_2750716353.osr │ ├── relax_cheated-1.osr │ └── relax_cheated-2.osr ├── stealing │ ├── stolen-1-1.osr │ ├── stolen-1-2.osr │ ├── stolen-10-1.osr │ ├── stolen-10-2.osr │ ├── stolen-100-1.osr │ ├── stolen-100-2.osr │ ├── stolen-101-1.osr │ ├── stolen-101-2.osr │ ├── stolen-102-1.osr │ ├── stolen-102-2.osr │ ├── stolen-103-1.osr │ ├── stolen-103-2.osr │ ├── stolen-104-1.osr │ ├── stolen-104-2.osr │ ├── stolen-105-1.osr │ ├── stolen-105-2.osr │ ├── stolen-106-1.osr │ ├── stolen-106-2.osr │ ├── stolen-107-1.osr │ ├── stolen-107-2.osr │ ├── stolen-108-1.osr │ ├── stolen-108-2.osr │ ├── stolen-109-1.osr │ ├── stolen-109-2.osr │ ├── stolen-11-1.osr │ ├── stolen-11-2.osr │ ├── stolen-110-1.osr │ ├── stolen-110-2.osr │ ├── stolen-111-1.osr │ ├── stolen-111-2.osr │ ├── stolen-112-1.osr │ ├── stolen-112-2.osr │ ├── stolen-113-1.osr │ ├── stolen-113-2.osr │ ├── stolen-114-1.osr │ ├── stolen-114-2.osr │ ├── stolen-115-1.osr │ ├── stolen-115-2.osr │ ├── stolen-116-1.osr │ ├── stolen-116-2.osr │ ├── stolen-117-1.osr │ ├── stolen-117-2.osr │ ├── stolen-118-1.osr │ ├── stolen-118-2.osr │ ├── stolen-119-1.osr │ ├── stolen-119-2.osr │ ├── stolen-12-1.osr │ ├── stolen-12-2.osr │ ├── stolen-120-1.osr │ ├── stolen-120-2.osr │ ├── stolen-121-1.osr │ ├── stolen-121-2.osr │ ├── stolen-122-1.osr │ ├── stolen-122-2.osr │ ├── stolen-123-1.osr │ ├── stolen-123-2.osr │ ├── stolen-124-1.osr │ ├── stolen-124-2.osr │ ├── stolen-125-1.osr │ ├── stolen-125-2.osr │ ├── stolen-126-1.osr │ ├── stolen-126-2.osr │ ├── stolen-127-1.osr │ ├── stolen-127-2.osr │ ├── stolen-128-1.osr │ ├── stolen-128-2.osr │ ├── stolen-129-1.osr │ ├── stolen-129-2.osr │ ├── stolen-13-1.osr │ ├── stolen-13-2.osr │ ├── stolen-130-1.osr │ ├── stolen-130-2.osr │ ├── stolen-131-1.osr │ ├── stolen-131-2.osr │ ├── stolen-132-1.osr │ ├── stolen-132-2.osr │ ├── stolen-133-1.osr │ ├── stolen-133-2.osr │ ├── stolen-134-1.osr │ ├── stolen-134-2.osr │ ├── stolen-135-1.osr │ ├── stolen-135-2.osr │ ├── stolen-136-1.osr │ ├── stolen-136-2.osr │ ├── stolen-137-1.osr │ ├── stolen-137-2.osr │ ├── stolen-138-1.osr │ ├── stolen-138-2.osr │ ├── stolen-139-1.osr │ ├── stolen-139-2.osr │ ├── stolen-14-1.osr │ ├── stolen-14-2.osr │ ├── stolen-140-1.osr │ ├── stolen-140-2.osr │ ├── stolen-141-1.osr │ ├── stolen-141-2.osr │ ├── stolen-142-1.osr │ ├── stolen-142-2.osr │ ├── stolen-143-1.osr │ ├── stolen-143-2.osr │ ├── stolen-144-1.osr │ ├── stolen-144-2.osr │ ├── stolen-145-1.osr │ ├── stolen-145-2.osr │ ├── stolen-146-1.osr │ ├── stolen-146-2.osr │ ├── stolen-15-1.osr │ ├── stolen-15-2.osr │ ├── stolen-16-1.osr │ ├── stolen-16-2.osr │ ├── stolen-17-1.osr │ ├── stolen-17-2.osr │ ├── stolen-18-1.osr │ ├── stolen-18-2.osr │ ├── stolen-19-1.osr │ ├── stolen-19-2.osr │ ├── stolen-2-1.osr │ ├── stolen-2-2.osr │ ├── stolen-20-1.osr │ ├── stolen-20-2.osr │ ├── stolen-21-1.osr │ ├── stolen-21-2.osr │ ├── stolen-22-1.osr │ ├── stolen-22-2.osr │ ├── stolen-23-1.osr │ ├── stolen-23-2.osr │ ├── stolen-24-1.osr │ ├── stolen-24-2.osr │ ├── stolen-25-1.osr │ ├── stolen-25-2.osr │ ├── stolen-26-1.osr │ ├── stolen-26-2.osr │ ├── stolen-27-1.osr │ ├── stolen-27-2.osr │ ├── stolen-28-1.osr │ ├── stolen-28-2.osr │ ├── stolen-29-1.osr │ ├── stolen-29-2.osr │ ├── stolen-3-1.osr │ ├── stolen-3-2.osr │ ├── stolen-30-1.osr │ ├── stolen-30-2.osr │ ├── stolen-31-1.osr │ ├── stolen-31-2.osr │ ├── stolen-32-1.osr │ ├── stolen-32-2.osr │ ├── stolen-33-1.osr │ ├── stolen-33-2.osr │ ├── stolen-34-1.osr │ ├── stolen-34-2.osr │ ├── stolen-35-1.osr │ ├── stolen-35-2.osr │ ├── stolen-36-1.osr │ ├── stolen-36-2.osr │ ├── stolen-37-1.osr │ ├── stolen-37-2.osr │ ├── stolen-38-1.osr │ ├── stolen-38-2.osr │ ├── stolen-39-1.osr │ ├── stolen-39-2.osr │ ├── stolen-4-1.osr │ ├── stolen-4-2.osr │ ├── stolen-40-1.osr │ ├── stolen-40-2.osr │ ├── stolen-41-1.osr │ ├── stolen-41-2.osr │ ├── stolen-42-1.osr │ ├── stolen-42-2.osr │ ├── stolen-43-1.osr │ ├── stolen-43-2.osr │ ├── stolen-44-1.osr │ ├── stolen-44-2.osr │ ├── stolen-45-1.osr │ ├── stolen-45-2.osr │ ├── stolen-46-1.osr │ ├── stolen-46-2.osr │ ├── stolen-47-1.osr │ ├── stolen-47-2.osr │ ├── stolen-48-1.osr │ ├── stolen-48-2.osr │ ├── stolen-49-1.osr │ ├── stolen-49-2.osr │ ├── stolen-5-1.osr │ ├── stolen-5-2.osr │ ├── stolen-50-1.osr │ ├── stolen-50-2.osr │ ├── stolen-51-1.osr │ ├── stolen-51-2.osr │ ├── stolen-52-1.osr │ ├── stolen-52-2.osr │ ├── stolen-53-1.osr │ ├── stolen-53-2.osr │ ├── stolen-54-1.osr │ ├── stolen-54-2.osr │ ├── stolen-55-1.osr │ ├── stolen-55-2.osr │ ├── stolen-56-1.osr │ ├── stolen-56-2.osr │ ├── stolen-57-1.osr │ ├── stolen-57-2.osr │ ├── stolen-58-1.osr │ ├── stolen-58-2.osr │ ├── stolen-59-1.osr │ ├── stolen-59-2.osr │ ├── stolen-6-1.osr │ ├── stolen-6-2.osr │ ├── stolen-60-1.osr │ ├── stolen-60-2.osr │ ├── stolen-61-1.osr │ ├── stolen-61-2.osr │ ├── stolen-62-1.osr │ ├── stolen-62-2.osr │ ├── stolen-63-1.osr │ ├── stolen-63-2.osr │ ├── stolen-64-1.osr │ ├── stolen-64-2.osr │ ├── stolen-65-1.osr │ ├── stolen-65-2.osr │ ├── stolen-66-1.osr │ ├── stolen-66-2.osr │ ├── stolen-67-1.osr │ ├── stolen-67-2.osr │ ├── stolen-68-1.osr │ ├── stolen-68-2.osr │ ├── stolen-69-1.osr │ ├── stolen-69-2.osr │ ├── stolen-7-1.osr │ ├── stolen-7-2.osr │ ├── stolen-70-1.osr │ ├── stolen-70-2.osr │ ├── stolen-71-1.osr │ ├── stolen-71-2.osr │ ├── stolen-72-1.osr │ ├── stolen-72-2.osr │ ├── stolen-73-1.osr │ ├── stolen-73-2.osr │ ├── stolen-74-1.osr │ ├── stolen-74-2.osr │ ├── stolen-75-1.osr │ ├── stolen-75-2.osr │ ├── stolen-76-1.osr │ ├── stolen-76-2.osr │ ├── stolen-77-1.osr │ ├── stolen-77-2.osr │ ├── stolen-78-1.osr │ ├── stolen-78-2.osr │ ├── stolen-79-1.osr │ ├── stolen-79-2.osr │ ├── stolen-8-1.osr │ ├── stolen-8-2.osr │ ├── stolen-80-1.osr │ ├── stolen-80-2.osr │ ├── stolen-81-1.osr │ ├── stolen-81-2.osr │ ├── stolen-82-1.osr │ ├── stolen-82-2.osr │ ├── stolen-83-1.osr │ ├── stolen-83-2.osr │ ├── stolen-84-1.osr │ ├── stolen-84-2.osr │ ├── stolen-85-1.osr │ ├── stolen-85-2.osr │ ├── stolen-86-1.osr │ ├── stolen-86-2.osr │ ├── stolen-87-1.osr │ ├── stolen-87-2.osr │ ├── stolen-88-1.osr │ ├── stolen-88-2.osr │ ├── stolen-89-1.osr │ ├── stolen-89-2.osr │ ├── stolen-9-1.osr │ ├── stolen-9-2.osr │ ├── stolen-90-1.osr │ ├── stolen-90-2.osr │ ├── stolen-91-1.osr │ ├── stolen-91-2.osr │ ├── stolen-92-1.osr │ ├── stolen-92-2.osr │ ├── stolen-93-1.osr │ ├── stolen-93-2.osr │ ├── stolen-94-1.osr │ ├── stolen-94-2.osr │ ├── stolen-95-1.osr │ ├── stolen-95-2.osr │ ├── stolen-96-1.osr │ ├── stolen-96-2.osr │ ├── stolen-97-1.osr │ ├── stolen-97-2.osr │ ├── stolen-98-1.osr │ ├── stolen-98-2.osr │ ├── stolen-99-1.osr │ ├── stolen-99-2.osr │ ├── stolen-high-sim-1-1.osr │ ├── stolen-high-sim-1-2.osr │ ├── stolen-time-shifted-1-1.osr │ ├── stolen-time-shifted-1-2.osr │ ├── stolen-time-shifted-2-1.osr │ ├── stolen-time-shifted-2-2.osr │ ├── stolen-time-shifted-3-1.osr │ ├── stolen-time-shifted-3-2.osr │ ├── stolen-time-shifted-4-1.osr │ ├── stolen-time-shifted-4-2.osr │ ├── stolen-time-shifted-5-1.osr │ ├── stolen-time-shifted-5-2.osr │ ├── stolen_remod-1-1.osr │ └── stolen_remod-1-2.osr ├── stolen_replay1.osr ├── stolen_replay2.osr └── timewarped │ ├── replay-osu_1617643_3616134026.osr │ ├── replay-osu_1619564_3542160594.osr │ ├── replay-osu_1627149_3504526013.osr │ ├── replay-osu_1627149_3568354130.osr │ ├── replay-osu_1627149_3569654267.osr │ ├── replay-osu_1627149_3604376654.osr │ ├── replay-osu_1627149_3616523285.osr │ ├── replay-osu_1627149_3620632389.osr │ ├── replay-osu_1627149_3628388697.osr │ ├── replay-osu_1627149_3630701927.osr │ ├── replay-osu_1627149_3633640709.osr │ ├── replay-osu_1827412_3633264590.osr │ ├── replay-osu_1936782_3597057114.osr │ ├── replay-osu_2156323_3124536556.osr │ ├── replay-osu_2204925_3620893121.osr │ ├── replay-osu_2421268_3503295355.osr │ ├── replay-osu_2580525_3625505463.osr │ ├── replay-osu_655468_3606599780.osr │ ├── replay-osu_848233_3606931282.osr │ ├── replay-osu_848235_3599791477.osr │ ├── timewarped-1.osr │ ├── timewarped-2.osr │ ├── timewarped-3.osr │ ├── timewarped-4.osr │ ├── timewarped_144fps_90%_dt.osr │ ├── timewarped_144fps_90%_nm.osr │ ├── timewarped_144fps_90%_nmrx.osr │ ├── timewarped_144fps_95%_dt.osr │ ├── timewarped_144fps_95%_nm.osr │ ├── timewarped_unlimitedfps_90%_dt-1.osr │ ├── timewarped_unlimitedfps_90%_dt-2.osr │ ├── timewarped_unlimitedfps_90%_nm-1.osr │ ├── timewarped_unlimitedfps_90%_nm-2.osr │ ├── timewarped_unlimitedfps_90%_nm-3.osr │ ├── timewarped_unlimitedfps_95%_dt-1.osr │ ├── timewarped_unlimitedfps_95%_dt-2.osr │ ├── timewarped_unlimitedfps_95%_nm-1.osr │ ├── timewarped_unlimitedfps_95%_nm-2.osr │ └── timewarped_unlimitedfps_95%_nm-3.osr ├── test_investigations.py ├── test_keyless_circleguard.py ├── test_loadables.py ├── test_loader.py ├── test_mod.py └── utils.py /.github/workflows/pr-test.yml: -------------------------------------------------------------------------------- 1 | on: pull_request 2 | name: Pull Request - Run Tests 3 | 4 | permissions: 5 | contents: read 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | 11 | env: 12 | OSU_API_KEY: ${{ secrets.OSU_API_KEY }} 13 | 14 | steps: 15 | - uses: actions/checkout@v4 16 | 17 | - name: Set up Python 3.9 18 | uses: actions/setup-python@v4 19 | with: 20 | python-version: 3.9 21 | 22 | - name: Install Dependencies 23 | run: | 24 | python -m pip install --upgrade pip 25 | pip install -e . 26 | 27 | - name: Run Tests 28 | run: python -m unittest 29 | -------------------------------------------------------------------------------- /.readthedocs.yml: -------------------------------------------------------------------------------- 1 | # Read the Docs configuration file 2 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 3 | 4 | # Required 5 | version: 2 6 | 7 | # Build documentation in the source/ directory with Sphinx 8 | sphinx: 9 | configuration: source/conf.py 10 | 11 | # Optionally set the version of Python and requirements required to build your docs 12 | python: 13 | version: 3.7 14 | install: 15 | - method: pip 16 | path: . 17 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = docs 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | logo 2 | 3 | [![PyPi version](https://badge.fury.io/py/circleguard.svg)](https://pypi.org/project/circleguard/) 4 | 5 | # Circlecore ([documentation](https://circleguard.github.io/circlecore/)) 6 | 7 | Circlecore is a utilities library for osu!. Features include: 8 | 9 | * Unstable Rate calculation 10 | * Judgments calculation (classifying all hitobjects into misses, hit300s, hit100s, hit50s, or sliderbreaks) 11 | * Similarity calculation between two replays, for replay stealing detection 12 | * Frametime calculation, for timewarp detection 13 | * Jerky, suspicious movement detection (called Snaps) 14 | 15 | Circlecore is used by [Circleguard](https://github.com/circleguard/circleguard), a replay analysis tool. 16 | 17 | Circlecore is developed and maintained by: 18 | 19 | * [tybug](https://github.com/tybug) 20 | * [samuelhklumpers](https://github.com/samuelhklumpers) 21 | 22 | ## Installation 23 | 24 | Circlecore can be installed from pip: 25 | 26 | ```bash 27 | pip install circleguard 28 | ``` 29 | 30 | This documentation refers to the project as `circlecore` to differentiate it from our organization [Circleguard](https://github.com/circleguard) and the replay analysis tool [Circleguard](https://github.com/circleguard/circleguard). However, `circlecore` is installed from pypi with the name `circleguard`, and is imported as such in code (`import circleguard`). 31 | 32 | ## Links 33 | 34 | Github:
35 | Documentation:
36 | Discord:
37 | 38 | ## Usage 39 | 40 | We have a full tutorial and documentation at . If you really want to jump right in, below is a quickstart guide: 41 | 42 | ```python 43 | from circleguard import * 44 | 45 | # replace "key" with your api key 46 | cg = Circleguard("key") 47 | # replay on http://osu.ppy.sh/b/221777 by http://osu.ppy.sh/u/2757689 48 | replay = ReplayMap(221777, 2757689) 49 | 50 | print(cg.ur(replay)) # unstable rate 51 | print(cg.frametime(replay)) # average frametime 52 | print(cg.frametimes(replay)) # full frametime list 53 | print(cg.hits(replay)) # where the replay hits hitobjects 54 | print(cg.snaps(replay)) # any jerky/suspicious movement 55 | 56 | replay2 = ReplayMap(221777, 4196808) 57 | print(cg.similarity(replay, replay2)) # how similar the replays are 58 | 59 | # ReplayMap isn't the only way to represent replays; we can also 60 | # get a beatmap's top 3 plays 61 | map_ = cg.Map(221777, span="1-3") 62 | # or a User's fifteenth and twentieth best plays 63 | user = cg.User(124493, span="15, 20") 64 | # or a local replay 65 | replay3 = ReplayPath("/path/to/local/osr/replay.osr") 66 | # and more. You can find them all at 67 | # https://circleguard.github.io/circlecore/appendix.html#circleguard.loadables.Loadable 68 | 69 | # maps and users can be iterated over 70 | for r in map_: 71 | print(cg.ur(r)) 72 | ``` 73 | 74 | ## Contributing 75 | 76 | Join [our discord](https://discord.gg/VNnkTjm) and ask how you can help, or look around for open issues which interest you and tackle those. Pull requests are welcome! 77 | -------------------------------------------------------------------------------- /STYLE.md: -------------------------------------------------------------------------------- 1 | # Style 2 | 3 | We follow [numpy style](https://numpydoc.readthedocs.io/en/latest/format.html#docstring-standard) docstrings, with the following exceptions. 4 | 5 | ## Backticks 6 | 7 | We use [sphinx](http://www.sphinx-doc.org/en/master/) to build our documentation, and as such use double backticks to represent inline literals such as variables, whereas numpy suggests a single backtick. 8 | 9 | ### Numpy 10 | 11 | ```python 12 | def add(a, b): 13 | """ 14 | Adds `a` and `b`. 15 | 16 | Parameters 17 | ---------- 18 | a: int 19 | The first number to add. 20 | b: int 21 | The second number to add. 22 | 23 | Returns 24 | ------- 25 | int 26 | The sum of `a` and `b`. 27 | """ 28 | return a + b 29 | ``` 30 | 31 | ### Circlecore 32 | 33 | ```python 34 | def add(a, b): 35 | """ 36 | Adds ``a`` and ``b``. 37 | 38 | Parameters 39 | ---------- 40 | a: int 41 | The first number to add. 42 | b: int 43 | The second number to add. 44 | 45 | Returns 46 | ------- 47 | int 48 | The sum of ``a`` and ``b``. 49 | """ 50 | return a + b 51 | ``` 52 | 53 | ## Colons 54 | 55 | Numpy has colons in the middle of the argument name and its type. For no reason other than aesthetics, we place the colon to the side of the name. 56 | 57 | ### Numpy 58 | 59 | ```python 60 | def add(a, b): 61 | """ 62 | Adds ``a`` and ``b``. 63 | 64 | Parameters 65 | ---------- 66 | a : int 67 | The first number to add. 68 | b : int 69 | The second number to add. 70 | 71 | Returns 72 | ------- 73 | int 74 | The sum of ``a`` and ``b``. 75 | """ 76 | return a + b 77 | ``` 78 | 79 | ### Circlecore 80 | 81 | ```python 82 | def add(a, b): 83 | """ 84 | Adds ``a`` and ``b``. 85 | 86 | Parameters 87 | ---------- 88 | a: int 89 | The first number to add. 90 | b: int 91 | The second number to add. 92 | 93 | Returns 94 | ------- 95 | int 96 | The sum of ``a`` and ``b``. 97 | """ 98 | return a + b 99 | ``` 100 | -------------------------------------------------------------------------------- /circleguard/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | from ossapi.ossapi import APIException, InvalidKeyException, ReplayUnavailableException 4 | 5 | from circleguard.circleguard import Circleguard, KeylessCircleguard, set_options 6 | from circleguard.game_version import GameVersion, NoGameVersion 7 | from circleguard.hitobjects import Circle, Hitobject, Slider, Spinner 8 | from circleguard.investigations import Snap 9 | from circleguard.judgment import Hit, Judgment, JudgmentType, Miss 10 | from circleguard.loadables import ( 11 | CachedReplay, 12 | Loadable, 13 | LoadableContainer, 14 | Map, 15 | MapUser, 16 | Replay, 17 | ReplayCache, 18 | ReplayContainer, 19 | ReplayDir, 20 | ReplayID, 21 | ReplayMap, 22 | ReplayOssapi, 23 | ReplayPath, 24 | ReplayString, 25 | User, 26 | ) 27 | from circleguard.loader import Loader, NoInfoAvailableException 28 | from circleguard.mod import Mod 29 | from circleguard.span import Span 30 | from circleguard.utils import ( 31 | TRACE, 32 | ColoredFormatter, 33 | Key, 34 | RatelimitWeight, 35 | convert_statistic, 36 | fuzzy_mods, 37 | hitradius, 38 | hitwindow, 39 | hitwindows, 40 | order, 41 | replay_pairs, 42 | ) 43 | from circleguard.version import __version__ 44 | 45 | logging.addLevelName(TRACE, "TRACE") 46 | formatter = ColoredFormatter( 47 | "[%(threadName)s][%(name)s][%(levelname)s] %(message)s (%(filename)s:%(lineno)s)" 48 | ) 49 | handler_stream = logging.StreamHandler() 50 | handler_stream.setFormatter(formatter) 51 | logging.getLogger("circleguard").addHandler(handler_stream) 52 | 53 | # don't expose ColoredFormatter to consumers 54 | del ColoredFormatter 55 | 56 | __all__ = [ 57 | # core 58 | "Circleguard", 59 | "KeylessCircleguard", 60 | "set_options", 61 | # loadables 62 | "ReplayContainer", 63 | "Map", 64 | "User", 65 | "MapUser", 66 | "ReplayCache", 67 | "Replay", 68 | "ReplayMap", 69 | "ReplayPath", 70 | "CachedReplay", 71 | "Loadable", 72 | "ReplayID", 73 | "ReplayDir", 74 | "ReplayString", 75 | "LoadableContainer", 76 | "ReplayOssapi", 77 | # enums 78 | "Key", 79 | "RatelimitWeight", 80 | # mod 81 | "Mod", 82 | # utils 83 | "convert_statistic", 84 | "order", 85 | "Key", 86 | "RatelimitWeight", 87 | "TRACE", 88 | "replay_pairs", 89 | "fuzzy_mods", 90 | "hitwindow", 91 | "hitwindows", 92 | "hitradius", 93 | # loader 94 | "Loader", 95 | # exceptions 96 | "APIException", 97 | "NoInfoAvailableException", 98 | "InvalidKeyException", 99 | "ReplayUnavailableException", 100 | # version 101 | "__version__", 102 | # investigation-related classes 103 | "Snap", 104 | "Judgment", 105 | "Hit", 106 | "Miss", 107 | "JudgmentType", 108 | # span 109 | "Span", 110 | # GameVersion 111 | "GameVersion", 112 | "NoGameVersion", 113 | # hitobjects 114 | "Hitobject", 115 | "Circle", 116 | "Slider", 117 | "Spinner", 118 | ] 119 | -------------------------------------------------------------------------------- /circleguard/frametime_graph.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | try: 4 | from matplotlib import pyplot 5 | except ImportError: 6 | raise ImportError("matplotlib must be installed to create frametime graphs") 7 | 8 | from circleguard.circleguard import KeylessCircleguard 9 | from circleguard.mod import Mod 10 | 11 | # classes that import optional modules have to be in their own file, or else 12 | # they get imported and evaluated (and potentially error) when circlecore is 13 | # imported. We can fix this by wrapping the entire definition in a 14 | # try/catch/pass, but then we can't give a nice error message when people try to 15 | # use this class without installing matplotlib. Another file isn't the end of 16 | # the world. 17 | 18 | 19 | class FrametimeGraph: 20 | # for any frametimes larger than this, chuck them into a single bin. 21 | # matplotlib can't really handle that many bins otherwise 22 | MAX_FRAMETIME = 50 23 | 24 | def __init__(self, replay, cv, figure, show_expected_frametime): 25 | self.cv = cv 26 | # figsize is in inches for whatever reason lol 27 | self.figure = figure or pyplot.figure(figsize=(5, 5)) 28 | self.show_expected_frametime = show_expected_frametime 29 | conversion_factor_raw = self._conversion_factor(replay) 30 | self.conversion_factor = conversion_factor_raw if self.cv else 1 31 | self.expected_frametime = 16 + 2 / 3 32 | if not self.cv: 33 | self.expected_frametime /= conversion_factor_raw 34 | 35 | # replay is guaranteed to be loaded when we get it 36 | cg = KeylessCircleguard() 37 | # we convert the frametimes manually if necessary later on instead of 38 | # relying on our conversion in this method, since there are a few 39 | # oddities about the frametime graph which make it easier this way. 40 | frametimes = cg.frametimes(replay, cv=False) 41 | 42 | self.figure.suptitle( 43 | f"Frametimes for {replay.username} " 44 | f"+{replay.mods.short_name()} on b/{replay.map_id}" 45 | ) 46 | 47 | self.max_frametime = max(frametimes) 48 | if self.max_frametime > self.MAX_FRAMETIME: 49 | self.plot_with_break(frametimes) 50 | else: 51 | self.plot_normal(frametimes) 52 | 53 | def plot_normal(self, frametimes): 54 | frametimes = self.conversion_factor * frametimes 55 | ax = self.figure.subplots() 56 | 57 | bins = np.arange( 58 | 0, (self.conversion_factor * self.max_frametime) + 1, self.conversion_factor 59 | ) 60 | ax.hist(frametimes, bins) 61 | ax.set_xlabel("Frametime") 62 | ax.set_ylabel("Count") 63 | 64 | if self.show_expected_frametime: 65 | ax.axvline(x=self.expected_frametime, color="red") 66 | 67 | # adapted from 68 | # https://matplotlib.org/examples/pylab_examples/broken_axis.html 69 | def plot_with_break(self, frametimes): 70 | # gridspec_kw to make outlier plot smaller than the main one. 71 | # https://stackoverflow.com/a/35881382 72 | ax1, ax2 = self.figure.subplots( 73 | 1, 2, sharey=True, gridspec_kw={"width_ratios": [3, 1]} 74 | ) 75 | ax1.spines["right"].set_visible(False) 76 | ax2.spines["left"].set_visible(False) 77 | ax1.set_xlabel("Frametime") 78 | ax1.set_ylabel("Count") 79 | 80 | ax2.tick_params(left=False) 81 | 82 | low_frametime_truth_arr = frametimes <= self.MAX_FRAMETIME 83 | low_frametimes = frametimes[low_frametime_truth_arr] 84 | high_frametimes = frametimes[~low_frametime_truth_arr] 85 | 86 | low_frametimes = self.conversion_factor * low_frametimes 87 | high_frametimes = self.conversion_factor * high_frametimes 88 | 89 | bins = np.arange( 90 | 0, (self.conversion_factor * self.MAX_FRAMETIME) + 1, self.conversion_factor 91 | ) 92 | ax1.hist(low_frametimes, bins) 93 | # -1 in case high_frametimes has only one frame 94 | bins = [min(high_frametimes) - 1, self.conversion_factor * self.max_frametime] 95 | ax2.hist(high_frametimes, bins) 96 | 97 | if self.show_expected_frametime: 98 | ax1.axvline(x=self.expected_frametime, color="red") 99 | 100 | def _conversion_factor(self, replay): 101 | if Mod.DT in replay.mods: 102 | return 1 / 1.5 103 | if Mod.HT in replay.mods: 104 | return 1 / 0.75 105 | return 1 106 | -------------------------------------------------------------------------------- /circleguard/game_version.py: -------------------------------------------------------------------------------- 1 | class GameVersion(int): 2 | """ 3 | Information about the version of osu! a 4 | :class:`~circleguard.loadables.Replay` was played on. 5 | 6 | Parameters 7 | ---------- 8 | version: int 9 | The version of osu! to represent. 10 | 11 | concrete: bool 12 | Whether ``version`` is the actual version of osu! the replay was played 13 | on (in which case ``concrete`` should be ``True``), or just an 14 | approximation of the version of osu! the replay was played on (in which 15 | case ``concrete`` should be ``False``). 16 | |br| 17 | If the version is an approximation, you are not restricted to actual 18 | released versions of the game (for instance, osu! has no 20200908 19 | version of the game, only 20200831), but may use any day of any month 20 | of any year as your version. Circleguard will see that your version 21 | is just an estimate (as ``concrete`` will be ``False``), and act 22 | accordingly. 23 | 24 | Notes 25 | ----- 26 | osu!'s versioning scheme uses a variation of Calender Versioning 27 | (https://calver.org/), which means that a release's version is the day that 28 | release was released. A new version pushed out on 09/08/2020 (MM/DD/YYYY), 29 | for instance, would have a version of 20200809 (YYYYMMDD). 30 | |br| 31 | We provide :func:`~circleguard.game_version.GameVersion.from_datetime` as a 32 | convenience for when you have a :class:`datetime.datetime` object 33 | representing the day an osu! version was released, and want to create a 34 | ``GameVersion`` from that. 35 | |br| 36 | This class subclasses ``int`` so consumers don't need to know or expect a 37 | special class when they access ``replay.game_version``. For instance, to 38 | get the numeric value of the game version, they would have to do 39 | ``replay.game_version.version`` as opposed to ``replay.game_version`` here. 40 | """ 41 | 42 | def __new__(cls, version, concrete): 43 | ret = int.__new__(GameVersion, version) 44 | ret.concrete = concrete 45 | return ret 46 | 47 | @staticmethod 48 | def from_datetime(datetime, concrete): 49 | """ 50 | Provided as a convenience for converting a :class:`datetime.datetime` 51 | object to a ``GameVersion`` object. 52 | 53 | Parameters 54 | ---------- 55 | datetime: :class:`datetime.datetime` 56 | The datetime to convert to a ``GameVersion`` object. 57 | concrete: bool 58 | Whether this version is concrete (ie, fully accurate) or not (ie, 59 | just an estimate of the replay's actual version). 60 | 61 | Returns 62 | ------- 63 | :class:`~.GameVersion` 64 | The result of converting ``datetime`` to a ``GameVersion``. 65 | """ 66 | version = int(datetime.strftime("%Y%m%d")) 67 | return GameVersion(version, concrete) 68 | 69 | def available(self): 70 | """ 71 | Whether we can provide any information about the osu! version a replay 72 | was played on, whether that is a fully accurate version or just an 73 | estimate of the version. 74 | """ 75 | return self != -1 76 | 77 | 78 | class NoGameVersion(GameVersion): 79 | """ 80 | Used when a :class:`~circleguard.loadables.Replay` has no information about 81 | its version, and cannot even estimate its version. 82 | """ 83 | 84 | def __new__(cls): 85 | return super().__new__(NoGameVersion, -1, None) 86 | -------------------------------------------------------------------------------- /circleguard/hitobjects.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from slider.beatmap import ( 3 | Circle as SliderCircle, 4 | Slider as SliderSlider, 5 | Spinner as SliderSpinner, 6 | ) 7 | from slider.mod import circle_radius 8 | 9 | from circleguard.mod import Mod 10 | 11 | # We define our own hitobjects as the slider library's hitobjects have too many 12 | # attributes and methods we don't care about, and they also lock position 13 | # behind an extra attribute access (``hitobj.position.x``` vs ``hitobj.x``) 14 | # which I'm not a fan of. 15 | # Another necessary change is our hitobjects are "replay/map aware", which means 16 | # they know how large they are (or potentially how difficult they are to hit 17 | # as a result of OD if that is necessary in the future) and where they are (for 18 | # HR) because we know with what mods and on what map the hitobject was played 19 | # with. 20 | 21 | 22 | class Hitobject: 23 | """ 24 | A Hitobject in osu! gameplay, with a time and a position. 25 | """ 26 | 27 | def __init__(self, time, xy): 28 | # TODO remove ``t`` in core 6.0.0, ``time`` should be preferred 29 | self.t = time 30 | self.time = time 31 | self.xy = xy 32 | self.x = xy[0] 33 | self.y = xy[1] 34 | 35 | @classmethod 36 | def from_slider_hitobj(cls, hitobj, replay, beatmap, already_converted=False): 37 | """ 38 | Instantiates a circleguard hitobject from a 39 | :class:`slider.beatmap.HitObject`, a 40 | :class:`circleguard.loadables.Replay`, that the hitobject was hit on, 41 | and a :class:`slider.beatmap.Beatmap` that the hitobject is found in. 42 | 43 | The `already_converted` parameter is only to work around 44 | https://github.com/llllllllll/slider/issues/80 and will be removed when 45 | it is fixed. 46 | """ 47 | easy = Mod.EZ in replay.mods 48 | hard_rock = Mod.HR in replay.mods 49 | CS = beatmap.cs(easy=easy, hard_rock=hard_rock) 50 | 51 | # Convert to ms. 52 | t = hitobj.time.total_seconds() * 1000 53 | # Due to floating point errors, ``t`` could actually be something 54 | # like ``129824.99999999999`` or ``128705.00000000001``, so round to the 55 | # nearest int. 56 | t = int(round(t)) 57 | 58 | if hard_rock and not already_converted: 59 | hitobj = hitobj.hard_rock 60 | 61 | xy = [hitobj.position.x, hitobj.position.y] 62 | xy = np.array(xy) 63 | 64 | radius = circle_radius(CS) 65 | 66 | if isinstance(hitobj, SliderCircle): 67 | return Circle(t, xy, radius) 68 | if isinstance(hitobj, SliderSlider): 69 | return Slider(t, xy, radius) 70 | if isinstance(hitobj, SliderSpinner): 71 | return Spinner(t, xy) 72 | 73 | def __eq__(self, other): 74 | return self.time == other.time and self.xy == other.xy 75 | 76 | def __hash__(self): 77 | return hash((self.time, self.xy)) 78 | 79 | 80 | class Circle(Hitobject): 81 | """ 82 | A circle in osu! gameplay, with a time, position, and radius. 83 | """ 84 | 85 | def __init__(self, time, xy, radius): 86 | super().__init__(time, xy) 87 | self.radius = radius 88 | 89 | def __eq__(self, other): 90 | return ( 91 | self.time == other.time 92 | and self.xy == other.xy 93 | and self.radius == other.radius 94 | ) 95 | 96 | def __hash__(self): 97 | return hash((self.time, self.xy, self.radius)) 98 | 99 | 100 | class Slider(Hitobject): 101 | """ 102 | A slider in osu! gameplay, with a time, position, and radius. 103 | """ 104 | 105 | def __init__(self, time, xy, radius): 106 | super().__init__(time, xy) 107 | self.radius = radius 108 | 109 | def __eq__(self, other): 110 | return ( 111 | self.time == other.time 112 | and self.xy == other.xy 113 | and self.radius == other.radius 114 | ) 115 | 116 | def __hash__(self): 117 | return hash((self.time, self.xy, self.radius)) 118 | 119 | 120 | class Spinner(Hitobject): 121 | """ 122 | A spinner in osu! gameplay, with a time and position. 123 | """ 124 | 125 | def __init__(self, time, xy): 126 | super().__init__(time, xy) 127 | -------------------------------------------------------------------------------- /circleguard/map_info.py: -------------------------------------------------------------------------------- 1 | # TODO: remove in core 6.0.0, in favor of ``Replay#map_available`` (and 2 | # possibly other mechanisms). 3 | class MapInfo: 4 | """ 5 | Represents the information necessary to load a beatmap. 6 | 7 | Notes 8 | ----- 9 | If multiple ways to load a beatmap are known, all ways should be provided 10 | so consumers can choose the order of ways to load the beatmap. 11 | 12 | If a way to load a beatmap is *not* available, it should be left as 13 | ``None``. 14 | """ 15 | 16 | def __init__(self, *, map_id=None, path=None): 17 | self.map_id = map_id 18 | self.path = path 19 | 20 | def available(self): 21 | """ 22 | Whether this beatmap can be loaded with the information we have or not. 23 | """ 24 | return bool(self.map_id) or bool(self.path) 25 | -------------------------------------------------------------------------------- /circleguard/mod.py: -------------------------------------------------------------------------------- 1 | # this file is left as an alias so that we can pretend the Mod class comes from 2 | # circlecore, even though we're really using ossapi's Mod class. The Mod class 3 | # used to live in circlecore so consumers may have imported it directly, so 4 | # this linkage needs to exist at least until core 6.0.0. After that we can 5 | # reassess whether it makes sense to leave this or convert our mod imports to 6 | # import from ossapi instead. I think we will want to convert them, but a 7 | # problem for future me. 8 | from ossapi.mod import Mod, ModCombination # noqa: F401 9 | -------------------------------------------------------------------------------- /circleguard/postgres.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | import wtc 4 | from ossapi import OssapiV1 5 | 6 | try: 7 | import psycopg2 8 | except ImportError: 9 | raise ImportError("psycopg2 must be installed to use PostgresLoader") 10 | 11 | from circleguard.circleguard import Circleguard 12 | from circleguard.loader import Loader 13 | from circleguard.utils import TRACE 14 | 15 | 16 | class PostgresCircleguard(Circleguard): 17 | """ 18 | A postgres variant of the default sqlite-backed circleguard. 19 | """ 20 | 21 | def __init__( 22 | self, 23 | key, 24 | db_username, 25 | db_password, 26 | db_host, 27 | db_port, 28 | db_name, 29 | write_to_cache=True, 30 | slider_dir=None, 31 | ): 32 | loader = PostgresLoader( 33 | key, db_username, db_password, db_host, db_port, db_name, write_to_cache 34 | ) 35 | super().__init__(key, loader=loader, slider_dir=slider_dir) 36 | 37 | 38 | class PostgresLoader(Loader): 39 | """ 40 | A postgres variant of the default sqlite-backed loader. 41 | """ 42 | 43 | def __init__( 44 | self, 45 | key, 46 | db_username, 47 | db_password, 48 | db_host, 49 | db_port, 50 | db_name, 51 | write_to_cache=True, 52 | ): 53 | self.api = OssapiV1(key) 54 | self.log = logging.getLogger(__name__) 55 | 56 | self._conn = None 57 | self._cursor = None 58 | self.write_to_cache = write_to_cache 59 | self.read_from_cache = True 60 | 61 | self._conn = psycopg2.connect( 62 | user=db_username, 63 | password=db_password, 64 | host=db_host, 65 | port=db_port, 66 | database=db_name, 67 | ) 68 | self._cursor = self._conn.cursor() 69 | 70 | def _check_cache(self, replay_info): 71 | """ 72 | Checks the cache for a replay matching ``replay_info``. 73 | 74 | Parameters 75 | ---------- 76 | replay_info: :class:`~circleguard.loader.ReplayInfo` 77 | The replay info to search for a matching replay with. 78 | 79 | Returns 80 | ------- 81 | str or None 82 | The replay data in decompressed lzma form if the cache contains the 83 | replay, or None if not. 84 | """ 85 | if not self.read_from_cache: 86 | return None 87 | 88 | replay_id = replay_info.replay_id 89 | 90 | self.log.log(TRACE, "Checking cache for replay info %s", replay_info) 91 | self._cursor.execute( 92 | "SELECT replay_data FROM replays WHERE " "replay_id= %s", [replay_id] 93 | ) 94 | result = self._cursor.fetchone() 95 | if result: 96 | self.log.debug("Loading replay for replay info %s from cache", replay_info) 97 | return wtc.decompress(result[0], decompressed_lzma=True) 98 | self.log.log(TRACE, "No replay found in cache") 99 | 100 | def _cache(self, lzma_bytes, replay_info): 101 | """ 102 | Compresses and caches the given lzma_bytes to the database, linking it 103 | to the given replay_info. If an entry with the given replay info already 104 | exists, it is overwritten. 105 | 106 | Parameters 107 | ---------- 108 | lzma_bytes: str 109 | The lzma stream to compress and insert into the db. 110 | replay_info: :class:`~circleguard.loader.ReplayInfo` 111 | The ReplayInfo object representing this replay. 112 | """ 113 | if not self.write_to_cache: 114 | return 115 | 116 | compressed_bytes = wtc.compress(lzma_bytes) 117 | beatmap_id = replay_info.beatmap_id 118 | user_id = replay_info.user_id 119 | mods = replay_info.mods.value 120 | replay_id = replay_info.replay_id 121 | 122 | self.log.log(TRACE, "Writing compressed lzma to db") 123 | self._cursor.execute( 124 | "INSERT INTO replays VALUES(%s, %s, %s, %s, %s)", 125 | [replay_id, beatmap_id, user_id, compressed_bytes, mods], 126 | ) 127 | self._conn.commit() 128 | -------------------------------------------------------------------------------- /circleguard/span.py: -------------------------------------------------------------------------------- 1 | class Span(set): 2 | """ 3 | A set of numbers represented by a string, which can include ranges or 4 | single numbers, separated by a comma. 5 | 6 | Notes 7 | ----- 8 | Spans can only range from 1 to 100 inclusive. 9 | 10 | Examples 11 | -------- 12 | >>> Span("1-3,6,2-4") 13 | {1, 2, 3, 4, 6} 14 | """ 15 | 16 | def __init__(self, data): 17 | # allow passing as either span or string 18 | if not isinstance(data, (Span, str)): 19 | raise ValueError( 20 | f"Expected data to be a str or Span, got type " f"{type(data)}." 21 | ) 22 | if isinstance(data, Span): 23 | # python allows initializing a set with a set 24 | super().__init__(data) 25 | elif isinstance(data, str): 26 | span_set = self._to_set(data) 27 | super().__init__(span_set) 28 | 29 | if max(self) > 100: 30 | raise ValueError( 31 | "Spans can only range from 1 to 100 inclusive. " 32 | f"The largest element passed was {max(self)}" 33 | ) 34 | 35 | def _to_set(self, span): 36 | """ 37 | Converts a span to the set of numbers covered by that span. 38 | 39 | Parameters 40 | ---------- 41 | span: str 42 | The span of numbers to convert to a set. A number may occur more 43 | than once - whether explicitly or in a range - in the span, but 44 | will only occur once in the returned set. 45 | 46 | Returns 47 | ------- 48 | set 49 | The set of numbers described by the ``span``. 50 | 51 | Examples 52 | -------- 53 | >>> _to_set("1-3,6,2-4") 54 | {1, 2, 3, 4, 6} 55 | """ 56 | ret = set() 57 | for s in span.split(","): 58 | if "-" in s: 59 | p = s.split("-") 60 | l = list(range(int(p[0]), int(p[1]) + 1)) 61 | ret.update(l) 62 | else: 63 | ret.add(int(s)) 64 | return ret 65 | -------------------------------------------------------------------------------- /circleguard/version.py: -------------------------------------------------------------------------------- 1 | __version__ = "5.4.3" 2 | -------------------------------------------------------------------------------- /docs/appendix.rst: -------------------------------------------------------------------------------- 1 | .. 2 | Can't use `..automodule:: circleguard` or else 3 | :class:`~circleguard.cacher.Cacher` won't work, only 4 | :class:`circleguard.Cacher` will. We want the extra level of specificity. 5 | 6 | Appendix 7 | ======== 8 | 9 | Circleguard 10 | ----------- 11 | .. automodule:: circleguard.circleguard 12 | :members: 13 | 14 | Game Version 15 | ------------ 16 | .. automodule:: circleguard.game_version 17 | :members: 18 | 19 | Hit Objects 20 | ----------- 21 | .. automodule:: circleguard.hitobjects 22 | :members: 23 | 24 | Investigations 25 | -------------- 26 | .. automodule:: circleguard.investigations 27 | :members: 28 | 29 | Judgment 30 | -------- 31 | .. automodule:: circleguard.judgment 32 | :members: 33 | 34 | Loadables 35 | --------- 36 | .. automodule:: circleguard.loadables 37 | :members: 38 | 39 | Loader 40 | ------ 41 | .. automodule:: circleguard.loader 42 | :members: 43 | 44 | Map Info 45 | -------- 46 | .. automodule:: circleguard.map_info 47 | :members: 48 | 49 | Mod 50 | ------ 51 | .. automodule:: circleguard.mod 52 | :members: 53 | 54 | Span 55 | ---- 56 | .. automodule:: circleguard.span 57 | :members: 58 | 59 | Utils 60 | ----- 61 | .. automodule:: circleguard.utils 62 | :members: 63 | -------------------------------------------------------------------------------- /docs/caching.rst: -------------------------------------------------------------------------------- 1 | Caching 2 | ======= 3 | 4 | Because the replay_data api endpoint is heavily ratelimited (10/min), we provide replay caching in |Circleguard|. 5 | You can pass a ``db_path`` to |Circleguard| and any replay it loads will be cached there. This cache lives in an 6 | (sqlite) ``.db`` file and will persist across runs. 7 | 8 | .. code-block:: python 9 | 10 | cg = Circleguard("key", db_path="./cg_cache.db") 11 | 12 | If the given path does not exist, circleguard will create fresh a db file there and use it. If the path is a 13 | pre-existing databse file created by circleguard, that database will be used. Any other file existing at the path 14 | will result in an error. 15 | 16 | When loading a replay, we first check if the replay exists in the database, and load it from there if so. If not, 17 | we load it from the api (or local file in the case of |ReplayPath|), compress the replays using 18 | `WTC compression `_, and store in the database. 19 | 20 | .. code-block:: python 21 | 22 | r1 = ReplayMap(221777, 2757689) 23 | r2 = ReplayMap(221777, 2757689) 24 | print("loading from api") 25 | cg.load(r1) # replay gets loaded from the api and cached 26 | print("loading from cache") 27 | cg.load(r2) # loaded from our cache, not the api 28 | # we can do this as many times as we want - we won't ever 29 | # hit the api ratelimit since we're loading from the cache 30 | for i in range(0, 5): 31 | print("loading from cache") 32 | r = ReplayMap(221777, 2757689) 33 | cg.load(r) 34 | 35 | .. warning:: 36 | 37 | WTC compression is lossy, so replays loaded from the api and loaded from cache will be slightly different. 38 | The loss is on the order of 0.1 precision in the xy coordinate of frames, which is not enough to impact 39 | the average use case, but could make a difference in some scenarios. 40 | 41 | If you want to use a cache in "read only" mode (use previously cached replays, but don't cache new replays), pass 42 | ``cache=False`` to |Circleguard|: 43 | 44 | .. code-block:: python 45 | 46 | cg = Circleguard("key", db_path="./db.db", cache=False) 47 | 48 | slider_dir 49 | ~~~~~~~~~~ 50 | 51 | We use `slider `_ to manage the download and parsing of beatmaps. We download beatmaps 52 | when certain functions are called, such as |cg.hits|, that require the beatmap the replay was played on to work. 53 | 54 | If ``slider_dir`` is passed, downloaded beatmaps will be cached to that directory (which must exist). You can use the same 55 | directory the |Circleguard| cache db file is in if you'd like. 56 | 57 | .. code-block:: python 58 | 59 | cg = Circleguard("key", db_path="./dbs/db.db", slider_dir="./dbs/") 60 | r = ReplayMap(221777, 2757689) 61 | cg.hits(r) # downloads https://osu.ppy.sh/b/221777 and caches it in slider_dir 62 | 63 | If ``slider_dir`` is not passed, we still use slider to download beatmaps, but cache them to a newly created temporary directory 64 | instead. This means beatmaps will be cached with respect to a single |Circleguard| object, but will not persist across runs. 65 | 66 | Loadables 67 | ~~~~~~~~~ 68 | 69 | A |Replay| or |ReplayContainer| also has a ``cache`` parameter, which determines if it should be cached when loaded. 70 | 71 | .. note:: 72 | 73 | The ``cache`` parameter has no effect if |Circleguard| was not passed a ``db_path`` or if |Circleguard| was 74 | instantiated with ``cache=False``. 75 | 76 | This parameter is ``True`` by default, but by passing ``False`` we can selectively force certain loadables to not be cached 77 | when they're loaded: 78 | 79 | .. code-block:: python 80 | 81 | cg = Circleguard("key", db_path="./db.db") 82 | r1 = ReplayMap(221777, 2757689, cache=True) 83 | r2 = ReplayMap(1524183, 12092800, cache=False) 84 | cg.load(r1) # gets cached 85 | cg.load(r2) # does not get cached 86 | 87 | For a |ReplayContainer|, ``cache`` cascades to its |Replay|\s: 88 | 89 | .. code-block:: python 90 | 91 | cg = Circleguard("key", db_path="./db.db") 92 | m = Map(221777, span="1-2", cache=False) 93 | cg.load(m) # neither replay in `m` cached 94 | -------------------------------------------------------------------------------- /docs/contributing.rst: -------------------------------------------------------------------------------- 1 | Contributing 2 | ============ 3 | 4 | If you'd like to contribute to circleguard, pull requests are always welcome! 5 | 6 | I do a decent job of keeping track of issues through the `circlecore github `_; 7 | find one that interests you and give it a shot. You can also always ask what you can help with on 8 | `the discord `_. I don't bite, I promise :) 9 | -------------------------------------------------------------------------------- /docs/foreword.rst: -------------------------------------------------------------------------------- 1 | Foreword 2 | ======== 3 | 4 | The following pages serve as an introduction to circleguard. Although they would ideally be exhaustive, they are likely not. 5 | The source code is rather well documented, and you should refer to it whenever necessary. You can also browse the documentation 6 | for all classes, methods, etc by visiting the :doc:`../appendix`. 7 | 8 | You are also welcome to ask questions on the `discord `_. 9 | 10 | To aid in readability, ``import`` statements have been ommitted from all example code blocks. Please supply your own. 11 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | Circlecore 2 | ========== 3 | 4 | Circlecore is a utilities library for osu!. Features include: 5 | 6 | * Unstable Rate calculation 7 | * Judgments calculation (classifying all hitobjects into misses, hit300s, hit100s, hit50s, or sliderbreaks) 8 | * Similarity calculation between two replays, for replay stealing detection 9 | * Frametime calculation, for timewarp detection 10 | * Jerky, suspicious movement detection (called Snaps) 11 | 12 | Circlecore is used by `Circleguard `__, a replay analysis tool. 13 | 14 | Circlecore is developed and maintained by: 15 | 16 | * `tybug `__ 17 | * `samuelhklumpers `__ 18 | 19 | Installation 20 | ------------ 21 | 22 | Circlecore can be installed from pip: 23 | 24 | .. code-block:: console 25 | 26 | $ pip install circleguard 27 | 28 | .. note:: 29 | 30 | This page refers to the project as ``circlecore`` to differentiate it from our organization 31 | `Circleguard `__ and our gui application Circleguard_. However, ``circlecore`` is installed 32 | from pypi with the name ``circleguard``, and is imported as such in python (``import circleguard``) We will also refer to it 33 | as ``circleguard`` for the remainder of the documentation. 34 | 35 | Links 36 | ----- 37 | 38 | | Github: https://github.com/circleguard/circlecore 39 | | Documentation: https://circleguard.github.io/circlecore/ 40 | | Discord: https://discord.gg/VNnkTjm 41 | 42 | 43 | .. 44 | couple notes about these toctrees - the first toctree is so our sidebar has 45 | a link back to the index page. the ``self`` keyword comes with its share of 46 | issues (https://github.com/sphinx-doc/sphinx/issues/2103), but none that matter 47 | that much to us. It's better than using ``index`` which works but generates 48 | many warnings when building. 49 | 50 | Hidden toctrees appear on the sidebar but not as text on the table of contents 51 | displayed on this page. 52 | 53 | .. toctree:: 54 | :hidden: 55 | 56 | self 57 | 58 | .. toctree:: 59 | :maxdepth: 2 60 | :caption: Tutorial 61 | 62 | foreword 63 | representing-replays 64 | using-circleguard 65 | replay-containers 66 | loading 67 | caching 68 | advanced-usage 69 | 70 | .. toctree:: 71 | :caption: Contributing 72 | 73 | contributing 74 | 75 | .. toctree:: 76 | :caption: Appendix 77 | :hidden: 78 | 79 | appendix 80 | -------------------------------------------------------------------------------- /docs/replay-containers.rst: -------------------------------------------------------------------------------- 1 | Replay Containers 2 | ================= 3 | 4 | Whereas a |Replay| represents a single replay, a |ReplayContainer| represents a set of replays. This is useful for if you want to 5 | operate over the entire leaderboard of a map, a user's top plays, etc. 6 | 7 | Map 8 | --- 9 | 10 | A |Map| represents a beatmap's top plays (ie leaderboard), as seen on the osu! website. 11 | 12 | When instantiating a |Map|, you must specify which scores you want from the map via the ``span`` argument: 13 | 14 | .. code-block:: python 15 | 16 | # top 3 replays on the map 17 | m1 = Map(221777, span="1-3") 18 | 19 | # first, second, and 85th replays on the map 20 | m2 = Map(221777, span="1-2, 85") 21 | 22 | # 10th, 11th, 20th, and 25th replays on the map 23 | m3 = Map(221777, spn="10, 11, 20, 25") 24 | 25 | We can also select replays set with a certain mod combination: 26 | 27 | .. code-block:: python 28 | 29 | # top 2 HR scores (this means ONLY HR, not "HR plus any other mod") 30 | m1 = Map(221777, span="1-2", mods=Mod.HR) 31 | 32 | # third best HDHR score 33 | m2 = Map(221777, span="3", mods=Mod.HDHR) 34 | 35 | User 36 | ---- 37 | 38 | A |User| represents the top plays of a user, as seen on their profile. 39 | 40 | Similar to a |Map|, you must specify which scores of the user you want, and you can optionally 41 | specify a mod combination to receive scores set with only that mod: 42 | 43 | .. code-block:: python 44 | 45 | # top 2 scores of the user 46 | u = User(2757689, span="1-2") 47 | 48 | # second and third best scores with only HD 49 | u = User(2757689, span="2-3", mods=Mod.HD) 50 | 51 | Map User 52 | -------- 53 | 54 | A |MapUser| represents all of a user's plays on a beatmap. This is often only one score if the user has only ever 55 | played the map with a single mod combination, but could be more depending on how many times they've played the map 56 | with different mods. 57 | 58 | Unlike |Map| and |User|, you are not required to specify which scores you would like via ``span``. |MapUser| assumes you want all 59 | of the scores the user has set on the beatmap: 60 | 61 | .. code-block:: python 62 | 63 | # all replays by cookiezi on everything will freeze 64 | mu = MapUser(555797, 124493) 65 | 66 | You can still optionally specify a ``span`` argument if you would like: 67 | 68 | .. code-block:: python 69 | 70 | # only cookiezi's second best replay on everything will freeze 71 | mu = MapUser(555797, 124493, span="2") 72 | 73 | Replay Dir 74 | ---------- 75 | 76 | A |ReplayDir| represents replays stored locally in a folder. This replay container creates |ReplayPath| objects. Any file ending 77 | in ``.osr`` is recognized as a replay file. Nested directories are currently not supported. 78 | 79 | .. code-block:: python 80 | 81 | # all replays in `/Users/tybug/Desktop/replays` 82 | r_dir = ReplayDir("/Users/tybug/Desktop/replays") 83 | 84 | 85 | Accessing Replays 86 | ----------------- 87 | 88 | A |ReplayContainer| is iterable, so you can retrieve |Replay| instances contained by the |ReplayContainer| in the usual ways. 89 | 90 | Index access: 91 | 92 | .. code-block:: python 93 | 94 | m = Map(221777, "1-2") 95 | cg.load_info(m) 96 | print(m[0]) 97 | 98 | Iterating: 99 | 100 | .. code-block:: python 101 | 102 | for replay in m: 103 | print(replay) 104 | 105 | Creating a list from the |ReplayContainer| (or alternatively calling |all_replays|): 106 | 107 | .. code-block:: python 108 | 109 | print(list(m)) 110 | print(m.all_replays()) 111 | 112 | We've used a method above, |cg.load_info|, that we haven't introduced yet. We will cover this method on the very next page 113 | (under :ref:`info-loading`). 114 | -------------------------------------------------------------------------------- /docs/representing-replays.rst: -------------------------------------------------------------------------------- 1 | Representing Replays 2 | ==================== 3 | 4 | Before you can use circleguard to calculate statistics of replays or do other operations on replays, you need 5 | to know how to represent replays. 6 | 7 | All replay classes you can instantiate are subclasses of |Replay|. We cover each class below. 8 | 9 | Replay Map 10 | ---------- 11 | 12 | A |ReplayMap| represents a replay by a user on a map. To get the highest scoring replay by the user 13 | ``2757689`` on the map ``221777``: 14 | 15 | .. code-block:: python 16 | 17 | replay = ReplayMap(221777, 2757689) 18 | 19 | To restrict this to a replay with a certain mod combination, use the ``mods`` argument. To get specifically the ``HDHR`` by 20 | the same user as above: 21 | 22 | .. code-block:: python 23 | 24 | replay = ReplayMap(221777, 2757689, mods=Mod.HD + Mod.HR) 25 | 26 | 27 | Replay Path 28 | ----------- 29 | 30 | A |ReplayPath| represents a replay stored locally in an ``osr`` file. To get the replay stored in the file 31 | at ``/path/to/your/replay.osr``: 32 | 33 | .. code-block:: python 34 | 35 | replay = ReplayPath("/path/to/your/replay.osr") 36 | 37 | 38 | Replay ID 39 | --------- 40 | 41 | A |ReplayID| represents a replay that was submitted online and is represented by a unique replay id. 42 | 43 | .. code-block:: python 44 | 45 | r = ReplayID(2177560145) # cookiezi on freedom dive 46 | 47 | .. warning:: 48 | 49 | We can only retrieve the replay data, and nothing else, for a |ReplayID| due to limitations with the api. 50 | This means we do not know with what mods or on what map a |ReplayID| was played on. This limits 51 | what kinds of functions can be called on it. For instance, |cg.ur| and |cg.hits| both require 52 | knowing what beatmap the replay was played on, and will reject a |ReplayID|. 53 | 54 | 55 | Replay String 56 | ------------- 57 | 58 | A |ReplayString| represents a replay file which has been read into a string object. This replay class is rarely used. 59 | 60 | .. code-block:: python 61 | 62 | replay_data_str = open("/path/to/your/replay.osr", "rb").read() 63 | replay = ReplayString(replay_data_str) 64 | -------------------------------------------------------------------------------- /readme_resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/readme_resources/logo.png -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import re 2 | from distutils.core import setup 3 | 4 | from setuptools import find_packages 5 | 6 | with open("README.md") as readme: 7 | long_description = readme.read() 8 | 9 | # https://stackoverflow.com/a/7071358 10 | VERSION = "Unknown" 11 | VERSION_RE = r"^__version__ = ['\"]([^'\"]*)['\"]" 12 | 13 | with open("circleguard/version.py") as f: 14 | match = re.search(VERSION_RE, f.read()) 15 | if match: 16 | VERSION = match.group(1) 17 | else: 18 | raise RuntimeError("Unable to find version string in circleguard/version.py") 19 | 20 | setup( 21 | name="circleguard", 22 | version=VERSION, 23 | description="A utilities library for osu!. Provides support for parsing " 24 | "replays from a file or from the api, as well as support for unstable " 25 | "rate, hits, similarity, and frametime calculations.", 26 | long_description=long_description, 27 | long_description_content_type="text/markdown", 28 | classifiers=[ 29 | "Programming Language :: Python :: 3", 30 | "Intended Audience :: Developers", 31 | "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", 32 | "Operating System :: OS Independent", 33 | ], 34 | keywords=["osu!, python, cheat-detection, replay-stealing, remodding"], 35 | author="Liam DeVoe", 36 | author_email="orionldevoe@gmail.com", 37 | url="https://github.com/circleguard/circlecore", 38 | download_url="https://github.com/circleguard/circlecore/tarball/v" + VERSION, 39 | packages=find_packages(), 40 | install_requires=[ 41 | "osrparse~=6.0", 42 | "ossapi>=3.0.0", 43 | "wtc==1.2.1", 44 | "numpy", 45 | "requests", 46 | "slider>=0.5.1", 47 | "scipy", 48 | ], 49 | extras_require={"graphing": ["matplotlib"]}, 50 | ) 51 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/__init__.py -------------------------------------------------------------------------------- /tests/benchmark_hits.py: -------------------------------------------------------------------------------- 1 | import cProfile 2 | from pstats import Stats 3 | 4 | from utils import KEY, RES 5 | 6 | from circleguard import Circleguard, ReplayPath 7 | 8 | # TODO not sure how useful this benchmark is tbh, rework or remove 9 | 10 | 11 | def benchmark_hits_ur(statistic): 12 | """ 13 | Parameters 14 | ---------- 15 | statistic: {"hits", "ur", "both"} 16 | What statistics to calculate 17 | """ 18 | profiler = cProfile.Profile() 19 | 20 | num_calls = 20 21 | 22 | def benchmark_func(): 23 | cg = Circleguard(KEY) 24 | replay = ReplayPath(RES / "legit" / "legit-1.osr") 25 | if statistic in ["hits", "both"]: 26 | cg.hits(replay) 27 | if statistic in ["both", "ur"]: 28 | cg.ur(replay) 29 | 30 | profiler.enable() 31 | for _ in range(num_calls): 32 | benchmark_func() 33 | 34 | profiler.disable() 35 | 36 | stats = Stats(profiler) 37 | print( 38 | f'Average time per call with statistic "{statistic}": {stats.total_tt / num_calls:3f} ({num_calls} calls)' 39 | ) 40 | 41 | 42 | if __name__ == "__main__": 43 | benchmark_hits_ur(statistic="hits") 44 | benchmark_hits_ur(statistic="ur") 45 | benchmark_hits_ur(statistic="both") 46 | -------------------------------------------------------------------------------- /tests/benchmarks.py: -------------------------------------------------------------------------------- 1 | # Benchmarks for circleguard. These are not strictly "tests" and will not be run 2 | # by unittest, but it felt appropriate to place them in the tests folder. 3 | 4 | import cProfile 5 | from pstats import Stats 6 | 7 | from utils import KEY, RES 8 | 9 | from circleguard import Circleguard, ReplayPath 10 | 11 | cg = Circleguard(KEY) 12 | 13 | replay1 = ReplayPath(RES / "legit" / "legit-1.osr") 14 | cg.load(replay1) 15 | 16 | 17 | def benchmark_ur(with_cache): 18 | """ 19 | Parameters 20 | ---------- 21 | with_cache: {"none", "replay", "beatmap", "both"} 22 | What caches to use when calculating the ur of the replay. If "replay", 23 | a replay that has already been loaded is used. If "beatmap", the beatmap 24 | is downloaded on the first call, and is cached thereafter. If "both", 25 | both of the above caches apply. 26 | """ 27 | profiler = cProfile.Profile() 28 | 29 | if with_cache == "none": 30 | num_calls = 10 31 | 32 | def benchmark_func(): 33 | # creating a new cg object is a hacky way to force a new slider 34 | # cache 35 | cg = Circleguard(KEY) 36 | replay = ReplayPath(RES / "legit" / "legit-1.osr") 37 | cg.ur(replay) 38 | 39 | elif with_cache == "replay": 40 | num_calls = 10 41 | 42 | def benchmark_func(): 43 | cg = Circleguard(KEY) 44 | cg.ur(replay1) 45 | 46 | elif with_cache == "beatmap": 47 | num_calls = 100 48 | 49 | def benchmark_func(): 50 | replay = ReplayPath(RES / "legit" / "legit-1.osr") 51 | cg.ur(replay) 52 | 53 | elif with_cache == "both": 54 | num_calls = 100 55 | 56 | def benchmark_func(): 57 | cg.ur(replay1) 58 | 59 | profiler.enable() 60 | for _ in range(num_calls): 61 | benchmark_func() 62 | 63 | profiler.disable() 64 | 65 | stats = Stats(profiler) 66 | print( 67 | f'Average time per call with cache "{with_cache}": {stats.total_tt / num_calls:3f} ({num_calls} calls)' 68 | ) 69 | 70 | 71 | if __name__ == "__main__": 72 | benchmark_ur(with_cache="none") 73 | benchmark_ur(with_cache="beatmap") 74 | benchmark_ur(with_cache="replay") 75 | benchmark_ur(with_cache="both") 76 | -------------------------------------------------------------------------------- /tests/resources/auto/auto-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/auto-1.osr -------------------------------------------------------------------------------- /tests/resources/auto/auto-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/auto-2.osr -------------------------------------------------------------------------------- /tests/resources/auto/auto-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/auto-3.osr -------------------------------------------------------------------------------- /tests/resources/auto/auto-4.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/auto-4.osr -------------------------------------------------------------------------------- /tests/resources/auto/auto-5.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/auto-5.osr -------------------------------------------------------------------------------- /tests/resources/auto/cursordance-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/cursordance-1.osr -------------------------------------------------------------------------------- /tests/resources/auto/cursordance-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/cursordance-2.osr -------------------------------------------------------------------------------- /tests/resources/auto/cursordance-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/cursordance-3.osr -------------------------------------------------------------------------------- /tests/resources/auto/cursordance-4.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/cursordance-4.osr -------------------------------------------------------------------------------- /tests/resources/auto/cursordance-5.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/cursordance-5.osr -------------------------------------------------------------------------------- /tests/resources/auto/cursordance-6.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/cursordance-6.osr -------------------------------------------------------------------------------- /tests/resources/auto/cursordance-7.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/cursordance-7.osr -------------------------------------------------------------------------------- /tests/resources/auto/pilot-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/pilot-1.osr -------------------------------------------------------------------------------- /tests/resources/auto/pilot-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/pilot-2.osr -------------------------------------------------------------------------------- /tests/resources/auto/pilot-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/auto/pilot-3.osr -------------------------------------------------------------------------------- /tests/resources/corrected_replay1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/corrected_replay1.osr -------------------------------------------------------------------------------- /tests/resources/example_replay.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/example_replay.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_1115068_3537832838.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_1115068_3537832838.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_1649060_2653254255.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_1649060_2653254255.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_1649528_2728075053.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_1649528_2728075053.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_1681124_2636614839.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_1681124_2636614839.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_2058788_3072716370.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_2058788_3072716370.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_255700_1740153425.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_255700_1740153425.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_276366_1720366862.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_276366_1720366862.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_332962_1722917912.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_332962_1722917912.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_338544_1718949811.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_338544_1718949811.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_838487_3513254185.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_838487_3513254185.osr -------------------------------------------------------------------------------- /tests/resources/legit/2_histogram_peaks/replay-osu_988793_2526343524.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/2_histogram_peaks/replay-osu_988793_2526343524.osr -------------------------------------------------------------------------------- /tests/resources/legit/3_histogram_peaks/Malai_-_Big_Time_Rush_-_Worldwide_Paris_London_Tokyo_2021-05-29_Osu-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/3_histogram_peaks/Malai_-_Big_Time_Rush_-_Worldwide_Paris_London_Tokyo_2021-05-29_Osu-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/3_histogram_peaks/Malai_-_Big_Time_Rush_-_Worldwide_Paris_London_Tokyo_2021-05-29_Osu.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/3_histogram_peaks/Malai_-_Big_Time_Rush_-_Worldwide_Paris_London_Tokyo_2021-05-29_Osu.osr -------------------------------------------------------------------------------- /tests/resources/legit/3_histogram_peaks/Malai_-_Travis_Scott_-_SICKO_MODE_feat._Drake_Insane_2021-05-29_Osu.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/3_histogram_peaks/Malai_-_Travis_Scott_-_SICKO_MODE_feat._Drake_Insane_2021-05-29_Osu.osr -------------------------------------------------------------------------------- /tests/resources/legit/3_histogram_peaks/replay-osu_2520609_3690741716.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/3_histogram_peaks/replay-osu_2520609_3690741716.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-10.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-10.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-11.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-11.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-12.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-12.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-3.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-4.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-4.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-5.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-5.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-6.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-6.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-7.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-7.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-8.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-8.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit-9.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit-9.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_100fps_30s_map_no_keypresses_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_100fps_30s_map_no_keypresses_nm.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_100fps_30s_map_with_keypresses_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_100fps_30s_map_with_keypresses_nm.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_100fps_98s_map_no_keypresses_nm-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_100fps_98s_map_no_keypresses_nm-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_100fps_98s_map_no_keypresses_nm-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_100fps_98s_map_no_keypresses_nm-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_120fps_dt-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_120fps_dt-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_120fps_dt-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_120fps_dt-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_120fps_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_120fps_nm.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_144fps-nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_144fps-nm.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_144fps_dt.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_144fps_dt.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_144fps_nmrx.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_144fps_nmrx.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_1peak_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_1peak_nm.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_1peak_short_frames_from_break_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_1peak_short_frames_from_break_nm.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_288fps_dt.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_288fps_dt.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_2peaks_dtrx.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_2peaks_dtrx.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_2peaks_nm-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_2peaks_nm-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_2peaks_nm-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_2peaks_nm-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_2peaks_short_frames_from_break_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_2peaks_short_frames_from_break_nm.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_3peaks_dt-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_3peaks_dt-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_3peaks_dt-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_3peaks_dt-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_3peaks_dtrx.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_3peaks_dtrx.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_3peaks_nm-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_3peaks_nm-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-10.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-10.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-11.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-11.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-12.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-12.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-13.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-13.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-14.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-14.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-15.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-15.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-3.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-4.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-4.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-5.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-5.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-6.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-6.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-7.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-7.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-8.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-8.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_frametime-9.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_frametime-9.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_lots_of_lag_frames_dt.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_lots_of_lag_frames_dt.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_lots_of_lag_frames_nm-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_lots_of_lag_frames_nm-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_lots_of_lag_frames_nm-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_lots_of_lag_frames_nm-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_lots_of_short_frames_really_messy_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_lots_of_short_frames_really_messy_nm.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_old_replay_dt.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_old_replay_dt.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_old_replay_ht.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_old_replay_ht.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-10.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-10.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-11.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-11.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-12.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-12.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-13.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-13.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-14.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-14.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-15.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-15.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-16.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-16.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-17.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-17.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-18.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-18.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-19.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-19.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-20.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-20.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-21.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-21.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-22.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-22.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-23.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-23.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-24.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-24.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-3.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-4.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-4.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-5.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-5.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-6.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-6.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-7.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-7.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-8.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-8.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_snaps-9.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_snaps-9.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_triangle_shape_really_messy_dt-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_triangle_shape_really_messy_dt-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_triangle_shape_really_messy_dt-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_triangle_shape_really_messy_dt-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_unlimited_fps_dt-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_unlimited_fps_dt-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_unlimited_fps_dt-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_unlimited_fps_dt-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_unlimited_fps_nm-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_unlimited_fps_nm-1.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_unlimited_fps_nm-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_unlimited_fps_nm-2.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_unlimited_fps_nm-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_unlimited_fps_nm-3.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_wide_peak_dt.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_wide_peak_dt.osr -------------------------------------------------------------------------------- /tests/resources/legit/legit_wide_peak_long_map_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/legit_wide_peak_long_map_nm.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_frametime_old/replay-osu_16266_138416739.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_frametime_old/replay-osu_16266_138416739.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_frametime_old/replay-osu_22993_236660902.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_frametime_old/replay-osu_22993_236660902.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_frametime_old/replay-osu_24722_433541214.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_frametime_old/replay-osu_24722_433541214.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_frametime_old/replay-osu_26502_203747354.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_frametime_old/replay-osu_26502_203747354.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_frametime_old/replay-osu_26799_401403603.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_frametime_old/replay-osu_26799_401403603.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_frametime_old/replay-osu_86044_552532194.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_frametime_old/replay-osu_86044_552532194.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_histogram_peak/replay-osu_2261702_3613908998.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_histogram_peak/replay-osu_2261702_3613908998.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_histogram_peak/replay-osu_2397803_3626238208.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_histogram_peak/replay-osu_2397803_3626238208.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_1352234_2953940624.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_1352234_2953940624.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_1352234_3354603437.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_1352234_3354603437.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_16266_756655679.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_16266_756655679.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_16266_815970815.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_16266_815970815.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_1817356_3004221396.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_1817356_3004221396.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_1817356_3396967055.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_1817356_3396967055.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_1871291_3218608210.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_1871291_3218608210.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_1871291_3222258037.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_1871291_3222258037.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_1909836_3099438014.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_1909836_3099438014.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_1909836_3586026443.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_1909836_3586026443.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2505634_3170492636.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2505634_3170492636.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2505634_3301915571.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2505634_3301915571.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2510846_3519733477.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2510846_3519733477.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2510846_3576606916.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2510846_3576606916.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2511210_3293960241.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2511210_3293960241.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2511210_3597195342.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2511210_3597195342.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2513983_3438227958.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2513983_3438227958.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2513983_3531785446.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2513983_3531785446.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2528044_3431786037.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2528044_3431786037.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2528044_3583239446.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2528044_3583239446.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2544530_3381338195.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2544530_3381338195.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2544530_3517917994.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2544530_3517917994.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2635266_3298780630.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2635266_3298780630.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2635266_3302908426.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2635266_3302908426.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2665747_3550690802.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2665747_3550690802.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2665747_3562357907.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2665747_3562357907.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2769504_3439027349.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2769504_3439027349.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_2769504_3509136743.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_2769504_3509136743.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_341_1503979225.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_341_1503979225.osr -------------------------------------------------------------------------------- /tests/resources/legit/low_similarity/replay-osu_341_944992613.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/low_similarity/replay-osu_341_944992613.osr -------------------------------------------------------------------------------- /tests/resources/legit/replay-osu_1049018_3681047610.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/legit/replay-osu_1049018_3681047610.osr -------------------------------------------------------------------------------- /tests/resources/other/empty_replay_data.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/other/empty_replay_data.osr -------------------------------------------------------------------------------- /tests/resources/relax_cheated/blatant/relax_cheated-4.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/relax_cheated/blatant/relax_cheated-4.osr -------------------------------------------------------------------------------- /tests/resources/relax_cheated/blatant/replay-osu_1373950_2900807505.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/relax_cheated/blatant/replay-osu_1373950_2900807505.osr -------------------------------------------------------------------------------- /tests/resources/relax_cheated/blatant/replay-osu_1617643_2750716353.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/relax_cheated/blatant/replay-osu_1617643_2750716353.osr -------------------------------------------------------------------------------- /tests/resources/relax_cheated/relax_cheated-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/relax_cheated/relax_cheated-1.osr -------------------------------------------------------------------------------- /tests/resources/relax_cheated/relax_cheated-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/relax_cheated/relax_cheated-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-1-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-1-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-1-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-1-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-10-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-10-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-10-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-10-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-100-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-100-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-100-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-100-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-101-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-101-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-101-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-101-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-102-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-102-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-102-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-102-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-103-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-103-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-103-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-103-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-104-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-104-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-104-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-104-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-105-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-105-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-105-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-105-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-106-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-106-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-106-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-106-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-107-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-107-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-107-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-107-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-108-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-108-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-108-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-108-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-109-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-109-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-109-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-109-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-11-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-11-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-11-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-11-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-110-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-110-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-110-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-110-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-111-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-111-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-111-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-111-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-112-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-112-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-112-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-112-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-113-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-113-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-113-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-113-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-114-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-114-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-114-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-114-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-115-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-115-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-115-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-115-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-116-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-116-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-116-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-116-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-117-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-117-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-117-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-117-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-118-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-118-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-118-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-118-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-119-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-119-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-119-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-119-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-12-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-12-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-12-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-12-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-120-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-120-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-120-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-120-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-121-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-121-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-121-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-121-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-122-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-122-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-122-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-122-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-123-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-123-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-123-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-123-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-124-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-124-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-124-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-124-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-125-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-125-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-125-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-125-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-126-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-126-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-126-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-126-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-127-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-127-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-127-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-127-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-128-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-128-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-128-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-128-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-129-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-129-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-129-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-129-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-13-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-13-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-13-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-13-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-130-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-130-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-130-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-130-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-131-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-131-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-131-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-131-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-132-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-132-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-132-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-132-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-133-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-133-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-133-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-133-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-134-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-134-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-134-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-134-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-135-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-135-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-135-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-135-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-136-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-136-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-136-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-136-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-137-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-137-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-137-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-137-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-138-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-138-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-138-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-138-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-139-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-139-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-139-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-139-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-14-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-14-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-14-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-14-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-140-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-140-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-140-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-140-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-141-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-141-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-141-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-141-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-142-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-142-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-142-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-142-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-143-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-143-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-143-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-143-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-144-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-144-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-144-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-144-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-145-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-145-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-145-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-145-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-146-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-146-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-146-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-146-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-15-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-15-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-15-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-15-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-16-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-16-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-16-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-16-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-17-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-17-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-17-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-17-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-18-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-18-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-18-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-18-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-19-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-19-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-19-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-19-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-2-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-2-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-2-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-2-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-20-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-20-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-20-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-20-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-21-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-21-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-21-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-21-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-22-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-22-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-22-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-22-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-23-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-23-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-23-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-23-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-24-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-24-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-24-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-24-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-25-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-25-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-25-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-25-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-26-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-26-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-26-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-26-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-27-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-27-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-27-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-27-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-28-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-28-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-28-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-28-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-29-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-29-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-29-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-29-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-3-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-3-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-3-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-3-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-30-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-30-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-30-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-30-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-31-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-31-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-31-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-31-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-32-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-32-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-32-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-32-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-33-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-33-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-33-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-33-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-34-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-34-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-34-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-34-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-35-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-35-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-35-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-35-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-36-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-36-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-36-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-36-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-37-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-37-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-37-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-37-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-38-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-38-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-38-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-38-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-39-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-39-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-39-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-39-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-4-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-4-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-4-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-4-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-40-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-40-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-40-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-40-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-41-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-41-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-41-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-41-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-42-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-42-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-42-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-42-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-43-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-43-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-43-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-43-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-44-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-44-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-44-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-44-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-45-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-45-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-45-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-45-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-46-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-46-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-46-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-46-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-47-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-47-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-47-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-47-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-48-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-48-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-48-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-48-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-49-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-49-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-49-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-49-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-5-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-5-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-5-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-5-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-50-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-50-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-50-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-50-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-51-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-51-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-51-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-51-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-52-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-52-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-52-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-52-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-53-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-53-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-53-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-53-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-54-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-54-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-54-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-54-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-55-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-55-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-55-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-55-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-56-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-56-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-56-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-56-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-57-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-57-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-57-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-57-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-58-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-58-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-58-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-58-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-59-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-59-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-59-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-59-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-6-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-6-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-6-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-6-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-60-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-60-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-60-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-60-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-61-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-61-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-61-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-61-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-62-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-62-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-62-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-62-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-63-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-63-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-63-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-63-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-64-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-64-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-64-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-64-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-65-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-65-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-65-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-65-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-66-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-66-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-66-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-66-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-67-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-67-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-67-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-67-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-68-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-68-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-68-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-68-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-69-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-69-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-69-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-69-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-7-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-7-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-7-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-7-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-70-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-70-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-70-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-70-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-71-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-71-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-71-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-71-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-72-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-72-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-72-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-72-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-73-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-73-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-73-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-73-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-74-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-74-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-74-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-74-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-75-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-75-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-75-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-75-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-76-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-76-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-76-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-76-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-77-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-77-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-77-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-77-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-78-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-78-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-78-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-78-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-79-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-79-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-79-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-79-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-8-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-8-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-8-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-8-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-80-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-80-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-80-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-80-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-81-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-81-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-81-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-81-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-82-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-82-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-82-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-82-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-83-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-83-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-83-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-83-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-84-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-84-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-84-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-84-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-85-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-85-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-85-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-85-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-86-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-86-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-86-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-86-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-87-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-87-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-87-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-87-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-88-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-88-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-88-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-88-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-89-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-89-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-89-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-89-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-9-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-9-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-9-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-9-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-90-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-90-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-90-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-90-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-91-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-91-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-91-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-91-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-92-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-92-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-92-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-92-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-93-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-93-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-93-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-93-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-94-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-94-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-94-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-94-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-95-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-95-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-95-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-95-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-96-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-96-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-96-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-96-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-97-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-97-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-97-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-97-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-98-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-98-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-98-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-98-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-99-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-99-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-99-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-99-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-high-sim-1-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-high-sim-1-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-high-sim-1-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-high-sim-1-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-1-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-1-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-1-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-1-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-2-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-2-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-2-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-2-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-3-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-3-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-3-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-3-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-4-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-4-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-4-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-4-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-5-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-5-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen-time-shifted-5-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen-time-shifted-5-2.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen_remod-1-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen_remod-1-1.osr -------------------------------------------------------------------------------- /tests/resources/stealing/stolen_remod-1-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stealing/stolen_remod-1-2.osr -------------------------------------------------------------------------------- /tests/resources/stolen_replay1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stolen_replay1.osr -------------------------------------------------------------------------------- /tests/resources/stolen_replay2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/stolen_replay2.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1617643_3616134026.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1617643_3616134026.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1619564_3542160594.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1619564_3542160594.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1627149_3504526013.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1627149_3504526013.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1627149_3568354130.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1627149_3568354130.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1627149_3569654267.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1627149_3569654267.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1627149_3604376654.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1627149_3604376654.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1627149_3616523285.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1627149_3616523285.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1627149_3620632389.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1627149_3620632389.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1627149_3628388697.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1627149_3628388697.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1627149_3630701927.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1627149_3630701927.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1627149_3633640709.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1627149_3633640709.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1827412_3633264590.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1827412_3633264590.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_1936782_3597057114.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_1936782_3597057114.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_2156323_3124536556.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_2156323_3124536556.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_2204925_3620893121.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_2204925_3620893121.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_2421268_3503295355.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_2421268_3503295355.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_2580525_3625505463.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_2580525_3625505463.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_655468_3606599780.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_655468_3606599780.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_848233_3606931282.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_848233_3606931282.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/replay-osu_848235_3599791477.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/replay-osu_848235_3599791477.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped-1.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped-2.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped-3.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped-4.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped-4.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_144fps_90%_dt.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_144fps_90%_dt.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_144fps_90%_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_144fps_90%_nm.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_144fps_90%_nmrx.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_144fps_90%_nmrx.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_144fps_95%_dt.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_144fps_95%_dt.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_144fps_95%_nm.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_144fps_95%_nm.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_90%_dt-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_90%_dt-1.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_90%_dt-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_90%_dt-2.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_90%_nm-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_90%_nm-1.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_90%_nm-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_90%_nm-2.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_90%_nm-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_90%_nm-3.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_95%_dt-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_95%_dt-1.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_95%_dt-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_95%_dt-2.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_95%_nm-1.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_95%_nm-1.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_95%_nm-2.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_95%_nm-2.osr -------------------------------------------------------------------------------- /tests/resources/timewarped/timewarped_unlimitedfps_95%_nm-3.osr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/circleguard/circlecore/7087e8862895c115d769f5fdf15d9b187832e57e/tests/resources/timewarped/timewarped_unlimitedfps_95%_nm-3.osr -------------------------------------------------------------------------------- /tests/test_keyless_circleguard.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from circleguard import ( 3 | KeylessCircleguard, 4 | Map, 5 | MapUser, 6 | Mod, 7 | ReplayMap, 8 | ReplayPath, 9 | User, 10 | ) 11 | from tests.utils import RES 12 | 13 | kcg = KeylessCircleguard() 14 | 15 | 16 | def test_loading_replaypath(): 17 | r = ReplayPath(RES / "example_replay.osr") 18 | kcg.load(r) 19 | with pytest.raises(ValueError): 20 | r.map_id 21 | with pytest.raises(ValueError): 22 | r.user_id 23 | assert r.mods == Mod.HD + Mod.DT 24 | assert r.replay_id == 2029801532 25 | assert r.username == "MarthXT" 26 | assert r.loaded 27 | 28 | 29 | def test_loading_other_loadables(): 30 | r = ReplayMap(221777, 2757689) 31 | m = Map(221777, "1") 32 | u = User(12092800, "1") 33 | mu = MapUser(221777, 12092800, "1") 34 | with pytest.raises(ValueError): 35 | kcg.load(r) 36 | with pytest.raises(ValueError): 37 | kcg.load(m) 38 | with pytest.raises(ValueError): 39 | kcg.load_info(m) 40 | with pytest.raises(ValueError): 41 | kcg.load(u) 42 | with pytest.raises(ValueError): 43 | kcg.load_info(u) 44 | with pytest.raises(ValueError): 45 | kcg.load(mu) 46 | with pytest.raises(ValueError): 47 | kcg.load_info(mu) 48 | -------------------------------------------------------------------------------- /tests/test_loader.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from circleguard import InvalidKeyException, Loader 3 | from tests.utils import loader 4 | 5 | 6 | def test_loading_map_id(): 7 | result = loader.map_id("E") 8 | assert result == 0 9 | 10 | result = loader.map_id("9d0a8fec2fe3f778334df6bdc60b113c") 11 | assert result == 221777 12 | 13 | 14 | def test_loading_user_id(): 15 | result = loader.user_id("E") 16 | assert result == 0 17 | 18 | result = loader.user_id("] [") 19 | assert result == 13506780 20 | 21 | result = loader.user_id("727") 22 | assert result == 10750899 23 | 24 | 25 | def test_loading_username(): 26 | result = loader.username(0) 27 | assert result == "" 28 | 29 | result = loader.username(13506780) 30 | assert result == "] [" 31 | 32 | 33 | def test_incorrect_key(): 34 | loader = Loader("incorrect key") 35 | with pytest.raises(InvalidKeyException): 36 | loader.username(13506780) 37 | with pytest.raises(InvalidKeyException): 38 | loader.user_id("] [") 39 | with pytest.raises(InvalidKeyException): 40 | loader.map_id("9d0a8fec2fe3f778334df6bdc60b113c") 41 | -------------------------------------------------------------------------------- /tests/test_mod.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from circleguard import Mod, fuzzy_mods 3 | 4 | 5 | def test_mod_string_parsing(): 6 | # one normal, one "special" (nc and pf), and one multimod mod 7 | assert Mod("HD") == Mod.HD 8 | assert Mod("NC") == Mod.NC 9 | assert Mod("SOHDDT") == Mod.HD + Mod.DT + Mod.SO 10 | 11 | with pytest.raises(ValueError): 12 | Mod("DTH") 13 | with pytest.raises(ValueError): 14 | Mod("DH") 15 | 16 | 17 | def test_mod_str_list_parsing(): 18 | assert Mod(["HD"]) == Mod.HD 19 | assert Mod(["NC"]) == Mod.NC 20 | assert Mod(["SO", "HD", "DT"]) == Mod.HD + Mod.DT + Mod.SO 21 | assert Mod(["SOHD", "DT"]) == Mod.HD + Mod.DT + Mod.SO 22 | assert Mod(["SOHDDT"]) == Mod.HD + Mod.DT + Mod.SO 23 | assert Mod(["HD", "SODT"]) == Mod.HD + Mod.DT + Mod.SO 24 | 25 | with pytest.raises(ValueError): 26 | Mod(["DTH"]) 27 | with pytest.raises(ValueError): 28 | Mod(["DH"]) 29 | with pytest.raises(ValueError): 30 | Mod(["DH", 0]) 31 | 32 | 33 | def test_equality_reflexivity(): 34 | assert Mod("NC") == Mod("NC") 35 | 36 | 37 | def test_mod_ordering(): 38 | assert Mod("DTHDSO") == Mod("SOHDDT") 39 | assert Mod("DTHR").long_name() == Mod("HRDT").long_name() 40 | assert Mod("SOAPFLEZ").short_name() == Mod("EZSOFLAP").short_name() 41 | 42 | assert Mod("HD").short_name() == "HD" 43 | assert Mod("HR").long_name() == "HardRock" 44 | assert Mod("DTHR").long_name() == "DoubleTime HardRock" 45 | assert Mod("HRDT").long_name() == "DoubleTime HardRock" 46 | 47 | 48 | def test_fuzzy_mod(): 49 | mods = fuzzy_mods(Mod.HD, [Mod.DT, Mod.EZ]) 50 | assert mods == [Mod.HD, Mod.HDDT, Mod.HD + Mod.EZ, Mod.HD + Mod.EZ + Mod.DT] 51 | 52 | mods = fuzzy_mods(Mod.HD, [Mod.DT]) 53 | assert mods == [Mod.HD, Mod.HD + Mod.DT] 54 | 55 | mods = fuzzy_mods(Mod.NM, [Mod.DT, Mod.EZ]) 56 | assert mods == [Mod.NM, Mod.DT, Mod.EZ, Mod.DT + Mod.EZ] 57 | -------------------------------------------------------------------------------- /tests/utils.py: -------------------------------------------------------------------------------- 1 | import os 2 | from pathlib import Path 3 | 4 | from circleguard import Circleguard, Loader 5 | 6 | KEY = os.environ.get("OSU_API_KEY") 7 | if not KEY: 8 | KEY = input("Enter your api key: ") 9 | 10 | RES = Path(__file__).parent / "resources" 11 | # disabled for now 12 | # set_options(loglevel=20) 13 | 14 | # what precision we want to guarantee for our tests 15 | DELTA = 0.00001 16 | # osu! only shows ur to two decimals, so we only guarantee precision to there 17 | UR_DELTA = 0.01 18 | # threshold for frametime 19 | FRAMETIME_LIMIT = 13 20 | 21 | 22 | cg = Circleguard(KEY, db_path=Path(__file__).parent / "cache.db") 23 | cg_no_cache = Circleguard(KEY) 24 | loader = Loader(KEY) 25 | --------------------------------------------------------------------------------