From db46141cdcdf84b9905175754b90ca05e2995331 Mon Sep 17 00:00:00 2001 From: Kesavan Date: Mon, 10 Nov 2025 18:55:16 +0000 Subject: [PATCH 01/25] Start seperate timing file for timing functions Co-authored-by: Simon Guo Co-authored-by: Pietro Marsella --- src/timing.py | 181 +++++++++++++++++++++++++++++ src/unit_tests/test_eval_timing.py | 22 ++++ 2 files changed, 203 insertions(+) create mode 100644 src/timing.py create mode 100644 src/unit_tests/test_eval_timing.py diff --git a/src/timing.py b/src/timing.py new file mode 100644 index 00000000..e6c2c006 --- /dev/null +++ b/src/timing.py @@ -0,0 +1,181 @@ +import torch +import json +import triton +import numpy as np +import time +from typing import Any +import os, sys + +################################################################################ +# Performance Eval +################################################################################ + +############################################################# +# Timing Functions +# TODO: see our detailed study on how to time kernel execution +# we implement a few ways to do timing studies +# agnositic whether the modules are rather Model or ModelNew +############################################################# + + +def get_timing_function( + method: str = "cuda_event", # by default +) -> callable: + """ + Get the timing function based on different timing methods + """ + assert method in ["cuda_event", "do_bench", "time_time"] + print( + f"[Profiling] Using timing method: {method}" + ) + match method: + case "cuda_event": + return time_execution_with_cuda_event + case "do_bench": + return time_execution_with_do_bench + case "time_time": + return time_execution_with_tim_dot_time + case _: + raise ValueError(f"Unknown timing method: {method}") + + +# TODO: do we want to support pytorch profiler + +def time_execution_with_do_bench( + kernel_fn: callable, + *args, + num_warmup: int = 3, + num_trials: int = 10, + verbose: bool = True, + device: torch.device = None, +) -> list[float]: + """ + Time a CUDA kernel function over multiple trials using triton.do_bench + """ + + raise NotImplementedError + + +def time_execution_with_time_dot_time( + kernel_fn: callable, + *args, + num_warmup: int = 3, + num_trials: int = 10, + verbose: bool = True, + device: torch.device = None, +) -> list[float]: + """ + Time a CUDA kernel function over multiple trials using time.time() + """ + raise RuntimeError("This function should not be used for timing, it's here purely for reference") + + # use this + # start = time.time() + # this is not the way but we will implement it for tutorial + + + +def time_execution_with_cuda_event( + kernel_fn: callable, + args: list[Any], + num_warmup: int = 3, + num_trials: int = 10, + verbose: bool = True, + device: torch.device = None, +) -> list[float]: + """ + Time a CUDA kernel function over multiple trials using torch.cuda.Event + + Args: + kernel_fn: Function to time + *args: Arguments to pass to kernel_fn + num_trials: Number of timing trials to run + verbose: Whether to print per-trial timing info + device: CUDA device to use, if None, use current device + + TODO: make this super solid and check this + Returns: + List of elapsed times in milliseconds + """ + if device is None: + if verbose: + print(f"Using current device: {torch.cuda.current_device()}") + device = torch.cuda.current_device() + + # Warm ups + for _ in range(num_warmup): + kernel_fn(*args) + torch.cuda.synchronize(device=device) + + print( + f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" + ) + elapsed_times = [] + + # Actual trials + for trial in range(num_trials): + # create event marker default is not interprocess + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + start_event.record() + kernel_fn(*args) + end_event.record() + + # Synchronize to ensure the events have completed + torch.cuda.synchronize(device=device) + + # Calculate the elapsed time in milliseconds + elapsed_time_ms = start_event.elapsed_time(end_event) + if verbose: + print(f"Trial {trial + 1}: {elapsed_time_ms:.3g} ms") + elapsed_times.append(elapsed_time_ms) + + return elapsed_times + +######################################################## +# Timing stats +######################################################### +def fetch_baseline_time( + level_name: str, problem_id: int, dataset: list[str], baseline_time_filepath: str +) -> dict: + """ + Fetch the baseline time from the time + """ + if not os.path.exists(baseline_time_filepath): + raise FileNotFoundError( + f"Baseline time file not found at {baseline_time_filepath}" + ) + + with open(baseline_time_filepath, "r") as f: + baseline_json = json.load(f) + + problem_name = dataset[problem_id].split("/")[-1] + baseline_time = baseline_json[level_name].get(problem_name, None) + return baseline_time + + +def get_timing_stats(elapsed_times: list[float], device: torch.device = None) -> dict: + """Get timing statistics from a list of elapsed times. + + Args: + elapsed_times: List of elapsed times in milliseconds + device: CUDA device, record device info + Returns: + Dict containing mean, std, min, max and num_trials + all timing are in ms + """ + + stats = { + "mean": float(f"{np.mean(elapsed_times):.3g}"), + "std": float(f"{np.std(elapsed_times):.3g}"), + "min": float(f"{np.min(elapsed_times):.3g}"), + "max": float(f"{np.max(elapsed_times):.3g}"), + "num_trials": len(elapsed_times), + } + + if device: + stats["hardware"] = torch.cuda.get_device_name(device=device) + stats["device"] = str(device) # for debugging + + return stats diff --git a/src/unit_tests/test_eval_timing.py b/src/unit_tests/test_eval_timing.py new file mode 100644 index 00000000..ef6fffc6 --- /dev/null +++ b/src/unit_tests/test_eval_timing.py @@ -0,0 +1,22 @@ +import os + + +""" +Test Timing + +We want to systematically study different timing methodologies. + +""" +REPO_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) + +# use exampls in the few shot directory +EXAMPLES_PATH = os.path.join(REPO_PATH, "src", "prompts", "few_shot") + +# Configure your test cases here +TEST_REF_FILE = "model_ex_tiled_matmul.py" +TEST_KERNEL_FILE = "model_new_ex_tiled_matmul.py" + +assert os.path.exists(os.path.join(EXAMPLES_PATH, TEST_REF_FILE)), f"Reference file {TEST_REF_FILE} does not exist in {EXAMPLES_PATH}" +assert os.path.exists(os.path.join(EXAMPLES_PATH, TEST_KERNEL_FILE)), f"Kernel file {TEST_KERNEL_FILE} does not exist in {EXAMPLES_PATH}" + + From 5ff8891b3af1044c89208b5971418b70e753aad5 Mon Sep 17 00:00:00 2001 From: Sahan Date: Sun, 16 Nov 2025 23:38:39 +0000 Subject: [PATCH 02/25] Add tests, cache clearning, time, and do_bench --- src/do_bench.py | 126 +++++++++++++++++++++++++++++ src/timing.py | 75 +++++++++++++---- src/unit_tests/test_eval_timing.py | 73 +++++++++++++++++ 3 files changed, 259 insertions(+), 15 deletions(-) create mode 100644 src/do_bench.py diff --git a/src/do_bench.py b/src/do_bench.py new file mode 100644 index 00000000..a6e8d8f0 --- /dev/null +++ b/src/do_bench.py @@ -0,0 +1,126 @@ +import math +import statistics +from triton import runtime + + +# pure Python implementation of np.quantile/torch.quantile +# to avoid unnecessary runtime dependency on numpy/torch + +# This is a slightly modfied version of triton.testing.do_bench (triton v3.5.x) from +# https://github.com/triton-lang/triton/blob/0add68262ab0a2e33b84524346cb27cbb2787356/python/triton/testing.py#L127 +# with minor a minor modification to support having warmup and repeat time instead be specified in number of iterations +# instead of ms. All changes are explcitly marked + +def _quantile(a, q): + n = len(a) + a = sorted(a) + + def get_quantile(q): + if not (0 <= q <= 1): + raise ValueError("Quantiles must be in the range [0, 1]") + point = q * (n - 1) + lower = math.floor(point) + upper = math.ceil(point) + t = point - lower + return (1 - t) * a[lower] + t * a[upper] + + return [get_quantile(q) for q in q] + + +def _summarize_statistics(times, quantiles, return_mode): + if quantiles is not None: + ret = _quantile(times, quantiles) + if len(ret) == 1: + ret = ret[0] + return ret + if return_mode == "all": + return times + elif return_mode == "min": + return min(times) + elif return_mode == "max": + return max(times) + elif return_mode == "mean": + return statistics.mean(times) + elif return_mode == "median": + return statistics.median(times) + + +def do_bench(fn, warmup=25, rep=100, grad_to_none=None, quantiles=None, return_mode="mean"): + """ + Benchmark the runtime of the provided function. By default, return the median runtime of :code:`fn` along with + the 20-th and 80-th performance percentile. CHANGE: warmup and repeat time are specified in number of iterations rather than ms + + + :param fn: Function to benchmark + :type fn: Callable + :param warmup: Warmup time (in number of iterations) + :type warmup: int + :param rep: Repetition time (in number of iterations) + :type rep: int + :param grad_to_none: Reset the gradient of the provided tensor to None + :type grad_to_none: torch.tensor, optional + :param quantiles: Performance percentile to return in addition to the median. + :type quantiles: list[float], optional + :param return_mode: The statistical measure to return. Options are "min", "max", "mean", "median", or "all". Default is "mean". + :type return_mode: str + """ + assert return_mode in ["min", "max", "mean", "median", "all"] + + # Change + # mean, max, min, quantiles, etc. make no sense with 0 reps + if not (return_mode == "all" and quantiles is None) and rep < 1: + error_msg = ( + f"You are running with {rep} reps. This is likely a mistake!!!\n" + "We do let you do this, but ONLY when quantiles is None when return_mode is not 'all'\n" + "to be consistent with the rest of KernelBench's timing functions" + ) + raise ValueError(error_msg) + # End of change + di = runtime.driver.active.get_device_interface() + + fn() + di.synchronize() + + cache = runtime.driver.active.get_empty_cache_for_benchmark() + + # Estimate the runtime of the function + start_event = di.Event(enable_timing=True) + end_event = di.Event(enable_timing=True) + start_event.record() + for _ in range(5): + runtime.driver.active.clear_cache(cache) + fn() + end_event.record() + di.synchronize() + estimate_ms = start_event.elapsed_time(end_event) / 5 + + # compute number of warmup and repeat + # Change + # n_warmup = max(1, int(warmup / estimate_ms)) + # n_repeat = max(1, int(rep / estimate_ms)) + n_warmup = warmup + n_repeat = rep + # end of change + start_event = [di.Event(enable_timing=True) for i in range(n_repeat)] + end_event = [di.Event(enable_timing=True) for i in range(n_repeat)] + # Warm-up + for _ in range(n_warmup): + fn() + # Benchmark + for i in range(n_repeat): + # we don't want `fn` to accumulate gradient values + # if it contains a backward pass. So we clear the + # provided gradients + if grad_to_none is not None: + for x in grad_to_none: + x.grad = None + # we clear the L2 cache before each run + runtime.driver.active.clear_cache(cache) + # record time of `fn` + start_event[i].record() + fn() + end_event[i].record() + # Record clocks + di.synchronize() + times = [s.elapsed_time(e) for s, e in zip(start_event, end_event)] + return _summarize_statistics(times, quantiles, return_mode) \ No newline at end of file diff --git a/src/timing.py b/src/timing.py index e6c2c006..3dc49b0d 100644 --- a/src/timing.py +++ b/src/timing.py @@ -1,10 +1,11 @@ import torch import json -import triton import numpy as np import time +import warnings from typing import Any -import os, sys +import os +from do_bench import do_bench ################################################################################ # Performance Eval @@ -17,7 +18,6 @@ # agnositic whether the modules are rather Model or ModelNew ############################################################# - def get_timing_function( method: str = "cuda_event", # by default ) -> callable: @@ -37,13 +37,10 @@ def get_timing_function( return time_execution_with_tim_dot_time case _: raise ValueError(f"Unknown timing method: {method}") - - -# TODO: do we want to support pytorch profiler def time_execution_with_do_bench( kernel_fn: callable, - *args, + args: list[Any], num_warmup: int = 3, num_trials: int = 10, verbose: bool = True, @@ -52,13 +49,17 @@ def time_execution_with_do_bench( """ Time a CUDA kernel function over multiple trials using triton.do_bench """ - - raise NotImplementedError + return do_bench( + lambda: kernel_fn(*args), + warmup=num_warmup, + rep=num_trials, + return_mode="all", + ) def time_execution_with_time_dot_time( kernel_fn: callable, - *args, + args: list[Any], num_warmup: int = 3, num_trials: int = 10, verbose: bool = True, @@ -66,12 +67,54 @@ def time_execution_with_time_dot_time( ) -> list[float]: """ Time a CUDA kernel function over multiple trials using time.time() + + Args: + kernel_fn: Function to time + args: Arguments to pass to kernel_fn + num_trials: Number of timing trials to run + verbose: Whether to print per-trial timing info + device: CUDA device to use, if None, use current device + + Returns: + List of elapsed times in milliseconds """ - raise RuntimeError("This function should not be used for timing, it's here purely for reference") - - # use this - # start = time.time() - # this is not the way but we will implement it for tutorial + + # give warning that this is not the way to do it + warnings.warn( + "time_execution_with_time_dot_time is meant for educational purposes only, please other options like time_with_cuda_event or time_with_do_bench", + UserWarning, + ) + + if device is None: + if verbose: + print(f"Using current device: {torch.cuda.current_device()}") + device = torch.cuda.current_device() + + # Warm ups + for _ in range(num_warmup): + kernel_fn(*args) + torch.cuda.synchronize(device=device) + + print( + f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" + ) + elapsed_times = [] + + # Actual trials + for trial in range(num_trials): + start_time = time.time() + kernel_fn(*args) + torch.cuda.synchronize(device=device) + end_time = time.time() + + # Calculate the elapsed time in milliseconds + elapsed_time_ms = (end_time - start_time) * 1000 + if verbose: + print(f"Trial {trial + 1}: {elapsed_time_ms:.3g} ms") + elapsed_times.append(elapsed_time_ms) + + return elapsed_times + @@ -106,6 +149,7 @@ def time_execution_with_cuda_event( for _ in range(num_warmup): kernel_fn(*args) torch.cuda.synchronize(device=device) + torch.cuda.clear_cache() print( f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" @@ -124,6 +168,7 @@ def time_execution_with_cuda_event( # Synchronize to ensure the events have completed torch.cuda.synchronize(device=device) + torch.cuda.clear_cache() # Calculate the elapsed time in milliseconds elapsed_time_ms = start_event.elapsed_time(end_event) diff --git a/src/unit_tests/test_eval_timing.py b/src/unit_tests/test_eval_timing.py index ef6fffc6..23a100db 100644 --- a/src/unit_tests/test_eval_timing.py +++ b/src/unit_tests/test_eval_timing.py @@ -1,4 +1,14 @@ import os +import sys +import torch +import pytest + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) +from timing import ( + time_execution_with_cuda_event, + time_execution_with_time_dot_time, + time_execution_with_do_bench, +) """ @@ -20,3 +30,66 @@ assert os.path.exists(os.path.join(EXAMPLES_PATH, TEST_KERNEL_FILE)), f"Kernel file {TEST_KERNEL_FILE} does not exist in {EXAMPLES_PATH}" +def _run_timing_smoke_test(timing_fn): + """ + Scaffold function for timing smoke tests. + + Args: + timing_fn: The timing function to test + use_args: Whether the timing function expects args parameter (True for cuda_event/time_dot_time, False for do_bench) + """ + # Skip if CUDA is not available + if not torch.cuda.is_available(): + pytest.skip("CUDA not available, skipping timing tests") + + # Create test matrices + size = 512 + a = torch.randn(size, size, device='cuda') + b = torch.randn(size, size, device='cuda') + + num_warmup = 5 + num_trials = 5 + + # Define the kernel function to time + def matmul_kernel(a, b): + return torch.matmul(a, b) + + elapsed_times = timing_fn( + matmul_kernel, + args=[a, b], + num_warmup=num_warmup, + num_trials=num_trials, + verbose=False, + ) + + # Validate results + assert isinstance(elapsed_times, list), "Expected list of elapsed times" + assert len(elapsed_times) == num_trials, f"Expected {num_trials} timing results, got {len(elapsed_times)}" + assert all(isinstance(t, float) for t in elapsed_times), "All timing results should be floats" + assert all(t > 0 for t in elapsed_times), "All timing results should be positive" + + +def test_time_execution_with_cuda_event_smoke(): + """ + Smoke test for time_execution_with_cuda_event using 512x512 matmul. + Tests with 5 warmup and 5 trials, validates list of 5 positive floats is returned. + """ + _run_timing_smoke_test(time_execution_with_cuda_event) + + +def test_time_execution_with_time_dot_time_smoke(): + """ + Smoke test for time_execution_with_time_dot_time using 512x512 matmul. + Tests with 5 warmup and 5 trials, validates list of 5 positive floats is returned. + """ + _run_timing_smoke_test(time_execution_with_time_dot_time) + + +def test_time_execution_with_do_bench_smoke(): + """ + Smoke test for time_execution_with_do_bench using 512x512 matmul. + Tests with 5 warmup and 5 trials, validates list of 5 positive floats is returned. + """ + _run_timing_smoke_test(time_execution_with_do_bench) + + From 9581487ea29a9f742cfaf1040bd4deb1626e9026 Mon Sep 17 00:00:00 2001 From: Simon Guo Date: Fri, 12 Dec 2025 03:29:51 +0000 Subject: [PATCH 03/25] reorganize timing func, migrate cuda event with l2 cache from branch to here; a few other to implement --- requirements.txt | 4 +- src/timing.py | 140 +++++++++++++++++++++-------- src/unit_tests/test_eval_timing.py | 56 ++++++------ 3 files changed, 131 insertions(+), 69 deletions(-) diff --git a/requirements.txt b/requirements.txt index d7f31a49..cc7300f1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # Frameworks -torch==2.5.0 +torch==2.9.0 # we shall upgrade torch for blackwell when it is stable transformers datasets @@ -9,6 +9,7 @@ modal nvidia-cutlass-dsl tilelang apache-tvm +triton # helper tqdm @@ -16,6 +17,7 @@ packaging pydra_config pytest ninja +cupy-cuda12x # Numerics einops diff --git a/src/timing.py b/src/timing.py index 3dc49b0d..007d75c6 100644 --- a/src/timing.py +++ b/src/timing.py @@ -5,26 +5,25 @@ import warnings from typing import Any import os -from do_bench import do_bench +from triton import runtime +from eval import clear_l2_cache ################################################################################ # Performance Eval ################################################################################ -############################################################# -# Timing Functions -# TODO: see our detailed study on how to time kernel execution -# we implement a few ways to do timing studies -# agnositic whether the modules are rather Model or ModelNew -############################################################# - +""" +Kernel Timing Functions [Revamp WIP] +TODO: see our detailed study on how to time kernel execution and benchmarking guide +we implement a few ways to do timing studies +These should be implemnted to be agnostic whether the modules are rather Model (reference kernel) or ModelNew (generated kernel) +""" def get_timing_function( method: str = "cuda_event", # by default ) -> callable: """ Get the timing function based on different timing methods """ - assert method in ["cuda_event", "do_bench", "time_time"] print( f"[Profiling] Using timing method: {method}" ) @@ -34,9 +33,9 @@ def get_timing_function( case "do_bench": return time_execution_with_do_bench case "time_time": - return time_execution_with_tim_dot_time + return time_execution_with_time_dot_time # this is just for education purpose, don't use this case _: - raise ValueError(f"Unknown timing method: {method}") + raise ValueError(f"Unsupported timing method: {method}") def time_execution_with_do_bench( kernel_fn: callable, @@ -44,18 +43,71 @@ def time_execution_with_do_bench( num_warmup: int = 3, num_trials: int = 10, verbose: bool = True, - device: torch.device = None, -) -> list[float]: + device: torch.device | None = None) -> list[float]: """ - Time a CUDA kernel function over multiple trials using triton.do_bench + TODO: need check do_bench + [WIP] need to check """ - return do_bench( - lambda: kernel_fn(*args), - warmup=num_warmup, - rep=num_trials, - return_mode="all", - ) - + + device = torch.cuda.current_device() if device is not None else device + + if verbose: print("Using do_bench to evaluate kernel") + + # note: for both nvidia and amd, di is torch.cuda (amd uses a cuda compatible interface), so we could really just have torch.cuda + di = runtime.driver.active.get_device_interface() + + kernel_fn(*args) + di.synchronize(device=device) + + cache = runtime.driver.active.get_empty_cache_for_benchmark() + + # Estimate the runtime of the function (not needed since now the warmup and repeat steps are set by the user) + + # start_event = di.Event(enable_timing=True) + # end_event = di.Event(enable_timing=True) + # start_event.record() + # for _ in range(5): + # runtime.driver.active.clear_cache(cache) + # kernel_fn(*args) + # end_event.record() + # di.synchronize() + # estimate_ms = start_event.elapsed_time(end_event) / 5 + + # compute number of warmup and repeat + # Change + # n_warmup = max(1, int(warmup / estimate_ms)) + # n_repeat = max(1, int(rep / estimate_ms)) + # n_warmup = warmup + # n_repeat = rep + # end of change + start_event = [di.Event(enable_timing=True) for i in range(num_trials)] + end_event = [di.Event(enable_timing=True) for i in range(num_trials)] + # Warm-up + for _ in range(num_warmup): + kernel_fn(*args) + # Benchmark + for i in range(num_trials): + + # All our functions are forward passes, so we don't need to reset gradients + # we don't want `fn` to accumulate gradient values + # if it contains a backward pass. So we clear the + # provided gradients + # if grad_to_none is not None: + # for x in grad_to_none: + # x.grad = None + + # we clear the L2 cache before each run + runtime.driver.active.clear_cache(cache) + # record time of `fn` + start_event[i].record() + kernel_fn(*args) + end_event[i].record() + # Record clocks + di.synchronize(device=device) + if verbose: print('Done with do_bench evaluation') + times = [s.elapsed_time(e) for s, e in zip(start_event, end_event)] + return times + def time_execution_with_time_dot_time( kernel_fn: callable, @@ -63,11 +115,11 @@ def time_execution_with_time_dot_time( num_warmup: int = 3, num_trials: int = 10, verbose: bool = True, - device: torch.device = None, + device: torch.device | None = None, ) -> list[float]: """ Time a CUDA kernel function over multiple trials using time.time() - + [WIP] Args: kernel_fn: Function to time args: Arguments to pass to kernel_fn @@ -77,6 +129,8 @@ def time_execution_with_time_dot_time( Returns: List of elapsed times in milliseconds + + Not recommended: """ # give warning that this is not the way to do it @@ -95,9 +149,7 @@ def time_execution_with_time_dot_time( kernel_fn(*args) torch.cuda.synchronize(device=device) - print( - f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" - ) + print(f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}") elapsed_times = [] # Actual trials @@ -128,6 +180,8 @@ def time_execution_with_cuda_event( ) -> list[float]: """ Time a CUDA kernel function over multiple trials using torch.cuda.Event + The first version of KenrelBench used this for evaluation. + We care about cold cache performance here. Args: kernel_fn: Function to time @@ -136,7 +190,7 @@ def time_execution_with_cuda_event( verbose: Whether to print per-trial timing info device: CUDA device to use, if None, use current device - TODO: make this super solid and check this + TODO: double check this with team Returns: List of elapsed times in milliseconds """ @@ -149,35 +203,44 @@ def time_execution_with_cuda_event( for _ in range(num_warmup): kernel_fn(*args) torch.cuda.synchronize(device=device) - torch.cuda.clear_cache() - print( - f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" + # note this only release PyTorch’s CUDA caching allocator, not necessarily clearing device's L2 cache + torch.cuda.empty_cache() + + print(f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" ) - elapsed_times = [] - # Actual trials + elapsed_times: list[float] = [] # in ms + + # Timing trials for trial in range(num_trials): + torch.cuda.synchronize(device=device) # block on all streams + # create event marker default is not interprocess start_event = torch.cuda.Event(enable_timing=True) end_event = torch.cuda.Event(enable_timing=True) - + + clear_l2_cache() # measuring cold cache performance + + # note cuda events mark event on current stream start_event.record() - kernel_fn(*args) - end_event.record() + _ = kernel_fn(*args) + end_event.record() - # Synchronize to ensure the events have completed + # waits for all streams on that device + # though it is important to note the events only record time between on current stream + # TODO: find ways to check hacks by launching work on additional stream torch.cuda.synchronize(device=device) - torch.cuda.clear_cache() # Calculate the elapsed time in milliseconds elapsed_time_ms = start_event.elapsed_time(end_event) if verbose: - print(f"Trial {trial + 1}: {elapsed_time_ms:.3g} ms") + print(f"Timing Trial {trial + 1}: {elapsed_time_ms:.3g} ms") elapsed_times.append(elapsed_time_ms) return elapsed_times + ######################################################## # Timing stats ######################################################### @@ -195,6 +258,7 @@ def fetch_baseline_time( with open(baseline_time_filepath, "r") as f: baseline_json = json.load(f) + # TODO: replace with the new Dataset object that Omar will merge in problem_name = dataset[problem_id].split("/")[-1] baseline_time = baseline_json[level_name].get(problem_name, None) return baseline_time diff --git a/src/unit_tests/test_eval_timing.py b/src/unit_tests/test_eval_timing.py index 23a100db..955b2519 100644 --- a/src/unit_tests/test_eval_timing.py +++ b/src/unit_tests/test_eval_timing.py @@ -4,18 +4,11 @@ import pytest sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) -from timing import ( - time_execution_with_cuda_event, - time_execution_with_time_dot_time, - time_execution_with_do_bench, -) - +import timing """ Test Timing - We want to systematically study different timing methodologies. - """ REPO_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) @@ -30,10 +23,11 @@ assert os.path.exists(os.path.join(EXAMPLES_PATH, TEST_KERNEL_FILE)), f"Kernel file {TEST_KERNEL_FILE} does not exist in {EXAMPLES_PATH}" -def _run_timing_smoke_test(timing_fn): +def _run_timing_smoke_test_matmul(timing_func_name:str, device:str="cuda"): """ Scaffold function for timing smoke tests. - + Smoke test for using 512x512 matmul. + Args: timing_fn: The timing function to test use_args: Whether the timing function expects args parameter (True for cuda_event/time_dot_time, False for do_bench) @@ -42,10 +36,10 @@ def _run_timing_smoke_test(timing_fn): if not torch.cuda.is_available(): pytest.skip("CUDA not available, skipping timing tests") - # Create test matrices + # Create simple test matrices size = 512 - a = torch.randn(size, size, device='cuda') - b = torch.randn(size, size, device='cuda') + a = torch.randn(size, size, device=device) + b = torch.randn(size, size, device=device) num_warmup = 5 num_trials = 5 @@ -54,7 +48,8 @@ def _run_timing_smoke_test(timing_fn): def matmul_kernel(a, b): return torch.matmul(a, b) - elapsed_times = timing_fn( + timing_func = timing.get_timing_function(timing_func_name) + elapsed_times = timing_func( matmul_kernel, args=[a, b], num_warmup=num_warmup, @@ -67,29 +62,30 @@ def matmul_kernel(a, b): assert len(elapsed_times) == num_trials, f"Expected {num_trials} timing results, got {len(elapsed_times)}" assert all(isinstance(t, float) for t in elapsed_times), "All timing results should be floats" assert all(t > 0 for t in elapsed_times), "All timing results should be positive" + print(f"smoke test matmul elapsed times with {timing_func_name} (in ms): {elapsed_times}") -def test_time_execution_with_cuda_event_smoke(): - """ - Smoke test for time_execution_with_cuda_event using 512x512 matmul. - Tests with 5 warmup and 5 trials, validates list of 5 positive floats is returned. - """ - _run_timing_smoke_test(time_execution_with_cuda_event) +_run_timing_smoke_test_matmul("cuda_event") -def test_time_execution_with_time_dot_time_smoke(): +def test_do_bench_simple_smoke(): """ - Smoke test for time_execution_with_time_dot_time using 512x512 matmul. - Tests with 5 warmup and 5 trials, validates list of 5 positive floats is returned. + Smoke test for do_bench itself on a simple CUDA operation. + Just checks it runs and returns timings. """ - _run_timing_smoke_test(time_execution_with_time_dot_time) + if not torch.cuda.is_available(): + pytest.skip("CUDA not available, skipping do_bench smoke test") + from do_bench import do_bench -def test_time_execution_with_do_bench_smoke(): - """ - Smoke test for time_execution_with_do_bench using 512x512 matmul. - Tests with 5 warmup and 5 trials, validates list of 5 positive floats is returned. - """ - _run_timing_smoke_test(time_execution_with_do_bench) + x = torch.randn(1024, device="cuda") + + def fn(): + # simple GPU op; do_bench will sync/timestamp internally + return (x * 2).sum() + rep = 5 + times = do_bench(fn, warmup=2, rep=rep, return_mode="all") + assert isinstance(times, list) + assert len(times) == rep From 467f856d6af44629fcc07ccfcdf36365b4cb95d7 Mon Sep 17 00:00:00 2001 From: Simon Guo Date: Fri, 12 Dec 2025 04:25:48 +0000 Subject: [PATCH 04/25] implement do_bench and cpu host timing, script to run all 4 timing methods --- src/do_bench.py | 126 ------------ src/timing.py | 296 ++++++++++++++++++----------- src/unit_tests/test_eval_timing.py | 14 +- 3 files changed, 193 insertions(+), 243 deletions(-) delete mode 100644 src/do_bench.py diff --git a/src/do_bench.py b/src/do_bench.py deleted file mode 100644 index a6e8d8f0..00000000 --- a/src/do_bench.py +++ /dev/null @@ -1,126 +0,0 @@ -import math -import statistics -from triton import runtime - - -# pure Python implementation of np.quantile/torch.quantile -# to avoid unnecessary runtime dependency on numpy/torch - -# This is a slightly modfied version of triton.testing.do_bench (triton v3.5.x) from -# https://github.com/triton-lang/triton/blob/0add68262ab0a2e33b84524346cb27cbb2787356/python/triton/testing.py#L127 -# with minor a minor modification to support having warmup and repeat time instead be specified in number of iterations -# instead of ms. All changes are explcitly marked - -def _quantile(a, q): - n = len(a) - a = sorted(a) - - def get_quantile(q): - if not (0 <= q <= 1): - raise ValueError("Quantiles must be in the range [0, 1]") - point = q * (n - 1) - lower = math.floor(point) - upper = math.ceil(point) - t = point - lower - return (1 - t) * a[lower] + t * a[upper] - - return [get_quantile(q) for q in q] - - -def _summarize_statistics(times, quantiles, return_mode): - if quantiles is not None: - ret = _quantile(times, quantiles) - if len(ret) == 1: - ret = ret[0] - return ret - if return_mode == "all": - return times - elif return_mode == "min": - return min(times) - elif return_mode == "max": - return max(times) - elif return_mode == "mean": - return statistics.mean(times) - elif return_mode == "median": - return statistics.median(times) - - -def do_bench(fn, warmup=25, rep=100, grad_to_none=None, quantiles=None, return_mode="mean"): - """ - Benchmark the runtime of the provided function. By default, return the median runtime of :code:`fn` along with - the 20-th and 80-th performance percentile. CHANGE: warmup and repeat time are specified in number of iterations rather than ms - - - :param fn: Function to benchmark - :type fn: Callable - :param warmup: Warmup time (in number of iterations) - :type warmup: int - :param rep: Repetition time (in number of iterations) - :type rep: int - :param grad_to_none: Reset the gradient of the provided tensor to None - :type grad_to_none: torch.tensor, optional - :param quantiles: Performance percentile to return in addition to the median. - :type quantiles: list[float], optional - :param return_mode: The statistical measure to return. Options are "min", "max", "mean", "median", or "all". Default is "mean". - :type return_mode: str - """ - assert return_mode in ["min", "max", "mean", "median", "all"] - - # Change - # mean, max, min, quantiles, etc. make no sense with 0 reps - if not (return_mode == "all" and quantiles is None) and rep < 1: - error_msg = ( - f"You are running with {rep} reps. This is likely a mistake!!!\n" - "We do let you do this, but ONLY when quantiles is None when return_mode is not 'all'\n" - "to be consistent with the rest of KernelBench's timing functions" - ) - raise ValueError(error_msg) - # End of change - di = runtime.driver.active.get_device_interface() - - fn() - di.synchronize() - - cache = runtime.driver.active.get_empty_cache_for_benchmark() - - # Estimate the runtime of the function - start_event = di.Event(enable_timing=True) - end_event = di.Event(enable_timing=True) - start_event.record() - for _ in range(5): - runtime.driver.active.clear_cache(cache) - fn() - end_event.record() - di.synchronize() - estimate_ms = start_event.elapsed_time(end_event) / 5 - - # compute number of warmup and repeat - # Change - # n_warmup = max(1, int(warmup / estimate_ms)) - # n_repeat = max(1, int(rep / estimate_ms)) - n_warmup = warmup - n_repeat = rep - # end of change - start_event = [di.Event(enable_timing=True) for i in range(n_repeat)] - end_event = [di.Event(enable_timing=True) for i in range(n_repeat)] - # Warm-up - for _ in range(n_warmup): - fn() - # Benchmark - for i in range(n_repeat): - # we don't want `fn` to accumulate gradient values - # if it contains a backward pass. So we clear the - # provided gradients - if grad_to_none is not None: - for x in grad_to_none: - x.grad = None - # we clear the L2 cache before each run - runtime.driver.active.clear_cache(cache) - # record time of `fn` - start_event[i].record() - fn() - end_event[i].record() - # Record clocks - di.synchronize() - times = [s.elapsed_time(e) for s, e in zip(start_event, end_event)] - return _summarize_statistics(times, quantiles, return_mode) \ No newline at end of file diff --git a/src/timing.py b/src/timing.py index 007d75c6..c10b1c58 100644 --- a/src/timing.py +++ b/src/timing.py @@ -5,19 +5,43 @@ import warnings from typing import Any import os -from triton import runtime -from eval import clear_l2_cache +from triton import runtime as triton_runtime +from triton import testing as triton_testing ################################################################################ # Performance Eval ################################################################################ -""" -Kernel Timing Functions [Revamp WIP] -TODO: see our detailed study on how to time kernel execution and benchmarking guide -we implement a few ways to do timing studies -These should be implemnted to be agnostic whether the modules are rather Model (reference kernel) or ModelNew (generated kernel) -""" +def clear_l2_cache(device: str = "cuda"): + """ + Clear L2 Cache line by thrashing + From GPU mode reference kernel repo: + https://github.com/gpu-mode/reference-kernels/commit/7c15075a39286e88939d99d3f3a60be88b8e6223#diff-3a30a71cbf8db2badd224f4d92f9a2546925a5b522632a31d353526b7a5f3338R158-R163 + + We can improve this + TODO; should prob check device_name + """ + # don't reserve space for persisting lines + # cp.cuda.runtime.cudaDeviceSetLimit(cp.cuda.runtime.cudaLimitPersistingL2CacheSize, 0) + + # Thrash L2 cache by creating a larger dummy tensor, effectively flushing the cache + # 32 * 1024 * 1024 * 8B = 256MB + # NOTE: we can make this more adaptive based on device + # L2 cache sizes: A100=40MB, H100=50MB, H200=90MB, RTX4090=72MB, L40S=48MB, Blackwell≈192MB → overwrite >200MB to fully thrash L2 + dummy = torch.empty((32, 1024, 1024), dtype=torch.int64, device=device) + # write to tenosr with inplace fill + dummy.fill_(42) + del dummy + +def clear_l2_cache_triton(cache=None, device: str = "cuda"): + """ + Thrash the cache by making a large dummy tensor, using triton runtime's functionality + """ + with torch.cuda.device(device): + cache = triton_runtime.driver.active.get_empty_cache_for_benchmark() + triton_runtime.driver.active.clear_cache(cache) + + def get_timing_function( method: str = "cuda_event", # by default ) -> callable: @@ -30,44 +54,155 @@ def get_timing_function( match method: case "cuda_event": return time_execution_with_cuda_event - case "do_bench": - return time_execution_with_do_bench - case "time_time": - return time_execution_with_time_dot_time # this is just for education purpose, don't use this + case "do_bench_interface": + return time_execution_with_do_bench_interface + case "do_bench_impl": + return time_execution_with_do_bench_impl + case "cpu_time": + return time_execution_with_cpu_time + # we might add other methods in the future case _: raise ValueError(f"Unsupported timing method: {method}") -def time_execution_with_do_bench( +""" +Kernel Timing Functions [Revamp WIP] +TODO: see our detailed study on how to time kernel execution and benchmarking guide +we implement a few ways to do timing studies +These should be implemnted to be agnostic whether the modules are rather Model (reference kernel) or ModelNew (generated kernel) +""" + + +def time_execution_with_cuda_event( kernel_fn: callable, args: list[Any], num_warmup: int = 3, num_trials: int = 10, + discard_first: int = 1, + verbose: bool = True, + device: torch.device = None, +) -> list[float]: + """ + Time a CUDA kernel function over multiple trials using torch.cuda.Event + The first version of KenrelBench used this for evaluation. + We care about cold cache performance here. + + Args: + kernel_fn: Function to time + *args: Arguments to pass to kernel_fn + num_trials: Number of timing trials to run + verbose: Whether to print per-trial timing info + device: CUDA device to use, if None, use current device + + TODO: double check this with team + Returns: + List of elapsed times in milliseconds + """ + if device is None: + if verbose: + print(f"Using current device: {torch.cuda.current_device()}") + device = torch.cuda.current_device() + + # Warm ups + for _ in range(num_warmup): + kernel_fn(*args) + torch.cuda.synchronize(device=device) + + # note this only release PyTorch’s CUDA caching allocator, not necessarily clearing device's L2 cache + torch.cuda.empty_cache() + + print(f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" + ) + + elapsed_times: list[float] = [] # in ms + + # Timing trials + for trial in range(num_trials + discard_first): + torch.cuda.synchronize(device=device) # block on all streams + + # create event marker default is not interprocess + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + clear_l2_cache() # measuring cold cache performance + + # note cuda events mark event on current stream + start_event.record() + _ = kernel_fn(*args) + end_event.record() + + # waits for all streams on that device + # though it is important to note the events only record time between on current stream + # TODO: find ways to check hacks by launching work on additional stream + torch.cuda.synchronize(device=device) + + # Calculate the elapsed time in milliseconds + elapsed_time_ms = start_event.elapsed_time(end_event) + if trial >= discard_first: + if verbose: + logical_idx = trial - discard_first + 1 + print(f"Trial {logical_idx}: {elapsed_time_ms:.3g} ms") + elapsed_times.append(elapsed_time_ms) + + return elapsed_times + + +def time_execution_with_do_bench_interface( + kernel_fn: callable, + args: list[Any], + # this is different for triton do_bench + num_warmup: int = 3, + num_trials: int = 10, + discard_first: int = 1, # not used yet verbose: bool = True, device: torch.device | None = None) -> list[float]: """ - TODO: need check do_bench - [WIP] need to check + Just using triton's do_bench as it is """ - device = torch.cuda.current_device() if device is not None else device + do_bench_fn = lambda : kernel_fn(*args) + return triton_testing.do_bench(fn=do_bench_fn, + warmup=25, + rep=100, + grad_to_none=None, + quantiles=None, + return_mode="all") + - if verbose: print("Using do_bench to evaluate kernel") +def time_execution_with_do_bench_impl( + kernel_fn: callable, + args: list[Any], + num_warmup: int = 3, + num_trials: int = 10, + discard_first: int = 1, # not used yet + verbose: bool = True, + device: torch.device | None = None) -> list[float]: + """ + This is modifying the triton do_bench codebase + See Triton's implementation for more details + https://github.com/triton-lang/triton/blob/9073370d5979218d1afa44ec895bbd80e7419a8c/python/triton/testing.py#L127 + """ + + device = torch.cuda.current_device() if device is not None else device + if verbose: + print(f"Using do_bench to evaluate kernel on {device}") - # note: for both nvidia and amd, di is torch.cuda (amd uses a cuda compatible interface), so we could really just have torch.cuda - di = runtime.driver.active.get_device_interface() + # speicfy device interface (supports both nvidia and amd) + # under the hood, di is torch.cuda (amd uses a cuda compatible interface) + di = triton_runtime.driver.active.get_device_interface() kernel_fn(*args) di.synchronize(device=device) - cache = runtime.driver.active.get_empty_cache_for_benchmark() - - # Estimate the runtime of the function (not needed since now the warmup and repeat steps are set by the user) + # clear l2 cache + cache = triton_runtime.driver.active.get_empty_cache_for_benchmark() + # do_bench Estimate the runtime of the function + # Here we are not using it not needed since now the warmup and repeat steps are set by the user) # start_event = di.Event(enable_timing=True) # end_event = di.Event(enable_timing=True) # start_event.record() # for _ in range(5): - # runtime.driver.active.clear_cache(cache) + # triton_runtime.driver.active.clear_cache(cache) # kernel_fn(*args) # end_event.record() # di.synchronize() @@ -87,8 +222,7 @@ def time_execution_with_do_bench( kernel_fn(*args) # Benchmark for i in range(num_trials): - - # All our functions are forward passes, so we don't need to reset gradients + # All KernelBench functions are forward passes, so we don't need to reset gradients # we don't want `fn` to accumulate gradient values # if it contains a backward pass. So we clear the # provided gradients @@ -97,7 +231,7 @@ def time_execution_with_do_bench( # x.grad = None # we clear the L2 cache before each run - runtime.driver.active.clear_cache(cache) + triton_runtime.driver.active.clear_cache(cache) # record time of `fn` start_event[i].record() kernel_fn(*args) @@ -109,16 +243,17 @@ def time_execution_with_do_bench( return times -def time_execution_with_time_dot_time( +def time_execution_with_cpu_time( kernel_fn: callable, args: list[Any], num_warmup: int = 3, num_trials: int = 10, + discard_first: int = 1, verbose: bool = True, device: torch.device | None = None, ) -> list[float]: """ - Time a CUDA kernel function over multiple trials using time.time() + Time a CUDA kernel function over multiple trials using CPU side timing [WIP] Args: kernel_fn: Function to time @@ -132,13 +267,6 @@ def time_execution_with_time_dot_time( Not recommended: """ - - # give warning that this is not the way to do it - warnings.warn( - "time_execution_with_time_dot_time is meant for educational purposes only, please other options like time_with_cuda_event or time_with_do_bench", - UserWarning, - ) - if device is None: if verbose: print(f"Using current device: {torch.cuda.current_device()}") @@ -152,95 +280,35 @@ def time_execution_with_time_dot_time( print(f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}") elapsed_times = [] + # clear PyTorch allocator cache + torch.cuda.empty_cache() + # Actual trials - for trial in range(num_trials): - start_time = time.time() - kernel_fn(*args) + for trial in range(num_trials + discard_first): + # block all streams on device torch.cuda.synchronize(device=device) - end_time = time.time() - # Calculate the elapsed time in milliseconds - elapsed_time_ms = (end_time - start_time) * 1000 - if verbose: - print(f"Trial {trial + 1}: {elapsed_time_ms:.3g} ms") - elapsed_times.append(elapsed_time_ms) - - return elapsed_times + # focus on cold_cache performance + clear_l2_cache() - - - -def time_execution_with_cuda_event( - kernel_fn: callable, - args: list[Any], - num_warmup: int = 3, - num_trials: int = 10, - verbose: bool = True, - device: torch.device = None, -) -> list[float]: - """ - Time a CUDA kernel function over multiple trials using torch.cuda.Event - The first version of KenrelBench used this for evaluation. - We care about cold cache performance here. - - Args: - kernel_fn: Function to time - *args: Arguments to pass to kernel_fn - num_trials: Number of timing trials to run - verbose: Whether to print per-trial timing info - device: CUDA device to use, if None, use current device - - TODO: double check this with team - Returns: - List of elapsed times in milliseconds - """ - if device is None: - if verbose: - print(f"Using current device: {torch.cuda.current_device()}") - device = torch.cuda.current_device() - - # Warm ups - for _ in range(num_warmup): + # CPU-side wall clock time using perf_counter (high-resolution timer) + start_time = time.perf_counter() kernel_fn(*args) - torch.cuda.synchronize(device=device) - - # note this only release PyTorch’s CUDA caching allocator, not necessarily clearing device's L2 cache - torch.cuda.empty_cache() - - print(f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" - ) - - elapsed_times: list[float] = [] # in ms - - # Timing trials - for trial in range(num_trials): - torch.cuda.synchronize(device=device) # block on all streams - - # create event marker default is not interprocess - start_event = torch.cuda.Event(enable_timing=True) - end_event = torch.cuda.Event(enable_timing=True) - - clear_l2_cache() # measuring cold cache performance - - # note cuda events mark event on current stream - start_event.record() - _ = kernel_fn(*args) - end_event.record() - - # waits for all streams on that device - # though it is important to note the events only record time between on current stream - # TODO: find ways to check hacks by launching work on additional stream - torch.cuda.synchronize(device=device) + torch.cuda.synchronize(device=device) # wait for all stream to finish + # this blocks the CPU until all GPU work on device is done + # this means all kernels on all streams + end_time = time.perf_counter() # Calculate the elapsed time in milliseconds - elapsed_time_ms = start_event.elapsed_time(end_event) - if verbose: - print(f"Timing Trial {trial + 1}: {elapsed_time_ms:.3g} ms") - elapsed_times.append(elapsed_time_ms) + elapsed_time_ms = (end_time - start_time) * 1000 + if trial >= discard_first: + if verbose: + logical_idx = trial - discard_first + 1 + print(f"Trial {logical_idx}: {elapsed_time_ms:.3g} ms") + elapsed_times.append(elapsed_time_ms) return elapsed_times - ######################################################## # Timing stats ######################################################### diff --git a/src/unit_tests/test_eval_timing.py b/src/unit_tests/test_eval_timing.py index 955b2519..24d0faf2 100644 --- a/src/unit_tests/test_eval_timing.py +++ b/src/unit_tests/test_eval_timing.py @@ -59,13 +59,21 @@ def matmul_kernel(a, b): # Validate results assert isinstance(elapsed_times, list), "Expected list of elapsed times" - assert len(elapsed_times) == num_trials, f"Expected {num_trials} timing results, got {len(elapsed_times)}" + # assert len(elapsed_times) == num_trials, f"Expected {num_trials} timing results, got {len(elapsed_times)}" assert all(isinstance(t, float) for t in elapsed_times), "All timing results should be floats" assert all(t > 0 for t in elapsed_times), "All timing results should be positive" - print(f"smoke test matmul elapsed times with {timing_func_name} (in ms): {elapsed_times}") + # print(f"smoke test matmul elapsed times with {timing_func_name} (in ms): {elapsed_times}") + stats = timing.get_timing_stats(elapsed_times, device=device) + print("Timing stats") + print(stats) + + +timing_methods = ["cuda_event", "cpu_time", "do_bench_interface", "do_bench_impl"] + +for timing_method in timing_methods: + _run_timing_smoke_test_matmul(timing_method) -_run_timing_smoke_test_matmul("cuda_event") def test_do_bench_simple_smoke(): From 920a7932939eb3e189572d85cfdea08a2ea4aee4 Mon Sep 17 00:00:00 2001 From: Pietro Date: Fri, 12 Dec 2025 04:44:47 +0000 Subject: [PATCH 05/25] some annotations --- .gitignore | Bin 171 -> 152 bytes src/eval.py | 261 ++++++++++++++++++++------------------------------ src/timing.py | 36 ++++--- 3 files changed, 126 insertions(+), 171 deletions(-) diff --git a/.gitignore b/.gitignore index abb125d6aabe372688772976daa7ee024353eaf8..3956bf85591170be4f1159744411e5afa85d36a3 100644 GIT binary patch delta 22 dcmZ3@ID>IQCx3iWX=YAJd~#xPMyft97XV!Z2X+7e delta 41 vcmbQixSDZ7r&1zADMJcFCPN8BJVOpcDnl6%=P(#E=rI&9R5I`~a4`S?*LnzW diff --git a/src/eval.py b/src/eval.py index 4a072c89..2573da9c 100644 --- a/src/eval.py +++ b/src/eval.py @@ -15,13 +15,14 @@ from io import StringIO from typing import Union, Optional -import numpy as np -import requests import torch import torch.nn as nn from pydantic import BaseModel +from triton import runtime -from . import utils + +# import cupy as cp +import utils, timing REPO_TOP_PATH = os.path.abspath( os.path.join( @@ -46,6 +47,7 @@ def fetch_ref_arch_from_problem_id(problem_id, problems, with_name=False) -> str if isinstance(problem_id, str): problem_id = int(problem_id) + # TODO: replace dataset object @Omar problem_path = problems[problem_id] # problem_path = os.path.join(REPO_ROOT_PATH, problem) @@ -58,7 +60,6 @@ def fetch_ref_arch_from_problem_id(problem_id, problems, with_name=False) -> str else: return (problem_path, ref_arch) - def fetch_ref_arch_from_level_problem_id(level, problem_id, with_name=False): PROBLEM_DIR = os.path.join(KERNEL_BENCH_PATH, "level" + str(level)) dataset = utils.construct_problem_dataset_from_problem_dir(PROBLEM_DIR) @@ -70,6 +71,36 @@ def set_seed(seed: int): # NOTE: this only sets on current cuda device torch.cuda.manual_seed(seed) + +def clear_l2_cache(device: str = "cuda"): + """ + Clear L2 Cache line by thrashing + From GPU mode reference kernel repo: + https://github.com/gpu-mode/reference-kernels/commit/7c15075a39286e88939d99d3f3a60be88b8e6223#diff-3a30a71cbf8db2badd224f4d92f9a2546925a5b522632a31d353526b7a5f3338R158-R163 + + We can improve this + TODO; should prob check device_name + """ + # don't reserve space for persisting lines + # cp.cuda.runtime.cudaDeviceSetLimit(cp.cuda.runtime.cudaLimitPersistingL2CacheSize, 0) + + # Thrash L2 cache by creating a larger dummy tensor, effectively flushing the cache + # 32 * 1024 * 1024 * 8B = 256MB + # NOTE: we can make this more adaptive based on device + # L2 cache sizes: A100=40MB, H100=50MB, H200=90MB, RTX4090=72MB, L40S=48MB, Blackwell≈192MB → overwrite >200MB to fully thrash L2 + dummy = torch.empty((32, 1024, 1024), dtype=torch.int64, device=device) + # write to tenosr with inplace fill + dummy.fill_(42) + del dummy + +def clear_l2_cache_triton(cache, device): + # cp.cuda.runtime.cudaDeviceSetLimit( + # cp.cuda.runtime.cudaLimitPersistingL2CacheSize, 0 + # ) + cache = runtime.driver.active.get_empty_cache_for_benchmark() + runtime.driver.active.clear_cache(cache) + + def get_torch_dtype_from_string(precision: str) -> torch.dtype: """ Get the torch dtype for specific precision @@ -107,9 +138,8 @@ def get_tolerance_for_precision(precision: str | torch.dtype) -> float: class KernelExecResult(BaseModel): """ - Single Kernel Execution + Single Kernel Execution - all the information it needs """ - compiled: bool = False correctness: bool = False metadata: dict = {} @@ -387,6 +417,57 @@ def _process_input_tensor(input, device, backend="cuda", precision=torch.float32 return input_tensor.to(device=device) +def load_kernel( + verbose: str, + backend: str, + custom_model_src, + context, + build_dir, + device, + metadata: dict, + ) -> tuple[Union[nn.Module, KernelExecResult, None], Optional[tempfile.NamedTemporaryFile]]: + '''KernelExecResult means that loading the kernel failed (either because of compilation or something else), ModelNew that we succesfully loaded ModelNew''' + if verbose: + print("[Eval] Loading and Compiling New Model with Custom CUDA Kernel") + + try: + os.environ["TORCH_USE_CUDA_DSA"] = "1" # compile with device side assertion + tempfile = None + + if backend.lower() in ["triton", "tilelang", "cute"]: + # Use tempfile approach for triton, tilelang, and cute + # These DSLs require proper module import for JIT decorators to work + ModelNew, tempfile = load_custom_model_with_tempfile( + custom_model_src, entry_point="ModelNew" + ) + else: + # Default CUDA backend + ModelNew = load_custom_model(custom_model_src, context, build_dir) + torch.cuda.synchronize(device=device) # not sure if this is too much + except Exception as e: + print( + f"Failed to compile custom CUDA kernel: Record as compilation failure. \nError: {e}" + ) + # TODO: add metadata for compilation error (how to we get the compilation error message?) + + if "lock" in str(e) or "No such file or directory" in str(e): + # this is a lock file error, likely due to concurrent compilation + # this does not necessarily mean the compilation failed, but we should retry + print( + f"[Eval] Lock file error during compilation, Please retry. Error: {e}" + ) + graceful_eval_cleanup(context, device, tempfile) + return None, None + else: + metadata["compilation_error_name"] = get_error_name(e) + metadata["compilation_error"] = str(e) + graceful_eval_cleanup(context, device, tempfile) + return KernelExecResult( + compiled=False, metadata=metadata + ), None + return ModelNew, tempfile + + def eval_kernel_against_ref( original_model_src: str, custom_model_src: str, @@ -470,50 +551,15 @@ def eval_kernel_against_ref( assert hasattr(original_model, "forward") if verbose: print("[Eval] Original Model Loaded") - - if verbose: - print("[Eval] Loading and Compiling New Model with Custom CUDA Kernel") - - # this is where compilation happens - try: - os.environ["TORCH_USE_CUDA_DSA"] = "1" # compile with device side assertion - tempfile = None - # add hash for later to distinguish between multi-turn kernels - - backend_lower = backend.lower() - if backend_lower in ["triton", "tilelang", "cute"]: - # Use tempfile approach for triton, tilelang, and cute - # These DSLs require proper module import for JIT decorators to work - ModelNew, tempfile = load_custom_model_with_tempfile( - custom_model_src, entry_point="ModelNew" - ) - else: - # Default CUDA backend - ModelNew = load_custom_model(custom_model_src, context, build_dir) - torch.cuda.synchronize(device=device) # not sure if this is too much - except Exception as e: - print( - f"Failed to compile custom CUDA kernel: Record as compilation failure. \nError: {e}" - ) - # TODO: add metadata for compilation error (how to we get the compilation error message?) - - if "lock" in str(e) or "No such file or directory" in str(e): - # this is a lock file error, likely due to concurrent compilation - # this does not necessarily mean the compilation failed, but we should retry - print( - f"[Eval] Lock file error during compilation, Please retry. Error: {e}" - ) - graceful_eval_cleanup(context, device, tempfile) - return None - else: - metadata["compilation_error_name"] = get_error_name(e) - metadata["compilation_error"] = e - graceful_eval_cleanup(context, device, tempfile) - return KernelExecResult( - compiled=False, metadata=metadata - ) # skip further steps - - # at this point we passed compilation + result, tempfile = load_kernel( + verbose, backend, custom_model_src, context, build_dir, device, metadata + ) + if isinstance(result, KernelExecResult): + return result # loading the kernel failed, return the exec result + if result is None: + # lockfile / concurrent compilation: retryable failure + return None + ModelNew = result # we passed loading try: with torch.no_grad(): set_seed(seed_num) # set seed for reproducible weights @@ -536,7 +582,7 @@ def eval_kernel_against_ref( compiled=True, correctness=False, metadata=metadata ) # skip further steps - kernel_exec_result = None + # kernel_exec_result = None # Check Correctness if verbose: @@ -578,14 +624,16 @@ def eval_kernel_against_ref( model_new = custom_model.to(device=device, dtype=precision) torch.cuda.synchronize(device=device) - elapsed_times = time_execution_with_cuda_event( + # TODO: replace functions from timing based on we choose + # we should pass in which timing method you wanna do + elapsed_times = timing.time_execution_with_cuda_event( model_new, - *inputs, + inputs, num_trials=num_perf_trials, verbose=verbose, device=device, ) - runtime_stats = get_timing_stats(elapsed_times, device=device) + runtime_stats = timing.get_timing_stats(elapsed_times, device=device) if verbose: print(f"[Eval] Performance Stats: {runtime_stats}") @@ -625,63 +673,6 @@ def register_and_format_exception( return metadata -def time_execution_with_cuda_event( - kernel_fn: callable, - *args, - num_warmup: int = 3, - num_trials: int = 10, - verbose: bool = True, - device: torch.device = None, -) -> list[float]: - """ - Time a CUDA kernel function over multiple trials using torch.cuda.Event - - Args: - kernel_fn: Function to time - *args: Arguments to pass to kernel_fn - num_trials: Number of timing trials to run - verbose: Whether to print per-trial timing info - device: CUDA device to use, if None, use current device - - Returns: - List of elapsed times in milliseconds - """ - if device is None: - if verbose: - print(f"Using current device: {torch.cuda.current_device()}") - device = torch.cuda.current_device() - - # Warm ups - for _ in range(num_warmup): - kernel_fn(*args) - torch.cuda.synchronize(device=device) - - print( - f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" - ) - elapsed_times = [] - - # Actual trials - for trial in range(num_trials): - # create event marker default is not interprocess - start_event = torch.cuda.Event(enable_timing=True) - end_event = torch.cuda.Event(enable_timing=True) - - start_event.record() - kernel_fn(*args) - end_event.record() - - # Synchronize to ensure the events have completed - torch.cuda.synchronize(device=device) - - # Calculate the elapsed time in milliseconds - elapsed_time_ms = start_event.elapsed_time(end_event) - if verbose: - print(f"Trial {trial + 1}: {elapsed_time_ms:.3g} ms") - elapsed_times.append(elapsed_time_ms) - - return elapsed_times - def run_and_check_correctness( original_model_instance: nn.Module, @@ -865,54 +856,6 @@ def convert_to_serializable(obj): return converted_metadata -################################################################################ -# Performance Eval -################################################################################ - - -def fetch_baseline_time( - level_name: str, problem_id: int, dataset: list[str], baseline_time_filepath: str -) -> dict: - """ - Fetch the baseline time from the time - """ - if not os.path.exists(baseline_time_filepath): - raise FileNotFoundError( - f"Baseline time file not found at {baseline_time_filepath}" - ) - - with open(baseline_time_filepath, "r") as f: - baseline_json = json.load(f) - - problem_name = dataset[problem_id].split("/")[-1] - baseline_time = baseline_json[level_name].get(problem_name, None) - return baseline_time - - -def get_timing_stats(elapsed_times: list[float], device: torch.device = None) -> dict: - """Get timing statistics from a list of elapsed times. - - Args: - elapsed_times: List of elapsed times in milliseconds - device: CUDA device, record device info - Returns: - Dict containing mean, std, min, max and num_trials - all timing are in ms - """ - - stats = { - "mean": float(f"{np.mean(elapsed_times):.3g}"), - "std": float(f"{np.std(elapsed_times):.3g}"), - "min": float(f"{np.min(elapsed_times):.3g}"), - "max": float(f"{np.max(elapsed_times):.3g}"), - "num_trials": len(elapsed_times), - } - - if device: - stats["hardware"] = torch.cuda.get_device_name(device=device) - stats["device"] = str(device) # for debugging - - return stats # if __name__ == "__main__": diff --git a/src/timing.py b/src/timing.py index c10b1c58..56cefd09 100644 --- a/src/timing.py +++ b/src/timing.py @@ -2,9 +2,10 @@ import json import numpy as np import time -import warnings from typing import Any import os + +# we leverage triton's testing functionality for some timing methods from triton import runtime as triton_runtime from triton import testing as triton_testing @@ -17,9 +18,6 @@ def clear_l2_cache(device: str = "cuda"): Clear L2 Cache line by thrashing From GPU mode reference kernel repo: https://github.com/gpu-mode/reference-kernels/commit/7c15075a39286e88939d99d3f3a60be88b8e6223#diff-3a30a71cbf8db2badd224f4d92f9a2546925a5b522632a31d353526b7a5f3338R158-R163 - - We can improve this - TODO; should prob check device_name """ # don't reserve space for persisting lines # cp.cuda.runtime.cudaDeviceSetLimit(cp.cuda.runtime.cudaLimitPersistingL2CacheSize, 0) @@ -39,6 +37,7 @@ def clear_l2_cache_triton(cache=None, device: str = "cuda"): """ with torch.cuda.device(device): cache = triton_runtime.driver.active.get_empty_cache_for_benchmark() + # this effectively thrashes L2 cache under the hood too triton_runtime.driver.active.clear_cache(cache) @@ -58,8 +57,8 @@ def get_timing_function( return time_execution_with_do_bench_interface case "do_bench_impl": return time_execution_with_do_bench_impl - case "cpu_time": - return time_execution_with_cpu_time + case "host_time": + return time_execution_with_host_time # we might add other methods in the future case _: raise ValueError(f"Unsupported timing method: {method}") @@ -156,10 +155,12 @@ def time_execution_with_do_bench_interface( verbose: bool = True, device: torch.device | None = None) -> list[float]: """ - Just using triton's do_bench as it is + Using triton's default do_bench as it is + Note we don't set num_warmup and num_trials, and we use warmup 25 ms and repetition time 100 ms with Triton's default values + See doc: https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html + Benchmark the runtime of the provided function. By default, return the median runtime of fn along with the 20-th and 80-th performance percentile. """ - - do_bench_fn = lambda : kernel_fn(*args) + do_bench_fn = lambda : kernel_fn(*args) # wrap function with arguments return triton_testing.do_bench(fn=do_bench_fn, warmup=25, rep=100, @@ -180,6 +181,10 @@ def time_execution_with_do_bench_impl( This is modifying the triton do_bench codebase See Triton's implementation for more details https://github.com/triton-lang/triton/blob/9073370d5979218d1afa44ec895bbd80e7419a8c/python/triton/testing.py#L127 + + Note we duplicate triton's implementation and modify / comment out parts + to use num_warmup and num_trials that explicitly follows what user define here + instead of do_bench's version that computes how many times to run warmup and profile based on total warmup and repetition time """ device = torch.cuda.current_device() if device is not None else device @@ -243,7 +248,7 @@ def time_execution_with_do_bench_impl( return times -def time_execution_with_cpu_time( +def time_execution_with_host_time( kernel_fn: callable, args: list[Any], num_warmup: int = 3, @@ -253,8 +258,12 @@ def time_execution_with_cpu_time( device: torch.device | None = None, ) -> list[float]: """ - Time a CUDA kernel function over multiple trials using CPU side timing - [WIP] + Time a CUDA kernel function over multiple trials using Host (CPU) side timing + + This measures host-side wall clock time, E2E latency observed by host + Note that could take including Python overhead, CUDA launch/runtime costs, synchronization, all GPU work across all streams, and host OS overhaed + Hence results might be longer than device-side (CUDA event) timings + Args: kernel_fn: Function to time args: Arguments to pass to kernel_fn @@ -311,12 +320,15 @@ def time_execution_with_cpu_time( ######################################################## # Timing stats +# tools to help compute speedup and other time ######################################################### def fetch_baseline_time( level_name: str, problem_id: int, dataset: list[str], baseline_time_filepath: str ) -> dict: """ Fetch the baseline time from the time + + Note: might be better to just run the refernece using torch eager and compile sometimes """ if not os.path.exists(baseline_time_filepath): raise FileNotFoundError( From 05d408faec732ea05d1c78875e2d1f104588bf60 Mon Sep 17 00:00:00 2001 From: Pietro Date: Fri, 12 Dec 2025 05:02:36 +0000 Subject: [PATCH 06/25] run_and_check compatible --- scripts/generate_baseline_time.py | 14 ++++++++++---- src/eval.py | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/scripts/generate_baseline_time.py b/scripts/generate_baseline_time.py index 5a68ea08..0a1f608b 100644 --- a/scripts/generate_baseline_time.py +++ b/scripts/generate_baseline_time.py @@ -2,11 +2,13 @@ import numpy as np from src.eval import ( load_original_model_and_inputs, - time_execution_with_cuda_event, - get_timing_stats, set_seed, fetch_ref_arch_from_problem_id, ) +from src.timing import ( + get_timing_function, + get_timing_stats, +) from src.dataset import construct_problem_dataset_from_problem_dir from src.utils import read_file import os @@ -81,6 +83,7 @@ def measure_program_time( torch_compile_options: str="default", device: torch.device="cuda:0", verbose: bool = False, + timing_method: str = "cuda_event", ) -> dict: """ Measure the time of a KernelBench reference architecture @@ -116,8 +119,11 @@ def measure_program_time( model = model.cuda(device=device) torch.cuda.synchronize(device=device) - elapsed_times = time_execution_with_cuda_event( - model, *inputs, num_trials=num_trials, verbose=verbose, device=device + + # run chosen timing function + timing_fn = get_timing_function(timing_method) + elapsed_times = timing_fn( + model, inputs, num_trials=num_trials, verbose=verbose, device=device ) runtime_stats = get_timing_stats(elapsed_times, device=device) diff --git a/src/eval.py b/src/eval.py index 2573da9c..e117d7dc 100644 --- a/src/eval.py +++ b/src/eval.py @@ -22,7 +22,7 @@ # import cupy as cp -import utils, timing +from . import utils, timing REPO_TOP_PATH = os.path.abspath( os.path.join( From 2be968a5a1a5165af1e007eadbae59f70326fd31 Mon Sep 17 00:00:00 2001 From: Pietro Date: Fri, 12 Dec 2025 05:10:13 +0000 Subject: [PATCH 07/25] revert eval and add only necessary changes --- src/eval.py | 154 ++++++++++++++++++---------------------------------- 1 file changed, 53 insertions(+), 101 deletions(-) diff --git a/src/eval.py b/src/eval.py index e117d7dc..f157a6b7 100644 --- a/src/eval.py +++ b/src/eval.py @@ -15,13 +15,12 @@ from io import StringIO from typing import Union, Optional +import numpy as np +import requests import torch import torch.nn as nn from pydantic import BaseModel -from triton import runtime - -# import cupy as cp from . import utils, timing REPO_TOP_PATH = os.path.abspath( @@ -47,7 +46,6 @@ def fetch_ref_arch_from_problem_id(problem_id, problems, with_name=False) -> str if isinstance(problem_id, str): problem_id = int(problem_id) - # TODO: replace dataset object @Omar problem_path = problems[problem_id] # problem_path = os.path.join(REPO_ROOT_PATH, problem) @@ -60,6 +58,7 @@ def fetch_ref_arch_from_problem_id(problem_id, problems, with_name=False) -> str else: return (problem_path, ref_arch) + def fetch_ref_arch_from_level_problem_id(level, problem_id, with_name=False): PROBLEM_DIR = os.path.join(KERNEL_BENCH_PATH, "level" + str(level)) dataset = utils.construct_problem_dataset_from_problem_dir(PROBLEM_DIR) @@ -71,36 +70,6 @@ def set_seed(seed: int): # NOTE: this only sets on current cuda device torch.cuda.manual_seed(seed) - -def clear_l2_cache(device: str = "cuda"): - """ - Clear L2 Cache line by thrashing - From GPU mode reference kernel repo: - https://github.com/gpu-mode/reference-kernels/commit/7c15075a39286e88939d99d3f3a60be88b8e6223#diff-3a30a71cbf8db2badd224f4d92f9a2546925a5b522632a31d353526b7a5f3338R158-R163 - - We can improve this - TODO; should prob check device_name - """ - # don't reserve space for persisting lines - # cp.cuda.runtime.cudaDeviceSetLimit(cp.cuda.runtime.cudaLimitPersistingL2CacheSize, 0) - - # Thrash L2 cache by creating a larger dummy tensor, effectively flushing the cache - # 32 * 1024 * 1024 * 8B = 256MB - # NOTE: we can make this more adaptive based on device - # L2 cache sizes: A100=40MB, H100=50MB, H200=90MB, RTX4090=72MB, L40S=48MB, Blackwell≈192MB → overwrite >200MB to fully thrash L2 - dummy = torch.empty((32, 1024, 1024), dtype=torch.int64, device=device) - # write to tenosr with inplace fill - dummy.fill_(42) - del dummy - -def clear_l2_cache_triton(cache, device): - # cp.cuda.runtime.cudaDeviceSetLimit( - # cp.cuda.runtime.cudaLimitPersistingL2CacheSize, 0 - # ) - cache = runtime.driver.active.get_empty_cache_for_benchmark() - runtime.driver.active.clear_cache(cache) - - def get_torch_dtype_from_string(precision: str) -> torch.dtype: """ Get the torch dtype for specific precision @@ -138,8 +107,9 @@ def get_tolerance_for_precision(precision: str | torch.dtype) -> float: class KernelExecResult(BaseModel): """ - Single Kernel Execution - all the information it needs + Single Kernel Execution """ + compiled: bool = False correctness: bool = False metadata: dict = {} @@ -417,57 +387,6 @@ def _process_input_tensor(input, device, backend="cuda", precision=torch.float32 return input_tensor.to(device=device) -def load_kernel( - verbose: str, - backend: str, - custom_model_src, - context, - build_dir, - device, - metadata: dict, - ) -> tuple[Union[nn.Module, KernelExecResult, None], Optional[tempfile.NamedTemporaryFile]]: - '''KernelExecResult means that loading the kernel failed (either because of compilation or something else), ModelNew that we succesfully loaded ModelNew''' - if verbose: - print("[Eval] Loading and Compiling New Model with Custom CUDA Kernel") - - try: - os.environ["TORCH_USE_CUDA_DSA"] = "1" # compile with device side assertion - tempfile = None - - if backend.lower() in ["triton", "tilelang", "cute"]: - # Use tempfile approach for triton, tilelang, and cute - # These DSLs require proper module import for JIT decorators to work - ModelNew, tempfile = load_custom_model_with_tempfile( - custom_model_src, entry_point="ModelNew" - ) - else: - # Default CUDA backend - ModelNew = load_custom_model(custom_model_src, context, build_dir) - torch.cuda.synchronize(device=device) # not sure if this is too much - except Exception as e: - print( - f"Failed to compile custom CUDA kernel: Record as compilation failure. \nError: {e}" - ) - # TODO: add metadata for compilation error (how to we get the compilation error message?) - - if "lock" in str(e) or "No such file or directory" in str(e): - # this is a lock file error, likely due to concurrent compilation - # this does not necessarily mean the compilation failed, but we should retry - print( - f"[Eval] Lock file error during compilation, Please retry. Error: {e}" - ) - graceful_eval_cleanup(context, device, tempfile) - return None, None - else: - metadata["compilation_error_name"] = get_error_name(e) - metadata["compilation_error"] = str(e) - graceful_eval_cleanup(context, device, tempfile) - return KernelExecResult( - compiled=False, metadata=metadata - ), None - return ModelNew, tempfile - - def eval_kernel_against_ref( original_model_src: str, custom_model_src: str, @@ -551,15 +470,50 @@ def eval_kernel_against_ref( assert hasattr(original_model, "forward") if verbose: print("[Eval] Original Model Loaded") - result, tempfile = load_kernel( - verbose, backend, custom_model_src, context, build_dir, device, metadata - ) - if isinstance(result, KernelExecResult): - return result # loading the kernel failed, return the exec result - if result is None: - # lockfile / concurrent compilation: retryable failure - return None - ModelNew = result # we passed loading + + if verbose: + print("[Eval] Loading and Compiling New Model with Custom CUDA Kernel") + + # this is where compilation happens + try: + os.environ["TORCH_USE_CUDA_DSA"] = "1" # compile with device side assertion + tempfile = None + # add hash for later to distinguish between multi-turn kernels + + backend_lower = backend.lower() + if backend_lower in ["triton", "tilelang", "cute"]: + # Use tempfile approach for triton, tilelang, and cute + # These DSLs require proper module import for JIT decorators to work + ModelNew, tempfile = load_custom_model_with_tempfile( + custom_model_src, entry_point="ModelNew" + ) + else: + # Default CUDA backend + ModelNew = load_custom_model(custom_model_src, context, build_dir) + torch.cuda.synchronize(device=device) # not sure if this is too much + except Exception as e: + print( + f"Failed to compile custom CUDA kernel: Record as compilation failure. \nError: {e}" + ) + # TODO: add metadata for compilation error (how to we get the compilation error message?) + + if "lock" in str(e) or "No such file or directory" in str(e): + # this is a lock file error, likely due to concurrent compilation + # this does not necessarily mean the compilation failed, but we should retry + print( + f"[Eval] Lock file error during compilation, Please retry. Error: {e}" + ) + graceful_eval_cleanup(context, device, tempfile) + return None + else: + metadata["compilation_error_name"] = get_error_name(e) + metadata["compilation_error"] = e + graceful_eval_cleanup(context, device, tempfile) + return KernelExecResult( + compiled=False, metadata=metadata + ) # skip further steps + + # at this point we passed compilation try: with torch.no_grad(): set_seed(seed_num) # set seed for reproducible weights @@ -582,7 +536,7 @@ def eval_kernel_against_ref( compiled=True, correctness=False, metadata=metadata ) # skip further steps - # kernel_exec_result = None + kernel_exec_result = None # Check Correctness if verbose: @@ -624,9 +578,9 @@ def eval_kernel_against_ref( model_new = custom_model.to(device=device, dtype=precision) torch.cuda.synchronize(device=device) - # TODO: replace functions from timing based on we choose - # we should pass in which timing method you wanna do - elapsed_times = timing.time_execution_with_cuda_event( + # support multiple timing backend + timing_fn = timing.get_timing_function("cuda_event") + elapsed_times = timing_fn( model_new, inputs, num_trials=num_perf_trials, @@ -673,7 +627,6 @@ def register_and_format_exception( return metadata - def run_and_check_correctness( original_model_instance: nn.Module, new_model_instance: nn.Module, @@ -857,7 +810,6 @@ def convert_to_serializable(obj): - # if __name__ == "__main__": # fetch_kernel_from_database("kernelbench_prompt_v2_level_2", 1, 1, "http://localhost:9091") # print(fetch_ref_arch_from_level_problem_id("2", 1, with_name=True)) From 936f22149f5918496a980a08ac62bb94f6d07807 Mon Sep 17 00:00:00 2001 From: Simon Guo Date: Mon, 15 Dec 2025 03:12:42 +0000 Subject: [PATCH 08/25] top_level eval entry point to set timing_method --- scripts/eval_from_generations.py | 6 ++++++ scripts/generate_and_eval_single_sample.py | 2 ++ .../generate_and_eval_single_sample_modal.py | 6 ++++-- scripts/run_and_check.py | 20 +++++++++++++++---- src/eval.py | 9 +++++++-- 5 files changed, 35 insertions(+), 8 deletions(-) diff --git a/scripts/eval_from_generations.py b/scripts/eval_from_generations.py index 2e39e3be..b28a3be0 100644 --- a/scripts/eval_from_generations.py +++ b/scripts/eval_from_generations.py @@ -113,6 +113,7 @@ def __init__(self): self.num_perf_trials = 100 self.timeout = 180 # in seconds self.measure_performance = True + self.timing_method = "cuda_event" # Eval Flow setting # To speedup evaluation, you can start building the kernel on CPU on disk as cache @@ -173,6 +174,7 @@ def evaluate_single_sample_modal( num_correct_trials: int = 5, num_perf_trials: int = 100, measure_performance: bool = True, + timing_method: str = "cuda_event", verbose: bool = False, backend: str = "cuda", precision: str = "fp32", @@ -212,6 +214,7 @@ def evaluate_single_sample_modal( original_model_src=ref_arch_src, custom_model_src=kernel_src, measure_performance=measure_performance, + timing_method=timing_method, verbose=verbose, num_correct_trials=num_correct_trials, num_perf_trials=num_perf_trials, @@ -324,6 +327,7 @@ def evaluate_single_sample( original_model_src=ref_arch_src, custom_model_src=kernel_src, measure_performance=configs.measure_performance, + timing_method=configs.timing_method, verbose=configs.verbose, num_correct_trials=configs.num_correct_trials, num_perf_trials=configs.num_perf_trials, @@ -384,6 +388,7 @@ def evaluate_single_sample_modal_direct( num_correct_trials=configs.num_correct_trials, num_perf_trials=configs.num_perf_trials, measure_performance=configs.measure_performance, + timing_method=configs.timing_method, verbose=configs.verbose, ) return eval_result @@ -502,6 +507,7 @@ def batch_eval_modal( num_correct_trials=config.num_correct_trials, num_perf_trials=config.num_perf_trials, measure_performance=config.measure_performance, + timing_method=config.timing_method, verbose=config.verbose, backend=config.backend, precision=config.precision, diff --git a/scripts/generate_and_eval_single_sample.py b/scripts/generate_and_eval_single_sample.py index 2b2d5301..2e110932 100644 --- a/scripts/generate_and_eval_single_sample.py +++ b/scripts/generate_and_eval_single_sample.py @@ -73,6 +73,7 @@ def __init__(self): self.log_eval_result = False self.backend = "cuda" + self.timing_method = "cuda_event" # see timing.py # Prompt construction self.prompt_option = "one_shot" # choices: zero_shot, one_shot, few_shot @@ -267,6 +268,7 @@ def main(config: EvalConfig): custom_kernel, verbose=config.verbose, measure_performance=True, + timing_method=config.timing_method, num_correct_trials=5, num_perf_trials=100, backend=config.backend, diff --git a/scripts/generate_and_eval_single_sample_modal.py b/scripts/generate_and_eval_single_sample_modal.py index 7628e0bf..9dee518a 100644 --- a/scripts/generate_and_eval_single_sample_modal.py +++ b/scripts/generate_and_eval_single_sample_modal.py @@ -75,6 +75,7 @@ def __init__(self): self.log_eval_result = False self.backend = "cuda" + self.timing_method = "cuda_event" # see timing.py # Prompt generation settings self.prompt_option = "one_shot" # zero_shot, one_shot, few_shot self.include_hardware_info = False @@ -110,7 +111,7 @@ def __repr__(self): class EvalFunc: @modal.method() - def eval_single_sample_modal(self, ref_arch_src, custom_kernel, verbose, gpu_arch, backend, precision): + def eval_single_sample_modal(self, ref_arch_src, custom_kernel, verbose, gpu_arch, backend, precision, timing_method): # 3. Evaluate Kernel # NOTE: no need to wrap around process here as only a single sample # see batch eval for examples of process isolation @@ -121,6 +122,7 @@ def eval_single_sample_modal(self, ref_arch_src, custom_kernel, verbose, gpu_arc modal_set_gpu_arch(gpu_arch) return eval_kernel_against_ref( ref_arch_src, custom_kernel, verbose=verbose, measure_performance=True, + timing_method=timing_method, num_correct_trials=5, num_perf_trials=100, backend=backend, precision=get_torch_dtype_from_string(precision) ) @@ -274,7 +276,7 @@ def main(config: EvalConfig): with app.run(): kernel_exec_result = EvalFunc.with_options(gpu=config.gpu)().eval_single_sample_modal.remote( - ref_arch_src, custom_kernel, config.verbose, gpu_arch_mapping[config.gpu], config.backend, config.precision + ref_arch_src, custom_kernel, config.verbose, gpu_arch_mapping[config.gpu], config.backend, config.precision, config.timing_method ) print(f"Evaluation result for level {config.level} problem {config.problem_id}:\n{kernel_exec_result}") diff --git a/scripts/run_and_check.py b/scripts/run_and_check.py index 316b96ee..e0492938 100644 --- a/scripts/run_and_check.py +++ b/scripts/run_and_check.py @@ -57,6 +57,8 @@ Usage: 1. PyTorch reference is a local file (local eval) python3 scripts/run_and_check.py ref_origin=local ref_arch_src_path=src/prompts/model_ex_add.py kernel_src_path=src/prompts/model_new_ex_add.py eval_mode=local +python3 scripts/run_and_check.py ref_origin=local ref_arch_src_path=src/prompts/few_shot/model_ex_tiled_matmul.py kernel_src_path=src/prompts/few_shot/model_new_ex_tiled_matmul.py eval_mode=local + 2. PyTorch reference is a kernelbench problem (local eval) python3 scripts/run_and_check.py ref_origin=kernelbench level= problem_id= kernel_src_path= eval_mode=local @@ -101,6 +103,7 @@ def __init__(self): # verbose logging self.verbose = False self.measure_performance = True + self.timing_method = "cuda_event" # see timing.py self.build_dir_prefix = "" # if you want to specify a custom build directory self.clear_cache = False # TODO @@ -128,18 +131,23 @@ def evaluate_single_sample_src(ref_arch_src: str, kernel_src: str, configs: dict num_perf_trials = configs["num_perf_trials"] verbose = configs["verbose"] measure_performance = configs["measure_performance"] + timing_method = configs["timing_method"] + backend = configs["backend"] + precision = kernel_eval.get_torch_dtype_from_string(configs["precision"]) + try: eval_result = kernel_eval.eval_kernel_against_ref( original_model_src=ref_arch_src, custom_model_src=kernel_src, measure_performance=measure_performance, + timing_method=timing_method, verbose=verbose, num_correct_trials=num_correct_trials, num_perf_trials=num_perf_trials, build_dir=build_dir, device=device, - backend=configs["backend"], - precision=kernel_eval.get_torch_dtype_from_string(configs["precision"]) + backend=backend, + precision=precision ) return eval_result except Exception as e: @@ -180,17 +188,21 @@ def evaluate_single_sample_src_modal(self, ref_arch_src: str, kernel_src: str, c num_perf_trials = configs["num_perf_trials"] verbose = configs["verbose"] measure_performance = configs["measure_performance"] + timing_method = configs["timing_method"] + backend = configs["backend"] + precision = kernel_eval.get_torch_dtype_from_string(configs["precision"]) eval_result = eval_kernel_against_ref( original_model_src=ref_arch_src, custom_model_src=kernel_src, measure_performance=measure_performance, + timing_method=timing_method, verbose=verbose, num_correct_trials=num_correct_trials, num_perf_trials=num_perf_trials, device=device, - backend=configs["backend"], - precision=get_torch_dtype_from_string(configs["precision"]) + backend=backend, + precision=precision ) return eval_result diff --git a/src/eval.py b/src/eval.py index f157a6b7..5f1fe8d8 100644 --- a/src/eval.py +++ b/src/eval.py @@ -393,8 +393,9 @@ def eval_kernel_against_ref( seed_num: int = 42, num_correct_trials: int = 1, num_perf_trials: int = 10, - verbose: bool = False, measure_performance: bool = False, + timing_method: str = "cuda_event", # see timing.py + verbose: bool = False, build_dir: os.PathLike = None, device: Union[torch.device, int] = ( torch.cuda.current_device() if torch.cuda.is_available() else None @@ -405,11 +406,15 @@ def eval_kernel_against_ref( """ Evaluate the custom kernel against the original model + NOTE: we are thinking about refactor this to be more modularized + and we can add more checks as our other ongiong PRs are working on + num_correct_trials: number of trials to initialize different random inputs; correctness pass only if all trials pass num_perf_trials: run the evalutation many times to take the average device: GPU (cuda) device to run the evalutation on backend: str, one of 'cuda', 'triton', 'tilelang', or 'cute' precision: torch.dtype for computation (note: tilelang only supports fp16) + timing_method: str, method to time kernel, see timing.py for more details """ # TODO: check device is busy assert torch.cuda.is_available(), "CUDA is not available, cannot run Eval" @@ -579,7 +584,7 @@ def eval_kernel_against_ref( torch.cuda.synchronize(device=device) # support multiple timing backend - timing_fn = timing.get_timing_function("cuda_event") + timing_fn = timing.get_timing_function(timing_method) elapsed_times = timing_fn( model_new, inputs, From 2c36572c71744a090c40194bf24d0234ded3eb68 Mon Sep 17 00:00:00 2001 From: Simon Guo Date: Mon, 15 Dec 2025 03:47:15 +0000 Subject: [PATCH 09/25] remove discard_first for cuda event and updated documentation --- src/timing.py | 121 ++++++++++++++++++++--------- src/unit_tests/test_eval_timing.py | 20 +++-- 2 files changed, 98 insertions(+), 43 deletions(-) diff --git a/src/timing.py b/src/timing.py index 56cefd09..d07dd54f 100644 --- a/src/timing.py +++ b/src/timing.py @@ -5,18 +5,23 @@ from typing import Any import os + # we leverage triton's testing functionality for some timing methods from triton import runtime as triton_runtime from triton import testing as triton_testing ################################################################################ -# Performance Eval +# timing.py +# Various timing methods and utilities for performance evaluation +# please make a PR if you have suggestions! + +# Try them out at src/unit_tests/test_eval_timing.py ################################################################################ def clear_l2_cache(device: str = "cuda"): """ - Clear L2 Cache line by thrashing - From GPU mode reference kernel repo: + Clear L2 Cache line by thrashing with a large tensor + Acknowledge GPU mode reference kernel repo: https://github.com/gpu-mode/reference-kernels/commit/7c15075a39286e88939d99d3f3a60be88b8e6223#diff-3a30a71cbf8db2badd224f4d92f9a2546925a5b522632a31d353526b7a5f3338R158-R163 """ # don't reserve space for persisting lines @@ -27,7 +32,7 @@ def clear_l2_cache(device: str = "cuda"): # NOTE: we can make this more adaptive based on device # L2 cache sizes: A100=40MB, H100=50MB, H200=90MB, RTX4090=72MB, L40S=48MB, Blackwell≈192MB → overwrite >200MB to fully thrash L2 dummy = torch.empty((32, 1024, 1024), dtype=torch.int64, device=device) - # write to tenosr with inplace fill + # write to tensor with inplace fill dummy.fill_(42) del dummy @@ -45,17 +50,34 @@ def get_timing_function( method: str = "cuda_event", # by default ) -> callable: """ - Get the timing function based on different timing methods + Get timing function by method name. + + Available methods: + - "cuda_event": torch.cuda.event timing (default, explicit trial control) + - "do_bench": Use triton's do_bench (adaptive trial count based on time budget) + - "do_bench_impl": Mirrors Triton's do_bench implementation (explicit control) + - "host_time": Host side wall-clock timing (might include overhead) + + Args: + method: Name of timing method to use + + Returns: + Timing function with signature (kernel_fn, args, num_warmup, num_trials, + discard_first, verbose, device) -> list[float] """ print( f"[Profiling] Using timing method: {method}" ) + # NOTE: here are all the timing methods we supporting for now match method: case "cuda_event": return time_execution_with_cuda_event - case "do_bench_interface": + case "do_bench": + # caveat: just using do_bench as it is + # do not have precise control over number of trials return time_execution_with_do_bench_interface case "do_bench_impl": + # do_bench equivalent implementations for transparency and control return time_execution_with_do_bench_impl case "host_time": return time_execution_with_host_time @@ -64,10 +86,8 @@ def get_timing_function( raise ValueError(f"Unsupported timing method: {method}") """ -Kernel Timing Functions [Revamp WIP] -TODO: see our detailed study on how to time kernel execution and benchmarking guide -we implement a few ways to do timing studies -These should be implemnted to be agnostic whether the modules are rather Model (reference kernel) or ModelNew (generated kernel) +Kernel Timing Functions +NOTE: we have a WIP blogpost on this topic covering the various timing approaches """ @@ -76,25 +96,26 @@ def time_execution_with_cuda_event( args: list[Any], num_warmup: int = 3, num_trials: int = 10, - discard_first: int = 1, + discard_first: int = 1, # not used verbose: bool = True, device: torch.device = None, ) -> list[float]: """ - Time a CUDA kernel function over multiple trials using torch.cuda.Event - The first version of KenrelBench used this for evaluation. + Time a CUDA kernel function over multiple trials using torch.cuda.event + The first version of KernelBench used this for evaluation. We care about cold cache performance here. Args: kernel_fn: Function to time - *args: Arguments to pass to kernel_fn + args: Arguments to pass to kernel_fn + num_warmup: Number of warmup iterations before timing num_trials: Number of timing trials to run + discard_first: not used verbose: Whether to print per-trial timing info - device: CUDA device to use, if None, use current device + device: CUDA device to use, defaults to current device - TODO: double check this with team Returns: - List of elapsed times in milliseconds + List of elapsed times in milliseconds (length = num_trials) """ if device is None: if verbose: @@ -115,7 +136,7 @@ def time_execution_with_cuda_event( elapsed_times: list[float] = [] # in ms # Timing trials - for trial in range(num_trials + discard_first): + for trial in range(num_trials): torch.cuda.synchronize(device=device) # block on all streams # create event marker default is not interprocess @@ -136,11 +157,9 @@ def time_execution_with_cuda_event( # Calculate the elapsed time in milliseconds elapsed_time_ms = start_event.elapsed_time(end_event) - if trial >= discard_first: - if verbose: - logical_idx = trial - discard_first + 1 - print(f"Trial {logical_idx}: {elapsed_time_ms:.3g} ms") - elapsed_times.append(elapsed_time_ms) + if verbose: + print(f"Trial {trial + 1}: {elapsed_time_ms:.3g} ms") + elapsed_times.append(elapsed_time_ms) return elapsed_times @@ -148,17 +167,34 @@ def time_execution_with_cuda_event( def time_execution_with_do_bench_interface( kernel_fn: callable, args: list[Any], - # this is different for triton do_bench + # Not used, as triton do_bench handles adaptive trials num_warmup: int = 3, num_trials: int = 10, - discard_first: int = 1, # not used yet + discard_first: int = 1, # not used here verbose: bool = True, device: torch.device | None = None) -> list[float]: """ - Using triton's default do_bench as it is - Note we don't set num_warmup and num_trials, and we use warmup 25 ms and repetition time 100 ms with Triton's default values - See doc: https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html - Benchmark the runtime of the provided function. By default, return the median runtime of fn along with the 20-th and 80-th performance percentile. + Wrapper around Triton's do_bench for kernel timing. + + Uses Triton's adaptive benchmarking with fixed time budgets (warmup=25ms, rep=100ms) [Triton do_bench default]. + The number of trials is determined automatically based on kernel runtime. + + Note: num_warmup, num_trials, discard_first are ignored - included only for + API compatibility with other timing functions. + + Args: + kernel_fn: Function to time + args: Arguments to pass to kernel_fn + num_warmup: (ignored) Triton controls warmup + num_trials: (ignored) Triton controls trial count + discard_first: (ignored) Not used + verbose: Whether to print timing info + device: CUDA device to use + + Returns: + List of elapsed times in milliseconds + + See: https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html """ do_bench_fn = lambda : kernel_fn(*args) # wrap function with arguments return triton_testing.do_bench(fn=do_bench_fn, @@ -174,7 +210,7 @@ def time_execution_with_do_bench_impl( args: list[Any], num_warmup: int = 3, num_trials: int = 10, - discard_first: int = 1, # not used yet + discard_first: int = 1, # not used here verbose: bool = True, device: torch.device | None = None) -> list[float]: """ @@ -184,14 +220,27 @@ def time_execution_with_do_bench_impl( Note we duplicate triton's implementation and modify / comment out parts to use num_warmup and num_trials that explicitly follows what user define here - instead of do_bench's version that computes how many times to run warmup and profile based on total warmup and repetition time + instead of do_bench's version that computes how many times to run warmup and + profile based on total warmup and repetition time + + We commented out unused parts and kept only what's needed for kernelbench timing eval + Args: + kernel_fn: Function to time + args: Arguments to pass to kernel_fn + num_warmup: Number of warmup iterations + num_trials: Number of timing trials + discard_first: (not used) Trials to discard + verbose: Whether to print timing info + device: CUDA device to use, defaults to current device + Returns: + List of elapsed times in milliseconds (length = num_trials) """ - device = torch.cuda.current_device() if device is not None else device + device = device if device is not None else torch.cuda.current_device() if verbose: print(f"Using do_bench to evaluate kernel on {device}") - # speicfy device interface (supports both nvidia and amd) + # specify device interface (supports both nvidia and amd) # under the hood, di is torch.cuda (amd uses a cuda compatible interface) di = triton_runtime.driver.active.get_device_interface() @@ -253,7 +302,7 @@ def time_execution_with_host_time( args: list[Any], num_warmup: int = 3, num_trials: int = 10, - discard_first: int = 1, + discard_first: int = 1, # to reduce impact of initialization overhead verbose: bool = True, device: torch.device | None = None, ) -> list[float]: @@ -268,13 +317,12 @@ def time_execution_with_host_time( kernel_fn: Function to time args: Arguments to pass to kernel_fn num_trials: Number of timing trials to run + discard_first: Number of first few trials to discard (due to some initialization overhead) verbose: Whether to print per-trial timing info device: CUDA device to use, if None, use current device Returns: List of elapsed times in milliseconds - - Not recommended: """ if device is None: if verbose: @@ -329,6 +377,7 @@ def fetch_baseline_time( Fetch the baseline time from the time Note: might be better to just run the refernece using torch eager and compile sometimes + Will add this as a functionality for eval revamp """ if not os.path.exists(baseline_time_filepath): raise FileNotFoundError( diff --git a/src/unit_tests/test_eval_timing.py b/src/unit_tests/test_eval_timing.py index 24d0faf2..b212bf78 100644 --- a/src/unit_tests/test_eval_timing.py +++ b/src/unit_tests/test_eval_timing.py @@ -37,12 +37,14 @@ def _run_timing_smoke_test_matmul(timing_func_name:str, device:str="cuda"): pytest.skip("CUDA not available, skipping timing tests") # Create simple test matrices - size = 512 - a = torch.randn(size, size, device=device) - b = torch.randn(size, size, device=device) + M = 2048 + N = 2048 + K = 2048 + a = torch.randn(M, K, device=device) + b = torch.randn(K, N, device=device) num_warmup = 5 - num_trials = 5 + num_trials = 100 # Define the kernel function to time def matmul_kernel(a, b): @@ -69,10 +71,14 @@ def matmul_kernel(a, b): print(stats) -timing_methods = ["cuda_event", "cpu_time", "do_bench_interface", "do_bench_impl"] +# test all currently available timing methods +def run_all_timing_tests(): + timing_methods = ["cuda_event", "host_time", "do_bench", "do_bench_impl"] -for timing_method in timing_methods: - _run_timing_smoke_test_matmul(timing_method) + for timing_method in timing_methods: + _run_timing_smoke_test_matmul(timing_method) + +run_all_timing_tests() From 4909b1dbdde3021ff3018425cefd27c638e75049 Mon Sep 17 00:00:00 2001 From: Simon Guo Date: Mon, 15 Dec 2025 04:11:33 +0000 Subject: [PATCH 10/25] add discard_first for cuda_event --- src/timing.py | 20 ++++++++++++-------- src/unit_tests/test_eval_timing.py | 5 ++++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/timing.py b/src/timing.py index d07dd54f..2d422711 100644 --- a/src/timing.py +++ b/src/timing.py @@ -96,7 +96,7 @@ def time_execution_with_cuda_event( args: list[Any], num_warmup: int = 3, num_trials: int = 10, - discard_first: int = 1, # not used + discard_first: int = 1, # set to 0 to disable verbose: bool = True, device: torch.device = None, ) -> list[float]: @@ -110,7 +110,7 @@ def time_execution_with_cuda_event( args: Arguments to pass to kernel_fn num_warmup: Number of warmup iterations before timing num_trials: Number of timing trials to run - discard_first: not used + discard_first: Number of first trials to discard, for consistency with host_time, set to 0 to disable verbose: Whether to print per-trial timing info device: CUDA device to use, defaults to current device @@ -126,17 +126,17 @@ def time_execution_with_cuda_event( for _ in range(num_warmup): kernel_fn(*args) torch.cuda.synchronize(device=device) - + # note this only release PyTorch’s CUDA caching allocator, not necessarily clearing device's L2 cache torch.cuda.empty_cache() - + print(f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" ) elapsed_times: list[float] = [] # in ms # Timing trials - for trial in range(num_trials): + for trial in range(num_trials + discard_first): torch.cuda.synchronize(device=device) # block on all streams # create event marker default is not interprocess @@ -157,9 +157,13 @@ def time_execution_with_cuda_event( # Calculate the elapsed time in milliseconds elapsed_time_ms = start_event.elapsed_time(end_event) - if verbose: - print(f"Trial {trial + 1}: {elapsed_time_ms:.3g} ms") - elapsed_times.append(elapsed_time_ms) + + if trial >= discard_first: + if verbose: + logical_idx = trial - discard_first + 1 + print(f"Trial {logical_idx}: {elapsed_time_ms:.3g} ms") + elapsed_times.append(elapsed_time_ms) + return elapsed_times diff --git a/src/unit_tests/test_eval_timing.py b/src/unit_tests/test_eval_timing.py index b212bf78..24efe8ac 100644 --- a/src/unit_tests/test_eval_timing.py +++ b/src/unit_tests/test_eval_timing.py @@ -61,9 +61,12 @@ def matmul_kernel(a, b): # Validate results assert isinstance(elapsed_times, list), "Expected list of elapsed times" + + # disabled this check as do_bench does not use num_trials # assert len(elapsed_times) == num_trials, f"Expected {num_trials} timing results, got {len(elapsed_times)}" assert all(isinstance(t, float) for t in elapsed_times), "All timing results should be floats" assert all(t > 0 for t in elapsed_times), "All timing results should be positive" + # DEBUG print times # print(f"smoke test matmul elapsed times with {timing_func_name} (in ms): {elapsed_times}") stats = timing.get_timing_stats(elapsed_times, device=device) @@ -74,7 +77,7 @@ def matmul_kernel(a, b): # test all currently available timing methods def run_all_timing_tests(): timing_methods = ["cuda_event", "host_time", "do_bench", "do_bench_impl"] - + # timing_methods = ["cuda_event", "do_bench_impl"] for timing_method in timing_methods: _run_timing_smoke_test_matmul(timing_method) From 6c92786b9248370b4a165cb6d2e638997082a8ee Mon Sep 17 00:00:00 2001 From: Simon Guo Date: Tue, 16 Dec 2025 01:15:22 +0000 Subject: [PATCH 11/25] add device context for profile on particular device --- .../generate_and_eval_single_sample_modal.py | 1 - src/timing.py | 200 ++++++++++-------- src/unit_tests/test_eval_timing.py | 10 +- 3 files changed, 116 insertions(+), 95 deletions(-) diff --git a/scripts/generate_and_eval_single_sample_modal.py b/scripts/generate_and_eval_single_sample_modal.py index 9dee518a..f41ba95f 100644 --- a/scripts/generate_and_eval_single_sample_modal.py +++ b/scripts/generate_and_eval_single_sample_modal.py @@ -14,7 +14,6 @@ from datasets import load_dataset #from src.dataset import construct_kernelbench_dataset -from src.eval import eval_kernel_against_ref from src.prompt_constructor_toml import get_prompt_for_backend, get_custom_prompt from src.utils import extract_first_code, query_server, set_gpu_arch, read_file, create_inference_server_from_presets diff --git a/src/timing.py b/src/timing.py index 2d422711..8269feed 100644 --- a/src/timing.py +++ b/src/timing.py @@ -105,6 +105,10 @@ def time_execution_with_cuda_event( The first version of KernelBench used this for evaluation. We care about cold cache performance here. + Note: this version does not guard against adverserial cuda streams yet. + It assumes computation is done on the current stream for current device. + Stay tuned for future PRs. + Args: kernel_fn: Function to time args: Arguments to pass to kernel_fn @@ -122,47 +126,49 @@ def time_execution_with_cuda_event( print(f"Using current device: {torch.cuda.current_device()}") device = torch.cuda.current_device() - # Warm ups - for _ in range(num_warmup): - kernel_fn(*args) - torch.cuda.synchronize(device=device) - - # note this only release PyTorch’s CUDA caching allocator, not necessarily clearing device's L2 cache - torch.cuda.empty_cache() - - print(f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" - ) - - elapsed_times: list[float] = [] # in ms - - # Timing trials - for trial in range(num_trials + discard_first): - torch.cuda.synchronize(device=device) # block on all streams - - # create event marker default is not interprocess - start_event = torch.cuda.Event(enable_timing=True) - end_event = torch.cuda.Event(enable_timing=True) + with torch.cuda.device(device): - clear_l2_cache() # measuring cold cache performance + # Warm ups + for _ in range(num_warmup): + kernel_fn(*args) + torch.cuda.synchronize(device=device) - # note cuda events mark event on current stream - start_event.record() - _ = kernel_fn(*args) - end_event.record() - - # waits for all streams on that device - # though it is important to note the events only record time between on current stream - # TODO: find ways to check hacks by launching work on additional stream - torch.cuda.synchronize(device=device) - - # Calculate the elapsed time in milliseconds - elapsed_time_ms = start_event.elapsed_time(end_event) + # note this only release PyTorch’s CUDA caching allocator, not necessarily clearing device's L2 cache + torch.cuda.empty_cache() - if trial >= discard_first: - if verbose: - logical_idx = trial - discard_first + 1 - print(f"Trial {logical_idx}: {elapsed_time_ms:.3g} ms") - elapsed_times.append(elapsed_time_ms) + print(f"[Profiling] Using device: {device} {torch.cuda.get_device_name(device)}, warm up {num_warmup}, trials {num_trials}" + ) + + elapsed_times: list[float] = [] # in ms + + # Timing trials + for trial in range(num_trials + discard_first): + torch.cuda.synchronize(device=device) # block on all streams + + # create event marker default is not interprocess + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + clear_l2_cache(device=device) # measuring cold cache performance + + # note cuda events mark event on current stream + start_event.record() + _ = kernel_fn(*args) + end_event.record() + + # waits for all streams on that device + # though it is important to note the events only record time between on current stream + # TODO: find ways to check hacks by launching work on additional stream + torch.cuda.synchronize(device=device) + + # Calculate the elapsed time in milliseconds + elapsed_time_ms = start_event.elapsed_time(end_event) + + if trial >= discard_first: + if verbose: + logical_idx = trial - discard_first + 1 + print(f"Trial {logical_idx}: {elapsed_time_ms:.3g} ms") + elapsed_times.append(elapsed_time_ms) return elapsed_times @@ -200,8 +206,15 @@ def time_execution_with_do_bench_interface( See: https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html """ + if device is None: + if verbose: + print(f"Using current device: {torch.cuda.current_device()}") + device = torch.cuda.current_device() + + do_bench_fn = lambda : kernel_fn(*args) # wrap function with arguments - return triton_testing.do_bench(fn=do_bench_fn, + with torch.cuda.device(device): + return triton_testing.do_bench(fn=do_bench_fn, warmup=25, rep=100, grad_to_none=None, @@ -244,58 +257,63 @@ def time_execution_with_do_bench_impl( if verbose: print(f"Using do_bench to evaluate kernel on {device}") - # specify device interface (supports both nvidia and amd) - # under the hood, di is torch.cuda (amd uses a cuda compatible interface) - di = triton_runtime.driver.active.get_device_interface() - - kernel_fn(*args) - di.synchronize(device=device) - - # clear l2 cache - cache = triton_runtime.driver.active.get_empty_cache_for_benchmark() - - # do_bench Estimate the runtime of the function - # Here we are not using it not needed since now the warmup and repeat steps are set by the user) - # start_event = di.Event(enable_timing=True) - # end_event = di.Event(enable_timing=True) - # start_event.record() - # for _ in range(5): - # triton_runtime.driver.active.clear_cache(cache) - # kernel_fn(*args) - # end_event.record() - # di.synchronize() - # estimate_ms = start_event.elapsed_time(end_event) / 5 - - # compute number of warmup and repeat - # Change - # n_warmup = max(1, int(warmup / estimate_ms)) - # n_repeat = max(1, int(rep / estimate_ms)) - # n_warmup = warmup - # n_repeat = rep - # end of change - start_event = [di.Event(enable_timing=True) for i in range(num_trials)] - end_event = [di.Event(enable_timing=True) for i in range(num_trials)] - # Warm-up - for _ in range(num_warmup): - kernel_fn(*args) - # Benchmark - for i in range(num_trials): - # All KernelBench functions are forward passes, so we don't need to reset gradients - # we don't want `fn` to accumulate gradient values - # if it contains a backward pass. So we clear the - # provided gradients - # if grad_to_none is not None: - # for x in grad_to_none: - # x.grad = None - - # we clear the L2 cache before each run - triton_runtime.driver.active.clear_cache(cache) - # record time of `fn` - start_event[i].record() + + # added to constraint to this device + with torch.cuda.device(device): + + # specify device interface (supports both nvidia and amd) + # under the hood, di is torch.cuda (amd uses a cuda compatible interface) + di = triton_runtime.driver.active.get_device_interface() + kernel_fn(*args) - end_event[i].record() - # Record clocks - di.synchronize(device=device) + di.synchronize(device=device) + + # clear l2 cache + cache = triton_runtime.driver.active.get_empty_cache_for_benchmark() + + # do_bench Estimate the runtime of the function + # Here we are not using it not needed since now the warmup and repeat steps are set by the user) + # start_event = di.Event(enable_timing=True) + # end_event = di.Event(enable_timing=True) + # start_event.record() + # for _ in range(5): + # triton_runtime.driver.active.clear_cache(cache) + # kernel_fn(*args) + # end_event.record() + # di.synchronize() + # estimate_ms = start_event.elapsed_time(end_event) / 5 + + # compute number of warmup and repeat + # Change + # n_warmup = max(1, int(warmup / estimate_ms)) + # n_repeat = max(1, int(rep / estimate_ms)) + # n_warmup = warmup + # n_repeat = rep + # end of change + start_event = [di.Event(enable_timing=True) for i in range(num_trials)] + end_event = [di.Event(enable_timing=True) for i in range(num_trials)] + # Warm-up + for _ in range(num_warmup): + kernel_fn(*args) + # Benchmark + for i in range(num_trials): + # All KernelBench functions are forward passes, so we don't need to reset gradients + # we don't want `fn` to accumulate gradient values + # if it contains a backward pass. So we clear the + # provided gradients + # if grad_to_none is not None: + # for x in grad_to_none: + # x.grad = None + + # we clear the L2 cache before each run + triton_runtime.driver.active.clear_cache(cache) + # record time of `fn` + start_event[i].record() + kernel_fn(*args) + end_event[i].record() + # Record clocks + di.synchronize(device=device) + if verbose: print('Done with do_bench evaluation') times = [s.elapsed_time(e) for s, e in zip(start_event, end_event)] return times @@ -350,7 +368,7 @@ def time_execution_with_host_time( torch.cuda.synchronize(device=device) # focus on cold_cache performance - clear_l2_cache() + clear_l2_cache(device=device) # CPU-side wall clock time using perf_counter (high-resolution timer) start_time = time.perf_counter() diff --git a/src/unit_tests/test_eval_timing.py b/src/unit_tests/test_eval_timing.py index 24efe8ac..07fca713 100644 --- a/src/unit_tests/test_eval_timing.py +++ b/src/unit_tests/test_eval_timing.py @@ -57,6 +57,7 @@ def matmul_kernel(a, b): num_warmup=num_warmup, num_trials=num_trials, verbose=False, + device=device ) # Validate results @@ -75,13 +76,16 @@ def matmul_kernel(a, b): # test all currently available timing methods -def run_all_timing_tests(): +def run_all_timing_tests(device="cuda"): timing_methods = ["cuda_event", "host_time", "do_bench", "do_bench_impl"] # timing_methods = ["cuda_event", "do_bench_impl"] for timing_method in timing_methods: - _run_timing_smoke_test_matmul(timing_method) + _run_timing_smoke_test_matmul(timing_method, device=device) -run_all_timing_tests() + + +test_device = torch.device("cuda:5") +run_all_timing_tests(test_device) From 8a165d67271cd89bd29b8a2add808155d9d306f1 Mon Sep 17 00:00:00 2001 From: Pietro Date: Tue, 16 Dec 2025 01:22:22 +0000 Subject: [PATCH 12/25] nit fix ready for merge --- src/unit_tests/test_eval_timing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unit_tests/test_eval_timing.py b/src/unit_tests/test_eval_timing.py index 07fca713..84921a37 100644 --- a/src/unit_tests/test_eval_timing.py +++ b/src/unit_tests/test_eval_timing.py @@ -26,7 +26,7 @@ def _run_timing_smoke_test_matmul(timing_func_name:str, device:str="cuda"): """ Scaffold function for timing smoke tests. - Smoke test for using 512x512 matmul. + Smoke test for using 2048x2048x2048 matmul with 5 warmup and 100 trials. Args: timing_fn: The timing function to test From c063b8127fd6b1b1825b38344bfe7ba4a378604e Mon Sep 17 00:00:00 2001 From: Pietro Date: Tue, 16 Dec 2025 01:33:32 +0000 Subject: [PATCH 13/25] type annotation for device --- src/timing.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/timing.py b/src/timing.py index 8269feed..8a36522b 100644 --- a/src/timing.py +++ b/src/timing.py @@ -18,7 +18,7 @@ # Try them out at src/unit_tests/test_eval_timing.py ################################################################################ -def clear_l2_cache(device: str = "cuda"): +def clear_l2_cache(device: torch.device | str = "cuda"): """ Clear L2 Cache line by thrashing with a large tensor Acknowledge GPU mode reference kernel repo: @@ -150,7 +150,7 @@ def time_execution_with_cuda_event( end_event = torch.cuda.Event(enable_timing=True) clear_l2_cache(device=device) # measuring cold cache performance - + # note cuda events mark event on current stream start_event.record() _ = kernel_fn(*args) @@ -295,6 +295,8 @@ def time_execution_with_do_bench_impl( # Warm-up for _ in range(num_warmup): kernel_fn(*args) + di.synchronize(device=device) + # Benchmark for i in range(num_trials): # All KernelBench functions are forward passes, so we don't need to reset gradients @@ -313,9 +315,9 @@ def time_execution_with_do_bench_impl( end_event[i].record() # Record clocks di.synchronize(device=device) - + times = [s.elapsed_time(e) for s, e in zip(start_event, end_event)] + if verbose: print('Done with do_bench evaluation') - times = [s.elapsed_time(e) for s, e in zip(start_event, end_event)] return times From a7af124e1e18274447fe79885a67633e186c636c Mon Sep 17 00:00:00 2001 From: Sahan Date: Tue, 16 Dec 2025 21:30:30 +0000 Subject: [PATCH 14/25] benchmarking guide --- benchmarking.ipynb | 886 +++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 +- 2 files changed, 888 insertions(+), 1 deletion(-) create mode 100644 benchmarking.ipynb diff --git a/benchmarking.ipynb b/benchmarking.ipynb new file mode 100644 index 00000000..f799ec3a --- /dev/null +++ b/benchmarking.ipynb @@ -0,0 +1,886 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_PCU0gUyzX2c" + }, + "source": [ + "# A Practical Guide to GPU Benchmarking\n", + "\n", + "## TL;DR — How to Benchmark Correctly\n", + "\n", + "Benchmarking on GPUs requires a strict protocol to avoid measuring Python overhead or caching artifacts. To get reliable numbers, you must:\n", + "\n", + "1. **Warmup:** Run the kernel ~10-50 times first to settle compilation and memory allocators.\n", + "2. **Sample Extensively:** Don't trust one run. Collect 100+ samples to build a statistical distribution.\n", + "3. **Flush the L2 Cache:** Between *every* sample, flush the cache to force a cold cache state (simulating real-world inference).\n", + "4. **Use Device Timers:** Use `torch.cuda.Event` instead of `time.time()` to measure execution on the GPU, not the CPU driver.\n", + "5. **Aggregate Robustly:** Use the **Median** (not Mean) of your samples to filter out OS jitter/outliers.\n", + "6. **Wait for sidestreams to finish:** Ensure no side-streams are running or wait for all of them to finish before reporting a time.\n", + "\n", + "*Pro-Tip:* **`triton.testing.do_bench`** implements steps 1-5 automatically. Just use it!\n", + "\n", + "-----\n", + "\n", + "If are using an LLM agent to write GPU kernels (and evaluating against something like say [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), or just trying to optimize a custom GPU kernel, you are eventually going to ask: **\"How fast is this thing?\"**\n", + "\n", + "This notebook is heavily inspired by [this great guide](https://www.youtube.com/watch?v=1i7dxoAfKOU) from the **GPU MODE** community and the practical \"footguns\" (traps) encountered while building benchmarking harnesses for LLM-generated code. Our goal here is simplicity and keeping things Pythonic—for more advanced techniques, see the footnotes.\n", + "\n", + "We won't just list best practices. Instead, we are going to build a benchmarking harness from scratch, make every common mistake, debug why the numbers are wrong, and iterate our way to a robust solution. So let's start things out by doing the most naive thing by using `time.time()`!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "PKWz_W7uzX2f", + "outputId": "8751fd78-569b-4080-f21a-60bbb5ee8caf" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Using GPU: NVIDIA A100-SXM4-40GB\n" + ] + } + ], + "source": [ + "# @title Environment Setup\n", + "# Ensure we have the necessary libraries and a GPU available\n", + "!pip install -q triton matplotlib numpy torch\n", + "\n", + "import torch\n", + "import time\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import triton\n", + "\n", + "if not torch.cuda.is_available():\n", + " raise RuntimeError(\"This notebook requires a GPU. Please go to Runtime -> Change runtime type -> Hardware accelerator -> {Your Favorite GPU we like A100s :)}.\")\n", + "\n", + "print(f\"Using GPU: {torch.cuda.get_device_name(0)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kjWByrwvzX2f" + }, + "source": [ + "## The Journey: Benchmarking a Matrix Multiplication\n", + "\n", + "Let's define a simple workload to test. We want to measure the performance of a standard Matrix Multiplication." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "gxtKes5lzX2g", + "outputId": "5890bae4-5b9a-4366-8947-367146593158" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Output shape: torch.Size([4096, 4096])\n", + "Op ran successfully\n" + ] + } + ], + "source": [ + "# A standard size for testing\n", + "N = 4096\n", + "\n", + "def get_data(n=N):\n", + " \"\"\"Generate random float32 matrices for benchmarking.\"\"\"\n", + " return torch.randn(n, n, device=\"cuda\"), torch.randn(n, n, device=\"cuda\")\n", + "\n", + "def simple_mm(a, b):\n", + " \"\"\"Our kernel under test: standard matrix multiplication.\"\"\"\n", + " return torch.matmul(a, b)\n", + "\n", + "# Let's verify it runs\n", + "a, b = get_data()\n", + "res = simple_mm(a, b)\n", + "print(f\"Output shape: {res.shape}\")\n", + "print(\"Op ran successfully\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GWlsBEVyzX2g" + }, + "source": [ + "### Attempt 1: The Naive Timer (The Asynchronous Illusion)\n", + "\n", + "The most intuitive way to time code in Python is using `time.time()`. Let's try that first." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LynIxLaRzX2g", + "outputId": "72548dad-6570-4eaa-ce07-923556fe70b4" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Naive time: 0.5486 ms\n" + ] + } + ], + "source": [ + "def benchmark_naive(func, *args):\n", + " \"\"\"WRONG: Measures kernel launch time, not execution time.\"\"\"\n", + " start = time.time()\n", + " func(*args)\n", + " end = time.time()\n", + " return (end - start) * 1000 # to ms\n", + "\n", + "t = benchmark_naive(simple_mm, a, b)\n", + "print(f\"Naive time: {t:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gw4NGYRmzX2h" + }, + "source": [ + "**The Problem:**\n", + "Wait, > `1.0ms`? That is impossibly fast for a 4096² matrix multiplication. If that were real, we'd be breaking the laws of physics.\n", + "\n", + "**What happened?**\n", + "GPUs are **asynchronous**. When you call `torch.matmul`, the CPU doesn't actually do the math. It simply queues a \"launch kernel\" command to the GPU and moves on immediately. Our timer didn't measure the matrix multiplication; it measured how long it took Python to place an order in the queue." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8KA1MUzRzX2h" + }, + "source": [ + "### Attempt 2: Synchronizing the Device\n", + "\n", + "To fix this, we need to force the CPU to wait until the GPU has finished its work before we stop the clock. We do this with `torch.cuda.synchronize()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "1Zh4u403zX2h", + "outputId": "5733b98c-bf0e-4997-ca94-43395a5bfc84" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Sync time: 9.3794 ms\n" + ] + } + ], + "source": [ + "def benchmark_sync(func, *args):\n", + " \"\"\"Better: Actually waits for GPU to finish.\"\"\"\n", + " torch.cuda.synchronize() # Wait for previous work to finish\n", + " start = time.time()\n", + " func(*args)\n", + " torch.cuda.synchronize() # Wait for THIS work to finish\n", + " end = time.time()\n", + " return (end - start) * 1000\n", + "\n", + "t = benchmark_sync(simple_mm, a, b)\n", + "print(f\"Sync time: {t:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kDQc-31TzX2h" + }, + "source": [ + "**The Problem:**\n", + "This gives us a much more realistic number (e.g., ~1.5ms). However, we are still using `time.time()`, which measures **Wall Clock** time on the CPU. This includes:\n", + "\n", + "1. Python interpreter overhead.\n", + "2. PyTorch dispatcher overhead.\n", + "3. The time it takes the CPU driver to talk to the GPU.\n", + "\n", + "For large ops, this is fine. But if you are optimizing small, fast kernels (running in microseconds), the Python overhead might be larger than the kernel execution itself!\n", + "\n", + "#### Visualizing the Lie\n", + "\n", + "The best way to see this error is to plot the time as we increase the matrix size.\n", + "* **Physics says:** As matrix size $N$ doubles, operations increase by $8x$ ($N^3$). The time should curve upwards sharply.\n", + "* **The Lie says:** If we are just measuring launch overhead, the time will be roughly constant regardless of $N$." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 653 + }, + "id": "N1tijm0KzX2i", + "outputId": "8328b014-40c5-4f1c-b66b-9cd721f1c0e7" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting data points...\n", + " N=512: naive=0.3424ms, sync=0.1037ms\n", + " N=1024: naive=0.1950ms, sync=0.2241ms\n", + " N=2048: naive=0.0648ms, sync=1.2853ms\n", + " N=4096: naive=0.0436ms, sync=9.3215ms\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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Ro1o1KgRTzzxBGvWrKF169a8++67PPfcczmOr169eq7vedbjIiIlhY4EiYgUk+bNm1OrVi1efvllt6MxWY4dO5bn82fOnEnNmjUZPnw4PXr0cPsaO3YsISEhziM6J0+ezPYb96ZNmwJkOyWuf//+7Nixg4ceeggfHx969ep1Ua/viiuuIDY2ltdeey3bD+KF+dv/mJgYmjZtyowZM9z2s337dr7//ntuvvnmAm8z6znnB8BXX30VgC5dujj7atWqxU8//eQ27v333892xOX48eNu7ZCQEGrXrp3t/S8sWSH03NoyMzN5//333cYlJCSQkZHh1teoUSPsdnuetd18882sX7+etWvXOvvOnDnD+++/T40aNahfv35hvAwRkWKhI0EiIsXEbrczdepUOnfuTIMGDRg8eDCVK1fm0KFDLF++nLCwML766qscn/vPP/+wfPlyRo0alePjAQEBdOzYkc8++4w33niDGTNm8M4773DHHXdQq1YtEhMT+eCDDwgLC8sWErp06UL58uX57LPP6Ny5M1FRURf9+qZMmcKtt95K06ZNGTx4MDExMfzf//0fv//+O999991FbTcnL730Ep07d6ZVq1YMGTLEuUR2eHh4jvfwuZAmTZowcOBA3n//fU6dOkXbtm1Zv349M2bM4Pbbb+eGG25wjh06dCjDhw+ne/fudOjQgS1btvDdd99lOzpXv359rr/+epo3b065cuXYsGED8+fPZ+TIkZf68nPUoEEDrr76asaNG+dc9nzu3LnZAs+PP/7IyJEjufPOO6lbty4ZGRl88skn+Pj40L1791y3/+ijjzJnzhw6d+7MqFGjKFeuHDNmzGDfvn0sWLAAu12/VxWRkkMhSESkGF1//fWsXbuWZ599lrfeeovTp08THR1Ny5YtnTcnzcncuXNxOBzceuutuY659dZbWbBgAYsXL3b+ED937lyOHj1KeHg4LVq0YNasWdkWGvD396dnz5688847OS6IUBAdO3Zk+fLlTJgwgVdeeQWHw0GtWrUYNmzYJW33fO3bt2fJkiWMHz+ep556Cj8/P9q2bcuLL76Y7fXl19SpU6lZsybTp09n0aJFREdHM27cOMaPH+82btiwYezbt48PP/yQJUuW0KZNG5YuXUq7du3cxo0aNYovv/yS77//ntTUVKpXr85zzz3ndj+nwjZr1iz+85//8MIL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bX///v3YbDY2b95cZPsQERER8XgbPoR5A10BqM5NMPDLUh+AQCEob8snwcrJOT+2crL5eBE4duwY9957L9WqVSMgIIDo6Gg6duzI6tWri2R/nubXX3/lnnvusboMERERkdLJMAj59Q3s344FDLOvSR/oNRv8y1haWnHR6XB5sfvA8onm38+9++3KyWb/DY8XyW67d+9OWloaM2bMoGbNmhw9epRly5Zx/PjxItlfYUhLS8Pf379QthUZGVko2xERERGR82RmYPtmDCEbZ7j6rn0A2o0vFTdBzS8dCcpL24fNoLN8ouuI0LkB6NxgVEhOnTrFqlWrePHFF7nhhhuoXr06LVq0YNy4cdx2223cfffd3HKL+zrt6enpREVF8eGHHwJw/fXXM2rUKB5++GHKlStHdHQ0Tz/9dLb9/Oc//6FixYoEBgbSsGFDvv76a7cx3333HfXq1SMkJIROnTpx+PBh52ODBg3i9ttvZ+LEiVSqVInLLrsMgG3btnHjjTcSFBRE+fLlueeeezh9+nS257388svExMRQvnx5RowYQXp6unPMuafDTZ8+HZvNlu3r3NczdepU6tevT2hoKPXq1eOdd95xex3r16+nWbNmBAYGcuWVV7Jp06aCTYqIiIhIaZCeDPMGYDs3AHV6Ado/7VUBCLzxSNB7beF0XMGe4x9qBp+so0L+obBhmvkF+GIAeXzjhETBf1bma1chISGEhITw+eefc/XVVxMQEOD2+NChQ7nuuus4fPgwMTExAHz99dckJSXRs2dP57gZM2YwZswYfvnlF9auXcugQYNo3bo1HTp0wOFw0LlzZxITE5k5cya1atVix44d+Pj4OJ+flJTEyy+/zCeffILdbqdfv36MHTuWWbNmOccsW7aMsLAwli5dCsCZM2fo2LEjrVq14tdffyUuLo6hQ4cycuRIpk+f7nze8uXLiYmJYfny5ezZs4eePXvStGlThg0blu396NmzJ506dXK2V6xYQf/+/Wnd2lyvftasWTz11FO8+eabNGrUiG3btnHPPfdQpkwZBg4cyOnTp7nlllvo0KEDM2fOZN++fdx///35mgsRERGRUiP5pLkC3MG1ABh2P4zbp2BvfKfFhVnD+0LQ6ThI/OfStpGWaH6RZ/S5KL6+vkyfPp1hw4bx7rvvcsUVV9C2bVt69epF48aNueaaa7jsssv45JNP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z1i9erXRvn17o0KFCkZcXJxhGOaSg9WqVTN+/PFHY8OGDUarVq2MVq1aOZ+fteTgTTfdZGzevNlYsmSJERkZqSWyLyAxMdHYtGmTsWnTJgMwXn31VWPTpk3GgQMHDMMwl8iOiIgwvvjiC2Pr1q1G165dc1wiu1mzZsYvv/xi/Pzzz0adOnXclmU+deqUUbFiRaN///7G9u3bjblz5xrBwcFalvk8ec1FYmKiMXbsWGPt2rXGvn37jB9++MG44oorjDp16hgpKSnObWguLs29995rhIeHGytWrHBbajYpKck5pjD+Lcpa/vShhx4ydu7cabz99tulZvnTwnKhudizZ4/xzDPPGBs2bDD27dtnfPHFF0bNmjWN6667zrkNzcWle/TRR42VK1ca+/btM7Zu3Wo8+uijhs1mM77//nvDMPR5KC55zYM+C9Y6f2U+fSbyphCUg549exoxMTGGv7+/UblyZaNnz57Gnj17nI8nJycb//3vf42yZcsawcHBxh133GEcPnzYbRv79+83OnfubAQFBRkVKlQwHnzwQSM9Pb24X0qJsnz5cgPI9jVw4EDDMMxlsp988kmjYsWKRkBAgNGuXTtj165dbts4fvy40bt3byMkJMQICwszBg8ebCQmJrqN2bJli3HttdcaAQEBRuXKlY0XXnihuF5iiZHXXCQlJRk33XSTERkZafj5+RnVq1c3hg0b5rbEpmFoLi5VTu8/YEybNs05prD+LVq+fLnRtGlTw9/f36hZs6bbPuTCc3Hw4EHjuuuuM8qVK2cEBAQYtWvXNh566CG3e6MYhubiUt19991G9erVDX9/fyMyMtJo166dMwAZhj4PxSWvedBnwVrnhyB9JvJmMwzDKL7jTiIiIiIiItbSNUEiIiIiIuJVFIJERERERMSrKASJiIiIiIhXUQgSERERERGvohAkIiIiIiJeRSFIRERERES8ikKQiIiIiIh4FYUgERERERHxKgpBIiJimRo1avDaa68V6T4GDRrE7bffXqT7ALjuuuuYPXt2gZ/36KOPct999xVBRSIikhuFIBERLzZo0CBsNhvDhw/P9tiIESOw2WwMGjQo39vbv38/NpuNzZs352v8r7/+yj333JPv7efkgw8+oEmTJoSEhBAREUGzZs2YNGmS8/HXX3+d6dOnX9I+LuTLL7/k6NGj9OrVy9lXo0YNbDYb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\n" + }, + "metadata": {} + } + ], + "source": [ + "sizes = [512, 1024, 2048, 4096]\n", + "naive_times = []\n", + "sync_times = []\n", + "\n", + "print(\"Collecting data points...\")\n", + "for s in sizes:\n", + " a_test, b_test = get_data(s)\n", + " naive_times.append(benchmark_naive(simple_mm, a_test, b_test))\n", + " sync_times.append(benchmark_sync(simple_mm, a_test, b_test))\n", + " print(f\" N={s}: naive={naive_times[-1]:.4f}ms, sync={sync_times[-1]:.4f}ms\")\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(sizes, naive_times, label='Naive (Async)', marker='o', linewidth=2)\n", + "plt.plot(sizes, sync_times, label='Synchronized', marker='x', linewidth=2)\n", + "plt.xlabel('Matrix Size (N)')\n", + "plt.ylabel('Time (ms)')\n", + "plt.legend()\n", + "plt.title(\"The Asynchronous Illusion\")\n", + "plt.grid(True, alpha=0.3)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dV8AmQi-zX2i" + }, + "source": [ + "### Attempt 3: Removing CPU Overhead (CUDA Events)\n", + "\n", + "To get a precise measurement, we need to bypass the CPU clock entirely. We can ask the GPU driver to record timestamps directly on the device using `torch.cuda.Event`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "i6PfSdkTzX2i", + "outputId": "8b3e29d1-1789-4bfb-9a44-599016516dd7" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Run 0: 9.4638 ms\n", + "Run 1: 9.3665 ms\n", + "Run 2: 9.3307 ms\n" + ] + } + ], + "source": [ + "def benchmark_events(func, *args):\n", + " \"\"\"Better: Uses GPU timestamps, avoiding CPU overhead.\"\"\"\n", + " start_event = torch.cuda.Event(enable_timing=True)\n", + " end_event = torch.cuda.Event(enable_timing=True)\n", + "\n", + " torch.cuda.synchronize()\n", + " start_event.record()\n", + " func(*args)\n", + " end_event.record()\n", + " torch.cuda.synchronize()\n", + "\n", + " return start_event.elapsed_time(end_event) # Returns ms directly\n", + "\n", + "# Run it a few times\n", + "for i in range(3):\n", + " print(f\"Run {i}: {benchmark_events(simple_mm, a, b):.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BkfaaDawzX2i" + }, + "source": [ + "### Attempt 4: Handling the \"Cold Start\"\n", + "\n", + "The first time you run a PyTorch function, the framework does a lot of heavy lifting: allocating memory, initializing cuBLAS/cuDNN workspaces, and compiling kernels (especially if using `torch.compile` or Triton). This \"Cold Start\" penalty is a one-time cost that shouldn't be included in your performance metrics.\n", + "\n", + "**The Fix:**\n", + "We need to perform **Warmup Runs**—running the kernel a few times to settle the system state before we start measuring." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "j_PsAuJkzX2i", + "outputId": "d6983401-72d3-468c-ffd8-c0833e8d5556" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Warmed up time: 7.3667 ms\n" + ] + } + ], + "source": [ + "def benchmark_warmup(func, *args, warmup_iters=30):\n", + " \"\"\"Better: Includes warmup to avoid cold-start penalty.\"\"\"\n", + " # Warmup phase\n", + " for _ in range(warmup_iters):\n", + " func(*args)\n", + " torch.cuda.synchronize()\n", + "\n", + " # Measurement phase\n", + " return benchmark_events(func, *args)\n", + "\n", + "print(f\"Warmed up time: {benchmark_warmup(simple_mm, a, b):.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OR3uOh7kzX2i" + }, + "source": [ + "### Attempt 5: The Single Sample Fallacy (Variance)\n", + "\n", + "Relying on a single sample after warmup is bad science. Operating systems are noisy; background processes interrupt the CPU, and GPU clocks fluctuate thermally. A single measurement is anecdotal, not statistical.\n", + "\n", + "#### Visualizing the Jitter\n", + "\n", + "Let's run the benchmark 100 times and plot every single run. You will clearly see the \"Cold Start\" spike and the noise floor of the OS." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 653 + }, + "id": "T-7QH4cHzX2i", + "outputId": "c758effd-a810-422d-d3ca-66c128cdb716" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAh9RJREFUeJzs3Xd8FGXix/HvtuymJ0ACCTUQlCYItgMLcmIDy9nriaKe/tBD8CzgnYrnKWf37KeeINZTEc+uiICiqFhQEESQAAKBBEhvW+b5/RGzZNlkN1kCCfB5v168XuzMMzPP7Dw7me/OM8/ajDFGAAAAAIBG2Vu7AgAAAADQ1hGcAAAAACAKghMAAAAAREFwAgAAAIAoCE4AAAAAEAXBCQAAAACiIDgBAAAAQBQEJwAAAACIguAEAAAAAFEQnACgDZg3b55sNptee+211q5Kk0yZMkU2m01btmyJWO7iiy9Wjx49dk+lmqBHjx66+OKLW7sae6Q1a9bIZrNp+vTpUcu2teMOAC2B4ARgrzd9+nTZbLaQf5mZmRoxYoTee++91q4edpGjjz5aAwYMiFhm2bJlmjJlitasWRM277HHHmtSSGhpRUVFuvLKK9W5c2clJiZq0KBBuueee2Ja16xZs3TiiSeqQ4cOiouLU3Z2ts4++2x9/PHHLVzr2FiWpRkzZuiwww5Tu3btlJycrP32208XXXSRvvjii2C5SMepJbTWsQawZ3G2dgUAYHf5+9//rpycHBljtHnzZk2fPl2jRo3SW2+9pZNOOqm1q7dXeuqpp2RZVmtXI2jFihWy27d/Z7hs2TLddtttOvroo8PukDz22GPq0KHDbr9DdfHFF+vdd9/V1VdfrT59+uj777/XCy+8oOuvv77J6zDGaOzYsZo+fboGDx6sa6+9Vp06dVJ+fr5mzZqlY445Rp999pmGDRu2C/ckuvHjx+vRRx/VqaeeqgsuuEBOp1MrVqzQe++9p549e+p3v/udpMjHqSW01rEGsGchOAHYZ5x44ok6+OCDg68vvfRSdezYUS+99BLBqYkqKiqUmJjY5PIul2sX1qb53G53q27f7/fLsizFxcU1OL+iokJvv/22rrzySj3wwAPB6TU1Nc3azn333afp06drwoQJuv/++2Wz2YLz/vrXv+q5556T09m6lwCbN2/WY489pssvv1xPPvlkyLwHH3xQhYWFu7wOlZWVSkhI2OXbAbB3oKsegH1WWlqa4uPjwy4gLcvSgw8+qP79+8vj8ahjx4664oorVFRUFFKuR48eOumkk7RgwQIdeuih8ng86tmzp2bMmBG2reLiYk2cOFE9evSQ2+1Wly5ddNFFF4U9I2RZlu644w516dJFHo9HxxxzjFatWhVSpq4L2g8//KDhw4crISFBubm5weej5s+fr8MOO0zx8fHaf//99dFHH4Usv3btWo0bN07777+/4uPj1b59e5111llh3aDqujjOnz9f48aNU2Zmprp06dLo+7l27Vrl5uZqwIAB2rx5s6TwZ13qnpO599579eSTT6pXr15yu9065JBDtGjRorB1vvrqq+rXr588Ho8GDBigWbNm7dTzM/WfcZo+fbrOOussSdKIESOC3TjnzZunHj166Mcff9T8+fOD048++ujgeoqLizVhwgR17dpVbrdbubm5uuuuu0LurtXf1wcffDC4r8uWLWu0fnXbMsaETG9O4KuqqtLUqVPVp08f3XvvvSGhqc4f//hHHXroocHXq1ev1llnnaV27dopISFBv/vd7/TOO+80aXtvvPGGBgwYEHKMmiIvL0/GGB1++OFh8+q600qRj5Mk/e9//9Po0aOVnZ0tt9utXr166fbbb1cgEAhZZ93n5ptvvtFRRx2lhIQE3XTTTVGPNQDU4Y4TgH1GSUmJtmzZImOMCgoK9PDDD6u8vFwXXnhhSLkrrrhC06dP1yWXXKLx48crLy9PjzzyiL777jt99tlnIXdRVq1apTPPPFOXXnqpxowZo2eeeUYXX3yxDjroIPXv31+SVF5eriOPPFLLly/X2LFjNWTIEG3ZskVvvvmm1q9frw4dOgTX989//lN2u13XXXedSkpKdPfdd+uCCy7Ql19+GVLHoqIinXTSSTr33HN11lln6fHHH9e5556rF154QRMmTNCVV16p888/X/fcc4/OPPNM/frrr0pOTpYkLVq0SJ9//rnOPfdcdenSRWvWrNHjjz+uo48+WsuWLQv7Bn7cuHHKyMjQLbfcooqKigbf219++UW///3v1a5dO82ePTtknxry4osvqqysTFdccYVsNpvuvvtunX766Vq9enXw/X3nnXd0zjnn6IADDtDUqVNVVFSkSy+9VJ07d4647qY66qijNH78eD300EO66aab1LdvX0lS37599eCDD+rPf/6zkpKS9Ne//lWS1LFjR0m1dymGDx+uDRs26IorrlC3bt30+eefa/LkycrPz9eDDz4Ysp1p06apurpaf/rTn+R2u9WuXbtG65SQkKCzzz5b06dP1+WXX67Bgwc3e78WLFigbdu2acKECXI4HFHLb968WcOGDVNlZaXGjx+v9u3b69lnn9Upp5yi1157Taeddlqjy3744Yc644wz1K9fP02dOlVbt27VJZdcEjFg1+nevbuk2nB81llnNXrnJ9JxkmqDVVJSkq699lolJSXp448/1i233KLS0tKwZ8O2bt2qE088Ueeee64uvPBCdezYUUcffXSjxxoAQhgA2MtNmzbNSAr753a7zfTp00PKfvrpp0aSeeGFF0Kmv//++2HTu3fvbiSZTz75JDitoKDAuN1u85e//CU47ZZbbjGSzOuvvx5WN8uyjDHGzJ0710gyffv2NTU1NcH5//rXv4wks2TJkuC04cOHG0nmxRdfDE776aefjCRjt9vNF198EZz+wQcfGElm2rRpwWmVlZVh9Vi4cKGRZGbMmBH2vh1xxBHG7/eHlL/11luNJFNYWGiWL19usrOzzSGHHGK2bdsWUm7MmDGme/fuwdd5eXlGkmnfvn1I2f/9739GknnrrbeC0w444ADTpUsXU1ZWFpw2b948IylknY0ZPny46d+/f8i07t27mzFjxgRfv/rqq0aSmTt3btjy/fv3N8OHDw+bfvvtt5vExETz888/h0yfNGmScTgcZt26dSH7mpKSYgoKCqLW1xhjysrKzMiRI01cXJzp2LFj2Daaoq7NzJo1q0nlJ0yYYCSZTz/9NKQeOTk5pkePHiYQCITsT/22dOCBB5qsrCxTXFwcnPbhhx82+RhddNFFRpJJT083p512mrn33nvN8uXLw8pFOk4NtecrrrjCJCQkmOrq6uC0us/NE088EVa+sWMNAPXRVQ/APuPRRx/V7NmzNXv2bD3//PMaMWKELrvsMr3++uvBMq+++qpSU1N17LHHasuWLcF/Bx10kJKSkjR37tyQdfbr109HHnlk8HVGRob2339/rV69Ojht5syZGjRoUIPf3O/YjeqSSy4Jef6lbt311ydJSUlJOvfcc4Ov999/f6Wlpalv37467LDDgtPr/l9/+fj4+OD/fT6ftm7dqtzcXKWlpenbb78Nq+Pll1/e6J2LpUuXavjw4erRo4c++ugjpaenN1huR+ecc05I2R33c+PGjVqyZIkuuugiJSUlBcsNHz5cBxxwQJO2sau8+uqrOvLII5Wenh7SRkaOHKlAIKBPPvkkpPwZZ5yhjIyMJq37oosu0po1a/TTTz8pIyNDI0eO1Lp164LzFy5cKJvNpjlz5jS6jtLSUkkK3mGM5t1339Whhx6qI444IjgtKSlJf/rTn7RmzZpGuxbm5+dr8eLFGjNmjFJTU4PTjz32WPXr169J2542bZoeeeQR5eTkaNasWbruuuvUt29fHXPMMdqwYUOT1lG/PZeVlWnLli068sgjVVlZqZ9++imkrNvt1iWXXNKk9QLAjghOAPYZhx56qEaOHKmRI0fqggsu0DvvvKN+/frp6quvltfrlSStXLlSJSUlyszMVEZGRsi/8vJyFRQUhKyzW7duYdtJT08PeR7ql19+iTosdmPrqwsXOz5f1aVLl7DQlZqaqq5du4ZN23H5qqoq3XLLLcHnczp06KCMjAwVFxerpKQkrE45OTmN1vfkk09WcnKyPvjgA6WkpDRhD2tF28+1a9dKknJzc8OWbWja7rRy5Uq9//77Ye1j5MiRkhTWRiK9f/V98cUXmjVrlu68807l5OTo/ffflySNHDky+MzY0qVL5XQ6ddBBBzW6nrrjUFZW1qTtrl27Vvvvv3/Y9LqucHXHoqHlJKl3795h8xpaX0PsdruuuuoqffPNN9qyZYv+97//6cQTT9THH38c8sVAJD/++KNOO+00paamKiUlRRkZGcHutzu2586dOzc6MAcARMMzTgD2WXa7XSNGjNC//vUvrVy5Uv3795dlWcrMzNQLL7zQ4DI73jlo7E6M2eHh/qZq6voaK9eU5f/85z9r2rRpmjBhgoYOHarU1FTZbDade+65DQ4dXv8b/R2dccYZevbZZ/XCCy/oiiuuaLRcLPVsqyzL0rHHHqsbbrihwfn77bdfyOtI7199n3/+uSQFh+Du3LmzPvjgAx1xxBE69thjNW/ePD355JMaNWqU0tLSGl1Pnz59JElLlizRH/7whyZtuy1o3769TjnlFJ1yyik6+uijNX/+fK1duzb4LFRDiouLNXz4cKWkpOjvf/+7evXqJY/Ho2+//VY33nhjWHtu6rEAgIYQnADs0/x+v6TaARwkqVevXvroo490+OGHt9hFVq9evbR06dIWWVdLeO211zRmzBjdd999wWnV1dUqLi5u9rruueceOZ1OjRs3TsnJyTr//PNbpI51F8s7jijY2LRYNTTiXLR5vXr1Unl5efAOU0vX5ddffw3eOezTp4/eeecdHXPMMTrooIO0bt06/fvf/464niOOOELp6el66aWXdNNNN0UdIKJ79+5asWJF2PS6bm6NBZe66StXrgyb19D6muPggw/W/PnzlZ+fr+7duzd6LObNm6etW7fq9ddf11FHHRWcnpeX16ztRWoHAFCHrnoA9lk+n08ffvih4uLigt2Szj77bAUCAd1+++1h5f1+f0zh4owzztD333/f4DDNrXGHxeFwhG334YcfDhu+uSlsNpuefPJJnXnmmRozZozefPPNFqljdna2BgwYoBkzZgRDrVQ71PqSJUtaZBuSgr9J1dBxTUxMbHD62WefrYULF+qDDz4Im1dcXBwM4811zDHHSKr9oeb66zjssMP0t7/9TWvWrFHv3r2jdvtMSEjQjTfeqOXLl+vGG29ssI09//zz+uqrryRJo0aN0ldffaWFCxcG51dUVOjJJ59Ujx49Gn1eKSsrSwceeKCeffbZkC5xs2fPjjjkep1NmzY1WM7r9WrOnDmy2+3BbpmNHae6UFh/H71erx577LGo26+vsWMNAPVxxwnAPuO9994LfoteUFCgF198UStXrtSkSZOCz4UMHz5cV1xxhaZOnarFixfruOOOk8vl0sqVK/Xqq6/qX//6l84888xmbff666/Xa6+9prPOOktjx47VQQcdpG3btunNN9/UE088oUGDBrX4vkZy0kkn6bnnnlNqaqr69eunhQsX6qOPPlL79u1jWp/dbtfzzz+vP/zhDzr77LP17rvv6ve///1O1/POO+/UqaeeqsMPP1yXXHKJioqK9Mgjj2jAgAEhYWpnHHjggXI4HLrrrrtUUlIit9ut3//+98rMzNRBBx2kxx9/XP/4xz+Um5urzMxM/f73v9f111+vN998UyeddFJw6PmKigotWbJEr732mtasWRN1OPaGDBw4MDjs9iGHHKLzzjtPaWlp+vTTT/Xyyy/ryCOP1IIFC3T55Zfr2Wefjbiu66+/Xj/++KPuu+8+zZ07V2eeeaY6deqkTZs26Y033tBXX30V7Bo4adIkvfTSSzrxxBM1fvx4tWvXTs8++6zy8vI0c+ZM2e2Nf8c6depUjR49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kf72t79pxowZOv/889WrVy8NHDhQp5xyStj6/va3v6lPnz46++yzw+Z9/vnnOvzww3X++eerR48eOu6443Teeefpq6++anSf6t7Lt99+W3369FFqaqrOOussVVZW6tlnn1WPHj2Unp6u8ePHKxAIBJd77LHH1Lt3b3k8HnXs2FFnnnlms97L5iI4tZKlG0p0+zvLdNtby/TK1+t121vLdPs7y7R0Q/gtUwAAgFaVlNT4vzPOCC2bmSklJcmWnCxXerpsycnby554YmjZHj0aXmeMxo4dq2nTpgVfP/PMM7rkkkvCyk2dOlUzZszQE088oR9//FETJ07UhRdeqPnz50uSfv31V51++uk6+eSTtXjxYl122WWaNGlSxG2Xl5dr1KhRmjNnjr777judcMIJOvnkk7Vu3bqQcvfdd58OPvhgfffddxo3bpz+7//+TytWrAjOP/roo5vVrfDNN9/U1q1bG9zPSEpKSpSSkiKns7YD2uzZs2VZljZs2KC+ffuqS5cuOvvss/Xrr7+GLPfxxx/r1Vdf1aOPPtrgeocNG6ZvvvkmGJRWr16td999V6NGjYpYn8rKSj300EN66aWX9Pbbb2vevHk67bTT9O677+rdd9/Vc889p3//+9/BgPv1119r/Pjx+vvf/64VK1bo/fff11FHHdWs96C56KrXCpZuKNFDc1ZqW4VX2akeZbqlQE2clqwv0YaiKo0/prcGdE5t7WoCAADsUS688EJNnjxZa9eulSR99tlnevnllzVv3rxgmZqaGt1555366KOPNHToUElSz549tWDBAv373//W8OHD9fjjj6tXr1667777JEn777+/lixZorvuuqvRbQ8aNEiDBg0Kvr799ts1a9Ysvfnmm7r66quD00eNGqVx48ZJkm688UY98MADmjt3rvbff39JUrdu3ZSVldXkff7Pf/6j448/Xl26dGnyMlu2bNHtt9+uP/3pT8Fpq1evlmVZuvPOO/Wvf/1Lqamp+tvf/qZjjz1WP/zwg+Li4rR161ZdfPHFev7555WSktLgus8//3xt2bJFRxxxRPDHbK+88krddNNNEevk8/n0+OOPq2fPnvL7/TrjjDP0/PPPa/PmzUpKSlK/fv00YsQIzZ07V+ecc47WrVunxMREnXTSSUpOTlb37t3D7iy2NILTbmZZRjO/Xa9tFV7lZibJZpPs8irR41SuO0mrCsr1+rcb1C8rRXY7v7INAADagPLyxuc5HKGvCwokKXjR7HQ6t3ch2/HHdRt4fmZnZGRkaPTo0Zo+fbqMMRo9erQ6dOgQUmbVqlWqrKzUscceGzLd6/UGL7yXL1+uww47LGR+XchqTHl5uaZMmaJ33nlH+fn58vv9qqqqCrvjNHDgwOD/bTabOnXqpILf3jNJmjFjRpP3d/369frggw/0yiuvNHmZ0tJSjR49Wv369dOUKVOC0y3Lks/n00MPPaTjjjtOkvTSSy+pU6dOmjt3ro4//nhdfvnlOv/88yPe2Zk3b57uvPNOPfbYYzrssMO0atUqXXPNNbr99tt18803N7pcQkKCevXqJWNqH13p2LGjevTooaR6dyA7duwYfK+OPfZYde/eXT179tQJJ5ygE044QaeddpoSEhKa/F40F8FpN1uztUKrCsqVlRr/20lk+3NNNptNWanxWllQpjVbK9QzI/Zb1QAAAC0mMbH5ZY2R/H7J6ZQaefamWettorFjxwbv8DTUnaz8txD4zjvvqHPnziHz3G53zNu97rrrNHv2bN17773Kzc1VfHy8zjzzTHm93pByLpcr5LXNZpNlWTFtc9q0aWrfvn2DzyE1pKysTCeccIKSk5M1a9askLrU3eXq169fcFpGRoY6dOgQDH8ff/yx3nzzTd17772SasOxZVlyOp168sknNXbsWN1888364x//qMsuu0ySdMABB6iiokJ/+tOf9Ne//lX2HcPzbxp6XyK9V8nJyfr22281b948ffjhh7rllls0ZcoULVq0aJcNE09w2s3Kqv2q8VmKT3U0OD8+zqHNpZbKqv27uWYAAAB7vhNOOEFer1c2m03HH3982Px+/frJ7XZr3bp1Gj58eIPr6Nu3r958882QaV988UXE7X722We6+OKLddppp0mqDWgNjUjXUowxmjZtmi666KKwgNGQ0tJSHX/88XK73XrzzTfl8XhC5h9++OGSpBUrVgS7/W3btk1btmxR9+7dJUkLFy4MGZzhf//7n+666y59/vnnwRBaWVkZFo4cv92VrLub1FKcTqdGjhypkSNH6tZbb1VaWpo+/vhjnX766S26neD2dsla0ahkj1Nul11V3oCSPOFvf5U3ILfLruQG5gEAACAyh8Oh5cuXB/+/o+TkZF133XWaOHGiLMvSEUccoZKSEn322WdKSUnRmDFjdOWVV+q+++7T9ddfr8suu0zffPONpk+fHnG7vXv31uuvv66TTz5ZNptNN998c0x3ki666CJ17txZU6dOjVju448/Vl5eXvDOTn0bNmzQMcccoxkzZujQQw9VaWmpjjvuOFVWVur5559XaWmpSktLJdXeVXI4HNpvv/106qmn6pprrtGTTz6plJQUTZ48WX369NGIESMk1QbK+r7++mvZ7XYNGDAgOO3kk0/W/fffr8GDBwe76t188806+eSTGzwesXr77be1evVqHXXUUUpPT9e7774ry7KCz4rtClyd72Y92icqNzNJS9aXKNedFHLn2hij/JIqDeySph7tW/7WNQAAwL6gsYEL6tx+++3KyMjQ1KlTtXr1aqWlpWnIkCHBAQy6deummTNnauLEiXr44Yd16KGHBocRb8z999+vsWPHatiwYerQoYNuvPHGYDhpjnXr1jXana2+//znPxo2bJj69OkTNs/n82nFihWqrKyUJH377bf68ssvJUm5ubkhZfPy8tSjRw9Jtc9XTZw4UaNHj5bdbtfw4cP1/vvvN+mOVp2//e1vstls+tvf/qYNGzYoIyNDJ598su64444mr6Mp0tLS9Prrr2vKlCmqrq5W79699dJLL6l///4tup36bKal75m1caWlpUpNTQ0OwdgadhxVL8vtVX5NnDaWVKtdYhyj6iEqy7JUUFCgzMzMJp1cAYl2g9jRdvYN1dXVysvLU05OTlg3rlg0ODgEEMWuaDeR2nZzsgFnv1YwoHOqxh/TWwd0SVVxlVcFpdUqrvJqYJc0QhMAAADQBtFVr5UM6JyqflkpyttSpoLNBcrsmKmcDskMQQ4AAAC0QQSnVmS325TTIUmJVqUyOyQRmgAAAIA2iq56AAAAABAFwQkAAAAAoiA4AQAAAEAUrRqcysrKNGHCBHXv3l3x8fEaNmyYFi1a1Gj5efPmyWazhf3btGnTbqw1AAAAgH1Nqw4Ocdlll2np0qV67rnnlJ2dreeff14jR47UsmXL1Llz50aXW7FiRcg465mZmbujugAAAAD2Ua12x6mqqkozZ87U3XffraOOOkq5ubmaMmWKcnNz9fjjj0dcNjMzU506dQr+48f4AAAAAOxKrXbHye/3KxAIhP16b3x8vBYsWBBx2QMPPFA1NTUaMGCApkyZosMPP7zRsjU1NaqpqQm+Li0tlVT7K+iWZe3EHrQMy7JkjGkTdcGeg3aDWNBuECvazr6h7jjX/WsJdetpqfVh39DS7aauTTd0/d+c81qrBafk5GQNHTpUt99+u/r27auOHTvqpZde0sKFC5Wbm9vgMllZWXriiSd08MEHq6amRk8//bSOPvpoffnllxoyZEiDy0ydOlW33XZb2PTCwkJVV1e36D7FwrIslZSUyBjDnTM0Ge0GsaDdIFa0nX2Dz+eTZVny+/3y+/07vT5jjAKBgCTJZtu1v1V56aWX6rnnntPll1+uRx99NGTe+PHj9cQTT+iPf/yj/vOf/+zSesQiLi6uwelTp07VX/7ylwbn9e7dW2vXrg2bfuWVV+qhhx6SJG3atEmTJk3SnDlzVFZWpv3220+TJk3S6aefHnE9//jHP3TDDTcEX7/66qu66667tHLlSmVkZOj//u//Gq1XS9gV7cbv98uyLG3dulUulytkXllZWZPXYzOt+BXAL7/8orFjx+qTTz6Rw+HQkCFDtN9+++mbb77R8uXLm7SO4cOHq1u3bnruuecanN/QHaeuXbuqqKgo5Dmp1mJZlgoLC5WRkcEfIzQZ7QaxoN0gVrSdfUN1dbXWrFmjnJycsB5BsfL5fGEXqrvCJZdcoo8//lilpaXauHGj4uPjJdXuU3Z2tlJSUjRixAhNmzZtl9eluXYc5Oy9997TZZddppUrV6pnz54NLlNYWBgMF5K0dOlSHXfccfr444919NFHS5KOP/54FRcX6+GHH1aHDh304osvasqUKVq0aJEGDx4sScrJydHYsWN1+eWXB9eVnJysxMTEYF1OPfVUPfTQQzruuOO0fPly/elPf9LkyZN19dVXt+TbEKKl2011dbXy8vLUo0ePsLZdWlqq9PR0lZSURM8Gpg0oLy83GzduNMYYc/bZZ5tRo0Y1ednrrrvO/O53v2ty+ZKSEiPJlJSUNLueu0IgEDD5+fkmEAi0dlWwB6HdIBa0G8SKtrNvqKqqMsuWLTNVVVVh88pryk15TbmxLCs4rcZfY8pryk21r7rBsv6A33i9XmNZlvH6vaa8ptxU+aoaLBuwtrctr9/b7LqPGTPGnHrqqWbAgAHm+eefD05/4YUXzMCBA82pp55qxowZE5weCATMnXfeaXr06GE8Ho8ZOHCgefXVV4Pz/X6/GTt2bHD+fvvtZx588MEGt3nPPfeYTp06mXbt2plx48YZr7f59a/v1FNPNb///e+btcw111xjevXqFXJ8EhMTzYwZM0LKtWvXzjz11FPB1927dzcPPPBAo+s977zzzJlnnhky7aGHHjJdunQJ2VZ9eXl5RpL573//a4444gjj8XjMwQcfbFasWGG++uorc9BBB5nExERzwgknmIKCguByc+fONYcccohJSEgwqampZtiwYWbNmjXNeRsaFaltNycbtImvjRITE5WVlaWioiJ98MEHOvXUU5u87OLFi5WVlbULawcAALBvS5qapKSpSdpSuSU47Z7P7lHS1CRd/W7onYfMezOVNDVJ60rWBac9uuhRJU1N0qVvXhpStse/eihpapKWF27vaTR98fSY6zl27NiQu0rPPPOMLrnkkrByU6dO1YwZM/TEE0/oxx9/1MSJE3XhhRdq/vz5kmrvsnbp0kWvvvqqli1bpltuuUU33XSTXnnllZD1zJ07V7/88ovmzp2rZ599VtOnT9f06dvrP2XKFPXo0aPJ9d+8ebPeeecdXXrppdEL/8br9er555/X2LFjQ7q2DRs2TP/973+1bds2WZall19+WdXV1cE7UnX++c9/qn379ho8eLDuueeekG6aNTU1DY5HsH79+ga7CtZ366236m9/+5u+/fZbOZ1OnX/++brhhhv0r3/9S59++qlWrVqlW265RVJtV7o//OEPGj58uL7//nt98sknuvzyy3d5F8/matXhyD/44AMZY7T//vtr1apVuv7669WnT59gA588ebI2bNigGTNmSJIefPBB5eTkqH///qqurtbTTz+tjz/+WB9++GFr7gYAAADagAsvvFCTJ08OXtR/9tlnevnllzVv3rxgmZqaGt1555366KOPNHToUElSz549tWDBAv373//W8OHD5XK5Qp6Rz8nJ0cKFC/XKK6/o7LPPDk5PT0/XI488IofDoT59+mj06NGaM2dOsOtbhw4d1KtXrybX/9lnn1VycnLIc0jRvPHGGyouLtbFF18cMv2VV17ROeeco/bt28vpdCohIUGzZs0KGUtg/PjxGjJkiNq1a6fPP/9ckydPVn5+vu6//35Jtd39Jk6cqIsvvlgjRozQqlWrdN9990mS8vPzI4bC6667Tscff7wk6ZprrtF5552nOXPmBAd1u/TSS4Mhs7S0VCUlJTrppJPUq1cv+f1+HXDAAQSn+kpKSjR58mStX79e7dq10xlnnKE77rgj2KcxPz9f69Zt/7bC6/XqL3/5izZs2KCEhAQNHDhQH330kUaMGNFauwAAALDXK59cLklKcCUEp11/+PWa8LsJctpDLycLriuQJHmcHlmB2hHLrjrkKl0+5HI57I6QsmuuWSNJinfFB6ddfODFMdczIyNDo0eP1vTp02WM0ejRo9WhQ4eQMqtWrVJlZaWOPfbYkOlerzf47I8kPfroo3rmmWe0bt06VVVVyev16sADDwxZpn///nI4tu9TVlaWlixZEnx99dVXN+tZoGeeeUYXXHBBs54x+89//qMTTzxR2dnZIdNvvvlmFRcX66OPPlKHDh30xhtv6Oyzz9ann36qAw44QJJ07bXXBssPHDhQcXFxuuKKKzR16lS53W5dfvnl+uWXX3TSSSfJ5/MpJSVF11xzjaZMmRL1eceBAwcG/9+xY0dJCm63blpBQW1badeunS6++GIdf/zxOvbYYzVixAide+65YfvU2lo1OJ199tkhqX1H9W91StINN9wQMsoHAAAAdr3EuMSwaXGOOMU5wkeEqytrjJGl2uDkcrjkcoQ/7N/Qehsq1xxjx44NhpUdR9iTpPLy2hD4zjvvqHPnziHz3G63JOnll1/Wddddp/vuu09Dhw5VcnKy7rnnHn355Zehdd1hAAObzRbzsP2ffvqpVqxYof/+979NXmbt2rX66KOP9Prrr4dM/+WXX/TII49o6dKl6t+/vyRp0KBB+vTTT/Xoo4/qiSeeaHB9hx12mPx+v9asWaP9999fNptNd911l+68805t2rRJGRkZmjNnjiQ1OnBFnfrvTd2dox2n1X+vpk2bpvHjx+u9997Tq6++qltvvVWzZ8/W7373uya/H7taqwYnAAAAoCWdcMIJ8nq9stlswa5i9fXr109ut1vr1q3T8OHDG1zHZ599pmHDhmncuHHBab/88ssuq7NUe+fooIMO0qBBg5q8zLRp05SZmanRo0eHTK+srJSksLtCDocjYrBbvHix7Ha7MjMzw5arC5kvvfSShg4dqoyMjCbXs6kGDx6sAw88UNdff72OOuoovfjiiwQnAAAAYFdwOBzBn7Wp342uTnJysq677jpNnDhRlmXpiCOOUElJiT777DOlpKRozJgx6t27t2bMmKEPPvhAOTk5eu6557Ro0SLl5OQ0qy6PPPKIZs2aFbxL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Wlos1QcAAACAZokpOHXr1k1vv/122PQHHnigWesZNmyYnnzySf3888/ab7/99P3332vBggW6//77oy574IEHqqamRgMGDNCUKVN0+OGHN1iupqZGNTU1wdd1XQkty5JlWc2q765gWZaMMW2iLthz0G4QC9oNYkXbQSxoN4jF7m43zdlOTMGpTkFBgQoKCsI2OHDgwCYtP2nSJJWWlqpPnz5yOBwKBAK64447dMEFFzS6TFZWlp544gkdfPDBqqmp0dNPP62jjz5aX375pYYMGRJWfurUqbrtttvCphcWFqq6urpJ9dyVLMtSSUmJjDGy22N65Az7INoNYkG7QaxoO4gF7Qax2N3tpqysrMllbSbSSAyN+OabbzRmzBgtX748OJCDzWaTMUY2m02BQKBJ63n55Zd1/fXX65577lH//v21ePFiTZgwQffff7/GjBnT5PoMHz5c3bp103PPPRc2r6E7Tl27dlVRUVHIM1KtxbIsFRYWKiMjg5MKmox2g1jQbhAr2g5iQbtBLHZ3uyktLVV6erpKSkqiZoOY7jiNHTtW++23n/7zn/+oY8eOstlsMVX0+uuv16RJk3TuuedKkg444ACtXbtWU6dObVZwOvTQQ0N+kLc+t9stt9sdNt1ut7eZD7HNZmtT9cGegXaDWNBuECvaDmJBu0Esdme7ac42YgpOq1ev1syZM5WbmxvL4kGVlZVhlXU4HM3u07h48WJlZWXtVF0AAAAAoDExBadjjjlG33///U4Hp5NPPll33HGHunXrpv79++u7777T/fffr7FjxwbLTJ48WRs2bNCMGTMkSQ8++KBycnLUv39/VVdX6+mnn9bHH3+sDz/8cKfqAgAAAACNiSk4Pf300xozZoyWLl2qAQMGyOVyhcw/5ZRTmrSehx9+WDfffLPGjRungoICZWdn64orrtAtt9wSLJOfn69169YFX3u9Xv3lL3/Rhg0blJCQoIEDB+qjjz7SiBEjYtkVAAAAAIgqpsEh3nrrLf3xj38MDu0dssJmDA7RGkpLS5WamtqkB8B2B8uyVFBQoMzMTPr/osloN4gF7Qaxou0gFrQbxGJ3t5vmZIOYavPnP/9ZF154ofLz84O/h1T3ry2HJgAAAACIRUzBaevWrZo4caI6duzY0vUBAAAAgDYnpuB0+umna+7cuS1dFwAAAABok2IaHGK//fbT5MmT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unTp0trVCJOSksJJBc1Gu0EsaDeIFW0HsaDdIBa7s91Eu9NUhw6nAAAAABAFwQkAAAAAoiA4tTK3261bb71Vbre7tauCPQjtBrGg3SBWtB3EgnaDWLTldrPPDQ4BAAAAAM3FHScAAAAAiILgBAAAAABREJwAAAAAIAqCEwAAAABEQXBqRY8++qh69Oghj8ejww47TF999VVrVwltyNSpU3XIIYcoOTlZmZmZ+sMf/qAVK1aElKmurtZVV12l9u3bKykpSWeccYY2b97cSjVGW/TPf/5TNptNEyZMCE6j3aAxGzZs0IUXXqj27dsrPj5eBxxwgL7++uvgfGOMbrnlFmVlZSk+Pl4jR47UypUrW7HGaG2BQEA333yzcnJyFB8fr169eun2229X/bHHaDeQpE8++UQnn3yysrOzZbPZ9MYbb4TMb0o72bZtmy644AKlpKQoLS1Nl156qcrLy3fbPhCcWsl///tfXXvttbr11lv17bffatCgQTr++ONVUFDQ2lVDGzF//nxdddVV+uKLLzR79mz5fD4dd9xxqqioCJaZOHGi3nrrLb366quaP3++Nm7cqNNPP70Va422ZNGiRfr3v/+tgQMHhkyn3aAhRUVFOvzww+VyufTee+9p2bJluu+++5Senh4sc/fdd+uhhx7SE088oS+//FKJiYk6/vjjVV1d3Yo1R2u666679Pjjj+uRRx7R8uXLddddd+nuu+/Www8/HCxDu4EkVVRUaNCgQXr00UcbnN+UdnLBBRfoxx9/1OzZs/X222/rk08+0Z/+9KfdtQuSQas49NBDzVVXXRV8HQgETHZ2tpk6dWor1gptWUFBgZFk5s+fb4wxpri42LhcLvPqq68GyyxfvtxIMgsXLmytaqKNKCsrM7179zazZ882w4cPN9dcc40xhnaDxt14443miCOOaHS+ZVmmU6dO5p577glOKy4uNm6327z00ku7o4pog0aPHm3Gjh0bMu300083F1xwgTGGdoOGSTKzZs0Kvm5KO1m2bJmRZBYtWhQs89577xmbzWY2bNiwW+rNHadW4PV69c0332jkyJHBaXa7XSNHjtTChQtbsWZoy0pKSiRJ7dq1kyR988038vl8Ie2oT58+6tatG+0IuuqqqzR69OiQ9iHRbtC4N998UwcffLDOOussZWZmavDgwXrqqaeC8/Py8rRp06aQtpOa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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mean: 7.7859 ms\n", + "Median: 7.2648 ms\n", + "Std: 0.9014 ms\n", + "Min: 7.1823 ms\n", + "Max: 9.5795 ms\n" + ] + } + ], + "source": [ + "# Collect 100 samples\n", + "timings = []\n", + "for i in range(100):\n", + " timings.append(benchmark_events(simple_mm, a, b))\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.scatter(range(100), timings, alpha=0.6)\n", + "plt.axhline(y=np.median(timings), color='r', linestyle='--', label=f'Median: {np.median(timings):.4f} ms')\n", + "plt.axhline(y=np.mean(timings), color='g', linestyle=':', label=f'Mean: {np.mean(timings):.4f} ms')\n", + "plt.title(\"Benchmarking Jitter & Cold Start\")\n", + "plt.ylabel(\"Time (ms)\")\n", + "plt.xlabel(\"Run Index\")\n", + "plt.legend()\n", + "plt.grid(True, alpha=0.3)\n", + "plt.show()\n", + "\n", + "print(f\"Mean: {np.mean(timings):.4f} ms\")\n", + "print(f\"Median: {np.median(timings):.4f} ms\")\n", + "print(f\"Std: {np.std(timings):.4f} ms\")\n", + "print(f\"Min: {np.min(timings):.4f} ms\")\n", + "print(f\"Max: {np.max(timings):.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hX_-OpftzX2i" + }, + "source": [ + "You will see a massive dot at $x=0$ (the cold start), followed by a cloud of dots hovering around the \"true\" time. This visualizes why we need **Warmup** (to skip $x=0$) and **Statistics** (to handle the cloud).\n", + "\n", + "Notice how the **Mean** is pulled upward by the outliers, while the **Median** represents the typical case more accurately.\n", + "\n", + "### Attempt 6: The \"Robust\" Harness (Flushing Cache)\n", + "\n", + "Modern GPUs have massive L2 caches (40MB on A100, 50MB on H100). If your data fits in the cache, subsequent iterations in your loop will skip the slow VRAM access, artificially inflating your speed. In production, data usually streams in from VRAM, so this \"hot cache\" benchmark is misleading.\n", + "\n", + "**The Fix:**\n", + "We must **flush the L2 cache** between *every single sample*. We do this by writing to a tensor large enough to completely evict the cache contents. The A100 has a 40MB L2 cache, H100 has 50MB—so we allocate ~256MB to be safe." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Kj5azcpxzX2j" + }, + "outputs": [], + "source": [ + "# Allocate a tensor large enough to evict L2 cache (256MB >> 40-50MB L2)\n", + "cache_flush_buffer = torch.empty(int(256e6 // 4), dtype=torch.int32, device='cuda')\n", + "\n", + "def flush_l2_cache():\n", + " \"\"\"Flush GPU L2 cache by writing to a large buffer.\"\"\"\n", + " cache_flush_buffer.zero_()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FAaH1cdBzX2j" + }, + "source": [ + "We also need to handle **OS Jitter**. Taking the **Mean** (Average) includes the outliers where the OS interrupted the process. It is standard practice to take the **Median** (50th percentile) to represent the \"typical\" performance.\n", + "\n", + "### The Final Solution: `triton.testing.do_bench`\n", + "\n", + "We have now discovered that a robust benchmark requires:\n", + "\n", + "1. Device Synchronization\n", + "2. CUDA Events (to avoid CPU overhead)\n", + "3. Warmup Runs (to avoid initialization costs)\n", + "4. **Multiple Samples** (to handle variance)\n", + "5. Cache Flushing (to simulate VRAM access)\n", + "6. Median Aggregation (to ignore OS jitter)\n", + "\n", + "Writing this boilerplate every time is painful. Fortunately, the **Triton** team has already packaged all these lessons into `triton.testing.do_bench`.\n", + "\n", + "By default, `do_bench` returns the **median** runtime, which is robust to OS jitter and outliers.1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3aVFtWt_zX2j", + "outputId": "6cf1e493-86ca-419e-a8e1-e19486814e09" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Triton do_bench time: 7.2214 ms\n" + ] + } + ], + "source": [ + "def final_benchmark(func, *args):\n", + " \"\"\"Production-ready benchmarking using Triton's do_bench.\"\"\"\n", + " # do_bench automatically handles:\n", + " # - Warmup & Cache Flushing\n", + " # - CUDA Events\n", + " # - Returns median by default\n", + " ms = triton.testing.do_bench(lambda: func(*args), warmup=25, rep=100)\n", + " return ms\n", + "\n", + "t = final_benchmark(simple_mm, a, b)\n", + "print(f\"Triton do_bench time: {t:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MsZrCYQRzX2j" + }, + "source": [ + "1 *For more granular control, `do_bench` accepts a `quantiles` parameter to return specific percentiles (e.g., min, max, mean). See the [official documentation](https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html) for details.*" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5ef3kvNTzX2j" + }, + "source": [ + "## Computing TFLOPS: Are We Hitting Roofline?\n", + "\n", + "A fast kernel that only achieves 10% of theoretical peak is leaving performance on the table. To understand efficiency, we need to convert our millisecond timings into **TFLOPS** (Tera Floating-Point Operations Per Second) and compare against the hardware's theoretical maximum.\n", + "\n", + "For matrix multiplication of two $N \\times N$ matrices, the number of floating-point operations is approximately $2N^3$ (multiply-add for each output element)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "62aBgaO8zX2j", + "outputId": "2800f1ae-2618-4861-bba6-315015b8d5cf" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Matrix Multiplication Performance (FP32)\n", + "==================================================\n", + "Size Time (ms) TFLOPS % of Peak \n", + "--------------------------------------------------\n", + "1024 0.1355 15.85 10.2 %\n", + "2048 0.9757 17.61 11.3 %\n", + "4096 7.2221 19.03 12.2 %\n", + "8192 57.3481 19.17 12.3 %\n", + "\n", + "Note: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\n" + ] + } + ], + "source": [ + "def get_tflops(n, time_ms, dtype=torch.float32):\n", + " \"\"\"Calculate achieved TFLOPS for matrix multiplication.\"\"\"\n", + " flops = 2 * n ** 3 # Multiply-add for each of N^2 output elements\n", + " tflops = flops / (time_ms * 1e-3) / 1e12\n", + " return tflops\n", + "\n", + "# A100 theoretical peaks (SXM4 variant)\n", + "A100_PEAK_TFLOPS = {\n", + " 'fp32': 19.5,\n", + " 'tf32': 156.0, # With tensor cores\n", + " 'fp16': 312.0, # With tensor cores\n", + " 'bf16': 312.0, # With tensor cores\n", + "}\n", + "\n", + "# Benchmark at different sizes\n", + "print(\"Matrix Multiplication Performance (FP32)\")\n", + "print(\"=\" * 50)\n", + "print(f\"{'Size':<10} {'Time (ms)':<12} {'TFLOPS':<10} {'% of Peak':<10}\")\n", + "print(\"-\" * 50)\n", + "\n", + "for size in [1024, 2048, 4096, 8192]:\n", + " a_test, b_test = get_data(size)\n", + " time_ms = final_benchmark(simple_mm, a_test, b_test)\n", + " tflops = get_tflops(size, time_ms)\n", + " # Note: PyTorch uses TF32 by default on Ampere+, so compare against TF32 peak\n", + " peak = A100_PEAK_TFLOPS['tf32']\n", + " efficiency = (tflops / peak) * 100\n", + " print(f\"{size:<10} {time_ms:<12.4f} {tflops:<10.2f} {efficiency:<10.1f}%\")\n", + "\n", + "print(\"\\nNote: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HwsjlhAazX2j" + }, + "source": [ + "## The \"Agent\" Trap: Reward Hacking via Hidden Streams\n", + "\n", + "When evaluating LLM-generated kernels (like with [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), you're not just fighting measurement noise—you're fighting an optimizer that may inadvertently discover exploits in your harness.\n", + "\n", + "One such exploit: launching work on a **side stream** to make the kernel appear instantaneous." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "UuwtML39zX2j", + "outputId": "95ebbb26-e415-491a-da30-6a78ce387906" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Standard benchmark on tricky kernel: 0.0032 ms\n" + ] + } + ], + "source": [ + "def tricky_agent_kernel(a, b):\n", + " \"\"\"A 'clever' kernel that games the benchmarking harness.\"\"\"\n", + " # The agent creates a new stream to \"optimize\"\n", + " s = torch.cuda.Stream()\n", + " with torch.cuda.stream(s):\n", + " # This work happens on a side channel!\n", + " result = torch.matmul(a, b)\n", + " return result\n", + "\n", + "print(f\"Standard benchmark on tricky kernel: {final_benchmark(tricky_agent_kernel, a, b):.4f} ms\")\n", + "# Likely reports ~0.00ms or very close to it!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3HXns_XizX2j" + }, + "source": [ + "**The Issue:**\n", + "Standard benchmarking tools (including `do_bench`) record events on the *current default stream*.\n", + "\n", + "1. Benchmark starts timer on Stream A (the default stream).\n", + "2. Agent launches work on Stream B and returns immediately.\n", + "3. Benchmark stops timer on Stream A.\n", + "\n", + "Since Stream A had no work, the timer reports `~0.00ms`, while Stream B is still churning away in the background.\n", + "\n", + "**Why this matters for evals:**\n", + "If your reward signal is \"lower time = better score,\" an agent that discovers this pattern will be rewarded for producing *broken* code. The kernel \"runs\" instantly because you never measured it at all.\n", + "\n", + "**Mitigations:**\n", + "- **Wall-clock + full device sync:** Trade precision for correctness (catches all streams, but includes CPU overhead)\n", + "- **Static analysis:** Reject submissions that create `torch.cuda.Stream()` objects\n", + "- **Manual inspection:** For high-stakes evals, benchmark kernels in isolation outside the automated harness\n", + "\n", + "**How KernelBench Addresses this**\n", + "[Insert something here]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KbAFqiyizX2j", + "outputId": "6bc91db4-935c-4af9-bdc9-be3c50e890c4" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Robust benchmark on tricky kernel: 7.9620 ms\n", + "Robust benchmark on normal kernel: 7.3177 ms\n" + ] + } + ], + "source": [ + "def benchmark_untrusted(func, *args):\n", + " \"\"\"Benchmark untrusted code by using wall-clock time with full device sync.\n", + "\n", + " This trades some precision (includes CPU overhead) for correctness\n", + " (catches work on any stream).\n", + " \"\"\"\n", + " torch.cuda.synchronize() # Clear any pending work\n", + " start = time.perf_counter()\n", + " func(*args)\n", + " torch.cuda.synchronize() # Wait for ALL streams\n", + " end = time.perf_counter()\n", + " return (end - start) * 1000\n", + "\n", + "print(f\"Robust benchmark on tricky kernel: {benchmark_untrusted(tricky_agent_kernel, a, b):.4f} ms\")\n", + "print(f\"Robust benchmark on normal kernel: {benchmark_untrusted(simple_mm, a, b):.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Uq4qvl8FzX2j" + }, + "source": [ + "## Correctness Before Speed\n", + "\n", + "A kernel that runs in 0.1ms but produces garbage is worthless. Before you start optimizing, **always verify correctness** against a reference implementation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "J9W63Q5czX2k", + "outputId": "312076ee-f089-4276-8b8f-bb7a23575d3d" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "✓ Correctness verified!\n", + "Kernel time: 0.1363 ms\n" + ] + } + ], + "source": [ + "def my_experimental_kernel(a, b):\n", + " \"\"\"Pretend this is our custom optimized kernel.\"\"\"\n", + " return torch.matmul(a, b) # In reality, this would be your Triton/CUDA code\n", + "\n", + "def verify_correctness(kernel_fn, ref_fn, *args, atol=1e-2, rtol=1e-2):\n", + " \"\"\"Verify kernel produces correct output before benchmarking.\"\"\"\n", + " ref_output = ref_fn(*args)\n", + " kernel_output = kernel_fn(*args)\n", + "\n", + " if not torch.allclose(ref_output, kernel_output, atol=atol, rtol=rtol):\n", + " max_diff = (ref_output - kernel_output).abs().max().item()\n", + " raise AssertionError(\n", + " f\"Kernel output doesn't match reference! \"\n", + " f\"Max difference: {max_diff:.6f}\"\n", + " )\n", + " print(\"✓ Correctness verified!\")\n", + " return True\n", + "\n", + "# Always verify before benchmarking\n", + "a_test, b_test = get_data(1024)\n", + "verify_correctness(my_experimental_kernel, simple_mm, a_test, b_test)\n", + "\n", + "# Only benchmark if correct\n", + "time_ms = final_benchmark(my_experimental_kernel, a_test, b_test)\n", + "print(f\"Kernel time: {time_ms:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zcYVXCkUzX2k" + }, + "source": [ + "## Conclusion\n", + "\n", + "Benchmarking on GPUs is fundamentally different from CPUs. The asynchronous nature of kernel launches, the hidden state of the L2 cache, and the noise of the OS scheduler all conspire to give you the wrong numbers.\n", + "\n", + "To get reliable numbers:\n", + "\n", + "1. **`do_bench` is pretty good:** For 99% of ops, Triton's built-in tool is the gold standard.\n", + "2. **Always Inspect:** Always assume generated code might game your benchmark with things like hidden streams.\n", + "3. **Measure Efficiency:** Convert milliseconds to TFLOPS to understand if you're hitting roofline.\n", + "4. **Verify First:** A fast kernel that produces the wrong output is useless. Always run an `allclose` check before you start the timer.\n", + "\n", + "Happy optimizing!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7Ah151CHzX2k" + }, + "source": [ + "---\n", + "\n", + "### Footnotes\n", + "\n", + "**On GPU Clock States:** For highly reproducible benchmarks (e.g., publishing papers), consider locking GPU clocks with `nvidia-smi -lgc `. GPUs dynamically adjust clock speeds based on thermals and power, which can introduce variance between runs. For most development work, median-based benchmarking handles this adequately.\n", + "\n", + "**On Warmup Iterations:** We use fixed warmup counts (10-50 iterations) for simplicity, but this can be insufficient or wasteful depending on the kernel. In extremely sensitive environments, you can implement an adaptive stopping criterion: run warmup iterations until the variance of recent samples falls below a threshold, indicating the system has stabilized. This is covered in more detail in the [GPU MODE lecture](https://www.youtube.com/watch?v=1i7dxoAfKOU).\n", + "\n", + "**On Bare Metal vs. Virtualized Environments:** Cloud VMs and containers add layers of abstraction that can introduce variance and overhead. GPU passthrough in virtualized environments adds latency, and shared cloud instances suffer from \"noisy neighbor\" effects where other tenants' workloads impact your measurements. For publishable results or when chasing small performance deltas, prefer bare metal. For day-to-day development, cloud instances are fine as long as you're aware your numbers may not match others exactly." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.0" + }, + "colab": { + "provenance": [], + "gpuType": "A100", + "include_colab_link": true + }, + "accelerator": "GPU" + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index d7f31a49..22a954d0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # Frameworks -torch==2.5.0 +torch==2.9.0 # we shall upgrade torch for blackwell when it is stable transformers datasets @@ -9,6 +9,7 @@ modal nvidia-cutlass-dsl tilelang apache-tvm +triton==3.5.0 # helper tqdm From b26e05f2c092b4acdca8f17ef90c3ba89760a072 Mon Sep 17 00:00:00 2001 From: Sahan Date: Wed, 17 Dec 2025 21:05:00 +0000 Subject: [PATCH 15/25] benchmarking guide --- benchmarking.ipynb | 886 ------------------ notebooks/benchmarking.ipynb | 1645 ++++++++++++++++++++++++++++++++++ 2 files changed, 1645 insertions(+), 886 deletions(-) delete mode 100644 benchmarking.ipynb create mode 100644 notebooks/benchmarking.ipynb diff --git a/benchmarking.ipynb b/benchmarking.ipynb deleted file mode 100644 index f799ec3a..00000000 --- a/benchmarking.ipynb +++ /dev/null @@ -1,886 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "view-in-github", - "colab_type": "text" - }, - "source": [ - "\"Open" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "_PCU0gUyzX2c" - }, - "source": [ - "# A Practical Guide to GPU Benchmarking\n", - "\n", - "## TL;DR — How to Benchmark Correctly\n", - "\n", - "Benchmarking on GPUs requires a strict protocol to avoid measuring Python overhead or caching artifacts. To get reliable numbers, you must:\n", - "\n", - "1. **Warmup:** Run the kernel ~10-50 times first to settle compilation and memory allocators.\n", - "2. **Sample Extensively:** Don't trust one run. Collect 100+ samples to build a statistical distribution.\n", - "3. **Flush the L2 Cache:** Between *every* sample, flush the cache to force a cold cache state (simulating real-world inference).\n", - "4. **Use Device Timers:** Use `torch.cuda.Event` instead of `time.time()` to measure execution on the GPU, not the CPU driver.\n", - "5. **Aggregate Robustly:** Use the **Median** (not Mean) of your samples to filter out OS jitter/outliers.\n", - "6. **Wait for sidestreams to finish:** Ensure no side-streams are running or wait for all of them to finish before reporting a time.\n", - "\n", - "*Pro-Tip:* **`triton.testing.do_bench`** implements steps 1-5 automatically. Just use it!\n", - "\n", - "-----\n", - "\n", - "If are using an LLM agent to write GPU kernels (and evaluating against something like say [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), or just trying to optimize a custom GPU kernel, you are eventually going to ask: **\"How fast is this thing?\"**\n", - "\n", - "This notebook is heavily inspired by [this great guide](https://www.youtube.com/watch?v=1i7dxoAfKOU) from the **GPU MODE** community and the practical \"footguns\" (traps) encountered while building benchmarking harnesses for LLM-generated code. Our goal here is simplicity and keeping things Pythonic—for more advanced techniques, see the footnotes.\n", - "\n", - "We won't just list best practices. Instead, we are going to build a benchmarking harness from scratch, make every common mistake, debug why the numbers are wrong, and iterate our way to a robust solution. So let's start things out by doing the most naive thing by using `time.time()`!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "PKWz_W7uzX2f", - "outputId": "8751fd78-569b-4080-f21a-60bbb5ee8caf" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Using GPU: NVIDIA A100-SXM4-40GB\n" - ] - } - ], - "source": [ - "# @title Environment Setup\n", - "# Ensure we have the necessary libraries and a GPU available\n", - "!pip install -q triton matplotlib numpy torch\n", - "\n", - "import torch\n", - "import time\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import triton\n", - "\n", - "if not torch.cuda.is_available():\n", - " raise RuntimeError(\"This notebook requires a GPU. Please go to Runtime -> Change runtime type -> Hardware accelerator -> {Your Favorite GPU we like A100s :)}.\")\n", - "\n", - "print(f\"Using GPU: {torch.cuda.get_device_name(0)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "kjWByrwvzX2f" - }, - "source": [ - "## The Journey: Benchmarking a Matrix Multiplication\n", - "\n", - "Let's define a simple workload to test. We want to measure the performance of a standard Matrix Multiplication." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "gxtKes5lzX2g", - "outputId": "5890bae4-5b9a-4366-8947-367146593158" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Output shape: torch.Size([4096, 4096])\n", - "Op ran successfully\n" - ] - } - ], - "source": [ - "# A standard size for testing\n", - "N = 4096\n", - "\n", - "def get_data(n=N):\n", - " \"\"\"Generate random float32 matrices for benchmarking.\"\"\"\n", - " return torch.randn(n, n, device=\"cuda\"), torch.randn(n, n, device=\"cuda\")\n", - "\n", - "def simple_mm(a, b):\n", - " \"\"\"Our kernel under test: standard matrix multiplication.\"\"\"\n", - " return torch.matmul(a, b)\n", - "\n", - "# Let's verify it runs\n", - "a, b = get_data()\n", - "res = simple_mm(a, b)\n", - "print(f\"Output shape: {res.shape}\")\n", - "print(\"Op ran successfully\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "GWlsBEVyzX2g" - }, - "source": [ - "### Attempt 1: The Naive Timer (The Asynchronous Illusion)\n", - "\n", - "The most intuitive way to time code in Python is using `time.time()`. Let's try that first." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "LynIxLaRzX2g", - "outputId": "72548dad-6570-4eaa-ce07-923556fe70b4" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Naive time: 0.5486 ms\n" - ] - } - ], - "source": [ - "def benchmark_naive(func, *args):\n", - " \"\"\"WRONG: Measures kernel launch time, not execution time.\"\"\"\n", - " start = time.time()\n", - " func(*args)\n", - " end = time.time()\n", - " return (end - start) * 1000 # to ms\n", - "\n", - "t = benchmark_naive(simple_mm, a, b)\n", - "print(f\"Naive time: {t:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gw4NGYRmzX2h" - }, - "source": [ - "**The Problem:**\n", - "Wait, > `1.0ms`? That is impossibly fast for a 4096² matrix multiplication. If that were real, we'd be breaking the laws of physics.\n", - "\n", - "**What happened?**\n", - "GPUs are **asynchronous**. When you call `torch.matmul`, the CPU doesn't actually do the math. It simply queues a \"launch kernel\" command to the GPU and moves on immediately. Our timer didn't measure the matrix multiplication; it measured how long it took Python to place an order in the queue." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "8KA1MUzRzX2h" - }, - "source": [ - "### Attempt 2: Synchronizing the Device\n", - "\n", - "To fix this, we need to force the CPU to wait until the GPU has finished its work before we stop the clock. We do this with `torch.cuda.synchronize()`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "1Zh4u403zX2h", - "outputId": "5733b98c-bf0e-4997-ca94-43395a5bfc84" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Sync time: 9.3794 ms\n" - ] - } - ], - "source": [ - "def benchmark_sync(func, *args):\n", - " \"\"\"Better: Actually waits for GPU to finish.\"\"\"\n", - " torch.cuda.synchronize() # Wait for previous work to finish\n", - " start = time.time()\n", - " func(*args)\n", - " torch.cuda.synchronize() # Wait for THIS work to finish\n", - " end = time.time()\n", - " return (end - start) * 1000\n", - "\n", - "t = benchmark_sync(simple_mm, a, b)\n", - "print(f\"Sync time: {t:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "kDQc-31TzX2h" - }, - "source": [ - "**The Problem:**\n", - "This gives us a much more realistic number (e.g., ~1.5ms). However, we are still using `time.time()`, which measures **Wall Clock** time on the CPU. This includes:\n", - "\n", - "1. Python interpreter overhead.\n", - "2. PyTorch dispatcher overhead.\n", - "3. The time it takes the CPU driver to talk to the GPU.\n", - "\n", - "For large ops, this is fine. But if you are optimizing small, fast kernels (running in microseconds), the Python overhead might be larger than the kernel execution itself!\n", - "\n", - "#### Visualizing the Lie\n", - "\n", - "The best way to see this error is to plot the time as we increase the matrix size.\n", - "* **Physics says:** As matrix size $N$ doubles, operations increase by $8x$ ($N^3$). The time should curve upwards sharply.\n", - "* **The Lie says:** If we are just measuring launch overhead, the time will be roughly constant regardless of $N$." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 653 - }, - "id": "N1tijm0KzX2i", - "outputId": "8328b014-40c5-4f1c-b66b-9cd721f1c0e7" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Collecting data points...\n", - " N=512: naive=0.3424ms, sync=0.1037ms\n", - " N=1024: naive=0.1950ms, sync=0.2241ms\n", - " N=2048: naive=0.0648ms, sync=1.2853ms\n", - " N=4096: naive=0.0436ms, sync=9.3215ms\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAIjCAYAAADFthA8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAghVJREFUeJzs3Xd4FFXfxvHvbnpIoyQk9NCUDqIgIqICAqKigNKbgA8+ICJiwYaoiGJ57FhQQGkixQ6KCIgUEenCi4AURSBISQLp2Xn/GLLLkkICSWaTvT/XlQvO2bMzv92ThdyZmTM2wzAMREREREREvITd6gJERERERESKk0KQiIiIiIh4FYUgERERERHxKgpBIiIiIiLiVRSCRERERETEqygEiYiIiIiIV1EIEhERERERr6IQJCIiIiIiXkUhSEREREREvIpCkIjIJVqxYgU2m4358+dbXUqJMGjQIEJCQqwuo0SZPn06NpuN/fv3O/uuv/56rr/++iLbZ40aNRg0aFCRbV9ExEoKQSIiObDZbPn6WrFihSX17dy5E5vNRmBgIKdOnbKkBikaCtUiIkXP1+oCREQ80SeffOLW/vjjj1m6dGm2/nr16rFz587iLA2AmTNnEh0dzcmTJ5k/fz5Dhw4t9hqkdNu1axd2u35XKiKlk0KQiEgO+vXr59Zet24dS5cuzdYPFHsIMgyD2bNn06dPH/bt28esWbO8JgRlZGTgcDjw9/e3upRSLyAgwOoSRESKjH7FIyJSSBwOBxMnTqRKlSoEBgbSrl079uzZk23cL7/8QqdOnQgPDyc4OJi2bduyevXqfO9n9erV7N+/n169etGrVy9++ukn/v7772zjNmzYQMeOHalQoQJBQUHExsZy9913A2aQqlGjBl27ds32vJSUFMLDw/nPf/4DuE7PmjdvXr5f380330zZsmUpU6YMjRs35vXXX8827tChQ9x+++2EhIQQGRnJ2LFjyczMdD6+f/9+bDYbL7/8Mq+99hq1atUiICCAHTt2APDjjz/Spk0bypQpQ0REBF27ds0WSJ9++mlsNht79uxh0KBBREREEB4ezuDBg0lKSnIbm5GRwbPPPuvcT40aNXjsscdITU11G2ez2Xj66aezvZ7zr6FJT09nwoQJ1KlTh8DAQMqXL8+1117L0qVLsz23MOR03RC45u/cUzd3795N9+7diY6OJjAwkCpVqtCrVy/i4+NzfT0Af/75J3feeSflypUjODiYq6++mm+++SbH/eX3+0VExAo6EiQiUkheeOEF7HY7Y8eOJT4+nsmTJ9O3b19++eUX55gff/yRzp0707x5c8aPH4/dbmfatGnceOONrFq1ihYtWlxwP7NmzaJWrVpcddVVNGzYkODgYObMmcNDDz3kHBMXF8dNN91EZGQkjz76KBEREezfv5+FCxcC5g/y/fr1Y/LkyZw4cYJy5co5n/vVV1+RkJCQ7ahXfl7f0qVLueWWW4iJieH+++8nOjqanTt38vXXX3P//fc7x2VmZtKxY0datmzJyy+/zA8//MArr7xCrVq1uPfee932O23aNFJSUrjnnnsICAigXLly/PDDD3Tu3JmaNWvy9NNPk5yczJtvvknr1q3ZuHEjNWrUcNvGXXfdRWxsLJMmTWLjxo1MnTqVqKgoXnzxReeYoUOHMmPGDHr06MGDDz7IL7/8wqRJk9i5cyeLFi264Lyc7+mnn2bSpEkMHTqUFi1akJCQwIYNG9i4cSMdOnQo8PYKS1paGh07diQ1NZX77ruP6OhoDh06xNdff82pU6cIDw/P8XlHjx7lmmuuISkpiVGjRlG+fHlmzJjBbbfdxvz587njjjvcxufn+0VExDKGiIhc0IgRI4zc/slcvny5ARj16tUzUlNTnf2vv/66ARjbtm0zDMMwHA6HUadOHaNjx46Gw+FwjktKSjJiY2ONDh06XLCOtLQ0o3z58sbjjz/u7OvTp4/RpEkTt3GLFi0yAOPXX3/NdVu7du0yAGPKlClu/bfddptRo0YNZ435fX0ZGRlGbGysUb16dePkyZNu2zz39Q4cONAAjGeeecZtTLNmzYzmzZs72/v27TMAIywszIiLi3Mb27RpUyMqKso4fvy4s2/Lli2G3W43BgwY4OwbP368ARh333232/PvuOMOo3z58s725s2bDcAYOnSo27ixY8cagPHjjz86+wBj/PjxxvmqV69uDBw40Nlu0qSJ0aVLl2zjLiTr/f7ss8+cfdOmTTMAY9++fc6+tm3bGm3bts1zzLnbW758uWEYhrFp06Zs28/J+a9n9OjRBmCsWrXK2ZeYmGjExsYaNWrUMDIzM932d6HvFxERK+l0OBGRQjJ48GC3a1XatGkDmKcQAWzevJndu3fTp08fjh8/zr///su///7LmTNnaNeuHT/99BMOhyPPfSxevJjjx4/Tu3dvZ1/v3r3ZsmULv//+u7MvIiICgK+//pr09PQct1W3bl1atmzJrFmznH0nTpxg8eLF9O3bF5vNVqDXt2nTJvbt28fo0aOd+89y/rYAhg8f7tZu06aNc1vn6t69O5GRkc724cOH2bx5M4MGDXI7gtW4cWM6dOjAt99+m699HT9+nISEBADnc8aMGeM27sEHHwTIdspXfkRERPD777+ze/fuAj+3KGUd6fnuu++ynRKYl2+//ZYWLVpw7bXXOvtCQkK455572L9/v/M0xSwX+n4REbGSQpCISCGpVq2aW7ts2bIAnDx5EsD5w/DAgQOJjIx0+5o6dSqpqalu12TkZObMmcTGxhIQEMCePXvYs2cPtWrVIjg42C3MtG3blu7duzNhwgQqVKhA165dmTZtWrbrWwYMGMDq1as5cOAAAJ999hnp6en079+/wK9v7969ADRs2DDP1wAQGBjoFmyytpe1rXPFxsa6tbNqveyyy7KNrVevnjNYFqT2AwcOYLfbqV27ttu46OhoIiIinPssiGeeeYZTp05Rt25dGjVqxEMPPcTWrVsLvJ3CFhsby5gxY5g6dSoVKlSgY8eOvP322xf83jtw4ECu73nW4+e60HsuImIlhSARkULi4+OTY79hGADOozwvvfQSS5cuzfErr5uIJiQk8NVXX7Fv3z7q1Knj/Kpfvz5JSUnMnj3bua+s+8ysXbuWkSNHcujQIe6++26aN2/O6dOnndvs1asXfn5+zgA1c+ZMrrzyyhx/2L3Q6yuI3LaVk6CgoAJvP7/7O7/2nI5Y5de5izoAXHfddezdu5ePPvqIhg0bMnXqVK644gqmTp160fvIS261n18XwCuvvMLWrVt57LHHSE5OZtSoUTRo0CDHBTYuVmF+v4iIFDYtjCAiUkxq1aoFQFhYGO3bty/w8xcuXEhKSgpTpkyhQoUKbo/t2rWLJ554gtWrV7udrnT11Vdz9dVXM3HiRGbPnk3fvn2ZO3euc0ntcuXK0aVLF2bNmkXfvn1ZvXo1r7322iW9vu3bt1/U68uv6tWrA+ZrPt///d//UaFCBcqUKVPgbTocDnbv3u08sgHmYgCnTp1y7hPMIxrn36A2LS2Nw4cPZ9tuuXLlGDx4MIMHD+b06dNcd911PP3000WypHnWkZbza8vtKFajRo1o1KgRTzzxBGvWrKF169a8++67PPfcczmOr169eq7vedbjIiIlhY4EiYgUk+bNm1OrVi1efvllt6MxWY4dO5bn82fOnEnNmjUZPnw4PXr0cPsaO3YsISEhziM6J0+ezPYb96ZNmwJkOyWuf//+7Nixg4ceeggfHx969ep1Ua/viiuuIDY2ltdeey3bD+KF+dv/mJgYmjZtyowZM9z2s337dr7//ntuvvnmAm8z6znnB8BXX30VgC5dujj7atWqxU8//eQ27v333892xOX48eNu7ZCQEGrXrp3t/S8sWSH03NoyMzN5//333cYlJCSQkZHh1teoUSPsdnuetd18882sX7+etWvXOvvOnDnD+++/T40aNahfv35hvAwRkWKhI0EiIsXEbrczdepUOnfuTIMGDRg8eDCVK1fm0KFDLF++nLCwML766qscn/vPP/+wfPlyRo0alePjAQEBdOzYkc8++4w33niDGTNm8M4773DHHXdQq1YtEhMT+eCDDwgLC8sWErp06UL58uX57LPP6Ny5M1FRURf9+qZMmcKtt95K06ZNGTx4MDExMfzf//0fv//+O999991FbTcnL730Ep07d6ZVq1YMGTLEuUR2eHh4jvfwuZAmTZowcOBA3n//fU6dOkXbtm1Zv349M2bM4Pbbb+eGG25wjh06dCjDhw+ne/fudOjQgS1btvDdd99lOzpXv359rr/+epo3b065cuXYsGED8+fPZ+TIkZf68nPUoEEDrr76asaNG+dc9nzu3LnZAs+PP/7IyJEjufPOO6lbty4ZGRl88skn+Pj40L1791y3/+ijjzJnzhw6d+7MqFGjKFeuHDNmzGDfvn0sWLAAu12/VxWRkkMhSESkGF1//fWsXbuWZ599lrfeeovTp08THR1Ny5YtnTcnzcncuXNxOBzceuutuY659dZbWbBgAYsXL3b+ED937lyOHj1KeHg4LVq0YNasWdkWGvD396dnz5688847OS6IUBAdO3Zk+fLlTJgwgVdeeQWHw0GtWrUYNmzYJW33fO3bt2fJkiWMHz+ep556Cj8/P9q2bcuLL76Y7fXl19SpU6lZsybTp09n0aJFREdHM27cOMaPH+82btiwYezbt48PP/yQJUuW0KZNG5YuXUq7du3cxo0aNYovv/yS77//ntTUVKpXr85zzz3ndj+nwjZr1iz+85//8MIL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bX///v3YbDY2b95cZPsQERER8XgbPoR5A10BqM5NMPDLUh+AQCEob8snwcrJOT+2crL5eBE4duwY9957L9WqVSMgIIDo6Gg6duzI6tWri2R/nubXX3/lnnvusboMERERkdLJMAj59Q3s344FDLOvSR/oNRv8y1haWnHR6XB5sfvA8onm38+9++3KyWb/DY8XyW67d+9OWloaM2bMoGbNmhw9epRly5Zx/PjxItlfYUhLS8Pf379QthUZGVko2xERERGR82RmYPtmDCEbZ7j6rn0A2o0vFTdBzS8dCcpL24fNoLN8ouuI0LkB6NxgVEhOnTrFqlWrePHFF7nhhhuoXr06LVq0YNy4cdx2223cfffd3HKL+zrt6enpREVF8eGHHwJw/fXXM2rUKB5++GHKlStHdHQ0Tz/9dLb9/Oc//6FixYoEBgbSsGFDvv76a7cx3333HfXq1SMkJIROnTpx+PBh52ODBg3i9ttvZ+LEiVSqVInLLrsMgG3btnHjjTcSFBRE+fLlueeeezh9+nS257388svExMRQvnx5RowYQXp6unPMuafDTZ8+HZvNlu3r3NczdepU6tevT2hoKPXq1eOdd95xex3r16+nWbNmBAYGcuWVV7Jp06aCTYqIiIhIaZCeDPMGYDs3AHV6Ado/7VUBCLzxSNB7beF0XMGe4x9qBp+so0L+obBhmvkF+GIAeXzjhETBf1bma1chISGEhITw+eefc/XVVxMQEOD2+NChQ7nuuus4fPgwMTExAHz99dckJSXRs2dP57gZM2YwZswYfvnlF9auXcugQYNo3bo1HTp0wOFw0LlzZxITE5k5cya1atVix44d+Pj4OJ+flJTEyy+/zCeffILdbqdfv36MHTuWWbNmOccsW7aMsLAwli5dCsCZM2fo2LEjrVq14tdffyUuLo6hQ4cycuRIpk+f7nze8uXLiYmJYfny5ezZs4eePXvStGlThg0blu396NmzJ506dXK2V6xYQf/+/Wnd2lyvftasWTz11FO8+eabNGrUiG3btnHPPfdQpkwZBg4cyOnTp7nlllvo0KEDM2fOZN++fdx///35mgsRERGRUiP5pLkC3MG1ABh2P4zbp2BvfKfFhVnD+0LQ6ThI/OfStpGWaH6RZ/S5KL6+vkyfPp1hw4bx7rvvcsUVV9C2bVt69epF48aNueaaa7jsssv45JNP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z1i9erXRvn17o0KFCkZcXJxhGOaSg9WqVTN+/PFHY8OGDUarVq2MVq1aOZ+fteTgTTfdZGzevNlYsmSJERkZqSWyLyAxMdHYtGmTsWnTJgMwXn31VWPTpk3GgQMHDMMwl8iOiIgwvvjiC2Pr1q1G165dc1wiu1mzZsYvv/xi/Pzzz0adOnXclmU+deqUUbFiRaN///7G9u3bjblz5xrBwcFalvk8ec1FYmKiMXbsWGPt2rXGvn37jB9++MG44oorjDp16hgpKSnObWguLs29995rhIeHGytWrHBbajYpKck5pjD+Lcpa/vShhx4ydu7cabz99tulZvnTwnKhudizZ4/xzDPPGBs2bDD27dtnfPHFF0bNmjWN6667zrkNzcWle/TRR42VK1ca+/btM7Zu3Wo8+uijhs1mM77//nvDMPR5KC55zYM+C9Y6f2U+fSbyphCUg549exoxMTGGv7+/UblyZaNnz57Gnj17nI8nJycb//3vf42yZcsawcHBxh133GEcPnzYbRv79+83OnfubAQFBRkVKlQwHnzwQSM9Pb24X0qJsnz5cgPI9jVw4EDDMMxlsp988kmjYsWKRkBAgNGuXTtj165dbts4fvy40bt3byMkJMQICwszBg8ebCQmJrqN2bJli3HttdcaAQEBRuXKlY0XXnihuF5iiZHXXCQlJRk33XSTERkZafj5+RnVq1c3hg0b5rbEpmFoLi5VTu8/YEybNs05prD+LVq+fLnRtGlTw9/f36hZs6bbPuTCc3Hw4EHjuuuuM8qVK2cEBAQYtWvXNh566CG3e6MYhubiUt19991G9erVDX9/fyMyMtJo166dMwAZhj4PxSWvedBnwVrnhyB9JvJmMwzDKL7jTiIiIiIiItbSNUEiIiIiIuJVFIJERERERMSrKASJiIiIiIhXUQgSERERERGvohAkIiIiIiJeRSFIRERERES8ikKQiIiIiIh4FYUgERERERHxKgpBIiJimRo1avDaa68V6T4GDRrE7bffXqT7ALjuuuuYPXt2gZ/36KOPct999xVBRSIikhuFIBERLzZo0CBsNhvDhw/P9tiIESOw2WwMGjQo39vbv38/NpuNzZs352v8r7/+yj333JPv7efkgw8+oEmTJoSEhBAREUGzZs2YNGmS8/HXX3+d6dOnX9I+LuTLL7/k6NGj9OrVy9lXo0YNbDYb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\n" - }, - "metadata": {} - } - ], - "source": [ - "sizes = [512, 1024, 2048, 4096]\n", - "naive_times = []\n", - "sync_times = []\n", - "\n", - "print(\"Collecting data points...\")\n", - "for s in sizes:\n", - " a_test, b_test = get_data(s)\n", - " naive_times.append(benchmark_naive(simple_mm, a_test, b_test))\n", - " sync_times.append(benchmark_sync(simple_mm, a_test, b_test))\n", - " print(f\" N={s}: naive={naive_times[-1]:.4f}ms, sync={sync_times[-1]:.4f}ms\")\n", - "\n", - "plt.figure(figsize=(10, 6))\n", - "plt.plot(sizes, naive_times, label='Naive (Async)', marker='o', linewidth=2)\n", - "plt.plot(sizes, sync_times, label='Synchronized', marker='x', linewidth=2)\n", - "plt.xlabel('Matrix Size (N)')\n", - "plt.ylabel('Time (ms)')\n", - "plt.legend()\n", - "plt.title(\"The Asynchronous Illusion\")\n", - "plt.grid(True, alpha=0.3)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dV8AmQi-zX2i" - }, - "source": [ - "### Attempt 3: Removing CPU Overhead (CUDA Events)\n", - "\n", - "To get a precise measurement, we need to bypass the CPU clock entirely. We can ask the GPU driver to record timestamps directly on the device using `torch.cuda.Event`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "i6PfSdkTzX2i", - "outputId": "8b3e29d1-1789-4bfb-9a44-599016516dd7" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Run 0: 9.4638 ms\n", - "Run 1: 9.3665 ms\n", - "Run 2: 9.3307 ms\n" - ] - } - ], - "source": [ - "def benchmark_events(func, *args):\n", - " \"\"\"Better: Uses GPU timestamps, avoiding CPU overhead.\"\"\"\n", - " start_event = torch.cuda.Event(enable_timing=True)\n", - " end_event = torch.cuda.Event(enable_timing=True)\n", - "\n", - " torch.cuda.synchronize()\n", - " start_event.record()\n", - " func(*args)\n", - " end_event.record()\n", - " torch.cuda.synchronize()\n", - "\n", - " return start_event.elapsed_time(end_event) # Returns ms directly\n", - "\n", - "# Run it a few times\n", - "for i in range(3):\n", - " print(f\"Run {i}: {benchmark_events(simple_mm, a, b):.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BkfaaDawzX2i" - }, - "source": [ - "### Attempt 4: Handling the \"Cold Start\"\n", - "\n", - "The first time you run a PyTorch function, the framework does a lot of heavy lifting: allocating memory, initializing cuBLAS/cuDNN workspaces, and compiling kernels (especially if using `torch.compile` or Triton). This \"Cold Start\" penalty is a one-time cost that shouldn't be included in your performance metrics.\n", - "\n", - "**The Fix:**\n", - "We need to perform **Warmup Runs**—running the kernel a few times to settle the system state before we start measuring." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "j_PsAuJkzX2i", - "outputId": "d6983401-72d3-468c-ffd8-c0833e8d5556" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Warmed up time: 7.3667 ms\n" - ] - } - ], - "source": [ - "def benchmark_warmup(func, *args, warmup_iters=30):\n", - " \"\"\"Better: Includes warmup to avoid cold-start penalty.\"\"\"\n", - " # Warmup phase\n", - " for _ in range(warmup_iters):\n", - " func(*args)\n", - " torch.cuda.synchronize()\n", - "\n", - " # Measurement phase\n", - " return benchmark_events(func, *args)\n", - "\n", - "print(f\"Warmed up time: {benchmark_warmup(simple_mm, a, b):.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "OR3uOh7kzX2i" - }, - "source": [ - "### Attempt 5: The Single Sample Fallacy (Variance)\n", - "\n", - "Relying on a single sample after warmup is bad science. Operating systems are noisy; background processes interrupt the CPU, and GPU clocks fluctuate thermally. A single measurement is anecdotal, not statistical.\n", - "\n", - "#### Visualizing the Jitter\n", - "\n", - "Let's run the benchmark 100 times and plot every single run. You will clearly see the \"Cold Start\" spike and the noise floor of the OS." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 653 - }, - "id": "T-7QH4cHzX2i", - "outputId": "c758effd-a810-422d-d3ca-66c128cdb716" - }, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAh9RJREFUeJzs3Xd8FGXix/HvtuymJ0ACCTUQlCYItgMLcmIDy9nriaKe/tBD8CzgnYrnKWf37KeeINZTEc+uiICiqFhQEESQAAKBBEhvW+b5/RGzZNlkN1kCCfB5v168XuzMMzPP7Dw7me/OM8/ajDFGAAAAAIBG2Vu7AgAAAADQ1hGcAAAAACAKghMAAAAAREFwAgAAAIAoCE4AAAAAEAXBCQAAAACiIDgBAAAAQBQEJwAAAACIguAEAAAAAFEQnACgDZg3b55sNptee+211q5Kk0yZMkU2m01btmyJWO7iiy9Wjx49dk+lmqBHjx66+OKLW7sae6Q1a9bIZrNp+vTpUcu2teMOAC2B4ARgrzd9+nTZbLaQf5mZmRoxYoTee++91q4edpGjjz5aAwYMiFhm2bJlmjJlitasWRM277HHHmtSSGhpRUVFuvLKK9W5c2clJiZq0KBBuueee2Ja16xZs3TiiSeqQ4cOiouLU3Z2ts4++2x9/PHHLVzr2FiWpRkzZuiwww5Tu3btlJycrP32208XXXSRvvjii2C5SMepJbTWsQawZ3G2dgUAYHf5+9//rpycHBljtHnzZk2fPl2jRo3SW2+9pZNOOqm1q7dXeuqpp2RZVmtXI2jFihWy27d/Z7hs2TLddtttOvroo8PukDz22GPq0KHDbr9DdfHFF+vdd9/V1VdfrT59+uj777/XCy+8oOuvv77J6zDGaOzYsZo+fboGDx6sa6+9Vp06dVJ+fr5mzZqlY445Rp999pmGDRu2C/ckuvHjx+vRRx/VqaeeqgsuuEBOp1MrVqzQe++9p549e+p3v/udpMjHqSW01rEGsGchOAHYZ5x44ok6+OCDg68vvfRSdezYUS+99BLBqYkqKiqUmJjY5PIul2sX1qb53G53q27f7/fLsizFxcU1OL+iokJvv/22rrzySj3wwAPB6TU1Nc3azn333afp06drwoQJuv/++2Wz2YLz/vrXv+q5556T09m6lwCbN2/WY489pssvv1xPPvlkyLwHH3xQhYWFu7wOlZWVSkhI2OXbAbB3oKsegH1WWlqa4uPjwy4gLcvSgw8+qP79+8vj8ahjx4664oorVFRUFFKuR48eOumkk7RgwQIdeuih8ng86tmzp2bMmBG2reLiYk2cOFE9evSQ2+1Wly5ddNFFF4U9I2RZlu644w516dJFHo9HxxxzjFatWhVSpq4L2g8//KDhw4crISFBubm5weej5s+fr8MOO0zx8fHaf//99dFHH4Usv3btWo0bN07777+/4uPj1b59e5111llh3aDqujjOnz9f48aNU2Zmprp06dLo+7l27Vrl5uZqwIAB2rx5s6TwZ13qnpO599579eSTT6pXr15yu9065JBDtGjRorB1vvrqq+rXr588Ho8GDBigWbNm7dTzM/WfcZo+fbrOOussSdKIESOC3TjnzZunHj166Mcff9T8+fOD048++ujgeoqLizVhwgR17dpVbrdbubm5uuuuu0LurtXf1wcffDC4r8uWLWu0fnXbMsaETG9O4KuqqtLUqVPVp08f3XvvvSGhqc4f//hHHXroocHXq1ev1llnnaV27dopISFBv/vd7/TOO+80aXtvvPGGBgwYEHKMmiIvL0/GGB1++OFh8+q600qRj5Mk/e9//9Po0aOVnZ0tt9utXr166fbbb1cgEAhZZ93n5ptvvtFRRx2lhIQE3XTTTVGPNQDU4Y4TgH1GSUmJtmzZImOMCgoK9PDDD6u8vFwXXnhhSLkrrrhC06dP1yWXXKLx48crLy9PjzzyiL777jt99tlnIXdRVq1apTPPPFOXXnqpxowZo2eeeUYXX3yxDjroIPXv31+SVF5eriOPPFLLly/X2LFjNWTIEG3ZskVvvvmm1q9frw4dOgTX989//lN2u13XXXedSkpKdPfdd+uCCy7Ql19+GVLHoqIinXTSSTr33HN11lln6fHHH9e5556rF154QRMmTNCVV16p888/X/fcc4/OPPNM/frrr0pOTpYkLVq0SJ9//rnOPfdcdenSRWvWrNHjjz+uo48+WsuWLQv7Bn7cuHHKyMjQLbfcooqKigbf219++UW///3v1a5dO82ePTtknxry4osvqqysTFdccYVsNpvuvvtunX766Vq9enXw/X3nnXd0zjnn6IADDtDUqVNVVFSkSy+9VJ07d4647qY66qijNH78eD300EO66aab1LdvX0lS37599eCDD+rPf/6zkpKS9Ne//lWS1LFjR0m1dymGDx+uDRs26IorrlC3bt30+eefa/LkycrPz9eDDz4Ysp1p06apurpaf/rTn+R2u9WuXbtG65SQkKCzzz5b06dP1+WXX67Bgwc3e78WLFigbdu2acKECXI4HFHLb968WcOGDVNlZaXGjx+v9u3b69lnn9Upp5yi1157Taeddlqjy3744Yc644wz1K9fP02dOlVbt27VJZdcEjFg1+nevbuk2nB81llnNXrnJ9JxkmqDVVJSkq699lolJSXp448/1i233KLS0tKwZ8O2bt2qE088Ueeee64uvPBCdezYUUcffXSjxxoAQhgA2MtNmzbNSAr753a7zfTp00PKfvrpp0aSeeGFF0Kmv//++2HTu3fvbiSZTz75JDitoKDAuN1u85e//CU47ZZbbjGSzOuvvx5WN8uyjDHGzJ0710gyffv2NTU1NcH5//rXv4wks2TJkuC04cOHG0nmxRdfDE776aefjCRjt9vNF198EZz+wQcfGElm2rRpwWmVlZVh9Vi4cKGRZGbMmBH2vh1xxBHG7/eHlL/11luNJFNYWGiWL19usrOzzSGHHGK2bdsWUm7MmDGme/fuwdd5eXlGkmnfvn1I2f/9739GknnrrbeC0w444ADTpUsXU1ZWFpw2b948IylknY0ZPny46d+/f8i07t27mzFjxgRfv/rqq0aSmTt3btjy/fv3N8OHDw+bfvvtt5vExETz888/h0yfNGmScTgcZt26dSH7mpKSYgoKCqLW1xhjysrKzMiRI01cXJzp2LFj2Daaoq7NzJo1q0nlJ0yYYCSZTz/9NKQeOTk5pkePHiYQCITsT/22dOCBB5qsrCxTXFwcnPbhhx82+RhddNFFRpJJT083p512mrn33nvN8uXLw8pFOk4NtecrrrjCJCQkmOrq6uC0us/NE088EVa+sWMNAPXRVQ/APuPRRx/V7NmzNXv2bD3//PMaMWKELrvsMr3++uvBMq+++qpSU1N17LHHasuWLcF/Bx10kJKSkjR37tyQdfbr109HHnlk8HVGRob2339/rV69Ojht5syZGjRoUIPf3O/YjeqSSy4Jef6lbt311ydJSUlJOvfcc4Ov999/f6Wlpalv37467LDDgtPr/l9/+fj4+OD/fT6ftm7dqtzcXKWlpenbb78Nq+Pll1/e6J2LpUuXavjw4erRo4c++ugjpaenN1huR+ecc05I2R33c+PGjVqyZIkuuugiJSUlBcsNHz5cBxxwQJO2sau8+uqrOvLII5Wenh7SRkaOHKlAIKBPPvkkpPwZZ5yhjIyMJq37oosu0po1a/TTTz8pIyNDI0eO1Lp164LzFy5cKJvNpjlz5jS6jtLSUkkK3mGM5t1339Whhx6qI444IjgtKSlJf/rTn7RmzZpGuxbm5+dr8eLFGjNmjFJTU4PTjz32WPXr169J2542bZoeeeQR5eTkaNasWbruuuvUt29fHXPMMdqwYUOT1lG/PZeVlWnLli068sgjVVlZqZ9++imkrNvt1iWXXNKk9QLAjghOAPYZhx56qEaOHKmRI0fqggsu0DvvvKN+/frp6quvltfrlSStXLlSJSUlyszMVEZGRsi/8vJyFRQUhKyzW7duYdtJT08PeR7ql19+iTosdmPrqwsXOz5f1aVLl7DQlZqaqq5du4ZN23H5qqoq3XLLLcHnczp06KCMjAwVFxerpKQkrE45OTmN1vfkk09WcnKyPvjgA6WkpDRhD2tF28+1a9dKknJzc8OWbWja7rRy5Uq9//77Ye1j5MiRkhTWRiK9f/V98cUXmjVrlu68807l5OTo/ffflySNHDky+MzY0qVL5XQ6ddBBBzW6nrrjUFZW1qTtrl27Vvvvv3/Y9LqucHXHoqHlJKl3795h8xpaX0PsdruuuuoqffPNN9qyZYv+97//6cQTT9THH38c8sVAJD/++KNOO+00paamKiUlRRkZGcHutzu2586dOzc6MAcARMMzTgD2WXa7XSNGjNC//vUvrVy5Uv3795dlWcrMzNQLL7zQ4DI73jlo7E6M2eHh/qZq6voaK9eU5f/85z9r2rRpmjBhgoYOHarU1FTZbDade+65DQ4dXv8b/R2dccYZevbZZ/XCCy/oiiuuaLRcLPVsqyzL0rHHHqsbbrihwfn77bdfyOtI7199n3/+uSQFh+Du3LmzPvjgAx1xxBE69thjNW/ePD355JMaNWqU0tLSGl1Pnz59JElLlizRH/7whyZtuy1o3769TjnlFJ1yyik6+uijNX/+fK1duzb4LFRDiouLNXz4cKWkpOjvf/+7evXqJY/Ho2+//VY33nhjWHtu6rEAgIYQnADs0/x+v6TaARwkqVevXvroo490+OGHt9hFVq9evbR06dIWWVdLeO211zRmzBjdd999wWnV1dUqLi5u9rruueceOZ1OjRs3TsnJyTr//PNbpI51F8s7jijY2LRYNTTiXLR5vXr1Unl5efAOU0vX5ddffw3eOezTp4/eeecdHXPMMTrooIO0bt06/fvf/464niOOOELp6el66aWXdNNNN0UdIKJ79+5asWJF2PS6bm6NBZe66StXrgyb19D6muPggw/W/PnzlZ+fr+7duzd6LObNm6etW7fq9ddf11FHHRWcnpeX16ztRWoHAFCHrnoA9lk+n08ffvih4uLigt2Szj77bAUCAd1+++1h5f1+f0zh4owzztD333/f4DDNrXGHxeFwhG334YcfDhu+uSlsNpuefPJJnXnmmRozZozefPPNFqljdna2BgwYoBkzZgRDrVQ71PqSJUtaZBuSgr9J1dBxTUxMbHD62WefrYULF+qDDz4Im1dcXBwM4811zDHHSKr9oeb66zjssMP0t7/9TWvWrFHv3r2jdvtMSEjQjTfeqOXLl+vGG29ssI09//zz+uqrryRJo0aN0ldffaWFCxcG51dUVOjJJ59Ujx49Gn1eKSsrSwceeKCeffbZkC5xs2fPjjjkep1NmzY1WM7r9WrOnDmy2+3BbpmNHae6UFh/H71erx577LGo26+vsWMNAPVxxwnAPuO9994LfoteUFCgF198UStXrtSkSZOCz4UMHz5cV1xxhaZOnarFixfruOOOk8vl0sqVK/Xqq6/qX//6l84888xmbff666/Xa6+9prPOOktjx47VQQcdpG3btunNN9/UE088oUGDBrX4vkZy0kkn6bnnnlNqaqr69eunhQsX6qOPPlL79u1jWp/dbtfzzz+vP/zhDzr77LP17rvv6ve///1O1/POO+/UqaeeqsMPP1yXXHKJioqK9Mgjj2jAgAEhYWpnHHjggXI4HLrrrrtUUlIit9ut3//+98rMzNRBBx2kxx9/XP/4xz+Um5urzMxM/f73v9f111+vN998UyeddFJw6PmKigotWbJEr732mtasWRN1OPaGDBw4MDjs9iGHHKLzzjtPaWlp+vTTT/Xyyy/ryCOP1IIFC3T55Zfr2Wefjbiu66+/Xj/++KPuu+8+zZ07V2eeeaY6deqkTZs26Y033tBXX30V7Bo4adIkvfTSSzrxxBM1fvx4tWvXTs8++6zy8vI0c+ZM2e2Nf8c6depUjR49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kf72t79pxowZOv/889WrVy8NHDhQp5xyStj6/va3v6lPnz46++yzw+Z9/vnnOvzww3X++eerR48eOu6443Teeefpq6++anSf6t7Lt99+W3369FFqaqrOOussVVZW6tlnn1WPHj2Unp6u8ePHKxAIBJd77LHH1Lt3b3k8HnXs2FFnnnlms97L5iI4tZKlG0p0+zvLdNtby/TK1+t121vLdPs7y7R0Q/gtUwAAgFaVlNT4vzPOCC2bmSklJcmWnCxXerpsycnby554YmjZHj0aXmeMxo4dq2nTpgVfP/PMM7rkkkvCyk2dOlUzZszQE088oR9//FETJ07UhRdeqPnz50uSfv31V51++uk6+eSTtXjxYl122WWaNGlSxG2Xl5dr1KhRmjNnjr777judcMIJOvnkk7Vu3bqQcvfdd58OPvhgfffddxo3bpz+7//+TytWrAjOP/roo5vVrfDNN9/U1q1bG9zPSEpKSpSSkiKns7YD2uzZs2VZljZs2KC+ffuqS5cuOvvss/Xrr7+GLPfxxx/r1Vdf1aOPPtrgeocNG6ZvvvkmGJRWr16td999V6NGjYpYn8rKSj300EN66aWX9Pbbb2vevHk67bTT9O677+rdd9/Vc889p3//+9/BgPv1119r/Pjx+vvf/64VK1bo/fff11FHHdWs96C56KrXCpZuKNFDc1ZqW4VX2akeZbqlQE2clqwv0YaiKo0/prcGdE5t7WoCAADsUS688EJNnjxZa9eulSR99tlnevnllzVv3rxgmZqaGt1555366KOPNHToUElSz549tWDBAv373//W8OHD9fjjj6tXr1667777JEn777+/lixZorvuuqvRbQ8aNEiDBg0Kvr799ts1a9Ysvfnmm7r66quD00eNGqVx48ZJkm688UY98MADmjt3rvbff39JUrdu3ZSVldXkff7Pf/6j448/Xl26dGnyMlu2bNHtt9+uP/3pT8Fpq1evlmVZuvPOO/Wvf/1Lqamp+tvf/qZjjz1WP/zwg+Li4rR161ZdfPHFev7555WSktLgus8//3xt2bJFRxxxRPDHbK+88krddNNNEevk8/n0+OOPq2fPnvL7/TrjjDP0/PPPa/PmzUpKSlK/fv00YsQIzZ07V+ecc47WrVunxMREnXTSSUpOTlb37t3D7iy2NILTbmZZRjO/Xa9tFV7lZibJZpPs8irR41SuO0mrCsr1+rcb1C8rRXY7v7INAADagPLyxuc5HKGvCwokKXjR7HQ6t3ch2/HHdRt4fmZnZGRkaPTo0Zo+fbqMMRo9erQ6dOgQUmbVqlWqrKzUscceGzLd6/UGL7yXL1+uww47LGR+XchqTHl5uaZMmaJ33nlH+fn58vv9qqqqCrvjNHDgwOD/bTabOnXqpILf3jNJmjFjRpP3d/369frggw/0yiuvNHmZ0tJSjR49Wv369dOUKVOC0y3Lks/n00MPPaTjjjtOkvTSSy+pU6dOmjt3ro4//nhdfvnlOv/88yPe2Zk3b57uvPNOPfbYYzrssMO0atUqXXPNNbr99tt18803N7pcQkKCevXqJWNqH13p2LGjevTooaR6dyA7duwYfK+OPfZYde/eXT179tQJJ5ygE044QaeddpoSEhKa/F40F8FpN1uztUKrCsqVlRr/20lk+3NNNptNWanxWllQpjVbK9QzI/Zb1QAAAC0mMbH5ZY2R/H7J6ZQaefamWettorFjxwbv8DTUnaz8txD4zjvvqHPnziHz3G53zNu97rrrNHv2bN17773Kzc1VfHy8zjzzTHm93pByLpcr5LXNZpNlWTFtc9q0aWrfvn2DzyE1pKysTCeccIKSk5M1a9askLrU3eXq169fcFpGRoY6dOgQDH8ff/yx3nzzTd17772SasOxZVlyOp168sknNXbsWN1888364x//qMsuu0ySdMABB6iiokJ/+tOf9Ne//lX2HcPzbxp6XyK9V8nJyfr22281b948ffjhh7rllls0ZcoULVq0aJcNE09w2s3Kqv2q8VmKT3U0OD8+zqHNpZbKqv27uWYAAAB7vhNOOEFer1c2m03HH3982Px+/frJ7XZr3bp1Gj58eIPr6Nu3r958882QaV988UXE7X722We6+OKLddppp0mqDWgNjUjXUowxmjZtmi666KKwgNGQ0tJSHX/88XK73XrzzTfl8XhC5h9++OGSpBUrVgS7/W3btk1btmxR9+7dJUkLFy4MGZzhf//7n+666y59/vnnwRBaWVkZFo4cv92VrLub1FKcTqdGjhypkSNH6tZbb1VaWpo+/vhjnX766S26neD2dsla0ahkj1Nul11V3oCSPOFvf5U3ILfLruQG5gEAACAyh8Oh5cuXB/+/o+TkZF133XWaOHGiLMvSEUccoZKSEn322WdKSUnRmDFjdOWVV+q+++7T9ddfr8suu0zffPONpk+fHnG7vXv31uuvv66TTz5ZNptNN998c0x3ki666CJ17txZU6dOjVju448/Vl5eXvDOTn0bNmzQMcccoxkzZujQQw9VaWmpjjvuOFVWVur5559XaWmpSktLJdXeVXI4HNpvv/106qmn6pprrtGTTz6plJQUTZ48WX369NGIESMk1QbK+r7++mvZ7XYNGDAgOO3kk0/W/fffr8GDBwe76t188806+eSTGzwesXr77be1evVqHXXUUUpPT9e7774ry7KCz4rtClyd72Y92icqNzNJS9aXKNedFHLn2hij/JIqDeySph7tW/7WNQAAwL6gsYEL6tx+++3KyMjQ1KlTtXr1aqWlpWnIkCHBAQy6deummTNnauLEiXr44Yd16KGHBocRb8z999+vsWPHatiwYerQoYNuvPHGYDhpjnXr1jXana2+//znPxo2bJj69OkTNs/n82nFihWqrKyUJH377bf68ssvJUm5ubkhZfPy8tSjRw9Jtc9XTZw4UaNHj5bdbtfw4cP1/vvvN+mOVp2//e1vstls+tvf/qYNGzYoIyNDJ598su64444mr6Mp0tLS9Prrr2vKlCmqrq5W79699dJLL6l///4tup36bKal75m1caWlpUpNTQ0OwdgadhxVL8vtVX5NnDaWVKtdYhyj6iEqy7JUUFCgzMzMJp1cAYl2g9jRdvYN1dXVysvLU05OTlg3rlg0ODgEEMWuaDeR2nZzsgFnv1YwoHOqxh/TWwd0SVVxlVcFpdUqrvJqYJc0QhMAAADQBtFVr5UM6JyqflkpyttSpoLNBcrsmKmcDskMQQ4AAAC0QQSnVmS325TTIUmJVqUyOyQRmgAAAIA2iq56AAAAABAFwQkAAAAAoiA4AQAAAEAUrRqcysrKNGHCBHXv3l3x8fEaNmyYFi1a1Gj5efPmyWazhf3btGnTbqw1AAAAgH1Nqw4Ocdlll2np0qV67rnnlJ2dreeff14jR47UsmXL1Llz50aXW7FiRcg465mZmbujugAAAAD2Ua12x6mqqkozZ87U3XffraOOOkq5ubmaMmWKcnNz9fjjj0dcNjMzU506dQr+48f4AAAAAOxKrXbHye/3KxAIhP16b3x8vBYsWBBx2QMPPFA1NTUaMGCApkyZosMPP7zRsjU1NaqpqQm+Li0tlVT7K+iWZe3EHrQMy7JkjGkTdcGeg3aDWNBuECvazr6h7jjX/WsJdetpqfVh39DS7aauTTd0/d+c81qrBafk5GQNHTpUt99+u/r27auOHTvqpZde0sKFC5Wbm9vgMllZWXriiSd08MEHq6amRk8//bSOPvpoffnllxoyZEiDy0ydOlW33XZb2PTCwkJVV1e36D7FwrIslZSUyBjDnTM0Ge0GsaDdIFa0nX2Dz+eTZVny+/3y+/07vT5jjAKBgCTJZtu1v1V56aWX6rnnntPll1+uRx99NGTe+PHj9cQTT+iPf/yj/vOf/+zSesQiLi6uwelTp07VX/7ylwbn9e7dW2vXrg2bfuWVV+qhhx6SJG3atEmTJk3SnDlzVFZWpv3220+TJk3S6aefHnE9//jHP3TDDTcEX7/66qu66667tHLlSmVkZOj//u//Gq1XS9gV7cbv98uyLG3dulUulytkXllZWZPXYzOt+BXAL7/8orFjx+qTTz6Rw+HQkCFDtN9+++mbb77R8uXLm7SO4cOHq1u3bnruuecanN/QHaeuXbuqqKgo5Dmp1mJZlgoLC5WRkcEfIzQZ7QaxoN0gVrSdfUN1dbXWrFmjnJycsB5BsfL5fGEXqrvCJZdcoo8//lilpaXauHGj4uPjJdXuU3Z2tlJSUjRixAhNmzZtl9eluXYc5Oy9997TZZddppUrV6pnz54NLlNYWBgMF5K0dOlSHXfccfr444919NFHS5KOP/54FRcX6+GHH1aHDh304osvasqUKVq0aJEGDx4sScrJydHYsWN1+eWXB9eVnJysxMTEYF1OPfVUPfTQQzruuOO0fPly/elPf9LkyZN19dVXt+TbEKKl2011dbXy8vLUo0ePsLZdWlqq9PR0lZSURM8Gpg0oLy83GzduNMYYc/bZZ5tRo0Y1ednrrrvO/O53v2ty+ZKSEiPJlJSUNLueu0IgEDD5+fkmEAi0dlWwB6HdIBa0G8SKtrNvqKqqMsuWLTNVVVVh88pryk15TbmxLCs4rcZfY8pryk21r7rBsv6A33i9XmNZlvH6vaa8ptxU+aoaLBuwtrctr9/b7LqPGTPGnHrqqWbAgAHm+eefD05/4YUXzMCBA82pp55qxowZE5weCATMnXfeaXr06GE8Ho8ZOHCgefXVV4Pz/X6/GTt2bHD+fvvtZx588MEGt3nPPfeYTp06mXbt2plx48YZr7f59a/v1FNPNb///e+btcw111xjevXqFXJ8EhMTzYwZM0LKtWvXzjz11FPB1927dzcPPPBAo+s977zzzJlnnhky7aGHHjJdunQJ2VZ9eXl5RpL573//a4444gjj8XjMwQcfbFasWGG++uorc9BBB5nExERzwgknmIKCguByc+fONYcccohJSEgwqampZtiwYWbNmjXNeRsaFaltNycbtImvjRITE5WVlaWioiJ98MEHOvXUU5u87OLFi5WVlbULawcAALBvS5qapKSpSdpSuSU47Z7P7lHS1CRd/W7onYfMezOVNDVJ60rWBac9uuhRJU1N0qVvXhpStse/eihpapKWF27vaTR98fSY6zl27NiQu0rPPPOMLrnkkrByU6dO1YwZM/TEE0/oxx9/1MSJE3XhhRdq/vz5kmrvsnbp0kWvvvqqli1bpltuuUU33XSTXnnllZD1zJ07V7/88ovmzp2rZ599VtOnT9f06dvrP2XKFPXo0aPJ9d+8ebPeeecdXXrppdEL/8br9er555/X2LFjQ7q2DRs2TP/973+1bds2WZall19+WdXV1cE7UnX++c9/qn379ho8eLDuueeekG6aNTU1DY5HsH79+ga7CtZ366236m9/+5u+/fZbOZ1OnX/++brhhhv0r3/9S59++qlWrVqlW265RVJtV7o//OEPGj58uL7//nt98sknuvzyy3d5F8/matXhyD/44AMZY7T//vtr1apVuv7669WnT59gA588ebI2bNigGTNmSJIefPBB5eTkqH///qqurtbTTz+tjz/+WB9++GFr7gYAAADagAsvvFCTJ08OXtR/9tlnevnllzVv3rxgmZqaGt1555366KOPNHToUElSz549tWDBAv373//W8OHD5XK5Qp6Rz8nJ0cKFC/XKK6/o7LPPDk5PT0/XI488IofDoT59+mj06NGaM2dOsOtbhw4d1KtXrybX/9lnn1VycnLIc0jRvPHGGyouLtbFF18cMv2VV17ROeeco/bt28vpdCohIUGzZs0KGUtg/PjxGjJkiNq1a6fPP/9ckydPVn5+vu6//35Jtd39Jk6cqIsvvlgjRozQqlWrdN9990mS8vPzI4bC6667Tscff7wk6ZprrtF5552nOXPmBAd1u/TSS4Mhs7S0VCUlJTrppJPUq1cv+f1+HXDAAQSn+kpKSjR58mStX79e7dq10xlnnKE77rgj2KcxPz9f69Zt/7bC6/XqL3/5izZs2KCEhAQNHDhQH330kUaMGNFauwAAALDXK59cLklKcCUEp11/+PWa8LsJctpDLycLriuQJHmcHlmB2hHLrjrkKl0+5HI57I6QsmuuWSNJinfFB6ddfODFMdczIyNDo0eP1vTp02WM0ejRo9WhQ4eQMqtWrVJlZaWOPfbYkOlerzf47I8kPfroo3rmmWe0bt06VVVVyev16sADDwxZpn///nI4tu9TVlaWlixZEnx99dVXN+tZoGeeeUYXXHBBs54x+89//qMTTzxR2dnZIdNvvvlmFRcX66OPPlKHDh30xhtv6Oyzz9ann36qAw44QJJ07bXXBssPHDhQcXFxuuKKKzR16lS53W5dfvnl+uWXX3TSSSfJ5/MpJSVF11xzjaZMmRL1eceBAwcG/9+xY0dJCm63blpBQW1badeunS6++GIdf/zxOvbYYzVixAide+65YfvU2lo1OJ199tkhqX1H9W91StINN9wQMsoHAAAAdr3EuMSwaXGOOMU5wkeEqytrjJGl2uDkcrjkcoQ/7N/Qehsq1xxjx44NhpUdR9iTpPLy2hD4zjvvqHPnziHz3G63JOnll1/Wddddp/vuu09Dhw5VcnKy7rnnHn355Zehdd1hAAObzRbzsP2ffvqpVqxYof/+979NXmbt2rX66KOP9Prrr4dM/+WXX/TII49o6dKl6t+/vyRp0KBB+vTTT/Xoo4/qiSeeaHB9hx12mPx+v9asWaP9999fNptNd911l+68805t2rRJGRkZmjNnjiQ1OnBFnfrvTd2dox2n1X+vpk2bpvHjx+u9997Tq6++qltvvVWzZ8/W7373uya/H7taqwYnAAAAoCWdcMIJ8nq9stlswa5i9fXr109ut1vr1q3T8OHDG1zHZ599pmHDhmncuHHBab/88ssuq7NUe+fooIMO0qBBg5q8zLRp05SZmanRo0eHTK+srJSksLtCDocjYrBbvHix7Ha7MjMzw5arC5kvvfSShg4dqoyMjCbXs6kGDx6sAw88UNdff72OOuoovfjiiwQnAAAAYFdwOBzBn7Wp342uTnJysq677jpNnDhRlmXpiCOOUElJiT777DOlpKRozJgx6t27t2bMmKEPPvhAOTk5eu6557Ro0SLl5OQ0qy6PPPKIZs2aFbxL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Wlos1QcAAACAZokpOHXr1k1vv/122PQHHnigWesZNmyYnnzySf3888/ab7/99P3332vBggW6//77oy574IEHqqamRgMGDNCUKVN0+OGHN1iupqZGNTU1wdd1XQkty5JlWc2q765gWZaMMW2iLthz0G4QC9oNYkXbQSxoN4jF7m43zdlOTMGpTkFBgQoKCsI2OHDgwCYtP2nSJJWWlqpPnz5yOBwKBAK64447dMEFFzS6TFZWlp544gkdfPDBqqmp0dNPP62jjz5aX375pYYMGRJWfurUqbrtttvCphcWFqq6urpJ9dyVLMtSSUmJjDGy22N65Az7INoNYkG7QaxoO4gF7Qax2N3tpqysrMllbSbSSAyN+OabbzRmzBgtX748OJCDzWaTMUY2m02BQKBJ63n55Zd1/fXX65577lH//v21ePFiTZgwQffff7/GjBnT5PoMHz5c3bp103PPPRc2r6E7Tl27dlVRUVHIM1KtxbIsFRYWKiMjg5MKmox2g1jQbhAr2g5iQbtBLHZ3uyktLVV6erpKSkqiZoOY7jiNHTtW++23n/7zn/+oY8eOstlsMVX0+uuv16RJk3TuuedKkg444ACtXbtWU6dObVZwOvTQQ0N+kLc+t9stt9sdNt1ut7eZD7HNZmtT9cGegXaDWNBuECvaDmJBu0Esdme7ac42YgpOq1ev1syZM5WbmxvL4kGVlZVhlXU4HM3u07h48WJlZWXtVF0AAAAAoDExBadjjjlG33///U4Hp5NPPll33HGHunXrpv79++u7777T/fffr7FjxwbLTJ48WRs2bNCMGTMkSQ8++KBycnLUv39/VVdX6+mnn9bHH3+sDz/8cKfqAgAAAACNiSk4Pf300xozZoyWLl2qAQMGyOVyhcw/5ZRTmrSehx9+WDfffLPGjRungoICZWdn64orrtAtt9wSLJOfn69169YFX3u9Xv3lL3/Rhg0blJCQoIEDB+qjjz7SiBEjYtkVAAAAAIgqpsEh3nrrLf3xj38MDu0dssJmDA7RGkpLS5WamtqkB8B2B8uyVFBQoMzMTPr/osloN4gF7Qaxou0gFrQbxGJ3t5vmZIOYavPnP/9ZF154ofLz84O/h1T3ry2HJgAAAACIRUzBaevWrZo4caI6duzY0vUBAAAAgDYnpuB0+umna+7cuS1dFwAAAABok2IaHGK//fbT5MmT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unTp0trVCJOSksJJBc1Gu0EsaDeIFW0HsaDdIBa7s91Eu9NUhw6nAAAAABAFwQkAAAAAoiA4tTK3261bb71Vbre7tauCPQjtBrGg3SBWtB3EgnaDWLTldrPPDQ4BAAAAAM3FHScAAAAAiILgBAAAAABREJwAAAAAIAqCEwAAAABEQXBqRY8++qh69Oghj8ejww47TF999VVrVwltyNSpU3XIIYcoOTlZmZmZ+sMf/qAVK1aElKmurtZVV12l9u3bKykpSWeccYY2b97cSjVGW/TPf/5TNptNEyZMCE6j3aAxGzZs0IUXXqj27dsrPj5eBxxwgL7++uvgfGOMbrnlFmVlZSk+Pl4jR47UypUrW7HGaG2BQEA333yzcnJyFB8fr169eun2229X/bHHaDeQpE8++UQnn3yysrOzZbPZ9MYbb4TMb0o72bZtmy644AKlpKQoLS1Nl156qcrLy3fbPhCcWsl///tfXXvttbr11lv17bffatCgQTr++ONVUFDQ2lVDGzF//nxdddVV+uKLLzR79mz5fD4dd9xxqqioCJaZOHGi3nrrLb366quaP3++Nm7cqNNPP70Va422ZNGiRfr3v/+tgQMHhkyn3aAhRUVFOvzww+VyufTee+9p2bJluu+++5Senh4sc/fdd+uhhx7SE088oS+//FKJiYk6/vjjVV1d3Yo1R2u666679Pjjj+uRRx7R8uXLddddd+nuu+/Www8/HCxDu4EkVVRUaNCgQXr00UcbnN+UdnLBBRfoxx9/1OzZs/X222/rk08+0Z/+9KfdtQuSQas49NBDzVVXXRV8HQgETHZ2tpk6dWor1gptWUFBgZFk5s+fb4wxpri42LhcLvPqq68GyyxfvtxIMgsXLmytaqKNKCsrM7179zazZ882w4cPN9dcc40xhnaDxt14443miCOOaHS+ZVmmU6dO5p577glOKy4uNm6327z00ku7o4pog0aPHm3Gjh0bMu300083F1xwgTGGdoOGSTKzZs0Kvm5KO1m2bJmRZBYtWhQs89577xmbzWY2bNiwW+rNHadW4PV69c0332jkyJHBaXa7XSNHjtTChQtbsWZoy0pKSiRJ7dq1kyR988038vl8Ie2oT58+6tatG+0IuuqqqzR69OiQ9iHRbtC4N998UwcffLDOOussZWZmavDgwXrqqaeC8/Py8rRp06aQtpOa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\n" - }, - "metadata": {} - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Mean: 7.7859 ms\n", - "Median: 7.2648 ms\n", - "Std: 0.9014 ms\n", - "Min: 7.1823 ms\n", - "Max: 9.5795 ms\n" - ] - } - ], - "source": [ - "# Collect 100 samples\n", - "timings = []\n", - "for i in range(100):\n", - " timings.append(benchmark_events(simple_mm, a, b))\n", - "\n", - "plt.figure(figsize=(10, 6))\n", - "plt.scatter(range(100), timings, alpha=0.6)\n", - "plt.axhline(y=np.median(timings), color='r', linestyle='--', label=f'Median: {np.median(timings):.4f} ms')\n", - "plt.axhline(y=np.mean(timings), color='g', linestyle=':', label=f'Mean: {np.mean(timings):.4f} ms')\n", - "plt.title(\"Benchmarking Jitter & Cold Start\")\n", - "plt.ylabel(\"Time (ms)\")\n", - "plt.xlabel(\"Run Index\")\n", - "plt.legend()\n", - "plt.grid(True, alpha=0.3)\n", - "plt.show()\n", - "\n", - "print(f\"Mean: {np.mean(timings):.4f} ms\")\n", - "print(f\"Median: {np.median(timings):.4f} ms\")\n", - "print(f\"Std: {np.std(timings):.4f} ms\")\n", - "print(f\"Min: {np.min(timings):.4f} ms\")\n", - "print(f\"Max: {np.max(timings):.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hX_-OpftzX2i" - }, - "source": [ - "You will see a massive dot at $x=0$ (the cold start), followed by a cloud of dots hovering around the \"true\" time. This visualizes why we need **Warmup** (to skip $x=0$) and **Statistics** (to handle the cloud).\n", - "\n", - "Notice how the **Mean** is pulled upward by the outliers, while the **Median** represents the typical case more accurately.\n", - "\n", - "### Attempt 6: The \"Robust\" Harness (Flushing Cache)\n", - "\n", - "Modern GPUs have massive L2 caches (40MB on A100, 50MB on H100). If your data fits in the cache, subsequent iterations in your loop will skip the slow VRAM access, artificially inflating your speed. In production, data usually streams in from VRAM, so this \"hot cache\" benchmark is misleading.\n", - "\n", - "**The Fix:**\n", - "We must **flush the L2 cache** between *every single sample*. We do this by writing to a tensor large enough to completely evict the cache contents. The A100 has a 40MB L2 cache, H100 has 50MB—so we allocate ~256MB to be safe." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Kj5azcpxzX2j" - }, - "outputs": [], - "source": [ - "# Allocate a tensor large enough to evict L2 cache (256MB >> 40-50MB L2)\n", - "cache_flush_buffer = torch.empty(int(256e6 // 4), dtype=torch.int32, device='cuda')\n", - "\n", - "def flush_l2_cache():\n", - " \"\"\"Flush GPU L2 cache by writing to a large buffer.\"\"\"\n", - " cache_flush_buffer.zero_()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "FAaH1cdBzX2j" - }, - "source": [ - "We also need to handle **OS Jitter**. Taking the **Mean** (Average) includes the outliers where the OS interrupted the process. It is standard practice to take the **Median** (50th percentile) to represent the \"typical\" performance.\n", - "\n", - "### The Final Solution: `triton.testing.do_bench`\n", - "\n", - "We have now discovered that a robust benchmark requires:\n", - "\n", - "1. Device Synchronization\n", - "2. CUDA Events (to avoid CPU overhead)\n", - "3. Warmup Runs (to avoid initialization costs)\n", - "4. **Multiple Samples** (to handle variance)\n", - "5. Cache Flushing (to simulate VRAM access)\n", - "6. Median Aggregation (to ignore OS jitter)\n", - "\n", - "Writing this boilerplate every time is painful. Fortunately, the **Triton** team has already packaged all these lessons into `triton.testing.do_bench`.\n", - "\n", - "By default, `do_bench` returns the **median** runtime, which is robust to OS jitter and outliers.1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "3aVFtWt_zX2j", - "outputId": "6cf1e493-86ca-419e-a8e1-e19486814e09" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Triton do_bench time: 7.2214 ms\n" - ] - } - ], - "source": [ - "def final_benchmark(func, *args):\n", - " \"\"\"Production-ready benchmarking using Triton's do_bench.\"\"\"\n", - " # do_bench automatically handles:\n", - " # - Warmup & Cache Flushing\n", - " # - CUDA Events\n", - " # - Returns median by default\n", - " ms = triton.testing.do_bench(lambda: func(*args), warmup=25, rep=100)\n", - " return ms\n", - "\n", - "t = final_benchmark(simple_mm, a, b)\n", - "print(f\"Triton do_bench time: {t:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "MsZrCYQRzX2j" - }, - "source": [ - "1 *For more granular control, `do_bench` accepts a `quantiles` parameter to return specific percentiles (e.g., min, max, mean). See the [official documentation](https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html) for details.*" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "5ef3kvNTzX2j" - }, - "source": [ - "## Computing TFLOPS: Are We Hitting Roofline?\n", - "\n", - "A fast kernel that only achieves 10% of theoretical peak is leaving performance on the table. To understand efficiency, we need to convert our millisecond timings into **TFLOPS** (Tera Floating-Point Operations Per Second) and compare against the hardware's theoretical maximum.\n", - "\n", - "For matrix multiplication of two $N \\times N$ matrices, the number of floating-point operations is approximately $2N^3$ (multiply-add for each output element)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "62aBgaO8zX2j", - "outputId": "2800f1ae-2618-4861-bba6-315015b8d5cf" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Matrix Multiplication Performance (FP32)\n", - "==================================================\n", - "Size Time (ms) TFLOPS % of Peak \n", - "--------------------------------------------------\n", - "1024 0.1355 15.85 10.2 %\n", - "2048 0.9757 17.61 11.3 %\n", - "4096 7.2221 19.03 12.2 %\n", - "8192 57.3481 19.17 12.3 %\n", - "\n", - "Note: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\n" - ] - } - ], - "source": [ - "def get_tflops(n, time_ms, dtype=torch.float32):\n", - " \"\"\"Calculate achieved TFLOPS for matrix multiplication.\"\"\"\n", - " flops = 2 * n ** 3 # Multiply-add for each of N^2 output elements\n", - " tflops = flops / (time_ms * 1e-3) / 1e12\n", - " return tflops\n", - "\n", - "# A100 theoretical peaks (SXM4 variant)\n", - "A100_PEAK_TFLOPS = {\n", - " 'fp32': 19.5,\n", - " 'tf32': 156.0, # With tensor cores\n", - " 'fp16': 312.0, # With tensor cores\n", - " 'bf16': 312.0, # With tensor cores\n", - "}\n", - "\n", - "# Benchmark at different sizes\n", - "print(\"Matrix Multiplication Performance (FP32)\")\n", - "print(\"=\" * 50)\n", - "print(f\"{'Size':<10} {'Time (ms)':<12} {'TFLOPS':<10} {'% of Peak':<10}\")\n", - "print(\"-\" * 50)\n", - "\n", - "for size in [1024, 2048, 4096, 8192]:\n", - " a_test, b_test = get_data(size)\n", - " time_ms = final_benchmark(simple_mm, a_test, b_test)\n", - " tflops = get_tflops(size, time_ms)\n", - " # Note: PyTorch uses TF32 by default on Ampere+, so compare against TF32 peak\n", - " peak = A100_PEAK_TFLOPS['tf32']\n", - " efficiency = (tflops / peak) * 100\n", - " print(f\"{size:<10} {time_ms:<12.4f} {tflops:<10.2f} {efficiency:<10.1f}%\")\n", - "\n", - "print(\"\\nNote: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "HwsjlhAazX2j" - }, - "source": [ - "## The \"Agent\" Trap: Reward Hacking via Hidden Streams\n", - "\n", - "When evaluating LLM-generated kernels (like with [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), you're not just fighting measurement noise—you're fighting an optimizer that may inadvertently discover exploits in your harness.\n", - "\n", - "One such exploit: launching work on a **side stream** to make the kernel appear instantaneous." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "UuwtML39zX2j", - "outputId": "95ebbb26-e415-491a-da30-6a78ce387906" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Standard benchmark on tricky kernel: 0.0032 ms\n" - ] - } - ], - "source": [ - "def tricky_agent_kernel(a, b):\n", - " \"\"\"A 'clever' kernel that games the benchmarking harness.\"\"\"\n", - " # The agent creates a new stream to \"optimize\"\n", - " s = torch.cuda.Stream()\n", - " with torch.cuda.stream(s):\n", - " # This work happens on a side channel!\n", - " result = torch.matmul(a, b)\n", - " return result\n", - "\n", - "print(f\"Standard benchmark on tricky kernel: {final_benchmark(tricky_agent_kernel, a, b):.4f} ms\")\n", - "# Likely reports ~0.00ms or very close to it!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3HXns_XizX2j" - }, - "source": [ - "**The Issue:**\n", - "Standard benchmarking tools (including `do_bench`) record events on the *current default stream*.\n", - "\n", - "1. Benchmark starts timer on Stream A (the default stream).\n", - "2. Agent launches work on Stream B and returns immediately.\n", - "3. Benchmark stops timer on Stream A.\n", - "\n", - "Since Stream A had no work, the timer reports `~0.00ms`, while Stream B is still churning away in the background.\n", - "\n", - "**Why this matters for evals:**\n", - "If your reward signal is \"lower time = better score,\" an agent that discovers this pattern will be rewarded for producing *broken* code. The kernel \"runs\" instantly because you never measured it at all.\n", - "\n", - "**Mitigations:**\n", - "- **Wall-clock + full device sync:** Trade precision for correctness (catches all streams, but includes CPU overhead)\n", - "- **Static analysis:** Reject submissions that create `torch.cuda.Stream()` objects\n", - "- **Manual inspection:** For high-stakes evals, benchmark kernels in isolation outside the automated harness\n", - "\n", - "**How KernelBench Addresses this**\n", - "[Insert something here]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "KbAFqiyizX2j", - "outputId": "6bc91db4-935c-4af9-bdc9-be3c50e890c4" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Robust benchmark on tricky kernel: 7.9620 ms\n", - "Robust benchmark on normal kernel: 7.3177 ms\n" - ] - } - ], - "source": [ - "def benchmark_untrusted(func, *args):\n", - " \"\"\"Benchmark untrusted code by using wall-clock time with full device sync.\n", - "\n", - " This trades some precision (includes CPU overhead) for correctness\n", - " (catches work on any stream).\n", - " \"\"\"\n", - " torch.cuda.synchronize() # Clear any pending work\n", - " start = time.perf_counter()\n", - " func(*args)\n", - " torch.cuda.synchronize() # Wait for ALL streams\n", - " end = time.perf_counter()\n", - " return (end - start) * 1000\n", - "\n", - "print(f\"Robust benchmark on tricky kernel: {benchmark_untrusted(tricky_agent_kernel, a, b):.4f} ms\")\n", - "print(f\"Robust benchmark on normal kernel: {benchmark_untrusted(simple_mm, a, b):.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Uq4qvl8FzX2j" - }, - "source": [ - "## Correctness Before Speed\n", - "\n", - "A kernel that runs in 0.1ms but produces garbage is worthless. Before you start optimizing, **always verify correctness** against a reference implementation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "J9W63Q5czX2k", - "outputId": "312076ee-f089-4276-8b8f-bb7a23575d3d" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "✓ Correctness verified!\n", - "Kernel time: 0.1363 ms\n" - ] - } - ], - "source": [ - "def my_experimental_kernel(a, b):\n", - " \"\"\"Pretend this is our custom optimized kernel.\"\"\"\n", - " return torch.matmul(a, b) # In reality, this would be your Triton/CUDA code\n", - "\n", - "def verify_correctness(kernel_fn, ref_fn, *args, atol=1e-2, rtol=1e-2):\n", - " \"\"\"Verify kernel produces correct output before benchmarking.\"\"\"\n", - " ref_output = ref_fn(*args)\n", - " kernel_output = kernel_fn(*args)\n", - "\n", - " if not torch.allclose(ref_output, kernel_output, atol=atol, rtol=rtol):\n", - " max_diff = (ref_output - kernel_output).abs().max().item()\n", - " raise AssertionError(\n", - " f\"Kernel output doesn't match reference! \"\n", - " f\"Max difference: {max_diff:.6f}\"\n", - " )\n", - " print(\"✓ Correctness verified!\")\n", - " return True\n", - "\n", - "# Always verify before benchmarking\n", - "a_test, b_test = get_data(1024)\n", - "verify_correctness(my_experimental_kernel, simple_mm, a_test, b_test)\n", - "\n", - "# Only benchmark if correct\n", - "time_ms = final_benchmark(my_experimental_kernel, a_test, b_test)\n", - "print(f\"Kernel time: {time_ms:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zcYVXCkUzX2k" - }, - "source": [ - "## Conclusion\n", - "\n", - "Benchmarking on GPUs is fundamentally different from CPUs. The asynchronous nature of kernel launches, the hidden state of the L2 cache, and the noise of the OS scheduler all conspire to give you the wrong numbers.\n", - "\n", - "To get reliable numbers:\n", - "\n", - "1. **`do_bench` is pretty good:** For 99% of ops, Triton's built-in tool is the gold standard.\n", - "2. **Always Inspect:** Always assume generated code might game your benchmark with things like hidden streams.\n", - "3. **Measure Efficiency:** Convert milliseconds to TFLOPS to understand if you're hitting roofline.\n", - "4. **Verify First:** A fast kernel that produces the wrong output is useless. Always run an `allclose` check before you start the timer.\n", - "\n", - "Happy optimizing!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "7Ah151CHzX2k" - }, - "source": [ - "---\n", - "\n", - "### Footnotes\n", - "\n", - "**On GPU Clock States:** For highly reproducible benchmarks (e.g., publishing papers), consider locking GPU clocks with `nvidia-smi -lgc `. GPUs dynamically adjust clock speeds based on thermals and power, which can introduce variance between runs. For most development work, median-based benchmarking handles this adequately.\n", - "\n", - "**On Warmup Iterations:** We use fixed warmup counts (10-50 iterations) for simplicity, but this can be insufficient or wasteful depending on the kernel. In extremely sensitive environments, you can implement an adaptive stopping criterion: run warmup iterations until the variance of recent samples falls below a threshold, indicating the system has stabilized. This is covered in more detail in the [GPU MODE lecture](https://www.youtube.com/watch?v=1i7dxoAfKOU).\n", - "\n", - "**On Bare Metal vs. Virtualized Environments:** Cloud VMs and containers add layers of abstraction that can introduce variance and overhead. GPU passthrough in virtualized environments adds latency, and shared cloud instances suffer from \"noisy neighbor\" effects where other tenants' workloads impact your measurements. For publishable results or when chasing small performance deltas, prefer bare metal. For day-to-day development, cloud instances are fine as long as you're aware your numbers may not match others exactly." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.0" - }, - "colab": { - "provenance": [], - "gpuType": "A100", - "include_colab_link": true - }, - "accelerator": "GPU" - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/notebooks/benchmarking.ipynb b/notebooks/benchmarking.ipynb new file mode 100644 index 00000000..7ec44d71 --- /dev/null +++ b/notebooks/benchmarking.ipynb @@ -0,0 +1,1645 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_PCU0gUyzX2c" + }, + "source": [ + "# A Practical Guide to GPU Benchmarking\n", + "\n", + "> **Note on outputs:** The outputs in this notebook were generated on an **NVIDIA H200 GPU** (90MB L2 cache, 4.8 TB/s memory bandwidth). Your results may vary depending on your hardware. The H200's large cache means cache effects are less dramatic than on older GPUs like A100 (40MB L2) or consumer cards.\n", + "\n", + "## TL;DR — How to Benchmark Correctly\n", + "\n", + "Benchmarking on GPUs requires a strict protocol to avoid measuring Python overhead or caching artifacts. To get reliable numbers, you must:\n", + "\n", + "1. **Warmup:** Run the kernel ~10-50 times first to settle compilation and memory allocators.\n", + "2. **Sample Extensively:** Don't trust one run. Collect 100+ samples to build a statistical distribution.\n", + "3. **Flush the L2 Cache:** Between *every* sample, flush the cache to force a cold cache state (simulating real-world inference).\n", + "4. **Use Device Timers:** Use `torch.cuda.Event` instead of `time.time()` to measure execution on the GPU, not the CPU driver.\n", + "5. **Aggregate Robustly:** Use the **Median** (not Mean) of your samples to filter out OS jitter/outliers.\n", + "6. **Wait for sidestreams to finish:** Ensure no side-streams are running or wait for all of them to finish before reporting a time.\n", + "\n", + "*Pro-Tip:* **KernelBench's timing module** (`src/timing.py`) implements all these best practices. Use `get_timing_function(\"cuda_event\")` for trusted code or `get_timing_function(\"host_time\")` for evaluating untrusted/agent-generated code.\n", + "\n", + "-----\n", + "\n", + "If are using an LLM agent to write GPU kernels (and evaluating against something like say [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), or just trying to optimize a custom GPU kernel, you are eventually going to ask: **\"How fast is this thing?\"**\n", + "\n", + "This notebook is heavily inspired by [this great guide](https://www.youtube.com/watch?v=1i7dxoAfKOU) from the **GPU MODE** community and the practical \"footguns\" (traps) encountered while building benchmarking harnesses for LLM-generated code. Our goal here is simplicity and keeping things Pythonic—for more advanced techniques, see the footnotes.\n", + "\n", + "We won't just list best practices. Instead, we are going to build a benchmarking harness from scratch, make every common mistake, debug why the numbers are wrong, and iterate our way to a robust solution. So let's start things out by doing the most naive thing by using `time.time()`!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:42.780616Z", + "iopub.status.busy": "2025-12-17T20:56:42.780511Z", + "iopub.status.idle": "2025-12-17T20:56:47.446613Z", + "shell.execute_reply": "2025-12-17T20:56:47.445546Z" + }, + "id": "PKWz_W7uzX2f", + "outputId": "8751fd78-569b-4080-f21a-60bbb5ee8caf" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/simon/miniconda3/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using GPU: NVIDIA H200\n" + ] + } + ], + "source": [ + "# @title Environment Setup\n", + "# Ensure we have the necessary libraries and a GPU available\n", + "# !pip install -q triton matplotlib numpy torch\n", + "# !pip install -e . # Install KernelBench locally for timing utilities\n", + "\n", + "import torch\n", + "import time\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import triton\n", + "\n", + "# Import KernelBench's timing module\n", + "from src import timing\n", + "from src.timing import clear_l2_cache, get_timing_stats, get_timing_function\n", + "\n", + "if not torch.cuda.is_available():\n", + " raise RuntimeError(\"This notebook requires a GPU. Please enable GPU in your runtime settings.\")\n", + "\n", + "# Device configuration\n", + "# For multi-GPU systems, set CUDA_VISIBLE_DEVICES=X before running to select a specific GPU\n", + "# The selected GPU will appear as cuda:0\n", + "DEVICE = \"cuda:0\"\n", + "print(f\"Using GPU: {torch.cuda.get_device_name(DEVICE)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kjWByrwvzX2f" + }, + "source": [ + "## The Journey: Benchmarking a Matrix Multiplication\n", + "\n", + "Let's define a simple workload to test. We want to measure the performance of a standard Matrix Multiplication." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.449363Z", + "iopub.status.busy": "2025-12-17T20:56:47.449114Z", + "iopub.status.idle": "2025-12-17T20:56:47.705668Z", + "shell.execute_reply": "2025-12-17T20:56:47.704728Z" + }, + "id": "gxtKes5lzX2g", + "outputId": "5890bae4-5b9a-4366-8947-367146593158" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Output shape: torch.Size([4096, 4096])\n", + "Op ran successfully\n" + ] + } + ], + "source": [ + "# A standard size for testing\n", + "N = 4096\n", + "\n", + "def get_data(n=N, device=DEVICE):\n", + " \"\"\"Generate random float32 matrices for benchmarking.\"\"\"\n", + " return torch.randn(n, n, device=device), torch.randn(n, n, device=device)\n", + "\n", + "def simple_mm(a, b):\n", + " \"\"\"Our kernel under test: standard matrix multiplication.\"\"\"\n", + " return torch.matmul(a, b)\n", + "\n", + "# Let's verify it runs\n", + "a, b = get_data()\n", + "res = simple_mm(a, b)\n", + "print(f\"Output shape: {res.shape}\")\n", + "print(\"Op ran successfully\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GWlsBEVyzX2g" + }, + "source": [ + "### Attempt 1: The Naive Timer (The Asynchronous Illusion)\n", + "\n", + "The most intuitive way to time code in Python is using `time.time()`. Let's try that first." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.708574Z", + "iopub.status.busy": "2025-12-17T20:56:47.708437Z", + "iopub.status.idle": "2025-12-17T20:56:47.712126Z", + "shell.execute_reply": "2025-12-17T20:56:47.711422Z" + }, + "id": "LynIxLaRzX2g", + "outputId": "72548dad-6570-4eaa-ce07-923556fe70b4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Naive time: 0.5345 ms\n" + ] + } + ], + "source": [ + "def benchmark_naive(func, *args):\n", + " \"\"\"WRONG: Measures kernel launch time, not execution time.\"\"\"\n", + " start = time.time()\n", + " func(*args)\n", + " end = time.time()\n", + " return (end - start) * 1000 # to ms\n", + "\n", + "t = benchmark_naive(simple_mm, a, b)\n", + "print(f\"Naive time: {t:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gw4NGYRmzX2h" + }, + "source": [ + "**The Problem:**\n", + "Wait, ~0.5ms? That seems impossibly fast for a 4096² matrix multiplication involving 137 billion floating-point operations.\n", + "\n", + "**What happened?**\n", + "GPUs are **asynchronous**. When you call `torch.matmul`, the CPU doesn't actually do the math. It simply queues a \"launch kernel\" command to the GPU and moves on immediately. Our timer didn't measure the matrix multiplication; it measured how long it took Python to place an order in the queue.\n", + "\n", + "To fix this, we need to:\n", + "1. **Synchronize** - Force the CPU to wait for the GPU with `torch.cuda.synchronize()`\n", + "2. **Use CUDA Events** - Record timestamps directly on the GPU to avoid CPU overhead\n", + "\n", + "Let's compare these approaches to see the difference." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.714693Z", + "iopub.status.busy": "2025-12-17T20:56:47.714579Z", + "iopub.status.idle": "2025-12-17T20:56:47.884978Z", + "shell.execute_reply": "2025-12-17T20:56:47.884070Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Comparing Synchronized time.time() vs CUDA Events:\n", + "------------------------------------------------------------\n", + "N= 512: sync= 0.0358ms, events= 0.0334ms, overhead=+0.0023ms\n", + "N=1024: sync= 0.0725ms, events= 0.0716ms, overhead=+0.0008ms\n", + "N=2048: sync= 0.3552ms, events= 0.3536ms, overhead=+0.0017ms\n", + "N=4096: sync= 2.6958ms, events= 2.6885ms, overhead=+0.0073ms\n" + ] + }, + { + "data": { + "image/png": "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x6lXr56wtrYW0dHRup5apomPjxcVKlQQ5ubmwt/fX+3xsLAwMXbsWGm7W7duwsLCQqVOYmKiqFSpkgAgXr58qbVeShYWFqJbt24ZcxJfgUKhEFFRURk2fsxIa9eu1TgOHzRokHBychIKhUI/gZFOePke0UezZs1CZGQkVq9eDUdHR7XHixcvjp9++inVNhwcHODi4oLHjx9naGzLly/Hy5cvMXfuXJQuXVrt8Xz58mH8+PGpthEcHIxevXohX758kMvlqFChAv744w+1egqFAgsWLEC5cuUgl8thZ2eHRo0a4fLly6m2P3XqVBgYGGDhwoVa65QtWxZ16tTReMwCBQqgTZs2UtnmzZvh7u4OKysrWFtbo1y5cliwYEGqMZw/fx6HDx9G37590apVK411KlWqhE6dOqXaDgDUrVsXADL8bzl58mTIZDJs3LgRVlZWGuNLayr31atX0bhxY1hbW8PS0hL16tXDhQsX1OqFhoZi6NChKFKkCExNTVGwYEF07doVb9680dp2bGwsmjVrBhsbG5w7dy7d5/cpTdf4J13SevLkSVSqVAlmZmYoV64cTp48CQDYsWOH9Pxzd3fH1atXVdrUtLZH0jpnu3btQtmyZWFqagpXV1ccOnRILaak48rlcjg7O2P58uVcL4SIsqzHjx/jv//+Q/369VXKAwICAAAeHh5q+yQtPwAAa9euhUwmU3svBYBff/0VhoaGePnyJQDl5dlly5bF7du3UadOHZibm6NAgQKYNWuW2r4xMTGYNGkSSpYsCblcDkdHR7Rq1UqKS5tP15RKWp/m77//xrRp01CwYEHI5XLUq1cPDx8+VNv/4sWLaNKkCWxtbWFhYYHy5cunOj5IunxM01IJmi41P3PmDCpXrqzyGaHNhg0b4O7uDjMzM+TOnRvt27fH8+fPVeo8ePAArVu3hoODA+RyOQoWLIj27dsjLCxMa7tfYtu2bahcuTIqV64slZUuXRr16tXD33//neq+4eHhOHr0KDp37iw9fwCga9eusLS0VNl/27ZtMDQ0RN++faUyuVyOXr164fz582r9kNKrV6/g5+eHVq1aQS6XS+VJn8X3799H586dYWNjAzs7O/z8888QQuD58+fS7BcHBwfMmTNHre2FCxfC1dUV5ubmsLW1RaVKlbBp06ZUz3v79u24fv06xo0bJ83wSsna2hrTpk1L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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Key insight: Synchronized timing includes 0.007ms of CPU overhead.\n", + "CUDA Events (2.6885ms) measure pure GPU execution time.\n" + ] + } + ], + "source": [ + "# Compare: Synchronized time.time() vs CUDA Events\n", + "# This shows why GPU-side timestamps are more accurate\n", + "\n", + "def benchmark_sync(func, *args):\n", + " \"\"\"Attempt 2: Synchronized - waits for GPU but uses CPU clock.\"\"\"\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " start = time.time()\n", + " func(*args)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " end = time.time()\n", + " return (end - start) * 1000\n", + "\n", + "def benchmark_events(func, *args):\n", + " \"\"\"Attempt 3: CUDA Events - GPU-side timestamps, most accurate.\"\"\"\n", + " start_event = torch.cuda.Event(enable_timing=True)\n", + " end_event = torch.cuda.Event(enable_timing=True)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " start_event.record()\n", + " func(*args)\n", + " end_event.record()\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " return start_event.elapsed_time(end_event)\n", + "\n", + "# Test across different matrix sizes\n", + "sizes = [512, 1024, 2048, 4096]\n", + "sync_times = []\n", + "event_times = []\n", + "\n", + "print(\"Comparing Synchronized time.time() vs CUDA Events:\")\n", + "print(\"-\" * 60)\n", + "for s in sizes:\n", + " a_test, b_test = get_data(s)\n", + " # Warmup\n", + " for _ in range(3):\n", + " simple_mm(a_test, b_test)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " \n", + " sync_t = benchmark_sync(simple_mm, a_test, b_test)\n", + " event_t = benchmark_events(simple_mm, a_test, b_test)\n", + " \n", + " sync_times.append(sync_t)\n", + " event_times.append(event_t)\n", + " overhead = sync_t - event_t\n", + " print(f\"N={s:4d}: sync={sync_t:7.4f}ms, events={event_t:7.4f}ms, overhead={overhead:+.4f}ms\")\n", + "\n", + "# Create visualization\n", + "fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", + "\n", + "# Left plot: Both methods across sizes\n", + "axes[0].plot(sizes, sync_times, 's-', label='Synchronized (CPU clock)', linewidth=2, markersize=8, color='orange')\n", + "axes[0].plot(sizes, event_times, '^-', label='CUDA Events (GPU clock)', linewidth=2, markersize=8, color='green')\n", + "axes[0].set_xlabel('Matrix Size (N)')\n", + "axes[0].set_ylabel('Time (ms)')\n", + "axes[0].set_title('CPU Clock vs GPU Clock Timing')\n", + "axes[0].legend()\n", + "axes[0].grid(True, alpha=0.3)\n", + "\n", + "# Right plot: Bar chart showing overhead at largest size\n", + "overhead_ms = sync_times[-1] - event_times[-1]\n", + "axes[1].bar(['Synchronized\\n(time.time + sync)', 'CUDA Events\\n(GPU timestamps)'], \n", + " [sync_times[-1], event_times[-1]], \n", + " color=['orange', 'green'], alpha=0.8)\n", + "axes[1].set_ylabel('Time (ms)')\n", + "axes[1].set_title(f'CPU Overhead at N={sizes[-1]}\\n(Sync includes ~{overhead_ms:.3f}ms CPU overhead)')\n", + "axes[1].axhline(y=event_times[-1], color='green', linestyle='--', alpha=0.5, label='True GPU time')\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print(f\"\\nKey insight: Synchronized timing includes {overhead_ms:.3f}ms of CPU overhead.\")\n", + "print(f\"CUDA Events ({event_times[-1]:.4f}ms) measure pure GPU execution time.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dV8AmQi-zX2i" + }, + "source": [ + "### Attempt 3: Removing CPU Overhead (CUDA Events)\n", + "\n", + "To get a precise measurement, we need to bypass the CPU clock entirely. We can ask the GPU driver to record timestamps directly on the device using `torch.cuda.Event`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.887269Z", + "iopub.status.busy": "2025-12-17T20:56:47.887144Z", + "iopub.status.idle": "2025-12-17T20:56:47.899041Z", + "shell.execute_reply": "2025-12-17T20:56:47.898350Z" + }, + "id": "i6PfSdkTzX2i", + "outputId": "8b3e29d1-1789-4bfb-9a44-599016516dd7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Run 0: 2.8415 ms\n", + "Run 1: 2.7093 ms\n", + "Run 2: 2.7007 ms\n" + ] + } + ], + "source": [ + "def benchmark_events(func, *args):\n", + " \"\"\"Better: Uses GPU timestamps, avoiding CPU overhead.\"\"\"\n", + " start_event = torch.cuda.Event(enable_timing=True)\n", + " end_event = torch.cuda.Event(enable_timing=True)\n", + "\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " start_event.record()\n", + " func(*args)\n", + " end_event.record()\n", + " torch.cuda.synchronize(device=DEVICE)\n", + "\n", + " return start_event.elapsed_time(end_event) # Returns ms directly\n", + "\n", + "# Run it a few times\n", + "for i in range(3):\n", + " print(f\"Run {i}: {benchmark_events(simple_mm, a, b):.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BkfaaDawzX2i" + }, + "source": [ + "### Attempt 4: Handling the \"Cold Start\"\n", + "\n", + "Notice Run 0 is noticably slower than the rest. The first time you run a PyTorch function (and similarly launching a cuda kernel), the framework does a lot of heavy lifting which could include: allocating memory, initializing cuBLAS/cuDNN workspaces, lazy kernel loading, and compiling kernels (especially if using `torch.compile` or Triton). This \"Cold Start\" penalty is a one-time cost that shouldn't be included in your performance metrics.\n", + "\n", + "**The Fix:**\n", + "We need to perform **Warmup Runs**—running the kernel a few times to settle the system state before we start measuring." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.901255Z", + "iopub.status.busy": "2025-12-17T20:56:47.901143Z", + "iopub.status.idle": "2025-12-17T20:56:47.993793Z", + "shell.execute_reply": "2025-12-17T20:56:47.992809Z" + }, + "id": "j_PsAuJkzX2i", + "outputId": "d6983401-72d3-468c-ffd8-c0833e8d5556" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Run 0: 2.7697 ms\n", + "Run 1: 2.6890 ms\n", + "Run 2: 2.6891 ms\n" + ] + } + ], + "source": [ + "def benchmark_warmup(func, *args, warmup_iters=30, benchmark_iters=3):\n", + " \"\"\"Better: Includes warmup to avoid cold-start penalty.\"\"\"\n", + " # Warmup phase\n", + " for _ in range(warmup_iters):\n", + " func(*args)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + "\n", + " # Measurement phase\n", + " measurements = []\n", + " for _ in range(benchmark_iters):\n", + " measurements.append(benchmark_events(func, *args))\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " return measurements\n", + "\n", + "# print(f\"Warmed up time: {benchmark_warmup(simple_mm, a, b):.4f} ms\")\n", + "\n", + "for i, measurement in enumerate(benchmark_warmup(simple_mm, a, b)):\n", + " print(f\"Run {i}: {measurement:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OR3uOh7kzX2i" + }, + "source": [ + "### Attempt 5: The Single Sample Fallacy (Variance)\n", + "\n", + "Relying on a single sample after warmup is bad science. Operating systems are noisy; background processes interrupt the CPU, and GPU clocks fluctuate thermally. A single measurement is anecdotal, not statistical.\n", + "\n", + "#### Visualizing the Jitter\n", + "\n", + "Let's run the benchmark 100 times and plot every single run. You will clearly see the \"Cold Start\" spike and the noise floor of the OS." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 653 + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.996630Z", + "iopub.status.busy": "2025-12-17T20:56:47.996511Z", + "iopub.status.idle": "2025-12-17T20:56:48.348631Z", + "shell.execute_reply": "2025-12-17T20:56:48.347785Z" + }, + "id": "T-7QH4cHzX2i", + "outputId": "c758effd-a810-422d-d3ca-66c128cdb716" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIjCAYAAADvBuGTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkKdJREFUeJzs3Xd4VFX+x/HPTMqkTAqQBAg1AtJFRLCggoKgoogFZYUF1HVxDbrI6iK6FnQ1a13rYlkE3BVxUfiJICgqoChYQJEmvSgtoaSXSXLv74+YgSHJZGZyk0zg/XoenofcOffOuTPnnjnfe8q1maZpCgAAAABQI/b6zgAAAAAAnAwIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgCggVi2bJlsNpvee++9+s6KTx555BHZbDYdOnTIa7qxY8eqbdu2dZMpH7Rt21Zjx46t72w0SLt27ZLNZtOMGTOqTRts3zsAWIHgCgAkzZgxQzabzeNfUlKSLr74Yi1atKi+s4da0r9/f3Xr1s1rmo0bN+qRRx7Rrl27Krz2r3/9y6dAwmpHjx7V7bffrhYtWig6Olo9evTQ008/HdCx5s2bp8svv1wJCQkKDw9XcnKybrjhBn3++ecW5zowhmHorbfe0jnnnKPGjRsrJiZGp59+ukaPHq1Vq1a503n7nqxQX981gIYltL4zAADB5NFHH1VKSopM09TBgwc1Y8YMXXHFFfrwww915ZVX1nf2TkpvvPGGDMOo72y4bd68WXb7sXuPGzdu1JQpU9S/f/8KPS3/+te/lJCQUOc9XWPHjtVHH32k8ePHq1OnTlq7dq3efvtt3XvvvT4fwzRN3XLLLZoxY4Z69uypiRMnqlmzZtq/f7/mzZunAQMG6KuvvtL5559fi2dSvbvuukuvvPKKrr76ao0cOVKhoaHavHmzFi1apNNOO03nnnuuJO/fkxXq67sG0LAQXAHAcS6//HKdffbZ7r9vvfVWNW3aVO+88w7BlY/y8vIUHR3tc/qwsLBazI3/HA5Hvb5/SUmJDMNQeHh4pa/n5eVpwYIFuv322/XPf/7Tvb2oqMiv93n22Wc1Y8YMTZgwQc8995xsNpv7tQceeED/+c9/FBpav82EgwcP6l//+pduu+02vf766x6vPf/888rIyKj1POTn5ysqKqrW3wfAyYFhgQDgRXx8vCIjIys0Mg3D0PPPP6+uXbsqIiJCTZs21bhx43T06FGPdG3bttWVV16pFStWqE+fPoqIiNBpp52mt956q8J7ZWZm6u6771bbtm3lcDjUsmVLjR49usKcJcMw9Pjjj6tly5aKiIjQgAEDtG3bNo805cPdfvrpJ/Xr109RUVFq3769e77W8uXLdc455ygyMlIdO3bUp59+6rH/7t27dccdd6hjx46KjIxUkyZNNHz48ApDrsqHUy5fvlx33HGHkpKS1LJlyyo/z927d6t9+/bq1q2bDh48KKni3JvyeTvPPPOMXn/9dbVr104Oh0O9e/fWd999V+GYc+bMUZcuXRQREaFu3bpp3rx5NZrPc/ycqxkzZmj48OGSpIsvvtg9ZHTZsmVq27atNmzYoOXLl7u39+/f332czMxMTZgwQa1atZLD4VD79u315JNPevTSHX+uzz//vPtcN27cWGX+yt/LNE2P7f4EhQUFBUpLS1OnTp30zDPPeARW5X7/+9+rT58+7r937Nih4cOHq3HjxoqKitK5556rhQsX+vR+//d//6du3bp5fEe+2Llzp0zTVN++fSu8Vj50V/L+PUnSBx98oCFDhig5OVkOh0Pt2rXTY489ptLSUo9jll83q1ev1kUXXaSoqCjdf//91X7XAFCOnisAOE5WVpYOHTok0zSVnp6ul156Sbm5uRo1apRHunHjxmnGjBm6+eabddddd2nnzp16+eWX9cMPP+irr77y6I3Ztm2brr/+et16660aM2aM3nzzTY0dO1a9evVS165dJUm5ubm68MILtWnTJt1yyy0666yzdOjQIc2fP1+//vqrEhIS3Mf7xz/+IbvdrnvuuUdZWVl66qmnNHLkSH3zzTceeTx69KiuvPJKjRgxQsOHD9fUqVM1YsQIvf3225owYYJuv/123XTTTXr66ad1/fXX65dfflFMTIwk6bvvvtPXX3+tESNGqGXLltq1a5emTp2q/v37a+PGjRXu5N9xxx1KTEzUQw89pLy8vEo/2+3bt+uSSy5R48aNtWTJEo9zqsysWbOUk5OjcePGyWaz6amnntK1116rHTt2uD/fhQsX6sYbb1T37t2Vlpamo0eP6tZbb1WLFi28HttXF110ke666y69+OKLuv/++9W5c2dJUufOnfX8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nsaMGaNnn33Wva2wsFCZmZl+H+vpp59WaGio7rjjDsXExOimm26yJI/lDeoTV0qsalugKltJr7rX2rVrp9zcXHdPldV5+eWXX9w9kJ06ddLChQs1YMAA9erVS3v27NFrr73m9TgXXHCBGjVqpHfeeUf3339/tYtatGnTRps3b66wvXxIXVXBTfn2rVu3VnitsuP54+yzz9by5cu1f/9+tWnTpsrvYtmyZTp8+LDmzp2riy66yL19586dfr2ft3IAAOUYFggAXhQXF+uTTz5ReHi4ewjUDTfcoNLSUj322GMV0peUlAQUgFx33XVau3ZtpUtU10dPTUhISIX3femllyosXe0Lm82m119/Xddff73GjBmj+fPnW5LH5ORkdevWTW+99ZY78JXKlplft26dJe8hyf3Mrsq+1+jo6Eq333DDDVq5cqU+/vjjCq9lZma6A3Z/DRgwQFLZw66PP8Y555yjv/3tb9q1a5c6dOhQ7RDTqKgoTZo0SZs2bdKkSZMqLWP//e9/9e2330qSrrjiCn377bdauXKl+/W8vDy9/vrratu2bZXzp5o3b64zzzxTM2fO9Bh+t2TJEq/LzZc7cOBApelcLpc+++wz2e129xDQqr6n8sDx+HN0uVz617/+Ve37H6+q7xoAjkfPFQAcZ9GiRe678enp6Zo1a5a2bt2q++67zz1PpV+/fho3bpzS0tL0448/atCgQQoLC9PWrVs1Z84cvfDCC7r++uv9et97771X7733noYPH65bbrlFvXr10pEjRzR//ny9+uqr6tGjh+Xn6s2VV16p//znP4qLi1OXLl20cuVKffrpp2rSpElAx7Pb7frvf/+rYcOG6YYbbtBHH32kSy65pMb5fOKJJ3T11Verb9++uvnmm3X06FG9/PLL6tatm0fAVRNnnnmmQkJC9OSTTyorK0sOh0OXXHKJkpKS1KtXL02dOlV///vf1b59eyUlJemSSy7Rvffeq/nz5+vKK690L7ufl5endevW6b333tOuXbuqXYq+MmeccYZ7yfHevXvrd7/7neLj4/Xll19q9uzZuvDCC7VixQrddtttmjlzptdj3XvvvdqwYYOeffZZLV26VNdff72aNWumAwcO6P/+7//07bffuoch3nfffXrnnXd0+eWX66677lLjxo01c+ZM7dy5U++//77s9qrv1aalpWnIkCG64IILdMstt+jIkSN66aWX1LVr12q/o19//VV9+vTRJZdcogEDBqhZs2ZKT0/XO++8o7Vr12rChAnuz7Gq7+n8889Xo0aNNGbMGN11112y2Wz6z3/+4/dNi6q+awDwUG/rFAJAEKlsKfaIiAjzzDPPNKdOnepeDv14r7/+utmrVy8zMjLSjImJMbt3727+9a9/Nfft2+dO06ZNG3PIkCEV9u3Xr1+FZZ0PHz5sjh8/3mzRooUZHh5utmzZ0hwzZox56NAh0zSPLcU+Z84cj/0qW/66siXGveVHkpmamur+++jRo+bNN99sJiQkmE6n0xw8eLD5888/V1imvPxz++677yoc8/il2Mvl5+eb/fr1M51Op3s5+KqWYn/66acrzefDDz/ssW327Nlmp06dTIfDYXbr1s2cP3++ed1115mdOnWqsP+JLrroIvOMM87w2HbiOZqmab7xxhvmaaedZoaEhHgs933gwAFzyJAhZkxMjCnJ4zvNyckxJ0+ebLZv394MDw83ExISzPPPP9985plnTJfLVe25ejNt2jSzV69eZkREhOl0Os0LL7zQnD17tmmapnn//febkswpU6b4dKz33nvPHDRokNm4cWMzNDTUbN68uXnjjTeay5Yt80i3fft28/rrrzfj4+PNiIgIs0+fPuaCBQs80lRWFk3TNN9//32zc+fOpsPhMLt06WLOnTu3wvdemezsbPOFF14wBw8ebLZs2dIMCwszY2JizPPOO8984403KlyXVX1PX331lXnuueeakZGRZnJysvnXv/7V/QiC45dur+q6MU3v3zUAlLOZZgOYGQwAgB/OPPNMJSYmasmSJV7TnXXWWYqOjtaXX35ZRzkDAJzMmHMFAGiwiouLK8xfWrZsmdauXav+/ft73Tc3N1c///yzz89bAgCgOsy5AgA0WHv37tXAgQM1atQoJScn6+eff9arr76qZs2a6fbbb690n4MHD2revHn6z3/+o4KCAo0ePbqOcw0AOFkRXAEAGqxGjRqpV69e+ve//62MjAxFR0dryJAh+sc//lHl4hubNm3S+PHj1b59e7311lvq27dvHecaAHCyYs4VAAAAAFiAOVcAAAAAYAGCKwAAAACwAHOuKmEYhvbt26eYmBjZbLb6zg4AAACAemKapnJycpScnOz1oekSwVWl9u3bp1atWtV3NgAAAAAEiV9++UUtW7b0mobgqhIxMTGSyj7A2NjYes2LYRjKyMhQYmJitZEycDzKDgJBuUEgKDcIFGUHgajrcpOdna1WrVq5YwRvCK4qUT4UMDY2NiiCq8LCQsXGxlLpwC+UHQSCcoNAUG4QKMoOAlFf5caX6UKUYgAAAACwAMEVAAAAAFiA4AoAAAAALMCcKwAAAPjFNE2VlJSotLS0RscxDEPFxcUqLCxkzhV8ZnW5CQkJUWhoqCWPYCK4AgAAgM9cLpf279+v/Pz8Gh/LNE0ZhqGcnByeLQqf1Ua5iYqKUvPmzRUeHl6j4xBcAQAAwCeGYWjnzp0KCQlRcnKywsPDa9S4Le8Bs6rXAKcGK8uNaZpyuVzKyMjQzp071aFDhxr1hhFcAQAAwCcul0uGYahVq1aKioqq8fEIrhAIq8tNZGSkwsLCtHv3brlcLkVERAR8LAa3AgAAwC/Mj8LJxqoyzZUBAAAAABYguAIAAAAACxBcAQAAADW0bNky2Ww2ZWZmSpJmzJih+Pj4es0T6h7BFQAAAE5qY8eOlc1m0+23317htdTUVNlsNo0dO9bS97zxxhu1ZcsWS4/pi127dunWW29VSkqKIiMj1a5dOz388MNyuVzV7rty5Updcsklio6OVmxsrC666CIVFBS4X9+yZYuuvvpqJSQkKDY2VhdccIGWLl3qcYzPPvtM559/vmJiYtSsWTNNmjRJJSUlHmlM09Qzzzyj008/XQ6HQy1atNDjjz9uzQdQzwiuAAAAcNJr1aqVZs+e7REsFBYWatasWWrdurXl7xcZGamkpCTLj1udn3/+WYZh6LXXXtOGDRv0z3/+U6+++qruv/9+r/utXLlSl112mQYNGqRvv/1W3333ncaPH++x0MOVV16pkpISff7551q9erV69OihK6+8UgcOHJAkrV27VldccYUuu+wy/fDDD3r33Xc1f/583XfffR7v9ec//1n//ve/9cwzz+jnn3/W/Pnz1adPH+s/jHpAcBXEDMPUzkO52pmRq52HcmUYZn1nCQAAoHJ5eVX/Kyz0Pe1xwU+VaQNw1llnqVWrVpo7d65729y5c9W6dWv17NnTI61hGEpLS3P3/vTo0UPvvfeeR5qPPvpIp59+uiIjI3XxxRdr165dHq+fOCxw+/btuvrqq9W0aVM5nU717t1bn376qcc+bdu21RNPPKFbbrlFMTExat26tV5//XW/zvOyyy7T9OnTNWjQIJ122mkaOnSo7rnnHo/zrszdd9+tu+66S/fdd5+6du2qjh076oYbbpDD4ZAkHTp0SFu3btV9992nM844Qx06dNA//vEP5efna/369ZKkd999V2eccYYeeughtW/fXv369dNTTz2lV155RTk5OZKkTZs2aerUqfrggw80dOhQpaSkqFevXrr00kurzNuuXbtks9n0v//9TxdeeKGioqJ03nnnacuWLfruu+909tlny+l06vLLL1dGRoZ7v2XLlqlPnz6Kjo5WfHy8+vbtq927d/v1efqL4CpIrd+bpccWbtSUDzfqf9//qikfbtRjCzdq/d6s+s4aAABARU5n1f+uu84zbVKS5HTKFhOjsEaNZIuJOZb28ss907ZtW/F4Abrllls0ffp0999vvvmmbr755grp0tLS9NZbb+nVV1/Vhg0bdPfdd2vUqFFavny5JOmXX37Rtddeq6uuuko//vij/vCHP1TonTlRbm6urrjiCn322Wf64YcfdNlll+mqq67Snj17PNI9++yzOvvss/XDDz/ojjvu0J/+9Cdt3rzZ/Xr//v39HsKYlZWlxo0bV/l6enq6vvnmGyUlJen8889X06ZN1a9fP61YscKdpkmTJurYsaPeeust5eXlqaSkRK+99pqSkpLUq1cvSVJRUVGFZ0RFRkaqsLBQq1evliR9+OGHOu2007RgwQKlpKSobdu2+sMf/qAjR45Uex4PP/yw/va3v2n16tUKDQ3VyJEj9de//lUvvPCCvvzyS23btk0PPfSQJKmkpETDhg1Tv3799NNPP2nlypX64x//WOvPUyO4CkLr92bpxc+2at2vWYqPDFdSbITiI8O17tey7QRYAAAA/hs1apRWrFih3bt3a/fu3frqq680atQojzRFRUV64okn9Oabb2rw4ME67bTTNHbsWI0aNUqvvfaaJGnq1Klq166dnn32WXXs2FEjR46sNuDp0aOHxo0bp27duqlDhw567LHH1K5dO82fP98j3RVXXKE77rhD7du316RJk5SQkOAxr6l169Zq3ry5z+e8bds2vfTSSxo3blyVaXbs2CFJeuSRR3Tbbbdp8eLFOuusszRgwABt3bpVkmSz2fTpp5/qhx9+UExMjCIiIvTcc89p8eLFatSokSRp8ODB+vrrr/XOO++otLRUe/fu1aOPPipJ2r9/v/u9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ILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAJzUxo4dK5vNpttvv73Ca6mpqbLZbBo7dmzdZ6waxcXFmjRpkrp3767o6GglJydr9OjR2rdvX7X77t27V6NGjVKTJk0UGRmp7t276/vvv3e/fvDgQY0dO1bJycmKiorSZZddpq1bt3oco7CwUKmpqWrSpImcTqeuu+46HTx40CPNd999pwEDBig+Pl6NGjXS4MGDtXbtWms+gAaI4AoAAAAnvVatWmn27NkqKChwbyssLNSsWbPUunXresxZ1fLz87VmzRo9+OCDWrNmjebOnavNmzdr6NChXvc7evSo+vbtq7CwMC1atEgbN27Us88+q0aNGkmSTNPUsGHDtGPHDn3wwQf64Ycf1KZNGw0cOFB5eXnu49x999368MMPNWfOHC1fvlz79u3Ttdde6349NzdXl112mVq3bq1vvvlGK1asUExMjAYPHqzi4uLa+VCCHMEVAAAAaizPlac8V55M03Rvc5W6lOfKU1FJUaVpDdNwbysuLVaeK0+FJYXVpg3EWWedpVatWmnu3LnubXPnzlXr1q3Vs2dPj7SGYSgtLU0pKSmKjIxUjx499N5777lfLy0t1a233up+vWPHjnrhhRc8jjF27FgNGzZMzzzzjJo3b64mTZooNTXVr6AjLi5OS5Ys0Q033KCOHTvq3HPP1csvv6zVq1drz549Ve735JNPqlWrVpo+fbr69OmjlJQUDRo0SO3atZMkbd26VatWrdLUqVPVu3dvdezYUVOnTlVBQYHeeecdSVJWVpamTZum5557Tpdccol69eql6dOn6+uvv9aqVaskST///LOOHDmiRx99VB07dlTXrl318MMP6+DBg9q9e3eV+bPZbHrttdd05ZVXKioqSp07d9bKlSu1bds29e/fX9HR0Tr//PO1fft29z5r167VxRdfrJiYGMXFxemcc87x6IkLFgRXAAAAqDFnmlPONKcO5R9yb3v6q6flTHNq/EfjPdImPZMkZ5pTe7KOBQivfPeKnGlO3Tr/Vo+0bV9oK2eaU5syNtU4j7fccoumT5/u/vvNN9/UzTffXCFdWlqa3nrrLb366qvasGGD7r77bo0aNUrLly+XVBZ8tWzZUnPmzNHGjRv10EMP6f7779f//vc/j+MsXbpU27dv19KlSzVz5kzNmDFDM2bMcL/+yCOPqG3btn6dQ1ZWlmw2m+Lj46tMM3/+fJ199tkaPny4kpKS1LNnT73xxhvu14uKyoLdiIgI9za73S6Hw6EVK1ZIklavXq3i4mINHDjQnaZTp05q3bq1Vq5cKUnq2LGjmjRpomnTpsnlcqmgoEDTpk1T586dqz2vxx57TKNHj9aPP/6oTp066aabbtK4ceM0efJkff/99zJNU+PHHys3I0eOVMuWLfXdd9/p+++/17333quwsDCfP7e6QnAFAACAU8KoUaO0YsUK7d69W7t379ZXX32lUaNGeaQpKirSE088oTfffFODBw/WaaedprFjx2rUqFF67bXXJElhYWGaMmWKzj77bKWkpGjkyJG6+eabKwRXjRo10ssvv6xOnTrpyiuv1JAhQ/TZZ5+5X09ISHD3JvmisLBQkyZN0u9+9zvFxsZWmW7Hjh2aOnWqOnTooI8//lh/+tOfdNddd2nmzJmSjgVJkydP1tGjR+VyufTkk0/q119/1f79+yVJBw4cUHh4eIUgrmnTpjpw4IAkKSYmRsuWLdN///tfRUZGyul0avHixVq0aJFCQ0O9nsvNN9+sG264QaeffromTZqkXbt2aeTIkRo8eLA6d+6sP//5z1q2bJk7/Z49ezRw4EB16tRJHTp00PXXX68ePXr4/NnVFe9nDQAAAPggd3KuJCkqLMq97d6+92rCuRMUavdscqbfky5JigiNkFFaNtwvtXeqbjvrNoXYQzzS7vrzLklSZFhkjfOYmJioIUOGaMaMGTJNU0OGDFFCQoJHmm3btik/P1+XXnqpx3aXy+UxfPCVV17Rm2++qT179qigoEAul0tnnnmmxz5du3ZVSMix82nevLnWrVvn/nv8+PEevTPeFBcX64YbbpBpmpo6darXtIZh6Oyzz9YTTzwhSerZs6fWr1+vV199VWPGjFFYWJjmzp2rW2+9VY0bN1ZISIgGDhyoyy+/3GNYZ3UKCgp06623qm/fvnrnnXdUWlqqZ555RkOGDNF3332nyMiqv7MzzjjD/f+mTZtKkrp37+6xrbCwUNnZ2YqNjdXEiRP1hz/8Qf/5z380YMAAXXPNNerYsaPPea0rBFcAAACosejw6ArbwkPCFR4SXmVa0zRlqCy4CgsJU1hIxWFelR23Jm655RZ3QPPKK69UeD03tyxIXLhwoVq0aOHxmsPhkCTNnj1b99xzj5599lmdd955iomJ0dNPP61vvvnGI/2Jw9ZsNpsMw/+5Y+WB1e7du/X555977bWSyoK4Ll26eGzr3Lmz3n//ffffvXr10o8//qisrCy5XC4lJibqnHPO0dlnny1JatasmVwulzIzMz16rw4ePKhmzZpJkmbNmqVdu3Zp5cqVstvt7m2NGjXSBx98oBEjRlSZx+M/G5vNVuW28s/rkUce0U033aSFCxdq0aJFeuSRR/TOO+94LLARDAiuAAAAcMq47LLL5HK5ZLPZNHjw4Aqvd+nSRQ6HQ3v27FG/fv0qPcZXX32l888/X3fccYd72/GLL1ipPLDaunWrli5dqiZNmlS7T9++fbV582aPbVu2bFGbNm0qpI2Li5NUtsjF999/r8cee0xSWfAVFhamzz77TNddd50kafPmzdqzZ4/OO+88SWWrGdrtdncgJMn9dyBBZHVOP/10nX766ZowYYJGjBihGTNmBF1wxZwrAAAAnDJCQkK0adMmbdy40WPIXrmYmBjdc889uvvuuzVz5kxt375da9as0UsvveSes9ShQwd9//33+vjjj7VlyxY9+OCD+u677/zOy8svv6wBAwZU+XpxcbGuv/56ff/993r77bdVWlqqAwcO6MCBA3K5XO50AwYM0Msvv+z+++6779aqVav0xBNPaNu2bZo1a5Zef/11paamutPMmTNHy5Ytcy/Hfumll2rYsGEaNGiQpLKg69Zbb9XEiRO1dOlSrV69WjfffLPOO+88nXvuuZKkSy+9VEePHlVqaqo2bdqkDRs26Oabb1ZoaKguvvhivz+PqhQUFGj8+PFatmyZe67c6tWr1alTJ8vewyr0XAEAAOCUUt2wuscee0yJiYlKS0vTjh07FB8fr7POOkv333+/JGncuHH64YcfdOONN8pms+l3v/ud7rjjDi1atMivfBw6dMhrj9fevXs1f/58Saown2vp0qXq37+/pLJes0OHjq3S2Lt3b82bN0+TJ0/Wo48+qpSUFD3//PMaOXKkO83+/fs1ceJEHTx4UM2bN9fo0aP14IMPerzHP//5T9ntdl133XUqKirS4MGD9a9//cv9eqdOnfThhx9qypQpOu+882S329WzZ08tXrxYzZs39+uz8CYkJESHDx/W6NGjdfDgQSUkJGjYsGGaMmWKZe9hFZvpz6y1U0R2drbi4uKUlZVV7cVX2wzDUHp6upKSktxjWQFfUHYQCMoNAkG5OXUUFhZq586dSklJ8VjGO1CmaaqkpEShoaEeQ8sAb2qj3Hgr2/7EBtSAAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAC/sB4aTjZWlel6Da7S0tLUu3dvxcTEKCkpScOGDavwwLMT9e/fXzabrcK/IUOGuNPk5uZq/PjxatmypSIjI9WlSxe9+uqrtX06AAAAJ7WwsDBJZQ+PBU4m5WW6vIwHql6fc7V8+XKlpqaqd+/eKikp0f33369BgwZp48aNio6OrnSfuXPnejw07fDhw+rRo4eGDx/u3jZx4kR9/vnn+u9//6u2bdvqk08+0R133KHk5GQNHTq01s8LAADgZBQSEqL4+Hilp6dLkqKiomq0FDZLsSMQVpYb0zSVn5+v9PR0xcfHV/pgaX/Ua3C1ePFij79nzJihpKQkrV69WhdddFGl+zRu3Njj79mzZysqKsojuPr66681ZswY94PV/vjHP+q1117Tt99+S3AFAABQA82aNZMkd4BVE6ZpyjAM2e12giv4rDbKTXx8vLts10S9BlcnysrKklQxgPJm2rRpGjFihEdP1/nnn6/58+frlltuUXJyspYtW6YtW7bon//8Z6XHKCoqUlFRkfvv7OxsSWUPRTQMI5BTsYxhGO4CBPiDsoNAUG4QCMrNqadp06ZKSEhQcXFxjY5jGIaOHDmixo0b8wBq+MzqchMWFqaQkBCZplnp3Ct/6ragCa4Mw9CECRPUt29fdevWzad9vv32W61fv17Tpk3z2P7SSy/pj3/8o1q2bKnQ0FDZ7Xa98cYbVfaGpaWlacqUKRW2Z2RkqLCw0P+TsZBhGMrKypJpmlQ68AtlB4Gg3CAQlBsEyjAM5eXludtrgC/qutzk5OT4nDZogqvU1FStX79eK1as8HmfadOmqXv37urTp4/H9pdeekmrVq3S/Pnz1aZNG33xxRdKTU1VcnKyBg4cWOE4kydP1sSJE91/Z2dnq1WrVkpMTFRsbGzgJ2UBwzBks9mUmJhIpQO/UHYQCMoNAkG5QaAoOwhEXZebiIgIn9MGRXA1fvx4LViwQF988YVatmzp0z55eXmaPXu2Hn30UY/tBQUFuv/++zVv3jz3CoJnnHGGfvzxRz3zzDOVBlcOh0MOh6PCdrvdHhQXus1mC5q8oGGh7CAQlBsEgnKDQFF2EIi6LDf+vEe9BlemaerOO+/UvHnztGzZMqWkpPi875w5c1RUVKRRo0Z5bC8uLlZxcXGFDyEkJISx4AAAAABqTb0GV6mpqZo1a5Y++OADxcTE6MCBA5KkuLg4RUZGSpJGjx6tFi1aKC0tzWPfadOmadiwYWrSpInH9tjYWPXr10/33nuvIiMj1aZNGy1fvlxvvfWWnnvuubo5MQAAAACnnHoNrqZOnSpJ7iXTy02fPl1jx46VJO3Zs6dCL9TmzZu1YsUKffLJJ5Ued/bs2Zo8ebJGjhypI0eOqE2bNnr88cd1++23W34OAAAAACAFwbDA6ixbtqzCto4dO3rdt1mzZpo+fXpNsgYAAAAAfmHmIAAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAAL1GtwlZaWpt69eysmJkZJSUkaNmyYNm/e7HWf/v37y2azVfg3ZMgQj3SbNm3S0KFDFRcXp+joaPXu3Vt79uypzdMBAAAAcAqr1+Bq+fLlSk1N1apVq7RkyRIVFxdr0KBBysvLq3KfuXPnav/+/e5/69evV0hIiIYPH+5Os337dl1wwQXq1KmTli1bpp9++kkPPvigIiIi6uK0AAAAAJyCQuvzzRcvXuzx94wZM5SUlKTVq1froosuqnSfxo0be/w9e/ZsRUVFeQRXDzzwgK644go99dRT7m3t2rWzMOcAAAAA4Kleg6sTZWVlSaoYQHkzbdo0jRgxQtHR0ZIkwzC0cOFC/fWvf9XgwYP1ww8/KCUlRZMnT9awYcMqPUZRUZGKiorcf2dnZ7uPZRhGgGdjDcMwZJpmvecDDQ9lB4Gg3CAQlBsEirKDQNR1ufHnfYImuDIMQxMmTFDfvn3VrVs3n/b59ttvtX79ek2bNs29LT09Xbm5ufrHP/6hv//973ryySe1ePFiXXvttVq6dKn69etX4ThpaWmaMmVKhe0ZGRkqLCwM/KQsYBiGsrKyZJqm7HbWH4HvKDsIBOUGgaDcIFCUHQSirstNTk6Oz2ltpmmatZgXn/3pT3/SokWLtGLFCrVs2dKnfcaNG6eVK1fqp59+cm/bt2+fWrRood/97neaNWuWe/vQoUMVHR2td955p8JxKuu5atWqlY4eParY2NganFXNGYahjIwMJSYmUunAL5QdBIJyg0BQbhAoyg4CUdflJjs7W40aNVJWVla1sUFQ9FyNHz9eCxYs0BdffOFzYJWXl6fZs2fr0Ucf9diekJCg0NBQdenSxWN7586dtWLFikqP5XA45HA4Kmy32+1BcaHbbLagyQsaFsoOAkG5QSAoNwgUZQeBqMty48971GtwZZqm7rzzTs2bN0/Lli1TSkqKz/vOmTNHRUVFGjVqlMf28PBw9e7du8KS7lu2bFGbNm0syTcAAAAAnKheg6vU1FTNmjVLH3zwgWJiYnTgwAFJUlxcnCIjIyVJo0ePVosWLZSWluax77Rp0zRs2DA1adKkwnHvvfde3Xjjjbrooot08cUXa/Hixfrwww+1bNmyWj8nAAAAAKemeg2upk6dKqnswcDHmz59usaOHStJ2rNnT4WuuM2bN2vFihX65JNPKj3uNddco1dffVVpaWm666671LFjR73//vu64IILLD8HAAAAAJCCYFhgdSrrberYsWO1+95yyy265ZZbAs0aAAAAAPiFmYMAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYIFQf3cwDEPLly/Xl19+qd27dys/P1+JiYnq2bOnBg4cqFatWtVGPgEAAAAgqPncc1VQUKC///3vatWqla644gotWrRImZmZCgkJ0bZt2/Twww8rJSVFV1xxhVatWlWbeQYAAACAoONzz9Xpp5+u8847T2+88YYuvfRShYWFVUize/duzZo1SyNGjNADDzyg2267zdLMAgAAAECw8jm4+uSTT9S5c2evadq0aaPJkyfrnnvu0Z49e2qcOQAAAABoKHweFlhdYHW8sLAwtWvXLqAMAQAAAEBDFNBqgYsXL9aKFSvcf7/yyis688wzddNNN+no0aOWZQ4AAAAAGoqAgqt7771X2dnZkqR169bpL3/5i6644grt3LlTEydOtDSDAAAAANAQ+L0UuyTt3LlTXbp0kSS9//77uvLKK/XEE09ozZo1uuKKKyzNIAAAAAA0BAH1XIWHhys/P1+S9Omnn2rQoEGSpMaNG7t7tAAAAADgVBJQz9UFF1ygiRMnqm/fvvr222/17rvvSpK2bNmili1bWppBAAAAAGgIAuq5evnllxUaGqr33ntPU6dOVYsWLSRJixYt0mWXXWZpBgEAAACgIQio56p169ZasGBBhe3//Oc/a5whAAAAAGiIAuq5Kpeenq7169frp59+8vjnq7S0NPXu3VsxMTFKSkrSsGHDtHnzZq/79O/fXzabrcK/IUOGVJr+9ttvl81m0/PPP+/PqQEAAACAXwLquVq9erXGjBmjTZs2yTRNSZLNZpNpmrLZbCotLfXpOMuXL1dqaqp69+6tkpIS3X///Ro0aJA2btyo6OjoSveZO3euXC6X++/Dhw+rR48eGj58eIW08+bN06pVq5ScnBzAWQIAAACA7wIKrm655RadfvrpmjZtmpo2bSqbzRbQmy9evNjj7xkzZigpKUmrV6/WRRddVOk+jRs39vh79uzZioqKqhBc7d27V3feeac+/vjjKnu1yhUVFamoqMj9d/mKh4ZhyDAMn8+nNhiGIdM06z0faHgoOwgE5QaBoNwgUJQdBKKuy40/7xNQcLVjxw69//77at++fSC7VykrK0tSxQDKm2nTpmnEiBEePV2GYej3v/+97r33XnXt2rXaY6SlpWnKlCkVtmdkZKiwsNDnvNQGwzCUlZUl0zRlt9doFCdOMZQdBIJyg0BQbhAoyg4CUdflJicnx+e0AQVXAwYM0Nq1ay0NrgzD0IQJE9S3b19169bNp32+/fZbrV+/XtOmTfPY/uSTTyo0NFR33XWXT8eZPHmyJk6c6P47OztbrVq1UmJiomJjY30/iVpgGIZsNpsSExOpdOAXyg4CQblBICg3CBRlB4Go63ITERHhc9qAgqt///vfGjNmjNavX69u3bopLCzM4/WhQ4f6fczU1FStX79eK1as8HmfadOmqXv37urTp4972+rVq/XCCy9ozZo1Pg9XdDgccjgcFbbb7faguNBtNlvQ5AUNC2UHgaDcIBCUGwSKsoNA1GW58ec9AgquVq5cqa+++kqLFi2q8Jo/C1qUGz9+vBYsWKAvvvjC54cQ5+Xlafbs2Xr00Uc9tn/55ZdKT09X69at3dtKS0v1l7/8Rc8//7x27drlV94AAAAAwBcBhXp33nmnRo0apf3797sXfSj/509gZZqmxo8fr3nz5unzzz9XSkqKz/vOmTNHRUVFGjVqlMf23//+9/rpp5/0448/uv8lJyfr3nvv1ccff+zz8QEAAADAHwH1XB0+fFh33323mjZtWqM3T01N1axZs/TBBx8oJiZGBw4ckCTFxcUpMjJSkjR69Gi1aNFCaWlpHvtOmzZNw4YNU5MmTTy2N2nSpMK2sLAwNWvWTB07dqxRfgEAAACgKgEFV9dee62WLl2qdu3a1ejNp06dKqnswcDHmz59usaOHStJ2rNnT4Vxjps3b9aKFSv0ySef1Oj9AQAAAMAqAQVXp59+uiZPnqwVK1aoe/fuFRa08HWVvvIHEHuzbNmyCts6duzo077lmGcFAAAAoLYFvFqg0+nU8uXLtXz5co/XbDabz8EVAAAAAJwsAgqudu7caXU+AAAAAKBB44ECAAAAAGABn4Orf/zjHyooKPAp7TfffKOFCxcGnCkAAAAAaGh8Dq42btyo1q1b64477tCiRYuUkZHhfq2kpEQ//fST/vWvf+n888/XjTfeqJiYmFrJMAAAAAAEI5/nXL311ltau3atXn75Zd10003Kzs5WSEiIHA6H8vPzJUk9e/bUH/7wB40dO1YRERG1lmkAAAAACDZ+LWjRo0cPvfHGG3rttdf0008/affu3SooKFBCQoLOPPNMJSQk1FY+AQAAACCoBbRaoN1u15lnnqkzzzzT4uwAAAAAQMPEaoEAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALFCj4Grbtm36+OOP3Q8XNk3TkkwBAAAAQEMTUHB1+PBhDRw4UKeffrquuOIK7d+/X5J066236i9/+YulGQQAAACAhiCg4Oruu+9WaGio9uzZo6ioKPf2G2+8UYsXL7YscwAAAADQUAT0nKtPPvlEH3/8sVq2bOmxvUOHDtq9e7clGQMAAACAhiSgnqu8vDyPHqtyR44ckcPhqHGmAAAAAKChCSi4uvDCC/XWW2+5/7bZbDIMQ0899ZQuvvhiyzIHAAAAAA1FQMMCn3rqKQ0YMEDff/+9XC6X/vrXv2rDhg06cuSIvvrqK6vzCAAAAABBL6Ceq27dumnLli264IILdPXVVysvL0/XXnutfvjhB7Vr187qPAIAAABA0Auo50qS4uLi9MADD1iZFwAAAABosAIOrgoLC/XTTz8pPT1dhmF4vDZ06NAaZwwAAAAAGpKAgqvFixdr9OjROnToUIXXbDabSktLa5wxAAAAAGhIAppzdeedd2r48OHav3+/DMPw+EdgBQAAAOBUFFBwdfDgQU2cOFFNmza1Oj8AAAAA0CAFFFxdf/31WrZsmcVZAQAAAICGK6A5Vy+//LKGDx+uL7/8Ut27d1dYWJjH63fddZclmQMAAACAhiKg4Oqdd97RJ598ooiICC1btkw2m839ms1mI7gCAAAAcMoJKLh64IEHNGXKFN13332y2wMaWQgAAAAAJ5WAIiOXy6Ubb7yRwAoAAAAAfhNQdDRmzBi9++67VucFAAAAABqsgIYFlpaW6qmnntLHH3+sM844o8KCFs8995wlmQMAAACAhiKg4GrdunXq2bOnJGn9+vUerx2/uAUAAAAAnCoCCq6WLl1qdT4AAAAAoEFjRQoAAAAAsIDPPVfXXnutZsyYodjYWF177bVe086dO7fGGQMAAACAhsTn4CouLs49nyouLq7WMgQAAAAADZHPwdX06dP16KOP6p577tH06dNrM08AAAAA0OD4NedqypQpys3Nra28AAAAAECD5VdwZZpmbeUDAAAAABo0v1cL5DlWAAAAAFCR38+5Ov3006sNsI4cORJwhgAAAACgIfI7uJoyZQqrBQIAAADACfwOrkaMGKGkpKTayAsAAAAANFh+zblivhUAAAAAVI7VAgEAAADAAn4NCzQMo7byAQAAAAANmt9LsQMAAAAAKiK4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGCBeg2u0tLS1Lt3b8XExCgpKUnDhg3T5s2bve7Tv39/2Wy2Cv+GDBkiSSouLtakSZPUvXt3RUdHKzk5WaNHj9a+ffvq4pQAAAAAnKLqNbhavny5UlNTtWrVKi1ZskTFxcUaNGiQ8vLyqtxn7ty52r9/v/vf+vXrFRISouHDh0uS8vPztWbNGj344INas2aN5s6dq82bN2vo0KF1dVoAAAAATkGh9fnmixcv9vh7xowZSkpK0urVq3XRRRdVuk/jxo09/p49e7aioqLcwVVcXJyWLFnikebll19Wnz59tGfPHrVu3drCMwAAAACAMvUaXJ0oKytLUsUAyptp06ZpxIgRio6O9npcm82m+Pj4Sl8vKipSUVGR++/s7GxJkmEYMgzD57zUBsMwZJpmvecDDQ9lB4Gg3CAQlBsEirKDQNR1ufHnfYImuDIMQxMmTFDfvn3VrVs3n/b59ttvtX79ek2bNq3KNIWFhZo0aZJ+97vfKTY2ttI0aWlpmjJlSoXtGRkZKiws9O0EaolhGMrKypJpmrLbWX8EvqPsIBCUGwSCcoNAUXYQiLouNzk5OT6nDZrgKjU1VevXr9eKFSt83mfatGnq3r27+vTpU+nrxcXFuuGGG2SapqZOnVrlcSZPnqyJEye6/87OzlarVq2UmJhYZUBWVwzDkM1mU2JiIpUO/ELZQSAoNwgE5QaBouwgEHVdbiIiInxOGxTB1fjx47VgwQJ98cUXatmypU/75OXlafbs2Xr00Ucrfb08sNq9e7c+//xzr0GSw+GQw+GosN1utwfFhW6z2YImL2hYKDsIBOUGgaDcIFCUHQSiLsuNP+9Rr8GVaZq68847NW/ePC1btkwpKSk+7ztnzhwVFRVp1KhRFV4rD6y2bt2qpUuXqkmTJlZmGwAAAAAqqNfgKjU1VbNmzdIHH3ygmJgYHThwQFLZin+RkZGSpNGjR6tFixZKS0vz2HfatGkaNmxYhcCpuLhY119/vdasWaMFCxaotLTUfdzGjRsrPDy8Ds4MAAAAwKmmXoOr8nlQ/fv399g+ffp0jR07VpK0Z8+eCl1xmzdv1ooVK/TJJ59UOObevXs1f/58SdKZZ57p8drSpUsrvBcAAAAAWKHehwVWZ9myZRW2dezYscp927Zt69NxAQAAAMBKzBwEAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYIF6Da7S0tLUu3dvxcTEKCkpScOGDdPmzZu97tO/f3/ZbLYK/4YMGeJOY5qmHnroITVv3lyRkZEaOHCgtm7dWtunAwAAgphhmNqRkau1v2RqR0auDMOs7ywBOMmE1uebL1++XKmpqerdu7dKSkp0//33a9CgQdq4caOio6Mr3Wfu3LlyuVzuvw8fPqwePXpo+PDh7m1PPfWUXnzxRc2cOVMpKSl68MEHNXjwYG3cuFERERG1fl4AACC4rN+bpffX/Kpt6bkqKjbkCLOrfZJT153VUt1axNV39k5JhmFq56FcpWfkKs8epZSEGNnttvrOFlAj9RpcLV682OPvGTNmKCkpSatXr9ZFF11U6T6NGzf2+Hv27NmKiopyB1emaer555/X3/72N1199dWSpLfeektNmzbV//3f/2nEiBG1cCYAACBYrd+bpRc/26ojeS41j4tUZFyIClylWvdrlvYeLdBdAzoQYNWx8mB3e3qOmtgLddg4pHZJMQS7aPDqNbg6UVZWlqSKAZQ306ZN04gRI9w9XTt37tSBAwc0cOBAd5q4uDidc845WrlyZaXBVVFRkYqKitx/Z2dnS5IMw5BhGAGdi1UMw5BpmvWeDzQ8lB0EgnKDQARzuTEMU++v/kVH84rUPskpm62sZ8QZEaL2jmhtT8/V3NW/qlNTJ70mdWTDviy9/Pk2HclzKTkuQkkOU0ZRmNb/mql9R/M1/pL26ppMgIWq1XWd48/7BE1wZRiGJkyYoL59+6pbt24+7fPtt99q/fr1mjZtmnvbgQMHJElNmzb1SNu0aVP3aydKS0vTlClTKmzPyMhQYWGhr6dQKwzDUFZWlkzTlN3O+iPwHWUHgaDc1C3DMJWeU6gCV6kiw0OUFBPRIBv4wVxuDmQVKC/rsLo1DlWErcDzRZvUrbGUm3VI67fvUbO4yPrJ5CnEMEx9uuYXRZbk6eymkZKK5ZRL9gibkiNCtD8zV5+t2aom9lYN8lpA3ajrOicnJ8fntEETXKWmpmr9+vVasWKFz/tMmzZN3bt3V58+fWr03pMnT9bEiRPdf2dnZ6tVq1ZKTExUbGxsjY5dU4ZhyGazKTExMeh+sBDcKDsIBOWm7mzYl6W5a/Zqe8axOUDtEp269qwWDe6ufTCXmwOuLO3O2682kdEqVMXGemmIqd15eVJkvJKSGtbn3hDtPJSrHzIMxUfGKVOhkkxJpjIVKckmIyJcazJcuio0WikJznrOLYJVXdc5/qzZEBTB1fjx47VgwQJ98cUXatmypU/75OXlafbs2Xr00Uc9tjdr1kySdPDgQTVv3ty9/eDBgzrzzDMrPZbD4ZDD4aiw3W63B8WPhM1mC5q8oGGh7CAQlJvat35vll76fHvFOUB7s7U3s7BBzgEK1nITGxmm8LAQFbgMOSMqNnsKXKUKDwtRbGRY0OX9ZJRbZKiw2FREXKjkDnZt7n8R4aEqzC5SbpHB9wGv6rLO8ec96rXUmqap8ePHa968efr888+VkpLi875z5sxRUVGRRo0a5bE9JSVFzZo102effebelp2drW+++UbnnXeeZXkHACAQhmHq/TW/6kieS+2TnHJGhCrEbpMzIlTtk5w6kufS3DV7WSbcIm2bRKt9klP7swpkmp6fqWma2p9VoA5JMWrbpPJVimvTqbg0fExEqBxhdhW4Sit9vcBVKkeYXTGVBMJAQ1CvJTc1NVWzZs3SBx98oJiYGPecqLi4OEVGlo17Hj16tFq0aKG0tDSPfadNm6Zhw4apSZMmHtttNpsmTJigv//97+rQoYN7Kfbk5GQNGzasTs4LAICq7Dqcp23puWoeF+leXKGczWZT87hIbU3P0a7DeTotkWFRNWW323TdWS2192iB+3OPDC/rKdyfVaDG0eG69qwWdT6/51RdGr482F33a5baO5w6/hIoD3bPaBlfL8EuYIV6Da6mTp0qqezBwMebPn26xo4dK0nas2dPha64zZs3a8WKFfrkk08qPe5f//pX5eXl6Y9//KMyMzN1wQUXaPHixTzjCgBQ73IKS1RUbCgyLqTS1yPDQ3Qw21BOYUkd5+zk1a1FnO4a0MEdzBzMLgtmzmgZr2vPalHnwcypvDT8icFuclyEYh1SXlGJ9mUV1luwC1ilXoOrE7vnK7Ns2bIK2zp27Oh1X5vNpkcffbTCfCwAAOrb8cOiqpoDxLCowBmGqV2H85RTWKKYiFC1bRItu92mbi3i1KV5bKWv1XX+jh8Wemxp+FC1dzi1LT1Xc9fsVZfmsSdtgHF8sLs9PUchRYXKNFRvwS5gJWpuAADqUMVhUcca0AyLqpnqhtrZ7bZ6H2rJsNAy5cHuzkM5Sj+YrqSmSUpJiDlpA0qcOgiuAACoQ8E6B6ihayhD7RgWeozdblNKglPRRr6SEniIM04OrHEJAEAdKx8W1b1lnDILXNp1KE+ZBS6d0TI+aIKAhqQhrcDIannAyY0rFwCAehAsc4BOBg1pqB3DQoGTG8FVA1XVhF0AQMMRDHOATgYNaagdw0KBkxvBVQN0qj4bAwBQP4L9hl5DW4Ex2JaGB2Cd4Khl4LOGMmEXAHByaAg39BriUDuGhQYu2IN9nNoIrhoQno0BAKeOum5AVvZ+G/dnN4gbeg11qB3DQv3XEIJ9nNoIrhqQhjRhFwAQuLpuQFb2fu0So3Ukr9inG3rB4GQbakfvTEWM3kFDQHDVgDSkCbuoOX5YgVNTXTcgq3q/73cd1f6sQnVNjq32hl7bJlGW5acmTpahdsHWOxMMv0eM3kFDQXDVgDS0CbsIXLD9sAKoG3XdgPT2fs3jIrTrcL72ZxWqRXykdEKAFaw39Br6ULtg650Jlt8jRu+goeAhwg1I+YTd/VkFMk3PByGWT9jtkBQTVBN24b/yH9Z1v2YpPjJcbROiFR8ZrnW/lm1fvzervrMIoJb404Cs7fcLDw1RRJhdR/NdyimqGEBxQ896wfYw5GD6PXKP3gmvevROUXHwBfs49RBcNSDlE3YbR4drW3qucgtLVGqYyi0s0bb03KCdsAvfBdsPK4C6VdcNSG/vFxMRqkZR4SosNuQqLvV4jRt6xxiGqR0ZuVr7S6Z2ZOTWqH6u6+Dam2D7PTp+9E5lgjXYt7J8oGEIrhKIap1sE3bhiWEPwKnNiuHf/syP8fZ+5XXOkTyX9mUXyhEWWuUKfCd7g7Gqz9TqIXNWzK22an5UsP0eNcTl9oNlSCXqFsFVA3SyTNhFRSxaApzaatqA9LcxV9375btKdEH7hLIRExmn5g29qj7TM1vFa+FP+y2dG1XT4Lq679+fwKu+f48qy2tNl9uvy4U5gm3uHOoOwVUD1dAn7KJyLFoCnNpq8rymQBpzvrzfbReddkrc0PPnOV8//ZKpzzYdlNMRqjNaxlu28EhNguvqvv8hZzTXj79k+hx41+fvkbcgMdDRO3XZi8TKhqc2WmhAEGmIwx4QuGBY3hjBJ5Dh3zVpzPn6fifzDT1/n/PVNC5CW9NzFWKz68QrtiZD5gINrqv7/n/6NVPPfrJFSTEOnwNvX3+PWjeK0o6M3CrrMX/rOV9uEjw4pIvlx7QywAq2IZWoWwRXQBCpyV1rNCyMxYc3/g7/rmlj7lQebh7Ic75KSk2F2u3Kd5Uop6hEMRFhHq/XZMhcIMG1t+9fKutlOprvUvcWse5eqOoCb19+j3q0itPjizZVWY/5W8/5fJNgSKzPQUld9CKdGEBmFRQzxP8URnAFBBkWLTn5MRYfvvBn+LcV82MCHW5uGKZ2HspVekau8uxRSkmIaTBBWaDP+QoLsSss1KbiElPFJUaF4x4/ZC6QHurqgl1/GvM5hSXKLy5VmN2uklLPhUeqC7y9/R71aBXndc7ZkDOa+z0nrTZ6fGq7F6myADIxxqHiUoMh/qcovlUgCJ3Kd5FPdozFhxVObFxHO0LqZX5MecNye3qOmtgLddg4pHZJMQ2mB9af53wd3zsVExGqqLAQHXK5FBriud/xQ+byikr02MKNAfVQVxXs+tuYLy41VFxiKizEprDQik/gqS7wruz3qHWjKD2+aFOV9djWgzl6bfkORYWHVFvPHa82FtGozYU5qrpRtvtQng7nFamopNRjTp7EEP9TAcEVEKRYtOTknJPEWHzUVFXzgxpFhWtfZkGdzdc8vmGZHBehJIdUWhTeoHpgvTW8y5/ztT+rsOw5X5UM/WtkhutgdpHsNnulQ+Ze+nybpT3UgTTmQ0NsKjEMxUU6FOOoOvCOdoRUOXfqxN+jHRm5Xuux2MhwbT90VD1bxVdbz7VtEuXxmVt9k8DXY3o7/8p4u1HWoWmMCopLlVtUyhD/UxDBFdBAnYyBx/FO1jlJ9b28MRq2qhrX6/dmK9RuU2iIrU4acxUblpJdLkXX4jyW2qjjavKcr5aNojxW4Dt+yNywnsma98NeS3uoA23MH8wqVHxUmCLD7TIljwU4ygPvFvGRenvVHm3L8K2+ra4eC7H/Ni+tkvlfUtX1XG0s6uTLMf09f6n6G2XtEmP069F8tWkcpfTcIob4n0IIruDhZG+wnyxO1sCjXG3OSarvMs5y+wiUL0NKW8RH1skzqSo2LI/N5fGnB7auHs5bFSue83XVGckVzqE+5g5V1Zjv0aqRe35UZYF3qN2mgzmF2ptZ4HN9W109Vmr81mNmVv5w6arqudpY1Km6YwZy/pJvN8rCQuwadV4bxUWG0a46hfDrDbeTvcF+svAl8OjSPPaknGBe0zviwVDGWW4fgfKlwX4k36U7B7SX3War1cacFT2wdflw3qpY8ZyvyoZw19fcIW+N+XaJzgoLU3RvEafDea6y4aR+1LfV1WPZBS4lx0Uqp7BETWPNauo5zwCsNhZ1quqYvp5/p6Yx2nM03+Mz9fVGWVxkWMALxXCzu2EiuIIkVi9rKHwJPN74YocaR4dre8bJN8G8JnOSgqWMs9w+AuVrgz2vqFQ9WsXXal5q2gNb1fVYWw/n9aY2nvNVn3OHqmrMV7YwhWGamvLhRr/r2+rqsSZOh3u1wOrqOcOo2LtVG4s6BXr+P+w5qknv/6T03CKPmwDX9GxRazfKguFGIAJHcAVWL2tAqgs8osJDtWLbITWPj9BpTaJPugnmUmB3fIOtjLPcPgIRTENKK/ZcHHutuoalt+uxth7OWx2rG/P1NXeoumOe2Mu29pfMgOtbX+qxynrLfK3namNRJ3/Pv7CkVDsP5amwuFTtk2IqXW7e6htlwXIjEIEjuELQrl5Gl3hF3gKP8h/XohJDybERio4ItXyCeV2ojQZkMJZxltsPPsFe5wTTkNITey6S4yIU65Dyikq0L6vQa8PS2/VYmw/n9eWcrLr+62PuUCDHrGl9W109Fuz1nLfzN01T2w7mqNQ0dVpidKUPX177S5buvKS95v6wN6AA8sQ6p3WjqKC6EYjAEFx5kefKU4wZ4y7crlKXikuLFWoPlSPU4ZFOkiLDImW3lT1Dori0WK5Sl0LsIYoIjQgobX5xvkpLS1VqlLq3lRglKir5bdnXsEiPtKZpKiI0QiH2EK9pC4oLZJiGHKEOhdpDlVNYokJXsUJiTBUbJQqzH8tDsVGokNBSFbiK3T9mpUapCksKy3pKwo4toVpYUqhSo1ThIeEKCwnzO61hGiooLpAk7cwocd/tyncVKjzUVPukeN14doq6tYjzSBsdfqwhUVRSpBKjRGEhYQoPCZf026Tk4nxJUlRYVIXv05+0vnz3VpSTyr7P4tJihYQUKTS02OOHoNgokClT+YVlz2OJCLMrNNSUy8hXsQole5Q7gNh0MEMbDzRR52YJfpcTb9+nP2mr++6Pb0C2DQuTaTMUYgtTiC1MpmlqX2aeOidHKDFGHrx99+k5WR5BaYnhkqEShShMIfYwRYaH6EBWqdJzstQ0zubXdx9oOSn/7pMbhSoi1OlTWl/KiSV1REmB8lx5igyPrPB91qScWFlHVHfd+1tHfLd7vz74ca92HyqVq8SUI8yutgkOXdUjSWe2SgiaOqK8cf3zwUNqFhshpyNSRcXS/qwCxUfZdVn3eLmMIkXYAysn5d+nL2nbJYXrDxcla8FPGdqVUaCQokIdKS1Vp+YOXd3Ts2F5fDkpv0nkiJVcRr5ssinMXnbcsBC7QkKKVVhSoqJipzu4Mk1DxWah8gpL5QgLcTf2a1pOjv8+a/pbcuL3mZIYqj9clKyPfjqi7Rl5OphtKDS0VJ2aR+jas1p7fD6+XvfdWsTpDxcl/1ZWC3UwW3KE2dW1RbSGnJGo9k2Pvb8v3/3x9W2bsBDJJoXaHLLbQmSapvZm5qhLcpSaxno+H+vE6/60RKf7Wi4qLVSk/Vg5KSotVNM4m1o3cVZaR0SEHCurdV1HJMZIrZvYtXn/sUcYlP8+5BaaOpznUkJ02RL2LqPsuw+zRbp/U38+eEQ2exNNuqy99mWWtZOcjhAlxdpkt9tkmmaV5aR86N/PBzJUVGIoKixSSbGR2pmRp+bxYSo2C2Q3QxVqL8uvzWZTQoy06UC6dhxqqfZJsVWWk6q+eyt+SyqrI1wlxdqSfkR5RYYSnTHuALq634eIkEh3cBkWWqxWjSIVGR7h029JcUmxikuL3duq+u6tqiPKr1FfVHyaHNySn03WofxD7r+f/uppOdOcGv/ReI90Sc8kyZnm1J6sPe5tr3z3ipxpTt06/1aPtG1faCtnmlObMja5t834cYacaU6NeG+ER9our3RR7JOxWndonXvbu+vflTPNqaGzh3qk7f1GbznTnPpyz5fubQu2LJAzzamB/xnokfaiGRfJmebUx9s+llR25+aosUYvbDpP/9n+e4+0/9t1h17YdJ7SS750/5it+nWVnGlO9Xi1h0fa6/53nZxpTr297m33tnXp6+RMc6rDSx080v5+3u/lTHPq9dWvu7dtP7JdzjSnmj+brBc/26p1v2YpPjJcm13Pafa+i/V/W9/Qi59t1fq9Wdqfs1/ONKfin4z3OO7EjyfKmebUE18+4d6WVZQlZ5pTzjSnSoxjdzsf+OwBOdOceuCzB9zbSowSd9qsoiz39ie+fELONKcmfjzR4/3in4yXM82p/Tn73dteWPWCnGlOjVswziNti+dayJnm1PYj293bXl/9upxpTv1+nufn3uGlDnKmObUu/dh3//a6t9X9jWb6Pudv2p9VIPO3VZje3Dpcz204V7/mrVVhsVH2XJaiL/TchvP05q5j+Y0MD9Gig7ep+xvN9PnOz93bP972sZxpTl004yKPPAz8z0A505xasGWBe9uXe76UM82p3m/09kg7dPZQOdOcenf9u+5ta/avkTPNqS6vdPFIO+K9EXKmOTXjxxnubZsyNsmZ5lTbF9q67842jg7X/7Y/oOc2nKvvD81WbmGJtqXnKtxxRI+v7a1mzzX1OO74j8bLmebU01897d52KP+QnGlOnfeflu67k5K07MA/9dyGc7UifaqksruzoaEunfeflnKmOd0NKEmasmyKnGlOTfp0ksf7lZeT+q4jnGlOrdm/xr3NijrimvnXKPbJWHcdIUmf7/y87LOcdp5H2svfvlzONKfmbZrn3lbbdUSL51p4pB23YJycaU69sOoF9zZ/6oiVO/fonJkt9MTaPoqNtKttQrTiI8P17pandM7MFhr3wT3utPVdR5QPxfo883d6bXtf/XTgJ2UWuMp6rFqv0TkzW+i6/13ncdwer/aQM82pVb+ucm+bt2menGlOXf725R5pz5t2npxpTp/riHNmttCZ7Xfo4au66IazW+ryXpl6fG1vjV3oWaaOryPKewv25GzQcxvO1RtbrnGni4kI1U7zCf2kq7Ut71jdc6hoh57bcK6m7xiiDkkx7t65W+ffKmeaU69894o77Z6sPXKmOZX0TJJHHrzVEc40zx6rSZ9OkjPNqSnLpri35Rfnu9P6WkecM7OF/nRxkqYM7aoHhnRW8xZL9Pja3pr64wMeaf2pI4bM6aEn1vbRqAtD9cCQzpoytKuSk7/ROTNb+F1HHF/fvrF5hJ7bcK52565217e5tm/1+NreGvT2pR7HPbEdITXMOiL2yRg99dP5ZatBpucqt7BEn+57Ws9tOFef/fqa7HabOiQ5VWTm6rkN5+q5DefKUFk7IjI8RKuPTlX3N5rpwaV/02mJTvVoFa/WTSIU+2SM1zqifOjful+z9L99l2pe+gCFhWdr075s7Tycp9WH39ZzG87V4r2PepzHjJ2Xafa+i7Uxfat7m7/tCGea09I6Yv3eLN08+w11f6OZLp91iR6ev0GPLdyo9XuzvLYjzvhXLz22cKMenr9Bjy/cpAEzhyj2yRg98+V0d1pv7YjYJ2P17pZjbY7j2xHHs6qOSH42Wb4iuILaNolWcnxk5S/+Ns+0eVxkna1e5io13V3izohQ97j7BKdDR/Jcmrtmb6UTYE8VzeIiPX4Iyj+Jw3kuOULtah4XIdkqDhcocJWqfBTB/qwCrf0lUzsycmVUsVRufSpvQMZHld05OpLrcjcgx/ZtG9Ax2yc5PYLScuXDqdrVYDiQYZjakZGr/Vlld8JMBd9nisoZhqn5a/e5/3ZGhCrEbpPztwfIStKWg7le6xzDMHU0zyVJyi4srvX6qVuLOPfNrlsvPE1ThnbV34Z0VstGUdXsWTvsdptSEpxKSXSqeZznb0n5tVE+8sEwTXdvyaHcokqPF/Jb/ZVdWKLcwhKVGqbyi8pujNhtanALvpQPN+zRKl6No8MtO26rRlHq0SpepyU6Za/ieVK+KK9vI8LKeiEOZBW669shZzS3Krt1yjB17DeuuuvRJt01oIO6t4xTZoFLOYVlvSGJMQ6lNImWI6zy+VgFrlKFBFAOTXnOOSwX7QhRSmK0DMOs8too/22JdlSep7pWHiTuOlR2s8ERGqL4yLJ53i9+ttV93VbmcF6R+yZ624RohdnLQpJPNhzQ+r1ZVe7XENjME1saUHZ2tuLi4rQvY5+aNWlW78MCs49kq3mz5rLb7bUyLFCS1v5yRM9/tkGZ+SVqGR/vHsf9a2am4qNC9ecBXXRmqyaSanfIz8b9GXp84SYlRMe5h70dP4SrwGVTZoFLD1/VWc3jy87zVBoWWJ5228Ei97DJPFe+HKE2nZ7UWEfzS7Uvs0CnJUaoVC41UqHy7I1lmtK29Fw1jbUpPipUuw4Xq7jEJkeYXSmJEbryjER1b9EoKIYFHv995rsKtONQtgqL7Woc9VuAbzMDGvKzM6PEPUk4KSZE4eGmXMV2pWeXqHF0uO68pL1OSwrz+7vfkV7sHm9f4CpSWKih9klxuvHs09zDfmqzjrB6WKBhGNq9b7cSEhLqZFhgcUmJNqcfVm5RqZKcse7hJHU1LHBHRq4e+mC9nBGGoiNC3EN+ys6jWNmFhcouNPT3q8/UaYnOCnXEhn3Zen/Nr9p88KgKi12KCAtTx6aN3at61VcdYeWQH19+S+yyKz09XU0SmshluGSz2bQjvfi44d0FCg+VOjRtpBt6tZUkPf/pzzqUl6tmsZGKjXC65w7FRpoa3C1JG/blaWdG2Qpt4aFS24QwDT0zWX3aHruDHMzDAq0aOlxXdURuUZ52Hc6VqzhU8VEOtW0SLUOlfg8b97eOiAiJUHp6upKSkuQyXDVqR/z061G9+/027cjIU2mpw73K3lU9EtWxWbTXOqJ8/tPhvDxFhkunNYnT059s17pfs9QuMVolKpRUNixQKvtN7ZIcpXsHt5cjLNzncrLnSKGeWLhN8ZHhckYcP9wwQpJN3+w4rPS8PPVtF6+4yEj3sEDTNPXzwQx1S47TI1f1VGiI/9e9lXVEuN2hJxZt1rpfs35rcxTLJrvC7BFl89XSc9U5OUJ/HXy6x1C/4pISPbLgB23Yl6NOTRPcn0+xUSjDLNWuDJfObJWgvw3pLFOG12GBmYcz1aJ5C9nt9lofFpidna3kxGRlZWUpNjZW3hBcVaI8uPLlA6xthmG4Kx27vXY7Gitb+rNDUkxAkzIDnbC69pdMPb5wk9omRFd6R6jUMLXrUJ4eGNK51pcaDnaVfeYb92e7A4jkuAg1d7i0vyhc+7IKFWq3SbayCeOVTYQ+FVYgqkkZr+p4Hqs6nQSfaX3XOXW93HBN6pyT8fsP1InlxpfPRpLX6zHYFxiBNayqc2rjeqyNY1ZX5xzKLdJ3O4+oeVxE2QqFQVqv7MjI1cPzN7iDxBPlFpYos8ClKUO7eiwUE+h+J6rL3yrJv9iABS28ycuTQirpeg0JkSIiPNNVxW6XIiMDS5ufL5WWypafX7bf8YXHZpOiojzTVhUnn5i2oEAyjArJusWHqkv/NtpVqGM/ZlF22WVWne/oaHcDaffewyouKpEjzK7TEqN19Zkt1DU5ziOtW2GhVFqxuzi2tEixRpEKihxyRpbdYQgpdsleWjakxFVYqljDpdjSomN5ioo6NgyuqEgq8bKKVGTksc/R5ZKKi61JGxFxrKz4k7a4uCx9VRwOKTS00rR2SadF2aSo31bTMkrdwzvmfrdLe/YdUaa9UPlGhM5KcOpIXrH2ZxWoQ2K0jFBTxm9Dn04PjdDufUf14ddb1eWyThUbL+HhUthv71FaWvbdVSUsrCy9v2kNo6xcWpE2NLTsc5PKron8Y3Mjysv47sN5yi0qUXR0hNomNy475xPSVnDCdW/k5Gr+11uUdyRbnROjZZNLckkRkuLiw/RzpuvYqk4FXo5b0zrC1+veh7SGYWrnoVwd+uWQ8gtMta3q4dPHX8tV1CeVpj3uut+wL0uvLtuuo3kuNYuNVITTrmz7sccG/LlvK3Vt5mWopj/XvZe05XVOabapiIgQlYRHyPztug8pLpYrr7BinaPflhP/fo97aE9oSYnsrgJFSIqPtWtHRpbnNVUPdURlaQ17SFnAkluoWFup2lQVsBx/3ZeUlH1uVQkPP5bf0lIZeflVXhuxjRzafLRIc9fs1d8uO93jenQ6Qo/lJy9P9rDjntdkGNJx15FhmJ77NYuXPcJxXNrA6ogapfWnbVCX7QgL6wg3f6776tIen98q2gaVHve4tIZhVihzxbZI9yp7u/Yeqfo3TqqyjugWH6o/n1e2gMiOjCxlFhuyRUUeWw0wMdL791FJO+LEOqdcSZhDZkiIIkJD1CE+XO3jw5SRWfaejjC7eiU6NfTMZHWNDy0771qqI9xpq7nuc3IK3AtF2UtLFFLsedxYw1Rmbr7yjmRJ8Q53fZKTVyTl5inWYSqksGJenLZQHSz+bUVQb+0Iw/A8l9puR3j7nk9kooKsrCxTkplV9pFW/HfFFZ47REVVnk4yzX79PNMmJFSd9uyzPdO2aVN12i5dPNN26VJ12jZtPNOefXbVaRMSPNP261d12qgoc92vmeZtM78zr/vXV+b6My+oOu2JRe36672mvemfn5qT3ltr3vf+T+b3/Yd6P256+rHj3nGH97Q7dx5Le8893tOuX38s7cMPe0/77bfH0j71lPe0S5ceS/vyy97TLlhwLO306d7T/u9/7qSls9/1mvZ/qY+Z973/k3nf+z+Z0++vJg8vv3wsD0uXek/71FPH0n77rfe0Dz98LO369d7T3nPPsbQ7d3pPe8cdZmmpYW5PzzHX/bDVe9oxY44dNzfXe9rrr/csw17SbjrrQnP822vMUf9eZW5Pz2kQdcS6XzPNR+avN3//75Xm7rYdq07rZx3h4YorvH5u973/kznpvbXmdf/6ytxw/iDv30du7rHjjhnjPa0fdcQ/pi5yXxvLhno/7qQps8zxb68x73v/J3PJDbd7z0MQ1BG7X51hPjJ/vTnq36vMZ//wd+/HnT792HEXLPCe9uWXzdLSUnP//v1m6WefeU278Pd3u6+NXz9e5v24ftQRX10z1lz3a2ZZWh/qCLf0dO9pa6mOoB3x27+oqGNlp7S02jrCQzXtiAffXuW+llddeJX34/pRR+z+fr1ZWmqUpbWwHfHyk7Pc9d8nY//i/bh10I4w//c/r2kPvjjVHPXvVeb4t9f41Y7YO+8jr2nn/e7Px347q2lH5PzlL2XlxjQtb0e4/VZHZEmmJDMrK8usDj1XpyBTqvBwxkCPc/ykzEAmdlal0W8LNjSPi5RpWnbYU8apPHTmcJ5LLy/cWLay4JHDmlZP+ajN5/FYzVVqeAwnDQupv7WOypc4zi2qn88tv6hUpYapAlepMvO93OGV5CoxFBkeHBPLfbFo3X6tM7LUPC5SibGO6neoJeXXRp7LSw+FnzJyijTjs61lQ6YsOypOFla2T1o3iZZq4Tc2v6hU29Jz1Tg6XN2DYNhfdRKiHWqfWLaMv+lHQ61ZbITX17MLi4+tCLqrhpmsJ8y5qoR7XOW+fZWPq6zD7nyjtFQZGRlKTEz0HFMaYHf++r1Z+mDlNu1Mz3GPca8whM/H7vydGbl66LNd7nGzoa4i2Y57JldeYamyCl164IrOSkl0VtqdX2Fox29DQtYfLdb7vy0SUJpfqKgQU+3Ku8STT6h0TtFhgV7TlpTIKChwl53dh/P1+EebFBcRruiIEJWGhskILeuit5eWqDCnQHsz85XSJFoZeUUeZWNo7xR1a5tQNv8hPVt5Wbmew3eOV8/DAjfsy9IrX+xSuqtshcvIMLtKc/J0ILtAjaLD9af+7TzLTw2G/OzcddDjMz2eaQ9RphFybNx4lJcf4noe8mMYptI+/lk/ZJQ/tFJKKDqiLDNCpintyMhTtxZxundQR/1yNL9sOGXjuGPzXwIYFrju10w9tXizWjeJ8mj0FEeU5bfUMLV3/xHdN6iDureMr/SwRkSkdh3JLxvCbCtV2zhH1TcVfKgjNuzL0gc/7tXPmSUqLC17dlDHRg5d0z2pYp2jsvrv4SU7FBcdUbbCYHGx7Mc9c6VC/VePdYRhmPrH4k368WCBTmseL5vN5h7GY5qm+zuedPyQKT+HBRohIWXzH5o00e69R6q8NoyQMGWVli1MNGVIJ50W4+Ue7wnXvZGXr38s3qQNe7N1WmK0xwOIS+2h2ny0SGe0jNffLu8oe5GXuodhgWWCZFigERl5bO6MyxXQsMCdGbkVylyxI9J93Rfm5Csnr+DY9XiiemhHlNc5OzLyVFRsyBYVofbNjhtuGATtiOqu+/Xp+Xrxs63KzM5Xq6hQRYTbVegyKv7mnjC9YMOOg5p6/LDw4/aLjY1S6uAuZfPKvLQjDMNQ+tGjSmrZsqx9XMvDArOzsxWX7NuCFvRceRMd7Xkhe0vnzzF9FRUlGYbMvLyy/bxN2Du+0quCx8TM+Dg1/m2S5JpDBdq1cp/uGhBdcZLk8ZX0CbKPFHs+mDXc805oSLipbFeeskMcFc87IsL7ZPaW8eqSHOf/ZGaH49gFUZ3w8GMXWn2lDQs7VuFYmTY0VIqOdpedNtFOtWp1SOt+zVL7uMgTGiUh2pRTotySEJXkmxXLxhe7NCSzSD/+kunfwgMhIdWW94AmrNvtlR7XMEy993NZYHX8k+1D4mPUKq7syfbv/5ypzu2aV/4eNptf12eb1klVfqamaWp/em7Zs4f8vcvpbx1Rw7S7MnL1c1apmrvPwVSJI0LFipJkU+Mkh75Nz9ekxduVnltUs4UnfmtMRjc2JWe0su2VT2gucJXKHhWp6MZxlX4eZXXHpsAWwqiijujaIVqd2zX3uTy2iYxSu2a/ff8Op0rDwlQaVv7AW1O7s3J1RqsktWmdVPH7r+M6YldGrjZlG2raOMZdTo2QUBkhZZ994ySHNma7tKtQOi2xkvIXGnqswVWV8sZzSEj118aR366NpFjfrw27XbsKpU3ZhhonNVZJJeWmeZxdW9NztOtogdeJ8B78ue79rCOCIq0FdUSlvLQN/E57fOAV4b1Xw8NxadtERnktc7/kl1Z9PZ6ojtoR1dY5wdCOqOa6L5/n7W7L5RpyhIWoY7vmuvasFupaWX0cEqKuHZJ1e1R0lfu5F7Q5UlB1fWwYnjcaqmgbVMqftOXXvbeg/wQEV6cIw/B8rkJ5xVM+2XNbeu6xyfc+/tiVPwiywFVaZQPJEWZ3P4/leBVW4Ikra8yXT2YvXw3H5x/Iehbsq1qVPyhy79EC93DL8hWI9mXmu3sOKysbP/2aqWc/2aKkGIfX78pfVq8Ut+twnvvcjv9hlY4NNduanqNdh/MsKVfePtPyVZ0awvN4cgpLPG6SnKiwpFQ7D+WpsLi0bOUqC77/8ucclQcmFRrfWQXHAtMT+Fp3BKL8eUS+pm0o339137HVQ1hr67Op6/NAw9GQrsfj+VPnBKtuLeLUpXms320gb/sFw0qyNUFwdYqojYZnoA2k2gj06lNDqQROvMN0MLssr20TnDJMqWWjqAplQyoLko/mu9S9Raw7iK7pd1UbDeT6aHhV9Zm6V5Kqxe/fqoDe200S0zS17WCOSk1TpyVGW/b9B9oQCra6oz6/f3/U5EZYoGrjs6mP80DD0VCux5ORtyDR229VZfvV5g20ukINdIqojYZnoA2kuu5hqE0NrRKo7E5RVkGx0j76udKJ+TmFJcovLlWY3a6SUs+x+IF+V7XVQK6vhlegd+1qwsqAvuJNkmOvZRcW63CeSwnRDsVGeA4lqem1GkhDKBjrjuq+/2Do1a5JT2FNWH1t1Nd5oOGoj/oYVfP3t8qf9kEwI7g6RdRWwzOQBtLJMrQj2O6i++rEO0U7MnKrLBvFpYaKS0yFhdgUFlpxzl/5d5VVUKwdGbk+/ZjVVgO5thte/t59qy1WB/Qn3iRJjotQrEPKKyrRzow82e02dUhySpX0atb0WvW3IRSsdUdV33+w9GrX55ApK6+Nhjr0C3XrZBhqdzII5LfKn/ZB2yZ+zBGsYwRXp4jabHj620Cq76EdVt1JDsa76IHwVjZCQ2wqMQzFRToU46j8uyouNfTflbt9XuzAqgZyZd9jbTW8gqWRXFsB/fE3Sban5yikqFCZhtQlOU4RYSFyhFX+XVlxrfrTEKrvusMfwdarfbIMmTpZzgM4mQX6WxWsN9D8Vf+/QKgTtX3Hz58GUn0O7bCykXyyVALeysbBrELFR4UpMtxe4flopmlqe0aOcotKFWK3VdmAPDHwjnaE1LiB7O17tLrhFUyN5NoM6Mtvkuw8lKP0g+lKapqkNo2denzRpqAZhtVQhoUFa6/2yTJk6mQ5D6Cu1dUw5UB/qxrSDTRvgjt3CFhlF1Cw3PGrr6EdVjeST5ZKQKr6bnCPVo3Uo1WcFv603+9VBrel5+qNL3aocXS4tmUcC4LaJUarUVS49mUWBNRA9uV7fHBIF0t+QIKtkexrQO/PMM3j2e02pSQ4FW3kKynBKbvdHlTDsBrKsLBg7tU+WYZMnSznAdSVuhyBEejNZ/9uoAXvY3qDv9UHv1V3AdX1Hb9gCPRqo5HcUO6i+8pb2WiX6PRrlUGbzaao8FCt2HZIzeMjlNLE6Q6C1u/NVqjdptAQm98NZJ+/xyGxATW8TiyrhmnWayP5xPz40uvn7zDN6vhyrXq7G2r1ndL6uknkz3mcLL3aAE4OvtyUtLJtGOjNZ39uoBkGwRXqSLA9PypYAr3auJPcUO6i+6Oqu8H+rjJYHlwWlRhKjo2odAnvFvGR7l4tXxvItdkjUFlZjYsMc19LlfGlkRxocFFZfqrr9fNlmGagAVYgzyORVCt3Suv6JpG/d3xPpl5tAA2bLzclKxtlUpO6uiY3n4NllFVNULOfRIJtCFMwBXq1NZzqZKgEfOXPKoM5hSU6mu9SRJhd4ScshlAeBB3Jd+nOAe1lt9l8/rxrq0egqrK681CuDmQVqkl0uFo0qrgyUXWN5ECHYVSVH2+9fr4M06zJ9e/v80g27cuWbFJJqVkrc9XqalhYIMOJT7ZebQANV3U3JasaZVKTurqmN58b+rxKgquTSG2P8/fnDnywBXq+3EmubjhVVeff0CuBQHlrQLpKSlVYbKh5XESlqwyWB0F5RaXq0Sre5/esjR4Bb2W1a3Ks0nOKtPlAjpLjImSzH1uOvrpGcqBz/Hy5dirr9atumKbVQxi95bNdeLSWbs6QTdLFHRPdn1t9L+hQnu/arsdOxl5tAA2Tt5uSvowyCbSurunN54Y8r5Lg6iRSm+P8/b0DH2wTuqu7k1zdcKohZzTXj79kVnn+DbkSCJT3BmShHKF2NY+LqPT5SIEOi6qNHgFvZdVut6tTs1ht2Jel9fuzy+7q+dBIrsnNBV+uncp6/bwN05RqvtiFP59bblGpDLNsPHyuq1QxEceC0vpc0KEu67FTqVcbQN3y5yaRt5uSvowyqUldfarefCa4OonU1jj/QO7A1/eEbn+egVTdcKqffs3Us59sUVKMo96X4g42VTUge7dtrMN5Lu3LLJBpmpYNi6qNHoHqymqzuAgdzi1SSpNoZRa4fGok16RR7uu1c2Kvn7dhmpL1i114y2dxqVH2H1MqLjGqPIe6vP437s+u83rsVG1YAKg9/t4ksmKUSU1uyp2KN58Jrk4itXFXP9A78PU5odvfZyB5G05Vntej+S51bxEbUJd5XT1Xor5U1YAsb8xaPSzK6h4BX8pqY2e4/jywg8/zw2rSKA/02qlp76yVjyIIC/mtp8omhYXaK+xb19d/u8RoHckrrpd67FRsWACoHYGu+leTUSZWr0B7KiC4OonUxl39QO/A19eE7kCegeRtOFVOYYnyi0sVZrerpNRz2U9fusyru8N0sgRelTUga3NYlJU9Ar6W1dMSnD4fvyaN8kCvHW/Xvz+LXfjKWz6djhDZbTbZJDlPuK78uf79vT6quv6/33VU+7MK1TU5tkHUYwBwopqu+hfIKJPaWoH2ZEdwdZKxukEb6B34+pjQHegzkLwNpyouNVRcYiosxFbpHXhvPRDVBXrVzeM6GdTmsCiregRqo6zWpFFek/xUdf37s9hF2yYVV0UM5HM7LSFasknbMvIC+kz9Hfri7fpvHhehXYfztT+rUC3iIyvcoQ2megwAKmPFqn8n3lz2NsqktlegPZkRXJ2ErGzQ1uQOfF1P6K6NXrbQEJtKDENxkY5KxyNXdf7VBXqn0jyuhjAsyuqyasUytIHmx99nkkmBz4GqLp+SAjqHQOZ5erv+w0NDFBFm19F8l3KKShQTEebxejDVYwBQGUtW/Tvh5rJkzU25YP+Nr2sEVycpqxq0NR0WU5cTumujl+1gVqHio8IUGW6XKen4XHs7f28NPanm87hgPavLak0b5TXJjz/PJJNqNgequnz6ew6BzvP0dv3HRISqUVS49mcVylVcKh0XXAVbPQYAlanNVf/q8qbcqYDgCl5ZMSymrnouaqOXrUerRurRKk4Lf9rv1/l7a+jVdB4Xao/VZbWmjfL6uUliVn2gAPLp7zkE2gPt7fp3L2Gf59K+7EI5wkKDth4DgMpYseqft0CoLm/Knez4RFCthjIspjZ72dolOv06f28NvZrM40LDEwyNcn9ukhiG/8GVlQLtga7u+s93leiC9gkVHr4cbPUYAFSmrp8tyYI+gSO4gk+CcViMP8+yqundaX/PvzbmcQE10VBukgTaA+1LAHnbRacFXT0GAL6qy2dLsqBP4Gi9wWfBcAe+nL/PsrKiAenP+dfGPC6gpoLxJsmJanK31NcAMljqMQDwV10+W7Kh3JQLNgRXaHACeZZVfTQgrZ7HBVghmG6SVMaKlRaDPYAEgJqoy2dLUqf6j+AKDUqgz7KqL1bO4wJOFTVtJAR7AAkAtaG2AiHqVP8QXKFBCXQlsfpk1Twu4FTC9QEA/iMQqn8EV2hQAl1JLFhRCQJV4/oAADQ0FdeBBoLY8SuJVYaV9gAAAFBfCK7QoJSvJLY/q2y50eOVryTWISmGlfYAAABQ5wiu0KCUryTWODpc29JzlVtYolLDVG5hibal57LSHgAAAOoNwRUanPKVxLq3jFNmgUu7DuUps8ClM1rG664BHVhpDwAAAPWCiSlokFhJDAAAAMGmXnuu0tLS1Lt3b8XExCgpKUnDhg3T5s2bq90vMzNTqampat68uRwOh04//XR99NFH7tdLS0v14IMPKiUlRZGRkWrXrp0ee+yxCnN00LCVryTWo1W8Tkt0ElgBAACgXtVrz9Xy5cuVmpqq3r17q6SkRPfff78GDRqkjRs3Kjq68gUJXC6XLr30UiUlJem9995TixYttHv3bsXHx7vTPPnkk5o6dapmzpyprl276vvvv9fNN9+suLg43XXXXXV0dgAAAABOJfUaXC1evNjj7xkzZigpKUmrV6/WRRddVOk+b775po4cOaKvv/5aYWFhkqS2bdt6pPn666919dVXa8iQIe7X33nnHX377bfWnwQAAAAAKMjmXGVlZUmSGjduXGWa+fPn67zzzlNqaqo++OADJSYm6qabbtKkSZMUElL2YNnzzz9fr7/+urZs2aLTTz9da9eu1YoVK/Tcc89VesyioiIVFRW5/87OzpYkGYYhwzCsOr2AGIYh0zTrPR9oeCg7CATlBoGg3CBQlB0Eoq7LjT/vEzTBlWEYmjBhgvr27atu3bpVmW7Hjh36/PPPNXLkSH300Ufatm2b7rjjDhUXF+vhhx+WJN13333Kzs5Wp06dFBISotLSUj3++OMaOXJkpcdMS0vTlClTKmzPyMhQYWGhNScYIMMwlJWVJdM0ZbezuCN8R9lBICg3CATlBoGi7CAQdV1ucnJyfE4bNMFVamqq1q9frxUrVnhNZxiGkpKS9PrrryskJES9evXS3r179fTTT7uDq//97396++23NWvWLHXt2lU//vijJkyYoOTkZI0ZM6bCMSdPnqyJEye6/87OzlarVq2UmJio2NhYa0/UT4ZhyGazKTExkUoHfqHsIBCUGwSCcoNAUXYQiLouNxERET6nDYrgavz48VqwYIG++OILtWzZ0mva5s2bKywszD0EUJI6d+6sAwcOyOVyKTw8XPfee6/uu+8+jRgxQpLUvXt37d69W2lpaZUGVw6HQw6Ho8J2u90eFBe6zWYLmrygYaHsIBCUGwSCcoNAUXYQiLosN/68R72WYtM0NX78eM2bN0+ff/65UlJSqt2nb9++2rZt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean: 2.6908 ms\n", + "Median: 2.6896 ms\n", + "Std: 0.0106 ms\n", + "Min: 2.6827 ms\n", + "Max: 2.7886 ms\n" + ] + } + ], + "source": [ + "# Collect 100 samples\n", + "timings = []\n", + "for i in range(100):\n", + " timings.append(benchmark_events(simple_mm, a, b))\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.scatter(range(100), timings, alpha=0.6)\n", + "plt.axhline(y=np.median(timings), color='r', linestyle='--', label=f'Median: {np.median(timings):.4f} ms')\n", + "plt.axhline(y=np.mean(timings), color='g', linestyle=':', label=f'Mean: {np.mean(timings):.4f} ms')\n", + "plt.title(\"Benchmarking Jitter & Cold Start\")\n", + "plt.ylabel(\"Time (ms)\")\n", + "plt.xlabel(\"Run Index\")\n", + "plt.legend()\n", + "plt.grid(True, alpha=0.3)\n", + "plt.show()\n", + "\n", + "print(f\"Mean: {np.mean(timings):.4f} ms\")\n", + "print(f\"Median: {np.median(timings):.4f} ms\")\n", + "print(f\"Std: {np.std(timings):.4f} ms\")\n", + "print(f\"Min: {np.min(timings):.4f} ms\")\n", + "print(f\"Max: {np.max(timings):.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hX_-OpftzX2i" + }, + "source": [ + "You will see a massive dot at $x=0$ (the cold start), followed by a cloud of dots hovering around the \"true\" time. This visualizes why we need **Warmup** (to skip $x=0$) and **Statistics** (to handle the cloud).\n", + "\n", + "Notice how the **Mean** is pulled upward by the outliers, while the **Median** represents the typical case more accurately. When possible, we should use the **Median** as our final metric.\n", + "\n", + "### Attempt 6: The \"Robust\" Harness (Flushing Cache)\n", + "\n", + "Modern GPUs have large L2 caches (40MB-192MB depending on architecture). If your data fits in the cache, subsequent iterations in your loop will skip the slow VRAM access, artificially inflating your speed. In production, data usually streams in from VRAM, so this \"hot cache\" benchmark is misleading.\n", + "\n", + "**The Fix:**\n", + "We must **flush the L2 cache** between *every single sample*. We do this by writing to a tensor large enough to completely evict the cache contents. KernelBench uses a ~256MB tensor to safely cover all GPU architectures, including the largest caches (e.g., Blackwell at ~192MB)." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.352179Z", + "iopub.status.busy": "2025-12-17T20:56:48.352053Z", + "iopub.status.idle": "2025-12-17T20:56:48.354842Z", + "shell.execute_reply": "2025-12-17T20:56:48.354225Z" + }, + "id": "Kj5azcpxzX2j" + }, + "outputs": [], + "source": [ + "# KernelBench provides utilities to flush the L2 cache\n", + "# This is important for cold cache measurements that simulate real-world inference\n", + "\n", + "def clear_l2_cache(device=DEVICE):\n", + " \"\"\"Flush L2 cache by writing to a large tensor.\n", + " \n", + " L2 cache sizes vary by GPU, so we use 256MB to cover all cases.\n", + " \"\"\"\n", + " dummy = torch.empty((32, 1024, 1024), dtype=torch.int64, device=device) # 256MB\n", + " dummy.fill_(1901) # Force write to thrash cache\n", + " del dummy\n", + "\n", + "# KernelBench also provides clear_l2_cache_triton() for cross-platform support\n", + "# (works on both NVIDIA and AMD GPUs via Triton's device abstraction)\n", + "from src.timing import clear_l2_cache_triton" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Why does flushing the cache matter?\n", + "\n", + "Let's see the cache effect in action. We'll benchmark the same operation twice:\n", + "1. **Without** cache flushing between runs (data stays in L2 cache)\n", + "2. **With** cache flushing between runs (data must be fetched from VRAM each time)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.357339Z", + "iopub.status.busy": "2025-12-17T20:56:48.357229Z", + "iopub.status.idle": "2025-12-17T20:56:48.403430Z", + "shell.execute_reply": "2025-12-17T20:56:48.402471Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Without cache flushing (warm cache):\n", + "\n", + "With cache flushing (cold cache):\n", + "\n", + "Warm cache median: 0.0859 ms\n", + "Cold cache median: 0.0922 ms\n", + "Difference: 0.0063 ms (7.3% slower with cold cache)\n", + "\n", + "Without cache flushing, you measure artificially fast times!\n" + ] + } + ], + "source": [ + "# Demonstrate why L2 cache flushing matters\n", + "# Use a smaller matrix so the effect is visible (data fits in cache)\n", + "N_SMALL = 512\n", + "a_small, b_small = get_data(N_SMALL)\n", + "\n", + "# do warmup runs\n", + "for _ in range(10):\n", + " clear_l2_cache(device=DEVICE)\n", + " benchmark_events(simple_mm, a_small, b_small)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + "\n", + "# Benchmark WITHOUT cache flushing (warm cache - unrealistic)\n", + "print(\"Without cache flushing (warm cache):\")\n", + "times_warm = []\n", + "for i in range(10):\n", + " t = benchmark_events(simple_mm, a_small, b_small)\n", + " times_warm.append(t)\n", + "\n", + "# Benchmark WITH cache flushing (cold cache - realistic)\n", + "print(\"\\nWith cache flushing (cold cache):\")\n", + "times_cold = []\n", + "for i in range(10):\n", + " clear_l2_cache(device=DEVICE) # Flush cache before each measurement\n", + " t = benchmark_events(simple_mm, a_small, b_small)\n", + " times_cold.append(t)\n", + "\n", + "print(f\"\\nWarm cache median: {np.median(times_warm):.4f} ms\")\n", + "print(f\"Cold cache median: {np.median(times_cold):.4f} ms\")\n", + "print(f\"Difference: {np.median(times_cold) - np.median(times_warm):.4f} ms ({(np.median(times_cold)/np.median(times_warm) - 1)*100:.1f}% slower with cold cache)\")\n", + "print(\"\\nWithout cache flushing, you measure artificially fast times!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.405781Z", + "iopub.status.busy": "2025-12-17T20:56:48.405659Z", + "iopub.status.idle": "2025-12-17T20:56:48.489739Z", + "shell.execute_reply": "2025-12-17T20:56:48.488860Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "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R6N79+4PtK2SziHlyQ3YLZCIiIhqNR8fOXFauhTYu1ceFVCbXLm6AoMGARERTKyqgwEDBuCff/7BtWvXHvg+H6r6rly5gtdff/2BEytTYnJFREREtZ6PD7BkCZCYKA+3npUlD14RFGT6roBUuaZNm2bpIpCZaAcaqUqYXBERERH9R6023TxWRFT7VI3OqERERERERNUckysiIiKqMThOFxFVhKnOHUyuiIiIqNqzsbEBIA9FTURUXtpzh/ZcUlG854qIiIiqPSsrK7i7uyMlJQUA4OjoaHDYaw6LTebGOle1CSGQk5ODlJQUuLu7w8rK6oG2x+SKiIiIagRvb28A0CVYhgghIEkSlEolL3TJLFjnqgd3d3fdOeRBMLkiIiKiGkGhUMDHxweenp4oKCgwGCNJEm7evIl69epVmUlmqWZjnav6bGxsHrjFSovJFREREdUoVlZWRi+UJEmCjY0N7O3teaFLZsE6V7vwEyYiIiIiIjIBJldEREREREQmwOSKiIiIiIjIBJhcERERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkioiIiIiIyASYXBEREREREZkAkysiIiIiIiITYHJFRERERERkAkyuiIiIiIiITKBKJFcrV66EWq2Gvb09unbtiiNHjhiNjY+Px1NPPQW1Wg2FQoHly5cXi1m1ahXatm0LV1dXuLq6IigoCL///nslHgEREREREdV2Fk+uNm3ahIiICERGRuLEiRNo164dQkNDkZKSYjA+JycH/v7+WLx4Mby9vQ3GNGzYEIsXL8bx48dx7NgxPProoxg8eDDi4+Mr81CIiIiIiKgWs3hytXTpUkyYMAHh4eEICAjA6tWr4ejoiM8++8xgfOfOnbFkyRI888wzsLOzMxgzcOBA9O/fH82aNUPz5s3x9ttvw9nZGYcPH67MQyEiIiIiolrM2pI712g0OH78OGbPnq1bplQqERISgtjYWJPso6ioCJs3b0Z2djaCgoIMxuTn5yM/P1/3PDMzEwAgSRIkSTJJOSpKkiQIISxeDqo9WOfI3FjnyJxY38jcWOeqv/J8dhZNrtLS0lBUVAQvLy+95V5eXjh37twDbfvUqVMICgpCXl4enJ2d8eOPPyIgIMBg7KJFizB//vxiy1NTU5GXl/dA5XhQkiQhIyMDQggolRZvaKRagHWOzI11jsyJ9Y3MjXWu+rtz506ZYy2aXFWmhx56CHFxccjIyMB3332HsLAw7N2712CCNXv2bEREROieZ2ZmwtfXFyqVCq6uruYsdjGSJEGhUEClUvELSWbBOkfmxjpH5sT6RubGOlf92dvblznWosmVh4cHrKyskJycrLc8OTnZ6GAVZWVra4umTZsCADp27IijR4/igw8+wJo1a4rF2tnZGbx/S6lUVokvgUKhqDJlodqBdY7MjXWOzIn1jcyNda56K8/nZtFP2NbWFh07dkRMTIxumSRJiImJMXp/VEVJkqR3XxUREREREZEpWbxbYEREBMLCwtCpUyd06dIFy5cvR3Z2NsLDwwEAY8aMQYMGDbBo0SIA8iAYZ86c0f1+7do1xMXFwdnZWddSNXv2bPTr1w+NGjXCnTt3EB0djT179mD79u2WOUgiIiIiIqrxLJ5cjRgxAqmpqZg7dy5u3LiBwMBAbNu2TTfIxZUrV/Sa4q5fv4727dvrnkdFRSEqKgrBwcHYs2cPACAlJQVjxoxBUlIS3Nzc0LZtW2zfvh2PP/64WY+NiIiIiIhqD4UQQli6EFVNZmYm3NzckJGRUSUGtEhJSYGnpyf76ZJZsM6RubHOkTmxvpG5sc5Vf+XJDfgJExERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkioiIiIiIyASYXBEREREREZkAkysiIiIiIiITYHJFRERERERkAkyuiIiIiIiITIDJFRERERERkQkwuSIiIiIiIjIBJldEREREREQmwOSKiIiIiIjIBJhcERERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMr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KhEREQgLC0OnTp3QpUsXLF++HNnZ2QgPDwcAjBkzBg0aNMCiRYsAyINgnDlzRvf7tWvXEBcXB2dnZzRt2hQAkJWVhQsXLuj2cenSJcTFxaFu3bpo1KiRmY+QiIiIiIhqC4smVyNGjEBqairmzp2LGzduIDAwENu2bdMNcnHlyhW9Zrjr16+jffv2uudRUVGIiopCcHAw9uzZAwA4duwYevfurYvR3ksVFhaGDRs2VP5BERERERFRraQQQghLF6KqyczMhJubGzIyMqrEgBYpKSnw9PRkP10yC9Y5MjfWOTIn1jcyN9a56q88ucEDfcIXLlzA9u3bdZMLM08jIiIiIqLaqkLJ1c2bNxESEoLmzZujf//+SEpKAgA8//zzmDFjhkkLSEREREREVB1UKLmaPn06rK2tceXKFTg6OuqWjxgxAtu2bTNZ4YiIiIiIiKqLCg1osWPHDmzfvh0NGzbUW96sWTNcvnzZJAUjIiIiIiKqTirUcpWdna3XYqV169Ytg5PxEhERERER1XQVSq569OiBL774QvdcoVBAkiS89957esOgExERERER1RYV6hb43nvv4bHHHsOxY8eg0Wjw6quvIj4+Hrdu3cLBgwdNXUYiIiIiIqIqr0ItV61bt8b58+fxyCOPYPDgwcjOzsaTTz6Jv/76C02aNDF1GYmIiIiIiKq8CrVcAYCbmxvmzJljyrIQERERERFVWxVOrvLy8vC///0PKSkpkCRJb92gQYMeuGBERERERETVSYWSq23btmHMmDFIS0srtk6hUKCoqOiBC0ZERERERFSdVOieqylTpmDYsGFISkqCJEl6DyZWRERERERUG1UouUpOTkZERAS8vLxMXR4iIiIiIqJqqULJ1dNPP409e/aYuChERERERETVV4XuuVqxYgWGDRuG/fv3o02bNrCxsdFbP3XqVJMUjoiIiIiIqLqoUHL1zTffYMeOHbC3t8eePXugUCh06xQKBZMrIiIiIiKqdSqUXM2ZMwfz58/Ha6+9BqWyQj0LiYiIiIiIapQKZUYajQYjRoxgYkVERERERPSfCmVHYWFh2LRpk6nLQkREREREVG1VqFtgUVER3nvvPWzfvh1t27YtNqDF0qVLTVI4IiIiIiKi6qJCydWpU6fQvn17AMDp06f11t07uAUREREREVFtUaHkavfu3aYuBxERERERUbXGESmI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qgru3LkDNze3EmMUoiwpWC0jSRKuX78OFxcXKBQKi5YlMzMTvr6+uHr1KlxdXS1aFqodWOfI3FjnyJxY38jcWOeqPyEE7ty5g/r165fa+siWKwOUSiUaNmxo6WLocXV15ReSzIp1jsyNdY7MifWNzI11rnorrcVKix0/iYiIiIiITIDJFRERERERkQkwuari7OzsEBkZCTs7O0sXhWoJ1jkyN9Y5MifWNzI31rnahQNaEBERERERmQBbroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkqopbuXIl1Go17O3t0bVrVxw5csTSRaIaatGiRejcuTNcXFzg6emJIUOG4O+//7Z0saiWWLx4MRQKBaZNm2bpolANdu3aNTz33HOoV68eHBwc0KZNGxw7dszSxaIaqKioCG+++SYaN24MBwcHNGnSBAsXLgTHkav5mFxVYZs2bUJERAQiIyNx4sQJtGvXDqGhoUhJSbF00agG2rt3LyZNmoTDhw9j586dKCgoQJ8+fZCdnW3polENd/ToUaxZswZt27a1dFGoBrt9+za6d+8OGxsb/P777zhz5gzef/991KlTx9JFoxro3XffxapVq7BixQqcPXsW7777Lt577z189NFHli4aVTIOxV6Fde3aFZ07d8aKFSsAAJIkwdfXF1OmTMFrr71m4dJRTZeamgpPT0/s3bsXPXv2tHRxqIbKyspChw4d8PHHH+Ott95CYGAgli9fbuliUQ302muv4eDBg9i/f7+li0K1wBNPPAEvLy98+umnumVPPfUUHBwc8NVXX1mwZFTZ2HJVRWk0Ghw/fhwhISG6ZUqlEiEhIYiNjbVgyai2yMjIAADUrVvXwiWhmmzSpEkYMGCA3rmOqDJs3boVnTp1wrBhw+Dp6Yn27dtj3bp1li4W1VDdunVDTEwMzp8/DwA4efIkDhw4gH79+lm4ZFTZrC1dADIsLS0NRUVF8PLy0lvu5eWFc+fOWahUVFtIkoRp06ahe/fuaN26taWLQzXUxo0bceLECRw9etTSRaFa4OLFi1i1ahUiIiLw+uuv4+jRo5g6dSpsbW0RFhZm6eJRDfPaa68hMzMTLVq0gJWVFYqKivD2229j1KhRli4aVTImV0RUzKRJk3D69GkcOHDA0kWhGurq1at45ZVXsHPnTtjb21u6OFQLSJKETp064Z133gEAtG/fHqdPn8bq1auZXJHJffvtt/j6668RHR2NVq1aIS4uDtOmTUP9+vVZ32o4JldVlIeHB6ysrJCcnKy3PDk5Gd7e3hYqFdUGkydPxi+//IJ9+/ahYcOGli4O1VDHjx9HSkoKOnTooFtWVFSEffv2YcWKFcjPz4eVlZUFS0g1jY+PDwICAvSWtWzZEt9//72FSkQ12axZs/Daa6/hmWeeAQC0adMGly9fxqJFi5hc1XC856qKsrW1RceOHRETE6NbJkkSYmJiEBQUZMGSUU0lhMDkyZPx448/YteuXWjcuLGli0Q12GOPPYZTp04hLi5O9+jUqRNGjRqFuLg4JlZkct27dy82vcT58+fh5+dnoRJRTZaTkwOlUv8y28rKCpIkWahEZC5suarCIiIiEBYWhk6dOqFLly5Yvnw5srOzER4ebumiUQ00adIkREdH46effoKLiwtu3LgBAHBzc4ODg4OFS0c1jYuLS7H7+ZycnFCvXj3e50eVYvr06ejWrRveeecdDB8+HEeOHMHatWuxdu1aSxeNaqCBAwfi7bffRqNGjdCqVSv89ddfWLp0KcaNG2fpolEl41DsVdyKFSuwZMkS3Lhx4//bubuQpvs+juOfvw9rtBUFlSZUk1b0gMtFIB1lEj3YCiMSVsq0MMg6sOgBS8OgBkliRBGZuoOo06Akig4WSBKWmNOKilEdhSNGD5MCmV0HF9cudnvdB7vuv8663y8Y7OH3++7zP/yw3/4qLCzUpUuXVFRUlO5Y+A0ZhvGP7wcCAVVVVU1uGPxfKi4u5lbsmFBdXV2qr6/X27dvlZ+fryNHjqimpibdsfAb+vbtmxobG3X79m1FIhHl5eXJ6/Xq9OnTslgs6Y6HCUS5AgAAAAAT8J8rAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAACbA+/fvZRiGnj9/nu4oAIBJQrkCAExJVVVVMgxDhmEoOztb+fn5On78uH78+DHh311cXKy6uroJ/x4AwO8lK90BAAD4bzZv3qxAIKDR0VH19fXJ5/PJMAydP38+3dEAABiHX64AAFPWtGnTlJubqwULFqisrEwbNmzQw4cPE587HA5dvHgxaU9hYaGampoSrw3DUHt7u3bs2KHp06dryZIlunPnTko5HA6H/H6/9u7dqxkzZmjhwoVqa2tLWtPb2yu32y2r1ao1a9aov79/3JyhoSFt2bJFdrtdOTk5qqys1KdPnyRJjx49ksViUXd3d2J9c3Oz5s2bp+Hh4ZTyAgDSg3IFAPglDA0NqaenRxaLJeW9Z86cUXl5uUKhkEpLS7Vnzx5Fo9GUZrS0tCRKU21trQ4cOKDXr19LkmKxmDwej1asWKG+vj41NTXp6NGjSfs/f/6skpISud1uPXv2TPfv39fw8LDKy8sl/X0UsbKyUl++fFF/f78aGxvV3t6unJyclK8ZADD5KFcAgCmrq6tLdrtdVqtVBQUFikQiOnbsWMpzqqqq5PV65XQ65ff7FYvF1Nvbm9KM0tJS1dbWyul06sSJE5ozZ46CwaAk6datWxobG1NHR4dWrlwpj8czLufly5fldrvl9/u1bNkyud1udXZ2KhgM6s2bN5Kks2fPavbs2dq/f78qKirk8/m0ffv2lK8XAJAe/OcKADBlrV+/XlevXtXIyIhaW1uVlZWlnTt3pjzH5XIlnttsNs2cOVORSORfzzAMQ7m5uYkZr169ksvlktVqTaxZu3Zt0v6BgQEFg0HZ7fZxs8PhsJYuXSqLxaKbN2/K5XJp0aJFam1tTSkjACC9KFcAgCnLZrPJ6XRKkjo7O7Vq1Sp1dHRo3759kqSMjAz9/Pkzac/o6Oi4OdnZ2UmvDcPQ2NhYSln+1xmxWEzbtm37x5txzJ8/P/G8p6dHkhSNRhWNRmWz2VLKCQBIH44FAgB+CRkZGTp58qQaGhr0/ft3SdLcuXP18ePHxJqvX7/q3bt3k55t+fLlCoVCSbeJf/LkSdKa1atX68WLF3I4HHI6nUmPvwpUOBzW4cOHdf36dRUVFcnn86VcAgEA6UO5AgD8Mnbt2qXMzExduXJFklRSUqIbN26ou7tbg4OD8vl8yszMnPRcu3fvlmEYqqmp0cuXL3Xv3j1duHAhac3BgwcVjUbl9Xr19OlThcNhPXjwQNXV1YrH44rH46qoqNCmTZtUXV2tQCCgUCiklpaWSb8eAMC/Q7kCAPwysrKydOjQITU3N2tkZET19fVat26dPB6Ptm7dqrKyMi1evHjSc9ntdt29e1eDg4Nyu906derUuON/eXl5evz4seLxuDZu3KiCggLV1dVp1qxZysjI0Llz5/Thwwddu3ZN0p9HBdva2tTQ0KCBgYFJvyYAQOqMn/95WB0AAAAAkDJ+uQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwwR+I132Htwj3fgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Visualize the cache effect\n", + "plt.figure(figsize=(10, 5))\n", + "plt.scatter(range(len(times_warm)), times_warm, alpha=0.7, label=f'Warm Cache (mean={np.mean(times_warm):.4f}ms)', color='orange', s=60)\n", + "plt.scatter(range(len(times_cold)), times_cold, alpha=0.7, label=f'Cold Cache (mean={np.mean(times_cold):.4f}ms)', color='blue', s=60)\n", + "plt.axhline(y=np.mean(times_warm), color='orange', linestyle='--', alpha=0.5)\n", + "plt.axhline(y=np.mean(times_cold), color='blue', linestyle='--', alpha=0.5)\n", + "plt.xlabel('Run Index')\n", + "plt.ylabel('Time (ms)')\n", + "plt.title(f'Cache Effect on {N_SMALL}x{N_SMALL} Matrix Multiplication')\n", + "plt.legend()\n", + "plt.grid(True, alpha=0.3)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FAaH1cdBzX2j" + }, + "source": [ + "### Putting it all together\n", + "\n", + "We have now discovered that a robust benchmark requires:\n", + "\n", + "1. Device Synchronization\n", + "2. CUDA Events (to avoid CPU overhead)\n", + "3. Warmup Runs (to avoid initialization costs)\n", + "4. Multiple Samples (to handle variance)\n", + "5. Cache Flushing (to simulate VRAM access)\n", + "6. Median/Mean Aggregation (to ignore jitter)\n", + "\n", + "Writing this boilerplate every time is painful. We've packaged all these lessons into **KernelBench's timing module**, which provides multiple timing methods for different use cases. There are also other robust implementations available, such as Triton's `do_bench` [function](https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html).\n", + "\n", + "The default `cuda_event` method in KernelBench implements all of the above automatically, plus an additional insight: **`discard_first`** - discarding the first few trials after warmup, which often still have some initialization overhead." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.492125Z", + "iopub.status.busy": "2025-12-17T20:56:48.491999Z", + "iopub.status.idle": "2025-12-17T20:56:48.816105Z", + "shell.execute_reply": "2025-12-17T20:56:48.815073Z" + }, + "id": "3aVFtWt_zX2j", + "outputId": "6cf1e493-86ca-419e-a8e1-e19486814e09" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using timing method: cuda_event\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "KernelBench cuda_event time: 2.6700 ms\n" + ] + } + ], + "source": [ + "# Get the timing function - cuda_event is the default for trusted code\n", + "timing_fn = get_timing_function(\"cuda_event\")\n", + "\n", + "def final_benchmark(func, *args, num_trials=100):\n", + " \"\"\"Production-ready benchmarking using KernelBench's timing module.\"\"\"\n", + " elapsed_times = timing_fn(\n", + " kernel_fn=func,\n", + " args=list(args),\n", + " num_warmup=10,\n", + " num_trials=num_trials,\n", + " discard_first=1, # Discard first trial for consistency\n", + " verbose=False,\n", + " device=DEVICE\n", + " )\n", + " stats = get_timing_stats(elapsed_times, device=DEVICE)\n", + " return stats[\"mean\"]\n", + "\n", + "t = final_benchmark(simple_mm, a, b)\n", + "print(f\"KernelBench cuda_event time: {t:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MsZrCYQRzX2j" + }, + "source": [ + "*Note: KernelBench also wraps Triton's `do_bench` if you prefer adaptive trial counts. See the timing methods comparison below for details.*\n", + "\n", + "---\n", + "\n", + "## KernelBench's Timing Methods Explained\n", + "\n", + "Now that we've built up a robust benchmarking harness from first principles, let's explore KernelBench's timing module in depth. We'll examine:\n", + "- **All 4 timing methods** and when to use each\n", + "- **The `discard_first` parameter** and why it improves measurement consistency\n", + "- **How `host_time` detects side-stream exploits** in untrusted code\n", + "\n", + "KernelBench's timing module provides **4 timing methods**, each designed for different use cases:\n", + "\n", + "| Method | Use Case | Catches Side-Streams | Cold Cache | Trial Control |\n", + "|--------|----------|---------------------|------------|---------------|\n", + "| `cuda_event` | Default, trusted code | No | Yes | Explicit |\n", + "| `host_time` | Untrusted code, agent evals | **Yes** | Yes | Explicit |\n", + "| `do_bench` | Triton-style / robust adaptive | No | Yes | Adaptive (time-budget) |\n", + "| `do_bench_impl` | do_bench implementation for inference and trial control | No | Yes | Explicit |\n", + "\n", + "### Method Details\n", + "\n", + "**`cuda_event`** (Default)\n", + "- Uses `torch.cuda.Event` for GPU-side timing\n", + "- Most accurate for pure kernel time measurement\n", + "- Clears L2 cache before each trial for cold-cache performance\n", + "- Use for trusted code where you control the kernel implementation\n", + "\n", + "**`host_time`** (For Untrusted Code)\n", + "- Uses **both** `time.perf_counter()` (host) and `torch.cuda.Event` (device) timing\n", + "- Compares the two: if they differ significantly, the CUDA event time is likely invalid (e.g., side-stream exploit)\n", + "- Falls back to host time when discrepancy detected, ensuring correctness\n", + "- Waits for ALL streams via `torch.cuda.synchronize()`\n", + "- **Essential for evaluating untrusted/agent-generated code**\n", + "\n", + "**`do_bench`** (Triton's Adaptive Benchmarking)\n", + "- Wraps Triton's `triton.testing.do_bench`\n", + "- Uses fixed time budgets: 25ms warmup, 100ms for repetitions\n", + "- Trial count is automatic based on kernel runtime\n", + "- **Note:** `num_warmup`, `num_trials`, `discard_first` parameters are ignored\n", + "\n", + "**`do_bench_impl`** (Transparent Implementation)\n", + "- Custom implementation mirroring Triton's do_bench\n", + "- Gives you explicit control over `num_warmup` and `num_trials`\n", + "- Useful when you need do_bench's approach but with specific trial counts\n", + "\n", + "### Key Parameters\n", + "\n", + "All timing functions share a common interface:\n", + "\n", + "```python\n", + "timing_fn(\n", + " kernel_fn, # Function to time\n", + " args, # List of arguments to pass\n", + " num_warmup=3, # Warmup iterations before timing\n", + " num_trials=10, # Number of timing samples to collect\n", + " discard_first=1, # Drop first N trials after warmup\n", + " device=\"cuda:0\", # Explicit GPU device selection\n", + " verbose=True # Print per-trial timing info\n", + ") -> list[float] # Returns list of elapsed times in ms\n", + "```\n", + "\n", + "### Why `discard_first`?\n", + "\n", + "Even after warmup, the first few timing trials can be affected by:\n", + "- PyTorch's lazy tensor allocation finalizing\n", + "- cuDNN autotuning (still settling optimal algorithms)\n", + "- Driver state initialization\n", + "- First access to data structures\n", + "\n", + "Setting `discard_first=1` (the default) improves measurement consistency. Let's visualize this effect:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Experiment 2: Comparing All 4 Timing Methods\n", + "\n", + "Let's see how the different timing methods compare on the same kernel. Each method has trade-offs between precision, features, and overhead." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.818984Z", + "iopub.status.busy": "2025-12-17T20:56:48.818836Z", + "iopub.status.idle": "2025-12-17T20:56:49.452295Z", + "shell.execute_reply": "2025-12-17T20:56:49.451496Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Comparing all KernelBench timing methods on 4096x4096 matmul:\n", + "======================================================================\n", + "\n", + "Testing cuda_event...\n", + "[Profiling] Using timing method: cuda_event\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n", + " cuda_event: 2.6700 ms (std=0.0034)\n", + "\n", + "Testing host_time...\n", + "[Profiling] Using timing method: host_time\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n", + " host_time: 2.8200 ms (std=0.0022)\n", + "\n", + "Testing do_bench...\n", + "[Profiling] Using timing method: do_bench\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " do_bench: 2.6700 ms (std=0.0012)\n", + "\n", + "Testing do_bench_impl...\n", + "[Profiling] Using timing method: do_bench_impl\n", + " do_bench_impl: Skipped due to AttributeError (Triton version compatibility)\n" + ] + }, + { + "data": { + "image/png": "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VZ88JWlpl1LfLD4+Xr1795aPj4/c3d31v//9T//++2+K7/Eon9mD4uvcubMmTpwoSVZTQkjWfdexY8dajvP+/fvTfFwvXbqkDz/8UBUrVpSbm5s8PDzUqFEj7dmzx6pe0vn+448/avDgwSpYsKDc3d3VunVrxcTEKD4+Xr169ZKvr6/c3NzUpUuXZH2n1atX68UXX5SXl5fc3NxUpkwZffrpp1Z1nJ2dVadOHS1evDhNxw9PpycjhQw8pKJFi8rf318//PCDGjVqJElavny5YmJi1L59e40fPz5Zm7ffflvh4eHq0qWL3nvvPR07dkwTJkzQrl279Ntvv8nZ2VnSnWSLm5ub+vTpIzc3N61bt06fffaZYmNjNXLkSKttXr58WQ0bNlTLli3Vtm1bLViwQB9//LEqVqxoiet+bt26leKorpw5c8rV1VW+vr6aPHmy2rRpo6+//lrvvfeezGazOnfuLHd3d02aNEnSnYTb//73P23evFlvvfWWypYtq71792rMmDH6559/rOb3GTx4sAYNGqSaNWtqyJAhyp49u7Zt26Z169apQYMGaf4Mateurffee0/jx4/Xp59+qrJly0qS5b/3unHjhurUqaPDhw8rJCRExYoV0/z589W5c2dduXJF77//vlX9iIgIXb16VW+//bYcHBw0YsQItWzZUkePHrV8Vplh06ZN+uWXXxQcHCxJCgsLU9OmTdW3b19NmjRJ7777ri5fvqwRI0bozTff1Lp16yxt161bp0aNGqlatWoaOHCgHB0dNXPmTL388svatGmTnn/++Qe+/xdffCEHBwd9/PHHOnfunMaOHav69etr9+7dcnV11RtvvKEhQ4Zo3rx5VnM+JSVlW7VqlaYrxrVr11ahQoUUERFhuQI2b948ubm5qUmTJsnqp/Ucmz17trp166bnn39eb731liQlG/bdtm1bFStWTGFhYdq5c6emTZsmX19fDR8+3FKnW7dumjVrllq3bq0PPvhA27ZtU1hYmP7++28tWrTIUu+zzz7T559/rsaNG6tx48bauXOnGjRooISEhAceAwB40v3++++SpGeffTbF9Wn5rl2zZo0aNWqk4sWLa9CgQbpx44a+/vpr1apVSzt37rQkSXr06KEFCxYoJCRE5cqV08WLF7V582b9/fffevbZZ9WvXz/FxMTo33//1ZgxYyRJbm5uadqPsWPHqmfPnnJzc1O/fv0kSXnz5r1vm8uXL6tp06Zq37692rRpo8mTJ6t9+/aaM2eOevXqpR49eqhjx44aOXKkWrdurVOnTsnd3V2SdPbsWb3wwguWi1U+Pj5avny5unbtqtjY2AfeSpeWvlZa+pv3O2aJiYlq2rSp1q5dq/bt2+v999/X1atXtXr1akVFRVl996blc963b59q1aqlggUL6pNPPlHOnDn1448/qkWLFvrpp5/06quvSrqTOAoLC7N818fGxmr79u3auXOnXnnllVSPycO269atm77//nt17NhRNWvW1Lp161LspzzqZ/ag+N5++239999/Wr16tWbPnp3iNmbOnKmbN2/qrbfekslkkre3d5qP69GjR/Xzzz+rTZs2KlasmM6ePaspU6YoICBA+/fvTza1R1hYmFxdXfXJJ5/o8OHD+vrrr+Xs7CxHR0ddvnxZgwYN0tatWxUeHq5ixYpZ5ofat2+fmjZtqkqVKmnIkCEymUw6fPhwihdQq1WrpsWLFys2NlYeHh73PX54ShnAU2jmzJmGJOPPP/80JkyYYLi7uxvXr183DMMw2rRpY9StW9cwDMMoUqSI0aRJE0u7TZs2GZKMOXPmWG1vxYoVycqTtne3t99+28iRI4dx8+ZNS1lAQIAhyfjuu+8sZfHx8Ua+fPmMVq1aPXBfihQpYkhK8RUWFmZVt0OHDkaOHDmMf/75xxg5cqQhyfj5558t62fPnm04OjoamzZtsmr3zTffGJKM3377zTAMwzh06JDh6OhovPrqq0ZiYqJVXbPZbPl/ScbAgQNTjLlTp06W5fnz5xuSjPXr1yerGxAQYAQEBFiWx44da0gyvv/+e0tZQkKC4e/vb7i5uRmxsbGGYRjGsWPHDElG7ty5jUuXLlnqLl682JBk/Prrr8neKzVJx+rYsWPJ1g0cONC490+pJMNkMlnVnzJliiHJyJcvnyVGwzCM0NBQq22bzWajVKlSRmBgoNWxvH79ulGsWDHjlVdeuW+s69evNyQZBQsWtHqfH3/80ZBkjBs3zlLm7+9v1KhRw6r9woULU/0sUtrv8+fPGx9++KFRsmRJy7rq1asbXbp0sRyL4OBgy7q0nmOGYRg5c+a0Ok/ufe8333zTqvzVV181cufObVnevXu3Icno1q2bVb0PP/zQkGSsW7fOMAzDOHfunJE9e3ajSZMmVsf8008/NSSlGAMAPE369+9vSDKuXr1qVZ6e79oqVaoYvr6+xsWLFy1le/bsMRwdHY2goCBLmaenp9X3RkqaNGliFClS5KH2pXz58lb9iiRJ3593f/8l9dEiIiIsZQcOHDAkGY6OjsbWrVst5StXrjQkGTNnzrSUde3a1cifP79x4cIFq/dq37694enpmWJfMUla+1pp7W+mdsxmzJhhSDJGjx6dbF3S+6Tnc65Xr55RsWJFq/c2m81GzZo1jVKlSlnKKleubNXHTqu0tLu3b5bUH3j33Xet6nXs2DFZX/VRPrO0xhccHJys72gY/3ecPTw8jHPnzlmtS+txvXnzZrLz5dixY4bJZDKGDBliKUs63ytUqGAkJCRYyjt06GA4ODgYjRo1stqGv7+/1fkzZswYSz/wQSIiIgxJxrZt2x5YF08nbt/DU69t27a6ceOGlixZoqtXr2rJkiWp3nY0f/58eXp66pVXXtGFCxcsr2rVqsnNzU3r16+31HV1dbX8/9WrV3XhwgW99NJLun79utWtTtKdq1V3zwmVPXt2Pf/88zp69Gia9qFGjRpavXp1ste9k5FOmDBBnp6eat26tQYMGKA33nhDzZs3t9q/smXL6plnnrHav5dfflmSLPv3888/y2w267PPPkv2BJ60PoL3YS1btkz58uWz2jdnZ2e99957unbtmjZs2GBVv127dsqVK5dl+aWXXpKkNB/bh1WvXj2rofE1atSQJLVq1cpyBfXu8qR4du/erUOHDqljx466ePGi5TOIi4tTvXr1tHHjRsujuO8nKCjI6n1at26t/Pnza9myZVZ1tm3bZjU8f86cOfLz81NAQECa97Vjx446fPiw/vzzT8t/7/dvKC3nWFr06NHDavmll17SxYsXFRsbK0mWfe3Tp49VvaSHAixdulTSnav3CQkJ6tmzp9X5+zRMBgsAaXHx4kVly5Yt1RFJD/quPXPmjHbv3q3OnTvL29vbUq9SpUp65ZVXrL6bvLy8tG3bNv3333+ZsSvp5ubmpvbt21uWy5QpIy8vL5UtW9byHS4l/z43DEM//fSTmjVrJsMwrL7zAgMDFRMTY7klMSVp7Wulp7+Zkp9++kl58uRRz549k627t0/3oM/50qVLWrdundq2bWuJ5cKFC7p48aICAwN16NAhnT59WtKdz3nfvn06dOjQA2O828O0Szq/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smXL9OabbypfvnySxJBt2FXS6JO+fftqzpw5ql69uvbv36/vvvtO77//vl577TU7R4in1e7du7V06VL9/vvvcnNzk4ODgxYsWKAZM2bo6NGjWrFihYYMGaKbN2+qVatW9g4XgKS///5b8fHxqlev3kO3f/XVV63K/P39tWLFCsvytWvXNGjQIC1dulRnzpzR7du3dePGjTSNlNq7d68SExNVunRpq/L4+Hjlzp1bktS4cWM5Ozvrl19+Ufv27fXTTz/Jw8ND9evXl3RntObhw4fl7u5utY2bN2/qyJEjluXy5cvLycnJspw/f37t3bs3jUcCeDpVqlTJajl//vw6d+6c/v77b/n5+cnPz8+yrly5cvLy8tLff/+t6tWrq0+fPurWrZtmz56t+vXrq02bNipRokSmx1y0aFGrvwd58+aVk5OTpY+dVHbu3DlJd/6GXLt2zfI3J8mNGzes/obg8UZSClmG8f8nM09ISJCzs7MqVaqkSpUqafbs2fLx8VGPHj1UpEgRq0nPDSZAh43Nnj1bc+bM0ZIlS1S1alXNnTtXHTt2VK5cuewdGp5iVapU0ZAhQ/T1119r+PDhKlq0qN5++23VrVtXdevWVaVKlTR+/HgNHz5cDg4Oatmypb1DBp5695sAOOkHmnHXbeFJcyylx4cffqjVq1frq6++UsmSJeXq6qrWrVtb3TqXmmvXrsnJyUk7duywShhJkpubmyQpe/bsat26tSIiItS+fXtFRESoXbt2ypYtm2Ub1apV05w5c5Jt38fHx/L/zs7OVuscHByYGw94gEf5dzNo0CB17NhRS5cu1fLlyzVw4EDNnTs3WaI7o6UU8/3249q1a8qfP79lLru7pfcJgbAfklLIEpKesifduQKXPXt2DRs2TJLk6+urr776SpL0zjvvqHDhwpLujAyoUqWKXeLF0+vYsWNq2LChJSHVo0cPTZw4UY0bN9b169d1+fJlFSxY0N5h4imSmJgoJycnBQYGymw2a+LEiZozZ466du1qqVO9enW9//77Gj9+vEaMGKHr16/r9ddft2PUAEqVKiVXV1etXbtW3bp1s1qXlLA5c+aM5aLH7t27reqULVvWat4VSdq6davV8m+//abOnTtbfmheu3bNapLx+6lataoSExN17tw5vfTSS6nWe+211/TKK69o3759WrdundW8Vs8++6zmzZsnX19feXh4pOl9U5I9e3YlJiY+dHvgaVK2bFmdOnVKp06dsoyW2r9/v65cuaJy5cpZ6pUuXVqlS5dW79691aFDB82cOVOvvvrqQ/17y6x/o88++6yio6OVLVs2FS1aNMO3D9tgonNkCUkJqa+++kotW7bU66+/rlmzZkmSevXqpY8++khz5szRuHHjtGHDBjVq1Eht2rSRxOTSsI2kL9qTJ08qb9682rVrl7p3766wsDC98847MgxDM2fO1KJFi3T79m07R4unhdlstoxguHnzpho1aqQPP/xQFStW1MKFC7Vu3TpL3eeee07vv/++8uTJk+IVRwC25eLioo8//lh9+/bVd999pyNHjmjr1q2aPn26SpYsKT8/Pw0aNEiHDh3S0qVLNWrUKKv27733nlasWKGvvvpKhw4d0oQJE6xu3ZPuJL4WLlyo3bt3a8+ePerYsWOaR1KULl1ar732moKCgrRw4UIdO3ZMf/zxh8LCwrR06VJLvdq1aytfvnx67bXXVKxYMdWoUcOy7rXXXlOePHnUvHlzbdq0SceOHVNkZKTee+89/fvvv2k+VkWLFtXGjRt1+vRpXbhwIc3tgKdR/fr1VbFiRb322mvauXOn/vjjDwUFBSkgIEDPPfec5UFSkZGROnHihH777Tf9+eefKlu2rKQ7/96uXbumtWvX6sKFC5Ynad5PZv0brV+/vvz9/dWiRQutWrVKx48f1++//65+/fpp+/btGfY+yFwkpfBYuzuhNHbsWH3xxRd6/vnndfz4cU2ePFmhoaGSpPfff18ff/yxVq5cqbfffltXr17V/v37JTHPFDLHvZ32pB/+LVu21NixY1WtWjVNnTpV77zzjqQ797b/+uuvOn78uOW2BSAz3T3CdPjw4erbt6+OHTumOnXqqH///ipVqpSGDx9ulYCqVq2aRo0apalTp9opagB3GzBggD744AN99tlnKlu2rNq1a6dz587J2dlZP/zwgw4cOKBKlSpp+PDhyZ6s98ILL+jbb7/VuHHjVLlyZa1atUr9+/e3qjN69GjlypVLNWvWVLNmzRQYGKhnn302zfHNnDlTQUFB+uCDD1SmTBm1aNFCf/75p2XUunSnH9ahQwft2bMn2dyKOXLk0MaNG1W4cGG1bNlSZcuWVdeuXXXz5s10jZwaMmSIjh8/rhIlSljd9gcgOQcHBy1evFi5cuVS7dq1Vb9+fRUvXlzz5s2TdKdPe/HiRQUFBal06dJq27atGjVqpMGDB0uSatasqR49eqhdu3by8fHRiBEjHviemfVv1MHBQcuWLVPt2rXVpUsXlS5dWu3bt9eJEyfS/KRS2J+DwTASZAG///67Fi9erJdfflmBgYG6ePGixowZo+XLl+uVV17Rl19+KUmKiorS7du3ValSJTk6Our27dskAJDh7p6rbPny5Tp37pxefPFFFShQQM7Ozvrkk08UERGhkSNHWh6t/dFHH+ns2bP6448/OCdhUx9//LG+++47DR48WE2aNLHcPrpy5UqNHz9et2/fVr9+/VS7dm2rdncntQAAAIDMQFIKj71ly5apb9++un79uhYvXqyKFStKks6fP6/x48dr+fLlatCggWWOqSRJ86gAmeXjjz/W9OnT5ezsLFdXV7399tt65513dPnyZY0ZM0bffPONvL295ePjo9y5c2vlypVydnbm3ITNrF27Vp07d9b8+fP1wgsvSLJOqq5atUpff/21/vvvP02bNk1Vq1a1Z7gAAAB4ynC5Ho+9kiVLqkaNGlqwYIEWLVpkSUr5+Pjo/fffl6Ojo2bMmKEiRYro7bfftrTjRz8yWtKPecMwdOLECW3btk3Lly9XuXLlNGjQIM2dO1fXrl3TRx99pLFjx+qtt97S8ePHlTdvXlWtWpXRe7C56Oho+fr6qnLlyikmQxs0aKCEhARFRkaqcuXKdooSwONo06ZNatSoUarrr127ZsNoADyu+FuBR8UvIzxW7r1dJDExUaVLl9agQYPk5OSkX375Rd7e3goJCZEk5cmTR++++64KFSqkN998015h4ylw97l55coVZcuWTcWLF1elSpVkMpk0cuRIDRgwQEuWLJEkBQcHq1y5clZPMTGbzSSkYFPXrl3T4cOHdevWLbm6ulrOY7PZrLVr16pUqVJq2rSpmjZtKolb9gD8n+eeey7ZE/0A4F78rcCj4vY9PDbu/jH07bff6sCBAzp06JB69OihBg0a6Pz58/rss88UFRWl1157zZKYuhu3RSGzDRgwQIsWLdLly5eVO3dubdq0SZ6enlbrV6xYIX9/fw0ZMkReXl72CxZPjdSSSXv37tVrr72mBg0a6OOPP7ZMLhoXF6emTZvq1Vdf1XvvvWfrcAEAAABJPH0Pj5GkH1R9+/bVoEGDdOvWLRUtWlRNmzbVkCFDlD9/fn366aeqWLGi5s6da5nc/G4kpJDR7s7bL1q0SJMnT9YHH3ygBg0a6Nq1a+rZs6fOnj1rqTN06FDVrFlT165ds0pWAZnFMAzL38/vvvtOQ4YM0eTJk5WQkKCKFSuqZcuW2rx5s/r06aNt27ZpxYoVat26tWJiYvTuu+/aOXoAAAA8zRgphcfKqlWr1L17d/3888+qWrWqdu7cqeeee05z5sxRhw4dJEnHjx/XRx99JG9vb33zzTeWCXuBzPTjjz9q//79Kly4sOVW0bFjx2rBggUqXbq0vvzyS/n6+lrq3z3/FOcoMsvd51f//v01ZswY1apVS2vWrFHDhg01btw4lSpVShMnTtSCBQu0YcMGVapUSXnz5tWSJUuYeB8AAAB2xUgp2NW9OdHY2FiVL19eVatW1Q8//KCAgABNnDhRHTp0UGxsrPbv36+iRYtq3Lhxmjx5suVHP5CRXnnlFS1fvtyyHBUVpeHDh+urr76S2Wy2lPfq1UutW7fWP//8o379+unMmTOWdSSkYAtJ59eRI0e0c+dObdiwQatWrdLhw4e1b98+BQcH68CBAwoODtb69eu1e/duLVu2TMuXL5ezs7Nu375NQgoAAAB2Q1IKdnXvD/YrV67ov//+0+LFi9WjRw+NGDFC77zzjiRp2bJlGjZsmM6fP68CBQpYJuvlRz8y0rlz5xQYGKh69epZyp555hn17t3bMuLkwoULlnW9evVS27ZttXHjRoWHh1tti3MTtjB8+HAFBQXJ0dFRJUqUkCQVL15ca9as0T///KNevXpp586dkqRKlSpZ/f1k4n0AAADYE7fvwe4mTpyoX375RStXrtSFCxcs85+MHDlSH3zwgSTpxo0bateunXLlyqXw8HB+7MMmRowYIW9vb3Xr1k2JiYmaP3++xo8fLy8vL82ePVu5c+e21P3xxx/VqlUrRp3A5n7//XfVr19fLi4uWr9+vSpXrmwZpXf48GEFBgYqd+7c+v7771W6dGl7hwsAAABYMFIKdpc7d25dvnxZe/bskbe3tzp27KiqVatq8+bN+vPPP7Vo0SK1bNlSx48f1/Tp07llD5nm3vPqwIED6tmzp+bMmSMnJye1adNGwcHBio2NVVBQkC5evGip27ZtWzk5OSkxMdHWYeMpcvfto9Kdc7ZmzZratGmTbt68qS+++EKnTp2y/J0sWbKkli5dKj8/P5UsWdJOUQMAAAApY6QUbCqlOXZOnjyp+vXrq02bNvriiy8UHx+v7777Tj/88IO2bt2qihUrqlChQpo7dy6T8iLTHDhwQHnz5lWuXLnUv39/vfXWW3J2dtbo0aM1ZcoUTZo0Sa+//roSExM1b948TZkyRTdv3tTq1avl4eFh7/DxFDCbzZan7K1YsUKnTp2Ss7OzAgICVKxYMW3ZskUvv/yyXn31VQ0fPlx+fn7J/ubevQ0AAADA3khKwS7uTSx9//33+uCDD/Trr7/q+eeft/yQOnjwoPLnzy93d3c5ODjo9u3bzIGCDLdnzx4FBgZq4MCBioqK0uTJkxUVFaVy5crp1KlTGjt2rL799lurxNSMGTO0c+dOTZw4kR/5sKm+fftq4cKF8vHxUa5cuRQZGamNGzfqueee059//qmAgAC1bNlSQ4cOVbFixewdLgAAAJAqfknB5r744gu99dZbWrBggaWsTp06KleunH7//XdJ0u3btyVJpUuXloeHhxwcHJiUF5mmcuXK6tatm/r166eZM2cqMjJS5cqVkyT5+fmpV69e6t69u0JCQiy38nXt2lWTJ0+2TBgN2MKsWbMsI0m3bNmi1q1b6+bNmzp8+LAkqXr16lq/fr0iIiI0a9YsO0cLAAAA3B9JKWS6ewfjlShRQqdPn1ZoaKgaNmyotWvXKl++fHr11VcVFhamuLg4OTs7S7J+ehmjUZAZkuaAqlSpkiTJy8tLUVFROnfunKXO3YmpN954QytXrrQ6Hzk3YSv//POPOnfurOrVq2vRokV6//33NWXKFLVv316xsbE6e/asatSooaioKPXv39/e4QIAAAD3xS8pZCqz2WxJLJnNZl2/fl3t27fXwoULNW/ePCUkJOjjjz9W3bp1VaJECbm5uWnkyJGMPIHNJN1GWr9+fR09elRdu3bViBEj9P333+v8+fOWen5+furfv79GjRqlevXq2StcPOWuXr2qW7du6ZdfflFQUJBGjhyp7t27yzAMzZ8/X1OnTtX169dVrlw5ZcuWzTLqFAAAAHgckZRCprl7Qt2RI0fq9ddfV5UqVTRq1Cj99ddfevbZZ7Vu3ToNHz5czzzzjF577TUdO3ZM//77LyNPYFNms1ne3t7y8vLS0KFD1a5dO40fP14//PCDLly4IEl67bXXdPXqVfXu3Zsf+8h0qSXmK1SooOXLl+u1117Tl19+qR49ekiSYmJi9NNPP+nWrVvKkSOHpT63PAMAAOBxxkTnyHShoaGaPn26hgwZops3b2rSpEkqXry4Zs6cqfz581vqbdq0Sdu3b1fPnj35IQW7uDuR+sknn2j+/PmqUaOG/vvvP+3bt0///fef5dZSILPc/UCHyMhImc1mmUwm1apVS4mJiWrdurU2bNig8PBwVatWTdeuXVOvXr10/vx5bd26lb+fAAAAyDJISiFT7dixQ2+88YZmzJihF154Qb/99pvq1q2r6dOn64033kj2FL4kPGUP9nL3OTlmzBj9/fffSkhI0LRp05QtW7ZUz1ngUb3++utq3LixOnbsKEnq06ePZs2aJTc3N0VHR6tly5YaPny4ChYsqMDAQEVHR+vIkSOqUqWKsmXLpnXr1snZ2ZlzFAAAAFkGv/qRqQzDUPbs2fXCCy9o/vz5evPNNzV+/Hi98cYbiouLU2RkpGrWrKlcuXJZtSMhhcx08+ZNubi4pLjOycnJMmKqd+/eVglSkqXILEnzlwUHB8vNzU3PPvusfvnlFy1btkx58+bV6dOn1b59e/Xo0UM//PCDVq1apV27dunUqVMqXLiwqlSpIkdHR85RAAAAZClM3INMdePGDV2/fl2zZ8/WW2+9ZTUHytatWzVnzhyrp5wBmWHt2rWWOXqGDBmi6dOn33cyfUdHRxmGIcMwlC1bNhmGocTERH7sI9P4+Pjo888/1+uvv66goCB9+eWXeuWVV1SjRg0VKVJEtWrV0sqVK7V161YNGjRIjo6Oqlatmlq0aKFnn31Wjo6OMpvNnKMAAADIUrh9D5muefPm+vXXXzV69Gj16tVL0p2RKq1bt5bJZNL8+fOZ2ByZ5syZM3r55Zfl7u6uF154QVOnTtX27dtVoUKF+7YzDMPy5Mjr169bTR4NZJZjx45p3Lhx+vbbb/Xiiy9q5cqVMpvNunXrlkwmk6ZMmaIvvvhC27dvV548efjbCQAAgCyNS6rINEk/6ocMGaJLly5p9OjR8vT01OXLl7VixQr9999/2rVrl+UKPz+ukBny5s2rWbNmKTAwUFFRUdq8ebMqVKighIQEZc+ePcU2dyekxowZo+nTp2v79u2p3vIHZJRixYqpZ8+ekqTx48frxx9/VNu2bWUymSRJJpNJXl5ecnFx4W8mAAAAsjySUsg0ST/qK1asqOnTp2vYsGEaNWqUfHx8VKpUKS1btkzZsmVjDhRkiqREp6Ojo7JlyyZvb285ODiod+/eWr16tVxcXFI89+5OkCaNShk3bhwJKdhMiRIl1Lt3b8XHx+u1115TfHy8Xn75ZWXLlk0//PCD8uXLJ3d3d3uHCQAAADwybt+DTV26dEleXl6WH/0kpJAZ7k4sRUVFydvbWzly5ND+/fv17rvvKkeOHFq/fr1l9IkkxcXFKWfOnJblKVOmqG/fvpoxY4ZatWpl830ATp48qS+//FJTp06Vt7e3OnTooN27d2vNmjVydnZmhCkAAACyPHqzsImk3OfdCamkSaSBjHT3D/UBAwaoc+fO2rt3rzw8PPT888/rq6++0vXr11WvXj3dvHlTkvTWW29p3rx5lm1MnTpVH3/8MQkp2FXhwoX18ccf64MPPtCFCxcUEBCgDRs2yNnZWbdv3yYhBQAAgCyPkVJIt/tdnb97Lp4HrUtMTJSTk1OmxAj0799f06dP17Rp0+Tv7y9vb29Jd87fTZs2qWfPnjp//rxKly6t48eP68iRI8qWLZvmzJmjN954QwsWLFDLli3tvBeA9M8//2jZsmUKCQmxPA0ytb+zAAAAQFZCUgrpcndCasGCBTp58uT/a+/uY6ou+ziOv8/hILPUyAJa6gh8yGk1SCXzofkU1jokzpSsmfkcZEpqnNxCOmLQbJlOTwkKmOBDljWVFLXSVtqMkYLzYSulcCSuUFEUD5yH+49ufkHavfu+JwfjfF5/nf2u38Wu3/bbGdfnXNf3ol27djz11FNEREQANw6mml778MMPGTRoED179vTt4MVvHDt2jLFjx7Jy5UpGjx7NpUuXOHfuHN988w29e/dm0KBBlJeXk5ubi8fjwW63Y7FYqK+v56uvvgLgiSeeaOWnkLbmRt+N/2s4rzBfRERERNoShVLyf7HZbKxbt46YmBjKysro27cvU6dO5ZlnngGaT76afl6zZg2zZs1i+/btWK3WVhu/tG2lpaUkJCSQm5uLy+Viy5Yt7N+/nwsXLhASEkJ6ejpxcXHN+jTWN9MqFGkJTQP9c+fOUV9fT7du3Yz2v3vvmoZQ58+fN1b8iYiIiIi0BSpIIf8Vl8tlfF65ciWbNm3i888/Z8eOHdjtdoqKili5ciWbN28G/jh5z+PxNJtoZWVlsWDBArZu3apASm4aj8dz3bX7778fs9nM9OnTGTVqFACZmZl89913uFwuqqqqruvTWN9MgZTcTF6vF6/XawRSaWlpxMbGEhMTQ3R0NPn5+Zw/f/6G753X6zUCqZycHOx2O5cuXfLp+EVEREREWpKqTMt/lJiYyLx58+jZsydut5u6ujoqKiqw2Wz079+fTz/9lFdffZW0tDR27dpFRkYGZrOZCRMmNKs71fQks7Fjx7biE0lb0nT1SXFxMR6PB5PJRExMDIcPH6awsJCQkBCGDBli3NepU6cbBlkiLcFkMhkHPWRkZOBwOFixYgVhYWHk5ubyzjvvUFlZSVJSEp06dTL6NQ30s7OzmT17Nlu2bGl2j4iIiIjIP52278nfOnXqFBMmTKCmpoa9e/cSERFBQ0MDJ0+eJCwsjOrqasaMGUNSUhLJyckUFRUxfvx4evToQWZmplGTZ8WKFdjtdtauXavC0XLTNJ2022w2Nm3ahMlk4ty5c0ycOJHU1FQiIyMBuHLlChcvXmTGjBlUVVVRXFysujzSot544w3CwsJ45ZVXAKiursZqtTJp0iSSkpKM+1JSUvjss8/Izc1l6NChRoDVdIVpSkoKeXl5+v4UERERkTZH2/fkb0VERJCdnU337t0ZPnw45eXlBAYG0qtXL0JDQzl06BB33nknkyZNAuDy5cuMHDmS0aNHExsbC0BlZSUFBQU4HA5NqOSmapy0r1q1itzcXDZv3syePXsoLCykqKgIm83GL7/8AsDatWsZM2YMtbW1HDp0iICAANxud2sOX9qwixcvcuDAAT755BPy8vIAuOOOO6ipqTFW7DmdTgCWLl3K3XffjcPhMPo3DaRsNhu5ubn6/hQRERGRNkmhlNxQQ0MDZrOZfv36kZKSQteuXbFarZw5c4agoCAArl69Sl1dHUePHqW2tpaCggIGDhzI22+/jdlsxuv1EhYWxs6dO5k4cWIrP5G0VcXFxYwbN45BgwbRq1cvRo0axa5du9i9ezc5OTkATJ48mZdffpl9+/YRGBiIy+XSSilpEV6vl+DgYD766CNCQ0MpKCggJycHi8VCZGQkGzduBCAoKIj6+noAoqOjr6tplpeXx4IFC8jJyWHcuHGt8zAiIiIiIi1MoZTcUGBgIADp6eksW7YMp9PJiRMnGDFiBKdPnwbgscceIyAggGnTptGnTx9+/vln5s+fD/y5tcpisRASEtJqzyFty193Gzc0NFBZWcm1a9eM9vr6eqKionjzzTfZvHkz1dXVBAcHM2XKFGOFVGMAIHKzNdYrCw0NZd68ebjdbrKysti6dSvp6elUVFSQkJAAYASjpaWl3HXXXcCfhdGPHz/Ohg0bFEiJiIiISJummlLytxwOBzabjcLCQsLDw/n+++9xOBycOXOGvXv30qNHD44fP86xY8e4evUqzz//PBaLBZfLpUm/3HRut9uYxJ8+fZoOHToQGhrK+vXrSUpKYtu2bYwcOdIIRB0OBxs2bGD//v20a9eulUcv/mb+/PmcOnWKs2fPcuLECbp06UJycrIRVgUFBREZGcmFCxeoqamhrKwMi8ViFO9vWjNNRERERKStUiglN+R2u0lMTAT+OPmp0YEDB5g9ezZ1dXXs3r2b8PDw6/ppW5TcTB988AGPPvooUVFRACxcuJAdO3ZQVVXF1KlTGThwIPv372fPnj0sX76cxx9/nNraWp599lk6dOjAli1bNLkXn1q/fj3Jycl88cUXhIeH43Q6mTx5MvX19UydOpVRo0axevVqLl26RHBwMKmpqQr0RURERMQv6b9fATB+nW8UEBCA2WympKSk2X2DBw8mPj4eu93OAw88wMmTJ+nSpUuzfiI3S3l5ORkZGTz55JOkpKRw/Phx8vPzWbVqFWVlZRQVFVFRUcHAgQOJi4vDarUSGRlJQEAAQUFBFBcXYzKZtOpEfOrUqVP06dOHqKgoTCYTJpPJOD1vyZIldOzYkfT09GZ9tK1URERERPyRakoJgBFIHTx40Lg2YsQIXC4X69ato66uzrjeu3dvxo8fz7x587jnnnt8PlbxHxEREezYsYMffvgBh8PB119/jd1uJz4+nkWLFvH6669TXV3NwYMHiY2NpaSkhAULFpCamkpJSYlR1FyBlPhC48Lj9u3b43Q6cTqdmEwmGhoa6Nq1K5mZmZw9e5bU1FS2bdvWrI8CfRERERHxRwqlxHDkyBGGDBnC4sWLARgzZgw9e/YkKyuLNWvWUFVVxW+//cbGjRvp1q0bdrvdKBwt0lKioqLIzs7m22+/JS8vj8uXLxttTz/9NHPmzKG6upr3338fp9PJzJkzee6551TUXHyuMfyMi4vjyJEjLF26FPjz4Ain08nIkSOJj48nLi6uWR8REREREX+kmlLSzOrVq0lOTmbhwoWkpaVx7do1XnrpJcrKyjhx4gQRERGYTCZKS0uxWCzaFiU+c/ToUeLj4+nevTvvvvsuDz74oNG2c+dObDYbVquVzMzMVhylyB/WrVvHzJkzmTt3LhMmTKBz587MmTOHhx56yHhH/7ptWkRERETE3yiUkutkZ2eTmJjIokWLSEtLw+VyUV5eTnFxMbfffjtWq9VYhaItJ+JLpaWlTJkyhf79+zN37lz69u1rtB08eJBHHnlE76TcMrZu3UpSUpJx+mNISAiHDh0iMDBQgb6IiIiICAql/FLTyVBmZiadO3dm1qxZze7JysoiKSmJjIwMbDbbdX9DgZS0lsOHDzN9+nT69etHcnIyffr0adaud1NuJb/++iuVlZVcuXKFoUOHEhAQoFP2RERERET+TfsG/IzH4zECqaqqKurq6khMTKSgoMC4x+v1Mm3aNBISEoxtfH+lSb+0lujoaNauXcuRI0dIS0ujvLy8WbveTbmV3HvvvQwYMIBhw4apzpmIiIiIyF8olPIjTeuXLFu2jLfeeovRo0ezePFiXnjhBfLz84E/Cu9aLBbuu+8+hg4dyr59+9CCOrmVREdHs2rVKjp27Eh4eHhrD0fkv6bQVERERETkT/q51o80BlI2m42cnBwcDgfdunUjJSUFp9PJiy++iNfrJSEhAZPJxE8//cRrr72G1WoFUA0UuaXExMQwYMAATCaTCkaLiIiIiIj8A6mmlJ/58ssvmTFjBvn5+QwePNi4Xltby3vvvUdaWhoPP/wwtbW1BAUFUVJSolP25Jamd1NEREREROSfSSul/ExFRQW33XZbs1PLADp06EBqairDhg1j9+7dtG/fHpvNhsViUeFouaUpkBIREREREflnUijlJxpXk9TV1eF2u5tdb2z7+OOPiY6OZsmSJUa7TokSERERERERkZagIix+onE1yfDhw/nxxx9Zvny5cd1sNnPlyhU2bNjAnj17mvVTICUiIiIiIiIiLUE1pfxQdnY2s2fPJjExEavVSrt27cjIyKCqqsqoISUiIiIiIiIi0pIUSvkhr9fL9u3bmTNnDm63m+DgYLp06UJhYSGBgYGqISUiIiIiIiIiLU6hlB/7/fffqampwePx0L17d8xms2pIiYiIiIiIiIhPKJQSg8fjwWxWmTERERERERERaXkKpURERERERERExOe0LEZERERERERERHxOoZSIiIiIiIiIiPicQikREREREREREfE5hVIiIiIiIiIiIuJzCqVERERERERERMTnFEqJiIiIiIiIiIjPKZQSERERERERERGfUyglIiIiIiIiIiI+p1BKRERERERERER8TqGUiIiIiIiIiIj43L8AZI7j5yHk9CMAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Key insight: host_time is slightly slower due to CPU overhead,\n", + "but it catches ALL work on ALL streams - essential for untrusted code!\n" + ] + } + ], + "source": [ + "# Experiment 2: Compare all 4 timing methods\n", + "print(\"Comparing all KernelBench timing methods on 4096x4096 matmul:\")\n", + "print(\"=\" * 70)\n", + "\n", + "methods = [\"cuda_event\", \"host_time\", \"do_bench\", \"do_bench_impl\"]\n", + "results = {}\n", + "\n", + "for method in methods:\n", + " print(f\"\\nTesting {method}...\")\n", + " try:\n", + " method_fn = get_timing_function(method)\n", + " times = method_fn(\n", + " simple_mm, \n", + " [a, b], \n", + " num_warmup=10, \n", + " num_trials=50, \n", + " verbose=False,\n", + " device=DEVICE\n", + " )\n", + " results[method] = get_timing_stats(times, device=DEVICE)\n", + " print(f\" {method}: {results[method]['mean']:.4f} ms (std={results[method]['std']:.4f})\")\n", + " except Exception as e:\n", + " print(f\" {method}: Skipped due to {type(e).__name__} (Triton version compatibility)\")\n", + " # Remove from list if it failed\n", + " methods = [m for m in methods if m in results]\n", + "\n", + "# Only plot if we have results\n", + "if results:\n", + " # Visualize the comparison\n", + " fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", + "\n", + " # Bar chart of mean times\n", + " available_methods = [m for m in methods if m in results]\n", + " means = [results[m]['mean'] for m in available_methods]\n", + " stds = [results[m]['std'] for m in available_methods]\n", + " colors = ['#2ecc71', '#e74c3c', '#3498db', '#9b59b6'][:len(available_methods)]\n", + "\n", + " axes[0].bar(available_methods, means, yerr=stds, capsize=5, color=colors, alpha=0.8)\n", + " axes[0].set_ylabel('Time (ms)')\n", + " axes[0].set_title('Mean Execution Time by Method')\n", + " axes[0].tick_params(axis='x', rotation=45)\n", + "\n", + " # Highlight cuda_event vs host_time with truncated y-axis for readability\n", + " if 'cuda_event' in results and 'host_time' in results:\n", + " cuda_mean = results['cuda_event']['mean']\n", + " host_mean = results['host_time']['mean']\n", + " \n", + " axes[1].bar(['cuda_event', 'host_time'], \n", + " [cuda_mean, host_mean], \n", + " color=['#2ecc71', '#e74c3c'], alpha=0.8)\n", + " axes[1].set_ylabel('Time (ms)')\n", + " axes[1].set_title('cuda_event vs host_time\\n(host_time catches side-streams)\\n(graph truncated for readability)')\n", + " \n", + " # Truncate y-axis to make the difference easier to see\n", + " min_val = min(cuda_mean, host_mean)\n", + " max_val = max(cuda_mean, host_mean)\n", + " margin = (max_val - min_val) * 2 # Add margin around the data\n", + " axes[1].set_ylim(min_val - margin, max_val + margin)\n", + " else:\n", + " axes[1].text(0.5, 0.5, 'Comparison unavailable', ha='center', va='center')\n", + " axes[1].set_axis_off()\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + "print(\"\\nKey insight: host_time is slightly slower due to CPU overhead,\")\n", + "print(\"but it catches ALL work on ALL streams - essential for untrusted code!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The `discard_first` Effect\n", + "\n", + "Even after warmup, the first timing trial can be affected by lazy initialization. Let's see this in action." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:49.454708Z", + "iopub.status.busy": "2025-12-17T20:56:49.454585Z", + "iopub.status.idle": "2025-12-17T20:56:49.556972Z", + "shell.execute_reply": "2025-12-17T20:56:49.556169Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Demonstrating the discard_first effect:\n", + "============================================================\n", + "[Profiling] Using timing method: cuda_event\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 15\n", + "\n", + "First trial: 0.3438 ms\n", + "Mean of all trials: 0.3434 ms\n", + "Mean without first: 0.3434 ms\n", + "First trial overhead: 0.1%\n" + ] + }, + { + "data": { + "image/png": "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4+NFAOLGjRsrfDbHjx+Xy9LT08VmzZqJAMRLly5V+ZmJ4r22q+zVpk0bjVgA4vjx4zXKyvbbTz/9VKN81KhRopOTk5iZmalRPmzYMLFZs2by9q1du1YEIC5ZsqRC3co+o4yMDBGAOG/evGq3pcyaNWs0Pvf7abtfDh8+XDQzM9MoO3nyZIVjtKye2rZrdcdRZcaPHy86ODjI78PDw8U+ffqI9vb24qpVq0RRFMWbN2+KKpVKXLp0abXbGRkZKapUKjE1NVVjOys7x4ii1N5GRkYa+9AXX3whAhAdHR3F3NxcuXzWrFkV9jdXV9dKzz/lj/my48fZ2VljmVu3bhUBaGxXGS8vL/GZZ56pUE5EDY9dHInokbdixQrs27dP41WTt956S+N9s2bNAAB79+5FQUFBvdSzKmPHjtUq7v5fvMuuGvbt2xcXL16Uu2Fq6/bt2wAACwuLKmPKpuXm5gIAvLy84OPjgy1btsgxpaWl+O677/D888/L9du2bRuaNWuGgQMHIjMzU3516dIF5ubmOHjwoMZ63N3dERAQUGkdwsLCNO5ZKruicfHiRQDA6dOn8ffff+O1117DzZs35XXl5+ejf//++Pnnn+Wuifd/fiUlJbh58yZatWoFKysrJCYmytN2796N7t27a1yhsbOzk7upaWv79u0V9st169bVahllRFHE9u3b8fzzz0MURY3PNSAgADk5OfI2bN++Hba2tpgwYUKF5Tzooxtu3rwJAGjevHmFaXW5X5apTbuW0fY46t27N9LS0pCUlARAuqLVp08f9O7dG3FxcQCkq2qiKGpcQbt/O/Pz85GZmYkePXpAFEX8+uuvFdZT/hxTpn///hrdVrt16wYAePnllzWOx7Lysn39QYSGhmosMygoCE5OTti9e3eF2ObNm1foiUBEusEujkT0yOvatWuthiHX19fHY489plHm7u6O8PBwLFmyBJs3b0bv3r0xePBgvP7663LyVl/Kj0BZlaNHj2LevHmIj4+vkETm5OTUqp5lX9rKErXKVJbEBQcH45133sHVq1fh7OyMQ4cOIT09HcHBwXLM33//jZycHNjb21e63PT0dI331W1/y5YtNd6XJQhl97L9/fffAKRh6auSk5OD5s2b486dO4iMjMS6detw9epVjW5w9ycSqamp8pfj+93f9VIbffr0qXGQEG1lZGQgOzsbX375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VBQUFMDOzg6dO3fGgAED4OLiUl/1JCIiIiIiavS0uoJ2584dfPDBB3BxccGzzz6L//3vf8jOzoaenh4uXLiAefPmwd3dHc8++ywSEhLqu85ERERERESNklZX0Ly8vODn54evvvoKAwcOhIGBQYWY1NRUfPPNNxg2bBhmz56N0aNH13lliYiIiIiIGjOtErSffvoJ7dq1qzbG1dUVs2bNwrRp03D58uU6qRwREREREVFTolUXx5qSs/sZGBjA09PzgStERERERETUVNV6FMc9e/bgyJEj8vsVK1bAx8cHr732Gm7dulWnlSMiIiIiImpKap2gRUREIDc3FwDw+++/Y+rUqXj22Wdx6dIlhIeH13kFiYiIiIiImopaDbMPAJcuXUL79u0BANu3b8dzzz2Hjz76CImJiXj22WfrvIJERERERERNRa2voBkaGqKgoAAAsH//fjz99NMAAGtra/nKGhEREREREdVera+g9erVC+Hh4ejZsydOnDiBLVu2AAD++usvPPbYY3VeQSIiIiIioqai1lfQli9fDn19fXz33XdYtWoVnJ2dAQD/+9//MGjQoDqvIBERERE1TikpwH/+A6xZI/2bkqLrGhHpXq2voLVs2RIxMTEVyj/77LM6qRARERERNW7XrwOLFgFxcUBuLqBWA4IAWFoCffoAU6cCTk66riWRbtQ6QSuTnp6O9PR0CIKgUd6xY8eHrhQRERERNU7XrwPjxgFnzwJ2doCn570ELTsb2LkTSE4GVq5kkkZNU60TtFOnTmH48OE4d+4cRFEEAKhUKoiiCJVKhdLS0jqvJBERERE1DosWScmZhwdgYHCvXK0GrK0BCwtp+pIlwKef6q6eRLpS6wRt5MiR8PLywtdffw0HBweoVKr6qBcRERERNTIpKVK3Rjs7zeTsfgYG0vTDh6V4N7cGrCCRAtQ6Qbt48SK2b9+OVq1a1Ud9iIiIiKiRio+X7jnz9Kw+zspK6uaYkMAEjZqeWo/i2L9/f/z222/1URciIiIiasTy86WujOoavoGWxeTlNUy9iJSk1lfQ1qxZg+HDh+OPP/7A448/DoNy16cHDx5cZ5UjIiIiosbDzEwaDEQQqk/SymLMzRuubkRKUesELT4+HkePHsX//ve/CtM4SAgRERERVcXPTxpKPztbGhCkKtnZUpyfX0PVjEg5at3FccKECXj99ddx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vb29Im6SbOrYHsrDNlEetomysD2Uh22iPGwTZVFae2ibG+i+pkRERERERASACRoREREREZFiMEEjIiIiIiJSCCZoRERERERECsEEjYiIiIiISCGYoBERERERESkEEzQiIiIiIiKFYIJGRERERESkEEzQiIiIiIiIFIIJGhERERERkUIwQSMiIiIiIlIIJmhEREREREQKwQSNiIiIiIhIIZigERERERERKQQTNCIiIiIiIoVggkZERERERKQQTNCIiIiIiIgUggkaERERERGRQujrugJERESNVUoKEB8P5OcDZmaAnx/g5qbrWhERkZIxQSMiIqpj168DixYBcXFAbi6gVgOCAFhaAn36AFOnAk5Ouq4lEREpERM0IiKiOnT9OjBuHHD2LGBn9//t3XtQVAUfxvFnuSPX0BQ2QanBvJuKOGhvvpOoqZmOU04NEmb94YghmqaToo7lBSvzmoaVU6alf4SVo+MgKV4mkCQo826kmBdeSwUxktk97x+8UiSibwLnyH4/MztyLss+Mz/X09M5e1Z66KE/C9rly9KXX0onT0rvvktJAwDcjM+gAQBQj956q6qcPfigFBJSVc6kqj9DQqrW//ijtHixuTkBANZEQQMAoJ78/HPVZY333y95eta+j6dn1fbs7Kr9AQD4KwoaAAD15Jtvqj5zFhxc937BwVX75eQ0RioAwL2EggYAQD0pL6+6lNHtNkfXG/tcvdo4uQAA9w4KGgAA9cTPr+pmIE5n3fvd2Mffv3FyAQDuHRQ0AADqSWxs1a30L1+ue7/Ll6v2i41tjFQAgHsJBQ0AgHrStq30r39J//mPVFlZ+z6VldLFi1K/flKbNo0aDwBwD6CgAQBQj6ZMkTp1kn76Sfrttz8vd3Q6q5aLiqSOHaXJk83NCQCwJgoaAAD1KCys6kuohw+vOlt28uSfj8pK6amn+JJqAMCteZgdAACApiYsTHrzzarvOcvJqbpbo79/1WfOuKwRAFAXChoAAA2kbduqBwAAd4pLHAEAAADAIihoAAAAAGARFDQAAAAAsAgKGgAAAABYBAUNAAAAACyCggYAAAAAFkFBAwAAAACLoKABAAAAgEVQ0AAAAADAIjzMDtCUGYYhSSotLTU5ieR0OlVWViYfHx+5udHLzcY8rIeZWA8zsRbmYT3MxHqYibVYbR43OsGNjnArFLQGVFZWJkkK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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "The first trial often shows initialization overhead even after warmup.\n", + "Using discard_first=1 (default) gives more consistent measurements.\n" + ] + } + ], + "source": [ + "# Demonstrate the discard_first effect\n", + "# Even after warmup, the first timing trial can have higher overhead\n", + "\n", + "print(\"Demonstrating the discard_first effect:\")\n", + "print(\"=\" * 60)\n", + "\n", + "# Create fresh data and clear caches to make initialization overhead more visible\n", + "torch.cuda.empty_cache()\n", + "a_fresh, b_fresh = get_data(2048)\n", + "\n", + "# Collect trials with discard_first=0 to see ALL trials including the first one\n", + "timing_fn = get_timing_function(\"cuda_event\")\n", + "times_all = timing_fn(\n", + " simple_mm, [a_fresh, b_fresh],\n", + " num_warmup=3,\n", + " num_trials=15,\n", + " discard_first=0, # Keep ALL trials including first\n", + " verbose=False,\n", + " device=DEVICE\n", + ")\n", + "\n", + "# Calculate statistics\n", + "first_trial = times_all[0]\n", + "remaining_trials = times_all[1:]\n", + "mean_all = np.mean(times_all)\n", + "mean_remaining = np.mean(remaining_trials)\n", + "\n", + "print(f\"\\nFirst trial: {first_trial:.4f} ms\")\n", + "print(f\"Mean of all trials: {mean_all:.4f} ms\")\n", + "print(f\"Mean without first: {mean_remaining:.4f} ms\")\n", + "print(f\"First trial overhead: {((first_trial / mean_remaining) - 1) * 100:.1f}%\")\n", + "\n", + "# Visualize the effect with a scatter plot\n", + "plt.figure(figsize=(10, 5))\n", + "plt.scatter(range(len(times_all)), times_all, alpha=0.7, color='blue', s=60)\n", + "plt.scatter([0], [first_trial], color='red', s=100, zorder=5, label=f'First trial: {first_trial:.3f}ms')\n", + "plt.axhline(y=mean_remaining, color='green', linestyle='--', alpha=0.7, \n", + " label=f'Mean (without first): {mean_remaining:.3f}ms')\n", + "plt.axhline(y=mean_all, color='orange', linestyle=':', alpha=0.7,\n", + " label=f'Mean (all): {mean_all:.3f}ms')\n", + "plt.xlabel('Trial Index')\n", + "plt.ylabel('Time (ms)')\n", + "plt.title('First Trial Overhead Effect (after warmup)')\n", + "plt.legend(loc='upper right')\n", + "plt.grid(True, alpha=0.3)\n", + "plt.show()\n", + "\n", + "print(\"\\nThe first trial often shows initialization overhead even after warmup.\")\n", + "print(\"Using discard_first=1 (default) gives more consistent measurements.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HwsjlhAazX2j" + }, + "source": [ + "## The \"Agent\" Trap: Reward Hacking via Hidden Streams\n", + "\n", + "When evaluating LLM-generated kernels (like with [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), you're not just fighting measurement noise—you're fighting an optimizer that may inadvertently discover exploits in your harness.\n", + "\n", + "One such exploit: launching work on a **side stream** to make the kernel appear instantaneous." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:49.559529Z", + "iopub.status.busy": "2025-12-17T20:56:49.559407Z", + "iopub.status.idle": "2025-12-17T20:56:49.893598Z", + "shell.execute_reply": "2025-12-17T20:56:49.892579Z" + }, + "id": "UuwtML39zX2j", + "outputId": "95ebbb26-e415-491a-da30-6a78ce387906" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Standard benchmark on tricky kernel: 0.0577 ms\n" + ] + } + ], + "source": [ + "def tricky_agent_kernel(a, b):\n", + " \"\"\"A 'clever' kernel that games the benchmarking harness.\"\"\"\n", + " # The agent creates a new stream to \"optimize\"\n", + " s = torch.cuda.Stream()\n", + " with torch.cuda.stream(s):\n", + " # This work happens on a side channel!\n", + " result = torch.matmul(a, b)\n", + " return result\n", + "\n", + "print(f\"Standard benchmark on tricky kernel: {final_benchmark(tricky_agent_kernel, a, b):.4f} ms\")\n", + "# Likely reports ~0.00ms or very close to it!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3HXns_XizX2j" + }, + "source": [ + "**The Issue:**\n", + "Standard benchmarking tools (including `do_bench`) record events on the *current default stream*.\n", + "\n", + "1. Benchmark starts timer on Stream A (the default stream).\n", + "2. Agent launches work on Stream B and returns immediately.\n", + "3. Benchmark stops timer on Stream A.\n", + "\n", + "Since Stream A had no work, the timer reports `~0.00ms`, while Stream B is still churning away in the background.\n", + "\n", + "**Why this matters for evals:**\n", + "If your reward signal is \"lower time = better score,\" an agent that discovers this pattern will be rewarded for producing *broken* code. The kernel \"runs\" instantly because you never measured it at all.\n", + "\n", + "**Mitigations:**\n", + "- **Wall-clock + full device sync:** Trade precision for correctness (catches all streams, but includes CPU overhead)\n", + "- **Static analysis:** Reject submissions that create `torch.cuda.Stream()` objects\n", + "- **Manual inspection:** For high-stakes evals, benchmark kernels in isolation outside the automated harness\n", + "\n", + "### How KernelBench Addresses This\n", + "\n", + "KernelBench's timing module provides the **`host_time`** method specifically designed for evaluating untrusted code:\n", + "\n", + "**Use `torch.cuda.synchronize()`** before AND after timing - this waits for ALL streams on the device, not just the default stream\n", + "\n", + "```python\n", + "# For trusted code (faster, but can be fooled)\n", + "timing_fn = get_timing_function(\"cuda_event\")\n", + "\n", + "# For untrusted/agent code (catches side-streams)\n", + "timing_fn = get_timing_function(\"host_time\")\n", + "```\n", + "\n", + "The trade-off: `host_time` includes some CPU overhead in the measurement, but **correctness beats precision**. However, note that host_time should be pretty similar to sync_time. Therefore, if both times are within a some percent of each other, you can be pretty sure that the kernel is running correctly and score using sync_time." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:49.895966Z", + "iopub.status.busy": "2025-12-17T20:56:49.895842Z", + "iopub.status.idle": "2025-12-17T20:56:49.905191Z", + "shell.execute_reply": "2025-12-17T20:56:49.904402Z" + }, + "id": "KbAFqiyizX2j", + "outputId": "6bc91db4-935c-4af9-bdc9-be3c50e890c4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Robust benchmark on tricky kernel: 2.7711 ms\n", + "Robust benchmark on normal kernel: 2.7269 ms\n" + ] + } + ], + "source": [ + "def benchmark_untrusted(func, *args):\n", + " \"\"\"Benchmark untrusted code by using wall-clock time with full device sync.\n", + "\n", + " This trades some precision (includes CPU overhead) for correctness\n", + " (catches work on any stream).\n", + " \"\"\"\n", + " torch.cuda.synchronize() # Clear any pending work\n", + " start = time.perf_counter()\n", + " func(*args)\n", + " torch.cuda.synchronize() # Wait for ALL streams\n", + " end = time.perf_counter()\n", + " return (end - start) * 1000\n", + "\n", + "print(f\"Robust benchmark on tricky kernel: {benchmark_untrusted(tricky_agent_kernel, a, b):.4f} ms\")\n", + "print(f\"Robust benchmark on normal kernel: {benchmark_untrusted(simple_mm, a, b):.4f} ms\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:49.907214Z", + "iopub.status.busy": "2025-12-17T20:56:49.907092Z", + "iopub.status.idle": "2025-12-17T20:56:50.122347Z", + "shell.execute_reply": "2025-12-17T20:56:50.121575Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Side-Stream Detection Experiment:\n", + "============================================================\n", + "[Profiling] Using timing method: cuda_event\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", + "[Profiling] Using timing method: host_time\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", + "\n", + "Tricky kernel with cuda_event: 0.1000 ms (FOOLED!)\n", + "Tricky kernel with host_time: 2.8900 ms (CORRECT)\n", + "Normal kernel with host_time: 2.8100 ms (reference)\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcRVJREFUeJzt3Xd4VGX+/vF70ia9kUYJhE5CDUUBhViACMqCjaZLE8sqsogV3a+AygJW1orgCqjLiopgoymCIiBVQHoniAkkQBLSQ+b5/cGPWYYESEKGSeD9uq65LuY5zznnc06YJ3PnNIsxxggAAAAAAFQ4N1cXAAAAAADAlYrQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAXERMTo8GDB1+034wZM2SxWHTgwAGn14Qrxw033KAbbrjB1WVcdhaLRWPHjnV1GZA0duxYWSwWpaWlubqUSzZ48GDFxMS4ugwAcEDoBnDV+v3333XXXXepTp068vb2Vs2aNdW1a1e99dZbri7NwTfffKOEhARFRETI19dX9erVU58+fbRw4UJ7nz///FNjx47Vxo0bXVeokyxbtkwWi8X+slqtioyM1A033KB//vOfSk1NLfeyL9d+27Ztm8aOHcsfZCBJysnJ0dixY7Vs2TJXl+Iyl7IPruTxDsCVycPVBQCAK6xcuVI33nijateurfvvv19RUVE6dOiQfv31V/3rX//So48+au+7c+dOubm55m+Ur776qp588kklJCRo9OjR8vX11Z49e/TDDz/o008/1S233CLp9JfQcePGKSYmRq1atXJJrc42YsQItWvXTkVFRUpNTdXKlSs1ZswYvf766/rss8900003lXmZl2u/bdu2TePGjdMNN9xQ7Cjc4sWLnbZeVE45OTkaN26cJF2VZzlIl7YPLvS5nTZtmmw2WwVVCQAVg9AN4Ko0fvx4BQUFae3atQoODnaYdvToUYf3Vqv1Mlb2P6dOndKLL76orl27lhjMzq2zLHJycuTr63sp5V12nTp10l133eXQtmnTJnXr1k133nmntm3bpurVq7uouvLz8vJydQnAFcPT09PVJQBAMZxeDuCqtHfvXjVt2rRY4JakiIgIh/clXdO9detW3XTTTfLx8VGtWrX0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B2eUZ7wrL2f8/AFcfTjSDeCq9OijjyonJ0e33367mjRpooKCAq1cudJ+pOvc073P9tRTT+njjz/WLbfcor///e/y8/PT1KlT7UcozwgMDNR7772nv/71r2rdurX69eun8PBwJSUl6bvvvtN1111X7NnSZ8vJyVHHjh3Vvn173XLLLYqOjlZ6errmzZun5cuXq3fv3oqPj5d0OgQFBwdrypQpCggIkJ+fn6699lrVrVv3vMv/61//qs8++0wPPfSQli5dquuuu05FRUXasWOHPvvsMy1atEht27ZVt27d5OXlpZ49e+rBBx9UVlaWpk2bpoiIiFI/97kiLF++XHl5eSoqKtKxY8e0YsUKff311woKCtLcuXMdTv2cOHGili5dqmuvvVb333+/4uLidPz4cW3YsEE//PCD/bTwC+23Dz74QN27d1fTpk01ZMgQ1axZU4cPH9bSpUsVGBiob775RpL0z3/+U4sXL1ZCQoIeeOABxcbGKjk5WZ9//rl++eUXBQcHq1WrVnJ3d9ekSZOUkZEhq9Vqf+75uR544AG9//77Gjx4sNavX6+YmBh98cUXWrFihSZPnmy/dr0sDh8+rNjYWA0aNOiiN1N78803df3116t169Z64IEHVLduXR04cEDfffedNm7cKEnq16+fnn76ad1+++0aMWKEcnJy9N5776lRo0YONz1r1aqV+vfvr3fffVcZGRnq2LGjlixZoj179hRb72233aaPP/5YQUFBiouL06pVq/TDDz+oWrVqZdrW+vXr66WXXtLo0aN14MAB9e7dWwEBAdq/f7/mzp2rBx54QE888YS9f+vWrdWgQQM999xzys/Pdzi1XLr0z3FJfHx8FBcXp9mzZ6tRo0YKDQ1Vs2bNLnotfd++ffX888/L29tb9913n8OZECdPnlStWrV01113qWXLlvL399cPP/ygtWvXOpw9cClatmypQYMGaerUqUpPT1dCQoLWrFmjmTNnqnfv3rrxxhslSTNnztS7776r22+/XfXr19fJkyc1bdo0BQYG2oN7efeBVL7xrryc8fMHcBW6zHdLB4BKYcGCBWbo0KGmSZMmxt/f33h5eZkGDRqYRx991Bw5csSh77mPDDPGmM2bN5uEhATj7e1tatasaV588UXz73//u9hzuo05/cirxMREExQUZLy9vU39+vXN4MGDzbp16y5YY2FhoZk2bZrp3bu3qVOnjrFarcbX19fEx8ebV155xeTn5zv0/+qrr0xcXJzx8PBweJxOQkKCadq0aYnrKCgoMJMmTTJNmzY1VqvVhISEmDZt2phx48aZjIwMe7+vv/7atGjRwnh7e5uYmBgzadIk8+GHHxbb3jp16phbb7212HokFXuU0ZlH+bzyyisX3A9nHhl25uXp6WnCw8NN586dzfjx483Ro0dLnO/IkSPmkUceMdHR0cbT09NERUWZm2++2UydOrVU+80YY3777Tdzxx13mGrVqhmr1Wrq1Klj+vTpY5YsWeKwjIMHD5qBAwea8PBwY7VaTb169cwjjzzi8DOaNm2aqVevnnF3d3d4fNi5jww7U/uQIUNMWFiY8fLyMs2bNy/2eKQL7T+d8yimsjwyzBhjtmzZYm6//XYTHBxsvL29TePGjc3//d//OfRZvHixadasmfHy8jKNGzc2n3zySYnP6c7NzTUjRoww1apVM35+fqZnz57m0KFDxWo8ceKEfZv9/f1NYmKi2bFjR4mfv9KYM2eOuf76642fn5/x8/MzTZo0MY888ojZuXNnsb7PPfeckWQaNGhw3uWV5nM8aNAg4+fnV2zekvbLypUrTZs2bYyXl1epH521e/du++fgl19+cZiWn59vnnzySdOyZUsTEBBg/Pz8TMuWLe3PB7+QM/WlpqY6tE+fPr3YZ7ywsNCMGzfO1K1b13h6epro6GgzevRo+yO2jDFmw4YNpn///qZ27drGarWaiIgIc9tttxUb88qzD8443+f2fI8MO/dzcr5HEZ7Z5nMfd1becRwAjDHGYowT77QCAAAAAMBVjGu6AQAAAABwEq7pBgAAVUJKSsoFp/v4+Dg8Mx5VS0FBwUUfwxcUFFTiIxABoDLj9HIAAFAlXOxRUaW5URwqr2XLltlvxnY+06dP1+DBgy9PQQBQQTjSDQAAqoSLPc++Ro0al6kSOEPLli0v+jNu2rTpZaoGACoOR7oBAAAAAHASbqQGAAAAAICTXHWnl9tsNv35558KCAi46LVhAAAAAACUxBijkydPqkaNGnJzu8DxbBc+I9y8++67pnnz5iYgIMAEBASY9u3bm/nz519wns8++8w0btzYWK1W06xZM/Pdd9+VaZ2HDh0yknjx4sWLFy9evHjx4sWLF69Lfh06dOiCGdSlR7pr1aqliRMnqmHDhjLGaObMmerVq5d+++23Em+UsXLlSvXv318TJkzQbbfdplmzZql3797asGGDmjVrVqp1BgQESJIOHTqkwMDACt0eAAAAAMDVITMzU9HR0faMeT6V7kZqoaGheuWVV3TfffcVm9a3b19lZ2fr22+/tbe1b99erVq10pQpU0q1/MzMTAUFBSkjI4PQDQAAAAAol9Jmy0pzI7WioiJ9+umnys7OVocOHUrss2rVKnXp0sWhLTExUatWrbocJQIAAAAAUCYuv5Ha77//rg4dOigvL0/+/v6aO3eu4uLiSuybkpKiyMhIh7bIyEilpKScd/n5+fnKz8+3v8/MzJR0+oZqNputArYAAAAAAHC1KW2edHnobty4sTZu3KiMjAx98cUXGjRokH766afzBu+ymjBhgsaNG1esPTU1VXl5eRWyDgAAAADA1eXkyZOl6ufy0O3l5aUGDRpIktq0aaO1a9fqX//6l95///1ifaOionTkyBGHtiNHjigqKuq8yx89erRGjRplf3/mYvfw8HCu6QYAAAAAlIu3t3ep+rk8dJ/LZrM5nA5+tg4dOmjJkiUaOXKkve37778/7zXgkmS1WmW1Wou1u7m5XfhZagAAAAAAnEdp86RLQ/fo0aPVvXt31a5dWydPntSsWbO0bNkyLVq0SJI0cOBA1axZUxMmTJAk/f3vf1dCQoJee+013Xrrrfr000+1bt06TZ061ZWbAQAAAABAiVwauo8ePaqBAwcqOTlZQUFBatGihRYtWqSuXbtKkpKSkhz+etCxY0fNmjVL//jHP/Tss8+qYcOGmjdvXqmf0Q0AAAAAwOVU6Z7T7Ww8pxsAAAAAcKmq3HO6AQAAAAC40hC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAk3i4ugAAQNXVdmpbV5cAoBzWPbDO1SUAwFWD0A0AAC4ouyBbR7OPKsg7SN4e3rK6W+Xu5u7qsgAAqBII3QAA4IJO5J3Q8bzjOp533N7m4eYhq7tV/l7+qhVYy4XVAQBQuRG6AQDABdUMqKnjucd1ynZKklTNp5o83T2VX5SvIlPk4uoAAKjcuJEaAAC4IIvFouigaBkZ+Xv5Ky03TTmFOaoVUEt1guq4ujwAACo1QjcAALioYGuw/Dz9dMp2SvWC6ym7MFtbU7fqRO4JV5cGAEClRugGAAAXZbFYFB0YrdxTuSoyRYoLi1OAV4D2pe/T/vT99lPPAQCAI0I3AAAoFT8vP4V4hyg1J1We7p6qF1JPMUExSs9L17bUbcrMz3R1iQAAVDrcSA0AAJRaTHCMCooKJJ0++l3Nt5oCrAE6kH5Au4/vVrhvuGoF1pKbhb/rAwAgcaQbAACUgZvFTd4e3g5tXu5eahjaUNGB0UrLSdO21G3KLsh2UYUAAFQuHOkGAACXzGKxKMIvQoHWQO1P368dx3Yoyj9K1f2rc9QbLte2rasrAFBW69a5uoKKw29BAABQYbw9vNWkWhPV8K+hlKwU7UjbodzCXFeXBQCAyxC6AQBAhbJYLKoeUF2xYbEyMtqetl1Hso7IGOPq0gAAuOwI3QAAwCl8PX0VGxarcL9w/XHyD+06vkv5p/JdXRYAAJcVoRsAADiNm8VN0YHRahTaSAVFBdqWtk1pOWkc9QYAXDUI3QAAwOkCrAGKC4tTiHeIDmYc1N4Te1VYVOjqsgAAcDpCNwAAuCzc3dwVExyj+iH1lV2Yra2pW3Ui94SrywIAwKl4ZBgAALisgr2D5efpp6TMJO1L36fQ/FBFB0bLw42vJQCAKw9HugEAwGXn6e6pesH1FBMUo4y8DG1L3abM/ExXlwUAQIUjdAMAAJewWCyq5ltNceFx8vbw1u7ju5WUkSSbsbm6NAAAKgyhGwAAuJSXu5cahjZUdGC00nLStC11m7ILsl1dFgAAFYLQDQAAXM5isSjCL0Jx4XFyd3PXjmM7dPjkYY56AwCqPEI3AACoNLw9vNWkWhPV8K+hlKwU7UjbodzCXFeXBQBAuRG6AQBApWKxWFQ9oLpiw2JlZLQ9bbtSslJkjHF1aQAAlBmhGwAAVEq+nr6KDYtVhF+EDp88rF3Hdyn/VL6rywIAoEwI3QAAoNJys7ipVmAtNQptpIKiAm1L26a0nDSOegMAqgxCNwAAqPQCrAGKC4tTiHeIDmYc1N4Te1VYVOjqsgAAuChCNwAAqBLc3dwVExyj+iH1lV2Yra2pW3Ui94SrywIA4II8XF0AAABAWQR7B8vP009JmUnal75PoXmhig6KlocbX2sAAJUPR7oBAECV4+nuqXrB9RQTFKOM/AxtS92mzPxMV5cFAEAxhG4AAFAlWSwWVfOtprjwOHl7eGv38d1KykhSka3I1aUBAGBH6AYAAFWal7uXGoY2VHRgtNJy0rQ9bbuyCrJcXRYAAJII3QAA4ApgsVgU4RehuPA4ubu5a+exnTp88rBsxubq0gAAVzlCNwAAuGJ4e3irSbUmquFfQylZKdqRtkO5hbmuLgsAcBUjdAMAgCuKxWJR9YDqig2LlZHR9rTtSslKkTHG1aUBAK5ChG4AAHBF8vX0VWxYrCL8InT45GHtOr5L+afyXV0WAOAqQ+gGAABXLDeLm2oF1lKj0EYqKCrQtrRtSstJ46g3AOCyIXQDAIArXoA1QHFhcQrxDtHBjIPae2KvCosKXV0WAOAqQOgGAABXBXc3d8UEx6h+SH1lF2Zra+pWncg94eqyAABXOEI3AAC4qgR7B6tpeFMFWAO0L32f9p/Yr1O2U64uCwBwhSJ0AwCAq46Hm4fqBddTTFCMMvIztC11mzLzM11dFgDgCkToBgAAVyWLxaJqvtUUFx4nbw9v7T6+W0kZSSqyFbm6NADAFYTQDQAArmpe7l5qGNpQ0YHRSstJ0/a07coqyHJ1WQCAKwShGwAAXPUsFosi/CIUFx4nDzcP7Ty2U4dPHpbN2FxdGgCgiiN0AwAA/H/eHt5qXK2xavjXUEpWinak7VBuYa6rywIAVGGEbgAAgLNYLBZVD6iu2LBYGRltT9uulKwUGWNcXRoAoAoidAMAAJTA19NXsWGxivCL0OGTh7Xr2C7ln8p3dVkAgCqG0A0AAHAebhY31QqspUahjVRgK9C2tG1KzUnlqDcAoNRcGronTJigdu3aKSAgQBEREerdu7d27tx5wXlmzJghi8Xi8PL29r5MFQMAgKtRgDVAcWFxCvUOVVJGkvac2KPCokJXlwUAqAJcGrp/+uknPfLII/r111/1/fffq7CwUN26dVN2dvYF5wsMDFRycrL9dfDgwctUMQAAuFq5u7mrTnAd1Q+pr5zCHG1N3aoTuSdcXRYAoJLzcOXKFy5c6PB+xowZioiI0Pr169W5c+fzzmexWBQVFeXs8gAAAIoJ9g6Wv5e/DmYc1L70fQrNC1V0ULQ83Fz6tQoAUElVqt8OGRkZkqTQ0NAL9svKylKdOnVks9nUunVr/fOf/1TTpk1L7Jufn6/8/P/d9CQzM1OSZLPZZLPx7E0AuBQWWVxdAuASnm6eqh9cX8fzjispI0knU08qJjhGQdYgV5dWKlfbdyALQxVQ5VSFYaq0Y2mlCd02m00jR47Uddddp2bNmp23X+PGjfXhhx+qRYsWysjI0KuvvqqOHTtq69atqlWrVrH+EyZM0Lhx44q1p6amKi8vr0K3AQCuNg28Gri6BMC1rFIzv2Zac2yNdh/frQb+DdQqpFWlP+p99OhRV5dwWTVgqAKqnKowTJ08ebJU/Symktx+829/+5sWLFigX375pcTwfD6FhYWKjY1V//799eKLLxabXtKR7ujoaJ04cUKBgYEVUjsAXK2u/eBaV5cAVArGGKXmpOqPzD/k6e6pusF15e/l7+qyzmv1sNWuLuGyupahCqhyVleBYSozM1MhISHKyMi4YLasFH+GHT58uL799lv9/PPPZQrckuTp6an4+Hjt2bOnxOlWq1VWq7VYu5ubm9zceGIaAFwKo0rxd1vA9SxSuF+4AqwBOpB+QDuO7VCUX5SqB1SXm6Xyfd+42r4DVY5DTADKoioMU6UdS126KcYYDR8+XHPnztWPP/6ounXrlnkZRUVF+v3331W9enUnVAgAAFB63h7ealytsWr411BKdop2pO1QbmGuq8sCALiQS0P3I488ok8++USzZs1SQECAUlJSlJKSotzc//1yGjhwoEaPHm1//8ILL2jx4sXat2+fNmzYoHvvvVcHDx7UsGHDXLEJAAAADiwWi6oHVFdsWKyMjLanbVdKVooqyRV9AIDLzKWnl7/33nuSpBtuuMGhffr06Ro8eLAkKSkpyeGw/YkTJ3T//fcrJSVFISEhatOmjVauXKm4uLjLVTYAAMBF+Xr6KjYsVn+e/FOHTx5WRl6GYoJjZPUoftkbAODKVWlupHa5ZGZmKigo6KIXuwMALq7t1LauLgGoEk7mn9SBjAM6ZTulWoG1FOYTJosLn2O17oF1Llu3K7RlqAKqnHVVYJgqbbasApenAwAAVG0B1gDFhcUp1DtUSRlJ2nNijwqLCl1dFgDgMiB0AwAAXAbubu6qE1xH9UPqK6cwR1tTt+p47nFXlwUAcLJK8cgwAACAq0Wwd7D8vfx1MOOg9qfvV3peumoH1ZaHG1/LAOBKxJFuAACAy8zDzUP1guupbnBdZeZnalvqNmXmZ7q6LACAExC6AQAAXMBisSjUJ1Rx4XHy9vDW7uO7lZSRpCJbkatLAwBUIEI3AACAC3m5e6lhaENFB0YrLSdN29O2K6sgy9VlAQAqCKEbAADAxSwWiyL8IhQXHicPNw/tPLZThzMPy2Zsri4NAHCJCN0AAACVhLeHtxpXa6waATWUkp2iHWk7lFuY6+qyAACXgNANAABQiVgsFlX3r67YsFgZGW1P266UrBQZY1xdGgCgHAjdAAAAlZCvp69iw2IV4RehwycPa+exnco/le/qsgAAZUToBgAAqKTcLG6qFVhLjao1UqGtUNvStik1J5Wj3gBQhRC6AQAAKrkArwDFhcUp1DtUSRlJ2nNijwqLCl1dFgCgFAjdAAAAVYC7m7vqBNdRg5AGyinM0dbUrTqee9zVZQEALoLQDQAAUIUEeQepaXhTBVoDtT99v/ad2KdTtlOuLgsAcB6EbgAAgCrGw81DdYPrqm5wXWXmZ2pb6jZl5Ge4uiwAQAkI3QAAAFWQxWJRqE+o4sLj5OPhoz3H9+hgxkEV2YpcXRoA4CyEbgAAgCrMy91LDUIbqHZgbR3PPa7taduVVZDl6rIAAP8foRsAAKCKs1gsCvcLV2xYrDzcPLTz2E4dzjwsm7G5ujQAuOoRugEAAK4Q3h7ealytsWoE1NCR7CPakbZDOYU5ri4LAK5qhG4AAIAriMViUXX/6moS1kRGRjvSdiglK0XGGFeXBgBXJUI3AADAFcjX01exYbGK8IvQ4ZOHtfPYTuWfynd1WQBw1SF0AwAAXKHcLG6qFVhLjas1VqGtUNvStik1O5Wj3gBwGRG6AQAArnD+Xv6KC4tTqE+okjKT1GNWD/158k9XlwUAVwVCNwAAwFXA3c1ddYLqqEFIA21M2ahm7zbT7C2zXV0WAFzxCN0AAABXkSDvIG352xZ1rd9V/eb0U/85/XU897irywKAKxahGwAA4CpTzbeaZt81W/+9879auGehmr3bTAv3LHR1WQBwRSJ0AwAAXKX6NeunLX/bohaRLdT9P931t2//pqyCLFeXBQBXFEI3AADAVaxmYE0tuGeB3rv1PX20+SO1mtJKK5JWuLosALhiELoBAACuchaLRQ+1fUibHtqkCL8IdZ7RWaN/GM1zvQGgAhC6AQAAIElqENpAy4cs1/ibxuu1Va/pmg+u0eYjm11dFgBUaYRuAAAA2Lm7ueuZ65/R2vvXyhijtlPbauIvE1VkK3J1aQBQJRG6AQAAUEzLqJZae/9ajeowSs8ueVadZ3TW3uN7XV0WAFQ5hG4AAACUyOph1cQuE/XzkJ+VkpWillNaasq6KTLGuLo0AKgyCN0AAAC4oOtrX69ND23SvS3u1d+++5t6zOqhP0/+6eqyAKBKIHQDAADgovy9/DXltimaP2C+NqVsUrN3m+nTLZ+6uiwAqPQI3QAAACi17g276/e//a5u9bup/5z+6vdFPx3PPe7qsgCg0iJ0AwAAoEyq+VbTp3d9qv/e+V8t3rtYzd5tpgW7F7i6LAColAjdAAAAKJd+zfrp97/9rhaRLdRjVg899O1DyirIcnVZAFCpELoBAABQbjUDa2rBPQv03q3v6ePNH6vllJZakbTC1WUBQKVB6AYAAMAlsVgseqjtQ9r00CZF+Uep0/ROeuaHZ5R/Kt/VpQGAyxG6AQAAUCEahDbQz4N/1oSbJ+j1Va+r3bR22pSyydVlAYBLEboBAABQYdzd3PX09U9r7f1rZbFY1G5aO/36x6+uLgsAXMbD1QUAAADgytMyqqXWDFujmZtmKiY4xtXlAIDLELoBAADgFFYPqx5o84CrywAAl+L0cgAAAAAAnITQDQAAAACAkxC6AQAA4FSWcRbN2zGvVH3HLhurVlNaXdZ1VhXre1qUHjXP1WUAKCNCNwAAQCWQVZCl9cnrtfv4bpfVcCD9gCzjLNqYsvGC/ZYdWCbLOIvS89JLtdzkx5PVvUH3Sy/QiQ60Gqw97XpX+HKdGZTzfQ5ofU+LcgI3OmX5ACoGoRsAAKASSMtJU4RvhLIKslRQVODqcirEme2I8o+S1cPq4moAwDUI3QAAAC5WZCvSibwTCvcLV5A1SMdyjxXrk56Xri1Ht2hD8gbtPLZTx3KOaX3yep2ynbL3ySrI0s60ndqQvEGbj2xWUkaSimxF9um/H/1dyVnJGvrVUAVMCFDtN2pr6vqp9ul1/1VXkhT/frws4yy6YcYNxeo4kH5AN868UZIUMilElnEWDZ43WJJ0w4wbNHz+cI1cOFJhL4cp8ZNEScVP9f4j8w/1n9NfoZNC5fdPP7Wd2lar/1hd4r7Ze3yv6v2rnobPHy5jTIl9dh/brc7TO8v7JW/FvROn7/d+X6xPgfch7WvTRxtvCdbGxFDtaddL+T4HJEl/NhqrY9EzlRH1ldb3tGh9T4tOVlt20fnOSIv+UFtvaKoNPaza1LW6kpoNP72/b445vQ3tbtf6nhb7e0lKj/xK2zq31oYe3vr9pnr6s9E4Gcv/fpZ5fru1s2Nnbejhra03xCkzrPg2AagaeGQYAACAi53IOyFvD295e3gr1CdUf2T+oSi/KFksFklS/ql87TuxTxF+EQrzDVNOYY7+yPzDYRn5p/K1+/hu1QiooTrBdXTKdkpJGUk6lHnI4TnZR7KOqG2Ntnq207P6YtsX+tt3f1NCnQQ1DmusNcPW6JoPrtEPf/1BTSOaysvdq1it0YHRmtNnju787E7tHL5TgdZA+Xj42KfP3DRTf2v7N60YuqLEbc0qyFLCjATVDKipr/t/rSj/KG1I3iCbsRXru/nIZiV+kqj74u/TSze9VOLybMamOz67Q5F+kVo9bLUy8jM0cuFIhz7GUqjd7RPld6KDGq9YLhkPpTR8Sbvb36K4ZZsVufcJ5flvV5FnpmI2TpckuReEXnQ+N+Ol1Drv6VDTUaq5faKCjnZXkUeGskJPb3uT5Wu1OTFCdX6brqDUWyTjLkk6Gbpc++MHqvaWN+V/vJPyfffqYMvTj1arsWuMjGza2/YOeeZHqskvq1XkkaFDzRy3CUDVQegGAABwsbScNIX6hEqSgqxBOmgOKqsgSwHWAElSak6qrB5W1QqsJUny9vBW7qlcpWSl2JeRnJWsUJ9QRfpF2ttqB9XWzmM7VTuottwsp09wDPIO0sPtHpYkPX3d03rj1ze09MBSNQ5rrHC/cElSNd9qivKPKrFWdzd3e60RfhEK9g52mN4wtKFe7vryebd11u+zlJqdqrX3r7Uvp0Fog2L9Vh5aqdtm3abnOj2nxzs+ft7l/bDvB+1I26FF9y5SjYAakqR/3vxPdf/P/64hP15jtozFpjqbPpBFp/+QUWfjdG3sHqyssGUKTO0mN5uPbLZ8eeb/b7uP1fzkovMlN3xJkXsfV+T+v9vn88toJ0nyLDi9Pz1OBTssN7nROEXteUbV/hgkSbLm1FONHS/qcNxTqrFrjE6G/6A8/x1q+OsieeWf3qaa2/+pPe0r93XxAEpG6AYAAHChvFN5yi7MVv2Q+pIki8WiEO8QpeWm2UN3/ql8+Xn6Ocx37vvcU7nKLczV8dzjxdaRfypfPp6nj0affVTaYrEoyj9KR7OPVtj2tKne5oLTN6ZsVHz1eHvgLklSRpK6ftxV428ar5HtR15wedtTtys6MNoeuCWpQ60ODn1yAzcp33ePNnYPcGg3bnnK99173mVfbL5Cr6Mq9PlTgWk3X7DGkpabFbpCKQ3H/2+ZliIZ9zzZ3HOU679dXrnR9sAtSf4nOpS0KABVAKEbAADAhdJy0iRJm49udmi3yKLagbXl7uZequXYbDaF+YYpwi+i2LSzTxM/c8r62esp6dTu8vLz8rvg9LND//mE+4WrRkAN/XfLfzU0fqgCrYGXVFORR5Z8M9qo7ob/FJt25mh0ueYz5bs9UpFHlmrsHKfg5DuKTbMUeZdrmQAqL0I3AACAixhjdCz3mGoF1CoWLPee2KvjuccV7hcuq4dVmfmZDtOzC7Md3vt6+irvVJ68Pcof2s6E87NvvnYp/UrSIrKFPvjtAx3PPX7eo90+Hj76tv+36jGrhxI/SdTiexfbj/qfKzY8VocyDyn5ZLKqB1SXJP36x68OfXwzWutEjdnyLIiQ+6mSA7zF5iWpqMzzeeXEKDNsiQKO3Xie5XrKWIovN89/p7xzip9WL0k+WbEq8DmkQmuyPPNPb1NWyK/F+llzY9Tmm5JvLgeg8uDu5QAAAC6SkZ+hIluRwnzD5OPp4/AK9g5WWu7po+DhvuHKO5WnPzL/UN6pPB3PPa5jOafvcH7mWuNI/0hlFWQpKSNJOYU5yjuVp/S8dCVlJJW6ngi/CPl4+GjhnoU6knVEGXkZJfarE1RHFln07a5vlZqdqqyCrFKvo3/z/oryj1LvT3trRdIK7TuxT3O2zdGqQ6sc+vl5+em7Ad/Jw81D3f/T/bzr6FKvixpVa6RB8wZpU8omLT+4XM/9+JxDn2qH75FHQZj2tOulk6HLle+zXyerLVNS0xEq8D59QzqvnBjlBm5Wnt9OnfJKk7EUlmq+GjvH6kj913S07pvK89utnKANOhrzln3dXjkxOhm2RIXWFJ3yPCFJqr7reR2r9ZH+bDROuf5bleu/XcdrfKrDjf8hSQpI7SLv7EbaHz9IOYGbdDJ0uf5s4rhNkpQdvEZbbmyiPP8dpd7/AC4/l4buCRMmqF27dgoICFBERIR69+6tnTt3XnS+zz//XE2aNJG3t7eaN2+u+fPnX4ZqAQAAKlZazunrtks6hTzEO0Q5hTnKKcyR1cOqeiH1lJ6Xrm2p25Sak6rq/qePgJ45XdzX01eNqzVW3qk87Ty2U9vTtuvPk3/K092z1PV4uHnoze5v6v3176vG6zXU69NeJfarGVhT424Yp2eWPKPIVyM1fP7wUq/Dy91Li+9drAi/CPWY1UPN32uuiSsmlrgP/L38teCeBTIyunXWrcouyC7Wx83iprl95yr3VK6u+eAaDftmmMbfNN6xT5GvGq/8WV65tbWv7R3aemOsDrS8T8Y9z34EOyzpflmzG2t757balBiurNAVpZqv2h+DFL11so7GvKttNzTVnmtuU57fbvu6a217TZlh32tzl2ht7xwvSQpKTVSDNd8qM3yxtndupx3Xt9eRem/IK7eOJMkiN9VfO1fGLVc7rr9GB1sOU40djtskSTb3HOX775TNLa/U+x/A5Wcx53vg4WVwyy23qF+/fmrXrp1OnTqlZ599Vlu2bNG2bdvk51fy9UArV65U586dNWHCBN12222aNWuWJk2apA0bNqhZs2YXXWdmZqaCgoKUkZGhwMBLuz4IAK52bae2dXUJwFUr+WSyUnNS1SKyRZnnXffAOidUVHm1ZagCqpx1VWCYKm22dGnoPldqaqoiIiL0008/qXPnziX26du3r7Kzs/Xtt9/a29q3b69WrVppypQpF10HoRsAKg6hG7h8jmYflZ+nnzzcPJRVkKVDmYcU7heumgE1y7wsQjeAyu5KCt2V6kZqGRmnrxsKDT3/IyRWrVqlUaNGObQlJiZq3rx5JfbPz89Xfn6+/X1m5umbkNhsNtlsFXenTgC4Gp25lhSA8+UX5SslK0WnbKfk5e6lSL9IVfevXq7P4dX2HcjCUAVUOVVhmCrtWFppQrfNZtPIkSN13XXXXfA08ZSUFEVGRjq0RUZGKiUlpcT+EyZM0Lhx44q1p6amKi+P618A4FI08Cr5zrsAKl6DsIr7vB09WnHP5a4KGjBUAVVOVRimTp48Wap+lSZ0P/LII9qyZYt++eWXCl3u6NGjHY6MZ2ZmKjo6WuHh4ZxeDgCXaE/BHleXAKAcIiKKP8v7SraHoQqocqrCMOXtXbpHNFaK0D18+HB9++23+vnnn1WrVq0L9o2KitKRI0cc2o4cOaKoqKgS+1utVlmt1mLtbm5ucnPjiWkAcCmMKs1tQQCUwdX2Hajy3MEIQGlVhWGqtGOpSzfFGKPhw4dr7ty5+vHHH1W3bt2LztOhQwctWbLEoe37779Xhw4dnFUmAAAAAADl4tIj3Y888ohmzZqlr776SgEBAfbrsoOCguTj4yNJGjhwoGrWrKkJEyZIkv7+978rISFBr732mm699VZ9+umnWrdunaZOneqy7QAAAAAAoCQuPdL93nvvKSMjQzfccIOqV69uf82ePdveJykpScnJyfb3HTt21KxZszR16lS1bNlSX3zxhebNm1eqZ3QDAAAAAHA5ufRId2keEb5s2bJibXfffbfuvvtuJ1QEAAAAAEDFqQKXpwMAAAAAUDURugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJMQugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJMQugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJN4lKWzzWbTTz/9pOXLl+vgwYPKyclReHi44uPj1aVLF0VHRzurTgAAAAAAqpxSHenOzc3VSy+9pOjoaPXo0UMLFixQenq63N3dtWfPHo0ZM0Z169ZVjx499Ouvvzq7ZgAAAAAAqoRSHelu1KiROnTooGnTpqlr167y9PQs1ufgwYOaNWuW+vXrp+eee073339/hRcLAAAAAEBVUqrQvXjxYsXGxl6wT506dTR69Gg98cQTSkpKqpDiAAAAAACoykp1evnFAvfZPD09Vb9+/XIXBAAAAADAlaLMdy9fuHChfvnlF/v7d955R61atdKAAQN04sSJCi0OAAAAAICqrMyh+8knn1RmZqYk6ffff9fjjz+uHj16aP/+/Ro1alSFFwgAAAAAQFVVpkeGSdL+/fsVFxcnSZozZ45uu+02/fOf/9SGDRvUo0ePCi8QAAAAAICqqsxHur28vJSTkyNJ+uGHH9StWzdJUmhoqP0IOAAAAAAAKMeR7uuvv16jRo3SddddpzVr1mj27NmSpF27dqlWrVoVXiAAAAAAAFVVmY90v/322/Lw8NAXX3yh9957TzVr1pQkLViwQLfcckuFFwgAAAAAQFVV5iPdtWvX1rffflus/Y033qiQggAAAAAAuFKUOXSfcfToUR09elQ2m82hvUWLFpdcFAAAAAAAV4Iyh+7169dr0KBB2r59u4wxkiSLxSJjjCwWi4qKiiq8SAAAAAAAqqIyh+6hQ4eqUaNG+ve//63IyEhZLBZn1AUAAAAAQJVX5tC9b98+zZkzRw0aNHBGPQAAAAAAXDHKfPfym2++WZs2bXJGLQAAAAAAXFHKfKT7gw8+0KBBg7RlyxY1a9ZMnp6eDtP/8pe/VFhxAAAAAABUZWUO3atWrdKKFSu0YMGCYtO4kRoAAAAAAP9T5tPLH330Ud17771KTk6WzWZzeBG4AQAAAAD4nzKH7mPHjumxxx5TZGSkM+oBAAAAAOCKUebQfccdd2jp0qXOqAUAAAAAgCtKma/pbtSokUaPHq1ffvlFzZs3L3YjtREjRlRYcQAAAAAAVGXlunu5v7+/fvrpJ/30008O0ywWC6EbAAAAAID/r8yhe//+/c6oAwAAAACAK06Zr+kGAAAAAAClU6rQPXHiROXm5pZqgatXr9Z33313SUUBAAAAAHAlKFXo3rZtm2rXrq2HH35YCxYsUGpqqn3aqVOntHnzZr377rvq2LGj+vbtq4CAAKcVDAAAAABAVVGqa7o/+ugjbdq0SW+//bYGDBigzMxMubu7y2q1KicnR5IUHx+vYcOGafDgwfL29nZq0QAAAAAAVAWlvpFay5YtNW3aNL3//vvavHmzDh48qNzcXIWFhalVq1YKCwtzZp0AAAAAAFQ5Zb57uZubm1q1aqVWrVo5oRwAAAAAAK4cLr17+c8//6yePXuqRo0aslgsmjdv3gX7L1u2TBaLpdgrJSXl8hQMAAAAAEAZuDR0Z2dnq2XLlnrnnXfKNN/OnTuVnJxsf0VERDipQgAAAAAAyq/Mp5dXpO7du6t79+5lni8iIkLBwcEVXxAAAAAAABXIpaG7vFq1aqX8/Hw1a9ZMY8eO1XXXXXfevvn5+crPz7e/z8zMlCTZbDbZbDan1woAVzKLLK4uAUA5XG3fgSwMVUCVUxWGqdKOpeUO3Xv27NHevXvVuXNn+fj4yBgji5NHtOrVq2vKlClq27at8vPz9cEHH+iGG27Q6tWr1bp16xLnmTBhgsaNG1esPTU1VXl5eU6tFwCudA28Gri6BADlcPToUVeXcFk1YKgCqpyqMEydPHmyVP0sxhhTlgUfO3ZMffv21Y8//iiLxaLdu3erXr16Gjp0qEJCQvTaa6+Vq2CLxaK5c+eqd+/eZZovISFBtWvX1scff1zi9JKOdEdHR+vEiRMKDAwsV60AgNOu/eBaV5cAoBxWD1vt6hIuq2sZqoAqZ3UVGKYyMzMVEhKijIyMC2bLMh/pfuyxx+Th4aGkpCTFxsba2/v27atRo0aVO3SX1zXXXKNffvnlvNOtVqusVmuxdjc3N7m5ufQ+cgBQ5RmV6e+2ACqJq+07UNkOMQGoDKrCMFXasbTMoXvx4sVatGiRatWq5dDesGFDHTx4sKyLu2QbN25U9erVL/t6AQAAAAC4mDKH7uzsbPn6+hZrP378eIlHlC8kKytLe/bssb/fv3+/Nm7cqNDQUNWuXVujR4/W4cOH9dFHH0mSJk+erLp166pp06bKy8vTBx98oB9//FGLFy8u62YAAAAAAOB0ZT5o36lTJ3sIlk5fi22z2fTyyy/rxhtvLNOy1q1bp/j4eMXHx0uSRo0apfj4eD3//POSpOTkZCUlJdn7FxQU6PHHH1fz5s2VkJCgTZs26YcfftDNN99c1s0AAAAAAMDpynwjtS1btujmm29W69at9eOPP+ovf/mLtm7dquPHj2vFihWqX7++s2qtEJmZmQoKCrroxe4AgItrO7Wtq0sAUA7rHljn6hIuq7YMVUCVs64KDFOlzZZlPtLdrFkz7dq1S9dff7169eql7Oxs3XHHHfrtt98qfeAGAAAAAOByKtdzuoOCgvTcc89VdC0AAAAAAFxRyhW68/LytHnzZh09elQ2m81h2l/+8pcKKQwAAAAAgKquzKF74cKFGjhwoNLS0opNs1gsKioqqpDCAAAAAACo6sp8Tfejjz6qu+++W8nJybLZbA4vAjcAAAAAAP9T5tB95MgRjRo1SpGRkc6oBwAAAACAK0aZQ/ddd92lZcuWOaEUAAAAAACuLGW+pvvtt9/W3XffreXLl6t58+by9PR0mD5ixIgKKw4AAAAAgKqszKH7v//9rxYvXixvb28tW7ZMFovFPs1isRC6AQAAAAD4/8ocup977jmNGzdOzzzzjNzcynx2OgAAAAAAV40yp+aCggL17duXwA0AAAAAwEWUOTkPGjRIs2fPdkYtAAAAAABcUcp8enlRUZFefvllLVq0SC1atCh2I7XXX3+9wooDAAAAAKAqK3Po/v333xUfHy9J2rJli8O0s2+qBgAAAADA1a7MoXvp0qXOqAMAAAAAgCsOd0MDAAAAAMBJSnWk+4477tCMGTMUGBioO+6444J9v/zyywopDAAAAACAqq5UoTsoKMh+vXZQUJBTCwIAAAAA4EpRqtA9ffp0vfDCC3riiSc0ffp0Z9cEAAAAAMAVodTXdI8bN05ZWVnOrAUAAAAAgCtKqUO3McaZdQAAAAAAcMUp093LeQ43AAAAAAClV6bndDdq1Oiiwfv48eOXVBAAAAAAAFeKMoXucePGcfdyAAAAAABKqUyhu1+/foqIiHBWLQAAAAAAXFFKfU0313MDAAAAAFA23L0cAAAAAAAnKfXp5TabzZl1AAAAAABwxSnTI8MAAAAAAEDpEboBAAAAAHASQjcAAAAAAE5C6AYAAAAAwEkI3QAAAAAAOAmhGwAAAAAAJyF0AwAAAADgJIRuAAAAAACchNANAAAAAICTELoBAAAAAHASQjcAAAAAAE5C6AYAAAAAwEkI3QAAAAAAOAmhGwAAAAAAJyF0AwAAAADgJIRuAAAAAACchNANAAAAAICTELoBAAAAAHASQjcAAAAAAE5C6AYAAAAAwEkI3QAAAAAAOAmhGwAAAAAAJyF0AwAAAADgJIRuAAAAAACchNANAAAAAICTELoBAAAAAHASQjcAAAAAAE5C6AYAAAAAwElcGrp//vln9ezZUzVq1JDFYtG8efMuOs+yZcvUunVrWa1WNWjQQDNmzHB6nQAAAAAAlIdLQ3d2drZatmypd955p1T99+/fr1tvvVU33nijNm7cqJEjR2rYsGFatGiRkysFAAAAAKDsPFy58u7du6t79+6l7j9lyhTVrVtXr732miQpNjZWv/zyi9544w0lJiY6q0wAAAAAAMqlSl3TvWrVKnXp0sWhLTExUatWrXJRRQAAAAAAnJ9Lj3SXVUpKiiIjIx3aIiMjlZmZqdzcXPn4+BSbJz8/X/n5+fb3mZmZkiSbzSabzebcggHgCmeRxdUlACiHq+07kIWhCqhyqsIwVdqxtEqF7vKYMGGCxo0bV6w9NTVVeXl5LqgIAK4cDbwauLoEAOVw9OhRV5dwWTVgqAKqnKowTJ08ebJU/apU6I6KitKRI0cc2o4cOaLAwMASj3JL0ujRozVq1Cj7+8zMTEVHRys8PFyBgYFOrRcArnR7Cva4ugQA5RAREeHqEi6rPQxVQJVTFYYpb2/vUvWrUqG7Q4cOmj9/vkPb999/rw4dOpx3HqvVKqvVWqzdzc1Nbm5V6pJ2AKh0jIyrSwBQDlfbdyDDUAVUOVVhmCrtWOrSTcnKytLGjRu1ceNGSacfCbZx40YlJSVJOn2UeuDAgfb+Dz30kPbt26ennnpKO3bs0LvvvqvPPvtMjz32mCvKBwAAAADgglwautetW6f4+HjFx8dLkkaNGqX4+Hg9//zzkqTk5GR7AJekunXr6rvvvtP333+vli1b6rXXXtMHH3zA48IAAAAAAJWSS08vv+GGG2QucL7PjBkzSpznt99+c2JVAAAAAABUjCpwpjwAAAAAAFUToRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJKkXofueddxQTEyNvb29de+21WrNmzXn7zpgxQxaLxeHl7e19GasFAAAAAKB0XB66Z8+erVGjRmnMmDHasGGDWrZsqcTERB09evS88wQGBio5Odn+Onjw4GWsGAAAAACA0nF56H799dd1//33a8iQIYqLi9OUKVPk6+urDz/88LzzWCwWRUVF2V+RkZGXsWIAAAAAAErHpaG7oKBA69evV5cuXextbm5u6tKli1atWnXe+bKyslSnTh1FR0erV69e2rp16+UoFwAAAACAMvFw5crT0tJUVFRU7Eh1ZGSkduzYUeI8jRs31ocffqgWLVoo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Hnvbgw8+aHx9fR3+4JeYmGgefPDB89a5du1aI8k+T2lD9+eff24GDBhgYmNjzR9//GGfdt9995kHHnjAof/y5cuNm5ubyc3NLdP2vPPOOyYyMtL+vn79+mbWrFkO87344oumQ4cOxhhC99WI08txxdq+fbvy8/N18803l3v+a6+91qGtQ4cODu+zsrL0xBNPKDY2VsHBwfL399f27duVlJR00eX//vvvKioqUqNGjeTv729//fTTT9q7d68kqUePHvL09NTXX38t6fRpXYGBgerSpYuk06eP7tmzRwEBAfb5Q0NDlZeXZ1+GJDVt2lTu7u7299WrV7/kU7QAOF+LFi0c3p/57G7fvl3R0dGKjo62T4uLi1NwcLC2b98uSRo1apSGDRumLl26aOLEiQ5jgjPFxMQoICDA/j4yMlJxcXFyc3NzaDszBm3atElZWVmqVq2aw1i4f//+y1YzgNMmTZqkmTNn2seRs23fvl3XXXedQ9t1112n3bt3O5wW3rZt22Lz+vr6qn79+vb3kZGRiomJkb+/v0Pb2d9N1q9fr549e6p27doKCAhQQkKCJJXqO9bZHnvsMa1evVo///yzatasaW/ftGmTZsyY4TDuJCYmymazaf/+/WXanrO/V2VnZ2vv3r267777HJb90ksvMaZdxTxcXQDgLD4+PueddubLnzHG3nbmGueyeOKJJ/T999/r1VdfVYMGDeTj46O77rqrVDfayMrKkru7u9avX+8QiCXZfwl5eXnprrvu0qxZs9SvXz/NmjVLffv2lYeHh30Zbdq00X/+859iyw8PD7f/29PT02GaxWKRzWYr8/YCuLwu5bM7duxYDRgwQN99950WLFigMWPG6NNPP9Xtt9/ujFLtSqr5QtuRlZWl6tWr2+9ncTYeRwZcXp07d1ZiYqJGjx6twYMHl2sZfn5+xdrKOi5kZ2crMTFRiYmJ+s9//qPw8HAlJSUpMTGxzDcz69q1q/773/9q0aJFuueee+ztWVlZevDBBzVixIhi89SuXbvM23PmO2VWVpYkadq0acUO3pz7fQ9XD0I3rlgNGzaUj4+PlixZomHDhjlMOxNIk5OTFRISIknFnpUYGxur1atXO7T9+uuvDu9XrFihwYMH27/EZmVlOdzE7ELi4+NVVFSko0ePqlOnTuftd88996hr167aunWrfvzxR7300kv2aa1bt9bs2bMVERGhwMDAUq23JF5eXg5/pQZQucXGxurQoUM6dOiQ/Wj3tm3blJ6erri4OHu/Ro0aqVGjRnrsscfUv39/TZ8+Xbfffnu5PvPOGidat26tlJQUeXh4KCYmpsKXD6BsJk6cqFatWqlx48YO7bGxsVqxYoVD24oVK9SoUaMKD5M7duzQsWPHNHHiRPsYt27dunIt6y9/+Yt69uypAQMGyN3dXf369ZN0euzZtm2bGjRoUGF1S6eP2NeoUUP79u1zCPm4unF6Oa5Y3t7eevrpp/XUU0/po48+0t69e/Xrr7/q3//+txo0aKDo6GiNHTtWu3fv1nfffVfsDpwjRozQwoUL9eqrr2r37t16++23tXDhQoc+DRs21JdffqmNGzdq06ZNGjBgQKmPQjVq1Ej33HOPBg4cqC+//FL79+/XmjVrNGHCBH333Xf2fp07d1ZUVJTuuece1a1b1+Gvpvfcc4/CwsLUq1cvLV++XPv379eyZcs0YsQI/fHHH6XeVzExMfr55591+PBhpaWllXo+AK7RpUsXNW/eXPfcc482bNigNWvWaODAgUpISFDbtm2Vm5ur4cOHa9myZTp48KBWrFihtWvXKjY2VtLpz3xWVpaWLFmitLQ0+9MQLsRZ40SXLl3UoUMH9e7dW4sXL9aBAwe0cuVKPffcc+X+kg2g/M6MLW+++aZD++OPP64lS5boxRdf1K5duzRz5ky9/fbbeuKJJyq8htq1a8vLy0tvvfWW9u3bp6+//lovvvhiuZd3++236+OPP9aQIUP0xRdfSJKefvpprVy5UsOHD9fGjRu1e/duffXVVxo+fPgl1z9u3DhNmDBBb775pnbt2qXff/9d06dP1+uvv37Jy0bVROjGFe3//u//9Pjjj+v5559XbGys+vbtq6NHj8rT01P//e9/tWPHDrVo0UKTJk1yOIIsSe3bt9e0adP0r3/9Sy1bttTixYv1j3/8w6HP66+/rpCQEHXs2FE9e/ZUYmKiWrduXer6pk+froEDB+rxxx9X48aN1bt3b61du9bhtCaLxaL+/ftr06ZNxf5i6uvrq59//lm1a9fWHXfcodjYWN13333Ky8sr05HvF154QQcOHFD9+vUdTksHUDlZLBZ99dVXCgkJUefOndWlSxfVq1dPs2fPlnT6FMZjx45p4MCBatSokfr06aPu3btr3LhxkqSOHTvqoYceUt++fRUeHq6XX375out01jhhsVg0f/58de7cWUOGDFGjRo3Ur18/HTx4UJGRkRW2HgCl98ILLxQ7iNC6dWt99tln+vTTT9WsWTM9//zzeuGFF8p9GvqFhIeHa8aMGfr8888VFxeniRMn6tVXX72kZd51112aOXOm/vrXv+rLL79UixYt9NNPP2nXrl3q1KmT4uPj9fzzz6tGjRqXXP+wYcP0wQcfaPr06WrevLkSEhI0Y8YM1a1b95KXjarJYs6+qBUAAAAAAFQYjnQDAAAAAOAkhG7ASZYvX+7wqIhzXwBQWTBeAQDgPJxeDjhJbm6uDh8+fN7pFX23TAAoL8YrAACch9ANAAAAAICTcHo5AAAAgFI5duyYIiIidODAgUtazooVK9S8eXN5enqqd+/eFVKbK7Vv315z5sxxdRmopAjdQAnO/YXijF8My5Ytk8ViUXp6+iUtJyYmRpMnT5YkFRQUKCYmhmfbAleoivqyW1lMmTJFPXv2dHUZAMpg/Pjx6tWrl2JiYi5pOaNGjVKrVq20f/9+zZgxo0Jqc6V//OMfeuaZZ4o9ag2QCN1Aic79hVJVfjF4eXnpiSee0NNPP+3qUgA4QUV92XUFi8WiefPmObQNHTpUGzZs0PLly11TFIAyycnJ0b///W/dd999JU43xujUqVOlWtbevXt10003qVatWgoODi5XPQUFBeWazxm6d++ukydPasGCBa4uBZUQoRs4R0m/UCriF8Plcs899+iXX37R1q1bXV0KgAp0sS+7FaGwsLBYmzO/1Hp5eWnAgAF68803nbYOABVn/vz5slqtat++vaT/nbW3YMECtWnTRlarVb/88otsNpsmTJigunXrysfHRy1bttQXX3whSTpw4IAsFouOHTumoUOHymKx2A9obNmyRd27d5e/v78iIyP117/+VWlpafb133DDDRo+fLhGjhypsLAwJSYmlnq+ESNG6KmnnlJoaKiioqI0duxYh21LT0/Xgw8+qMjISHl7e6tZs2b69ttv7dN/+eUXderUST4+PoqOjtaIESOUnZ1tn+7u7q4ePXro008/rdB9jisDoRs4x9m/UC70i+Gnn37SNddcI6vVqurVq+uZZ55x+Otufn6+RowYoYiICHl7e+v666/X2rVrL7juiw3oR48eVc+ePeXj46O6devqP//5T7FlhISE6Lrr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fu7Ly8tLTZo00alTp7R+/Xr7PDt37izxOd8M+sCV59yxqUWLFlq+fHmJdxwPDAxUjRo1HMYg6fQ4db4x6EJat26t3bt3KyIiotj4FBQUpICAAMXExGjJkiXnXYanp6eKioqKte/du1d5eXmMWUAVkJiYqK1bt17w4ERAQICeeOIJPfbYY5o5c6b27t2rDRs26K233tLMmTPPO98jjzyi48ePq3///lq7dq327t2rRYsWaciQISWOHZc639kSEhLUuXNn3Xnnnfr++++1f/9+LViwwH7zyaefflorV67U8OHDtXHjRu3evVtfffVVsRupLV++XN26dSvVOnF1IXQD5yjNL5SHH35Yhw4d0qOPPqodO3boq6++0pgxYzRq1Ci5ubnJz89Pf/vb3/Tkk09q4cKF2rZtm+6//37l5OSc93E/FxvQGzdurFtuuUUPPvigVq9erfXr12vYsGElHu1i0AeuPOeOTcOHD1dmZqb69eundevWaffu3fr444+1c+dOSdKTTz6pSZMmafbs2dq5c6eeeeYZbdy40eGa69K65557FBYWpl69emn58uXav3+/li1bphEjRuiPP/6QJI0dO1avvfaa3nzzTe3evdv+JfuMM6E8JSXFYXxdvny56tWrp/r161/K7gFwGTRv3lytW7fWZ599dsF+L774ov7v//5PEyZMUGxsrG655RZ99913qlu37nnnOfOHwqKiInXr1k3NmzfXyJEjFRwcfMGzaco737nmzJmjdu3aqX///oqLi9NTTz1lD+0tWrTQTz/9pF27dqlTp06Kj4/X888/73CfjcOHD2vlypUaMmRIqdeJq4iLb+QGVErXXHONmTJliv39uXfYNMaYZcuWmXbt2hkvLy8TFRVlnn76aVNYWGifnpubax599FETFhZmrFarue6668yaNWvs08+9e7kxxqxZs8Z07drV+Pv7Gz8/P9OiRQszfvx4+/Tk5GRz6623GqvVamrXrm0++ugjU6dOHYe7l69cudIEBwebnJycitshACqFc8emTZs2mW7duhlfX18TEBBgOnXqZPbu3WuMMaaoqMiMHTvW1KxZ03h6epqWLVuaBQsW2Oc9c/fy3377zWEdgwYNMr169Sq27uTkZDNw4ED7mFavXj1z//33m4yMDHufKVOmmMaNGxtPT09TvXp18+ijj9qnff3116ZBgwbGw8PD1KlTx97erVs3M2HChEvcMwAul2+//dbExsZyh+5zPPXUU+b+++93dRmopCzGnHV+LABJp2/+8eSTT2rLli2XfK3i5da3b1+1bNlSzz77rKtLAVDBqvLYVJKtW7fqpptu0q5duxQUFOTqcgCU0uTJk3XnnXcqOjra1aVUGq+99pruvfdeRUZGuroUVEKEbuA8quIvlIKCAr388st6/PHHuXMmcIWqimPT+fzwww8qKipSYmKiq0sBAMBpCN0AAAAAADhJ1T83DQAAAACASorQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnOT/Afb3845bTMjvAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Key insight: host_time correctly measures the tricky kernel!\n", + "Use host_time for evaluating untrusted/agent-generated code.\n" + ] + } + ], + "source": [ + "# Side-Stream Detection with KernelBench's host_time\n", + "# Let's demonstrate how host_time catches the tricky kernel\n", + "\n", + "print(\"Side-Stream Detection Experiment:\")\n", + "print(\"=\" * 60)\n", + "\n", + "# cuda_event (can be fooled by side-streams)\n", + "cuda_timing = get_timing_function(\"cuda_event\")\n", + "cuda_times = cuda_timing(tricky_agent_kernel, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", + "cuda_stats = get_timing_stats(cuda_times, device=DEVICE)\n", + "\n", + "# host_time (catches all streams)\n", + "host_timing = get_timing_function(\"host_time\")\n", + "host_times = host_timing(tricky_agent_kernel, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", + "host_stats = get_timing_stats(host_times, device=DEVICE)\n", + "\n", + "# Normal kernel for reference\n", + "normal_times = host_timing(simple_mm, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", + "normal_stats = get_timing_stats(normal_times, device=DEVICE)\n", + "\n", + "print(f\"\\nTricky kernel with cuda_event: {cuda_stats['mean']:.4f} ms (FOOLED!)\")\n", + "print(f\"Tricky kernel with host_time: {host_stats['mean']:.4f} ms (CORRECT)\")\n", + "print(f\"Normal kernel with host_time: {normal_stats['mean']:.4f} ms (reference)\")\n", + "\n", + "# Visualize the dramatic difference\n", + "plt.figure(figsize=(10, 5))\n", + "methods = ['cuda_event\\n(fooled)', 'host_time\\n(correct)', 'Normal kernel\\n(reference)']\n", + "times = [cuda_stats['mean'], host_stats['mean'], normal_stats['mean']]\n", + "colors = ['red', 'green', 'blue']\n", + "\n", + "plt.bar(methods, times, color=colors, alpha=0.8)\n", + "plt.ylabel('Time (ms)')\n", + "plt.title('Side-Stream Detection: cuda_event vs host_time')\n", + "plt.grid(True, alpha=0.3, axis='y')\n", + "\n", + "# Add annotation\n", + "plt.annotate('Agent trick detected!', xy=(1, host_stats['mean']), \n", + " xytext=(1.3, host_stats['mean'] * 0.7),\n", + " arrowprops=dict(arrowstyle='->', color='green'),\n", + " fontsize=10, color='green')\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print(\"\\nKey insight: host_time correctly measures the tricky kernel!\")\n", + "print(\"Use host_time for evaluating untrusted/agent-generated code.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Uq4qvl8FzX2j" + }, + "source": [ + "## Correctness Before Speed\n", + "\n", + "A kernel that runs in 0.1ms but produces garbage is worthless. Before you start optimizing, **always verify correctness** against a reference implementation." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:50.124591Z", + "iopub.status.busy": "2025-12-17T20:56:50.124472Z", + "iopub.status.idle": "2025-12-17T20:56:50.204291Z", + "shell.execute_reply": "2025-12-17T20:56:50.203333Z" + }, + "id": "J9W63Q5czX2k", + "outputId": "312076ee-f089-4276-8b8f-bb7a23575d3d" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✓ Correctness verified!\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", + "Kernel time: 0.0652 ms\n" + ] + } + ], + "source": [ + "def my_experimental_kernel(a, b):\n", + " \"\"\"Pretend this is our custom optimized kernel.\"\"\"\n", + " return torch.matmul(a, b) # In reality, this would be your Triton/CUDA code\n", + "\n", + "def verify_correctness(kernel_fn, ref_fn, *args, atol=1e-2, rtol=1e-2):\n", + " \"\"\"Verify kernel produces correct output before benchmarking.\"\"\"\n", + " ref_output = ref_fn(*args)\n", + " kernel_output = kernel_fn(*args)\n", + "\n", + " if not torch.allclose(ref_output, kernel_output, atol=atol, rtol=rtol):\n", + " max_diff = (ref_output - kernel_output).abs().max().item()\n", + " raise AssertionError(\n", + " f\"Kernel output doesn't match reference! \"\n", + " f\"Max difference: {max_diff:.6f}\"\n", + " )\n", + " print(\"✓ Correctness verified!\")\n", + " return True\n", + "\n", + "# Always verify before benchmarking\n", + "a_test, b_test = get_data(1024)\n", + "verify_correctness(my_experimental_kernel, simple_mm, a_test, b_test)\n", + "\n", + "# Only benchmark if correct\n", + "time_ms = final_benchmark(my_experimental_kernel, a_test, b_test)\n", + "print(f\"Kernel time: {time_ms:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Computing TFLOPS: Are We Hitting the Speed of Light?\n", + "\n", + "Now that we have correct, well-measured timings, the natural question is: **\"Is this kernel actually fast?\"** A kernel that runs in 2ms might sound good, but if the hardware could theoretically do it in 0.5ms, you're leaving 75% of performance on the table.\n", + "\n", + "To answer this, we convert our millisecond timings into **TFLOPS** (Tera Floating-Point Operations Per Second) and compare against the hardware's theoretical maximum—often called the **\"speed of light\"** or **roofline**.\n", + "\n", + "### Understanding Roofline Analysis\n", + "\n", + "The Roofline Model helps you understand whether your kernel is:\n", + "- **Compute-bound**: Limited by the GPU's arithmetic throughput (FLOPS)\n", + "- **Memory-bound**: Limited by memory bandwidth (GB/s)\n", + "\n", + "**Key formulas:**\n", + "- **Arithmetic Intensity** = FLOPs / Bytes accessed\n", + "- **Theoretical Peak FLOPS** = Clock speed × Cores × FLOPs/cycle\n", + "- **Theoretical Peak Bandwidth** = Memory clock × Bus width × 2 (for DDR)\n", + "\n", + "For matrix multiplication of two $N \\times N$ matrices:\n", + "- **FLOPs** = $2N^3$ (one multiply + one add per output element, summed $N$ times)\n", + "- **Bytes** = $3N^2 \\times \\text{sizeof(dtype)}$ (read A, read B, write C)\n", + "- **Arithmetic Intensity** = $\\frac{2N^3}{3N^2 \\times 4} = \\frac{N}{6}$ for float32\n", + "\n", + "Large matrix multiplications are highly compute-bound (high arithmetic intensity), so we expect to approach the compute roofline. For a deeper dive into roofline analysis and speed-of-light calculations, see the excellent [JAX Scaling Book chapter on Roofline](https://jax-ml.github.io/scaling-book/roofline/)." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:50.206914Z", + "iopub.status.busy": "2025-12-17T20:56:50.206787Z", + "iopub.status.idle": "2025-12-17T20:56:53.016156Z", + "shell.execute_reply": "2025-12-17T20:56:53.015088Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Matrix Multiplication Performance\n", + "=================================================================\n", + "Size Time (ms) TFLOPS % of TF32 Peak \n", + "-----------------------------------------------------------------\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", + "1024 0.0652 32.94 3.3 %\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", + "2048 0.3450 49.80 5.0 %\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4096 2.6700 51.48 5.2 %\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8192 21.4000 51.38 5.2 %\n", + "\n", + "Note: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\n", + "H200 TF32 theoretical peak: 989.0 TFLOPS\n", + "\n", + "For roofline analysis details, see: https://jax-ml.github.io/scaling-book/roofline/\n" + ] + } + ], + "source": [ + "def get_tflops(n, time_ms):\n", + " \"\"\"Calculate achieved TFLOPS for matrix multiplication.\"\"\"\n", + " flops = 2 * n ** 3 # Multiply-add for each of N^2 output elements\n", + " tflops = flops / (time_ms * 1e-3) / 1e12\n", + " return tflops\n", + "\n", + "# Theoretical peaks vary by GPU and precision\n", + "# PyTorch uses TF32 by default on Ampere+ GPUs for matmul\n", + "GPU_PEAK_TFLOPS = {\n", + " 'A100': {'fp32': 19.5, 'tf32': 156.0, 'fp16': 312.0},\n", + " 'H100': {'fp32': 67.0, 'tf32': 989.0, 'fp16': 1979.0},\n", + " 'H200': {'fp32': 67.0, 'tf32': 989.0, 'fp16': 1979.0},\n", + "}\n", + "\n", + "# Use TF32 peak since PyTorch defaults to TF32 on Ampere+\n", + "PEAK_TFLOPS = 989.0 # H200 TF32 peak\n", + "\n", + "# Benchmark at different sizes\n", + "print(\"Matrix Multiplication Performance\")\n", + "print(\"=\" * 65)\n", + "print(f\"{'Size':<8} {'Time (ms)':<12} {'TFLOPS':<12} {'% of TF32 Peak':<15}\")\n", + "print(\"-\" * 65)\n", + "\n", + "for size in [1024, 2048, 4096, 8192]:\n", + " a_test, b_test = get_data(size)\n", + " time_ms = final_benchmark(simple_mm, a_test, b_test)\n", + " tflops = get_tflops(size, time_ms)\n", + " efficiency = (tflops / PEAK_TFLOPS) * 100\n", + " print(f\"{size:<8} {time_ms:<12.4f} {tflops:<12.2f} {efficiency:<15.1f}%\")\n", + "\n", + "print(f\"\\nNote: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\")\n", + "print(f\"H200 TF32 theoretical peak: {PEAK_TFLOPS} TFLOPS\")\n", + "print(f\"\\nFor roofline analysis details, see: https://jax-ml.github.io/scaling-book/roofline/\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zcYVXCkUzX2k" + }, + "source": [ + "## Conclusion\n", + "\n", + "Benchmarking on GPUs is fundamentally different from CPUs. The asynchronous nature of kernel launches, the hidden state of the L2 cache, and the noise of the OS scheduler all conspire to give you the wrong numbers.\n", + "\n", + "### What We Learned\n", + "\n", + "Through our journey, we discovered that robust GPU benchmarking requires:\n", + "1. **Device Synchronization** - Wait for GPU work to complete\n", + "2. **CUDA Events** - Use GPU-side timestamps, not CPU clocks\n", + "3. **Warmup Runs** - Settle compilation and memory allocators\n", + "4. **Multiple Samples** - Build statistical distributions\n", + "5. **L2 Cache Flushing** - Measure cold cache (realistic) performance\n", + "6. **Median Aggregation** - Filter out OS jitter and outliers\n", + "7. **Side-Stream Detection** - Catch work on non-default streams\n", + "\n", + "### What KernelBench Provides\n", + "\n", + "We've implemented all these best practices in **KernelBench's timing module** (`src/timing.py`):\n", + "\n", + "| Function | Purpose |\n", + "|----------|---------|\n", + "| `get_timing_function(method)` | Factory returning timing function by name |\n", + "| `clear_l2_cache(device)` | L2 cache flushing utility |\n", + "| `get_timing_stats(times)` | Statistical aggregation (mean, std, min, max) |\n", + "\n", + "**Four timing methods for different use cases:**\n", + "- **`cuda_event`** - Default for trusted code (fastest, GPU-side timing)\n", + "- **`host_time`** - For untrusted/agent code (catches all streams)\n", + "- **`do_bench`** - Triton-style adaptive trial counts\n", + "- **`do_bench_impl`** - Transparent do_bench with explicit control\n", + "\n", + "**Key parameters:**\n", + "- `num_warmup`, `num_trials`, `discard_first`, `device`, `verbose`\n", + "\n", + "### Recommended Usage\n", + "\n", + "```python\n", + "from src.timing import get_timing_function, get_timing_stats\n", + "\n", + "# For trusted code\n", + "timing_fn = get_timing_function(\"cuda_event\")\n", + "\n", + "# For agent evaluations (catches side-streams)\n", + "timing_fn = get_timing_function(\"host_time\")\n", + "\n", + "# Run benchmark\n", + "times = timing_fn(kernel, args, num_warmup=10, num_trials=100, device=\"cuda:0\")\n", + "stats = get_timing_stats(times, device=\"cuda:0\")\n", + "print(f\"Mean: {stats['mean']:.4f}ms, Std: {stats['std']:.4f}ms\")\n", + "```\n", + "\n", + "Happy optimizing!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7Ah151CHzX2k" + }, + "source": [ + "---\n", + "\n", + "### Footnotes\n", + "\n", + "**On GPU Clock States:** For highly reproducible benchmarks (e.g., publishing papers), consider locking GPU clocks with `nvidia-smi -lgc `. GPUs dynamically adjust clock speeds based on thermals and power, which can introduce variance between runs. For most development work, median-based benchmarking handles this adequately.\n", + "\n", + "**On Warmup Iterations:** We use fixed warmup counts (10-50 iterations) for simplicity, but this can be insufficient or wasteful depending on the kernel. In extremely sensitive environments, you can implement an adaptive stopping criterion: run warmup iterations until the variance of recent samples falls below a threshold, indicating the system has stabilized. This is covered in more detail in the [GPU MODE lecture](https://www.youtube.com/watch?v=1i7dxoAfKOU).\n", + "\n", + "**On Bare Metal vs. Virtualized Environments:** Cloud VMs and containers add layers of abstraction that can introduce variance and overhead. GPU passthrough in virtualized environments adds latency, and shared cloud instances suffer from \"noisy neighbor\" effects where other tenants' workloads impact your measurements. For publishable results or when chasing small performance deltas, prefer bare metal. For day-to-day development, cloud instances are fine as long as you're aware your numbers may not match others exactly." + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "A100", + "include_colab_link": true, + "provenance": [] + }, + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From f8e68399399f23dc2c9d11c172e321abdb34c13b Mon Sep 17 00:00:00 2001 From: Sahan Date: Wed, 17 Dec 2025 21:10:37 +0000 Subject: [PATCH 16/25] benchmarking guide --- benchmarking.ipynb | 1645 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1645 insertions(+) create mode 100644 benchmarking.ipynb diff --git a/benchmarking.ipynb b/benchmarking.ipynb new file mode 100644 index 00000000..472213f7 --- /dev/null +++ b/benchmarking.ipynb @@ -0,0 +1,1645 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_PCU0gUyzX2c" + }, + "source": [ + "# A Practical Guide to GPU Benchmarking\n", + "\n", + "> **Note on outputs:** The outputs in this notebook were generated on an **NVIDIA H200 GPU** (90MB L2 cache, 4.8 TB/s memory bandwidth). Your results may vary depending on your hardware. The H200's large cache means cache effects are less dramatic than on older GPUs like A100 (40MB L2) or consumer cards.\n", + "\n", + "## TL;DR — How to Benchmark Correctly\n", + "\n", + "Benchmarking on GPUs requires a strict protocol to avoid measuring Python overhead or caching artifacts. To get reliable numbers, you must:\n", + "\n", + "1. **Warmup:** Run the kernel ~10-50 times first to settle compilation and memory allocators.\n", + "2. **Sample Extensively:** Don't trust one run. Collect 100+ samples to build a statistical distribution.\n", + "3. **Flush the L2 Cache:** Between *every* sample, flush the cache to force a cold cache state (simulating real-world inference).\n", + "4. **Use Device Timers:** Use `torch.cuda.Event` instead of `time.time()` to measure execution on the GPU, not the CPU driver.\n", + "5. **Aggregate Robustly:** Use the **Median** (not Mean) of your samples to filter out OS jitter/outliers.\n", + "6. **Wait for sidestreams to finish:** Ensure no side-streams are running or wait for all of them to finish before reporting a time.\n", + "\n", + "*Pro-Tip:* **KernelBench's timing module** (`src/timing.py`) implements all these best practices. Use `get_timing_function(\"cuda_event\")` for trusted code or `get_timing_function(\"host_time\")` for evaluating untrusted/agent-generated code.\n", + "\n", + "-----\n", + "\n", + "If are using an LLM agent to write GPU kernels (and evaluating against something like say [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), or just trying to optimize a custom GPU kernel, you are eventually going to ask: **\"How fast is this thing?\"**\n", + "\n", + "This notebook is heavily inspired by [this great guide](https://www.youtube.com/watch?v=1i7dxoAfKOU) from the **GPU MODE** community and the practical \"footguns\" (traps) encountered while building benchmarking harnesses for LLM-generated code. Our goal here is simplicity and keeping things Pythonic—for more advanced techniques, see the footnotes.\n", + "\n", + "We won't just list best practices. Instead, we are going to build a benchmarking harness from scratch, make every common mistake, debug why the numbers are wrong, and iterate our way to a robust solution. So let's start things out by doing the most naive thing by using `time.time()`!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:42.780616Z", + "iopub.status.busy": "2025-12-17T20:56:42.780511Z", + "iopub.status.idle": "2025-12-17T20:56:47.446613Z", + "shell.execute_reply": "2025-12-17T20:56:47.445546Z" + }, + "id": "PKWz_W7uzX2f", + "outputId": "8751fd78-569b-4080-f21a-60bbb5ee8caf" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/simon/miniconda3/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using GPU: NVIDIA H200\n" + ] + } + ], + "source": [ + "# @title Environment Setup\n", + "# Ensure we have the necessary libraries and a GPU available\n", + "# !pip install -q triton matplotlib numpy torch\n", + "# !pip install -e . # Install KernelBench locally for timing utilities\n", + "\n", + "import torch\n", + "import time\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import triton\n", + "\n", + "# Import KernelBench's timing module\n", + "from src import timing\n", + "from src.timing import clear_l2_cache, get_timing_stats, get_timing_function\n", + "\n", + "if not torch.cuda.is_available():\n", + " raise RuntimeError(\"This notebook requires a GPU. Please enable GPU in your runtime settings.\")\n", + "\n", + "# Device configuration\n", + "# For multi-GPU systems, set CUDA_VISIBLE_DEVICES=X before running to select a specific GPU\n", + "# The selected GPU will appear as cuda:0\n", + "DEVICE = \"cuda:0\"\n", + "print(f\"Using GPU: {torch.cuda.get_device_name(DEVICE)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kjWByrwvzX2f" + }, + "source": [ + "## The Journey: Benchmarking a Matrix Multiplication\n", + "\n", + "Let's define a simple workload to test. We want to measure the performance of a standard Matrix Multiplication." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.449363Z", + "iopub.status.busy": "2025-12-17T20:56:47.449114Z", + "iopub.status.idle": "2025-12-17T20:56:47.705668Z", + "shell.execute_reply": "2025-12-17T20:56:47.704728Z" + }, + "id": "gxtKes5lzX2g", + "outputId": "5890bae4-5b9a-4366-8947-367146593158" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Output shape: torch.Size([4096, 4096])\n", + "Op ran successfully\n" + ] + } + ], + "source": [ + "# A standard size for testing\n", + "N = 4096\n", + "\n", + "def get_data(n=N, device=DEVICE):\n", + " \"\"\"Generate random float32 matrices for benchmarking.\"\"\"\n", + " return torch.randn(n, n, device=device), torch.randn(n, n, device=device)\n", + "\n", + "def simple_mm(a, b):\n", + " \"\"\"Our kernel under test: standard matrix multiplication.\"\"\"\n", + " return torch.matmul(a, b)\n", + "\n", + "# Let's verify it runs\n", + "a, b = get_data()\n", + "res = simple_mm(a, b)\n", + "print(f\"Output shape: {res.shape}\")\n", + "print(\"Op ran successfully\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GWlsBEVyzX2g" + }, + "source": [ + "### Attempt 1: The Naive Timer (The Asynchronous Illusion)\n", + "\n", + "The most intuitive way to time code in Python is using `time.time()`. Let's try that first." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.708574Z", + "iopub.status.busy": "2025-12-17T20:56:47.708437Z", + "iopub.status.idle": "2025-12-17T20:56:47.712126Z", + "shell.execute_reply": "2025-12-17T20:56:47.711422Z" + }, + "id": "LynIxLaRzX2g", + "outputId": "72548dad-6570-4eaa-ce07-923556fe70b4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Naive time: 0.5345 ms\n" + ] + } + ], + "source": [ + "def benchmark_naive(func, *args):\n", + " \"\"\"WRONG: Measures kernel launch time, not execution time.\"\"\"\n", + " start = time.time()\n", + " func(*args)\n", + " end = time.time()\n", + " return (end - start) * 1000 # to ms\n", + "\n", + "t = benchmark_naive(simple_mm, a, b)\n", + "print(f\"Naive time: {t:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gw4NGYRmzX2h" + }, + "source": [ + "**The Problem:**\n", + "Wait, ~0.5ms? That seems impossibly fast for a 4096² matrix multiplication involving 137 billion floating-point operations.\n", + "\n", + "**What happened?**\n", + "GPUs are **asynchronous**. When you call `torch.matmul`, the CPU doesn't actually do the math. It simply queues a \"launch kernel\" command to the GPU and moves on immediately. Our timer didn't measure the matrix multiplication; it measured how long it took Python to place an order in the queue.\n", + "\n", + "To fix this, we need to:\n", + "1. **Synchronize** - Force the CPU to wait for the GPU with `torch.cuda.synchronize()`\n", + "2. **Use CUDA Events** - Record timestamps directly on the GPU to avoid CPU overhead\n", + "\n", + "Let's compare these approaches to see the difference." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.714693Z", + "iopub.status.busy": "2025-12-17T20:56:47.714579Z", + "iopub.status.idle": "2025-12-17T20:56:47.884978Z", + "shell.execute_reply": "2025-12-17T20:56:47.884070Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Comparing Synchronized time.time() vs CUDA Events:\n", + "------------------------------------------------------------\n", + "N= 512: sync= 0.0358ms, events= 0.0334ms, overhead=+0.0023ms\n", + "N=1024: sync= 0.0725ms, events= 0.0716ms, overhead=+0.0008ms\n", + "N=2048: sync= 0.3552ms, events= 0.3536ms, overhead=+0.0017ms\n", + "N=4096: sync= 2.6958ms, events= 2.6885ms, overhead=+0.0073ms\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHpCAYAAABTH4/7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA48RJREFUeJzs3XdUVEcbBvBnqUsXFQQbKjbEgsGOClbsEhv23mJJ7H6W2KKxxRZ7N0aNxt67qFijRo29YBcRLDTp7Hx/rFxYdxcWBRfh+Z3jSe7s3LnvHbbMvjt3rkwIIUBERERERERERPQVGeg7ACIiIiIiIiIiynmYlCIiIiIiIiIioq+OSSkiIiIiIiIiIvrqmJQiIiIiIiIiIqKvjkkpIiIiIiIiIiL66piUIiIiIiIiIiKir45JKSIiIiIiIiIi+uqYlCIiIiIiIiIioq+OSSkiIiIiIiIiIvrqmJQiIiIiIiLKRrp37w5LS0t9h6HCy8sLXl5e+g6DiLIYJqWIiIiIiCjLCggIQL9+/VCsWDHI5XJYW1vDw8MDCxYsQHR0tFSvSJEikMlk0j97e3vUqlULO3fuVGmvSJEiaNasmcZjXb58GTKZDOvWrdMptmfPnqF///4oUqQITE1NYW9vDx8fH5w9e/azz5d0s2TJEp3/TgCk58WcOXPUHlu3bh1kMhkuX76cgREqNWjQADKZDIMGDdL4+OrVq+Hi4gK5XI4SJUpg4cKFGutt3rwZ3333HeRyOezs7NCrVy+8efNGY93Xr1+jX79+KFCgAORyOYoUKYJevXpl2DkRZSQjfQdARERERESkyf79+9G2bVuYmpqia9euKFu2LOLi4nDmzBmMHDkSt27dwooVK6T6bm5uGD58OAAgMDAQy5cvR6tWrbB06VL0798/Q2M7e/YsmjRpAgDo3bs3ypQpg6CgIKxbtw61atXCggULMHjw4Aw9JiVbsmQJ8ubNi+7du6drv9mzZ+OHH36Aubl55gSWwo4dO3D+/Hmtjy9fvhz9+/dH69atMWzYMPj7++PHH39EVFQURo8eLdVbunQpBgwYgHr16mHu3Ll48eIFFixYgMuXL+PixYuQy+VS3efPn8PDwwMA0L9/fxQoUACBgYH4559/Mu9Eib4Ak1JERERERJTlPH78GO3bt4eTkxNOnDgBR0dH6bGBAwfi4cOH2L9/v8o+BQoUQOfOnaXtrl27onjx4pg3b16GJqXev3+PNm3awMzMDGfPnoWzs7P02LBhw+Dt7Y0hQ4bA3d0dNWrUyLDjpiUmJgYmJiZf7XjfGjc3N1y7dg3Lli3DsGHDMvVYMTExGD58OEaPHo0JEyaoPR4dHY1x48ahadOm2LZtGwCgT58+UCgU+OWXX9C3b1/Y2toiLi4OY8eORe3atXH06FHIZDIAQI0aNdC8eXOsXLlSJfnZr18/GBkZ4dKlS8iTJ0+mniNRRuDle0RERERElOXMmjULkZGRWL16tUpCKknx4sXx008/pdqGg4MDXFxc8Pjx4wyNbfny5QgKCsLs2bNVElIAYGZmhj/++AMymQxTpkwBkHxZ4B9//KHW1uHDhyGTybBv3z6p7OXLl+jZsyfy5csHU1NTuLq6Ys2aNSr7nTx5EjKZDJs3b8b48eNRoEABmJubIzw8XKUdHx8fWFpaws7ODiNGjEBiYqJKOwqFAvPnz4erqyvkcjny5cuHfv364f379yr1du/ejaZNmyJ//vwwNTWFs7MzfvnlF7X2AGDFihVwdnaGmZkZqlSpAn9/fx17Fli7di3q1q0Le3t7mJqaokyZMli6dKlKnSJFiuDWrVs4deqUdFmeLutVeXh4oG7dupg1a5bKpZ+ZYdasWVAoFBgxYoTGx/38/PD27VsMGDBApXzgwIH48OGDlHC9efMmQkND4evrKyWkAKBZs2awtLTE5s2bpbK7d+/i4MGDGDlyJPLkyYOYmBjEx8dnwtkRZRzOlCIiIiIioixn7969KFas2BfNNIqPj8fz588zfMbI3r17IZfL0a5dO42PFy1aFDVr1sSJEycQHR2NSpUqoVixYvj777/RrVs3lbpbtmyBra0tvL29ASjXA6pWrZq0DpGdnR0OHjyIXr16ITw8HEOGDFHZ/5dffoGJiQlGjBiB2NhYaaZUYmIivL29UbVqVfz22284duwY5syZA2dnZ/zwww/S/v369cO6devQo0cP/Pjjj3j8+DEWLVqEq1ev4uzZszA2NgagXHfJ0tISw4YNg6WlJU6cOIEJEyYgPDwcs2fPltpbvXo1+vXrhxo1amDIkCF49OgRWrRogdy5c6NQoUJp9u3SpUvh6uqKFi1awMjICHv37sWAAQOgUCgwcOBAAMD8+fMxePBgWFpaYty4cQCAfPnypdk2AEyaNAm1a9fG0qVLU50tFRsbi4iICJ3azJs3r8r2s2fPMGPGDKxZswZmZmYa97l69SoAoFKlSirl7u7uMDAwwNWrV9G5c2fExsYCgMZ2zMzMcPXqVSgUChgYGODYsWMAlH1Rr149nDhxAoaGhmjQoAGWLl2KIkWK6HQ+RF+VICIiIiIiykLCwsIEANGyZUud93FychINGzYUISEhIiQkRFy/fl20b99eABCDBw9Wqde0aVONbVy6dEkAEGvXrk31WLly5RIVKlRItc6PP/4oAIj//vtPCCHEmDFjhLGxsXj37p1UJzY2VuTKlUv07NlTKuvVq5dwdHQUb968UWmvffv2wsbGRkRFRQkhhPDz8xMARLFixaSyJN26dRMAxJQpU1TKK1asKNzd3aVtf39/AUBs3LhRpd6hQ4fUyj89hhBC9OvXT5ibm4uYmBghhBBxcXHC3t5euLm5idjYWKneihUrBADh6empvcNSOY63t7coVqyYSpmrq6tO7SUBIAYOHCiEEKJOnTrCwcFBOtbatWsFAHHp0iWpflKZLv8+1aZNG1GjRg2Nx04ycOBAYWhoqDFWOzs70b59eyGEECEhIUImk4levXqp1Ll79650/KTnStJzLk+ePKJRo0Ziy5YtYvbs2cLS0lI4OzuLDx8+6NxfRF8LZ0oREREREVGWknQJmpWVVbr2O3LkCOzs7KRtQ0NDdOnSBTNnzszQ+CIiItKMLenxpHPx9fXF9OnTsWPHDulOaEeOHJEuzQIAIQS2b9+Odu3aQQihcnc1b29vbN68Gf/++6+0kDUAdOvWTetsnE/X0apVqxb+/PNPaXvr1q2wsbFBgwYNVI7l7u4OS0tL+Pn5oWPHjgBUZ+pEREQgNjYWtWrVwvLly3H37l1UqFABly9fRnBwMKZMmaKytlX37t0xcuTIVPsrScrjhIWFIT4+Hp6enjh8+DDCwsJgY2OjUzupmTRpEjw9PbFs2TIMHTpUYx1vb28cPXo03W37+flh+/btuHjxYqr1oqOjta7/JZfLpcsL8+bNi3bt2uGPP/6Ai4sLvv/+e7x8+RKDBw+GsbEx4uPjpbqRkZEAlJet7t+/HwYGytV6ChYsiA4dOmDTpk3o3bt3us+JKDMxKUVERERERFmKtbU1AOh8+VSSqlWrYurUqZDJZDA3N4eLiwty5cqV7uOnXLtHEysrqzRjS3o8KTlVoUIFlC5dGlu2bJGSUlu2bEHevHlRt25dAEBISAhCQ0OxYsUKlbsKphQcHKyyXbRoUY315HK5SoIOAGxtbVXWinrw4AHCwsJgb2+f5rFu3bqF8ePH48SJEyrrVgHK5BEAPH36FABQokQJlceNjY1RrFgxjcf41NmzZzFx4kScP38eUVFRasfJiKRU7dq1UadOHcyaNUvrAviOjo4a1zJLTUJCAn788Ud06dIFlStXTrWumZkZ4uLiND4WExOjkpxbvnw5oqOjMWLECGmNqs6dO8PZ2Rk7duyApaWl1CYAtGvXTkpIAUDbtm3RpUsXnDt3jkkpynKYlCIiIiIioizF2toa+fPnx82bN9O1X968eVG/fv1U66SchfKppCSIXC5PtQ0XFxdcvXoVsbGxMDU11Vjnv//+g7GxsUqCxtfXF9OmTcObN29gZWWFPXv2oEOHDjAyUn4tUygUAJQJh0/XnkpSvnx5lW1ts6QMDQ1TPYek49nb22Pjxo0aH09KaoWGhsLT0xPW1taYMmUKnJ2dIZfL8e+//2L06NFS3F8qICAA9erVQ+nSpTF37lwUKlQIJiYmOHDgAObNm5dhxwGAiRMnwsvLC8uXL9eYuIyOjpaSbWlxcHAAAKxfvx737t3D8uXL8eTJE5U6ERERePLkCezt7WFubg5HR0ckJiYiODhYJSkYFxeHt2/fIn/+/FKZjY0Ndu/ejWfPnuHJkydwcnKCk5MTatSoATs7Oyn+pH0+XV/L0NAQefLkUVu8nigrYFKKiIiIiIiynGbNmmHFihU4f/48qlevnmHtOjk54fbt2xofu3fvnlQnrdjOnz+PrVu3onPnzmqPP3nyBP7+/qhfv75K0sjX1xeTJ0/G9u3bkS9fPoSHh6N9+/bS43Z2drCyskJiYmKaybWM4OzsjGPHjsHDw0NrcgtQ3unv7du32LFjB2rXri2Vf3pXw6R+e/DggTT7C1AuOP/48WNUqFAh1Xj27t2L2NhY7NmzB4ULF5bK/fz81OqmNZstLZ6envDy8sLMmTMxYcIEtce3bNmCHj166NSWEAKAcoHz+Ph4lcsrk6xfvx7r16/Hzp074ePjAzc3NwDKOzM2adJEqnf58mUoFArp8ZQKFy4s9UtoaCiuXLmC1q1bS4+7u7sDUN51MaW4uDi8efNGbeYcUVZgkHYVIiIiIiKir2vUqFGwsLBA79698fr1a7XHAwICsGDBgnS326RJE7x48QK7du1SKY+NjcWqVatgb2+P7777LtU2+vXrB3t7e4wcORKPHj1SeSwmJgY9evSAEEIt2eHi4oJy5cphy5Yt2LJlCxwdHVWSPIaGhmjdujW2b9+ucZZYSEhIOs82de3atUNiYiJ++eUXtccSEhIQGhoqxQUkJ18AZaJjyZIlKvtUqlQJdnZ2WLZsmcqlaevWrZPaSo2m44SFhWHt2rVqdS0sLHRqMzWTJk1CUFCQxkslk9aU0uVfkvbt22Pnzp1q/wDl827nzp2oWrUqAKBu3brInTs3li5dqnLcpUuXwtzcHE2bNk019jFjxiAhIUFlTSwvLy9p5ltMTIxUvm7dOiQmJqJBgwbp7ySiTMaZUkRERERElOU4Oztj06ZN8PX1hYuLC7p27YqyZcsiLi4O586dw9atW9G9e/d0t9u3b1+sWbMGbdu2Rc+ePVGxYkW8ffsWW7Zswc2bN7F+/XqtC1AnyZMnD7Zt24amTZviu+++Q+/evVGmTBkEBQVh3bp1ePjwIRYsWIAaNWqo7evr64sJEyZALpejV69eKmv/AMCMGTPg5+eHqlWrok+fPihTpgzevXuHf//9F8eOHcO7d+/Sfc7aeHp6ol+/fpg+fTquXbuGhg0bwtjYGA8ePMDWrVuxYMECtGnTBjVq1ICtrS26deuGH3/8ETKZDH/++adK8ghQrh01depU9OvXD3Xr1oWvry8eP36MtWvX6rSmVMOGDWFiYoLmzZujX79+iIyMxMqVK2Fvb49Xr16p1HV3d8fSpUsxdepUFC9eHPb29iqzs3Q9f09PT5w6dUrtsc9ZU6p06dIoXbq0xseKFi0KHx8fadvMzAy//PILBg4ciLZt28Lb2xv+/v7YsGEDpk2bhty5c0t1Z8yYgZs3b6Jq1aowMjLCrl27cOTIEUydOlVl7SpTU1PMnj0b3bp1Q+3atdGlSxc8e/YMCxYsQK1atdCqVat0nQ/RV6HHO/8RERERERGl6v79+6JPnz6iSJEiwsTERFhZWQkPDw+xcOFCERMTI9VzcnISTZs21anN9+/fi6FDh4qiRYsKY2NjYW1tLerUqSMOHjyYrtgeP34s+vTpIwoXLiyMjY1F3rx5RYsWLYS/v7/WfR48eCAACADizJkzGuu8fv1aDBw4UBQqVEgYGxsLBwcHUa9ePbFixQqpjp+fnwAgtm7dqrZ/t27dhIWFhVr5xIkThaavgCtWrBDu7u7CzMxMWFlZiXLlyolRo0aJwMBAqc7Zs2dFtWrVhJmZmcifP78YNWqUOHz4sAAg/Pz8VNpbsmSJKFq0qDA1NRWVKlUSp0+fFp6ensLT01NrvyTZs2ePKF++vJDL5aJIkSJi5syZYs2aNQKAePz4sVQvKChING3aVFhZWQkAabYNQAwcOFCtPKkfAYhLly6lGd/n0HZsIZR9X6pUKWFiYiKcnZ3FvHnzhEKhUKmzb98+UaVKFWFlZSXMzc1FtWrVxN9//631eH/99ZeoUKGCMDU1Ffny5RODBg0S4eHhGXpORBlFJsQn6W0iIiIiIiIiIqJMxjWliIiIiIiIiIjoq2NSioiIiIiIiIiIvjompYiIiIiIiIiI6KtjUoqIiIiIiIiIiL46JqWIiIiIiIiIiOirY1KKiIiIiIiIiIi+OialiLIhLy8veHl5ZVr7MpkMgwYNyrT2KZlMJsOkSZMype2TJ09CJpNh27ZtmdI+AKxbtw4ymQxPnjzJsDYnTZoEmUyWYe0REX0LZs2ahdKlS0OhUOg7lC+S2WOUzPiM4OcOUbKvMX5ML03jzWrVqmHUqFH6C4p0xqQU0ScCAgLQr18/FCtWDHK5HNbW1vDw8MCCBQsQHR0t1StSpAhkMpn0z97eHrVq1cLOnTtV2itSpAiaNWum8ViXL1+GTCbDunXrdIrt9evXGDFiBEqXLg1zc3NYWFjA3d0dU6dORWho6OeecrYTGxuLhQsXombNmrC1tYWJiQny58+PFi1a4K+//kJiYqJU98mTJyp/R0NDQxQuXBjff/89rl27plbvt99+03jM3377LV3Jl2vXrqFz584oVKgQTE1NkTt3btSvXx9r165ViS8r8vLyUukzbf8yK5lGRJTThIeHY+bMmRg9ejQMDJKH75GRkZg4cSLKli0LCwsL5MmTB25ubvjpp58QGBiox4hJn16+fIl27dohV65csLa2RsuWLfHo0SOd9z937hxq1qwJc3NzODg44Mcff0RkZKRavdjYWIwePRr58+eHmZkZqlatiqNHj6rU+XSc9em/Pn36fPH5ZpTw8HBMnjwZFSpUgKWlJczMzFC2bFmMHj1a5fXUvXt3lXOwtrZGhQoVMGfOHMTGxqrUs7S01Ho8S0tLdO/ePTNPKUcbPXo0Fi9ejKCgIH2HQmkw0ncARFnJ/v370bZtW5iamqJr164oW7Ys4uLicObMGYwcORK3bt3CihUrpPpubm4YPnw4ACAwMBDLly9Hq1atsHTpUvTv3z9DY7t06RKaNGmCyMhIdO7cGe7u7gCUia0ZM2bg9OnTOHLkSIYe81sUEhKCxo0b48qVK/D29sb48eORO3duBAUF4dixY+jYsSMePnyIn3/+WWW/Dh06oEmTJkhMTMSdO3ewdOlSHDx4EBcuXICbm1uGxrhq1Sr0798f+fLlQ5cuXVCiRAlERETg+PHj6NWrF169eoWxY8dm6DEz0rhx49C7d29p+9KlS/j9998xduxYuLi4SOXly5eHq6sr2rdvD1NT0ww7/vjx4/G///0vw9ojIsrq1qxZg4SEBHTo0EEqi4+PR+3atXH37l1069YNgwcPRmRkJG7duoVNmzbh+++/R/78+fUYtWYcq2SuyMhI1KlTB2FhYRg7diyMjY0xb948eHp64tq1a8iTJ0+q+1+7dg316tWDi4sL5s6dixcvXuC3337DgwcPcPDgQZW63bt3x7Zt2zBkyBCUKFEC69atQ5MmTeDn54eaNWsCAOzs7PDnn3+qHefQoUPYuHEjGjZsmHEn/wUePXqE+vXr49mzZ2jbti369u0LExMT/Pfff1i9ejV27tyJ+/fvS/VNTU2xatUqAEBoaCi2b9+OESNG4NKlS9i8ebO+ToNSaNmyJaytrbFkyRJMmTJF3+FQagQRCSGEePTokbC0tBSlS5cWgYGBao8/ePBAzJ8/X9p2cnISTZs2Vanz6tUrYWFhIUqWLJlqvSSXLl0SAMTatWtTje39+/eiQIECIl++fOLOnTtqjwcFBYlffvlF2vb09BSenp6ptvklAIiBAwdmWvtfwtvbWxgYGIjt27drfPzSpUtiw4YN0vbjx48FADF79myVenv27BEARN++fVOtl2T27NkCgHj8+HGq8Z0/f14YGhqKmjVrivDwcI3xpXw+ABATJ05Mtc3P5efnJwCIrVu3flE7W7duFQCEn59fxgRGREQqypcvLzp37qxS9vfffwsAYuPGjWr1o6OjRVhY2NcKL0uZOHGiyOivOJnRZmaZOXOmACD++ecfqezOnTvC0NBQjBkzJs39GzduLBwdHVWePytXrhQAxOHDh6Wyixcvqo2LoqOjhbOzs6hevXqax6lXr56wtrYW0dHRup5apomPjxcVKlQQ5ubmwt/fX+3xsLAwMXbsWGm7W7duwsLCQqVOYmKiqFSpkgAgXr58qbVeShYWFqJbt24ZcxJfgUKhEFFRURk2fsxIa9eu1TgOHzRokHBychIKhUI/gZFOePke0UezZs1CZGQkVq9eDUdHR7XHixcvjp9++inVNhwcHODi4oLHjx9naGzLly/Hy5cvMXfuXJQuXVrt8Xz58mH8+PGpthEcHIxevXohX758kMvlqFChAv744w+1egqFAgsWLEC5cuUgl8thZ2eHRo0a4fLly6m2P3XqVBgYGGDhwoVa65QtWxZ16tTReMwCBQqgTZs2UtnmzZvh7u4OKysrWFtbo1y5cliwYEGqMZw/fx6HDx9G37590apVK411KlWqhE6dOqXaDgDUrVsXADL8bzl58mTIZDJs3LgRVlZWGuNLayr31atX0bhxY1hbW8PS0hL16tXDhQsX1OqFhoZi6NChKFKkCExNTVGwYEF07doVb9680dp2bGwsmjVrBhsbG5w7dy7d5/cpTdf4J13SevLkSVSqVAlmZmYoV64cTp48CQDYsWOH9Pxzd3fH1atXVdrUtLZH0jpnu3btQtmyZWFqagpXV1ccOnRILaak48rlcjg7O2P58uVcL4SIsqzHjx/jv//+Q/369VXKAwICAAAeHh5q+yQtPwAAa9euhUwmU3svBYBff/0VhoaGePnyJQDl5dlly5bF7du3UadOHZibm6NAgQKYNWuW2r4xMTGYNGkSSpYsCblcDkdHR7Rq1UqKS5tP15RKWp/m77//xrRp01CwYEHI5XLUq1cPDx8+VNv/4sWLaNKkCWxtbWFhYYHy5cunOj5IunxM01IJmi41P3PmDCpXrqzyGaHNhg0b4O7uDjMzM+TOnRvt27fH8+fPVeo8ePAArVu3hoODA+RyOQoWLIj27dsjLCxMa7tfYtu2bahcuTIqV64slZUuXRr16tXD33//neq+4eHhOHr0KDp37iw9fwCga9eusLS0VNl/27ZtMDQ0RN++faUyuVyOXr164fz582r9kNKrV6/g5+eHVq1aQS6XS+VJn8X3799H586dYWNjAzs7O/z8888QQuD58+fS7BcHBwfMmTNHre2FCxfC1dUV5ubmsLW1RaVKlbBp06ZUz3v79u24fv06xo0bJ83wSsna2hrTpk1L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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Key insight: Synchronized timing includes 0.007ms of CPU overhead.\n", + "CUDA Events (2.6885ms) measure pure GPU execution time.\n" + ] + } + ], + "source": [ + "# Compare: Synchronized time.time() vs CUDA Events\n", + "# This shows why GPU-side timestamps are more accurate\n", + "\n", + "def benchmark_sync(func, *args):\n", + " \"\"\"Attempt 2: Synchronized - waits for GPU but uses CPU clock.\"\"\"\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " start = time.time()\n", + " func(*args)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " end = time.time()\n", + " return (end - start) * 1000\n", + "\n", + "def benchmark_events(func, *args):\n", + " \"\"\"Attempt 3: CUDA Events - GPU-side timestamps, most accurate.\"\"\"\n", + " start_event = torch.cuda.Event(enable_timing=True)\n", + " end_event = torch.cuda.Event(enable_timing=True)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " start_event.record()\n", + " func(*args)\n", + " end_event.record()\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " return start_event.elapsed_time(end_event)\n", + "\n", + "# Test across different matrix sizes\n", + "sizes = [512, 1024, 2048, 4096]\n", + "sync_times = []\n", + "event_times = []\n", + "\n", + "print(\"Comparing Synchronized time.time() vs CUDA Events:\")\n", + "print(\"-\" * 60)\n", + "for s in sizes:\n", + " a_test, b_test = get_data(s)\n", + " # Warmup\n", + " for _ in range(3):\n", + " simple_mm(a_test, b_test)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " \n", + " sync_t = benchmark_sync(simple_mm, a_test, b_test)\n", + " event_t = benchmark_events(simple_mm, a_test, b_test)\n", + " \n", + " sync_times.append(sync_t)\n", + " event_times.append(event_t)\n", + " overhead = sync_t - event_t\n", + " print(f\"N={s:4d}: sync={sync_t:7.4f}ms, events={event_t:7.4f}ms, overhead={overhead:+.4f}ms\")\n", + "\n", + "# Create visualization\n", + "fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", + "\n", + "# Left plot: Both methods across sizes\n", + "axes[0].plot(sizes, sync_times, 's-', label='Synchronized (CPU clock)', linewidth=2, markersize=8, color='orange')\n", + "axes[0].plot(sizes, event_times, '^-', label='CUDA Events (GPU clock)', linewidth=2, markersize=8, color='green')\n", + "axes[0].set_xlabel('Matrix Size (N)')\n", + "axes[0].set_ylabel('Time (ms)')\n", + "axes[0].set_title('CPU Clock vs GPU Clock Timing')\n", + "axes[0].legend()\n", + "axes[0].grid(True, alpha=0.3)\n", + "\n", + "# Right plot: Bar chart showing overhead at largest size\n", + "overhead_ms = sync_times[-1] - event_times[-1]\n", + "axes[1].bar(['Synchronized\\n(time.time + sync)', 'CUDA Events\\n(GPU timestamps)'], \n", + " [sync_times[-1], event_times[-1]], \n", + " color=['orange', 'green'], alpha=0.8)\n", + "axes[1].set_ylabel('Time (ms)')\n", + "axes[1].set_title(f'CPU Overhead at N={sizes[-1]}\\n(Sync includes ~{overhead_ms:.3f}ms CPU overhead)')\n", + "axes[1].axhline(y=event_times[-1], color='green', linestyle='--', alpha=0.5, label='True GPU time')\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print(f\"\\nKey insight: Synchronized timing includes {overhead_ms:.3f}ms of CPU overhead.\")\n", + "print(f\"CUDA Events ({event_times[-1]:.4f}ms) measure pure GPU execution time.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dV8AmQi-zX2i" + }, + "source": [ + "### Attempt 3: Removing CPU Overhead (CUDA Events)\n", + "\n", + "To get a precise measurement, we need to bypass the CPU clock entirely. We can ask the GPU driver to record timestamps directly on the device using `torch.cuda.Event`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.887269Z", + "iopub.status.busy": "2025-12-17T20:56:47.887144Z", + "iopub.status.idle": "2025-12-17T20:56:47.899041Z", + "shell.execute_reply": "2025-12-17T20:56:47.898350Z" + }, + "id": "i6PfSdkTzX2i", + "outputId": "8b3e29d1-1789-4bfb-9a44-599016516dd7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Run 0: 2.8415 ms\n", + "Run 1: 2.7093 ms\n", + "Run 2: 2.7007 ms\n" + ] + } + ], + "source": [ + "def benchmark_events(func, *args):\n", + " \"\"\"Better: Uses GPU timestamps, avoiding CPU overhead.\"\"\"\n", + " start_event = torch.cuda.Event(enable_timing=True)\n", + " end_event = torch.cuda.Event(enable_timing=True)\n", + "\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " start_event.record()\n", + " func(*args)\n", + " end_event.record()\n", + " torch.cuda.synchronize(device=DEVICE)\n", + "\n", + " return start_event.elapsed_time(end_event) # Returns ms directly\n", + "\n", + "# Run it a few times\n", + "for i in range(3):\n", + " print(f\"Run {i}: {benchmark_events(simple_mm, a, b):.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BkfaaDawzX2i" + }, + "source": [ + "### Attempt 4: Handling the \"Cold Start\"\n", + "\n", + "Notice Run 0 is noticably slower than the rest. The first time you run a PyTorch function (and similarly launching a cuda kernel), the framework does a lot of heavy lifting which could include: allocating memory, initializing cuBLAS/cuDNN workspaces, lazy kernel loading, and compiling kernels (especially if using `torch.compile` or Triton). This \"Cold Start\" penalty is a one-time cost that shouldn't be included in your performance metrics.\n", + "\n", + "**The Fix:**\n", + "We need to perform **Warmup Runs**—running the kernel a few times to settle the system state before we start measuring." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.901255Z", + "iopub.status.busy": "2025-12-17T20:56:47.901143Z", + "iopub.status.idle": "2025-12-17T20:56:47.993793Z", + "shell.execute_reply": "2025-12-17T20:56:47.992809Z" + }, + "id": "j_PsAuJkzX2i", + "outputId": "d6983401-72d3-468c-ffd8-c0833e8d5556" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Run 0: 2.7697 ms\n", + "Run 1: 2.6890 ms\n", + "Run 2: 2.6891 ms\n" + ] + } + ], + "source": [ + "def benchmark_warmup(func, *args, warmup_iters=30, benchmark_iters=3):\n", + " \"\"\"Better: Includes warmup to avoid cold-start penalty.\"\"\"\n", + " # Warmup phase\n", + " for _ in range(warmup_iters):\n", + " func(*args)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + "\n", + " # Measurement phase\n", + " measurements = []\n", + " for _ in range(benchmark_iters):\n", + " measurements.append(benchmark_events(func, *args))\n", + " torch.cuda.synchronize(device=DEVICE)\n", + " return measurements\n", + "\n", + "# print(f\"Warmed up time: {benchmark_warmup(simple_mm, a, b):.4f} ms\")\n", + "\n", + "for i, measurement in enumerate(benchmark_warmup(simple_mm, a, b)):\n", + " print(f\"Run {i}: {measurement:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OR3uOh7kzX2i" + }, + "source": [ + "### Attempt 5: The Single Sample Fallacy (Variance)\n", + "\n", + "Relying on a single sample after warmup is bad science. Operating systems are noisy; background processes interrupt the CPU, and GPU clocks fluctuate thermally. A single measurement is anecdotal, not statistical.\n", + "\n", + "#### Visualizing the Jitter\n", + "\n", + "Let's run the benchmark 100 times and plot every single run. You will clearly see the \"Cold Start\" spike and the noise floor of the OS." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 653 + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:47.996630Z", + "iopub.status.busy": "2025-12-17T20:56:47.996511Z", + "iopub.status.idle": "2025-12-17T20:56:48.348631Z", + "shell.execute_reply": "2025-12-17T20:56:48.347785Z" + }, + "id": "T-7QH4cHzX2i", + "outputId": "c758effd-a810-422d-d3ca-66c128cdb716" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIjCAYAAADvBuGTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkKdJREFUeJzs3Xd4VFX+x/HPTMqkTAqQBAg1AtJFRLCggoKgoogFZYUF1HVxDbrI6iK6FnQ1a13rYlkE3BVxUfiJICgqoChYQJEmvSgtoaSXSXLv74+YgSHJZGZyk0zg/XoenofcOffOuTPnnjnfe8q1maZpCgAAAABQI/b6zgAAAAAAnAwIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgCggVi2bJlsNpvee++9+s6KTx555BHZbDYdOnTIa7qxY8eqbdu2dZMpH7Rt21Zjx46t72w0SLt27ZLNZtOMGTOqTRts3zsAWIHgCgAkzZgxQzabzeNfUlKSLr74Yi1atKi+s4da0r9/f3Xr1s1rmo0bN+qRRx7Rrl27Krz2r3/9y6dAwmpHjx7V7bffrhYtWig6Olo9evTQ008/HdCx5s2bp8svv1wJCQkKDw9XcnKybrjhBn3++ecW5zowhmHorbfe0jnnnKPGjRsrJiZGp59+ukaPHq1Vq1a503n7nqxQX981gIYltL4zAADB5NFHH1VKSopM09TBgwc1Y8YMXXHFFfrwww915ZVX1nf2TkpvvPGGDMOo72y4bd68WXb7sXuPGzdu1JQpU9S/f/8KPS3/+te/lJCQUOc9XWPHjtVHH32k8ePHq1OnTlq7dq3efvtt3XvvvT4fwzRN3XLLLZoxY4Z69uypiRMnqlmzZtq/f7/mzZunAQMG6KuvvtL5559fi2dSvbvuukuvvPKKrr76ao0cOVKhoaHavHmzFi1apNNOO03nnnuuJO/fkxXq67sG0LAQXAHAcS6//HKdffbZ7r9vvfVWNW3aVO+88w7BlY/y8vIUHR3tc/qwsLBazI3/HA5Hvb5/SUmJDMNQeHh4pa/n5eVpwYIFuv322/XPf/7Tvb2oqMiv93n22Wc1Y8YMTZgwQc8995xsNpv7tQceeED/+c9/FBpav82EgwcP6l//+pduu+02vf766x6vPf/888rIyKj1POTn5ysqKqrW3wfAyYFhgQDgRXx8vCIjIys0Mg3D0PPPP6+uXbsqIiJCTZs21bhx43T06FGPdG3bttWVV16pFStWqE+fPoqIiNBpp52mt956q8J7ZWZm6u6771bbtm3lcDjUsmVLjR49usKcJcMw9Pjjj6tly5aKiIjQgAEDtG3bNo805cPdfvrpJ/Xr109RUVFq3769e77W8uXLdc455ygyMlIdO3bUp59+6rH/7t27dccdd6hjx46KjIxUkyZNNHz48ApDrsqHUy5fvlx33HGHkpKS1LJlyyo/z927d6t9+/bq1q2bDh48KKni3JvyeTvPPPOMXn/9dbVr104Oh0O9e/fWd999V+GYc+bMUZcuXRQREaFu3bpp3rx5NZrPc/ycqxkzZmj48OGSpIsvvtg9ZHTZsmVq27atNmzYoOXLl7u39+/f332czMxMTZgwQa1atZLD4VD79u315JNPevTSHX+uzz//vPtcN27cWGX+yt/LNE2P7f4EhQUFBUpLS1OnTp30zDPPeARW5X7/+9+rT58+7r937Nih4cOHq3HjxoqKitK5556rhQsX+vR+//d//6du3bp5fEe+2Llzp0zTVN++fSu8Vj50V/L+PUnSBx98oCFDhig5OVkOh0Pt2rXTY489ptLSUo9jll83q1ev1kUXXaSoqCjdf//91X7XAFCOnisAOE5WVpYOHTok0zSVnp6ul156Sbm5uRo1apRHunHjxmnGjBm6+eabddddd2nnzp16+eWX9cMPP+irr77y6I3Ztm2brr/+et16660aM2aM3nzzTY0dO1a9evVS165dJUm5ubm68MILtWnTJt1yyy0666yzdOjQIc2fP1+//vqrEhIS3Mf7xz/+IbvdrnvuuUdZWVl66qmnNHLkSH3zzTceeTx69KiuvPJKjRgxQsOHD9fUqVM1YsQIvf3225owYYJuv/123XTTTXr66ad1/fXX65dfflFMTIwk6bvvvtPXX3+tESNGqGXLltq1a5emTp2q/v37a+PGjRXu5N9xxx1KTEzUQw89pLy8vEo/2+3bt+uSSy5R48aNtWTJEo9zqsysWbOUk5OjcePGyWaz6amnntK1116rHTt2uD/fhQsX6sYbb1T37t2Vlpamo0eP6tZbb1WLFi28HttXF110ke666y69+OKLuv/++9W5c2dJUufOnfX8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nsaMGaNnn33Wva2wsFCZmZl+H+vpp59WaGio7rjjDsXExOimm26yJI/lDeoTV0qsalugKltJr7rX2rVrp9zcXHdPldV5+eWXX9w9kJ06ddLChQs1YMAA9erVS3v27NFrr73m9TgXXHCBGjVqpHfeeUf3339/tYtatGnTRps3b66wvXxIXVXBTfn2rVu3VnitsuP54+yzz9by5cu1f/9+tWnTpsrvYtmyZTp8+LDmzp2riy66yL19586dfr2ft3IAAOUYFggAXhQXF+uTTz5ReHi4ewjUDTfcoNLSUj322GMV0peUlAQUgFx33XVau3ZtpUtU10dPTUhISIX3femllyosXe0Lm82m119/Xddff73GjBmj+fPnW5LH5ORkdevWTW+99ZY78JXKlplft26dJe8hyf3Mrsq+1+jo6Eq333DDDVq5cqU+/vjjCq9lZma6A3Z/DRgwQFLZw66PP8Y555yjv/3tb9q1a5c6dOhQ7RDTqKgoTZo0SZs2bdKkSZMqLWP//e9/9e2330qSrrjiCn377bdauXKl+/W8vDy9/vrratu2bZXzp5o3b64zzzxTM2fO9Bh+t2TJEq/LzZc7cOBApelcLpc+++wz2e129xDQqr6n8sDx+HN0uVz617/+Ve37H6+q7xoAjkfPFQAcZ9GiRe678enp6Zo1a5a2bt2q++67zz1PpV+/fho3bpzS0tL0448/atCgQQoLC9PWrVs1Z84cvfDCC7r++uv9et97771X7733noYPH65bbrlFvXr10pEjRzR//ny9+uqr6tGjh+Xn6s2VV16p//znP4qLi1OXLl20cuVKffrpp2rSpElAx7Pb7frvf/+rYcOG6YYbbtBHH32kSy65pMb5fOKJJ3T11Verb9++uvnmm3X06FG9/PLL6tatm0fAVRNnnnmmQkJC9OSTTyorK0sOh0OXXHKJkpKS1KtXL02dOlV///vf1b59eyUlJemSSy7Rvffeq/nz5+vKK690L7ufl5endevW6b333tOuXbuqXYq+MmeccYZ7yfHevXvrd7/7neLj4/Xll19q9uzZuvDCC7VixQrddtttmjlzptdj3XvvvdqwYYOeffZZLV26VNdff72aNWumAwcO6P/+7//07bffuoch3nfffXrnnXd0+eWX66677lLjxo01c+ZM7dy5U++//77s9qrv1aalpWnIkCG64IILdMstt+jIkSN66aWX1LVr12q/o19//VV9+vTRJZdcogEDBqhZs2ZKT0/XO++8o7Vr12rChAnuz7Gq7+n8889Xo0aNNGbMGN11112y2Wz6z3/+4/dNi6q+awDwUG/rFAJAEKlsKfaIiAjzzDPPNKdOnepeDv14r7/+utmrVy8zMjLSjImJMbt3727+9a9/Nfft2+dO06ZNG3PIkCEV9u3Xr1+FZZ0PHz5sjh8/3mzRooUZHh5utmzZ0hwzZox56NAh0zSPLcU+Z84cj/0qW/66siXGveVHkpmamur+++jRo+bNN99sJiQkmE6n0xw8eLD5888/V1imvPxz++677yoc8/il2Mvl5+eb/fr1M51Op3s5+KqWYn/66acrzefDDz/ssW327Nlmp06dTIfDYXbr1s2cP3++ed1115mdOnWqsP+JLrroIvOMM87w2HbiOZqmab7xxhvmaaedZoaEhHgs933gwAFzyJAhZkxMjCnJ4zvNyckxJ0+ebLZv394MDw83ExISzPPPP9985plnTJfLVe25ejNt2jSzV69eZkREhOl0Os0LL7zQnD17tmmapnn//febkswpU6b4dKz33nvPHDRokNm4cWMzNDTUbN68uXnjjTeay5Yt80i3fft28/rrrzfj4+PNiIgIs0+fPuaCBQs80lRWFk3TNN9//32zc+fOpsPhMLt06WLOnTu3wvdemezsbPOFF14wBw8ebLZs2dIMCwszY2JizPPOO8984403KlyXVX1PX331lXnuueeakZGRZnJysvnXv/7V/QiC45dur+q6MU3v3zUAlLOZZgOYGQwAgB/OPPNMJSYmasmSJV7TnXXWWYqOjtaXX35ZRzkDAJzMmHMFAGiwiouLK8xfWrZsmdauXav+/ft73Tc3N1c///yzz89bAgCgOsy5AgA0WHv37tXAgQM1atQoJScn6+eff9arr76qZs2a6fbbb690n4MHD2revHn6z3/+o4KCAo0ePbqOcw0AOFkRXAEAGqxGjRqpV69e+ve//62MjAxFR0dryJAh+sc//lHl4hubNm3S+PHj1b59e7311lvq27dvHecaAHCyYs4VAAAAAFiAOVcAAAAAYAGCKwAAAACwAHOuKmEYhvbt26eYmBjZbLb6zg4AAACAemKapnJycpScnOz1oekSwVWl9u3bp1atWtV3NgAAAAAEiV9++UUtW7b0mobgqhIxMTGSyj7A2NjYes2LYRjKyMhQYmJitZEycDzKDgJBuUEgKDcIFGUHgajrcpOdna1WrVq5YwRvCK4qUT4UMDY2NiiCq8LCQsXGxlLpwC+UHQSCcoNAUG4QKMoOAlFf5caX6UKUYgAAAACwAMEVAAAAAFiA4AoAAAAALMCcKwAAAPjFNE2VlJSotLS0RscxDEPFxcUqLCxkzhV8ZnW5CQkJUWhoqCWPYCK4AgAAgM9cLpf279+v/Pz8Gh/LNE0ZhqGcnByeLQqf1Ua5iYqKUvPmzRUeHl6j4xBcAQAAwCeGYWjnzp0KCQlRcnKywsPDa9S4Le8Bs6rXAKcGK8uNaZpyuVzKyMjQzp071aFDhxr1hhFcAQAAwCcul0uGYahVq1aKioqq8fEIrhAIq8tNZGSkwsLCtHv3brlcLkVERAR8LAa3AgAAwC/Mj8LJxqoyzZUBAAAAABYguAIAAAAACxBcAQAAADW0bNky2Ww2ZWZmSpJmzJih+Pj4es0T6h7BFQAAAE5qY8eOlc1m0+23317htdTUVNlsNo0dO9bS97zxxhu1ZcsWS4/pi127dunWW29VSkqKIiMj1a5dOz388MNyuVzV7rty5Updcsklio6OVmxsrC666CIVFBS4X9+yZYuuvvpqJSQkKDY2VhdccIGWLl3qcYzPPvtM559/vmJiYtSsWTNNmjRJJSUlHmlM09Qzzzyj008/XQ6HQy1atNDjjz9uzQdQzwiuAAAAcNJr1aqVZs+e7REsFBYWatasWWrdurXl7xcZGamkpCTLj1udn3/+WYZh6LXXXtOGDRv0z3/+U6+++qruv/9+r/utXLlSl112mQYNGqRvv/1W3333ncaPH++x0MOVV16pkpISff7551q9erV69OihK6+8UgcOHJAkrV27VldccYUuu+wy/fDDD3r33Xc1f/583XfffR7v9ec//1n//ve/9cwzz+jnn3/W/Pnz1adPH+s/jHpAcBXEDMPUzkO52pmRq52HcmUYZn1nCQAAoHJ5eVX/Kyz0Pe1xwU+VaQNw1llnqVWrVpo7d65729y5c9W6dWv17NnTI61hGEpLS3P3/vTo0UPvvfeeR5qPPvpIp59+uiIjI3XxxRdr165dHq+fOCxw+/btuvrqq9W0aVM5nU717t1bn376qcc+bdu21RNPPKFbbrlFMTExat26tV5//XW/zvOyyy7T9OnTNWjQIJ122mkaOnSo7rnnHo/zrszdd9+tu+66S/fdd5+6du2qjh076oYbbpDD4ZAkHTp0SFu3btV9992nM844Qx06dNA//vEP5efna/369ZKkd999V2eccYYeeughtW/fXv369dNTTz2lV155RTk5OZKkTZs2aerUqfrggw80dOhQpaSkqFevXrr00kurzNuuXbtks9n0v//9TxdeeKGioqJ03nnnacuWLfruu+909tlny+l06vLLL1dGRoZ7v2XLlqlPnz6Kjo5WfHy8+vbtq927d/v1efqL4CpIrd+bpccWbtSUDzfqf9//qikfbtRjCzdq/d6s+s4aAABARU5n1f+uu84zbVKS5HTKFhOjsEaNZIuJOZb28ss907ZtW/F4Abrllls0ffp0999vvvmmbr755grp0tLS9NZbb+nVV1/Vhg0bdPfdd2vUqFFavny5JOmXX37Rtddeq6uuuko//vij/vCHP1TonTlRbm6urrjiCn322Wf64YcfdNlll+mqq67Snj17PNI9++yzOvvss/XDDz/ojjvu0J/+9Cdt3rzZ/Xr//v39HsKYlZWlxo0bV/l6enq6vvnmGyUlJen8889X06ZN1a9fP61YscKdpkmTJurYsaPeeust5eXlqaSkRK+99pqSkpLUq1cvSVJRUVGFZ0RFRkaqsLBQq1evliR9+OGHOu2007RgwQKlpKSobdu2+sMf/qAjR45Uex4PP/yw/va3v2n16tUKDQ3VyJEj9de//lUvvPCCvvzyS23btk0PPfSQJKmkpETDhg1Tv3799NNPP2nlypX64x//WOvPUyO4CkLr92bpxc+2at2vWYqPDFdSbITiI8O17tey7QRYAAAA/hs1apRWrFih3bt3a/fu3frqq680atQojzRFRUV64okn9Oabb2rw4ME67bTTNHbsWI0aNUqvvfaaJGnq1Klq166dnn32WXXs2FEjR46sNuDp0aOHxo0bp27duqlDhw567LHH1K5dO82fP98j3RVXXKE77rhD7du316RJk5SQkOAxr6l169Zq3ry5z+e8bds2vfTSSxo3blyVaXbs2CFJeuSRR3Tbbbdp8eLFOuusszRgwABt3bpVkmSz2fTpp5/qhx9+UExMjCIiIvTcc89p8eLFatSokSRp8ODB+vrrr/XOO++otLRUe/fu1aOPPipJ2r9/v/u9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ILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAJzUxo4dK5vNpttvv73Ca6mpqbLZbBo7dmzdZ6waxcXFmjRpkrp3767o6GglJydr9OjR2rdvX7X77t27V6NGjVKTJk0UGRmp7t276/vvv3e/fvDgQY0dO1bJycmKiorSZZddpq1bt3oco7CwUKmpqWrSpImcTqeuu+46HTx40CPNd999pwEDBig+Pl6NGjXS4MGDtXbtWms+gAaI4AoAAAAnvVatWmn27NkqKChwbyssLNSsWbPUunXresxZ1fLz87VmzRo9+OCDWrNmjebOnavNmzdr6NChXvc7evSo+vbtq7CwMC1atEgbN27Us88+q0aNGkmSTNPUsGHDtGPHDn3wwQf64Ycf1KZNGw0cOFB5eXnu49x999368MMPNWfOHC1fvlz79u3Ttdde6349NzdXl112mVq3bq1vvvlGK1asUExMjAYPHqzi4uLa+VCCHMEVAAAAaizPlac8V55M03Rvc5W6lOfKU1FJUaVpDdNwbysuLVaeK0+FJYXVpg3EWWedpVatWmnu3LnubXPnzlXr1q3Vs2dPj7SGYSgtLU0pKSmKjIxUjx499N5777lfLy0t1a233up+vWPHjnrhhRc8jjF27FgNGzZMzzzzjJo3b64mTZooNTXVr6AjLi5OS5Ys0Q033KCOHTvq3HPP1csvv6zVq1drz549Ve735JNPqlWrVpo+fbr69OmjlJQUDRo0SO3atZMkbd26VatWrdLUqVPVu3dvdezYUVOnTlVBQYHeeecdSVJWVpamTZum5557Tpdccol69eql6dOn6+uvv9aqVaskST///LOOHDmiRx99VB07dlTXrl318MMP6+DBg9q9e3eV+bPZbHrttdd05ZVXKioqSp07d9bKlSu1bds29e/fX9HR0Tr//PO1fft29z5r167VxRdfrJiYGMXFxemcc87x6IkLFgRXAAAAqDFnmlPONKcO5R9yb3v6q6flTHNq/EfjPdImPZMkZ5pTe7KOBQivfPeKnGlO3Tr/Vo+0bV9oK2eaU5syNtU4j7fccoumT5/u/vvNN9/UzTffXCFdWlqa3nrrLb366qvasGGD7r77bo0aNUrLly+XVBZ8tWzZUnPmzNHGjRv10EMP6f7779f//vc/j+MsXbpU27dv19KlSzVz5kzNmDFDM2bMcL/+yCOPqG3btn6dQ1ZWlmw2m+Lj46tMM3/+fJ199tkaPny4kpKS1LNnT73xxhvu14uKyoLdiIgI9za73S6Hw6EVK1ZIklavXq3i4mINHDjQnaZTp05q3bq1Vq5cKUnq2LGjmjRpomnTpsnlcqmgoEDTpk1T586dqz2vxx57TKNHj9aPP/6oTp066aabbtK4ceM0efJkff/99zJNU+PHHys3I0eOVMuWLfXdd9/p+++/17333quwsDCfP7e6QnAFAACAU8KoUaO0YsUK7d69W7t379ZXX32lUaNGeaQpKirSE088oTfffFODBw/WaaedprFjx2rUqFF67bXXJElhYWGaMmWKzj77bKWkpGjkyJG6+eabKwRXjRo10ssvv6xOnTrpyiuv1JAhQ/TZZ5+5X09ISHD3JvmisLBQkyZN0u9+9zvFxsZWmW7Hjh2aOnWqOnTooI8//lh/+tOfdNddd2nmzJmSjgVJkydP1tGjR+VyufTkk0/q119/1f79+yVJBw4cUHh4eIUgrmnTpjpw4IAkKSYmRsuWLdN///tfRUZGyul0avHixVq0aJFCQ0O9nsvNN9+sG264QaeffromTZqkXbt2aeTIkRo8eLA6d+6sP//5z1q2bJk7/Z49ezRw4EB16tRJHTp00PXXX68ePXr4/NnVFe9nDQAAAPggd3KuJCkqLMq97d6+92rCuRMUavdscqbfky5JigiNkFFaNtwvtXeqbjvrNoXYQzzS7vrzLklSZFhkjfOYmJioIUOGaMaMGTJNU0OGDFFCQoJHmm3btik/P1+XXnqpx3aXy+UxfPCVV17Rm2++qT179qigoEAul0tnnnmmxz5du3ZVSMix82nevLnWrVvn/nv8+PEevTPeFBcX64YbbpBpmpo6darXtIZh6Oyzz9YTTzwhSerZs6fWr1+vV199VWPGjFFYWJjmzp2rW2+9VY0bN1ZISIgGDhyoyy+/3GNYZ3UKCgp06623qm/fvnrnnXdUWlqqZ555RkOGDNF3332nyMiqv7MzzjjD/f+mTZtKkrp37+6xrbCwUNnZ2YqNjdXEiRP1hz/8Qf/5z380YMAAXXPNNerYsaPPea0rBFcAAACosejw6ArbwkPCFR4SXmVa0zRlqCy4CgsJU1hIxWFelR23Jm655RZ3QPPKK69UeD03tyxIXLhwoVq0aOHxmsPhkCTNnj1b99xzj5599lmdd955iomJ0dNPP61vvvnGI/2Jw9ZsNpsMw/+5Y+WB1e7du/X555977bWSyoK4Ll26eGzr3Lmz3n//ffffvXr10o8//qisrCy5XC4lJibqnHPO0dlnny1JatasmVwulzIzMz16rw4ePKhmzZpJkmbNmqVdu3Zp5cqVstvt7m2NGjXSBx98oBEjRlSZx+M/G5vNVuW28s/rkUce0U033aSFCxdq0aJFeuSRR/TOO+94LLARDAiuAAAAcMq47LLL5HK5ZLPZNHjw4Aqvd+nSRQ6HQ3v27FG/fv0qPcZXX32l888/X3fccYd72/GLL1ipPLDaunWrli5dqiZNmlS7T9++fbV582aPbVu2bFGbNm0qpI2Li5NUtsjF999/r8cee0xSWfAVFhamzz77TNddd50kafPmzdqzZ4/OO+88SWWrGdrtdncgJMn9dyBBZHVOP/10nX766ZowYYJGjBihGTNmBF1wxZwrAAAAnDJCQkK0adMmbdy40WPIXrmYmBjdc889uvvuuzVz5kxt375da9as0UsvveSes9ShQwd9//33+vjjj7VlyxY9+OCD+u677/zOy8svv6wBAwZU+XpxcbGuv/56ff/993r77bdVWlqqAwcO6MCBA3K5XO50AwYM0Msvv+z+++6779aqVav0xBNPaNu2bZo1a5Zef/11paamutPMmTNHy5Ytcy/Hfumll2rYsGEaNGiQpLKg69Zbb9XEiRO1dOlSrV69WjfffLPOO+88nXvuuZKkSy+9VEePHlVqaqo2bdqkDRs26Oabb1ZoaKguvvhivz+PqhQUFGj8+PFatmyZe67c6tWr1alTJ8vewyr0XAEAAOCUUt2wuscee0yJiYlKS0vTjh07FB8fr7POOkv333+/JGncuHH64YcfdOONN8pms+l3v/ud7rjjDi1atMivfBw6dMhrj9fevXs1f/58Saown2vp0qXq37+/pLJes0OHjq3S2Lt3b82bN0+TJ0/Wo48+qpSUFD3//PMaOXKkO83+/fs1ceJEHTx4UM2bN9fo0aP14IMPerzHP//5T9ntdl133XUqKirS4MGD9a9//cv9eqdOnfThhx9qypQpOu+882S329WzZ08tXrxYzZs39+uz8CYkJESHDx/W6NGjdfDgQSUkJGjYsGGaMmWKZe9hFZvpz6y1U0R2drbi4uKUlZVV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ryTWODpc29JzlVtYolLDVG5hibal57LSHgAAAOoNwRUanPKVxLq3jFNmgUu7DuUps8ClM1rG664BHVhpDwAAAPWCiSlokFhJDAAAAMGmXnuu0tLS1Lt3b8XExCgpKUnDhg3T5s2bq90vMzNTqampat68uRwOh04//XR99NFH7tdLS0v14IMPKiUlRZGRkWrXrp0ee+yxCnN00LCVryTWo1W8Tkt0ElgBAACgXtVrz9Xy5cuVmpqq3r17q6SkRPfff78GDRqkjRs3Kjq68gUJXC6XLr30UiUlJem9995TixYttHv3bsXHx7vTPPnkk5o6dapmzpyprl276vvvv9fNN9+suLg43XXXXXV0dgAAAABOJfUaXC1evNjj7xkzZigpKUmrV6/WRRddVOk+b775po4cOaKvv/5aYWFhkqS2bdt6pPn666919dVXa8iQIe7X33nnHX377bfWnwQAAAAAKMjmXGVlZUmSGjduXGWa+fPn67zzzlNqaqo++OADJSYm6qabbtKkSZMUElL2YNnzzz9fr7/+urZs2aLTTz9da9eu1YoVK/Tcc89VesyioiIVFRW5/87OzpYkGYYhwzCsOr2AGIYh0zTrPR9oeCg7CATlBoGg3CBQlB0Eoq7LjT/vEzTBlWEYmjBhgvr27atu3bpVmW7Hjh36/PPPNXLkSH300Ufatm2b7rjjDhUXF+vhhx+WJN13333Kzs5Wp06dFBISotLSUj3++OMaOXJkpcdMS0vTlClTKmzPyMhQYWGhNScYIMMwlJWVJdM0ZbezuCN8R9lBICg3CATlBoGi7CAQdV1ucnJyfE4bNMFVamqq1q9frxUrVnhNZxiGkpKS9PrrryskJES9evXS3r179fTTT7uDq//97396++23NWvWLHXt2lU//vijJkyYoOTkZI0ZM6bCMSdPnqyJEye6/87OzlarVq2UmJio2NhYa0/UT4ZhyGazKTExkUoHfqHsIBCUGwSCcoNAUXYQiLouNxERET6nDYrgavz48VqwYIG++OILtWzZ0mva5s2bKywszD0EUJI6d+6sAwcOyOVyKTw8XPfee6/uu+8+jRgxQpLUvXt37d69W2lpaZUGVw6HQw6Ho8J2u90eFBe6zWYLmrygYaHsIBCUGwSCcoNAUXYQiLosN/68R72WYtM0NX78eM2bN0+ff/65UlJSqt2nb9++2rZt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean: 2.6908 ms\n", + "Median: 2.6896 ms\n", + "Std: 0.0106 ms\n", + "Min: 2.6827 ms\n", + "Max: 2.7886 ms\n" + ] + } + ], + "source": [ + "# Collect 100 samples\n", + "timings = []\n", + "for i in range(100):\n", + " timings.append(benchmark_events(simple_mm, a, b))\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "plt.scatter(range(100), timings, alpha=0.6)\n", + "plt.axhline(y=np.median(timings), color='r', linestyle='--', label=f'Median: {np.median(timings):.4f} ms')\n", + "plt.axhline(y=np.mean(timings), color='g', linestyle=':', label=f'Mean: {np.mean(timings):.4f} ms')\n", + "plt.title(\"Benchmarking Jitter & Cold Start\")\n", + "plt.ylabel(\"Time (ms)\")\n", + "plt.xlabel(\"Run Index\")\n", + "plt.legend()\n", + "plt.grid(True, alpha=0.3)\n", + "plt.show()\n", + "\n", + "print(f\"Mean: {np.mean(timings):.4f} ms\")\n", + "print(f\"Median: {np.median(timings):.4f} ms\")\n", + "print(f\"Std: {np.std(timings):.4f} ms\")\n", + "print(f\"Min: {np.min(timings):.4f} ms\")\n", + "print(f\"Max: {np.max(timings):.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hX_-OpftzX2i" + }, + "source": [ + "You will see a massive dot at $x=0$ (the cold start), followed by a cloud of dots hovering around the \"true\" time. This visualizes why we need **Warmup** (to skip $x=0$) and **Statistics** (to handle the cloud).\n", + "\n", + "Notice how the **Mean** is pulled upward by the outliers, while the **Median** represents the typical case more accurately. When possible, we should use the **Median** as our final metric.\n", + "\n", + "### Attempt 6: The \"Robust\" Harness (Flushing Cache)\n", + "\n", + "Modern GPUs have large L2 caches (40MB-192MB depending on architecture). If your data fits in the cache, subsequent iterations in your loop will skip the slow VRAM access, artificially inflating your speed. In production, data usually streams in from VRAM, so this \"hot cache\" benchmark is misleading.\n", + "\n", + "**The Fix:**\n", + "We must **flush the L2 cache** between *every single sample*. We do this by writing to a tensor large enough to completely evict the cache contents. KernelBench uses a ~256MB tensor to safely cover all GPU architectures, including the largest caches (e.g., Blackwell at ~192MB)." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.352179Z", + "iopub.status.busy": "2025-12-17T20:56:48.352053Z", + "iopub.status.idle": "2025-12-17T20:56:48.354842Z", + "shell.execute_reply": "2025-12-17T20:56:48.354225Z" + }, + "id": "Kj5azcpxzX2j" + }, + "outputs": [], + "source": [ + "# KernelBench provides utilities to flush the L2 cache\n", + "# This is important for cold cache measurements that simulate real-world inference\n", + "\n", + "def clear_l2_cache(device=DEVICE):\n", + " \"\"\"Flush L2 cache by writing to a large tensor.\n", + " \n", + " L2 cache sizes vary by GPU, so we use 256MB to cover all cases.\n", + " \"\"\"\n", + " dummy = torch.empty((32, 1024, 1024), dtype=torch.int64, device=device) # 256MB\n", + " dummy.fill_(1901) # Force write to thrash cache\n", + " del dummy\n", + "\n", + "# KernelBench also provides clear_l2_cache_triton() for cross-platform support\n", + "# (works on both NVIDIA and AMD GPUs via Triton's device abstraction)\n", + "from src.timing import clear_l2_cache_triton" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Why does flushing the cache matter?\n", + "\n", + "Let's see the cache effect in action. We'll benchmark the same operation twice:\n", + "1. **Without** cache flushing between runs (data stays in L2 cache)\n", + "2. **With** cache flushing between runs (data must be fetched from VRAM each time)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.357339Z", + "iopub.status.busy": "2025-12-17T20:56:48.357229Z", + "iopub.status.idle": "2025-12-17T20:56:48.403430Z", + "shell.execute_reply": "2025-12-17T20:56:48.402471Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Without cache flushing (warm cache):\n", + "\n", + "With cache flushing (cold cache):\n", + "\n", + "Warm cache median: 0.0859 ms\n", + "Cold cache median: 0.0922 ms\n", + "Difference: 0.0063 ms (7.3% slower with cold cache)\n", + "\n", + "Without cache flushing, you measure artificially fast times!\n" + ] + } + ], + "source": [ + "# Demonstrate why L2 cache flushing matters\n", + "# Use a smaller matrix so the effect is visible (data fits in cache)\n", + "N_SMALL = 512\n", + "a_small, b_small = get_data(N_SMALL)\n", + "\n", + "# do warmup runs\n", + "for _ in range(10):\n", + " clear_l2_cache(device=DEVICE)\n", + " benchmark_events(simple_mm, a_small, b_small)\n", + " torch.cuda.synchronize(device=DEVICE)\n", + "\n", + "# Benchmark WITHOUT cache flushing (warm cache - unrealistic)\n", + "print(\"Without cache flushing (warm cache):\")\n", + "times_warm = []\n", + "for i in range(10):\n", + " t = benchmark_events(simple_mm, a_small, b_small)\n", + " times_warm.append(t)\n", + "\n", + "# Benchmark WITH cache flushing (cold cache - realistic)\n", + "print(\"\\nWith cache flushing (cold cache):\")\n", + "times_cold = []\n", + "for i in range(10):\n", + " clear_l2_cache(device=DEVICE) # Flush cache before each measurement\n", + " t = benchmark_events(simple_mm, a_small, b_small)\n", + " times_cold.append(t)\n", + "\n", + "print(f\"\\nWarm cache median: {np.median(times_warm):.4f} ms\")\n", + "print(f\"Cold cache median: {np.median(times_cold):.4f} ms\")\n", + "print(f\"Difference: {np.median(times_cold) - np.median(times_warm):.4f} ms ({(np.median(times_cold)/np.median(times_warm) - 1)*100:.1f}% slower with cold cache)\")\n", + "print(\"\\nWithout cache flushing, you measure artificially fast times!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.405781Z", + "iopub.status.busy": "2025-12-17T20:56:48.405659Z", + "iopub.status.idle": "2025-12-17T20:56:48.489739Z", + "shell.execute_reply": "2025-12-17T20:56:48.488860Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "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R6N79+4PtK2SziHlyQ3YLZCIiIhqNR8fOXFauhTYu1ceFVCbXLm6AoMGARERTKyqgwEDBuCff/7BtWvXHvg+H6r6rly5gtdff/2BEytTYnJFREREtZ6PD7BkCZCYKA+3npUlD14RFGT6roBUuaZNm2bpIpCZaAcaqUqYXBERERH9R6023TxWRFT7VI3OqERERERERNUckysiIiKqMThOFxFVhKnOHUyuiIiIqNqzsbEBIA9FTURUXtpzh/ZcUlG854qIiIiqPSsrK7i7uyMlJQUA4OjoaHDYaw6LTebGOle1CSGQk5ODlJQUuLu7w8rK6oG2x+SKiIiIagRvb28A0CVYhgghIEkSlEolL3TJLFjnqgd3d3fdOeRBMLkiIiKiGkGhUMDHxweenp4oKCgwGCNJEm7evIl69epVmUlmqWZjnav6bGxsHrjFSovJFREREdUoVlZWRi+UJEmCjY0N7O3teaFLZsE6V7vwEyYiIiIiIjIBJldEREREREQmwOSKiIiIiIjIBJhcERERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkioiIiIiIyASYXBEREREREZkAkysiIiIiIiITYHJFRERERERkAkyuiIiIiIiITKBKJFcrV66EWq2Gvb09unbtiiNHjhiNjY+Px1NPPQW1Wg2FQoHly5cXi1m1ahXatm0LV1dXuLq6IigoCL///nslHgEREREREdV2Fk+uNm3ahIiICERGRuLEiRNo164dQkNDkZKSYjA+JycH/v7+WLx4Mby9vQ3GNGzYEIsXL8bx48dx7NgxPProoxg8eDDi4+Mr81CIiIiIiKgWs3hytXTpUkyYMAHh4eEICAjA6tWr4ejoiM8++8xgfOfOnbFkyRI888wzsLOzMxgzcOBA9O/fH82aNUPz5s3x9ttvw9nZGYcPH67MQyEiIiIiolrM2pI712g0OH78OGbPnq1bplQqERISgtjYWJPso6ioCJs3b0Z2djaCgoIMxuTn5yM/P1/3PDMzEwAgSRIkSTJJOSpKkiQIISxeDqo9WOfI3FjnyJxY38jcWOeqv/J8dhZNrtLS0lBUVAQvLy+95V5eXjh37twDbfvUqVMICgpCXl4enJ2d8eOPPyIgIMBg7KJFizB//vxiy1NTU5GXl/dA5XhQkiQhIyMDQggolRZvaKRagHWOzI11jsyJ9Y3MjXWu+rtz506ZYy2aXFWmhx56CHFxccjIyMB3332HsLAw7N2712CCNXv2bEREROieZ2ZmwtfXFyqVCq6uruYsdjGSJEGhUEClUvELSWbBOkfmxjpH5sT6RubGOlf92dvblznWosmVh4cHrKyskJycrLc8OTnZ6GAVZWVra4umTZsCADp27IijR4/igw8+wJo1a4rF2tnZGbx/S6lUVokvgUKhqDJlodqBdY7MjXWOzIn1jcyNda56K8/nZtFP2NbWFh07dkRMTIxumSRJiImJMXp/VEVJkqR3XxUREREREZEpWbxbYEREBMLCwtCpUyd06dIFy5cvR3Z2NsLDwwEAY8aMQYMGDbBo0SIA8iAYZ86c0f1+7do1xMXFwdnZWddSNXv2bPTr1w+NGjXCnTt3EB0djT179mD79u2WOUgiIiIiIqrxLJ5cjRgxAqmpqZg7dy5u3LiBwMBAbNu2TTfIxZUrV/Sa4q5fv4727dvrnkdFRSEqKgrBwcHYs2cPACAlJQVjxoxBUlIS3Nzc0LZtW2zfvh2PP/64WY+NiIiIiIhqD4UQQli6EFVNZmYm3NzckJGRUSUGtEhJSYGnpyf76ZJZsM6RubHOkTmxvpG5sc5Vf+XJDfgJExERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkioiIiIiIyASYXBEREREREZkAkysiIiIiIiITYHJFRERERERkAkyuiIiIiIiITIDJFRERERERkQkwuSIiIiIiIjIBJldEREREREQmwOSKiIiIiIjIBJhcERERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEzA2tIFIOMSE4HYWKCgALCxAYKCALXa0qUiIiIiIiJDmFxVQUlJQFQUsH8/kJUFtGgBnDsHODsDPXsCM2YAPj6WLiUREREREd2L3QKrmKQkYOJE4Oef5dYqf385kfL3l59v3SqvT0qydEmJiIiIiOheTK6qmKgoID5eTqbq1gWU/31CSqX83N9fXr90qWXLSURERERE+phcVSGJiXJXQJVKbqUyxMZGXr93rxxPRERERERVQ5VIrlauXAm1Wg17e3t07doVR44cMRobHx+Pp556Cmq1GgqFAsuXLy8Ws2jRInTu3BkuLi7w9PTEkCFD8Pfff1fiEZhGbCyQmQm4u5cc5+4uxx0+bI5SERERERFRWVg8udq0aRMiIiIQGRmJEydOoF27dggNDUVKSorB+JycHPj7+2Px4sXw9vY2GLN3715MmjQJhw8fxs6dO1FQUIA+ffogOzu7Mg/lgWVny93/lKV8KtqYrCzzlIuIiIiIiEpn8dECly5digkTJiA8PBwAsHr1avz666/47LPP8NprrxWL79y5Mzp37gwABtcDwLZt2/Seb9iwAZ6enjh+/Dh69uxp4iMwHScnQJLkR0kJljbG2dl8ZSMiIiIiopJZNLnSaDQ4fvw4Zs+erVumVCoREhKC2NhYk+0nIyMDAFC3bl2D6/Pz85Gfn697npmZCQCQJAmSJJmsHKV5+GHAzQ3IyJAHrwAAhUKCQiGgUNwtR0aGHPfww3KSRWRKkiRBCGHWuk+1G+scmRPrG5kb61z1V57PzqLJVVpaGoqKiuDl5aW33MvLC+fOnTPJPiRJwrRp09C9e3e0bt3aYMyiRYswf/78YstTU1ORl5dnknKUhYMDMGgQcOQI4O0NWFsDgAQPjwwIIQAoUVgot2p17QrY2wNGek8SVZgkScjIkOucsrQ+qkQmwDpH5sT6RubGOlf93blzp8yxFu8WWNkmTZqE06dP48CBA0ZjZs+ejYiICN3zzMxM+Pr6QqVSwdXV1RzF1AkPB44fl0cD9PAA6tSRoFAocOWKCrdvK3HzJtCyJRAWBnh6mrVoVEtIklznVCoV/wiQWbDOkTmxvpG5sc5Vf/b29mWOtWhy5eHhASsrKyQnJ+stT05ONjpYRXlMnjwZv/zyC/bt24eGDRsajbOzs4OdnV2x5Uql0uxfgvr1gZUr5Xms9u4FEhIAGxsFEhKUcHZW4okngIgIeWJhosqiUCgsUv+p9mKdI3NifSNzY52r3srzuVk0ubK1tUXHjh0RExODIUOGAJCz+5iYGEyePLnC2xVCYMqUKfjxxx+xZ88eNG7c2EQlNg8fH2DJEnkeq8OHAY0GsLUFgoIAPz9Ll46IiIiIiAyxeLfAiIgIhIWFoVOnTujSpQuWL1+O7Oxs3eiBY8aMQYMGDbBo0SIA8iAYZ86c0f1+7do1xMXFwdnZGU2bNgUgdwWMjo7GTz/9BBcXF9y4cQMA4ObmBgcHBwscZcWo1UCjRvJ9VZ6epQ/RTkRERERElmPx5GrEiBFITU3F3LlzcePGDQQGBmLbtm26QS6uXLmi1xR3/fp1tG/fXvc8KioKUVFRCA4Oxp49ewAAq1atAgD06tVLb1/r16/H2LFjK/V4iIiIiIiodrJ4cgXI90YZ6waoTZi01Gr1fyPnGVfaeiIiIiIiIlNjRzMiIiIiIiITYHJFRERERERkAkyuiIiIiIiITIDJFRERERERkQkwuSIiIiIiIjKBKjFaIBERERFRTZOYCMTGAgUFgI0NEBQkz2NKNReTKyIiIiIiE0pKAqKigP37gawsoEUL4Nw5wNkZ6NkTmDED8PGxdCmpMrBbIBERERGRiSQlARMnAj//LLdW+fvLiZS/v/x861Z5fVKSpUtKlYHJFRERERGRiURFAfHxcjJVty6g/O9qW6mUn/v7y+uXLrVsOalyMLkiIiIiIjKBxES5K6BKJbdSGWJjI6/fu1eOp5qFyRURERERkQnExgKZmYC7e8lx7u5y3OHD5igVmROTKyIiIiIiE8jOlrv/KUu5wtbGZGWZp1xkPkyuiIiIiIhMwMkJkCT5URJtjLOzecpF5sPkioiIiIjIBIKCAFdXID295Lj0dDkuKMgcpSJzYnJFRERERGQCajXQoweQmipPHGxIQQGQlgYEBwN+fmYtHpkBkysiIiIiIhOZORNo1Qq4eBG4detuF0FJkp9fugQEBAAREZYtJ1UOJldERERERCbi4wN8/DEweLDcSnXxojxh8MWL8vNBg+T1Pj6WLilVBmtLF4CIiIiIqCbx8QGWLJHnsTp8GNBoAFtb+R4rdgWs2cqdXEmShL1792L//v24fPkycnJyoFKp0L59e4SEhMDX17cyyklEREREVK2o1UCjRkBKCuDpWfoQ7VT9lfkjzs3NxVtvvQVfX1/0798fv//+O9LT02FlZYULFy4gMjISjRs3Rv/+/XGYM6IRVUuJicCmTcCOHfJPzhxPREREVHZlbrlq3rw5goKCsG7dOjz++OOwsbEpFnP58mVER0fjmWeewZw5czBhwgSTFpaIKkdSEhAVBezfL09o2KIFcO6cPP9Gz57AjBnsG05ERERUmjInVzt27EDLli1LjPHz88Ps2bMxc+ZMXLly5YELR0SVLykJmDgRiI8HVCrA319OpDQa4PZtYOtWICGBN98SERERlabM3QJLS6zuZWNjgyZNmlSoQERkXlFRcmLl7w/UrXu3P7hSKT/395fXL11q2XISERERVXUVuq1u27ZtOHDggO75ypUrERgYiGeffRa3b982WeGIqHIlJspdAVUqwEBPXwDycpUK2LuX92ARERERlaRCydWsWbOQmZkJADh16hRmzJiB/v3749KlS4jgjGhE1UZsLJCZCbi7lxzn7i7HcawaIiIiIuMqNM/VpUuXEBAQAAD4/vvv8cQTT+Cdd97BiRMn0L9/f5MWkIgqT3a23P2vtKFhtTFZWeYpFxEREVF1VKGWK1tbW+Tk5AAA/vjjD/Tp0wcAULduXV2LFhFVfU5OgCTJj5JoY5ydzVMuIiIiouqoQi1XjzzyCCIiItC9e3ccOXIEmzZtAgCcP38eDRs2NGkBiajyBAUBrq5Aero8eIUx6elyXFCQuUpGREREVP1UqOVqxYoVsLa2xnfffYdVq1ahQYMGAIDff/8dffv2NWkBiajyqNVAjx5AaipQUGA4pqAASEsDgoMBPz+zFo+IiIioWqlQy1WjRo3wyy+/FFu+bNmyBy4QEZnXzJnAxYt357mqU0deLknyPFdpaUBAAMCxaoiIiIhKVqHkSislJQUpKSmQ7rtho23btg9UKCIyHx8feYLgpUvl4dYvXgRsbeWfzs7AoEFyYsUJhImIiIhKVqHk6vjx4wgLC8PZs2chhAAAKBQKCCGgUChQVFRk0kISUeXy8QGWLJHnsTp8GNBo5AQrKIhdAYmIiIjKqkLJ1bhx49C8eXN8+umn8PLygkKhMHW5iMgC1GqgUSMgJQXw9Cx9iHYiIiIiuqtCydXFixfx/fffo2nTpqYuDxERERERUbVUof9LP/bYYzh58qSpy0JERERERFRtVajl6pNPPkFYWBhOnz6N1q1bw8bGRm/9oEGDTFI4IiIiIiKi6qJCyVVsbCwOHjyI33//vdg6DmhBRERERES1UYW6BU6ZMgXPPfcckpKSIEmS3oOJFRERERER1UYVSq5u3ryJ6dOnw8vLy9TlISIiIiIiqpYqlFw9+eST2L17t6nLQkREREREVG1V6J6r5s2bY/bs2Thw4ADatGlTbECLqVOnmqRwRERERERE1UWFRwt0dnbG3r17sXfvXr11CoWCyRUREREREdU6FeoWeOnSJaOPixcvlmtbK1euhFqthr29Pbp27YojR44YjY2Pj8dTTz0FtVoNhUKB5cuXF4vZt28fBg4ciPr160OhUGDLli3lPDoiIiIiIqLyq1ByZSqbNm1CREQEIiMjceLECbRr1w6hoaFISUkxGJ+TkwN/f38sXrwY3t7eBmOys7PRrl07rFy5sjKLTkREREREpKfMydXixYuRm5tbptg///wTv/76a6lxS5cuxYQJExAeHo6AgACsXr0ajo6O+OyzzwzGd+7cGUuWLMEzzzwDOzs7gzH9+vXDW2+9haFDh5aprERERERERKZQ5nuuzpw5g0aNGmHYsGEYOHAgOnXqBJVKBQAoLCzEmTNncODAAXz11Ve4fv06vvjiixK3p9FocPz4ccyePVu3TKlUIiQkBLGxsRU8nIrJz89Hfn6+7nlmZiYA6ObusiRJkiCEsHg5qPZgnSNzY50jc2J9I3Njnav+yvPZlTm5+uKLL3Dy5EmsWLECzz77LDIzM2FlZQU7Ozvk5OQAANq3b4/x48dj7NixsLe3L3F7aWlpKCoqKjZXlpeXF86dO1fmAzCFRYsWYf78+cWWp6amIi8vz6xluZ8kScjIyIAQAkqlRXtxUi3BOkfmxjpH5sT6RubGOlf93blzp8yx5RotsF27dli3bh3WrFmD//3vf7h8+TJyc3Ph4eGBwMBAeHh4lLuwVcHs2bMRERGhe56ZmQlfX1+oVCq4urpasGTyF1KhUEClUvELSWbBOkfmxjpH5sT6RubGOlf9ldZodK8KDcWuVCoRGBiIwMDAirwcAODh4QErKyskJyfrLU9OTjY6WEVlsbOzM3gPl1KprBJfAoVCUWXKQrUD6xyZG+scmRPrG5kb61z1Vp7PzWKfsK2tLTp27IiYmBjdMkmSEBMTg6CgIEsVi4iIiIiIqEIq1HJlKhEREQgLC0OnTp3QpUsXLF++HNnZ2QgPDwcAjBkzBg0aNMCiRYsAyINgnDlzRvf7tWvXEBcXB2dnZzRt2hQAkJWVhQsXLuj2cenSJcTFxaFu3bpo1KiRmY+QiIiIiIhqC4smVyNGjEBqairmzp2LGzduIDAwENu2bdMNcnHlyhW9Zrjr16+jffv2uudRUVGIiopCcHAw9uzZAwA4duwYevfurYvR3ksVFhaGDRs2VP5BERERERFRraQQQghLF6KqyczMhJubGzIyMqrEgBYpKSnw9PRkP10yC9Y5MjfWOTIn1jcyN9a56q88ucEDfcIXLlzA9u3bdZMLM08jIiIiIqLaqkLJ1c2bNxESEoLmzZujf//+SEpKAgA8//zzmDFjhkkLSEREREREVB1UKLmaPn06rK2tceXKFTg6OuqWjxgxAtu2bTNZ4YiIiIiIiKqLCg1osWPHDmzfvh0NGzbUW96sWTNcvnzZJAUjIiIiIiKqTirUcpWdna3XYqV169Ytg5PxEhERERER1XQVSq569OiBL774QvdcoVBAkiS89957esOgExERERER1RYV6hb43nvv4bHHHsOxY8eg0Wjw6quvIj4+Hrdu3cLBgwdNXUYiIiIiIqIqr0ItV61bt8b58+fxyCOPYPDgwcjOzsaTTz6Jv/76C02aNDF1GYmIiIiIiKq8CrVcAYCbmxvmzJljyrIQERERERFVWxVOrvLy8vC///0PKSkpkCRJb92gQYMeuGBERERERETVSYWSq23btmHMmDFIS0srtk6hUKCoqOiBC0ZERERERFSdVOieqylTpmDYsGFISkqCJEl6DyZWRERERERUG1UouUpOTkZERAS8vLxMXR4iIiIiIqJqqULJ1dNPP409e/aYuChERERERETVV4XuuVqxYgWGDRuG/fv3o02bNrCxsdFbP3XqVJMUjoiIiIiIqLqoUHL1zTffYMeOHbC3t8eePXugUCh06xQKBZMrIiIiIiKqdSqUXM2ZMwfz58/Ha6+9BqWyQj0LiYiIiIiIapQKZUYajQYjRoxgYkVERERERPSfCmVHYWFh2LRpk6nLQkREREREVG1VqFtgUVER3nvvPWzfvh1t27YtNqDF0qVLTVI4IiIiIiKi6qJCydWpU6fQvn17AMDp06f11t07uAUREREREVFtUaHkavfu3aYuBxERERERUbXGESmI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qgru3LkDNze3EmMUoiwpWC0jSRKuX78OFxcXKBQKi5YlMzMTvr6+uHr1KlxdXS1aFqodWOfI3FjnyJxY38jcWOeqPyEE7ty5g/r165fa+siWKwOUSiUaNmxo6WLocXV15ReSzIp1jsyNdY7MifWNzI11rnorrcVKix0/iYiIiIiITIDJFRERERERkQkwuari7OzsEBkZCTs7O0sXhWoJ1jkyN9Y5MifWNzI31rnahQNaEBERERERmQBbroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkqopbuXIl1Go17O3t0bVrVxw5csTSRaIaatGiRejcuTNcXFzg6emJIUOG4O+//7Z0saiWWLx4MRQKBaZNm2bpolANdu3aNTz33HOoV68eHBwc0KZNGxw7dszSxaIaqKioCG+++SYaN24MBwcHNGnSBAsXLgTHkav5mFxVYZs2bUJERAQiIyNx4sQJtGvXDqGhoUhJSbF00agG2rt3LyZNmoTDhw9j586dKCgoQJ8+fZCdnW3polENd/ToUaxZswZt27a1dFGoBrt9+za6d+8OGxsb/P777zhz5gzef/991KlTx9JFoxro3XffxapVq7BixQqcPXsW7777Lt577z189NFHli4aVTIOxV6Fde3aFZ07d8aKFSsAAJIkwdfXF1OmTMFrr71m4dJRTZeamgpPT0/s3bsXPXv2tHRxqIbKyspChw4d8PHHH+Ott95CYGAgli9fbuliUQ302muv4eDBg9i/f7+li0K1wBNPPAEvLy98+umnumVPPfUUHBwc8NVXX1mwZFTZ2HJVRWk0Ghw/fhwhISG6ZUqlEiEhIYiNjbVgyai2yMjIAADUrVvXwiWhmmzSpEkYMGCA3rmOqDJs3boVnTp1wrBhw+Dp6Yn27dtj3bp1li4W1VDdunVDTEwMzp8/DwA4efIkDhw4gH79+lm4ZFTZrC1dADIsLS0NRUVF8PLy0lvu5eWFc+fOWahUVFtIkoRp06ahe/fuaN26taWLQzXUxo0bceLECRw9etTSRaFa4OLFi1i1ahUiIiLw+uuv4+jRo5g6dSpsbW0RFhZm6eJRDfPaa68hMzMTLVq0gJWVFYqKivD2229j1KhRli4aVTImV0RUzKRJk3D69GkcOHDA0kWhGurq1at45ZVXsHPnTtjb21u6OFQLSJKETp06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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Visualize the cache effect\n", + "plt.figure(figsize=(10, 5))\n", + "plt.scatter(range(len(times_warm)), times_warm, alpha=0.7, label=f'Warm Cache (mean={np.mean(times_warm):.4f}ms)', color='orange', s=60)\n", + "plt.scatter(range(len(times_cold)), times_cold, alpha=0.7, label=f'Cold Cache (mean={np.mean(times_cold):.4f}ms)', color='blue', s=60)\n", + "plt.axhline(y=np.mean(times_warm), color='orange', linestyle='--', alpha=0.5)\n", + "plt.axhline(y=np.mean(times_cold), color='blue', linestyle='--', alpha=0.5)\n", + "plt.xlabel('Run Index')\n", + "plt.ylabel('Time (ms)')\n", + "plt.title(f'Cache Effect on {N_SMALL}x{N_SMALL} Matrix Multiplication')\n", + "plt.legend()\n", + "plt.grid(True, alpha=0.3)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FAaH1cdBzX2j" + }, + "source": [ + "### Putting it all together\n", + "\n", + "We have now discovered that a robust benchmark requires:\n", + "\n", + "1. Device Synchronization\n", + "2. CUDA Events (to avoid CPU overhead)\n", + "3. Warmup Runs (to avoid initialization costs)\n", + "4. Multiple Samples (to handle variance)\n", + "5. Cache Flushing (to simulate VRAM access)\n", + "6. Median/Mean Aggregation (to ignore jitter)\n", + "\n", + "Writing this boilerplate every time is painful. We've packaged all these lessons into **KernelBench's timing module**, which provides multiple timing methods for different use cases. There are also other robust implementations available, such as Triton's `do_bench` [function](https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html).\n", + "\n", + "The default `cuda_event` method in KernelBench implements all of the above automatically, plus an additional insight: **`discard_first`** - discarding the first few trials after warmup, which often still have some initialization overhead." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.492125Z", + "iopub.status.busy": "2025-12-17T20:56:48.491999Z", + "iopub.status.idle": "2025-12-17T20:56:48.816105Z", + "shell.execute_reply": "2025-12-17T20:56:48.815073Z" + }, + "id": "3aVFtWt_zX2j", + "outputId": "6cf1e493-86ca-419e-a8e1-e19486814e09" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using timing method: cuda_event\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "KernelBench cuda_event time: 2.6700 ms\n" + ] + } + ], + "source": [ + "# Get the timing function - cuda_event is the default for trusted code\n", + "timing_fn = get_timing_function(\"cuda_event\")\n", + "\n", + "def final_benchmark(func, *args, num_trials=100):\n", + " \"\"\"Production-ready benchmarking using KernelBench's timing module.\"\"\"\n", + " elapsed_times = timing_fn(\n", + " kernel_fn=func,\n", + " args=list(args),\n", + " num_warmup=10,\n", + " num_trials=num_trials,\n", + " discard_first=1, # Discard first trial for consistency\n", + " verbose=False,\n", + " device=DEVICE\n", + " )\n", + " stats = get_timing_stats(elapsed_times, device=DEVICE)\n", + " return stats[\"mean\"]\n", + "\n", + "t = final_benchmark(simple_mm, a, b)\n", + "print(f\"KernelBench cuda_event time: {t:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MsZrCYQRzX2j" + }, + "source": [ + "*Note: KernelBench also wraps Triton's `do_bench` if you prefer adaptive trial counts. See the timing methods comparison below for details.*\n", + "\n", + "---\n", + "\n", + "## KernelBench's Timing Methods Explained\n", + "\n", + "Now that we've built up a robust benchmarking harness from first principles, let's explore KernelBench's timing module in depth. We'll examine:\n", + "- **All 4 timing methods** and when to use each\n", + "- **The `discard_first` parameter** and why it improves measurement consistency\n", + "- **How `host_time` detects side-stream exploits** in untrusted code\n", + "\n", + "KernelBench's timing module provides **4 timing methods**, each designed for different use cases:\n", + "\n", + "| Method | Use Case | Catches Side-Streams | Cold Cache | Trial Control |\n", + "|--------|----------|---------------------|------------|---------------|\n", + "| `cuda_event` | Default, trusted code | No | Yes | Explicit |\n", + "| `host_time` | Untrusted code, agent evals | **Yes** | Yes | Explicit |\n", + "| `do_bench` | Triton-style / robust adaptive | No | Yes | Adaptive (time-budget) |\n", + "| `do_bench_impl` | do_bench implementation for inference and trial control | No | Yes | Explicit |\n", + "\n", + "### Method Details\n", + "\n", + "**`cuda_event`** (Default)\n", + "- Uses `torch.cuda.Event` for GPU-side timing\n", + "- Most accurate for pure kernel time measurement\n", + "- Clears L2 cache before each trial for cold-cache performance\n", + "- Use for trusted code where you control the kernel implementation\n", + "\n", + "**`host_time`** (For Untrusted Code)\n", + "- Uses **both** `time.perf_counter()` (host) and `torch.cuda.Event` (device) timing\n", + "- Compares the two: if they differ significantly, the CUDA event time is likely invalid (e.g., side-stream exploit)\n", + "- Falls back to host time when discrepancy detected, ensuring correctness\n", + "- Waits for ALL streams via `torch.cuda.synchronize()`\n", + "- **Essential for evaluating untrusted/agent-generated code**\n", + "\n", + "**`do_bench`** (Triton's Adaptive Benchmarking)\n", + "- Wraps Triton's `triton.testing.do_bench`\n", + "- Uses fixed time budgets: 25ms warmup, 100ms for repetitions\n", + "- Trial count is automatic based on kernel runtime\n", + "- **Note:** `num_warmup`, `num_trials`, `discard_first` parameters are ignored\n", + "\n", + "**`do_bench_impl`** (Transparent Implementation)\n", + "- Custom implementation mirroring Triton's do_bench\n", + "- Gives you explicit control over `num_warmup` and `num_trials`\n", + "- Useful when you need do_bench's approach but with specific trial counts\n", + "\n", + "### Key Parameters\n", + "\n", + "All timing functions share a common interface:\n", + "\n", + "```python\n", + "timing_fn(\n", + " kernel_fn, # Function to time\n", + " args, # List of arguments to pass\n", + " num_warmup=3, # Warmup iterations before timing\n", + " num_trials=10, # Number of timing samples to collect\n", + " discard_first=1, # Drop first N trials after warmup\n", + " device=\"cuda:0\", # Explicit GPU device selection\n", + " verbose=True # Print per-trial timing info\n", + ") -> list[float] # Returns list of elapsed times in ms\n", + "```\n", + "\n", + "### Why `discard_first`?\n", + "\n", + "Even after warmup, the first few timing trials can be affected by:\n", + "- PyTorch's lazy tensor allocation finalizing\n", + "- cuDNN autotuning (still settling optimal algorithms)\n", + "- Driver state initialization\n", + "- First access to data structures\n", + "\n", + "Setting `discard_first=1` (the default) improves measurement consistency. Let's visualize this effect:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Experiment 2: Comparing All 4 Timing Methods\n", + "\n", + "Let's see how the different timing methods compare on the same kernel. Each method has trade-offs between precision, features, and overhead." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:48.818984Z", + "iopub.status.busy": "2025-12-17T20:56:48.818836Z", + "iopub.status.idle": "2025-12-17T20:56:49.452295Z", + "shell.execute_reply": "2025-12-17T20:56:49.451496Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Comparing all KernelBench timing methods on 4096x4096 matmul:\n", + "======================================================================\n", + "\n", + "Testing cuda_event...\n", + "[Profiling] Using timing method: cuda_event\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n", + " cuda_event: 2.6700 ms (std=0.0034)\n", + "\n", + "Testing host_time...\n", + "[Profiling] Using timing method: host_time\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n", + " host_time: 2.8200 ms (std=0.0022)\n", + "\n", + "Testing do_bench...\n", + "[Profiling] Using timing method: do_bench\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " do_bench: 2.6700 ms (std=0.0012)\n", + "\n", + "Testing do_bench_impl...\n", + "[Profiling] Using timing method: do_bench_impl\n", + " do_bench_impl: Skipped due to AttributeError (Triton version compatibility)\n" + ] + }, + { + "data": { + "image/png": "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VZ88JWlpl1LfLD4+Xr1795aPj4/c3d31v//9T//++2+K7/Eon9mD4uvcubMmTpwoSVZTQkjWfdexY8dajvP+/fvTfFwvXbqkDz/8UBUrVpSbm5s8PDzUqFEj7dmzx6pe0vn+448/avDgwSpYsKDc3d3VunVrxcTEKD4+Xr169ZKvr6/c3NzUpUuXZH2n1atX68UXX5SXl5fc3NxUpkwZffrpp1Z1nJ2dVadOHS1evDhNxw9PpycjhQw8pKJFi8rf318//PCDGjVqJElavny5YmJi1L59e40fPz5Zm7ffflvh4eHq0qWL3nvvPR07dkwTJkzQrl279Ntvv8nZ2VnSnWSLm5ub+vTpIzc3N61bt06fffaZYmNjNXLkSKttXr58WQ0bNlTLli3Vtm1bLViwQB9//LEqVqxoiet+bt26leKorpw5c8rV1VW+vr6aPHmy2rRpo6+//lrvvfeezGazOnfuLHd3d02aNEnSnYTb//73P23evFlvvfWWypYtq71792rMmDH6559/rOb3GTx4sAYNGqSaNWtqyJAhyp49u7Zt26Z169apQYMGaf4Mateurffee0/jx4/Xp59+qrJly0qS5b/3unHjhurUqaPDhw8rJCRExYoV0/z589W5c2dduXJF77//vlX9iIgIXb16VW+//bYcHBw0YsQItWzZUkePHrV8Vplh06ZN+uWXXxQcHCxJCgsLU9OmTdW3b19NmjRJ7777ri5fvqwRI0bozTff1Lp16yxt161bp0aNGqlatWoaOHCgHB0dNXPmTL388svatGmTnn/++Qe+/xdffCEHBwd9/PHHOnfunMaOHav69etr9+7dcnV11RtvvKEhQ4Zo3rx5VnM+JSVlW7VqlaYrxrVr11ahQoUUERFhuQI2b948ubm5qUmTJsnqp/Ucmz17trp166bnn39eb731liQlG/bdtm1bFStWTGFhYdq5c6emTZsmX19fDR8+3FKnW7dumjVrllq3bq0PPvhA27ZtU1hYmP7++28tWrTIUu+zzz7T559/rsaNG6tx48bauXOnGjRooISEhAceAwB40v3++++SpGeffTbF9Wn5rl2zZo0aNWqk4sWLa9CgQbpx44a+/vpr1apVSzt37rQkSXr06KEFCxYoJCRE5cqV08WLF7V582b9/fffevbZZ9WvXz/FxMTo33//1ZgxYyRJbm5uadqPsWPHqmfPnnJzc1O/fv0kSXnz5r1vm8uXL6tp06Zq37692rRpo8mTJ6t9+/aaM2eOevXqpR49eqhjx44aOXKkWrdurVOnTsnd3V2SdPbsWb3wwguWi1U+Pj5avny5unbtqtjY2AfeSpeWvlZa+pv3O2aJiYlq2rSp1q5dq/bt2+v999/X1atXtXr1akVFRVl996blc963b59q1aqlggUL6pNPPlHOnDn1448/qkWLFvrpp5/06quvSrqTOAoLC7N818fGxmr79u3auXOnXnnllVSPycO269atm77//nt17NhRNWvW1Lp161LspzzqZ/ag+N5++239999/Wr16tWbPnp3iNmbOnKmbN2/qrbfekslkkre3d5qP69GjR/Xzzz+rTZs2KlasmM6ePaspU6YoICBA+/fvTza1R1hYmFxdXfXJJ5/o8OHD+vrrr+Xs7CxHR0ddvnxZgwYN0tatWxUeHq5ixYpZ5ofat2+fmjZtqkqVKmnIkCEymUw6fPhwihdQq1WrpsWLFys2NlYeHh73PX54ShnAU2jmzJmGJOPPP/80JkyYYLi7uxvXr183DMMw2rRpY9StW9cwDMMoUqSI0aRJE0u7TZs2GZKMOXPmWG1vxYoVycqTtne3t99+28iRI4dx8+ZNS1lAQIAhyfjuu+8sZfHx8Ua+fPmMVq1aPXBfihQpYkhK8RUWFmZVt0OHDkaOHDmMf/75xxg5cqQhyfj5558t62fPnm04OjoamzZtsmr3zTffGJKM3377zTAMwzh06JDh6OhovPrqq0ZiYqJVXbPZbPl/ScbAgQNTjLlTp06W5fnz5xuSjPXr1yerGxAQYAQEBFiWx44da0gyvv/+e0tZQkKC4e/vb7i5uRmxsbGGYRjGsWPHDElG7ty5jUuXLlnqLl682JBk/Prrr8neKzVJx+rYsWPJ1g0cONC490+pJMNkMlnVnzJliiHJyJcvnyVGwzCM0NBQq22bzWajVKlSRmBgoNWxvH79ulGsWDHjlVdeuW+s69evNyQZBQsWtHqfH3/80ZBkjBs3zlLm7+9v1KhRw6r9woULU/0sUtrv8+fPGx9++KFRsmRJy7rq1asbXbp0sRyL4OBgy7q0nmOGYRg5c+a0Ok/ufe8333zTqvzVV181cufObVnevXu3Icno1q2bVb0PP/zQkGSsW7fOMAzDOHfunJE9e3ajSZMmVsf8008/NSSlGAMAPE369+9vSDKuXr1qVZ6e79oqVaoYvr6+xsWLFy1le/bsMRwdHY2goCBLmaenp9X3RkqaNGliFClS5KH2pXz58lb9iiRJ3593f/8l9dEiIiIsZQcOHDAkGY6OjsbWrVst5StXrjQkGTNnzrSUde3a1cifP79x4cIFq/dq37694enpmWJfMUla+1pp7W+mdsxmzJhhSDJGjx6dbF3S+6Tnc65Xr55RsWJFq/c2m81GzZo1jVKlSlnKKleubNXHTqu0tLu3b5bUH3j33Xet6nXs2DFZX/VRPrO0xhccHJys72gY/3ecPTw8jHPnzlmtS+txvXnzZrLz5dixY4bJZDKGDBliKUs63ytUqGAkJCRYyjt06GA4ODgYjRo1stqGv7+/1fkzZswYSz/wQSIiIgxJxrZt2x5YF08nbt/DU69t27a6ceOGlixZoqtXr2rJkiWp3nY0f/58eXp66pVXXtGFCxcsr2rVqsnNzU3r16+31HV1dbX8/9WrV3XhwgW99NJLun79utWtTtKdq1V3zwmVPXt2Pf/88zp69Gia9qFGjRpavXp1ste9k5FOmDBBnp6eat26tQYMGKA33nhDzZs3t9q/smXL6plnnrHav5dfflmSLPv3888/y2w267PPPkv2BJ60PoL3YS1btkz58uWz2jdnZ2e99957unbtmjZs2GBVv127dsqVK5dl+aWXXpKkNB/bh1WvXj2rofE1atSQJLVq1cpyBfXu8qR4du/erUOHDqljx466ePGi5TOIi4tTvXr1tHHjRsujuO8nKCjI6n1at26t/Pnza9myZVZ1tm3bZjU8f86cOfLz81NAQECa97Vjx446fPiw/vzzT8t/7/dvKC3nWFr06NHDavmll17SxYsXFRsbK0mWfe3Tp49VvaSHAixdulTSnav3CQkJ6tmzp9X5+zRMBgsAaXHx4kVly5Yt1RFJD/quPXPmjHbv3q3OnTvL29vbUq9SpUp65ZVXrL6bvLy8tG3bNv3333+ZsSvp5ubmpvbt21uWy5QpIy8vL5UtW9byHS4l/z43DEM//fSTmjVrJsMwrL7zAgMDFRMTY7klMSVp7Wulp7+Zkp9++kl58uRRz549k627t0/3oM/50qVLWrdundq2bWuJ5cKFC7p48aICAwN16NAhnT59WtKdz3nfvn06dOjQA2O828O0Szq/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smXL9OabbypfvnySxJBt2FXS6JO+fftqzpw5ql69uvbv36/vvvtO77//vl577TU7R4in1e7du7V06VL9/vvvcnNzk4ODgxYsWKAZM2bo6NGjWrFihYYMGaKbN2+qVatW9g4XgKS///5b8fHxqlev3kO3f/XVV63K/P39tWLFCsvytWvXNGjQIC1dulRnzpzR7du3dePGjTSNlNq7d68SExNVunRpq/L4+Hjlzp1bktS4cWM5Ozvrl19+Ufv27fXTTz/Jw8ND9evXl3RntObhw4fl7u5utY2bN2/qyJEjluXy5cvLycnJspw/f37t3bs3jUcCeDpVqlTJajl//vw6d+6c/v77b/n5+cnPz8+yrly5cvLy8tLff/+t6tWrq0+fPurWrZtmz56t+vXrq02bNipRokSmx1y0aFGrvwd58+aVk5OTpY+dVHbu3DlJd/6GXLt2zfI3J8mNGzes/obg8UZSClmG8f8nM09ISJCzs7MqVaqkSpUqafbs2fLx8VGPHj1UpEgRq0nPDSZAh43Nnj1bc+bM0ZIlS1S1alXNnTtXHTt2VK5cuewdGp5iVapU0ZAhQ/T1119r+PDhKlq0qN5++23VrVtXdevWVaVKlTR+/HgNHz5cDg4Oatmypb1DBp5695sAOOkHmnHXbeFJcyylx4cffqjVq1frq6++UsmSJeXq6qrWrVtb3TqXmmvXrsnJyUk7duywShhJkpubmyQpe/bsat26tSIiItS+fXtFRESoXbt2ypYtm2Ub1apV05w5c5Jt38fHx/L/zs7OVuscHByYGw94gEf5dzNo0CB17NhRS5cu1fLlyzVw4EDNnTs3WaI7o6UU8/3249q1a8qfP79lLru7pfcJgbAfklLIEpKesifduQKXPXt2DRs2TJLk6+urr776SpL0zjvvqHDhwpLujAyoUqWKXeLF0+vYsWNq2LChJSHVo0cPTZw4UY0bN9b169d1+fJlFSxY0N5h4imSmJgoJycnBQYGymw2a+LEiZozZ466du1qqVO9enW9//77Gj9+vEaMGKHr16/r9ddft2PUAEqVKiVXV1etXbtW3bp1s1qXlLA5c+aM5aLH7t27reqULVvWat4VSdq6davV8m+//abOnTtbfmheu3bNapLx+6lataoSExN17tw5vfTSS6nWe+211/TKK69o3759WrdundW8Vs8++6zmzZsn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JcrKyjhx4gQRERGYTCZKS0uxWCzaFiU+c/ToUeLj4+nevTvvvvsuDz74oNG2c+dObDYbVquVzMzMVhylyB/WrVvHzJkzmTt3LhMmTKBz587MmTOHhx56yHhH/7ptWkRERETE3yiUkutkZ2eTmJjIokWLSEtLw+VyUV5eTnFxMbfffjtWq9VYhaItJ+JLpaWlTJkyhf79+zN37lz69u1rtB08eJBHHnlE76TcMrZu3UpSUpJx+mNISAiHDh0iMDBQgb6IiIiICAql/FLTyVBmZiadO3dm1qxZze7JysoiKSmJjIwMbDbbdX9DgZS0lsOHDzN9+nT69etHcnIyffr0adaud1NuJb/++iuVlZVcuXKFoUOHEhAQoFP2RERERET+TfsG/IzH4zECqaqqKurq6khMTKSgoMC4x+v1Mm3aNBISEoxtfH+lSb+0lujoaNauXcuRI0dIS0ujvLy8WbveTbmV3HvvvQwYMIBhw4apzpmIiIiIyF8olPIjTeuXLFu2jLfeeovRo0ezePFiXnjhBfLz84E/Cu9aLBbuu+8+hg4dyr59+9CCOrmVREdHs2rVKjp27Eh4eHhrD0fkv6bQVERERETkT/q51o80BlI2m42cnBwcDgfdunUjJSUFp9PJiy++iNfrJSEhAZPJxE8//cRrr72G1WoFUA0UuaXExMQwYMAATCaTCkaLiIiIiIj8A6mmlJ/58ssvmTFjBvn5+QwePNi4Xltby3vvvUdaWhoPP/wwtbW1BAUFUVJSolP25Jamd1NEREREROSfSSul/ExFRQW33XZbs1PLADp06EBqairDhg1j9+7dtG/fHpvNhsViUeFouaUpkBIREREREflnUijlJxpXk9TV1eF2u5tdb2z7+OOPiY6OZsmSJUa7TokSERERERERkZagIix+onE1yfDhw/nxxx9Zvny5cd1sNnPlyhU2bNjAnj17mvVTICUiIiIiIiIiLUE1pfxQdnY2s2fPJjExEavVSrt27cjIyKCqqsqoISUiIiIiIiIi0pIUSvkhr9fL9u3bmTNnDm63m+DgYLp06UJhYSGBgYGqISUiIiIiIiIiLU6hlB/7/fffqampwePx0L17d8xms2pIiYiIiIiIiIhPKJQSg8fjwWxWmTERERERERERaXkKpURERERERERExOe0LEZERERERERERHxOoZSIiIiIiIiIiPicQikREREREREREfE5hVIiIiIiIiIiIuJzCqVERERERERERMTnFEqJiIiIiIiIiIjPKZQSERERERERERGfUyglIiIiIiIiIiI+p1BKRERERERERER8TqGUiIiIiIiIiIj43L8AZI7j5yHk9CMAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Key insight: host_time is slightly slower due to CPU overhead,\n", + "but it catches ALL work on ALL streams - essential for untrusted code!\n" + ] + } + ], + "source": [ + "# Experiment 2: Compare all 4 timing methods\n", + "print(\"Comparing all KernelBench timing methods on 4096x4096 matmul:\")\n", + "print(\"=\" * 70)\n", + "\n", + "methods = [\"cuda_event\", \"host_time\", \"do_bench\", \"do_bench_impl\"]\n", + "results = {}\n", + "\n", + "for method in methods:\n", + " print(f\"\\nTesting {method}...\")\n", + " try:\n", + " method_fn = get_timing_function(method)\n", + " times = method_fn(\n", + " simple_mm, \n", + " [a, b], \n", + " num_warmup=10, \n", + " num_trials=50, \n", + " verbose=False,\n", + " device=DEVICE\n", + " )\n", + " results[method] = get_timing_stats(times, device=DEVICE)\n", + " print(f\" {method}: {results[method]['mean']:.4f} ms (std={results[method]['std']:.4f})\")\n", + " except Exception as e:\n", + " print(f\" {method}: Skipped due to {type(e).__name__} (Triton version compatibility)\")\n", + " # Remove from list if it failed\n", + " methods = [m for m in methods if m in results]\n", + "\n", + "# Only plot if we have results\n", + "if results:\n", + " # Visualize the comparison\n", + " fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", + "\n", + " # Bar chart of mean times\n", + " available_methods = [m for m in methods if m in results]\n", + " means = [results[m]['mean'] for m in available_methods]\n", + " stds = [results[m]['std'] for m in available_methods]\n", + " colors = ['#2ecc71', '#e74c3c', '#3498db', '#9b59b6'][:len(available_methods)]\n", + "\n", + " axes[0].bar(available_methods, means, yerr=stds, capsize=5, color=colors, alpha=0.8)\n", + " axes[0].set_ylabel('Time (ms)')\n", + " axes[0].set_title('Mean Execution Time by Method')\n", + " axes[0].tick_params(axis='x', rotation=45)\n", + "\n", + " # Highlight cuda_event vs host_time with truncated y-axis for readability\n", + " if 'cuda_event' in results and 'host_time' in results:\n", + " cuda_mean = results['cuda_event']['mean']\n", + " host_mean = results['host_time']['mean']\n", + " \n", + " axes[1].bar(['cuda_event', 'host_time'], \n", + " [cuda_mean, host_mean], \n", + " color=['#2ecc71', '#e74c3c'], alpha=0.8)\n", + " axes[1].set_ylabel('Time (ms)')\n", + " axes[1].set_title('cuda_event vs host_time\\n(host_time catches side-streams)\\n(graph truncated for readability)')\n", + " \n", + " # Truncate y-axis to make the difference easier to see\n", + " min_val = min(cuda_mean, host_mean)\n", + " max_val = max(cuda_mean, host_mean)\n", + " margin = (max_val - min_val) * 2 # Add margin around the data\n", + " axes[1].set_ylim(min_val - margin, max_val + margin)\n", + " else:\n", + " axes[1].text(0.5, 0.5, 'Comparison unavailable', ha='center', va='center')\n", + " axes[1].set_axis_off()\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + "print(\"\\nKey insight: host_time is slightly slower due to CPU overhead,\")\n", + "print(\"but it catches ALL work on ALL streams - essential for untrusted code!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The `discard_first` Effect\n", + "\n", + "Even after warmup, the first timing trial can be affected by lazy initialization. Let's see this in action." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:49.454708Z", + "iopub.status.busy": "2025-12-17T20:56:49.454585Z", + "iopub.status.idle": "2025-12-17T20:56:49.556972Z", + "shell.execute_reply": "2025-12-17T20:56:49.556169Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Demonstrating the discard_first effect:\n", + "============================================================\n", + "[Profiling] Using timing method: cuda_event\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 15\n", + "\n", + "First trial: 0.3438 ms\n", + "Mean of all trials: 0.3434 ms\n", + "Mean without first: 0.3434 ms\n", + "First trial overhead: 0.1%\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2gAAAHWCAYAAAACSaoRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAlaZJREFUeJzs3XlcFVX/B/DPveyryI6EbIoLqZik4oqpYVFmRWL9AkUzTXNDcUnTtIUsNTS3ytzQntS0HkMfTXEJFdQks0wpUTA3FhEQkEVmfn9MjF7WiwJ3hM/79bovvWe+M3Pmnpnhfu+cOaMSRVEEERERERER6Zxa1xUgIiIiIiIiCRM0IiIiIiIihWCCRkREREREpBBM0IiIiIiIiBSCCRoREREREZFCMEEjIiIiIiJSCCZoRERERERECsEEjYiIiIiISCGYoBERERERESkEEzQiarRSUlKgUqmwfv16XVel1t577z2oVKoHmtff3x/+/v51W6EGdujQIahUKnz33Xe6rops/fr1UKlUSElJqbNlpqWlISgoCDY2NlCpVIiKigIA/P3333j66afRrFkzqFQq/PDDD3W2zoexdetWWFtbIy8v74Hm//TTT+Hh4QE9PT34+PjUbeXogQwbNgxDhw7VdTWI6D5M0IjokVX2hbmy18yZM+tlnR999JFWX5b9/f2rrNv9r/fee69e6qmtkpISLFu2DE8++SQsLCxgbm6OJ598EsuWLUNJSYlO6/aoKkuuq3rduHFDjp0yZQr27t2LWbNmITo6GoMGDQIADB8+HL///js+/PBDREdHw9fXt07rWFBQgPfeew+HDh3Sep7S0lLMmzcPEyZMgLm5ea3X+dNPP2H69Ono2bMn1q1bh48++gjXrl3De++9h9OnT9d6eVQ3ZsyYge3bt+O3337TdVWI6F/6uq4AEdHDWrBgAdzd3TXKHn/8cbi6uuLOnTswMDCos3V99NFHCAoKwpAhQ6qNmz17Nt544w35/cmTJ7Fs2TK88847aNeunVzesWPHSuefM2dOvSWZZfLz8xEYGIjDhw/jueeew4gRI6BWq7Fnzx5MmjQJO3bswK5du2BmZlav9WisVq1aVWkiY2VlJf//wIEDeOGFFzBt2jS57M6dO4iPj8fs2bPx9ttv10vdCgoKMH/+fADQ+mrrjz/+iKSkJLz55psPtM4DBw5ArVbj66+/hqGhIQDgl19+wfz58+Hm5sYrajrSuXNn+Pr6YvHixdi4caOuq0NEYIJGRI3AM888U+UVBmNj4xrnz8/Pr/MkZODAgRXqsWzZMgwcOLDaL8RlddHX14e+fv2eosPDw3H48GF8/vnnGonAW2+9hRUrVuDtt9/GtGnTsGrVqnqtx/1EUURhYWGDra8+BQUFwdbWttqY9PR0jYQNADIyMgCgQrmurVu3Dj179oSzs/MDzZ+eng4TExM5OatP9XFMPwyl1ae8oUOHYt68eVi5cuUDXR0lorrFLo5E1GhVdg/aiBEjYG5ujuTkZDz77LOwsLDA//3f/wGQ7vt5+eWX4ejoCGNjYzz22GMYNmwYcnJyAAAqlQr5+fnYsGGD3F1txIgRD1y/sq5wf/75J1577TU0b94cvXr10ph2v3Xr1uGpp56Cvb09jIyM0L59+wdOnq5cuYKvv/4aTz31VKVXacaPH49+/fphzZo1uHLlCgDpqmS/fv0qxAqCAGdnZwQFBWmURUVFwdvbG8bGxnBwcMCYMWNw69YtjXnd3Nzw3HPPYe/evfD19YWJiQm++OILjeV8+OGHeOyxx2BsbIz+/fvjwoULFepw/PhxDBo0CM2aNYOpqSn69u2Lo0ePasSkpqZi3LhxaNOmDUxMTGBjY4NXXnml0nvKzp49i6eeegomJiZ47LHH8MEHH0AQhOo/1Foo654riiJWrFih0eXV1dUVABAREQGVSgU3Nzd5vqtXr2LkyJFwcHCAkZERvL29sXbt2grLLywsxHvvvQcvLy8YGxvDyckJL730EpKTk5GSkgI7OzsAwPz587XqbltYWIg9e/ZgwIABFaZps1+qVCqsW7cO+fn58vrWr1+PJ598EgAQFhamUV5Gm3at7jgqLzs7G3p6eli2bJlclpmZCbVaDRsbG4iiKJe/9dZbcHR0lN/HxcXhlVdeQcuWLWFkZAQXFxdMmTIFd+7c0VhHdecYlUqFt99+G9u2bUP79u1hYmICPz8//P777wCAL774Aq1atYKxsTH8/f0r7Jtubm6VnnPK33dadg/nli1b8M4778DR0RFmZmYYPHgw/vnnnwrzDxw4EPn5+di3b1+lnxsRNSxeQSOiR15OTg4yMzM1yqq7cnH37l0EBASgV69eWLRoEUxNTVFcXIyAgAAUFRVhwoQJcHR0xNWrVxETE4Ps7Gw0a9YM0dHReOONN9C1a1e5m5enp+dD1/+VV15B69at8dFHH2l8QSxv1apV8Pb2xuDBg6Gvr48ff/wR48aNgyAIGD9+fK3W+b///Q+lpaUIDQ2tMiY0NBQHDx7Enj178MYbbyA4OBjvvfcebty4ofHF9ciRI7h27RqGDRsml40ZMwbr169HWFgYJk6ciEuXLmH58uX49ddfcfToUY1up0lJSXj11VcxZswYjB49Gm3atJGnffzxx1Cr1Zg2bRpycnLwySef4P/+7/9w/PhxOebAgQN45pln0KVLF8ybNw9qtVpOGuLi4tC1a1cAUjfTY8eOYdiwYXjssceQkpKCVatWwd/fH3/++SdMTU0BADdu3EC/fv1w9+5dzJw5E2ZmZvjyyy9hYmJSq884KyurQpm+vj6srKzQp08fREdHIyQkBAMHDpTboWPHjrCyssKUKVPw6quv4tlnn5WvaKSlpaF79+7yl3w7Ozv873//w6hRo5Cbm4vJkycDkO4Ve+655xAbG4thw4Zh0qRJuH37Nvbt24c//vgDAwYMwKpVq/DWW2/hxRdfxEsvvSSvuyqnTp1CcXExnnjiiQrTtNkvo6Oj8eWXX+LEiRNYs2YNAKB169ZYsGAB5s6dizfffBO9e/cGAPTo0aNW7VpGm+PIysoKjz/+OH7++WdMnDgRgLT/qlQqZGVl4c8//4S3tzcAKSErqxMAbNu2DQUFBXjrrbdgY2ODEydO4PPPP8eVK1ewbds2jfVUdo4pExcXh507d8qfTWRkJJ577jlMnz4dK1euxLhx43Dr1i188sknGDlyJA4cOFBlu9Tkww8/hEqlwowZM5Ceno6oqCgMGDAAp0+f1tify5LFo0eP4sUXX3zg9RFRHRGJiB5R69atEwFU+hJFUbx06ZIIQFy3bp08z/Dhw0UA4syZMzWW9euvv4oAxG3btlW7TjMzM3H48OG1ruu2bdtEAOLBgwflsnnz5okAxFdffbVCfNm0+xUUFFSICwgIED08PDTK+vbtK/bt27fa+kyePFkEIP76669VxiQmJooAxPDwcFEURTEpKUkEIH7++ecacePGjRPNzc3l+sXFxYkAxM2bN2vE7dmzp0K5q6urCEDcs2ePRuzBgwdFAGK7du3EoqIiuXzp0qUiAPH3338XRVEUBUEQW7duLQYEBIiCIMhxBQUForu7uzhw4ECNsvLi4+NFAOLGjRsrfDbHjx+Xy9LT08VmzZqJAMRLly5V+ZmJ4r22q+zVpk0bjVgA4vjx4zXKyvbbTz/9VKN81KhRopOTk5iZmalRPmzYMLFZs2by9q1du1YEIC5ZsqRC3co+o4yMDBGAOG/evGq3pcyaNWs0Pvf7abtfDh8+XDQzM9MoO3nyZIVjtKye2rZrdcdRZcaPHy86ODjI78PDw8U+ffqI9vb24qpVq0RRFMWbN2+KKpVKXLp0abXbGRkZKapUKjE1NVVjOys7x4ii1N5GRkYa+9AXX3whAhAdHR3F3NxcuXzWrFkV9jdXV9dKzz/lj/my48fZ2VljmVu3bhUBaGxXGS8vL/GZZ56pUE5EDY9dHInokbdixQrs27dP41WTt956S+N9s2bNAAB79+5FQUFBvdSzKmPHjtUq7v5fvMuuGvbt2xcXL16Uu2Fq6/bt2wAACwuLKmPKpuXm5gIAvLy84OPjgy1btsgxpaWl+O677/D888/L9du2bRuaNWuGgQMHIjMzU3516dIF5ubmOHjwoMZ63N3dERAQUGkdwsLCNO5ZKruicfHiRQDA6dOn8ffff+O1117DzZs35XXl5+ejf//++Pnnn+Wuifd/fiUlJbh58yZatWoFKysrJCYmytN2796N7t27a1yhsbOzk7upaWv79u0V9st169bVahllRFHE9u3b8fzzz0MURY3PNSAgADk5OfI2bN++Hba2tpgwYUKF5Tzooxtu3rwJAGjevHmFaXW5X5apTbuW0fY46t27N9LS0pCUlARAuqLVp08f9O7dG3FxcQCkq2qiKGpcQbt/O/Pz85GZmYkePXpAFEX8+uuvFdZT/hxTpn///hrdVrt16wYAePnllzWOx7Lysn39QYSGhmosMygoCE5OTti9e3eF2ObNm1foiUBEusEujkT0yOvatWuthiHX19fHY489plHm7u6O8PBwLFmyBJs3b0bv3r0xePBgvP7663LyVl/Kj0BZlaNHj2LevHmIj4+vkETm5OTUqp5lX9rKErXKVJbEBQcH45133sHVq1fh7OyMQ4cOIT09HcHBwXLM33//jZycHNjb21e63PT0dI331W1/y5YtNd6XJQhl97L9/fffAKRh6auSk5OD5s2b486dO4iMjMS6detw9epVjW5w9ycSqamp8pfj+93f9VIbffr0qXGQEG1lZGQgOzsbX375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VBQUFMDOzg6dO3fGgAED4OLiUl/1JCIiIiIiavS0uoJ2584dfPDBB3BxccGzzz6L//3vf8jOzoaenh4uXLiAefPmwd3dHc8++ywSEhLqu85ERERERESNklZX0Ly8vODn54evvvoKAwcOhIGBQYWY1NRUfPPNNxg2bBhmz56N0aNH13lliYiIiIiIGjOtErSffvoJ7dq1qzbG1dUVs2bNwrRp03D58uU6qRwREREREVFTolUXx5qSs/sZGBjA09PzgStERERERETUVNV6FMc9e/bgyJEj8vsVK1bAx8cHr732Gm7dulWnlSMiIiIiImpKap2gRUREIDc3FwDw+++/Y+rUqXj22Wdx6dIlhIeH13kFiYiIiIiImopaDbMPAJcuXUL79u0BANu3b8dzzz2Hjz76CImJiXj22WfrvIJERERERERNRa2voBkaGqKgoAAAsH//fjz99NMAAGtra/nKGhEREREREdVera+g9erVC+Hh4ejZsydOnDiBLVu2AAD++usvPPbYY3VeQSIiIiIioqai1lfQli9fDn19fXz33XdYtWoVnJ2dAQD/+9//MGjQoDqvIBERERE1TikpwH/+A6xZI/2bkqLrGhHpXq2voLVs2RIxMTEVyj/77LM6qRARERERNW7XrwOLFgFxcUBuLqBWA4IAWFoCffoAU6cCTk66riWRbtQ6QSuTnp6O9PR0CIKgUd6xY8eHrhQRERERNU7XrwPjxgFnzwJ2doCn570ELTsb2LkTSE4GVq5kkkZNU60TtFOnTmH48OE4d+4cRFEEAKhUKoiiCJVKhdLS0jqvJBERERE1DosWScmZhwdgYHCvXK0GrK0BCwtp+pIlwKef6q6eRLpS6wRt5MiR8PLywtdffw0HBweoVKr6qBcRERERNTIpKVK3Rjs7zeTsfgYG0vTDh6V4N7cGrCCRAtQ6Qbt48SK2b9+OVq1a1Ud9iIiIiKiRio+X7jnz9Kw+zspK6uaYkMAEjZqeWo/i2L9/f/z222/1URciIiIiasTy86WujOoavoGWxeTlNUy9iJSk1lfQ1qxZg+HDh+OPP/7A448/DoNy16cHDx5cZ5UjIiIiosbDzEwaDEQQqk/SymLMzRuubkRKUesELT4+HkePHsX//ve/CtM4SAgRERERVcXPTxpKPztbGhCkKtnZUpyfX0PVjEg5at3FccKECXj99ddx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vb29Im6SbOrYHsrDNlEetomysD2Uh22iPGwTZVFae2ibG+i+pkRERERERASACRoREREREZFiMEEjIiIiIiJSCCZoRERERERECsEEjYiIiIiISCGYoBERERERESkEEzQiIiIiIiKFYIJGRERERESkEEzQiIiIiIiIFIIJGhERERERkUIwQSMiIiIiIlIIJmhEREREREQKwQSNiIiIiIhIIZigERERERERKQQTNCIiIiIiIoVggkZERERERKQQTNCIiIiIiIgUggkaERERERGRQujrugJERESNVUoKEB8P5OcDZmaAnx/g5qbrWhERkZIxQSMiIqpj168DixYBcXFAbi6gVgOCAFhaAn36AFOnAk5Ouq4lEREpERM0IiKiOnT9OjBuHHD2LGBn9//t3XtQVAUfxvFnuSPX0BQ2QanBvJuKOGhvvpOoqZmOU04NEmb94YghmqaToo7lBSvzmoaVU6alf4SVo+MgKV4mkCQo826kmBdeSwUxktk97x+8UiSibwLnyH4/MztyLss+Mz/X09M5e1Z66KE/C9rly9KXX0onT0rvvktJAwDcjM+gAQBQj956q6qcPfigFBJSVc6kqj9DQqrW//ijtHixuTkBANZEQQMAoJ78/HPVZY333y95eta+j6dn1fbs7Kr9AQD4KwoaAAD15Jtvqj5zFhxc937BwVX75eQ0RioAwL2EggYAQD0pL6+6lNHtNkfXG/tcvdo4uQAA9w4KGgAA9cTPr+pmIE5n3fvd2Mffv3FyAQDuHRQ0AADqSWxs1a30L1+ue7/Ll6v2i41tjFQAgHsJBQ0AgHrStq30r39J//mPVFlZ+z6VldLFi1K/flKbNo0aDwBwD6CgAQBQj6ZMkTp1kn76Sfrttz8vd3Q6q5aLiqSOHaXJk83NCQCwJgoaAAD1KCys6kuohw+vOlt28uSfj8pK6amn+JJqAMCteZgdAACApiYsTHrzzarvOcvJqbpbo79/1WfOuKwRAFAXChoAAA2kbduqBwAAd4pLHAEAAADAIihoAAAAAGARFDQAAAAAsAgKGgAAAABYBAUNAAAAACyCggYAAAAAFkFBAwAAAACLoKABAAAAgEVQ0AAAAADAIjzMDtCUGYYhSSotLTU5ieR0OlVWViYfHx+5udHLzcY8rIeZWA8zsRbmYT3MxHqYibVYbR43OsGNjnArFLQGVFZWJkkK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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "The first trial often shows initialization overhead even after warmup.\n", + "Using discard_first=1 (default) gives more consistent measurements.\n" + ] + } + ], + "source": [ + "# Demonstrate the discard_first effect\n", + "# Even after warmup, the first timing trial can have higher overhead\n", + "\n", + "print(\"Demonstrating the discard_first effect:\")\n", + "print(\"=\" * 60)\n", + "\n", + "# Create fresh data and clear caches to make initialization overhead more visible\n", + "torch.cuda.empty_cache()\n", + "a_fresh, b_fresh = get_data(2048)\n", + "\n", + "# Collect trials with discard_first=0 to see ALL trials including the first one\n", + "timing_fn = get_timing_function(\"cuda_event\")\n", + "times_all = timing_fn(\n", + " simple_mm, [a_fresh, b_fresh],\n", + " num_warmup=3,\n", + " num_trials=15,\n", + " discard_first=0, # Keep ALL trials including first\n", + " verbose=False,\n", + " device=DEVICE\n", + ")\n", + "\n", + "# Calculate statistics\n", + "first_trial = times_all[0]\n", + "remaining_trials = times_all[1:]\n", + "mean_all = np.mean(times_all)\n", + "mean_remaining = np.mean(remaining_trials)\n", + "\n", + "print(f\"\\nFirst trial: {first_trial:.4f} ms\")\n", + "print(f\"Mean of all trials: {mean_all:.4f} ms\")\n", + "print(f\"Mean without first: {mean_remaining:.4f} ms\")\n", + "print(f\"First trial overhead: {((first_trial / mean_remaining) - 1) * 100:.1f}%\")\n", + "\n", + "# Visualize the effect with a scatter plot\n", + "plt.figure(figsize=(10, 5))\n", + "plt.scatter(range(len(times_all)), times_all, alpha=0.7, color='blue', s=60)\n", + "plt.scatter([0], [first_trial], color='red', s=100, zorder=5, label=f'First trial: {first_trial:.3f}ms')\n", + "plt.axhline(y=mean_remaining, color='green', linestyle='--', alpha=0.7, \n", + " label=f'Mean (without first): {mean_remaining:.3f}ms')\n", + "plt.axhline(y=mean_all, color='orange', linestyle=':', alpha=0.7,\n", + " label=f'Mean (all): {mean_all:.3f}ms')\n", + "plt.xlabel('Trial Index')\n", + "plt.ylabel('Time (ms)')\n", + "plt.title('First Trial Overhead Effect (after warmup)')\n", + "plt.legend(loc='upper right')\n", + "plt.grid(True, alpha=0.3)\n", + "plt.show()\n", + "\n", + "print(\"\\nThe first trial often shows initialization overhead even after warmup.\")\n", + "print(\"Using discard_first=1 (default) gives more consistent measurements.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HwsjlhAazX2j" + }, + "source": [ + "## The \"Agent\" Trap: Reward Hacking via Hidden Streams\n", + "\n", + "When evaluating LLM-generated kernels (like with [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), you're not just fighting measurement noise—you're fighting an optimizer that may inadvertently discover exploits in your harness.\n", + "\n", + "One such exploit: launching work on a **side stream** to make the kernel appear instantaneous." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:49.559529Z", + "iopub.status.busy": "2025-12-17T20:56:49.559407Z", + "iopub.status.idle": "2025-12-17T20:56:49.893598Z", + "shell.execute_reply": "2025-12-17T20:56:49.892579Z" + }, + "id": "UuwtML39zX2j", + "outputId": "95ebbb26-e415-491a-da30-6a78ce387906" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Standard benchmark on tricky kernel: 0.0577 ms\n" + ] + } + ], + "source": [ + "def tricky_agent_kernel(a, b):\n", + " \"\"\"A 'clever' kernel that games the benchmarking harness.\"\"\"\n", + " # The agent creates a new stream to \"optimize\"\n", + " s = torch.cuda.Stream()\n", + " with torch.cuda.stream(s):\n", + " # This work happens on a side channel!\n", + " result = torch.matmul(a, b)\n", + " return result\n", + "\n", + "print(f\"Standard benchmark on tricky kernel: {final_benchmark(tricky_agent_kernel, a, b):.4f} ms\")\n", + "# Likely reports ~0.00ms or very close to it!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3HXns_XizX2j" + }, + "source": [ + "**The Issue:**\n", + "Standard benchmarking tools (including `do_bench`) record events on the *current default stream*.\n", + "\n", + "1. Benchmark starts timer on Stream A (the default stream).\n", + "2. Agent launches work on Stream B and returns immediately.\n", + "3. Benchmark stops timer on Stream A.\n", + "\n", + "Since Stream A had no work, the timer reports `~0.00ms`, while Stream B is still churning away in the background.\n", + "\n", + "**Why this matters for evals:**\n", + "If your reward signal is \"lower time = better score,\" an agent that discovers this pattern will be rewarded for producing *broken* code. The kernel \"runs\" instantly because you never measured it at all.\n", + "\n", + "**Mitigations:**\n", + "- **Wall-clock + full device sync:** Trade precision for correctness (catches all streams, but includes CPU overhead)\n", + "- **Static analysis:** Reject submissions that create `torch.cuda.Stream()` objects\n", + "- **Manual inspection:** For high-stakes evals, benchmark kernels in isolation outside the automated harness\n", + "\n", + "### How KernelBench Addresses This\n", + "\n", + "KernelBench's timing module provides the **`host_time`** method specifically designed for evaluating untrusted code:\n", + "\n", + "**Use `torch.cuda.synchronize()`** before AND after timing - this waits for ALL streams on the device, not just the default stream\n", + "\n", + "```python\n", + "# For trusted code (faster, but can be fooled)\n", + "timing_fn = get_timing_function(\"cuda_event\")\n", + "\n", + "# For untrusted/agent code (catches side-streams)\n", + "timing_fn = get_timing_function(\"host_time\")\n", + "```\n", + "\n", + "The trade-off: `host_time` includes some CPU overhead in the measurement. However, note that host_time should be pretty similar to sync_time. Therefore, if both times are within a some percent of each other, you can be pretty sure that the kernel is running correctly and score using sync_time." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:49.895966Z", + "iopub.status.busy": "2025-12-17T20:56:49.895842Z", + "iopub.status.idle": "2025-12-17T20:56:49.905191Z", + "shell.execute_reply": "2025-12-17T20:56:49.904402Z" + }, + "id": "KbAFqiyizX2j", + "outputId": "6bc91db4-935c-4af9-bdc9-be3c50e890c4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Robust benchmark on tricky kernel: 2.7711 ms\n", + "Robust benchmark on normal kernel: 2.7269 ms\n" + ] + } + ], + "source": [ + "def benchmark_untrusted(func, *args):\n", + " \"\"\"Benchmark untrusted code by using wall-clock time with full device sync.\n", + "\n", + " This trades some precision (includes CPU overhead) for correctness\n", + " (catches work on any stream).\n", + " \"\"\"\n", + " torch.cuda.synchronize() # Clear any pending work\n", + " start = time.perf_counter()\n", + " func(*args)\n", + " torch.cuda.synchronize() # Wait for ALL streams\n", + " end = time.perf_counter()\n", + " return (end - start) * 1000\n", + "\n", + "print(f\"Robust benchmark on tricky kernel: {benchmark_untrusted(tricky_agent_kernel, a, b):.4f} ms\")\n", + "print(f\"Robust benchmark on normal kernel: {benchmark_untrusted(simple_mm, a, b):.4f} ms\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:49.907214Z", + "iopub.status.busy": "2025-12-17T20:56:49.907092Z", + "iopub.status.idle": "2025-12-17T20:56:50.122347Z", + "shell.execute_reply": "2025-12-17T20:56:50.121575Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Side-Stream Detection Experiment:\n", + "============================================================\n", + "[Profiling] Using timing method: cuda_event\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", + "[Profiling] Using timing method: host_time\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", + "\n", + "Tricky kernel with cuda_event: 0.1000 ms (FOOLED!)\n", + "Tricky kernel with host_time: 2.8900 ms (CORRECT)\n", + "Normal kernel with host_time: 2.8100 ms (reference)\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcRVJREFUeJzt3Xd4VGX+/vF70ia9kUYJhE5CDUUBhViACMqCjaZLE8sqsogV3a+AygJW1orgCqjLiopgoymCIiBVQHoniAkkQBLSQ+b5/cGPWYYESEKGSeD9uq65LuY5zznnc06YJ3PnNIsxxggAAAAAAFQ4N1cXAAAAAADAlYrQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAXERMTo8GDB1+034wZM2SxWHTgwAGn14Qrxw033KAbbrjB1WVcdhaLRWPHjnV1GZA0duxYWSwWpaWlubqUSzZ48GDFxMS4ugwAcEDoBnDV+v3333XXXXepTp068vb2Vs2aNdW1a1e99dZbri7NwTfffKOEhARFRETI19dX9erVU58+fbRw4UJ7nz///FNjx47Vxo0bXVeokyxbtkwWi8X+slqtioyM1A033KB//vOfSk1NLfeyL9d+27Ztm8aOHcsfZCBJysnJ0dixY7Vs2TJXl+Iyl7IPruTxDsCVycPVBQCAK6xcuVI33nijateurfvvv19RUVE6dOiQfv31V/3rX//So48+au+7c+dOubm55m+Ur776qp588kklJCRo9OjR8vX11Z49e/TDDz/o008/1S233CLp9JfQcePGKSYmRq1atXJJrc42YsQItWvXTkVFRUpNTdXKlSs1ZswYvf766/rss8900003lXmZl2u/bdu2TePGjdMNN9xQ7Cjc4sWLnbZeVE45OTkaN26cJF2VZzlIl7YPLvS5nTZtmmw2WwVVCQAVg9AN4Ko0fvx4BQUFae3atQoODnaYdvToUYf3Vqv1Mlb2P6dOndKLL76orl27lhjMzq2zLHJycuTr63sp5V12nTp10l133eXQtmnTJnXr1k133nmntm3bpurVq7uouvLz8vJydQnAFcPT09PVJQBAMZxeDuCqtHfvXjVt2rRY4JakiIgIh/clXdO9detW3XTTTfLx8VGtWrX0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B2eUZ7wrL2f8/AFcfTjSDeCq9OijjyonJ0e33367mjRpooKCAq1cudJ+pOvc073P9tRTT+njjz/WLbfcor///e/y8/PT1KlT7UcozwgMDNR7772nv/71r2rdurX69eun8PBwJSUl6bvvvtN1111X7NnSZ8vJyVHHjh3Vvn173XLLLYqOjlZ6errmzZun5cuXq3fv3oqPj5d0OgQFBwdrypQpCggIkJ+fn6699lrVrVv3vMv/61//qs8++0wPPfSQli5dquuuu05FRUXasWOHPvvsMy1atEht27ZVt27d5OXlpZ49e+rBBx9UVlaWpk2bpoiIiFI/97kiLF++XHl5eSoqKtKxY8e0YsUKff311woKCtLcuXMdTv2cOHGili5dqmuvvVb333+/4uLidPz4cW3YsEE//PCD/bTwC+23Dz74QN27d1fTpk01ZMgQ1axZU4cPH9bSpUsVGBiob775RpL0z3/+U4sXL1ZCQoIeeOABxcbGKjk5WZ9//rl++eUXBQcHq1WrVnJ3d9ekSZOUkZEhq9Vqf+75uR544AG9//77Gjx4sNavX6+YmBh98cUXWrFihSZPnmy/dr0sDh8+rNjYWA0aNOiiN1N78803df3116t169Z64IEHVLduXR04cEDfffedNm7cKEnq16+fnn76ad1+++0aMWKEcnJy9N5776lRo0YONz1r1aqV+vfvr3fffVcZGRnq2LGjlixZoj179hRb72233aaPP/5YQUFBiouL06pVq/TDDz+oWrVqZdrW+vXr66WXXtLo0aN14MAB9e7dWwEBAdq/f7/mzp2rBx54QE888YS9f+vWrdWgQQM999xzys/Pdzi1XLr0z3FJfHx8FBcXp9mzZ6tRo0YKDQ1Vs2bNLnotfd++ffX888/L29tb9913n8OZECdPnlStWrV01113qWXLlvL399cPP/ygtWvXOpw9cClatmypQYMGaerUqUpPT1dCQoLWrFmjmTNnqnfv3rrxxhslSTNnztS7776r22+/XfXr19fJkyc1bdo0BQYG2oN7efeBVL7xrryc8fMHcBW6zHdLB4BKYcGCBWbo0KGmSZMmxt/f33h5eZkGDRqYRx991Bw5csSh77mPDDPGmM2bN5uEhATj7e1tatasaV588UXz73//u9hzuo05/cirxMREExQUZLy9vU39+vXN4MGDzbp16y5YY2Fh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mCrtWOrSTcnKytLGjRu1ceNGSacfCbZx40YlJSVJOn2UeuDAgfb+Dz30kPbt26ennnpKO3bs0LvvvqvPPvtMjz32mCvKBwAAAADgglwautetW6f4+HjFx8dLkkaNGqX4+Hg9//zzkqTk5GR7AJekunXr6rvvvtP333+vli1b6rXXXtMHH3zA48IAAAAAAJWSS08vv+GGG2QucL7PjBkzSpznt99+c2JVAAAAAABUjCpwpjwAAAAAAFUToRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJKkXofueddxQTEyNvb29de+21WrNmzXn7zpgxQxaLxeHl7e19GasFAAAAAKB0XB66Z8+erVGjRmnMmDHasGGDWrZsqcTERB09evS88wQGBio5Odn+Onjw4GWsGAAAAACA0nF56H799dd1//33a8iQIYqLi9OUKVPk6+urDz/88LzzWCwWRUVF2V+RkZGXsWIAAAAAAErHpaG7oKBA69evV5cuXextbm5u6tKli1atWnXe+bKyslSnTh1FR0erV69e2rp16+UoFwAAAACAMvFw5crT0tJUVFRU7Eh1ZGSkduzYUeI8jRs31ocffqgWLVoo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Hnvbgw8+aHx9fR3+4JeYmGgefPDB89a5du1aI8k+T2lD9+eff24GDBhgYmNjzR9//GGfdt9995kHHnjAof/y5cuNm5ubyc3NLdP2vPPOOyYyMtL+vn79+mbWrFkO87344oumQ4cOxhhC99WI08txxdq+fbvy8/N18803l3v+a6+91qGtQ4cODu+zsrL0xBNPKDY2VsHBwfL399f27duVlJR00eX//vvvKioqUqNGjeTv729//fTTT9q7d68kqUePHvL09NTXX38t6fRpXYGBgerSpYuk06eP7tmzRwEBAfb5Q0NDlZeXZ1+GJDVt2lTu7u7299WrV7/kU7QAOF+LFi0c3p/57G7fvl3R0dGKjo62T4uLi1NwcLC2b98uSRo1apSGDRumLl26aOLEiQ5jgjPFxMQoICDA/j4yMlJxcXFyc3NzaDszBm3atElZWVmqVq2aw1i4f//+y1YzgNMmTZqkmTNn2seRs23fvl3XXXedQ9t1112n3bt3O5wW3rZt22Lz+vr6qn79+vb3kZGRiomJkb+/v0Pb2d9N1q9fr549e6p27doKCAhQQkKCJJXqO9bZHnvsMa1evVo///yzatasaW/ftGmTZsyY4TDuJCYmymazaf/+/WXanrO/V2VnZ2vv3r267777HJb90ksvMaZdxTxcXQDgLD4+PueddubLnzHG3nbmGueyeOKJJ/T999/r1VdfVYMGDeTj46O77rqrVDfayMrKkru7u9avX+8QiCXZfwl5eXnprrvu0qxZs9SvXz/NmjVLffv2lYeHh30Zbdq00X/+859iyw8PD7f/29PT02GaxWKRzWYr8/YCuLwu5bM7duxYDRgwQN99950WLFigMWPG6NNPP9Xtt9/ujFLtSqr5QtuRlZWl6tWr2+9ncTYeRwZcXp07d1ZiYqJGjx6twYMHl2sZfn5+xdrKOi5kZ2crMTFRiYmJ+s9//qPw8HAlJSUpMTGxzDcz69q1q/773/9q0aJFuueee+ztWVlZevDBBzVixIhi89SuXbvM23PmO2VWVpYkadq0acUO3pz7fQ9XD0I3rlgNGzaUj4+PlixZomHDhjlMOxNIk5OTFRISIknFnpUYGxur1atXO7T9+uuvDu9XrFihwYMH27/EZmVlOdzE7ELi4+NVVFSko0ePqlOnTuftd88996hr167aunWrfvzxR7300kv2aa1bt9bs2bMVERGhwMDAUq23JF5eXg5/pQZQucXGxurQoUM6dOiQ/Wj3tm3blJ6erri4OHu/Ro0aqVGjRnrsscfUv39/TZ8+Xbfffnu5PvPOGidat26tlJQUeXh4KCYmpsKXD6BsJk6cqFatWqlx48YO7bGxsVqxYoVD24oVK9SoUaMKD5M7duzQsWPHNHHiRPsYt27dunIt6y9/+Yt69uypAQMGyN3dXf369ZN0euzZtm2bGjRoUGF1S6eP2NeoUUP79u1zCPm4unF6Oa5Y3t7eevrpp/XUU0/po48+0t69e/Xrr7/q3//+txo0aKDo6GiNHTtWu3fv1nfffVfsDpwjRozQwoUL9eqrr2r37t16++23tXDhQoc+DRs21JdffqmNGzdq06ZNGjBgQKmPQjVq1Ej33HOPBg4cqC+//FL79+/XmjVrNGHCBH333Xf2fp07d1ZUVJTuuece1a1b1+Gvpvfcc4/CwsLUq1cvLV++XPv379eyZcs0YsQI/fHHH6XeVzExMfr55591+PBhpaWllXo+AK7RpUsXNW/eXPfcc482bNigNWvWaODAgUpISFDbtm2Vm5ur4cOHa9myZTp48KBWrFihtWvXKjY2VtLpz3xWVpaWLFmitLQ0+9MQLsRZ40SXLl3UoUMH9e7dW4sXL9aBAwe0cuVKPffcc+X+kg2g/M6MLW+++aZD++OPP64lS5boxRdf1K5duzRz5ky9/fbbeuKJJyq8htq1a8vLy0tvvfWW9u3bp6+//lovvvhiuZd3++236+OPP9aQIUP0xRdfSJKefvpprVy5UsOHD9fGjRu1e/duffXVVxo+fPgl1z9u3DhNmDBBb775pnbt2qXff/9d06dP1+uvv37Jy0bVROjGFe3//u//9Pjjj+v5559XbGys+vbtq6NHj8rT01P//e9/tWPHDrVo0UKTJk1yOIIsSe3bt9e0adP0r3/9Sy1bttTixYv1j3/8w6HP66+/rpCQEHXs2FE9e/ZUYmKiWrduXer6pk+froEDB+rxxx9X48aN1bt3b61du9bhtCaLxaL+/ftr06ZNxf5i6uvrq59//lm1a9fWHXfcodjYWN13333Ky8sr05HvF154QQcOHFD9+vUdTksHUDlZLBZ99dVXCgkJUefOndWlSxfVq1dPs2fPlnT6FMZjx45p4MCBatSokfr06aPu3btr3LhxkqSOHTvqoYceUt++fRUeHq6XX375out01jhhsVg0f/58de7cWUOGDFGjRo3Ur18/HTx4UJGRkRW2HgCl98ILLxQ7iNC6dWt99tln+vTTT9WsWTM9//zzeuGFF8p9GvqFhIeHa8aMGfr8888VFxeniRMn6tVXX72kZd51112aOXOm/vrXv+rLL79UixYt9NNPP2nXrl3q1KmT4uPj9fzzz6tGjRqXXP+wYcP0wQcfaPr06WrevLkSEhI0Y8YM1a1b95KXjarJYs6+qBUAAAAAAFQYjnQDAAAAAOAkhG7ASZYvX+7wqIhzXwBQWTBeAQDgPJxeDjhJbm6uDh8+fN7pFX23TAAoL8YrAACch9ANAAAAAICTcHo5AAAAgFI5duyYIiIidODAgUtazooVK9S8eXN5enqqd+/eFVKbK7Vv315z5sxxdRmopAjdQAnO/YXijF8My5Ytk8ViUXp6+iUtJyYmRpMnT5YkFRQUKCYmhmfbAleoivqyW1lMmTJFPXv2dHUZAMpg/Pjx6tWrl2JiYi5pOaNGjVKrVq20f/9+zZgxo0Jqc6V//OMfeuaZZ4o9ag2QCN1Aic79hVJVfjF4eXnpiSee0NNPP+3qUgA4QUV92XUFi8WiefPmObQNHTpUGzZs0PLly11TFIAyycnJ0b///W/dd999JU43xujUqVOlWtbevXt10003qVatWgoODi5XPQUFBeWazxm6d++ukydPasGCBa4uBZUQoRs4R0m/UCriF8Plcs899+iXX37R1q1bXV0KgAp0sS+7FaGwsLBYmzO/1Hp5eWnAgAF68803nbYOABVn/vz5slqtat++vaT/nbW3YMECtWnTRlarVb/88otsNpsmTJigunXrysfHRy1bttQXX3whSTpw4IAsFouOHTumoUOHymKx2A9obNmyRd27d5e/v78iIyP117/+VWlpafb133DDDRo+fLhGjhypsLAwJSYmlnq+ESNG6KmnnlJoaKiioqI0duxYh21LT0/Xgw8+qMjISHl7e6tZs2b69ttv7dN/+eUXderUST4+PoqOjtaIESOUnZ1tn+7u7q4ePXro008/rdB9jisDoRs4x9m/UC70i+Gnn37SNddcI6vVqurVq+uZZ55x+Otufn6+RowYoYiICHl7e+v666/X2rVrL7juiw3oR48eVc+ePeXj46O6devqP//5T7FlhISE6Lrr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fu7Ly8tLTZo00alTp7R+/Xr7PDt37izxOd8M+sCV59yxqUWLFlq+fHmJdxwPDAxUjRo1HMYg6fQ4db4x6EJat26t3bt3KyIiotj4FBQUpICAAMXExGjJkiXnXYanp6eKioqKte/du1d5eXmMWUAVkJiYqK1bt17w4ERAQICeeOIJPfbYY5o5c6b27t2rDRs26K233tLMmTPPO98jjzyi48ePq3///lq7dq327t2rRYsWaciQISWOHZc639kSEhLUuXNn3Xnnnfr++++1f/9+LViwwH7zyaefflorV67U8OHDtXHjRu3evVtfffVVsRupLV++XN26dSvVOnF1IXQD5yjNL5SHH35Yhw4d0qOPPqodO3boq6++0pgxYzRq1Ci5ubnJz89Pf/vb3/Tkk09q4cKF2rZtm+6//37l5OSc93E/FxvQGzdurFtuuUUPPvigVq9erfXr12vYsGElHu1i0AeuPOeOTcOHD1dmZqb69eundevWaffu3fr444+1c+dOSdKTTz6pSZMmafbs2dq5c6eeeeYZbdy40eGa69K65557FBYWpl69emn58uXav3+/li1bphEjRuiPP/6QJI0dO1avvfaa3nzzTe3evdv+JfuMM6E8JSXFYXxdvny56tWrp/r161/K7gFwGTRv3lytW7fWZ599dsF+L774ov7v//5PEyZMUGxsrG655RZ99913qlu37nnnOfOHwqKiInXr1k3NmzfXyJEjFRwcfMGzaco737nmzJmjdu3aqX///oqLi9NTTz1lD+0tWrTQTz/9pF27dqlTp06Kj4/X888/73CfjcOHD2vlypUaMmRIqdeJq4iLb+QGVErXXHONmTJliv39uXfYNMaYZcuWmXbt2hkvLy8TFRVlnn76aVNYWGifnpubax599FETFhZmrFarue6668yaNWvs08+9e7kxxqxZs8Z07drV+Pv7Gz8/P9OiRQszfvx4+/Tk5GRz6623GqvVamrXrm0++ugjU6dOHYe7l69cudIEBwebnJycitshACqFc8emTZs2mW7duhlfX18TEBBgOnXqZPbu3WuMMaaoqMiMHTvW1KxZ03h6epqWLVuaBQsW2Oc9c/fy3377zWEdgwYNMr169Sq27uTkZDNw4ED7mFavXj1z//33m4yMDHufKVOmmMaNGxtPT09TvXp18+ijj9qnff3116ZBgwbGw8PD1KlTx97erVs3M2HChEvcMwAul2+//dbExsZyh+5zPPXUU+b+++93dRmopCzGnHV+LABJp2/+8eSTT2rLli2XfK3i5da3b1+1bNlSzz77rKtLAVDBqvLYVJKtW7fqpptu0q5duxQUFOTqcgCU0uTJk3XnnXcqOjra1aVUGq+99pruvfdeRUZGuroUVEKEbuA8quIvlIKCAr388st6/PHHuXMmcIWqimPT+fzwww8qKipSYmKiq0sBAMBpCN0AAAAAADhJ1T83DQAAAACASorQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnOT/Afb3845bTMjvAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Key insight: host_time correctly measures the tricky kernel!\n", + "Use host_time for evaluating untrusted/agent-generated code.\n" + ] + } + ], + "source": [ + "# Side-Stream Detection with KernelBench's host_time\n", + "# Let's demonstrate how host_time catches the tricky kernel\n", + "\n", + "print(\"Side-Stream Detection Experiment:\")\n", + "print(\"=\" * 60)\n", + "\n", + "# cuda_event (can be fooled by side-streams)\n", + "cuda_timing = get_timing_function(\"cuda_event\")\n", + "cuda_times = cuda_timing(tricky_agent_kernel, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", + "cuda_stats = get_timing_stats(cuda_times, device=DEVICE)\n", + "\n", + "# host_time (catches all streams)\n", + "host_timing = get_timing_function(\"host_time\")\n", + "host_times = host_timing(tricky_agent_kernel, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", + "host_stats = get_timing_stats(host_times, device=DEVICE)\n", + "\n", + "# Normal kernel for reference\n", + "normal_times = host_timing(simple_mm, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", + "normal_stats = get_timing_stats(normal_times, device=DEVICE)\n", + "\n", + "print(f\"\\nTricky kernel with cuda_event: {cuda_stats['mean']:.4f} ms (FOOLED!)\")\n", + "print(f\"Tricky kernel with host_time: {host_stats['mean']:.4f} ms (CORRECT)\")\n", + "print(f\"Normal kernel with host_time: {normal_stats['mean']:.4f} ms (reference)\")\n", + "\n", + "# Visualize the dramatic difference\n", + "plt.figure(figsize=(10, 5))\n", + "methods = ['cuda_event\\n(fooled)', 'host_time\\n(correct)', 'Normal kernel\\n(reference)']\n", + "times = [cuda_stats['mean'], host_stats['mean'], normal_stats['mean']]\n", + "colors = ['red', 'green', 'blue']\n", + "\n", + "plt.bar(methods, times, color=colors, alpha=0.8)\n", + "plt.ylabel('Time (ms)')\n", + "plt.title('Side-Stream Detection: cuda_event vs host_time')\n", + "plt.grid(True, alpha=0.3, axis='y')\n", + "\n", + "# Add annotation\n", + "plt.annotate('Agent trick detected!', xy=(1, host_stats['mean']), \n", + " xytext=(1.3, host_stats['mean'] * 0.7),\n", + " arrowprops=dict(arrowstyle='->', color='green'),\n", + " fontsize=10, color='green')\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print(\"\\nKey insight: host_time correctly measures the tricky kernel!\")\n", + "print(\"Use host_time for evaluating untrusted/agent-generated code.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Uq4qvl8FzX2j" + }, + "source": [ + "## Correctness Before Speed\n", + "\n", + "A kernel that runs in 0.1ms but produces garbage is worthless. Before you start optimizing, **always verify correctness** against a reference implementation." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "execution": { + "iopub.execute_input": "2025-12-17T20:56:50.124591Z", + "iopub.status.busy": "2025-12-17T20:56:50.124472Z", + "iopub.status.idle": "2025-12-17T20:56:50.204291Z", + "shell.execute_reply": "2025-12-17T20:56:50.203333Z" + }, + "id": "J9W63Q5czX2k", + "outputId": "312076ee-f089-4276-8b8f-bb7a23575d3d" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✓ Correctness verified!\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", + "Kernel time: 0.0652 ms\n" + ] + } + ], + "source": [ + "def my_experimental_kernel(a, b):\n", + " \"\"\"Pretend this is our custom optimized kernel.\"\"\"\n", + " return torch.matmul(a, b) # In reality, this would be your Triton/CUDA code\n", + "\n", + "def verify_correctness(kernel_fn, ref_fn, *args, atol=1e-2, rtol=1e-2):\n", + " \"\"\"Verify kernel produces correct output before benchmarking.\"\"\"\n", + " ref_output = ref_fn(*args)\n", + " kernel_output = kernel_fn(*args)\n", + "\n", + " if not torch.allclose(ref_output, kernel_output, atol=atol, rtol=rtol):\n", + " max_diff = (ref_output - kernel_output).abs().max().item()\n", + " raise AssertionError(\n", + " f\"Kernel output doesn't match reference! \"\n", + " f\"Max difference: {max_diff:.6f}\"\n", + " )\n", + " print(\"✓ Correctness verified!\")\n", + " return True\n", + "\n", + "# Always verify before benchmarking\n", + "a_test, b_test = get_data(1024)\n", + "verify_correctness(my_experimental_kernel, simple_mm, a_test, b_test)\n", + "\n", + "# Only benchmark if correct\n", + "time_ms = final_benchmark(my_experimental_kernel, a_test, b_test)\n", + "print(f\"Kernel time: {time_ms:.4f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Computing TFLOPS: Are We Hitting the Speed of Light?\n", + "\n", + "Now that we have correct, well-measured timings, the natural question is: **\"Is this kernel actually fast?\"** A kernel that runs in 2ms might sound good, but if the hardware could theoretically do it in 0.5ms, you're leaving 75% of performance on the table.\n", + "\n", + "To answer this, we convert our millisecond timings into **TFLOPS** (Tera Floating-Point Operations Per Second) and compare against the hardware's theoretical maximum—often called the **\"speed of light\"** or **roofline**.\n", + "\n", + "### Understanding Roofline Analysis\n", + "\n", + "The Roofline Model helps you understand whether your kernel is:\n", + "- **Compute-bound**: Limited by the GPU's arithmetic throughput (FLOPS)\n", + "- **Memory-bound**: Limited by memory bandwidth (GB/s)\n", + "\n", + "**Key formulas:**\n", + "- **Arithmetic Intensity** = FLOPs / Bytes accessed\n", + "- **Theoretical Peak FLOPS** = Clock speed × Cores × FLOPs/cycle\n", + "- **Theoretical Peak Bandwidth** = Memory clock × Bus width × 2 (for DDR)\n", + "\n", + "For matrix multiplication of two $N \\times N$ matrices:\n", + "- **FLOPs** = $2N^3$ (one multiply + one add per output element, summed $N$ times)\n", + "- **Bytes** = $3N^2 \\times \\text{sizeof(dtype)}$ (read A, read B, write C)\n", + "- **Arithmetic Intensity** = $\\frac{2N^3}{3N^2 \\times 4} = \\frac{N}{6}$ for float32\n", + "\n", + "Large matrix multiplications are highly compute-bound (high arithmetic intensity), so we expect to approach the compute roofline. For a deeper dive into roofline analysis and speed-of-light calculations, see the excellent [JAX Scaling Book chapter on Roofline](https://jax-ml.github.io/scaling-book/roofline/)." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-17T20:56:50.206914Z", + "iopub.status.busy": "2025-12-17T20:56:50.206787Z", + "iopub.status.idle": "2025-12-17T20:56:53.016156Z", + "shell.execute_reply": "2025-12-17T20:56:53.015088Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Matrix Multiplication Performance\n", + "=================================================================\n", + "Size Time (ms) TFLOPS % of TF32 Peak \n", + "-----------------------------------------------------------------\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", + "1024 0.0652 32.94 3.3 %\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", + "2048 0.3450 49.80 5.0 %\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4096 2.6700 51.48 5.2 %\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8192 21.4000 51.38 5.2 %\n", + "\n", + "Note: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\n", + "H200 TF32 theoretical peak: 989.0 TFLOPS\n", + "\n", + "For roofline analysis details, see: https://jax-ml.github.io/scaling-book/roofline/\n" + ] + } + ], + "source": [ + "def get_tflops(n, time_ms):\n", + " \"\"\"Calculate achieved TFLOPS for matrix multiplication.\"\"\"\n", + " flops = 2 * n ** 3 # Multiply-add for each of N^2 output elements\n", + " tflops = flops / (time_ms * 1e-3) / 1e12\n", + " return tflops\n", + "\n", + "# Theoretical peaks vary by GPU and precision\n", + "# PyTorch uses TF32 by default on Ampere+ GPUs for matmul\n", + "GPU_PEAK_TFLOPS = {\n", + " 'A100': {'fp32': 19.5, 'tf32': 156.0, 'fp16': 312.0},\n", + " 'H100': {'fp32': 67.0, 'tf32': 989.0, 'fp16': 1979.0},\n", + " 'H200': {'fp32': 67.0, 'tf32': 989.0, 'fp16': 1979.0},\n", + "}\n", + "\n", + "# Use TF32 peak since PyTorch defaults to TF32 on Ampere+\n", + "PEAK_TFLOPS = 989.0 # H200 TF32 peak\n", + "\n", + "# Benchmark at different sizes\n", + "print(\"Matrix Multiplication Performance\")\n", + "print(\"=\" * 65)\n", + "print(f\"{'Size':<8} {'Time (ms)':<12} {'TFLOPS':<12} {'% of TF32 Peak':<15}\")\n", + "print(\"-\" * 65)\n", + "\n", + "for size in [1024, 2048, 4096, 8192]:\n", + " a_test, b_test = get_data(size)\n", + " time_ms = final_benchmark(simple_mm, a_test, b_test)\n", + " tflops = get_tflops(size, time_ms)\n", + " efficiency = (tflops / PEAK_TFLOPS) * 100\n", + " print(f\"{size:<8} {time_ms:<12.4f} {tflops:<12.2f} {efficiency:<15.1f}%\")\n", + "\n", + "print(f\"\\nNote: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\")\n", + "print(f\"H200 TF32 theoretical peak: {PEAK_TFLOPS} TFLOPS\")\n", + "print(f\"\\nFor roofline analysis details, see: https://jax-ml.github.io/scaling-book/roofline/\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zcYVXCkUzX2k" + }, + "source": [ + "## Conclusion\n", + "\n", + "Benchmarking on GPUs is fundamentally different from CPUs. The asynchronous nature of kernel launches, the hidden state of the L2 cache, and the noise of the OS scheduler all conspire to give you the wrong numbers.\n", + "\n", + "### What We Learned\n", + "\n", + "Through our journey, we discovered that robust GPU benchmarking requires:\n", + "1. **Device Synchronization** - Wait for GPU work to complete\n", + "2. **CUDA Events** - Use GPU-side timestamps, not CPU clocks\n", + "3. **Warmup Runs** - Settle compilation and memory allocators\n", + "4. **Multiple Samples** - Build statistical distributions\n", + "5. **L2 Cache Flushing** - Measure cold cache (realistic) performance\n", + "6. **Median Aggregation** - Filter out OS jitter and outliers\n", + "7. **Side-Stream Detection** - Catch work on non-default streams\n", + "\n", + "### What KernelBench Provides\n", + "\n", + "We've implemented all these best practices in **KernelBench's timing module** (`src/timing.py`):\n", + "\n", + "| Function | Purpose |\n", + "|----------|---------|\n", + "| `get_timing_function(method)` | Factory returning timing function by name |\n", + "| `clear_l2_cache(device)` | L2 cache flushing utility |\n", + "| `get_timing_stats(times)` | Statistical aggregation (mean, std, min, max) |\n", + "\n", + "**Four timing methods for different use cases:**\n", + "- **`cuda_event`** - Default for trusted code (fastest, GPU-side timing)\n", + "- **`host_time`** - For untrusted/agent code (catches all streams)\n", + "- **`do_bench`** - Triton-style adaptive trial counts\n", + "- **`do_bench_impl`** - Transparent do_bench with explicit control\n", + "\n", + "**Key parameters:**\n", + "- `num_warmup`, `num_trials`, `discard_first`, `device`, `verbose`\n", + "\n", + "### Recommended Usage\n", + "\n", + "```python\n", + "from src.timing import get_timing_function, get_timing_stats\n", + "\n", + "# For trusted code\n", + "timing_fn = get_timing_function(\"cuda_event\")\n", + "\n", + "# For agent evaluations (catches side-streams)\n", + "timing_fn = get_timing_function(\"host_time\")\n", + "\n", + "# Run benchmark\n", + "times = timing_fn(kernel, args, num_warmup=10, num_trials=100, device=\"cuda:0\")\n", + "stats = get_timing_stats(times, device=\"cuda:0\")\n", + "print(f\"Mean: {stats['mean']:.4f}ms, Std: {stats['std']:.4f}ms\")\n", + "```\n", + "\n", + "Happy optimizing!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7Ah151CHzX2k" + }, + "source": [ + "---\n", + "\n", + "### Footnotes\n", + "\n", + "**On GPU Clock States:** For highly reproducible benchmarks (e.g., publishing papers), consider locking GPU clocks with `nvidia-smi -lgc `. GPUs dynamically adjust clock speeds based on thermals and power, which can introduce variance between runs. For most development work, median-based benchmarking handles this adequately.\n", + "\n", + "**On Warmup Iterations:** We use fixed warmup counts (10-50 iterations) for simplicity, but this can be insufficient or wasteful depending on the kernel. In extremely sensitive environments, you can implement an adaptive stopping criterion: run warmup iterations until the variance of recent samples falls below a threshold, indicating the system has stabilized. This is covered in more detail in the [GPU MODE lecture](https://www.youtube.com/watch?v=1i7dxoAfKOU).\n", + "\n", + "**On Bare Metal vs. Virtualized Environments:** Cloud VMs and containers add layers of abstraction that can introduce variance and overhead. GPU passthrough in virtualized environments adds latency, and shared cloud instances suffer from \"noisy neighbor\" effects where other tenants' workloads impact your measurements. For publishable results or when chasing small performance deltas, prefer bare metal. For day-to-day development, cloud instances are fine as long as you're aware your numbers may not match others exactly." + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "A100", + "include_colab_link": true, + "provenance": [] + }, + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 614ecfd24e2cb3bf681da003cab2bb37560e13c6 Mon Sep 17 00:00:00 2001 From: Sahan Date: Wed, 17 Dec 2025 21:31:31 +0000 Subject: [PATCH 17/25] benchmarking guide --- benchmarking.ipynb | 1645 ---------------------------------- notebooks/benchmarking.ipynb | 331 ++++--- 2 files changed, 197 insertions(+), 1779 deletions(-) delete mode 100644 benchmarking.ipynb diff --git a/benchmarking.ipynb b/benchmarking.ipynb deleted file mode 100644 index 472213f7..00000000 --- a/benchmarking.ipynb +++ /dev/null @@ -1,1645 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "view-in-github" - }, - "source": [ - "\"Open" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "_PCU0gUyzX2c" - }, - "source": [ - "# A Practical Guide to GPU Benchmarking\n", - "\n", - "> **Note on outputs:** The outputs in this notebook were generated on an **NVIDIA H200 GPU** (90MB L2 cache, 4.8 TB/s memory bandwidth). Your results may vary depending on your hardware. The H200's large cache means cache effects are less dramatic than on older GPUs like A100 (40MB L2) or consumer cards.\n", - "\n", - "## TL;DR — How to Benchmark Correctly\n", - "\n", - "Benchmarking on GPUs requires a strict protocol to avoid measuring Python overhead or caching artifacts. To get reliable numbers, you must:\n", - "\n", - "1. **Warmup:** Run the kernel ~10-50 times first to settle compilation and memory allocators.\n", - "2. **Sample Extensively:** Don't trust one run. Collect 100+ samples to build a statistical distribution.\n", - "3. **Flush the L2 Cache:** Between *every* sample, flush the cache to force a cold cache state (simulating real-world inference).\n", - "4. **Use Device Timers:** Use `torch.cuda.Event` instead of `time.time()` to measure execution on the GPU, not the CPU driver.\n", - "5. **Aggregate Robustly:** Use the **Median** (not Mean) of your samples to filter out OS jitter/outliers.\n", - "6. **Wait for sidestreams to finish:** Ensure no side-streams are running or wait for all of them to finish before reporting a time.\n", - "\n", - "*Pro-Tip:* **KernelBench's timing module** (`src/timing.py`) implements all these best practices. Use `get_timing_function(\"cuda_event\")` for trusted code or `get_timing_function(\"host_time\")` for evaluating untrusted/agent-generated code.\n", - "\n", - "-----\n", - "\n", - "If are using an LLM agent to write GPU kernels (and evaluating against something like say [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), or just trying to optimize a custom GPU kernel, you are eventually going to ask: **\"How fast is this thing?\"**\n", - "\n", - "This notebook is heavily inspired by [this great guide](https://www.youtube.com/watch?v=1i7dxoAfKOU) from the **GPU MODE** community and the practical \"footguns\" (traps) encountered while building benchmarking harnesses for LLM-generated code. Our goal here is simplicity and keeping things Pythonic—for more advanced techniques, see the footnotes.\n", - "\n", - "We won't just list best practices. Instead, we are going to build a benchmarking harness from scratch, make every common mistake, debug why the numbers are wrong, and iterate our way to a robust solution. So let's start things out by doing the most naive thing by using `time.time()`!" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:42.780616Z", - "iopub.status.busy": "2025-12-17T20:56:42.780511Z", - "iopub.status.idle": "2025-12-17T20:56:47.446613Z", - "shell.execute_reply": "2025-12-17T20:56:47.445546Z" - }, - "id": "PKWz_W7uzX2f", - "outputId": "8751fd78-569b-4080-f21a-60bbb5ee8caf" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/simon/miniconda3/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using GPU: NVIDIA H200\n" - ] - } - ], - "source": [ - "# @title Environment Setup\n", - "# Ensure we have the necessary libraries and a GPU available\n", - "# !pip install -q triton matplotlib numpy torch\n", - "# !pip install -e . # Install KernelBench locally for timing utilities\n", - "\n", - "import torch\n", - "import time\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import triton\n", - "\n", - "# Import KernelBench's timing module\n", - "from src import timing\n", - "from src.timing import clear_l2_cache, get_timing_stats, get_timing_function\n", - "\n", - "if not torch.cuda.is_available():\n", - " raise RuntimeError(\"This notebook requires a GPU. Please enable GPU in your runtime settings.\")\n", - "\n", - "# Device configuration\n", - "# For multi-GPU systems, set CUDA_VISIBLE_DEVICES=X before running to select a specific GPU\n", - "# The selected GPU will appear as cuda:0\n", - "DEVICE = \"cuda:0\"\n", - "print(f\"Using GPU: {torch.cuda.get_device_name(DEVICE)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "kjWByrwvzX2f" - }, - "source": [ - "## The Journey: Benchmarking a Matrix Multiplication\n", - "\n", - "Let's define a simple workload to test. We want to measure the performance of a standard Matrix Multiplication." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.449363Z", - "iopub.status.busy": "2025-12-17T20:56:47.449114Z", - "iopub.status.idle": "2025-12-17T20:56:47.705668Z", - "shell.execute_reply": "2025-12-17T20:56:47.704728Z" - }, - "id": "gxtKes5lzX2g", - "outputId": "5890bae4-5b9a-4366-8947-367146593158" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Output shape: torch.Size([4096, 4096])\n", - "Op ran successfully\n" - ] - } - ], - "source": [ - "# A standard size for testing\n", - "N = 4096\n", - "\n", - "def get_data(n=N, device=DEVICE):\n", - " \"\"\"Generate random float32 matrices for benchmarking.\"\"\"\n", - " return torch.randn(n, n, device=device), torch.randn(n, n, device=device)\n", - "\n", - "def simple_mm(a, b):\n", - " \"\"\"Our kernel under test: standard matrix multiplication.\"\"\"\n", - " return torch.matmul(a, b)\n", - "\n", - "# Let's verify it runs\n", - "a, b = get_data()\n", - "res = simple_mm(a, b)\n", - "print(f\"Output shape: {res.shape}\")\n", - "print(\"Op ran successfully\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "GWlsBEVyzX2g" - }, - "source": [ - "### Attempt 1: The Naive Timer (The Asynchronous Illusion)\n", - "\n", - "The most intuitive way to time code in Python is using `time.time()`. Let's try that first." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.708574Z", - "iopub.status.busy": "2025-12-17T20:56:47.708437Z", - "iopub.status.idle": "2025-12-17T20:56:47.712126Z", - "shell.execute_reply": "2025-12-17T20:56:47.711422Z" - }, - "id": "LynIxLaRzX2g", - "outputId": "72548dad-6570-4eaa-ce07-923556fe70b4" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Naive time: 0.5345 ms\n" - ] - } - ], - "source": [ - "def benchmark_naive(func, *args):\n", - " \"\"\"WRONG: Measures kernel launch time, not execution time.\"\"\"\n", - " start = time.time()\n", - " func(*args)\n", - " end = time.time()\n", - " return (end - start) * 1000 # to ms\n", - "\n", - "t = benchmark_naive(simple_mm, a, b)\n", - "print(f\"Naive time: {t:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gw4NGYRmzX2h" - }, - "source": [ - "**The Problem:**\n", - "Wait, ~0.5ms? That seems impossibly fast for a 4096² matrix multiplication involving 137 billion floating-point operations.\n", - "\n", - "**What happened?**\n", - "GPUs are **asynchronous**. When you call `torch.matmul`, the CPU doesn't actually do the math. It simply queues a \"launch kernel\" command to the GPU and moves on immediately. Our timer didn't measure the matrix multiplication; it measured how long it took Python to place an order in the queue.\n", - "\n", - "To fix this, we need to:\n", - "1. **Synchronize** - Force the CPU to wait for the GPU with `torch.cuda.synchronize()`\n", - "2. **Use CUDA Events** - Record timestamps directly on the GPU to avoid CPU overhead\n", - "\n", - "Let's compare these approaches to see the difference." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.714693Z", - "iopub.status.busy": "2025-12-17T20:56:47.714579Z", - "iopub.status.idle": "2025-12-17T20:56:47.884978Z", - "shell.execute_reply": "2025-12-17T20:56:47.884070Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Comparing Synchronized time.time() vs CUDA Events:\n", - "------------------------------------------------------------\n", - "N= 512: sync= 0.0358ms, events= 0.0334ms, overhead=+0.0023ms\n", - "N=1024: sync= 0.0725ms, events= 0.0716ms, overhead=+0.0008ms\n", - "N=2048: sync= 0.3552ms, events= 0.3536ms, overhead=+0.0017ms\n", - "N=4096: sync= 2.6958ms, events= 2.6885ms, overhead=+0.0073ms\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHpCAYAAABTH4/7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA48RJREFUeJzs3XdUVEcbBvBnqUsXFQQbKjbEgsGOClbsEhv23mJJ7H6W2KKxxRZ7N0aNxt67qFijRo29YBcRLDTp7Hx/rFxYdxcWBRfh+Z3jSe7s3LnvHbbMvjt3rkwIIUBERERERERERPQVGeg7ACIiIiIiIiIiynmYlCIiIiIiIiIioq+OSSkiIiIiIiIiIvrqmJQiIiIiIiIiIqKvjkkpIiIiIiIiIiL66piUIiIiIiIiIiKir45JKSIiIiIiIiIi+uqYlCIiIiIiIiIioq+OSSkiIiIiIiIiIvrqmJQiIiIiIiLKRrp37w5LS0t9h6HCy8sLXl5e+g6DiLIYJqWIiIiIiCjLCggIQL9+/VCsWDHI5XJYW1vDw8MDCxYsQHR0tFSvSJEikMlk0j97e3vUqlULO3fuVGmvSJEiaNasmcZjXb58GTKZDOvWrdMptmfPnqF///4oUqQITE1NYW9vDx8fH5w9e/azz5d0s2TJEp3/TgCk58WcOXPUHlu3bh1kMhkuX76cgREqNWjQADKZDIMGDdL4+OrVq+Hi4gK5XI4SJUpg4cKFGutt3rwZ3333HeRyOezs7NCrVy+8efNGY93Xr1+jX79+KFCgAORyOYoUKYJevXpl2DkRZSQjfQdARERERESkyf79+9G2bVuYmpqia9euKFu2LOLi4nDmzBmMHDkSt27dwooVK6T6bm5uGD58OAAgMDAQy5cvR6tWrbB06VL0798/Q2M7e/YsmjRpAgDo3bs3ypQpg6CgIKxbtw61atXCggULMHjw4Aw9JiVbsmQJ8ubNi+7du6drv9mzZ+OHH36Aubl55gSWwo4dO3D+/Hmtjy9fvhz9+/dH69atMWzYMPj7++PHH39EVFQURo8eLdVbunQpBgwYgHr16mHu3Ll48eIFFixYgMuXL+PixYuQy+VS3efPn8PDwwMA0L9/fxQoUACBgYH4559/Mu9Eib4Ak1JERERERJTlPH78GO3bt4eTkxNOnDgBR0dH6bGBAwfi4cOH2L9/v8o+BQoUQOfOnaXtrl27onjx4pg3b16GJqXev3+PNm3awMzMDGfPnoWzs7P02LBhw+Dt7Y0hQ4bA3d0dNWrUyLDjpiUmJgYmJiZf7XjfGjc3N1y7dg3Lli3DsGHDMvVYMTExGD58OEaPHo0JEyaoPR4dHY1x48ahadOm2LZtGwCgT58+UCgU+OWXX9C3b1/Y2toiLi4OY8eORe3atXH06FHIZDIAQI0aNdC8eXOsXLlSJfnZr18/GBkZ4dKlS8iTJ0+mniNRRuDle0RERERElOXMmjULkZGRWL16tUpCKknx4sXx008/pdqGg4MDXFxc8Pjx4wyNbfny5QgKCsLs2bNVElIAYGZmhj/++AMymQxTpkwBkHxZ4B9//KHW1uHDhyGTybBv3z6p7OXLl+jZsyfy5csHU1NTuLq6Ys2aNSr7nTx5EjKZDJs3b8b48eNRoEABmJubIzw8XKUdHx8fWFpaws7ODiNGjEBiYqJKOwqFAvPnz4erqyvkcjny5cuHfv364f379yr1du/ejaZNmyJ//vwwNTWFs7MzfvnlF7X2AGDFihVwdnaGmZkZqlSpAn9/fx17Fli7di3q1q0Le3t7mJqaokyZMli6dKlKnSJFiuDWrVs4deqUdFmeLutVeXh4oG7dupg1a5bKpZ+ZYdasWVAoFBgxYoTGx/38/PD27VsMGDBApXzgwIH48OGDlHC9efMmQkND4evrKyWkAKBZs2awtLTE5s2bpbK7d+/i4MGDGDlyJPLkyYOYmBjEx8dnwtkRZRzOlCIiIiIioixn7969KFas2BfNNIqPj8fz588zfMbI3r17IZfL0a5dO42PFy1aFDVr1sSJEycQHR2NSpUqoVixYvj777/RrVs3lbpbtmyBra0tvL29ASjXA6pWrZq0DpGdnR0OHjyIXr16ITw8HEOGDFHZ/5dffoGJiQlGjBiB2NhYaaZUYmIivL29UbVqVfz22284duwY5syZA2dnZ/zwww/S/v369cO6devQo0cP/Pjjj3j8+DEWLVqEq1ev4uzZszA2NgagXHfJ0tISw4YNg6WlJU6cOIEJEyYgPDwcs2fPltpbvXo1+vXrhxo1amDIkCF49OgRWrRogdy5c6NQoUJp9u3SpUvh6uqKFi1awMjICHv37sWAAQOgUCgwcOBAAMD8+fMxePBgWFpaYty4cQCAfPnypdk2AEyaNAm1a9fG0qVLU50tFRsbi4iICJ3azJs3r8r2s2fPMGPGDKxZswZmZmYa97l69SoAoFKlSirl7u7uMDAwwNWrV9G5c2fExsYCgMZ2zMzMcPXqVSgUChgYGODYsWMAlH1Rr149nDhxAoaGhmjQoAGWLl2KIkWK6HQ+RF+VICIiIiIiykLCwsIEANGyZUud93FychINGzYUISEhIiQkRFy/fl20b99eABCDBw9Wqde0aVONbVy6dEkAEGvXrk31WLly5RIVKlRItc6PP/4oAIj//vtPCCHEmDFjhLGxsXj37p1UJzY2VuTKlUv07NlTKuvVq5dwdHQUb968UWmvffv2wsbGRkRFRQkhhPDz8xMARLFixaSyJN26dRMAxJQpU1TKK1asKNzd3aVtf39/AUBs3LhRpd6hQ4fUyj89hhBC9OvXT5ibm4uYmBghhBBxcXHC3t5euLm5idjYWKneihUrBADh6empvcNSOY63t7coVqyYSpmrq6tO7SUBIAYOHCiEEKJOnTrCwcFBOtbatWsFAHHp0iWpflKZLv8+1aZNG1GjRg2Nx04ycOBAYWhoqDFWOzs70b59eyGEECEhIUImk4levXqp1Ll79650/KTnStJzLk+ePKJRo0Ziy5YtYvbs2cLS0lI4OzuLDx8+6NxfRF8LZ0oREREREVGWknQJmpWVVbr2O3LkCOzs7KRtQ0NDdOnSBTNnzszQ+CIiItKMLenxpHPx9fXF9OnTsWPHDulOaEeOHJEuzQIAIQS2b9+Odu3aQQihcnc1b29vbN68Gf/++6+0kDUAdOvWTetsnE/X0apVqxb+/PNPaXvr1q2wsbFBgwYNVI7l7u4OS0tL+Pn5oWPHjgBUZ+pEREQgNjYWtWrVwvLly3H37l1UqFABly9fRnBwMKZMmaKytlX37t0xcuTIVPsrScrjhIWFIT4+Hp6enjh8+DDCwsJgY2OjUzupmTRpEjw9PbFs2TIMHTpUYx1vb28cPXo03W37+flh+/btuHjxYqr1oqOjta7/JZfLpcsL8+bNi3bt2uGPP/6Ai4sLvv/+e7x8+RKDBw+GsbEx4uPjpbqRkZEAlJet7t+/HwYGytV6ChYsiA4dOmDTpk3o3bt3us+JKDMxKUVERERERFmKtbU1AOh8+VSSqlWrYurUqZDJZDA3N4eLiwty5cqV7uOnXLtHEysrqzRjS3o8KTlVoUIFlC5dGlu2bJGSUlu2bEHevHlRt25dAEBISAhCQ0OxYsUKlbsKphQcHKyyXbRoUY315HK5SoIOAGxtbVXWinrw4AHCwsJgb2+f5rFu3bqF8ePH48SJEyrrVgHK5BEAPH36FABQokQJlceNjY1RrFgxjcf41NmzZzFx4kScP38eUVFRasfJiKRU7dq1UadOHcyaNUvrAviOjo4a1zJLTUJCAn788Ud06dIFlStXTrWumZkZ4uLiND4WExOjkpxbvnw5oqOjMWLECGmNqs6dO8PZ2Rk7duyApaWl1CYAtGvXTkpIAUDbtm3RpUsXnDt3jkkpynKYlCIiIiIioizF2toa+fPnx82bN9O1X968eVG/fv1U66SchfKppCSIXC5PtQ0XFxdcvXoVsbGxMDU11Vjnv//+g7GxsUqCxtfXF9OmTcObN29gZWWFPXv2oEOHDjAyUn4tUygUAJQJh0/XnkpSvnx5lW1ts6QMDQ1TPYek49nb22Pjxo0aH09KaoWGhsLT0xPW1taYMmUKnJ2dIZfL8e+//2L06NFS3F8qICAA9erVQ+nSpTF37lwUKlQIJiYmOHDgAObNm5dhxwGAiRMnwsvLC8uXL9eYuIyOjpaSbWlxcHAAAKxfvx737t3D8uXL8eTJE5U6ERERePLkCezt7WFubg5HR0ckJiYiODhYJSkYFxeHt2/fIn/+/FKZjY0Ndu/ejWfPnuHJkydwcnKCk5MTatSoATs7Oyn+pH0+XV/L0NAQefLkUVu8nigrYFKKiIiIiIiynGbNmmHFihU4f/48qlevnmHtOjk54fbt2xofu3fvnlQnrdjOnz+PrVu3onPnzmqPP3nyBP7+/qhfv75K0sjX1xeTJ0/G9u3bkS9fPoSHh6N9+/bS43Z2drCyskJiYmKaybWM4OzsjGPHjsHDw0NrcgtQ3unv7du32LFjB2rXri2Vf3pXw6R+e/DggTT7C1AuOP/48WNUqFAh1Xj27t2L2NhY7NmzB4ULF5bK/fz81OqmNZstLZ6envDy8sLMmTMxYcIEtce3bNmCHj166NSWEAKAcoHz+Ph4lcsrk6xfvx7r16/Hzp074ePjAzc3NwDKOzM2adJEqnf58mUoFArp8ZQKFy4s9UtoaCiuXLmC1q1bS4+7u7sDUN51MaW4uDi8efNGbeYcUVZgkHYVIiIiIiKir2vUqFGwsLBA79698fr1a7XHAwICsGDBgnS326RJE7x48QK7du1SKY+NjcWqVatgb2+P7777LtU2+vXrB3t7e4wcORKPHj1SeSwmJgY9evSAEEIt2eHi4oJy5cphy5Yt2LJlCxwdHVWSPIaGhmjdujW2b9+ucZZYSEhIOs82de3atUNiYiJ++eUXtccSEhIQGhoqxQUkJ18AZaJjyZIlKvtUqlQJdnZ2WLZsmcqlaevWrZPaSo2m44SFhWHt2rVqdS0sLHRqMzWTJk1CUFCQxkslk9aU0uVfkvbt22Pnzp1q/wDl827nzp2oWrUqAKBu3brInTs3li5dqnLcpUuXwtzcHE2bNk019jFjxiAhIUFlTSwvLy9p5ltMTIxUvm7dOiQmJqJBgwbp7ySiTMaZUkRERERElOU4Oztj06ZN8PX1hYuLC7p27YqyZcsiLi4O586dw9atW9G9e/d0t9u3b1+sWbMGbdu2Rc+ePVGxYkW8ffsWW7Zswc2bN7F+/XqtC1AnyZMnD7Zt24amTZviu+++Q+/evVGmTBkEBQVh3bp1ePjwIRYsWIAaNWqo7evr64sJEyZALpejV69eKmv/AMCMGTPg5+eHqlWrok+fPihTpgzevXuHf//9F8eOHcO7d+/Sfc7aeHp6ol+/fpg+fTquXbuGhg0bwtjYGA8ePMDWrVuxYMECtGnTBjVq1ICtrS26deuGH3/8ETKZDH/++adK8ghQrh01depU9OvXD3Xr1oWvry8eP36MtWvX6rSmVMOGDWFiYoLmzZujX79+iIyMxMqVK2Fvb49Xr16p1HV3d8fSpUsxdepUFC9eHPb29iqzs3Q9f09PT5w6dUrtsc9ZU6p06dIoXbq0xseKFi0KHx8fadvMzAy//PILBg4ciLZt28Lb2xv+/v7YsGEDpk2bhty5c0t1Z8yYgZs3b6Jq1aowMjLCrl27cOTIEUydOlVl7SpTU1PMnj0b3bp1Q+3atdGlSxc8e/YMCxYsQK1atdCqVat0nQ/RV6HHO/8RERERERGl6v79+6JPnz6iSJEiwsTERFhZWQkPDw+xcOFCERMTI9VzcnISTZs21anN9+/fi6FDh4qiRYsKY2NjYW1tLerUqSMOHjyYrtgeP34s+vTpIwoXLiyMjY1F3rx5RYsWLYS/v7/WfR48eCAACADizJkzGuu8fv1aDBw4UBQqVEgYGxsLBwcHUa9ePbFixQqpjp+fnwAgtm7dqrZ/t27dhIWFhVr5xIkThaavgCtWrBDu7u7CzMxMWFlZiXLlyolRo0aJwMBAqc7Zs2dFtWrVhJmZmcifP78YNWqUOHz4sAAg/Pz8VNpbsmSJKFq0qDA1NRWVKlUSp0+fFp6ensLT01NrvyTZs2ePKF++vJDL5aJIkSJi5syZYs2aNQKAePz4sVQvKChING3aVFhZWQkAabYNQAwcOFCtPKkfAYhLly6lGd/n0HZsIZR9X6pUKWFiYiKcnZ3FvHnzhEKhUKmzb98+UaVKFWFlZSXMzc1FtWrVxN9//631eH/99ZeoUKGCMDU1Ffny5RODBg0S4eHhGXpORBlFJsQn6W0iIiIiIiIiIqJMxjWliIiIiIiIiIjoq2NSioiIiIiIiIiIvjompYiIiIiIiIiI6KtjUoqIiIiIiIiIiL46JqWIiIiIiIiIiOirY1KKiIiIiIiIiIi+OialiLIhLy8veHl5ZVr7MpkMgwYNyrT2KZlMJsOkSZMype2TJ09CJpNh27ZtmdI+AKxbtw4ymQxPnjzJsDYnTZoEmUyWYe0REX0LZs2ahdKlS0OhUOg7lC+S2WOUzPiM4OcOUbKvMX5ML03jzWrVqmHUqFH6C4p0xqQU0ScCAgLQr18/FCtWDHK5HNbW1vDw8MCCBQsQHR0t1StSpAhkMpn0z97eHrVq1cLOnTtV2itSpAiaNWum8ViXL1+GTCbDunXrdIrt9evXGDFiBEqXLg1zc3NYWFjA3d0dU6dORWho6OeecrYTGxuLhQsXombNmrC1tYWJiQny58+PFi1a4K+//kJiYqJU98mTJyp/R0NDQxQuXBjff/89rl27plbvt99+03jM3377LV3Jl2vXrqFz584oVKgQTE1NkTt3btSvXx9r165ViS8r8vLyUukzbf8yK5lGRJTThIeHY+bMmRg9ejQMDJKH75GRkZg4cSLKli0LCwsL5MmTB25ubvjpp58QGBiox4hJn16+fIl27dohV65csLa2RsuWLfHo0SOd9z937hxq1qwJc3NzODg44Mcff0RkZKRavdjYWIwePRr58+eHmZkZqlatiqNHj6rU+XSc9em/Pn36fPH5ZpTw8HBMnjwZFSpUgKWlJczMzFC2bFmMHj1a5fXUvXt3lXOwtrZGhQoVMGfOHMTGxqrUs7S01Ho8S0tLdO/ePTNPKUcbPXo0Fi9ejKCgIH2HQmkw0ncARFnJ/v370bZtW5iamqJr164oW7Ys4uLicObMGYwcORK3bt3CihUrpPpubm4YPnw4ACAwMBDLly9Hq1atsHTpUvTv3z9DY7t06RKaNGmCyMhIdO7cGe7u7gCUia0ZM2bg9OnTOHLkSIYe81sUEhKCxo0b48qVK/D29sb48eORO3duBAUF4dixY+jYsSMePnyIn3/+WWW/Dh06oEmTJkhMTMSdO3ewdOlSHDx4EBcuXICbm1uGxrhq1Sr0798f+fLlQ5cuXVCiRAlERETg+PHj6NWrF169eoWxY8dm6DEz0rhx49C7d29p+9KlS/j9998xduxYuLi4SOXly5eHq6sr2rdvD1NT0ww7/vjx4/G///0vw9ojIsrq1qxZg4SEBHTo0EEqi4+PR+3atXH37l1069YNgwcPRmRkJG7duoVNmzbh+++/R/78+fUYtWYcq2SuyMhI1KlTB2FhYRg7diyMjY0xb948eHp64tq1a8iTJ0+q+1+7dg316tWDi4sL5s6dixcvXuC3337DgwcPcPDgQZW63bt3x7Zt2zBkyBCUKFEC69atQ5MmTeDn54eaNWsCAOzs7PDnn3+qHefQoUPYuHEjGjZsmHEn/wUePXqE+vXr49mzZ2jbti369u0LExMT/Pfff1i9ejV27tyJ+/fvS/VNTU2xatUqAEBoaCi2b9+OESNG4NKlS9i8ebO+ToNSaNmyJaytrbFkyRJMmTJF3+FQagQRCSGEePTokbC0tBSlS5cWgYGBao8/ePBAzJ8/X9p2cnISTZs2Vanz6tUrYWFhIUqWLJlqvSSXLl0SAMTatWtTje39+/eiQIECIl++fOLOnTtqjwcFBYlffvlF2vb09BSenp6ptvklAIiBAwdmWvtfwtvbWxgYGIjt27drfPzSpUtiw4YN0vbjx48FADF79myVenv27BEARN++fVOtl2T27NkCgHj8+HGq8Z0/f14YGhqKmjVrivDwcI3xpXw+ABATJ05Mtc3P5efnJwCIrVu3flE7W7duFQCEn59fxgRGREQqypcvLzp37qxS9vfffwsAYuPGjWr1o6OjRVhY2NcKL0uZOHGiyOivOJnRZmaZOXOmACD++ecfqezOnTvC0NBQjBkzJs39GzduLBwdHVWePytXrhQAxOHDh6Wyixcvqo2LoqOjhbOzs6hevXqax6lXr56wtrYW0dHRup5apomPjxcVKlQQ5ubmwt/fX+3xsLAwMXbsWGm7W7duwsLCQqVOYmKiqFSpkgAgXr58qbVeShYWFqJbt24ZcxJfgUKhEFFRURk2fsxIa9eu1TgOHzRokHBychIKhUI/gZFOePke0UezZs1CZGQkVq9eDUdHR7XHixcvjp9++inVNhwcHODi4oLHjx9naGzLly/Hy5cvMXfuXJQuXVrt8Xz58mH8+PGpthEcHIxevXohX758kMvlqFChAv744w+1egqFAgsWLEC5cuUgl8thZ2eHRo0a4fLly6m2P3XqVBgYGGDhwoVa65QtWxZ16tTReMwCBQqgTZs2UtnmzZvh7u4OKysrWFtbo1y5cliwYEGqMZw/fx6HDx9G37590apVK411KlWqhE6dOqXaDgDUrVsXADL8bzl58mTIZDJs3LgRVlZWGuNLayr31atX0bhxY1hbW8PS0hL16tXDhQsX1OqFhoZi6NChKFKkCExNTVGwYEF07doVb9680dp2bGwsmjVrBhsbG5w7dy7d5/cpTdf4J13SevLkSVSqVAlmZmYoV64cTp48CQDYsWOH9Pxzd3fH1atXVdrUtLZH0jpnu3btQtmyZWFqagpXV1ccOnRILaak48rlcjg7O2P58uVcL4SIsqzHjx/jv//+Q/369VXKAwICAAAeHh5q+yQtPwAAa9euhUwmU3svBYBff/0VhoaGePnyJQDl5dlly5bF7du3UadOHZibm6NAgQKYNWuW2r4xMTGYNGkSSpYsCblcDkdHR7Rq1UqKS5tP15RKWp/m77//xrRp01CwYEHI5XLUq1cPDx8+VNv/4sWLaNKkCWxtbWFhYYHy5cunOj5IunxM01IJmi41P3PmDCpXrqzyGaHNhg0b4O7uDjMzM+TOnRvt27fH8+fPVeo8ePAArVu3hoODA+RyOQoWLIj27dsjLCxMa7tfYtu2bahcuTIqV64slZUuXRr16tXD33//neq+4eHhOHr0KDp37iw9fwCga9eusLS0VNl/27ZtMDQ0RN++faUyuVyOXr164fz582r9kNKrV6/g5+eHVq1aQS6XS+VJn8X3799H586dYWNjAzs7O/z8888QQuD58+fS7BcHBwfMmTNHre2FCxfC1dUV5ubmsLW1RaVKlbBp06ZUz3v79u24fv06xo0bJ83wSsna2hrTpk1L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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Key insight: Synchronized timing includes 0.007ms of CPU overhead.\n", - "CUDA Events (2.6885ms) measure pure GPU execution time.\n" - ] - } - ], - "source": [ - "# Compare: Synchronized time.time() vs CUDA Events\n", - "# This shows why GPU-side timestamps are more accurate\n", - "\n", - "def benchmark_sync(func, *args):\n", - " \"\"\"Attempt 2: Synchronized - waits for GPU but uses CPU clock.\"\"\"\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " start = time.time()\n", - " func(*args)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " end = time.time()\n", - " return (end - start) * 1000\n", - "\n", - "def benchmark_events(func, *args):\n", - " \"\"\"Attempt 3: CUDA Events - GPU-side timestamps, most accurate.\"\"\"\n", - " start_event = torch.cuda.Event(enable_timing=True)\n", - " end_event = torch.cuda.Event(enable_timing=True)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " start_event.record()\n", - " func(*args)\n", - " end_event.record()\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " return start_event.elapsed_time(end_event)\n", - "\n", - "# Test across different matrix sizes\n", - "sizes = [512, 1024, 2048, 4096]\n", - "sync_times = []\n", - "event_times = []\n", - "\n", - "print(\"Comparing Synchronized time.time() vs CUDA Events:\")\n", - "print(\"-\" * 60)\n", - "for s in sizes:\n", - " a_test, b_test = get_data(s)\n", - " # Warmup\n", - " for _ in range(3):\n", - " simple_mm(a_test, b_test)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " \n", - " sync_t = benchmark_sync(simple_mm, a_test, b_test)\n", - " event_t = benchmark_events(simple_mm, a_test, b_test)\n", - " \n", - " sync_times.append(sync_t)\n", - " event_times.append(event_t)\n", - " overhead = sync_t - event_t\n", - " print(f\"N={s:4d}: sync={sync_t:7.4f}ms, events={event_t:7.4f}ms, overhead={overhead:+.4f}ms\")\n", - "\n", - "# Create visualization\n", - "fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", - "\n", - "# Left plot: Both methods across sizes\n", - "axes[0].plot(sizes, sync_times, 's-', label='Synchronized (CPU clock)', linewidth=2, markersize=8, color='orange')\n", - "axes[0].plot(sizes, event_times, '^-', label='CUDA Events (GPU clock)', linewidth=2, markersize=8, color='green')\n", - "axes[0].set_xlabel('Matrix Size (N)')\n", - "axes[0].set_ylabel('Time (ms)')\n", - "axes[0].set_title('CPU Clock vs GPU Clock Timing')\n", - "axes[0].legend()\n", - "axes[0].grid(True, alpha=0.3)\n", - "\n", - "# Right plot: Bar chart showing overhead at largest size\n", - "overhead_ms = sync_times[-1] - event_times[-1]\n", - "axes[1].bar(['Synchronized\\n(time.time + sync)', 'CUDA Events\\n(GPU timestamps)'], \n", - " [sync_times[-1], event_times[-1]], \n", - " color=['orange', 'green'], alpha=0.8)\n", - "axes[1].set_ylabel('Time (ms)')\n", - "axes[1].set_title(f'CPU Overhead at N={sizes[-1]}\\n(Sync includes ~{overhead_ms:.3f}ms CPU overhead)')\n", - "axes[1].axhline(y=event_times[-1], color='green', linestyle='--', alpha=0.5, label='True GPU time')\n", - "\n", - "plt.tight_layout()\n", - "plt.show()\n", - "\n", - "print(f\"\\nKey insight: Synchronized timing includes {overhead_ms:.3f}ms of CPU overhead.\")\n", - "print(f\"CUDA Events ({event_times[-1]:.4f}ms) measure pure GPU execution time.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dV8AmQi-zX2i" - }, - "source": [ - "### Attempt 3: Removing CPU Overhead (CUDA Events)\n", - "\n", - "To get a precise measurement, we need to bypass the CPU clock entirely. We can ask the GPU driver to record timestamps directly on the device using `torch.cuda.Event`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.887269Z", - "iopub.status.busy": "2025-12-17T20:56:47.887144Z", - "iopub.status.idle": "2025-12-17T20:56:47.899041Z", - "shell.execute_reply": "2025-12-17T20:56:47.898350Z" - }, - "id": "i6PfSdkTzX2i", - "outputId": "8b3e29d1-1789-4bfb-9a44-599016516dd7" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Run 0: 2.8415 ms\n", - "Run 1: 2.7093 ms\n", - "Run 2: 2.7007 ms\n" - ] - } - ], - "source": [ - "def benchmark_events(func, *args):\n", - " \"\"\"Better: Uses GPU timestamps, avoiding CPU overhead.\"\"\"\n", - " start_event = torch.cuda.Event(enable_timing=True)\n", - " end_event = torch.cuda.Event(enable_timing=True)\n", - "\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " start_event.record()\n", - " func(*args)\n", - " end_event.record()\n", - " torch.cuda.synchronize(device=DEVICE)\n", - "\n", - " return start_event.elapsed_time(end_event) # Returns ms directly\n", - "\n", - "# Run it a few times\n", - "for i in range(3):\n", - " print(f\"Run {i}: {benchmark_events(simple_mm, a, b):.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BkfaaDawzX2i" - }, - "source": [ - "### Attempt 4: Handling the \"Cold Start\"\n", - "\n", - "Notice Run 0 is noticably slower than the rest. The first time you run a PyTorch function (and similarly launching a cuda kernel), the framework does a lot of heavy lifting which could include: allocating memory, initializing cuBLAS/cuDNN workspaces, lazy kernel loading, and compiling kernels (especially if using `torch.compile` or Triton). This \"Cold Start\" penalty is a one-time cost that shouldn't be included in your performance metrics.\n", - "\n", - "**The Fix:**\n", - "We need to perform **Warmup Runs**—running the kernel a few times to settle the system state before we start measuring." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.901255Z", - "iopub.status.busy": "2025-12-17T20:56:47.901143Z", - "iopub.status.idle": "2025-12-17T20:56:47.993793Z", - "shell.execute_reply": "2025-12-17T20:56:47.992809Z" - }, - "id": "j_PsAuJkzX2i", - "outputId": "d6983401-72d3-468c-ffd8-c0833e8d5556" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Run 0: 2.7697 ms\n", - "Run 1: 2.6890 ms\n", - "Run 2: 2.6891 ms\n" - ] - } - ], - "source": [ - "def benchmark_warmup(func, *args, warmup_iters=30, benchmark_iters=3):\n", - " \"\"\"Better: Includes warmup to avoid cold-start penalty.\"\"\"\n", - " # Warmup phase\n", - " for _ in range(warmup_iters):\n", - " func(*args)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - "\n", - " # Measurement phase\n", - " measurements = []\n", - " for _ in range(benchmark_iters):\n", - " measurements.append(benchmark_events(func, *args))\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " return measurements\n", - "\n", - "# print(f\"Warmed up time: {benchmark_warmup(simple_mm, a, b):.4f} ms\")\n", - "\n", - "for i, measurement in enumerate(benchmark_warmup(simple_mm, a, b)):\n", - " print(f\"Run {i}: {measurement:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "OR3uOh7kzX2i" - }, - "source": [ - "### Attempt 5: The Single Sample Fallacy (Variance)\n", - "\n", - "Relying on a single sample after warmup is bad science. Operating systems are noisy; background processes interrupt the CPU, and GPU clocks fluctuate thermally. A single measurement is anecdotal, not statistical.\n", - "\n", - "#### Visualizing the Jitter\n", - "\n", - "Let's run the benchmark 100 times and plot every single run. You will clearly see the \"Cold Start\" spike and the noise floor of the OS." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 653 - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.996630Z", - "iopub.status.busy": "2025-12-17T20:56:47.996511Z", - "iopub.status.idle": "2025-12-17T20:56:48.348631Z", - "shell.execute_reply": "2025-12-17T20:56:48.347785Z" - }, - "id": "T-7QH4cHzX2i", - "outputId": "c758effd-a810-422d-d3ca-66c128cdb716" - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIjCAYAAADvBuGTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkKdJREFUeJzs3Xd4VFX+x/HPTMqkTAqQBAg1AtJFRLCggoKgoogFZYUF1HVxDbrI6iK6FnQ1a13rYlkE3BVxUfiJICgqoChYQJEmvSgtoaSXSXLv74+YgSHJZGZyk0zg/XoenofcOffOuTPnnjnfe8q1maZpCgAAAABQI/b6zgAAAAAAnAwIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgCggVi2bJlsNpvee++9+s6KTx555BHZbDYdOnTIa7qxY8eqbdu2dZMpH7Rt21Zjx46t72w0SLt27ZLNZtOMGTOqTRts3zsAWIHgCgAkzZgxQzabzeNfUlKSLr74Yi1atKi+s4da0r9/f3Xr1s1rmo0bN+qRRx7Rrl27Krz2r3/9y6dAwmpHjx7V7bffrhYtWig6Olo9evTQ008/HdCx5s2bp8svv1wJCQkKDw9XcnKybrjhBn3++ecW5zowhmHorbfe0jnnnKPGjRsrJiZGp59+ukaPHq1Vq1a503n7nqxQX981gIYltL4zAADB5NFHH1VKSopM09TBgwc1Y8YMXXHFFfrwww915ZVX1nf2TkpvvPGGDMOo72y4bd68WXb7sXuPGzdu1JQpU9S/f/8KPS3/+te/lJCQUOc9XWPHjtVHH32k8ePHq1OnTlq7dq3efvtt3XvvvT4fwzRN3XLLLZoxY4Z69uypiRMnqlmzZtq/f7/mzZunAQMG6KuvvtL5559fi2dSvbvuukuvvPKKrr76ao0cOVKhoaHavHmzFi1apNNOO03nnnuuJO/fkxXq67sG0LAQXAHAcS6//HKdffbZ7r9vvfVWNW3aVO+88w7BlY/y8vIUHR3tc/qwsLBazI3/HA5Hvb5/SUmJDMNQeHh4pa/n5eVpwYIFuv322/XPf/7Tvb2oqMiv93n22Wc1Y8YMTZgwQc8995xsNpv7tQceeED/+c9/FBpav82EgwcP6l//+pduu+02vf766x6vPf/888rIyKj1POTn5ysqKqrW3wfAyYFhgQDgRXx8vCIjIys0Mg3D0PPPP6+uXbsqIiJCTZs21bhx43T06FGPdG3bttWVV16pFStWqE+fPoqIiNBpp52mt956q8J7ZWZm6u6771bbtm3lcDjUsmVLjR49usKcJcMw9Pjjj6tly5aKiIjQgAEDtG3bNo805cPdfvrpJ/Xr109RUVFq3769e77W8uXLdc455ygyMlIdO3bUp59+6rH/7t27dccdd6hjx46KjIxUkyZNNHz48ApDrsqHUy5fvlx33HGHkpKS1LJlyyo/z927d6t9+/bq1q2bDh48KKni3JvyeTvPPPOMXn/9dbVr104Oh0O9e/fWd999V+GYc+bMUZcuXRQREaFu3bpp3rx5NZrPc/ycqxkzZmj48OGSpIsvvtg9ZHTZsmVq27atNmzYoOXLl7u39+/f332czMxMTZgwQa1atZLD4VD79u315JNPevTSHX+uzz//vPtcN27cWGX+yt/LNE2P7f4EhQUFBUpLS1OnTp30zDPPeARW5X7/+9+rT58+7r937Nih4cOHq3HjxoqKitK5556rhQsX+vR+//d//6du3bp5fEe+2Llzp0zTVN++fSu8Vj50V/L+PUnSBx98oCFDhig5OVkOh0Pt2rXTY489ptLSUo9jll83q1ev1kUXXaSoqCjdf//91X7XAFCOnisAOE5WVpYOHTok0zSVnp6ul156Sbm5uRo1apRHunHjxmnGjBm6+eabddddd2nnzp16+eWX9cMPP+irr77y6I3Ztm2brr/+et16660aM2aM3nzzTY0dO1a9evVS165dJUm5ubm68MILtWnTJt1yyy0666yzdOjQIc2fP1+//vqrEhIS3Mf7xz/+IbvdrnvuuUdZWVl66qmnNHLkSH3zzTceeTx69KiuvPJKjRgxQsOHD9fUqVM1YsQIvf3225owYYJuv/123XTTTXr66ad1/fXX65dfflFMTIwk6bvvvtPXX3+tESNGqGXLltq1a5emTp2q/v37a+PGjRXu5N9xxx1KTEzUQw89pLy8vEo/2+3bt+uSSy5R48aNtWTJEo9zqsysWbOUk5OjcePGyWaz6amnntK1116rHTt2uD/fhQsX6sYbb1T37t2Vlpamo0eP6tZbb1WLFi28HttXF110ke666y69+OKLuv/++9W5c2dJUufOnfX8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nsaMGaNnn33Wva2wsFCZmZl+H+vpp59WaGio7rjjDsXExOimm26yJI/lDeoTV0qsalugKltJr7rX2rVrp9zcXHdPldV5+eWXX9w9kJ06ddLChQs1YMAA9erVS3v27NFrr73m9TgXXHCBGjVqpHfeeUf3339/tYtatGnTRps3b66wvXxIXVXBTfn2rVu3VnitsuP54+yzz9by5cu1f/9+tWnTpsrvYtmyZTp8+LDmzp2riy66yL19586dfr2ft3IAAOUYFggAXhQXF+uTTz5ReHi4ewjUDTfcoNLSUj322GMV0peUlAQUgFx33XVau3ZtpUtU10dPTUhISIX3femllyosXe0Lm82m119/Xddff73GjBmj+fPnW5LH5ORkdevWTW+99ZY78JXKlplft26dJe8hyf3Mrsq+1+jo6Eq333DDDVq5cqU+/vjjCq9lZma6A3Z/DRgwQFLZw66PP8Y555yjv/3tb9q1a5c6dOhQ7RDTqKgoTZo0SZs2bdKkSZMqLWP//e9/9e2330qSrrjiCn377bdauXKl+/W8vDy9/vrratu2bZXzp5o3b64zzzxTM2fO9Bh+t2TJEq/LzZc7cOBApelcLpc+++wz2e129xDQqr6n8sDx+HN0uVz617/+Ve37H6+q7xoAjkfPFQAcZ9GiRe678enp6Zo1a5a2bt2q++67zz1PpV+/fho3bpzS0tL0448/atCgQQoLC9PWrVs1Z84cvfDCC7r++uv9et97771X7733noYPH65bbrlFvXr10pEjRzR//ny9+uqr6tGjh+Xn6s2VV16p//znP4qLi1OXLl20cuVKffrpp2rSpElAx7Pb7frvf/+rYcOG6YYbbtBHH32kSy65pMb5fOKJJ3T11Verb9++uvnmm3X06FG9/PLL6tatm0fAVRNnnnmmQkJC9OSTTyorK0sOh0OXXHKJkpKS1KtXL02dOlV///vf1b59eyUlJemSSy7Rvffeq/nz5+vKK690L7ufl5endevW6b333tOuXbuqXYq+MmeccYZ7yfHevXvrd7/7neLj4/Xll19q9uzZuvDCC7VixQrddtttmjlzptdj3XvvvdqwYYOeffZZLV26VNdff72aNWumAwcO6P/+7//07bffuoch3nfffXrnnXd0+eWX66677lLjxo01c+ZM7dy5U++//77s9qrv1aalpWnIkCG64IILdMstt+jIkSN66aWX1LVr12q/o19//VV9+vTRJZdcogEDBqhZs2ZKT0/XO++8o7Vr12rChAnuz7Gq7+n8889Xo0aNNGbMGN11112y2Wz6z3/+4/dNi6q+awDwUG/rFAJAEKlsKfaIiAjzzDPPNKdOnepeDv14r7/+utmrVy8zMjLSjImJMbt3727+9a9/Nfft2+dO06ZNG3PIkCEV9u3Xr1+FZZ0PHz5sjh8/3mzRooUZHh5utmzZ0hwzZox56NAh0zSPLcU+Z84cj/0qW/66siXGveVHkpmamur+++jRo+bNN99sJiQkmE6n0xw8eLD5888/V1imvPxz++677yoc8/il2Mvl5+eb/fr1M51Op3s5+KqWYn/66acrzefDDz/ssW327Nlmp06dTIfDYXbr1s2cP3++ed1115mdOnWqsP+JLrroIvOMM87w2HbiOZqmab7xxhvmaaedZoaEhHgs933gwAFzyJAhZkxMjCnJ4zvNyckxJ0+ebLZv394MDw83ExISzPPPP9985plnTJfLVe25ejNt2jSzV69eZkREhOl0Os0LL7zQnD17tmmapnn//febkswpU6b4dKz33nvPHDRokNm4cWMzNDTUbN68uXnjjTeay5Yt80i3fft28/rrrzfj4+PNiIgIs0+fPuaCBQs80lRWFk3TNN9//32zc+fOpsPhMLt06WLOnTu3wvdemezsbPOFF14wBw8ebLZs2dIMCwszY2JizPPOO8984403KlyXVX1PX331lXnuueeakZGRZnJysvnXv/7V/QiC45dur+q6MU3v3zUAlLOZZgOYGQwAgB/OPPNMJSYmasmSJV7TnXXWWYqOjtaXX35ZRzkDAJzMmHMFAGiwiouLK8xfWrZsmdauXav+/ft73Tc3N1c///yzz89bAgCgOsy5AgA0WHv37tXAgQM1atQoJScn6+eff9arr76qZs2a6fbbb690n4MHD2revHn6z3/+o4KCAo0ePbqOcw0AOFkRXAEAGqxGjRqpV69e+ve//62MjAxFR0dryJAh+sc//lHl4hubNm3S+PHj1b59e7311lvq27dvHecaAHCyYs4VAAAAAFiAOVcAAAAAYAGCKwAAAACwAHOuKmEYhvbt26eYmBjZbLb6zg4AAACAemKapnJycpScnOz1oekSwVWl9u3bp1atWtV3NgAAAAAEiV9++UUtW7b0mobgqhIxMTGSyj7A2NjYes2LYRjKyMhQYmJitZEycDzKDgJBuUEgKDcIFGUHgajrcpOdna1WrVq5YwRvCK4qUT4UMDY2NiiCq8LCQsXGxlLpwC+UHQSCcoNAUG4QKMoOAlFf5caX6UKUYgAAAACwAMEVAAAAAFiA4AoAAAAALMCcKwAAAPjFNE2VlJSotLS0RscxDEPFxcUqLCxkzhV8ZnW5CQkJUWhoqCWPYCK4AgAAgM9cLpf279+v/Pz8Gh/LNE0ZhqGcnByeLQqf1Ua5iYqKUvPmzRUeHl6j4xBcAQAAwCeGYWjnzp0KCQlRcnKywsPDa9S4Le8Bs6rXAKcGK8uNaZpyuVzKyMjQzp071aFDhxr1hhFcAQAAwCcul0uGYahVq1aKioqq8fEIrhAIq8tNZGSkwsLCtHv3brlcLkVERAR8LAa3AgAAwC/Mj8LJxqoyzZUBAAAAABYguAIAAAAACxBcAQAAADW0bNky2Ww2ZWZmSpJmzJih+Pj4es0T6h7BFQAAAE5qY8eOlc1m0+23317htdTUVNlsNo0dO9bS97zxxhu1ZcsWS4/pi127dunWW29VSkqKIiMj1a5dOz388MNyuVzV7rty5Updcsklio6OVmxsrC666CIVFBS4X9+yZYuuvvpqJSQkKDY2VhdccIGWLl3qcYzPPvtM559/vmJiYtSsWTNNmjRJJSUlHmlM09Qzzzyj008/XQ6HQy1atNDjjz9uzQdQzwiuAAAAcNJr1aqVZs+e7REsFBYWatasWWrdurXl7xcZGamkpCTLj1udn3/+WYZh6LXXXtOGDRv0z3/+U6+++qruv/9+r/utXLlSl112mQYNGqRvv/1W3333ncaPH++x0MOVV16pkpISff7551q9erV69OihK6+8UgcOHJAkrV27VldccYUuu+wy/fDDD3r33Xc1f/583XfffR7v9ec//1n//ve/9cwzz+jnn3/W/Pnz1adPH+s/jHpAcBXEDMPUzkO52pmRq52HcmUYZn1nCQAAoHJ5eVX/Kyz0Pe1xwU+VaQNw1llnqVWrVpo7d65729y5c9W6dWv17NnTI61hGEpLS3P3/vTo0UPvvfeeR5qPPvpIp59+uiIjI3XxxRdr165dHq+fOCxw+/btuvrqq9W0aVM5nU717t1bn376qcc+bdu21RNPPKFbbrlFMTExat26tV5//XW/zvOyyy7T9OnTNWjQIJ122mkaOnSo7rnnHo/zrszdd9+tu+66S/fdd5+6du2qjh076oYbbpDD4ZAkHTp0SFu3btV9992nM844Qx06dNA//vEP5efna/369ZKkd999V2eccYYeeughtW/fXv369dNTTz2lV155RTk5OZKkTZs2aerUqfrggw80dOhQpaSkqFevXrr00kurzNuuXbtks9n0v//9TxdeeKGioqJ03nnnacuWLfruu+909tlny+l06vLLL1dGRoZ7v2XLlqlPnz6Kjo5WfHy8+vbtq927d/v1efqL4CpIrd+bpccWbtSUDzfqf9//qikfbtRjCzdq/d6s+s4aAABARU5n1f+uu84zbVKS5HTKFhOjsEaNZIuJOZb28ss907ZtW/F4Abrllls0ffp0999vvvmmbr755grp0tLS9NZbb+nVV1/Vhg0bdPfdd2vUqFFavny5JOmXX37Rtddeq6uuuko//vij/vCHP1TonTlRbm6urrjiCn322Wf64YcfdNlll+mqq67Snj17PNI9++yzOvvss/XDDz/ojjvu0J/+9Cdt3rzZ/Xr//v39HsKYlZWlxo0bV/l6enq6vvnmGyUlJen8889X06ZN1a9fP61YscKdpkmTJurYsaPeeust5eXlqaSkRK+99pqSkpLUq1cvSVJRUVGFZ0RFRkaqsLBQq1evliR9+OGHOu2007RgwQKlpKSobdu2+sMf/qAjR45Uex4PP/yw/va3v2n16tUKDQ3VyJEj9de//lUvvPCCvvzyS23btk0PPfSQJKmkpETDhg1Tv3799NNPP2nlypX64x//WOvPUyO4CkLr92bpxc+2at2vWYqPDFdSbITiI8O17tey7QRYAAAA/hs1apRWrFih3bt3a/fu3frqq680atQojzRFRUV64okn9Oabb2rw4ME67bTTNHbsWI0aNUqvvfaaJGnq1Klq166dnn32WXXs2FEjR46sNuDp0aOHxo0bp27duqlDhw567LHH1K5dO82fP98j3RVXXKE77rhD7du316RJk5SQkOAxr6l169Zq3ry5z+e8bds2vfTSSxo3blyVaXbs2CFJeuSRR3Tbbbdp8eLFOuusszRgwABt3bpVkmSz2fTpp5/qhx9+UExMjCIiIvTcc89p8eLFatSokSRp8ODB+vrrr/XOO++otLRUe/fu1aOPPipJ2r9/v/u9du/erTlz5uitt97SjBkztHr1al1//fXVnss999yjwYMHq3Pnzho/frxWr16tBx98UH379lXPnj116623uj+r7OxsZWVl6corr1S7du3UuXNnjRkzplaGgB4vtFaPDr8Zhqn31/yqI3kutU9yymaT7HIpOiJU7R1ObUvP1dw1e9Wleazsdp5kDgAAgkRubtWvhYR4/p2eLqlsYYOSkhKFhoYe61E48WGuJwy3q4nExEQNGTJEM2bMkGmaGjJkiBISEjzSbNu2Tfn5+RWGqblcLvfwwU2bNumcc87xeP28887z+t65ubl65JFHtHDhQu3fv18lJSUqKCio0HN1xhlnuP9vs9nUrFkzpf/2eUnSW2+95fP57t27V5dddpmGDx+u2267rcp0hmFIksaNG+fuyevZs6c+++wzvfnmm0pLS5NpmkpNTVVSUpK+/PJLRUZG6t///reuuuoqfffdd2revLkGDRqkp59+Wrfffrt+//vfy+Fw6MEHH9SXX37pnrtlGIaKior01ltv6fTTT5ckTZs2Tb169dLmzZvVsWPHKvN5/GfTtGlTSVL37t09tpV/Vo0bN9bYsWM1ePBgXXrppRo4cKBuuOEGvwLTQBBcBZldh/O0LT1XzeMif6tkjs2zstlsah4Xqa3pOdp1OE+nJQbeLQ4AAGCp6Gj/05qmVFIihYZKVQ3X8ue4Prjllls0fvx4SdIrr7xS4fXc34LEhQsXqkWLFh6vlc8/CsQ999yjJUuW6JlnnlH79u0VGRmp66+/vsIqfmFhYR5/22w2d/Djj3379uniiy/W+eefX+28rfKAo0uXLh7bO3fu7A7+Pv/8cy1YsEBHjx5VbGysJOlf//qXlixZopkzZ7qHRU6cOFF333239u/fr0aNGmnXrl2aPHmyTjvtNPd7hYaGugOr8veRpD179ngNro7/bMqD8RO3Hf9ZTZ8+XXfddZcWL16sd999V3/729+0ZMkSnXvuuV4/j5oguAoyOYUlKio2FBkXUunrkeEhOphtKKewpNLXAQAAULXLLrtMLpdLNptNgwcPrvB6ly5d5HA4tGfPHvXr16/SY3Tu3LnCcL5Vq1Z5fd+vvvpKY8eO1TXXXCOpLIg7cREMq+zdu1cXX3yxevXqpenTp3us+FeZtm3bKjk52WNul1S29Prlv82By8/Pl6QKx7Lb7RWCP5vNpuTkZEnSO++8o1atWumss86SJPXt21clJSXavn272rVr534fSWrTpk0gp+tVz5491bNnT02ePFnnnXeeZs2aVavBFXOugkxMRKgcYXYVuEorfb3AVSpHmF0xEcTFAAAA/goJCdGmTZu0ceNGhZw4XFFSTEyM7rnnHt19992aOXOmtm/frjVr1uill17SzJkzJUm33367tm7dqnvvvVebN2/WrFmzNGPGDK/v26FDB82dO1c//vij1q5dq5tuuimgHqnRo0dr8uTJVb6+d+9e9e/fX61bt9YzzzyjjIwMHThwwL1cenmaTp066dtvv5VUFgzde++9evHFF/Xee+9p27ZtevDBB/Xzzz/r1ltvlVQ27LFRo0YaM2aM1q5dqy1btujee+/Vzp07NWTIEPexn376aa1bt04bNmzQY489pn/84x968cUX3Z/1wIEDddZZZ+mWW27RDz/8oNWrV2vcuHG69NJLPXqzamrnzp2aPHmyVq5cqd27d+uTTz7R1q1b3b1ktYUWepBp2yRa7ZOcWvdrlto7nB495KZpan9Wgc5oGa+2TaztIgcAADhVlA9rq8pjjz2mxMREpaWlaceOHYqPj9dZZ53lflZU69at9f777+vuu+/WSy+9pD59+riXUK/Kc889p1tuuUXnn3++EhISNGnSJGVnZ/ud9z179njtiVqyZIm2bdumbdu2qWXLlh6vmWbZdJPi4mJt3rzZ3RslSRMmTFBhYaHuvvtuHTlyRD169NCSJUvcvUsJCQlavHixHnjgAV1yySUqLi5W165d9cEHH6hHjx7u4yxatEiPP/64ioqK1KNHD33wwQfu3i+prKfrww8/1J133qmLLrpI0dHRuvzyy/Xss8/6/Vl4ExUVpZ9//lkzZ87U4cOH1bx5c6Wmpnpd2MMKNrP8U4Zbdna24uLilJWVVe3FVxvKVws8kudSclyEmjtc2l8Urn1ZhWocHa67BnRQtxZxdZ4vNCyGYSg9PV1JSUnVDgcAylFuEAjKzamjsLBQO3fuVEpKSoUltwNR6YIWQDVqo9x4K9v+xAbUgEGoW4s43TWgg7q3jFNmgUvp2YXKLHDpjJbxBFYAAABAkGJYYJDq1iJOXZrHauehHKUfTFdS0ySlJMSw/DoAAAAQpAiugpjdblNKglPRRr6SEpwEVgAAAEAQY1ggAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAJzUxo4dK5vNpttvv73Ca6mpqbLZbBo7dmzdZ6waxcXFmjRpkrp3767o6GglJydr9OjR2rdvX7X77t27V6NGjVKTJk0UGRmp7t276/vvv3e/fvDgQY0dO1bJycmKiorSZZddpq1bt3oco7CwUKmpqWrSpImcTqeuu+46HTx40CPNd999pwEDBig+Pl6NGjXS4MGDtXbtWms+gAaI4AoAAAAnvVatWmn27NkqKChwbyssLNSsWbPUunXresxZ1fLz87VmzRo9+OCDWrNmjebOnavNmzdr6NChXvc7evSo+vbtq7CwMC1atEgbN27Us88+q0aNGkmSTNPUsGHDtGPHDn3wwQf64Ycf1KZNGw0cOFB5eXnu49x999368MMPNWfOHC1fvlz79u3Ttdde6349NzdXl112mVq3bq1vvvlGK1asUExMjAYPHqzi4uLa+VCCHMEVAAAAaizPlac8V55M03Rvc5W6lOfKU1FJUaVpDdNwbysuLVaeK0+FJYXVpg3EWWedpVatWmnu3LnubXPnzlXr1q3Vs2dPj7SGYSgtLU0pKSmKjIxUjx499N5777lfLy0t1a233up+vWPHjnrhhRc8jjF27FgNGzZMzzzzjJo3b64mTZooNTXVr6AjLi5OS5Ys0Q033KCOHTvq3HPP1csvv6zVq1drz549Ve735JNPqlWrVpo+fbr69OmjlJQUDRo0SO3atZMkbd26VatWrdLUqVPVu3dvdezYUVOnTlVBQYHeeecdSVJWVpamTZum5557Tpdccol69eql6dOn6+uvv9aqVaskST///LOOHDmiRx99VB07dlTXrl318MMP6+DBg9q9e3eV+bPZbHrttdd05ZVXKioqSp07d9bKlSu1bds29e/fX9HR0Tr//PO1fft29z5r167VxRdfrJiYGMXFxemcc87x6IkLFgRXAAAAqDFnmlPONKcO5R9yb3v6q6flTHNq/EfjPdImPZMkZ5pTe7KOBQivfPeKnGlO3Tr/Vo+0bV9oK2eaU5syNtU4j7fccoumT5/u/vvNN9/UzTffXCFdWlqa3nrrLb366qvasGGD7r77bo0aNUrLly+XVBZ8tWzZUnPmzNHGjRv10EMP6f7779f//vc/j+MsXbpU27dv19KlSzVz5kzNmDFDM2bMcL/+yCOPqG3btn6dQ1ZWlmw2m+Lj46tMM3/+fJ199tkaPny4kpKS1LNnT73xxhvu14uKyoLdiIgI9za73S6Hw6EVK1ZIklavXq3i4mINHDjQnaZTp05q3bq1Vq5cKUnq2LGjmjRpomnTpsnlcqmgoEDTpk1T586dqz2vxx57TKNHj9aPP/6oTp066aabbtK4ceM0efJkff/99zJNU+PHHys3I0eOVMuWLfXdd9/p+++/17333quwsDCfP7e6QnAFAACAU8KoUaO0YsUK7d69W7t379ZXX32lUaNGeaQpKirSE088oTfffFODBw/WaaedprFjx2rUqFF67bXXJElhYWGaMmWKzj77bKWkpGjkyJG6+eabKwRXjRo10ssvv6xOnTrpyiuv1JAhQ/TZZ5+5X09ISHD3JvmisLBQkyZN0u9+9zvFxsZWmW7Hjh2aOnWqOnTooI8//lh/+tOfdNddd2nmzJmSjgVJkydP1tGjR+VyufTkk0/q119/1f79+yVJBw4cUHh4eIUgrmnTpjpw4IAkKSYmRsuWLdN///tfRUZGyul0avHixVq0aJFCQ0O9nsvNN9+sG264QaeffromTZqkXbt2aeTIkRo8eLA6d+6sP//5z1q2bJk7/Z49ezRw4EB16tRJHTp00PXXX68ePXr4/NnVFe9nDQAAAPggd3KuJCkqLMq97d6+92rCuRMUavdscqbfky5JigiNkFFaNtwvtXeqbjvrNoXYQzzS7vrzLklSZFhkjfOYmJioIUOGaMaMGTJNU0OGDFFCQoJHmm3btik/P1+XXnqpx3aXy+UxfPCVV17Rm2++qT179qigoEAul0tnnnmmxz5du3ZVSMix82nevLnWrVvn/nv8+PEevTPeFBcX64YbbpBpmpo6darXtIZh6Oyzz9YTTzwhSerZs6fWr1+vV199VWPGjFFYWJjmzp2rW2+9VY0bN1ZISIgGDhyoyy+/3GNYZ3UKCgp06623qm/fvnrnnXdUWlqqZ555RkOGDNF3332nyMiqv7MzzjjD/f+mTZtKkrp37+6xrbCwUNnZ2YqNjdXEiRP1hz/8Qf/5z380YMAAXXPNNerYsaPPea0rBFcAAACosejw6ArbwkPCFR4SXmVa0zRlqCy4CgsJU1hIxWFelR23Jm655RZ3QPPKK69UeD03tyxIXLhwoVq0aOHxmsPhkCTNnj1b99xzj5599lmdd955iomJ0dNPP61vvvnGI/2Jw9ZsNpsMw/+5Y+WB1e7du/X555977bWSyoK4Ll26eGzr3Lmz3n//ffffvXr10o8//qisrCy5XC4lJibqnHPO0dlnny1JatasmVwulzIzMz16rw4ePKhmzZpJkmbNmqVdu3Zp5cqVstvt7m2NGjXSBx98oBEjRlSZx+M/G5vNVuW28s/rkUce0U033aSFCxdq0aJFeuSRR/TOO+94LLARDAiuAAAAcMq47LLL5HK5ZLPZNHjw4Aqvd+nSRQ6HQ3v27FG/fv0qPcZXX32l888/X3fccYd72/GLL1ipPLDaunWrli5dqiZNmlS7T9++fbV582aPbVu2bFGbNm0qpI2Li5NUtsjF999/r8cee0xSWfAVFhamzz77TNddd50kafPmzdqzZ4/OO+88SWWrGdrtdncgJMn9dyBBZHVOP/10nX766ZowYYJGjBihGTNmBF1wxZwrAAAAnDJCQkK0adMmbdy40WPIXrmYmBjdc889uvvuuzVz5kxt375da9as0UsvveSes9ShQwd9//33+vjjj7VlyxY9+OCD+u677/zOy8svv6wBAwZU+XpxcbGuv/56ff/993r77bdVWlqqAwcO6MCBA3K5XO50AwYM0Msvv+z+++6779aqVav0xBNPaNu2bZo1a5Zef/11paamutPMmTNHy5Ytcy/Hfumll2rYsGEaNGiQpLKg69Zbb9XEiRO1dOlSrV69WjfffLPOO+88nXvuuZKkSy+9VEePHlVqaqo2bdqkDRs26Oabb1ZoaKguvvhivz+PqhQUFGj8+PFatmyZe67c6tWr1alTJ8vewyr0XAEAAOCUUt2wuscee0yJiYlKS0vTjh07FB8fr7POOkv333+/JGncuHH64YcfdOONN8pms+l3v/ud7rjjDi1atMivfBw6dMhrj9fevXs1f/58Saown2vp0qXq37+/pLJes0OHjq3S2Lt3b82bN0+TJ0/Wo48+qpSUFD3//PMaOXKkO83+/fs1ceJEHTx4UM2bN9fo0aP14IMPerzHP//5T9ntdl133XUqKirS4MGD9a9//cv9eqdOnfThhx9qypQpOu+882S329WzZ08tXrxYzZs39+uz8CYkJESHDx/W6NGjdfDgQSUkJGjYsGGaMmWKZe9hFZvpz6y1U0R2drbi4uKUlZVV7cVX2wzDUHp6upKSktxjWQFfUHYQCMoNAkG5OXUUFhZq586dSklJ8VjGO1CmaaqkpEShoaEeQ8sAb2qj3Hgr2/7EBtSAAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAC/sB4aTjZWlel6Da7S0tLUu3dvxcTEKCkpScOGDavwwLMT9e/fXzabrcK/IUOGuNPk5uZq/PjxatmypSIjI9WlSxe9+uqrtX06AAAAJ7WwsDBJZQ+PBU4m5WW6vIwHql6fc7V8+XKlpqaqd+/eKikp0f33369BgwZp48aNio6OrnSfuXPnejw07fDhw+rRo4eGDx/u3jZx4kR9/vnn+u9//6u2bdvqk08+0R133KHk5GQNHTq01s8LAADgZBQSEqL4+Hilp6dLkqKiomq0FDZLsSMQVpYb0zSVn5+v9PR0xcfHV/pgaX/Ua3C1ePFij79nzJihpKQkrV69WhdddFGl+zRu3Njj79mzZysqKsojuPr66681ZswY94PV/vjHP+q1117Tt99+S3AFAABQA82aNZMkd4BVE6ZpyjAM2e12giv4rDbKTXx8vLts10S9BlcnysrKklQxgPJm2rRpGjFihEdP1/nnn6/58+frlltuUXJyspYtW6YtW7bon//8Z6XHKCoqUlFRkfvv7OxsSWUPRTQMI5BTsYxhGO4CBPiDsoNAUG4QCMrNqadp06ZKSEhQcXFxjY5jGIaOHDmixo0b8wBq+MzqchMWFqaQkBCZplnp3Ct/6ragCa4Mw9CECRPUt29fdevWzad9vv32W61fv17Tpk3z2P7SSy/pj3/8o1q2bKnQ0FDZ7Xa98cYbVfaGpaWlacqUKRW2Z2RkqLCw0P+TsZBhGMrKypJpmlQ68AtlB4Gg3CAQlBsEyjAM5eXludtrgC/qutzk5OT4nDZogqvU1FStX79eK1as8HmfadOmqXv37urTp4/H9pdeekmrVq3S/Pnz1aZNG33xxRdKTU1VcnKyBg4cWOE4kydP1sSJE91/Z2dnq1WrVkpMTFRsbGzgJ2UBwzBks9mUmJhIpQO/UHYQCMoNAkG5QaAoOwhEXZebiIgIn9MGRXA1fvx4LViwQF988YVatmzp0z55eXmaPXu2Hn30UY/tBQUFuv/++zVv3jz3CoJnnHGGfvzxRz3zzDOVBlcOh0MOh6PCdrvdHhQXus1mC5q8oGGh7CAQlBsEgnKDQFF2EIi6LDf+vEe9BlemaerOO+/UvHnztGzZMqWkpPi875w5c1RUVKRRo0Z5bC8uLlZxcXGFDyEkJISx4AAAAABqTb0GV6mpqZo1a5Y++OADxcTE6MCBA5KkuLg4RUZGSpJGjx6tFi1aKC0tzWPfadOmadiwYWrSpInH9tjYWPXr10/33nuvIiMj1aZNGy1fvlxvvfWWnnvuubo5MQAAAACnnHoNrqZOnSpJ7iXTy02fPl1jx46VJO3Zs6dCL9TmzZu1YsUKffLJJ5Ued/bs2Zo8ebJGjhypI0eOqE2bNnr88cd1++23W34OAAAAACAFwbDA6ixbtqzCto4dO3rdt1mzZpo+fXpNsgYAAAAAfmHmIAAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAAL1GtwlZaWpt69eysmJkZJSUkaNmyYNm/e7HWf/v37y2azVfg3ZMgQj3SbNm3S0KFDFRcXp+joaPXu3Vt79uypzdMBAAAAcAqr1+Bq+fLlSk1N1apVq7RkyRIVFxdr0KBBysvLq3KfuXPnav/+/e5/69evV0hIiIYPH+5Os337dl1wwQXq1KmTli1bpp9++kkPPvigIiIi6uK0AAAAAJyCQuvzzRcvXuzx94wZM5SUlKTVq1froosuqnSfxo0be/w9e/ZsRUVFeQRXDzzwgK644go99dRT7m3t2rWzMOcAAAAA4Kleg6sTZWVlSaoYQHkzbdo0jRgxQtHR0ZIkwzC0cOFC/fWvf9XgwYP1ww8/KCUlRZMnT9awYcMqPUZRUZGKiorcf2dnZ7uPZRhGgGdjDcMwZJpmvecDDQ9lB4Gg3CAQlBsEirKDQNR1ufHnfYImuDIMQxMmTFDfvn3VrVs3n/b59ttvtX79ek2bNs29LT09Xbm5ufrHP/6hv//973ryySe1ePFiXXvttVq6dKn69etX4ThpaWmaMmVKhe0ZGRkqLCwM/KQsYBiGsrKyZJqm7HbWH4HvKDsIBOUGgaDcIFCUHQSirstNTk6Oz2ltpmmatZgXn/3pT3/SokWLtGLFCrVs2dKnfcaNG6eVK1fqp59+cm/bt2+fWrRood/97neaNWuWe/vQoUMVHR2td955p8JxKuu5atWqlY4eParY2NganFXNGYahjIwMJSYmUunAL5QdBIJyg0BQbhAoyg4CUdflJjs7W40aNVJWVla1sUFQ9FyNHz9eCxYs0BdffOFzYJWXl6fZs2fr0Ucf9diekJCg0NBQdenSxWN7586dtWLFikqP5XA45HA4Kmy32+1BcaHbbLagyQsaFsoOAkG5QSAoNwgUZQeBqMty48971GtwZZqm7rzzTs2bN0/Lli1TSkqKz/vOmTNHRUVFGjVqlMf28PBw9e7du8KS7lu2bFGbNm0syTcAAAAAnKheg6vU1FTNmjVLH3zwgWJiYnTgwAFJUlxcnCIjIyVJo0ePVosWLZSWluax77Rp0zRs2DA1adKkwnHvvfde3Xjjjbrooot08cUXa/Hixfrwww+1bNmyWj8nAAAAAKemeg2upk6dKqnswcDHmz59usaOHStJ2rNnT4WuuM2bN2vFihX65JNPKj3uNddco1dffVVpaWm666671LFjR73//vu64IILLD8HAAAAAJCCYFhgdSrrberYsWO1+95yyy265ZZbAs0aAAAAAPiFmYMAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYIFQf3cwDEPLly/Xl19+qd27dys/P1+JiYnq2bOnBg4cqFatWtVGPgEAAAAgqPncc1VQUKC///3vatWqla644gotWrRImZmZCgkJ0bZt2/Twww8rJSVFV1xxhVatWlWbeQYAAACAoONzz9Xpp5+u8847T2+88YYuvfRShYWFVUize/duzZo1SyNGjNADDzyg2267zdLMAgAAAECw8jm4+uSTT9S5c2evadq0aaPJkyfrnnvu0Z49e2qcOQAAAABoKHweFlhdYHW8sLAwtWvXLqAMAQAAAEBDFNBqgYsXL9aKFSvcf7/yyis688wzddNNN+no0aOWZQ4AAAAAGoqAgqt7771X2dnZkqR169bpL3/5i6644grt3LlTEydOtDSDAAAAANAQ+L0UuyTt3LlTXbp0kSS9//77uvLKK/XEE09ozZo1uuKKKyzNIAAAAAA0BAH1XIWHhys/P1+S9Omnn2rQoEGSpMaNG7t7tAAAAADgVBJQz9UFF1ygiRMnqm/fvvr222/17rvvSpK2bNmili1bWppBAAAAAGgIAuq5evnllxUaGqr33ntPU6dOVYsWLSRJixYt0mWXXWZpBgEAAACgIQio56p169ZasGBBhe3//Oc/a5whAAAAAGiIAuq5Kpeenq7169frp59+8vjnq7S0NPXu3VsxMTFKSkrSsGHDtHnzZq/79O/fXzabrcK/IUOGVJr+9ttvl81m0/PPP+/PqQEAAACAXwLquVq9erXGjBmjTZs2yTRNSZLNZpNpmrLZbCotLfXpOMuXL1dqaqp69+6tkpIS3X///Ro0aJA2btyo6OjoSveZO3euXC6X++/Dhw+rR48eGj58eIW08+bN06pVq5ScnBzAWQIAAACA7wIKrm655RadfvrpmjZtmpo2bSqbzRbQmy9evNjj7xkzZigpKUmrV6/WRRddVOk+jRs39vh79uzZioqKqhBc7d27V3feeac+/vjjKnu1yhUVFamoqMj9d/mKh4ZhyDAMn8+nNhiGIdM06z0faHgoOwgE5QaBoNwgUJQdBKKuy40/7xNQcLVjxw69//77at++fSC7VykrK0tSxQDKm2nTpmnEiBEePV2GYej3v/+97r33XnXt2rXaY6SlpWnKlCkVtmdkZKiwsNDnvNQGwzCUlZUl0zRlt9doFCdOMZQdBIJyg0BQbhAoyg4CUdflJicnx+e0AQVXAwYM0Nq1ay0NrgzD0IQJE9S3b19169bNp32+/fZbrV+/XtOmTfPY/uSTTyo0NFR33XWXT8eZPHmyJk6c6P47OztbrVq1UmJiomJjY30/iVpgGIZsNpsSExOpdOAXyg4CQblBICg3CBRlB4Go63ITERHhc9qAgqt///vfGjNmjNavX69u3bopLCzM4/WhQ4f6fczU1FStX79eK1as8HmfadOmqXv37urTp4972+rVq/XCCy9ozZo1Pg9XdDgccjgcFbbb7faguNBtNlvQ5AUNC2UHgaDcIBCUGwSKsoNA1GW58ec9AgquVq5cqa+++kqLFi2q8Jo/C1qUGz9+vBYsWKAvvvjC54cQ5+Xlafbs2Xr00Uc9tn/55ZdKT09X69at3dtKS0v1l7/8Rc8//7x27drlV94AAAAAwBcBhXp33nmnRo0apf3797sXfSj/509gZZqmxo8fr3nz5unzzz9XSkqKz/vOmTNHRUVFGjVqlMf23//+9/rpp5/0448/uv8lJyfr3nvv1ccff+zz8QEAAADAHwH1XB0+fFh33323mjZtWqM3T01N1axZs/TBBx8oJiZGBw4ckCTFxcUpMjJSkjR69Gi1aNFCaWlpHvtOmzZNw4YNU5MmTTy2N2nSpMK2sLAwNWvWTB07dqxRfgEAAACgKgEFV9dee62WLl2qdu3a1ejNp06dKqnswcDHmz59usaOHStJ2rNnT4Vxjps3b9aKFSv0ySef1Oj9AQAAAMAqAQVXp59+uiZPnqwVK1aoe/fuFRa08HWVvvIHEHuzbNmyCts6duzo077lmGcFAAAAoLYFvFqg0+nU8uXLtXz5co/XbDabz8EVAAAAAJwsAgqudu7caXU+AAAAAKBB44ECAAAAAGABn4Orf/zjHyooKPAp7TfffKOFCxcGnCkAAAAAaGh8Dq42btyo1q1b64477tCiRYuUkZHhfq2kpEQ//fST/vWvf+n888/XjTfeqJiYmFrJMAAAAAAEI5/nXL311ltau3atXn75Zd10003Kzs5WSEiIHA6H8vPzJUk9e/bUH/7wB40dO1YRERG1lmkAAAAACDZ+LWjRo0cPvfHGG3rttdf0008/affu3SooKFBCQoLOPPNMJSQk1FY+AQAAACCoBbRaoN1u15lnnqkzzzzT4uwAAAAAQMPEaoEAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALFCj4Grbtm36+OOP3Q8XNk3TkkwBAAAAQEMTUHB1+PBhDRw4UKeffrquuOIK7d+/X5J066236i9/+YulGQQAAACAhiCg4Oruu+9WaGio9uzZo6ioKPf2G2+8UYsXL7YscwAAAADQUAT0nKtPPvlEH3/8sVq2bOmxvUOHDtq9e7clGQMAAACAhiSgnqu8vDyPHqtyR44ckcPhqHGmAAAAAKChCSi4uvDCC/XWW2+5/7bZbDIMQ0899ZQuvvhiyzIHAAAAAA1FQMMCn3rqKQ0YMEDff/+9XC6X/vrXv2rDhg06cuSIvvrqK6vzCAAAAABBL6Ceq27dumnLli264IILdPXVVysvL0/XXnutfvjhB7Vr187qPAIAAABA0Auo50qS4uLi9MADD1iZFwAAAABosAIOrgoLC/XTTz8pPT1dhmF4vDZ06NAaZwwAAAAAGpKAgqvFixdr9OjROnToUIXXbDabSktLa5wxAAAAAGhIAppzdeedd2r48OHav3+/DMPw+EdgBQAAAOBUFFBwdfDgQU2cOFFNmza1Oj8AAAAA0CAFFFxdf/31WrZsmcVZAQAAAICGK6A5Vy+//LKGDx+uL7/8Ut27d1dYWJjH63fddZclmQMAAACAhiKg4Oqdd97RJ598ooiICC1btkw2m839ms1mI7gCAAAAcMoJKLh64IEHNGXKFN13332y2wMaWQgAAAAAJ5WAIiOXy6Ubb7yRwAoAAAAAfhNQdDRmzBi9++67VucFAAAAABqsgIYFlpaW6qmnntLHH3+sM844o8KCFs8995wlmQMAAACAhiKg4GrdunXq2bOnJGn9+vUerx2/uAUAAAAAnCoCCq6WLl1qdT4AAAAAoEFjRQoAAAAAsIDPPVfXXnutZsyYodjYWF177bVe086dO7fGGQMAAACAhsTn4CouLs49nyouLq7WMgQAAAAADZHPwdX06dP16KOP6p577tH06dNrM08AAAAA0OD4NedqypQpys3Nra28AAAAAECD5VdwZZpmbeUDAAAAABo0v1cL5DlWAAAAAFCR38+5Ov3006sNsI4cORJwhgAAAACgIfI7uJoyZQqrBQIAAADACfwOrkaMGKGkpKTayAsAAAAANFh+zblivhUAAAAAVI7VAgEAAADAAn4NCzQMo7byAQAAAAANmt9LsQMAAAAAKiK4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGCBeg2u0tLS1Lt3b8XExCgpKUnDhg3T5s2bve7Tv39/2Wy2Cv+GDBkiSSouLtakSZPUvXt3RUdHKzk5WaNHj9a+ffvq4pQAAAAAnKLqNbhavny5UlNTtWrVKi1ZskTFxcUaNGiQ8vLyqtxn7ty52r9/v/vf+vXrFRISouHDh0uS8vPztWbNGj344INas2aN5s6dq82bN2vo0KF1dVoAAAAATkGh9fnmixcv9vh7xowZSkpK0urVq3XRRRdVuk/jxo09/p49e7aioqLcwVVcXJyWLFnikebll19Wnz59tGfPHrVu3drCMwAAAACAMvUaXJ0oKytLUsUAyptp06ZpxIgRio6O9npcm82m+Pj4Sl8vKipSUVGR++/s7GxJkmEYMgzD57zUBsMwZJpmvecDDQ9lB4Gg3CAQlBsEirKDQNR1ufHnfYImuDIMQxMmTFDfvn3VrVs3n/b59ttvtX79ek2bNq3KNIWFhZo0aZJ+97vfKTY2ttI0aWlpmjJlSoXtGRkZKiws9O0EaolhGMrKypJpmrLbWX8EvqPsIBCUGwSCcoNAUXYQiLouNzk5OT6nDZrgKjU1VevXr9eKFSt83mfatGnq3r27+vTpU+nrxcXFuuGGG2SapqZOnVrlcSZPnqyJEye6/87OzlarVq2UmJhYZUBWVwzDkM1mU2JiIpUO/ELZQSAoNwgE5QaBouwgEHVdbiIiInxOGxTB1fjx47VgwQJ98cUXatmypU/75OXlafbs2Xr00Ucrfb08sNq9e7c+//xzr0GSw+GQw+GosN1utwfFhW6z2YImL2hYKDsIBOUGgaDcIFCUHQSiLsuNP+9Rr8GVaZq68847NW/ePC1btkwpKSk+7ztnzhwVFRVp1KhRFV4rD6y2bt2qpUuXqkmTJlZmGwAAAAAqqNfgKjU1VbNmzdIHH3ygmJgYHThwQFLZin+RkZGSpNGjR6tFixZKS0vz2HfatGkaNmxYhcCpuLhY119/vdasWaMFCxaotLTUfdzGjRsrPDy8Ds4MAAAAwKmmXoOr8nlQ/fv399g+ffp0jR07VpK0Z8+eCl1xmzdv1ooVK/TJJ59UOObevXs1f/58SdKZZ57p8drSpUsrvBcAAAAAWKHehwVWZ9myZRW2dezYscp927Zt69NxAQAAAMBKzBwEAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYIF6Da7S0tLUu3dvxcTEKCkpScOGDdPmzZu97tO/f3/ZbLYK/4YMGeJOY5qmHnroITVv3lyRkZEaOHCgtm7dWtunAwAAgphhmNqRkau1v2RqR0auDMOs7ywBOMmE1uebL1++XKmpqerdu7dKSkp0//33a9CgQdq4caOio6Mr3Wfu3LlyuVzuvw8fPqwePXpo+PDh7m1PPfWUXnzxRc2cOVMpKSl68MEHNXjwYG3cuFERERG1fl4AACC4rN+bpffX/Kpt6bkqKjbkCLOrfZJT153VUt1axNV39k5JhmFq56FcpWfkKs8epZSEGNnttvrOFlAj9RpcLV682OPvGTNmKCkpSatXr9ZFF11U6T6NGzf2+Hv27NmKiopyB1emaer555/X3/72N1199dWSpLfeektNmzbV//3f/2nEiBG1cCYAACBYrd+bpRc/26ojeS41j4tUZFyIClylWvdrlvYeLdBdAzoQYNWx8mB3e3qOmtgLddg4pHZJMQS7aPDqNbg6UVZWlqSKAZQ306ZN04gRI9w9XTt37tSBAwc0cOBAd5q4uDidc845WrlyZaXBVVFRkYqKitx/Z2dnS5IMw5BhGAGdi1UMw5BpmvWeDzQ8lB0EgnKDQARzuTEMU++v/kVH84rUPskpm62sZ8QZEaL2jmhtT8/V3NW/qlNTJ70mdWTDviy9/Pk2HclzKTkuQkkOU0ZRmNb/mql9R/M1/pL26ppMgIWq1XWd48/7BE1wZRiGJkyYoL59+6pbt24+7fPtt99q/fr1mjZtmnvbgQMHJElNmzb1SNu0aVP3aydKS0vTlClTKmzPyMhQYWGhr6dQKwzDUFZWlkzTlN3O+iPwHWUHgaDc1C3DMJWeU6gCV6kiw0OUFBPRIBv4wVxuDmQVKC/rsLo1DlWErcDzRZvUrbGUm3VI67fvUbO4yPrJ5CnEMEx9uuYXRZbk6eymkZKK5ZRL9gibkiNCtD8zV5+t2aom9lYN8lpA3ajrOicnJ8fntEETXKWmpmr9+vVasWKFz/tMmzZN3bt3V58+fWr03pMnT9bEiRPdf2dnZ6tVq1ZKTExUbGxsjY5dU4ZhyGazKTExMeh+sBDcKDsIBOWm7mzYl6W5a/Zqe8axOUDtEp269qwWDe6ufTCXmwOuLO3O2682kdEqVMXGemmIqd15eVJkvJKSGtbn3hDtPJSrHzIMxUfGKVOhkkxJpjIVKckmIyJcazJcuio0WikJznrOLYJVXdc5/qzZEBTB1fjx47VgwQJ98cUXatmypU/75OXlafbs2Xr00Uc9tjdr1kySdPDgQTVv3ty9/eDBgzrzzDMrPZbD4ZDD4aiw3W63B8WPhM1mC5q8oGGh7CAQlJvat35vll76fHvFOUB7s7U3s7BBzgEK1nITGxmm8LAQFbgMOSMqNnsKXKUKDwtRbGRY0OX9ZJRbZKiw2FREXKjkDnZt7n8R4aEqzC5SbpHB9wGv6rLO8ec96rXUmqap8ePHa968efr888+VkpLi875z5sxRUVGRRo0a5bE9JSVFzZo102effebelp2drW+++UbnnXeeZXkHACAQhmHq/TW/6kieS+2TnHJGhCrEbpMzIlTtk5w6kufS3DV7WSbcIm2bRKt9klP7swpkmp6fqWma2p9VoA5JMWrbpPJVimvTqbg0fExEqBxhdhW4Sit9vcBVKkeYXTGVBMJAQ1CvJTc1NVWzZs3SBx98oJiYGPecqLi4OEVGlo17Hj16tFq0aKG0tDSPfadNm6Zhw4apSZMmHtttNpsmTJigv//97+rQoYN7Kfbk5GQNGzasTs4LAICq7Dqcp23puWoeF+leXKGczWZT87hIbU3P0a7DeTotkWFRNWW323TdWS2192iB+3OPDC/rKdyfVaDG0eG69qwWdT6/51RdGr482F33a5baO5w6/hIoD3bPaBlfL8EuYIV6Da6mTp0qqezBwMebPn26xo4dK0nas2dPha64zZs3a8WKFfrkk08qPe5f//pX5eXl6Y9//KMyMzN1wQUXaPHixTzjCgBQ73IKS1RUbCgyLqTS1yPDQ3Qw21BOYUkd5+zk1a1FnO4a0MEdzBzMLgtmzmgZr2vPalHnwcypvDT8icFuclyEYh1SXlGJ9mUV1luwC1ilXoOrE7vnK7Ns2bIK2zp27Oh1X5vNpkcffbTCfCwAAOrb8cOiqpoDxLCowBmGqV2H85RTWKKYiFC1bRItu92mbi3i1KV5bKWv1XX+jh8Wemxp+FC1dzi1LT1Xc9fsVZfmsSdtgHF8sLs9PUchRYXKNFRvwS5gJWpuAADqUMVhUcca0AyLqpnqhtrZ7bZ6H2rJsNAy5cHuzkM5Sj+YrqSmSUpJiDlpA0qcOgiuAACoQ8E6B6ihayhD7RgWeozdblNKglPRRr6SEniIM04OrHEJAEAdKx8W1b1lnDILXNp1KE+ZBS6d0TI+aIKAhqQhrcDIannAyY0rFwCAehAsc4BOBg1pqB3DQoGTG8FVA1XVhF0AQMMRDHOATgYNaagdw0KBkxvBVQN0qj4bAwBQP4L9hl5DW4Ex2JaGB2Cd4Khl4LOGMmEXAHByaAg39BriUDuGhQYu2IN9nNoIrhoQno0BAKeOum5AVvZ+G/dnN4gbeg11qB3DQv3XEIJ9nNoIrhqQhjRhFwAQuLpuQFb2fu0So3Ukr9inG3rB4GQbakfvTEWM3kFDQHDVgDSkCbuoOX5YgVNTXTcgq3q/73cd1f6sQnVNjq32hl7bJlGW5acmTpahdsHWOxMMv0eM3kFDQXDVgDS0CbsIXLD9sAKoG3XdgPT2fs3jIrTrcL72ZxWqRXykdEKAFaw39Br6ULtg650Jlt8jRu+goeAhwg1I+YTd/VkFMk3PByGWT9jtkBQTVBN24b/yH9Z1v2YpPjJcbROiFR8ZrnW/lm1fvzervrMIoJb404Cs7fcLDw1RRJhdR/NdyimqGEBxQ896wfYw5GD6PXKP3gmvevROUXHwBfs49RBcNSDlE3YbR4drW3qucgtLVGqYyi0s0bb03KCdsAvfBdsPK4C6VdcNSG/vFxMRqkZR4SosNuQqLvV4jRt6xxiGqR0ZuVr7S6Z2ZOTWqH6u6+Dam2D7PTp+9E5lgjXYt7J8oGEIrhKIap1sE3bhiWEPwKnNiuHf/syP8fZ+5XXOkTyX9mUXyhEWWuUKfCd7g7Gqz9TqIXNWzK22an5UsP0eNcTl9oNlSCXqFsFVA3SyTNhFRSxaApzaatqA9LcxV9375btKdEH7hLIRExmn5g29qj7TM1vFa+FP+y2dG1XT4Lq679+fwKu+f48qy2tNl9uvy4U5gm3uHOoOwVUD1dAn7KJyLFoCnNpq8rymQBpzvrzfbReddkrc0PPnOV8//ZKpzzYdlNMRqjNaxlu28EhNguvqvv8hZzTXj79k+hx41+fvkbcgMdDRO3XZi8TKhqc2WmhAEGmIwx4QuGBY3hjBJ5Dh3zVpzPn6fifzDT1/n/PVNC5CW9NzFWKz68QrtiZD5gINrqv7/n/6NVPPfrJFSTEOnwNvX3+PWjeK0o6M3CrrMX/rOV9uEjw4pIvlx7QywAq2IZWoWwRXQBCpyV1rNCyMxYc3/g7/rmlj7lQebh7Ic75KSk2F2u3Kd5Uop6hEMRFhHq/XZMhcIMG1t+9fKutlOprvUvcWse5eqOoCb19+j3q0itPjizZVWY/5W8/5fJNgSKzPQUld9CKdGEBmFRQzxP8URnAFBBkWLTn5MRYfvvBn+LcV82MCHW5uGKZ2HspVekau8uxRSkmIaTBBWaDP+QoLsSss1KbiElPFJUaF4x4/ZC6QHurqgl1/GvM5hSXKLy5VmN2uklLPhUeqC7y9/R71aBXndc7ZkDOa+z0nrTZ6fGq7F6myADIxxqHiUoMh/qcovlUgCJ3Kd5FPdozFhxVObFxHO0LqZX5MecNye3qOmtgLddg4pHZJMQ2mB9af53wd3zsVExGqqLAQHXK5FBriud/xQ+byikr02MKNAfVQVxXs+tuYLy41VFxiKizEprDQik/gqS7wruz3qHWjKD2+aFOV9djWgzl6bfkORYWHVFvPHa82FtGozYU5qrpRtvtQng7nFamopNRjTp7EEP9TAcEVEKRYtOTknJPEWHzUVFXzgxpFhWtfZkGdzdc8vmGZHBehJIdUWhTeoHpgvTW8y5/ztT+rsOw5X5UM/WtkhutgdpHsNnulQ+Ze+nybpT3UgTTmQ0NsKjEMxUU6FOOoOvCOdoRUOXfqxN+jHRm5Xuux2MhwbT90VD1bxVdbz7VtEuXxmVt9k8DXY3o7/8p4u1HWoWmMCopLlVtUyhD/UxDBFdBAnYyBx/FO1jlJ9b28MRq2qhrX6/dmK9RuU2iIrU4acxUblpJdLkXX4jyW2qjjavKcr5aNojxW4Dt+yNywnsma98NeS3uoA23MH8wqVHxUmCLD7TIljwU4ygPvFvGRenvVHm3L8K2+ra4eC7H/Ni+tkvlfUtX1XG0s6uTLMf09f6n6G2XtEmP069F8tWkcpfTcIob4n0IIruDhZG+wnyxO1sCjXG3OSarvMs5y+wiUL0NKW8RH1skzqSo2LI/N5fGnB7auHs5bFSue83XVGckVzqE+5g5V1Zjv0aqRe35UZYF3qN2mgzmF2ptZ4HN9W109Vmr81mNmVv5w6arqudpY1Km6YwZy/pJvN8rCQuwadV4bxUWG0a46hfDrDbeTvcF+svAl8OjSPPaknGBe0zviwVDGWW4fgfKlwX4k36U7B7SX3War1cacFT2wdflw3qpY8ZyvyoZw19fcIW+N+XaJzgoLU3RvEafDea6y4aR+1LfV1WPZBS4lx0Uqp7BETWPNauo5zwCsNhZ1quqYvp5/p6Yx2nM03+Mz9fVGWVxkWMALxXCzu2EiuIIkVi9rKHwJPN74YocaR4dre8bJN8G8JnOSgqWMs9w+AuVrgz2vqFQ9WsXXal5q2gNb1fVYWw/n9aY2nvNVn3OHqmrMV7YwhWGamvLhRr/r2+rqsSZOh3u1wOrqOcOo2LtVG4s6BXr+P+w5qknv/6T03CKPmwDX9GxRazfKguFGIAJHcAVWL2tAqgs8osJDtWLbITWPj9BpTaJPugnmUmB3fIOtjLPcPgIRTENKK/ZcHHutuoalt+uxth7OWx2rG/P1NXeoumOe2Mu29pfMgOtbX+qxynrLfK3namNRJ3/Pv7CkVDsP5amwuFTtk2IqXW7e6htlwXIjEIEjuELQrl5Gl3hF3gKP8h/XohJDybERio4ItXyCeV2ojQZkMJZxltsPPsFe5wTTkNITey6S4yIU65Dyikq0L6vQa8PS2/VYmw/n9eWcrLr+62PuUCDHrGl9W109Fuz1nLfzN01T2w7mqNQ0dVpidKUPX177S5buvKS95v6wN6AA8sQ6p3WjqKC6EYjAEFx5kefKU4wZ4y7crlKXikuLFWoPlSPU4ZFOkiLDImW3lT1Dori0WK5Sl0LsIYoIjQgobX5xvkpLS1VqlLq3lRglKir5bdnXsEiPtKZpKiI0QiH2EK9pC4oLZJiGHKEOhdpDlVNYokJXsUJiTBUbJQqzH8tDsVGokNBSFbiK3T9mpUapCksKy3pKwo4toVpYUqhSo1ThIeEKCwnzO61hGiooLpAk7cwocd/tyncVKjzUVPukeN14doq6tYjzSBsdfqwhUVRSpBKjRGEhYQoPCZf026Tk4nxJUlRYVIXv05+0vnz3VpSTyr7P4tJihYQUKTS02OOHoNgokClT+YVlz2OJCLMrNNSUy8hXsQole5Q7gNh0MEMbDzRR52YJfpcTb9+nP2mr++6Pb0C2DQuTaTMUYgtTiC1MpmlqX2aeOidHKDFGHrx99+k5WR5BaYnhkqEShShMIfYwRYaH6EBWqdJzstQ0zubXdx9oOSn/7pMbhSoi1OlTWl/KiSV1REmB8lx5igyPrPB91qScWFlHVHfd+1tHfLd7vz74ca92HyqVq8SUI8yutgkOXdUjSWe2SgiaOqK8cf3zwUNqFhshpyNSRcXS/qwCxUfZdVn3eLmMIkXYAysn5d+nL2nbJYXrDxcla8FPGdqVUaCQokIdKS1Vp+YOXd3Ts2F5fDkpv0nkiJVcRr5ssinMXnbcsBC7QkKKVVhSoqJipzu4Mk1DxWah8gpL5QgLcTf2a1pOjv8+a/pbcuL3mZIYqj9clKyPfjqi7Rl5OphtKDS0VJ2aR+jas1p7fD6+XvfdWsTpDxcl/1ZWC3UwW3KE2dW1RbSGnJGo9k2Pvb8v3/3x9W2bsBDJJoXaHLLbQmSapvZm5qhLcpSaxno+H+vE6/60RKf7Wi4qLVSk/Vg5KSotVNM4m1o3cVZaR0SEHCurdV1HJMZIrZvYtXn/sUcYlP8+5BaaOpznUkJ02RL2LqPsuw+zRbp/U38+eEQ2exNNuqy99mWWtZOcjhAlxdpkt9tkmmaV5aR86N/PBzJUVGIoKixSSbGR2pmRp+bxYSo2C2Q3QxVqL8uvzWZTQoy06UC6dhxqqfZJsVWWk6q+eyt+SyqrI1wlxdqSfkR5RYYSnTHuALq634eIkEh3cBkWWqxWjSIVGR7h029JcUmxikuL3duq+u6tqiPKr1FfVHyaHNySn03WofxD7r+f/uppOdOcGv/ReI90Sc8kyZnm1J6sPe5tr3z3ipxpTt06/1aPtG1faCtnmlObMja5t834cYacaU6NeG+ER9our3RR7JOxWndonXvbu+vflTPNqaGzh3qk7f1GbznTnPpyz5fubQu2LJAzzamB/xnokfaiGRfJmebUx9s+llR25+aosUYvbDpP/9n+e4+0/9t1h17YdJ7SS750/5it+nWVnGlO9Xi1h0fa6/53nZxpTr297m33tnXp6+RMc6rDSx080v5+3u/lTHPq9dWvu7dtP7JdzjSnmj+brBc/26p1v2YpPjJcm13Pafa+i/V/W9/Qi59t1fq9Wdqfs1/ONKfin4z3OO7EjyfKmebUE18+4d6WVZQlZ5pTzjSnSoxjdzsf+OwBOdOceuCzB9zbSowSd9qsoiz39ie+fELONKcmfjzR4/3in4yXM82p/Tn73dteWPWCnGlOjVswziNti+dayJnm1PYj293bXl/9upxpTv1+nufn3uGlDnKmObUu/dh3//a6t9X9jWb6Pudv2p9VIPO3VZje3Dpcz204V7/mrVVhsVH2XJaiL/TchvP05q5j+Y0MD9Gig7ep+xvN9PnOz93bP972sZxpTl004yKPPAz8z0A505xasGWBe9uXe76UM82p3m/09kg7dPZQOdOcenf9u+5ta/avkTPNqS6vdPFIO+K9EXKmOTXjxxnubZsyNsmZ5lTbF9q67842jg7X/7Y/oOc2nKvvD81WbmGJtqXnKtxxRI+v7a1mzzX1OO74j8bLmebU01897d52KP+QnGlOnfeflu67k5K07MA/9dyGc7UifaqksruzoaEunfeflnKmOd0NKEmasmyKnGlOTfp0ksf7lZeT+q4jnGlOrdm/xr3NijrimvnXKPbJWHcdIUmf7/y87LOcdp5H2svfvlzONKfmbZrn3lbbdUSL51p4pB23YJycaU69sOoF9zZ/6oiVO/fonJkt9MTaPoqNtKttQrTiI8P17pandM7MFhr3wT3utPVdR5QPxfo883d6bXtf/XTgJ2UWuMp6rFqv0TkzW+i6/13ncdwer/aQM82pVb+ucm+bt2menGlOXf725R5pz5t2npxpTp/riHNmttCZ7Xfo4au66IazW+ryXpl6fG1vjV3oWaaOryPKewv25GzQcxvO1RtbrnGni4kI1U7zCf2kq7Ut71jdc6hoh57bcK6m7xiiDkkx7t65W+ffKmeaU69894o77Z6sPXKmOZX0TJJHHrzVEc40zx6rSZ9OkjPNqSnLpri35Rfnu9P6WkecM7OF/nRxkqYM7aoHhnRW8xZL9Pja3pr64wMeaf2pI4bM6aEn1vbRqAtD9cCQzpoytKuSk7/ROTNb+F1HHF/fvrF5hJ7bcK52565217e5tm/1+NreGvT2pR7HPbEdITXMOiL2yRg99dP5ZatBpucqt7BEn+57Ws9tOFef/fqa7HabOiQ5VWTm6rkN5+q5DefKUFk7IjI8RKuPTlX3N5rpwaV/02mJTvVoFa/WTSIU+2SM1zqifOjful+z9L99l2pe+gCFhWdr075s7Tycp9WH39ZzG87V4r2PepzHjJ2Xafa+i7Uxfat7m7/tCGea09I6Yv3eLN08+w11f6OZLp91iR6ev0GPLdyo9XuzvLYjzvhXLz22cKMenr9Bjy/cpAEzhyj2yRg98+V0d1pv7YjYJ2P17pZjbY7j2xHHs6qOSH42Wb4iuILaNolWcnxk5S/+Ns+0eVxkna1e5io13V3izohQ97j7BKdDR/Jcmrtmb6UTYE8VzeIiPX4Iyj+Jw3kuOULtah4XIdkqDhcocJWqfBTB/qwCrf0lUzsycmVUsVRufSpvQMZHld05OpLrcjcgx/ZtG9Ax2yc5PYLScuXDqdrVYDiQYZjakZGr/Vlld8JMBd9nisoZhqn5a/e5/3ZGhCrEbpPztwfIStKWg7le6xzDMHU0zyVJyi4srvX6qVuLOPfNrlsvPE1ThnbV34Z0VstGUdXsWTvsdptSEpxKSXSqeZznb0n5tVE+8sEwTXdvyaHcokqPF/Jb/ZVdWKLcwhKVGqbyi8pujNhtanALvpQPN+zRKl6No8MtO26rRlHq0SpepyU6Za/ieVK+KK9vI8LKeiEOZBW669shZzS3Krt1yjB17DeuuuvRJt01oIO6t4xTZoFLOYVlvSGJMQ6lNImWI6zy+VgFrlKFBFAOTXnOOSwX7QhRSmK0DMOs8too/22JdlSep7pWHiTuOlR2s8ERGqL4yLJ53i9+ttV93VbmcF6R+yZ624RohdnLQpJPNhzQ+r1ZVe7XENjME1saUHZ2tuLi4rQvY5+aNWlW78MCs49kq3mz5rLb7bUyLFCS1v5yRM9/tkGZ+SVqGR/vHsf9a2am4qNC9ecBXXRmqyaSanfIz8b9GXp84SYlRMe5h70dP4SrwGVTZoFLD1/VWc3jy87zVBoWWJ5228Ei97DJPFe+HKE2nZ7UWEfzS7Uvs0CnJUaoVC41UqHy7I1lmtK29Fw1jbUpPipUuw4Xq7jEJkeYXSmJEbryjER1b9EoKIYFHv995rsKtONQtgqL7Woc9VuAbzMDGvKzM6PEPUk4KSZE4eGmXMV2pWeXqHF0uO68pL1OSwrz+7vfkV7sHm9f4CpSWKih9klxuvHs09zDfmqzjrB6WKBhGNq9b7cSEhLqZFhgcUmJNqcfVm5RqZKcse7hJHU1LHBHRq4e+mC9nBGGoiNC3EN+ys6jWNmFhcouNPT3q8/UaYnOCnXEhn3Zen/Nr9p88KgKi12KCAtTx6aN3at61VcdYeWQH19+S+yyKz09XU0SmshluGSz2bQjvfi44d0FCg+VOjRtpBt6tZUkPf/pzzqUl6tmsZGKjXC65w7FRpoa3C1JG/blaWdG2Qpt4aFS24QwDT0zWX3aHruDHMzDAq0aOlxXdURuUZ52Hc6VqzhU8VEOtW0SLUOlfg8b97eOiAiJUHp6upKSkuQyXDVqR/z061G9+/027cjIU2mpw73K3lU9EtWxWbTXOqJ8/tPhvDxFhkunNYnT059s17pfs9QuMVolKpRUNixQKvtN7ZIcpXsHt5cjLNzncrLnSKGeWLhN8ZHhckYcP9wwQpJN3+w4rPS8PPVtF6+4yEj3sEDTNPXzwQx1S47TI1f1VGiI/9e9lXVEuN2hJxZt1rpfs35rcxTLJrvC7BFl89XSc9U5OUJ/HXy6x1C/4pISPbLgB23Yl6NOTRPcn0+xUSjDLNWuDJfObJWgvw3pLFOG12GBmYcz1aJ5C9nt9lofFpidna3kxGRlZWUpNjZW3hBcVaI8uPLlA6xthmG4Kx27vXY7Gitb+rNDUkxAkzIDnbC69pdMPb5wk9omRFd6R6jUMLXrUJ4eGNK51pcaDnaVfeYb92e7A4jkuAg1d7i0vyhc+7IKFWq3SbayCeOVTYQ+FVYgqkkZr+p4Hqs6nQSfaX3XOXW93HBN6pyT8fsP1InlxpfPRpLX6zHYFxiBNayqc2rjeqyNY1ZX5xzKLdJ3O4+oeVxE2QqFQVqv7MjI1cPzN7iDxBPlFpYos8ClKUO7eiwUE+h+J6rL3yrJv9iABS28ycuTQirpeg0JkSIiPNNVxW6XIiMDS5ufL5WWypafX7bf8YXHZpOiojzTVhUnn5i2oEAyjArJusWHqkv/NtpVqGM/ZlF22WVWne/oaHcDaffewyouKpEjzK7TEqN19Zkt1DU5ziOtW2GhVFqxuzi2tEixRpEKihxyRpbdYQgpdsleWjakxFVYqljDpdjSomN5ioo6NgyuqEgq8bKKVGTksc/R5ZKKi61JGxFxrKz4k7a4uCx9VRwOKTS00rR2SadF2aSo31bTMkrdwzvmfrdLe/YdUaa9UPlGhM5KcOpIXrH2ZxWoQ2K0jFBTxm9Dn04PjdDufUf14ddb1eWyThUbL+HhUthv71FaWvbdVSUsrCy9v2kNo6xcWpE2NLTsc5PKron8Y3Mjysv47sN5yi0qUXR0hNomNy475xPSVnDCdW/k5Gr+11uUdyRbnROjZZNLckkRkuLiw/RzpuvYqk4FXo5b0zrC1+veh7SGYWrnoVwd+uWQ8gtMta3q4dPHX8tV1CeVpj3uut+wL0uvLtuuo3kuNYuNVITTrmz7sccG/LlvK3Vt5mWopj/XvZe05XVOabapiIgQlYRHyPztug8pLpYrr7BinaPflhP/fo97aE9oSYnsrgJFSIqPtWtHRpbnNVUPdURlaQ17SFnAkluoWFup2lQVsBx/3ZeUlH1uVQkPP5bf0lIZeflVXhuxjRzafLRIc9fs1d8uO93jenQ6Qo/lJy9P9rDjntdkGNJx15FhmJ77NYuXPcJxXNrA6ogapfWnbVCX7QgL6wg3f6776tIen98q2gaVHve4tIZhVihzxbZI9yp7u/Yeqfo3TqqyjugWH6o/n1e2gMiOjCxlFhuyRUUeWw0wMdL791FJO+LEOqdcSZhDZkiIIkJD1CE+XO3jw5SRWfaejjC7eiU6NfTMZHWNDy0771qqI9xpq7nuc3IK3AtF2UtLFFLsedxYw1Rmbr7yjmRJ8Q53fZKTVyTl5inWYSqksGJenLZQHSz+bUVQb+0Iw/A8l9puR3j7nk9kooKsrCxTkplV9pFW/HfFFZ47REVVnk4yzX79PNMmJFSd9uyzPdO2aVN12i5dPNN26VJ12jZtPNOefXbVaRMSPNP261d12qgoc92vmeZtM78zr/vXV+b6My+oOu2JRe36672mvemfn5qT3ltr3vf+T+b3/Yd6P256+rHj3nGH97Q7dx5Le8893tOuX38s7cMPe0/77bfH0j71lPe0S5ceS/vyy97TLlhwLO306d7T/u9/7qSls9/1mvZ/qY+Z973/k3nf+z+Z0++vJg8vv3wsD0uXek/71FPH0n77rfe0Dz98LO369d7T3nPPsbQ7d3pPe8cdZmmpYW5PzzHX/bDVe9oxY44dNzfXe9rrr/csw17SbjrrQnP822vMUf9eZW5Pz2kQdcS6XzPNR+avN3//75Xm7rYdq07rZx3h4YorvH5u973/kznpvbXmdf/6ytxw/iDv30du7rHjjhnjPa0fdcQ/pi5yXxvLhno/7qQps8zxb68x73v/J3PJDbd7z0MQ1BG7X51hPjJ/vTnq36vMZ//wd+/HnT792HEXLPCe9uWXzdLSUnP//v1m6WefeU278Pd3u6+NXz9e5v24ftQRX10z1lz3a2ZZWh/qCLf0dO9pa6mOoB3x27+oqGNlp7S02jrCQzXtiAffXuW+llddeJX34/pRR+z+fr1ZWmqUpbWwHfHyk7Pc9d8nY//i/bh10I4w//c/r2kPvjjVHPXvVeb4t9f41Y7YO+8jr2nn/e7Px347q2lH5PzlL2XlxjQtb0e4/VZHZEmmJDMrK8usDj1XpyBTqvBwxkCPc/ykzEAmdlal0W8LNjSPi5RpWnbYU8apPHTmcJ5LLy/cWLay4JHDmlZP+ajN5/FYzVVqeAwnDQupv7WOypc4zi2qn88tv6hUpYapAlepMvO93OGV5CoxFBkeHBPLfbFo3X6tM7LUPC5SibGO6neoJeXXRp7LSw+FnzJyijTjs61lQ6YsOypOFla2T1o3iZZq4Tc2v6hU29Jz1Tg6XN2DYNhfdRKiHWqfWLaMv+lHQ61ZbITX17MLi4+tCLqrhpmsJ8y5qoR7XOW+fZWPq6zD7nyjtFQZGRlKTEz0HFMaYHf++r1Z+mDlNu1Mz3GPca8whM/H7vydGbl66LNd7nGzoa4i2Y57JldeYamyCl164IrOSkl0VtqdX2Fox29DQtYfLdb7vy0SUJpfqKgQU+3Ku8STT6h0TtFhgV7TlpTIKChwl53dh/P1+EebFBcRruiIEJWGhskILeuit5eWqDCnQHsz85XSJFoZeUUeZWNo7xR1a5tQNv8hPVt5Wbmew3eOV8/DAjfsy9IrX+xSuqtshcvIMLtKc/J0ILtAjaLD9af+7TzLTw2G/OzcddDjMz2eaQ9RphFybNx4lJcf4noe8mMYptI+/lk/ZJQ/tFJKKDqiLDNCpintyMhTtxZxundQR/1yNL9sOGXjuGPzXwIYFrju10w9tXizWjeJ8mj0FEeU5bfUMLV3/xHdN6iDureMr/SwRkSkdh3JLxvCbCtV2zhH1TcVfKgjNuzL0gc/7tXPmSUqLC17dlDHRg5d0z2pYp2jsvrv4SU7FBcdUbbCYHGx7Mc9c6VC/VePdYRhmPrH4k368WCBTmseL5vN5h7GY5qm+zuedPyQKT+HBRohIWXzH5o00e69R6q8NoyQMGWVli1MNGVIJ50W4+Ue7wnXvZGXr38s3qQNe7N1WmK0xwOIS+2h2ny0SGe0jNffLu8oe5GXuodhgWWCZFigERl5bO6MyxXQsMCdGbkVylyxI9J93Rfm5Csnr+DY9XiiemhHlNc5OzLyVFRsyBYVofbNjhtuGATtiOqu+/Xp+Xrxs63KzM5Xq6hQRYTbVegyKv7mnjC9YMOOg5p6/LDw4/aLjY1S6uAuZfPKvLQjDMNQ+tGjSmrZsqx9XMvDArOzsxWX7NuCFvRceRMd7Xkhe0vnzzF9FRUlGYbMvLyy/bxN2Du+0quCx8TM+Dg1/m2S5JpDBdq1cp/uGhBdcZLk8ZX0CbKPFHs+mDXc805oSLipbFeeskMcFc87IsL7ZPaW8eqSHOf/ZGaH49gFUZ3w8GMXWn2lDQs7VuFYmTY0VIqOdpedNtFOtWp1SOt+zVL7uMgTGiUh2pRTotySEJXkmxXLxhe7NCSzSD/+kunfwgMhIdWW94AmrNvtlR7XMEy993NZYHX8k+1D4mPUKq7syfbv/5ypzu2aV/4eNptf12eb1klVfqamaWp/em7Zs4f8vcvpbx1Rw7S7MnL1c1apmrvPwVSJI0LFipJkU+Mkh75Nz9ekxduVnltUs4UnfmtMRjc2JWe0su2VT2gucJXKHhWp6MZxlX4eZXXHpsAWwqiijujaIVqd2zX3uTy2iYxSu2a/ff8Op0rDwlQaVv7AW1O7s3J1RqsktWmdVPH7r+M6YldGrjZlG2raOMZdTo2QUBkhZZ994ySHNma7tKtQOi2xkvIXGnqswVWV8sZzSEj118aR366NpFjfrw27XbsKpU3ZhhonNVZJJeWmeZxdW9NztOtogdeJ8B78ue79rCOCIq0FdUSlvLQN/E57fOAV4b1Xw8NxadtERnktc7/kl1Z9PZ6ojtoR1dY5wdCOqOa6L5/n7W7L5RpyhIWoY7vmuvasFupaWX0cEqKuHZJ1e1R0lfu5F7Q5UlB1fWwYnjcaqmgbVMqftOXXvbeg/wQEV6cIw/B8rkJ5xVM+2XNbeu6xyfc+/tiVPwiywFVaZQPJEWZ3P4/leBVW4Ikra8yXT2YvXw3H5x/Iehbsq1qVPyhy79EC93DL8hWI9mXmu3sOKysbP/2aqWc/2aKkGIfX78pfVq8Ut+twnvvcjv9hlY4NNduanqNdh/MsKVfePtPyVZ0awvN4cgpLPG6SnKiwpFQ7D+WpsLi0bOUqC77/8ucclQcmFRrfWQXHAtMT+Fp3BKL8eUS+pm0o339137HVQ1hr67Op6/NAw9GQrsfj+VPnBKtuLeLUpXms320gb/sFw0qyNUFwdYqojYZnoA2k2gj06lNDqQROvMN0MLssr20TnDJMqWWjqAplQyoLko/mu9S9Raw7iK7pd1UbDeT6aHhV9Zm6V5Kqxe/fqoDe200S0zS17WCOSk1TpyVGW/b9B9oQCra6oz6/f3/U5EZYoGrjs6mP80DD0VCux5ORtyDR229VZfvV5g20ukINdIqojYZnoA2kuu5hqE0NrRKo7E5RVkGx0j76udKJ+TmFJcovLlWY3a6SUs+x+IF+V7XVQK6vhlegd+1qwsqAvuJNkmOvZRcW63CeSwnRDsVGeA4lqem1GkhDKBjrjuq+/2Do1a5JT2FNWH1t1Nd5oOGoj/oYVfP3t8qf9kEwI7g6RdRWwzOQBtLJMrQj2O6i++rEO0U7MnKrLBvFpYaKS0yFhdgUFlpxzl/5d5VVUKwdGbk+/ZjVVgO5thte/t59qy1WB/Qn3iRJjotQrEPKKyrRzow82e02dUhySpX0atb0WvW3IRSsdUdV33+w9GrX55ApK6+Nhjr0C3XrZBhqdzII5LfKn/ZB2yZ+zBGsYwRXp4jabHj620Cq76EdVt1JDsa76IHwVjZCQ2wqMQzFRToU46j8uyouNfTflbt9XuzAqgZyZd9jbTW8gqWRXFsB/fE3Sban5yikqFCZhtQlOU4RYSFyhFX+XVlxrfrTEKrvusMfwdarfbIMmTpZzgM4mQX6WxWsN9D8Vf+/QKgTtX3Hz58GUn0O7bCykXyyVALeysbBrELFR4UpMtxe4flopmlqe0aOcotKFWK3VdmAPDHwjnaE1LiB7O17tLrhFUyN5NoM6Mtvkuw8lKP0g+lKapqkNo2denzRpqAZhtVQhoUFa6/2yTJk6mQ5D6Cu1dUw5UB/qxrSDTRvgjt3CFhlF1Cw3PGrr6EdVjeST5ZKQKr6bnCPVo3Uo1WcFv603+9VBrel5+qNL3aocXS4tmUcC4LaJUarUVS49mUWBNRA9uV7fHBIF0t+QIKtkexrQO/PMM3j2e02pSQ4FW3kKynBKbvdHlTDsBrKsLBg7tU+WYZMnSznAdSVuhyBEejNZ/9uoAXvY3qDv9UHv1V3AdX1Hb9gCPRqo5HcUO6i+8pb2WiX6PRrlUGbzaao8FCt2HZIzeMjlNLE6Q6C1u/NVqjdptAQm98NZJ+/xyGxATW8TiyrhmnWayP5xPz40uvn7zDN6vhyrXq7G2r1ndL6uknkz3mcLL3aAE4OvtyUtLJtGOjNZ39uoBkGwRXqSLA9PypYAr3auJPcUO6i+6Oqu8H+rjJYHlwWlRhKjo2odAnvFvGR7l4tXxvItdkjUFlZjYsMc19LlfGlkRxocFFZfqrr9fNlmGagAVYgzyORVCt3Suv6JpG/d3xPpl5tAA2bLzclKxtlUpO6uiY3n4NllFVNULOfRIJtCFMwBXq1NZzqZKgEfOXPKoM5hSU6mu9SRJhd4ScshlAeBB3Jd+nOAe1lt9l8/rxrq0egqrK681CuDmQVqkl0uFo0qrgyUXWN5ECHYVSVH2+9fr4M06zJ9e/v80g27cuWbFJJqVkrc9XqalhYIMOJT7ZebQANV3U3JasaZVKTurqmN58b+rxKgquTSG2P8/fnDnywBXq+3EmubjhVVeff0CuBQHlrQLpKSlVYbKh5XESlqwyWB0F5RaXq0Sre5/esjR4Bb2W1a3Ks0nOKtPlAjpLjImSzH1uOvrpGcqBz/Hy5dirr9atumKbVQxi95bNdeLSWbs6QTdLFHRPdn1t9L+hQnu/arsdOxl5tAA2Tt5uSvowyCbSurunN54Y8r5Lg6iRSm+P8/b0DH2wTuqu7k1zdcKohZzTXj79kVnn+DbkSCJT3BmShHKF2NY+LqPT5SIEOi6qNHgFvZdVut6tTs1ht2Jel9fuzy+7q+dBIrsnNBV+uncp6/bwN05RqvtiFP59bblGpDLNsPHyuq1QxEceC0vpc0KEu67FTqVcbQN3y5yaRt5uSvowyqUldfarefCa4OonU1jj/QO7A1/eEbn+egVTdcKqffs3Us59sUVKMo96X4g42VTUge7dtrMN5Lu3LLJBpmpYNi6qNHoHqymqzuAgdzi1SSpNoZRa4fGok16RR7uu1c2Kvn7dhmpL1i114y2dxqVH2H1MqLjGqPIe6vP437s+u83rsVG1YAKg9/t4ksmKUSU1uyp2KN58Jrk4itXFXP9A78PU5odvfZyB5G05Vntej+S51bxEbUJd5XT1Xor5U1YAsb8xaPSzK6h4BX8pqY2e4/jywg8/zw2rSKA/02qlp76yVjyIIC/mtp8omhYXaK+xb19d/u8RoHckrrpd67FRsWACoHYGu+leTUSZWr0B7KiC4OonUxl39QO/A19eE7kCegeRtOFVOYYnyi0sVZrerpNRz2U9fusyru8N0sgRelTUga3NYlJU9Ar6W1dMSnD4fvyaN8kCvHW/Xvz+LXfjKWz6djhDZbTbZJDlPuK78uf79vT6quv6/33VU+7MK1TU5tkHUYwBwopqu+hfIKJPaWoH2ZEdwdZKxukEb6B34+pjQHegzkLwNpyouNVRcYiosxFbpHXhvPRDVBXrVzeM6GdTmsCiregRqo6zWpFFek/xUdf37s9hF2yYVV0UM5HM7LSFasknbMvIC+kz9Hfri7fpvHhehXYfztT+rUC3iIyvcoQ2megwAKmPFqn8n3lz2NsqktlegPZkRXJ2ErGzQ1uQOfF1P6K6NXrbQEJtKDENxkY5KxyNXdf7VBXqn0jyuhjAsyuqyasUytIHmx99nkkmBz4GqLp+SAjqHQOZ5erv+w0NDFBFm19F8l3KKShQTEebxejDVYwBQGUtW/Tvh5rJkzU25YP+Nr2sEVycpqxq0NR0WU5cTumujl+1gVqHio8IUGW6XKen4XHs7f28NPanm87hgPavLak0b5TXJjz/PJJNqNgequnz6ew6BzvP0dv3HRISqUVS49mcVylVcKh0XXAVbPQYAlanNVf/q8qbcqYDgCl5ZMSymrnouaqOXrUerRurRKk4Lf9rv1/l7a+jVdB4Xao/VZbWmjfL6uUliVn2gAPLp7zkE2gPt7fp3L2Gf59K+7EI5wkKDth4DgMpYseqft0CoLm/Knez4RFCthjIspjZ72dolOv06f28NvZrM40LDEwyNcn9ukhiG/8GVlQLtga7u+s93leiC9gkVHr4cbPUYAFSmrp8tyYI+gSO4gk+CcViMP8+yqundaX/PvzbmcQE10VBukgTaA+1LAHnbRacFXT0GAL6qy2dLsqBP4Gi9wWfBcAe+nL/PsrKiAenP+dfGPC6gpoLxJsmJanK31NcAMljqMQDwV10+W7Kh3JQLNgRXaHACeZZVfTQgrZ7HBVghmG6SVMaKlRaDPYAEgJqoy2dLUqf6j+AKDUqgz7KqL1bO4wJOFTVtJAR7AAkAtaG2AiHqVP8QXKFBCXQlsfpk1Twu4FTC9QEA/iMQqn8EV2hQAl1JLFhRCQJV4/oAADQ0FdeBBoLY8SuJVYaV9gAAAFBfCK7QoJSvJLY/q2y50eOVryTWISmGlfYAAABQ5wiu0KCUryTWODpc29JzlVtYolLDVG5hibal57LSHgAAAOoNwRUanPKVxLq3jFNmgUu7DuUps8ClM1rG664BHVhpDwAAAPWCiSlokFhJDAAAAMGmXnuu0tLS1Lt3b8XExCgpKUnDhg3T5s2bq90vMzNTqampat68uRwOh04//XR99NFH7tdLS0v14IMPKiUlRZGRkWrXrp0ee+yxCnN00LCVryTWo1W8Tkt0ElgBAACgXtVrz9Xy5cuVmpqq3r17q6SkRPfff78GDRqkjRs3Kjq68gUJXC6XLr30UiUlJem9995TixYttHv3bsXHx7vTPPnkk5o6dapmzpyprl276vvvv9fNN9+suLg43XXXXXV0dgAAAABOJfUaXC1evNjj7xkzZigpKUmrV6/WRRddVOk+b775po4cOaKvv/5aYWFhkqS2bdt6pPn666919dVXa8iQIe7X33nnHX377bfWnwQAAAAAKMjmXGVlZUmSGjduXGWa+fPn67zzzlNqaqo++OADJSYm6qabbtKkSZMUElL2YNnzzz9fr7/+urZs2aLTTz9da9eu1YoVK/Tcc89VesyioiIVFRW5/87OzpYkGYYhwzCsOr2AGIYh0zTrPR9oeCg7CATlBoGg3CBQlB0Eoq7LjT/vEzTBlWEYmjBhgvr27atu3bpVmW7Hjh36/PPPNXLkSH300Ufatm2b7rjjDhUXF+vhhx+WJN13333Kzs5Wp06dFBISotLSUj3++OMaOXJkpcdMS0vTlClTKmzPyMhQYWGhNScYIMMwlJWVJdM0ZbezuCN8R9lBICg3CATlBoGi7CAQdV1ucnJyfE4bNMFVamqq1q9frxUrVnhNZxiGkpKS9PrrryskJES9evXS3r179fTTT7uDq//97396++23NWvWLHXt2lU//vijJkyYoOTkZI0ZM6bCMSdPnqyJEye6/87OzlarVq2UmJio2NhYa0/UT4ZhyGazKTExkUoHfqHsIBCUGwSCcoNAUXYQiLouNxERET6nDYrgavz48VqwYIG++OILtWzZ0mva5s2bKywszD0EUJI6d+6sAwcOyOVyKTw8XPfee6/uu+8+jRgxQpLUvXt37d69W2lpaZUGVw6HQw6Ho8J2u90eFBe6zWYLmrygYaHsIBCUGwSCcoNAUXYQiLosN/68R72WYtM0NX78eM2bN0+ff/65UlJSqt2nb9++2rZt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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Mean: 2.6908 ms\n", - "Median: 2.6896 ms\n", - "Std: 0.0106 ms\n", - "Min: 2.6827 ms\n", - "Max: 2.7886 ms\n" - ] - } - ], - "source": [ - "# Collect 100 samples\n", - "timings = []\n", - "for i in range(100):\n", - " timings.append(benchmark_events(simple_mm, a, b))\n", - "\n", - "plt.figure(figsize=(10, 6))\n", - "plt.scatter(range(100), timings, alpha=0.6)\n", - "plt.axhline(y=np.median(timings), color='r', linestyle='--', label=f'Median: {np.median(timings):.4f} ms')\n", - "plt.axhline(y=np.mean(timings), color='g', linestyle=':', label=f'Mean: {np.mean(timings):.4f} ms')\n", - "plt.title(\"Benchmarking Jitter & Cold Start\")\n", - "plt.ylabel(\"Time (ms)\")\n", - "plt.xlabel(\"Run Index\")\n", - "plt.legend()\n", - "plt.grid(True, alpha=0.3)\n", - "plt.show()\n", - "\n", - "print(f\"Mean: {np.mean(timings):.4f} ms\")\n", - "print(f\"Median: {np.median(timings):.4f} ms\")\n", - "print(f\"Std: {np.std(timings):.4f} ms\")\n", - "print(f\"Min: {np.min(timings):.4f} ms\")\n", - "print(f\"Max: {np.max(timings):.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hX_-OpftzX2i" - }, - "source": [ - "You will see a massive dot at $x=0$ (the cold start), followed by a cloud of dots hovering around the \"true\" time. This visualizes why we need **Warmup** (to skip $x=0$) and **Statistics** (to handle the cloud).\n", - "\n", - "Notice how the **Mean** is pulled upward by the outliers, while the **Median** represents the typical case more accurately. When possible, we should use the **Median** as our final metric.\n", - "\n", - "### Attempt 6: The \"Robust\" Harness (Flushing Cache)\n", - "\n", - "Modern GPUs have large L2 caches (40MB-192MB depending on architecture). If your data fits in the cache, subsequent iterations in your loop will skip the slow VRAM access, artificially inflating your speed. In production, data usually streams in from VRAM, so this \"hot cache\" benchmark is misleading.\n", - "\n", - "**The Fix:**\n", - "We must **flush the L2 cache** between *every single sample*. We do this by writing to a tensor large enough to completely evict the cache contents. KernelBench uses a ~256MB tensor to safely cover all GPU architectures, including the largest caches (e.g., Blackwell at ~192MB)." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.352179Z", - "iopub.status.busy": "2025-12-17T20:56:48.352053Z", - "iopub.status.idle": "2025-12-17T20:56:48.354842Z", - "shell.execute_reply": "2025-12-17T20:56:48.354225Z" - }, - "id": "Kj5azcpxzX2j" - }, - "outputs": [], - "source": [ - "# KernelBench provides utilities to flush the L2 cache\n", - "# This is important for cold cache measurements that simulate real-world inference\n", - "\n", - "def clear_l2_cache(device=DEVICE):\n", - " \"\"\"Flush L2 cache by writing to a large tensor.\n", - " \n", - " L2 cache sizes vary by GPU, so we use 256MB to cover all cases.\n", - " \"\"\"\n", - " dummy = torch.empty((32, 1024, 1024), dtype=torch.int64, device=device) # 256MB\n", - " dummy.fill_(1901) # Force write to thrash cache\n", - " del dummy\n", - "\n", - "# KernelBench also provides clear_l2_cache_triton() for cross-platform support\n", - "# (works on both NVIDIA and AMD GPUs via Triton's device abstraction)\n", - "from src.timing import clear_l2_cache_triton" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Why does flushing the cache matter?\n", - "\n", - "Let's see the cache effect in action. We'll benchmark the same operation twice:\n", - "1. **Without** cache flushing between runs (data stays in L2 cache)\n", - "2. **With** cache flushing between runs (data must be fetched from VRAM each time)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.357339Z", - "iopub.status.busy": "2025-12-17T20:56:48.357229Z", - "iopub.status.idle": "2025-12-17T20:56:48.403430Z", - "shell.execute_reply": "2025-12-17T20:56:48.402471Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Without cache flushing (warm cache):\n", - "\n", - "With cache flushing (cold cache):\n", - "\n", - "Warm cache median: 0.0859 ms\n", - "Cold cache median: 0.0922 ms\n", - "Difference: 0.0063 ms (7.3% slower with cold cache)\n", - "\n", - "Without cache flushing, you measure artificially fast times!\n" - ] - } - ], - "source": [ - "# Demonstrate why L2 cache flushing matters\n", - "# Use a smaller matrix so the effect is visible (data fits in cache)\n", - "N_SMALL = 512\n", - "a_small, b_small = get_data(N_SMALL)\n", - "\n", - "# do warmup runs\n", - "for _ in range(10):\n", - " clear_l2_cache(device=DEVICE)\n", - " benchmark_events(simple_mm, a_small, b_small)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - "\n", - "# Benchmark WITHOUT cache flushing (warm cache - unrealistic)\n", - "print(\"Without cache flushing (warm cache):\")\n", - "times_warm = []\n", - "for i in range(10):\n", - " t = benchmark_events(simple_mm, a_small, b_small)\n", - " times_warm.append(t)\n", - "\n", - "# Benchmark WITH cache flushing (cold cache - realistic)\n", - "print(\"\\nWith cache flushing (cold cache):\")\n", - "times_cold = []\n", - "for i in range(10):\n", - " clear_l2_cache(device=DEVICE) # Flush cache before each measurement\n", - " t = benchmark_events(simple_mm, a_small, b_small)\n", - " times_cold.append(t)\n", - "\n", - "print(f\"\\nWarm cache median: {np.median(times_warm):.4f} ms\")\n", - "print(f\"Cold cache median: {np.median(times_cold):.4f} ms\")\n", - "print(f\"Difference: {np.median(times_cold) - np.median(times_warm):.4f} ms ({(np.median(times_cold)/np.median(times_warm) - 1)*100:.1f}% slower with cold cache)\")\n", - "print(\"\\nWithout cache flushing, you measure artificially fast times!\")" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.405781Z", - "iopub.status.busy": "2025-12-17T20:56:48.405659Z", - "iopub.status.idle": "2025-12-17T20:56:48.489739Z", - "shell.execute_reply": "2025-12-17T20:56:48.488860Z" - } - }, - "outputs": [ - { - "data": { - "image/png": "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R6N79+4PtK2SziHlyQ3YLZCIiIhqNR8fOXFauhTYu1ceFVCbXLm6AoMGARERTKyqgwEDBuCff/7BtWvXHvg+H6r6rly5gtdff/2BEytTYnJFREREtZ6PD7BkCZCYKA+3npUlD14RFGT6roBUuaZNm2bpIpCZaAcaqUqYXBERERH9R6023TxWRFT7VI3OqERERERERNUckysiIiKqMThOFxFVhKnOHUyuiIiIqNqzsbEBIA9FTURUXtpzh/ZcUlG854qIiIiqPSsrK7i7uyMlJQUA4OjoaHDYaw6LTebGOle1CSGQk5ODlJQUuLu7w8rK6oG2x+SKiIiIagRvb28A0CVYhgghIEkSlEolL3TJLFjnqgd3d3fdOeRBMLkiIiKiGkGhUMDHxweenp4oKCgwGCNJEm7evIl69epVmUlmqWZjnav6bGxsHrjFSovJFREREdUoVlZWRi+UJEmCjY0N7O3teaFLZsE6V7vwEyYiIiIiIjIBJldEREREREQmwOSKiIiIiIjIBJhcERERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkioiIiIiIyASYXBEREREREZkAkysiIiIiIiITYHJFRERERERkAkyuiIiIiIiITKBKJFcrV66EWq2Gvb09unbtiiNHjhiNjY+Px1NPPQW1Wg2FQoHly5cXi1m1ahXatm0LV1dXuLq6IigoCL///nslHgEREREREdV2Fk+uNm3ahIiICERGRuLEiRNo164dQkNDkZKSYjA+JycH/v7+WLx4Mby9vQ3GNGzYEIsXL8bx48dx7NgxPProoxg8eDDi4+Mr81CIiIiIiKgWs3hytXTpUkyYMAHh4eEICAjA6tWr4ejoiM8++8xgfOfOnbFkyRI888wzsLOzMxgzcOBA9O/fH82aNUPz5s3x9ttvw9nZGYcPH67MQyEiIiIiolrM2pI712g0OH78OGbPnq1bplQqERISgtjYWJPso6ioCJs3b0Z2djaCgoIMxuTn5yM/P1/3PDMzEwAgSRIkSTJJOSpKkiQIISxeDqo9WOfI3FjnyJxY38jcWOeqv/J8dhZNrtLS0lBUVAQvLy+95V5eXjh37twDbfvUqVMICgpCXl4enJ2d8eOPPyIgIMBg7KJFizB//vxiy1NTU5GXl/dA5XhQkiQhIyMDQggolRZvaKRagHWOzI11jsyJ9Y3MjXWu+rtz506ZYy2aXFWmhx56CHFxccjIyMB3332HsLAw7N2712CCNXv2bEREROieZ2ZmwtfXFyqVCq6uruYsdjGSJEGhUEClUvELSWbBOkfmxjpH5sT6RubGOlf92dvblznWosmVh4cHrKyskJycrLc8OTnZ6GAVZWVra4umTZsCADp27IijR4/igw8+wJo1a4rF2tnZGbx/S6lUVokvgUKhqDJlodqBdY7MjXWOzIn1jcyNda56K8/nZtFP2NbWFh07dkRMTIxumSRJiImJMXp/VEVJkqR3XxUREREREZEpWbxbYEREBMLCwtCpUyd06dIFy5cvR3Z2NsLDwwEAY8aMQYMGDbBo0SIA8iAYZ86c0f1+7do1xMXFwdnZWddSNXv2bPTr1w+NGjXCnTt3EB0djT179mD79u2WOUgiIiIiIqrxLJ5cjRgxAqmpqZg7dy5u3LiBwMBAbNu2TTfIxZUrV/Sa4q5fv4727dvrnkdFRSEqKgrBwcHYs2cPACAlJQVjxoxBUlIS3Nzc0LZtW2zfvh2PP/64WY+NiIiIiIhqD4UQQli6EFVNZmYm3NzckJGRUSUGtEhJSYGnpyf76ZJZsM6RubHOkTmxvpG5sc5Vf+XJDfgJExERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkioiIiIiIyASYXBEREREREZkAkysiIiIiIiITYHJFRERERERkAkyuiIiIiIiITIDJFRERERERkQkwuSIiIiIiIjIBJldEREREREQmwOSKiIiIiIjIBJhcERERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMr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KhEREQgLC0OnTp3QpUsXLF++HNnZ2QgPDwcAjBkzBg0aNMCiRYsAyINgnDlzRvf7tWvXEBcXB2dnZzRt2hQAkJWVhQsXLuj2cenSJcTFxaFu3bpo1KiRmY+QiIiIiIhqC4smVyNGjEBqairmzp2LGzduIDAwENu2bdMNcnHlyhW9Zrjr16+jffv2uudRUVGIiopCcHAw9uzZAwA4duwYevfurYvR3ksVFhaGDRs2VP5BERERERFRraQQQghLF6KqyczMhJubGzIyMqrEgBYpKSnw9PRkP10yC9Y5MjfWOTIn1jcyN9a56q88ucEDfcIXLlzA9u3bdZMLM08jIiIiIqLaqkLJ1c2bNxESEoLmzZujf//+SEpKAgA8//zzmDFjhkkLSEREREREVB1UKLmaPn06rK2tceXKFTg6OuqWjxgxAtu2bTNZ4YiIiIiIiKqLCg1osWPHDmzfvh0NGzbUW96sWTNcvnzZJAUjIiIiIiKqTirUcpWdna3XYqV169Ytg5PxEhERERER1XQVSq569OiBL774QvdcoVBAkiS89957esOgExERERER1RYV6hb43nvv4bHHHsOxY8eg0Wjw6quvIj4+Hrdu3cLBgwdNXUYiIiIiIqIqr0ItV61bt8b58+fxyCOPYPDgwcjOzsaTTz6Jv/76C02aNDF1GYmIiIiIiKq8CrVcAYCbmxvmzJljyrIQERERERFVWxVOrvLy8vC///0PKSkpkCRJb92gQYMeuGBERERERETVSYWSq23btmHMmDFIS0srtk6hUKCoqOiBC0ZERERERFSdVOieqylTpmDYsGFISkqCJEl6DyZWRERERERUG1UouUpOTkZERAS8vLxMXR4iIiIiIqJqqULJ1dNPP409e/aYuChERERERETVV4XuuVqxYgWGDRuG/fv3o02bNrCxsdFbP3XqVJMUjoiIiIiIqLqoUHL1zTffYMeOHbC3t8eePXugUCh06xQKBZMrIiIiIiKqdSqUXM2ZMwfz58/Ha6+9BqWyQj0LiYiIiIiIapQKZUYajQYjRoxgYkVERERERPSfCmVHYWFh2LRpk6nLQkREREREVG1VqFtgUVER3nvvPWzfvh1t27YtNqDF0qVLTVI4IiIiIiKi6qJCydWpU6fQvn17AMDp06f11t07uAUREREREVFtUaHkavfu3aYuBxERERERUbXGESmI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qgru3LkDNze3EmMUoiwpWC0jSRKuX78OFxcXKBQKi5YlMzMTvr6+uHr1KlxdXS1aFqodWOfI3FjnyJxY38jcWOeqPyEE7ty5g/r165fa+siWKwOUSiUaNmxo6WLocXV15ReSzIp1jsyNdY7MifWNzI11rnorrcVKix0/iYiIiIiITIDJFRERERERkQkwuari7OzsEBkZCTs7O0sXhWoJ1jkyN9Y5MifWNzI31rnahQNaEBERERERmQBbroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkqopbuXIl1Go17O3t0bVrVxw5csTSRaIaatGiRejcuTNcXFzg6emJIUOG4O+//7Z0saiWWLx4MRQKBaZNm2bpolANdu3aNTz33HOoV68eHBwc0KZNGxw7dszSxaIaqKioCG+++SYaN24MBwcHNGnSBAsXLgTHkav5mFxVYZs2bUJERAQiIyNx4sQJtGvXDqGhoUhJSbF00agG2rt3LyZNmoTDhw9j586dKCgoQJ8+fZCdnW3polENd/ToUaxZswZt27a1dFGoBrt9+za6d+8OGxsb/P777zhz5gzef/991KlTx9JFoxro3XffxapVq7BixQqcPXsW7777Lt577z189NFHli4aVTIOxV6Fde3aFZ07d8aKFSsAAJIkwdfXF1OmTMFrr71m4dJRTZeamgpPT0/s3bsXPXv2tHRxqIbKyspChw4d8PHHH+Ott95CYGAgli9fbuliUQ302muv4eDBg9i/f7+li0K1wBNPPAEvLy98+umnumVPPfUUHBwc8NVXX1mwZFTZ2HJVRWk0Ghw/fhwhISG6ZUqlEiEhIYiNjbVgyai2yMjIAADUrVvXwiWhmmzSpEkYMGCA3rmOqDJs3boVnTp1wrBhw+Dp6Yn27dtj3bp1li4W1VDdunVDTEwMzp8/DwA4efIkDhw4gH79+lm4ZFTZrC1dADIsLS0NRUVF8PLy0lvu5eWFc+fOWahUVFtIkoRp06ahe/fuaN26taWLQzXUxo0bceLECRw9etTSRaFa4OLFi1i1ahUiIiLw+uuv4+jRo5g6dSpsbW0RFhZm6eJRDfPaa68hMzMTLVq0gJWVFYqKivD2229j1KhRli4aVTImV0RUzKRJk3D69GkcOHDA0kWhGurq1at45ZVXsHPnTtjb21u6OFQLSJKETp06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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Visualize the cache effect\n", - "plt.figure(figsize=(10, 5))\n", - "plt.scatter(range(len(times_warm)), times_warm, alpha=0.7, label=f'Warm Cache (mean={np.mean(times_warm):.4f}ms)', color='orange', s=60)\n", - "plt.scatter(range(len(times_cold)), times_cold, alpha=0.7, label=f'Cold Cache (mean={np.mean(times_cold):.4f}ms)', color='blue', s=60)\n", - "plt.axhline(y=np.mean(times_warm), color='orange', linestyle='--', alpha=0.5)\n", - "plt.axhline(y=np.mean(times_cold), color='blue', linestyle='--', alpha=0.5)\n", - "plt.xlabel('Run Index')\n", - "plt.ylabel('Time (ms)')\n", - "plt.title(f'Cache Effect on {N_SMALL}x{N_SMALL} Matrix Multiplication')\n", - "plt.legend()\n", - "plt.grid(True, alpha=0.3)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "FAaH1cdBzX2j" - }, - "source": [ - "### Putting it all together\n", - "\n", - "We have now discovered that a robust benchmark requires:\n", - "\n", - "1. Device Synchronization\n", - "2. CUDA Events (to avoid CPU overhead)\n", - "3. Warmup Runs (to avoid initialization costs)\n", - "4. Multiple Samples (to handle variance)\n", - "5. Cache Flushing (to simulate VRAM access)\n", - "6. Median/Mean Aggregation (to ignore jitter)\n", - "\n", - "Writing this boilerplate every time is painful. We've packaged all these lessons into **KernelBench's timing module**, which provides multiple timing methods for different use cases. There are also other robust implementations available, such as Triton's `do_bench` [function](https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html).\n", - "\n", - "The default `cuda_event` method in KernelBench implements all of the above automatically, plus an additional insight: **`discard_first`** - discarding the first few trials after warmup, which often still have some initialization overhead." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.492125Z", - "iopub.status.busy": "2025-12-17T20:56:48.491999Z", - "iopub.status.idle": "2025-12-17T20:56:48.816105Z", - "shell.execute_reply": "2025-12-17T20:56:48.815073Z" - }, - "id": "3aVFtWt_zX2j", - "outputId": "6cf1e493-86ca-419e-a8e1-e19486814e09" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using timing method: cuda_event\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "KernelBench cuda_event time: 2.6700 ms\n" - ] - } - ], - "source": [ - "# Get the timing function - cuda_event is the default for trusted code\n", - "timing_fn = get_timing_function(\"cuda_event\")\n", - "\n", - "def final_benchmark(func, *args, num_trials=100):\n", - " \"\"\"Production-ready benchmarking using KernelBench's timing module.\"\"\"\n", - " elapsed_times = timing_fn(\n", - " kernel_fn=func,\n", - " args=list(args),\n", - " num_warmup=10,\n", - " num_trials=num_trials,\n", - " discard_first=1, # Discard first trial for consistency\n", - " verbose=False,\n", - " device=DEVICE\n", - " )\n", - " stats = get_timing_stats(elapsed_times, device=DEVICE)\n", - " return stats[\"mean\"]\n", - "\n", - "t = final_benchmark(simple_mm, a, b)\n", - "print(f\"KernelBench cuda_event time: {t:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "MsZrCYQRzX2j" - }, - "source": [ - "*Note: KernelBench also wraps Triton's `do_bench` if you prefer adaptive trial counts. See the timing methods comparison below for details.*\n", - "\n", - "---\n", - "\n", - "## KernelBench's Timing Methods Explained\n", - "\n", - "Now that we've built up a robust benchmarking harness from first principles, let's explore KernelBench's timing module in depth. We'll examine:\n", - "- **All 4 timing methods** and when to use each\n", - "- **The `discard_first` parameter** and why it improves measurement consistency\n", - "- **How `host_time` detects side-stream exploits** in untrusted code\n", - "\n", - "KernelBench's timing module provides **4 timing methods**, each designed for different use cases:\n", - "\n", - "| Method | Use Case | Catches Side-Streams | Cold Cache | Trial Control |\n", - "|--------|----------|---------------------|------------|---------------|\n", - "| `cuda_event` | Default, trusted code | No | Yes | Explicit |\n", - "| `host_time` | Untrusted code, agent evals | **Yes** | Yes | Explicit |\n", - "| `do_bench` | Triton-style / robust adaptive | No | Yes | Adaptive (time-budget) |\n", - "| `do_bench_impl` | do_bench implementation for inference and trial control | No | Yes | Explicit |\n", - "\n", - "### Method Details\n", - "\n", - "**`cuda_event`** (Default)\n", - "- Uses `torch.cuda.Event` for GPU-side timing\n", - "- Most accurate for pure kernel time measurement\n", - "- Clears L2 cache before each trial for cold-cache performance\n", - "- Use for trusted code where you control the kernel implementation\n", - "\n", - "**`host_time`** (For Untrusted Code)\n", - "- Uses **both** `time.perf_counter()` (host) and `torch.cuda.Event` (device) timing\n", - "- Compares the two: if they differ significantly, the CUDA event time is likely invalid (e.g., side-stream exploit)\n", - "- Falls back to host time when discrepancy detected, ensuring correctness\n", - "- Waits for ALL streams via `torch.cuda.synchronize()`\n", - "- **Essential for evaluating untrusted/agent-generated code**\n", - "\n", - "**`do_bench`** (Triton's Adaptive Benchmarking)\n", - "- Wraps Triton's `triton.testing.do_bench`\n", - "- Uses fixed time budgets: 25ms warmup, 100ms for repetitions\n", - "- Trial count is automatic based on kernel runtime\n", - "- **Note:** `num_warmup`, `num_trials`, `discard_first` parameters are ignored\n", - "\n", - "**`do_bench_impl`** (Transparent Implementation)\n", - "- Custom implementation mirroring Triton's do_bench\n", - "- Gives you explicit control over `num_warmup` and `num_trials`\n", - "- Useful when you need do_bench's approach but with specific trial counts\n", - "\n", - "### Key Parameters\n", - "\n", - "All timing functions share a common interface:\n", - "\n", - "```python\n", - "timing_fn(\n", - " kernel_fn, # Function to time\n", - " args, # List of arguments to pass\n", - " num_warmup=3, # Warmup iterations before timing\n", - " num_trials=10, # Number of timing samples to collect\n", - " discard_first=1, # Drop first N trials after warmup\n", - " device=\"cuda:0\", # Explicit GPU device selection\n", - " verbose=True # Print per-trial timing info\n", - ") -> list[float] # Returns list of elapsed times in ms\n", - "```\n", - "\n", - "### Why `discard_first`?\n", - "\n", - "Even after warmup, the first few timing trials can be affected by:\n", - "- PyTorch's lazy tensor allocation finalizing\n", - "- cuDNN autotuning (still settling optimal algorithms)\n", - "- Driver state initialization\n", - "- First access to data structures\n", - "\n", - "Setting `discard_first=1` (the default) improves measurement consistency. Let's visualize this effect:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Experiment 2: Comparing All 4 Timing Methods\n", - "\n", - "Let's see how the different timing methods compare on the same kernel. Each method has trade-offs between precision, features, and overhead." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.818984Z", - "iopub.status.busy": "2025-12-17T20:56:48.818836Z", - "iopub.status.idle": "2025-12-17T20:56:49.452295Z", - "shell.execute_reply": "2025-12-17T20:56:49.451496Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Comparing all KernelBench timing methods on 4096x4096 matmul:\n", - "======================================================================\n", - "\n", - "Testing cuda_event...\n", - "[Profiling] Using timing method: cuda_event\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n", - " cuda_event: 2.6700 ms (std=0.0034)\n", - "\n", - "Testing host_time...\n", - "[Profiling] Using timing method: host_time\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n", - " host_time: 2.8200 ms (std=0.0022)\n", - "\n", - "Testing do_bench...\n", - "[Profiling] Using timing method: do_bench\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " do_bench: 2.6700 ms (std=0.0012)\n", - "\n", - "Testing do_bench_impl...\n", - "[Profiling] Using timing method: do_bench_impl\n", - " do_bench_impl: Skipped due to AttributeError (Triton version compatibility)\n" - ] - }, - { - "data": { - "image/png": "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VZ88JWlpl1LfLD4+Xr1795aPj4/c3d31v//9T//++2+K7/Eon9mD4uvcubMmTpwoSVZTQkjWfdexY8dajvP+/fvTfFwvXbqkDz/8UBUrVpSbm5s8PDzUqFEj7dmzx6pe0vn+448/avDgwSpYsKDc3d3VunVrxcTEKD4+Xr169ZKvr6/c3NzUpUuXZH2n1atX68UXX5SXl5fc3NxUpkwZffrpp1Z1nJ2dVadOHS1evDhNxw9PpycjhQw8pKJFi8rf318//PCDGjVqJElavny5YmJi1L59e40fPz5Zm7ffflvh4eHq0qWL3nvvPR07dkwTJkzQrl279Ntvv8nZ2VnSnWSLm5ub+vTpIzc3N61bt06fffaZYmNjNXLkSKttXr58WQ0bNlTLli3Vtm1bLViwQB9//LEqVqxoiet+bt26leKorpw5c8rV1VW+vr6aPHmy2rRpo6+//lrvvfeezGazOnfuLHd3d02aNEnSnYTb//73P23evFlvvfWWypYtq71792rMmDH6559/rOb3GTx4sAYNGqSaNWtqyJAhyp49u7Zt26Z169apQYMGaf4Mateurffee0/jx4/Xp59+qrJly0qS5b/3unHjhurUqaPDhw8rJCRExYoV0/z589W5c2dduXJF77//vlX9iIgIXb16VW+//bYcHBw0YsQItWzZUkePHrV8Vplh06ZN+uWXXxQcHCxJCgsLU9OmTdW3b19NmjRJ7777ri5fvqwRI0bozTff1Lp16yxt161bp0aNGqlatWoaOHCgHB0dNXPmTL388svatGmTnn/++Qe+/xdffCEHBwd9/PHHOnfunMaOHav69etr9+7dcnV11RtvvKEhQ4Zo3rx5VnM+JSVlW7VqlaYrxrVr11ahQoUUERFhuQI2b948ubm5qUmTJsnqp/Ucmz17trp166bnn39eb731liQlG/bdtm1bFStWTGFhYdq5c6emTZsmX19fDR8+3FKnW7dumjVrllq3bq0PPvhA27ZtU1hYmP7++28tWrTIUu+zzz7T559/rsaNG6tx48bauXOnGjRooISEhAceAwB40v3++++SpGeffTbF9Wn5rl2zZo0aNWqk4sWLa9CgQbpx44a+/vpr1apVSzt37rQkSXr06KEFCxYoJCRE5cqV08WLF7V582b9/fffevbZZ9WvXz/FxMTo33//1ZgxYyRJbm5uadqPsWPHqmfPnnJzc1O/fv0kSXnz5r1vm8uXL6tp06Zq37692rRpo8mTJ6t9+/aaM2eOevXqpR49eqhjx44aOXKkWrdurVOnTsnd3V2SdPbsWb3wwguWi1U+Pj5avny5unbtqtjY2AfeSpeWvlZa+pv3O2aJiYlq2rSp1q5dq/bt2+v999/X1atXtXr1akVFRVl996blc963b59q1aqlggUL6pNPPlHOnDn1448/qkWLFvrpp5/06quvSrqTOAoLC7N818fGxmr79u3auXOnXnnllVSPycO269atm77//nt17NhRNWvW1Lp161LspzzqZ/ag+N5++239999/Wr16tWbPnp3iNmbOnKmbN2/qrbfekslkkre3d5qP69GjR/Xzzz+rTZs2KlasmM6ePaspU6YoICBA+/fvTza1R1hYmFxdXfXJJ5/o8OHD+vrrr+Xs7CxHR0ddvnxZgwYN0tatWxUeHq5ixYpZ5ofat2+fmjZtqkqVKmnIkCEymUw6fPhwihdQq1WrpsWLFys2NlYeHh73PX54ShnAU2jmzJmGJOPPP/80JkyYYLi7uxvXr183DMMw2rRpY9StW9cwDMMoUqSI0aRJE0u7TZs2GZKMOXPmWG1vxYoVycqTtne3t99+28iRI4dx8+ZNS1lAQIAhyfjuu+8sZfHx8Ua+fPmMVq1aPXBfihQpYkhK8RUWFmZVt0OHDkaOHDmMf/75xxg5cqQhyfj5558t62fPnm04OjoamzZtsmr3zTffGJKM3377zTAMwzh06JDh6OhovPrqq0ZiYqJVXbPZbPl/ScbAgQNTjLlTp06W5fnz5xuSjPXr1yerGxAQYAQEBFiWx44da0gyvv/+e0tZQkKC4e/vb7i5uRmxsbGGYRjGsWPHDElG7ty5jUuXLlnqLl682JBk/Prrr8neKzVJx+rYsWPJ1g0cONC490+pJMNkMlnVnzJliiHJyJcvnyVGwzCM0NBQq22bzWajVKlSRmBgoNWxvH79ulGsWDHjlVdeuW+s69evNyQZBQsWtHqfH3/80ZBkjBs3zlLm7+9v1KhRw6r9woULU/0sUtrv8+fPGx9++KFRsmRJy7rq1asbXbp0sRyL4OBgy7q0nmOGYRg5c+a0Ok/ufe8333zTqvzVV181cufObVnevXu3Icno1q2bVb0PP/zQkGSsW7fOMAzDOHfunJE9e3ajSZMmVsf8008/NSSlGAMAPE369+9vSDKuXr1qVZ6e79oqVaoYvr6+xsWLFy1le/bsMRwdHY2goCBLmaenp9X3RkqaNGliFClS5KH2pXz58lb9iiRJ3593f/8l9dEiIiIsZQcOHDAkGY6OjsbWrVst5StXrjQkGTNnzrSUde3a1cifP79x4cIFq/dq37694enpmWJfMUla+1pp7W+mdsxmzJhhSDJGjx6dbF3S+6Tnc65Xr55RsWJFq/c2m81GzZo1jVKlSlnKKleubNXHTqu0tLu3b5bUH3j33Xet6nXs2DFZX/VRPrO0xhccHJys72gY/3ecPTw8jHPnzlmtS+txvXnzZrLz5dixY4bJZDKGDBliKUs63ytUqGAkJCRYyjt06GA4ODgYjRo1stqGv7+/1fkzZswYSz/wQSIiIgxJxrZt2x5YF08nbt/DU69t27a6ceOGlixZoqtXr2rJkiWp3nY0f/58eXp66pVXXtGFCxcsr2rVqsnNzU3r16+31HV1dbX8/9WrV3XhwgW99NJLun79utWtTtKdq1V3zwmVPXt2Pf/88zp69Gia9qFGjRpavXp1ste9k5FOmDBBnp6eat26tQYMGKA33nhDzZs3t9q/smXL6plnnrHav5dfflmSLPv3888/y2w267PPPkv2BJ60PoL3YS1btkz58uWz2jdnZ2e99957unbtmjZs2GBVv127dsqVK5dl+aWXXpKkNB/bh1WvXj2rofE1atSQJLVq1cpyBfXu8qR4du/erUOHDqljx466ePGi5TOIi4tTvXr1tHHjRsujuO8nKCjI6n1at26t/Pnza9myZVZ1tm3bZjU8f86cOfLz81NAQECa97Vjx446fPiw/vzzT8t/7/dvKC3nWFr06NHDavmll17SxYsXFRsbK0mWfe3Tp49VvaSHAixdulTSnav3CQkJ6tmzp9X5+zRMBgsAaXHx4kVly5Yt1RFJD/quPXPmjHbv3q3OnTvL29vbUq9SpUp65ZVXrL6bvLy8tG3bNv3333+ZsSvp5ubmpvbt21uWy5QpIy8vL5UtW9byHS4l/z43DEM//fSTmjVrJsMwrL7zAgMDFRMTY7klMSVp7Wulp7+Zkp9++kl58uRRz549k627t0/3oM/50qVLWrdundq2bWuJ5cKFC7p48aICAwN16NAhnT59WtKdz3nfvn06dOjQA2O828O0Szq/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smXL9OabbypfvnySxJBt2FXS6JO+fftqzpw5ql69uvbv36/vvvtO77//vl577TU7R4in1e7du7V06VL9/vvvcnNzk4ODgxYsWKAZM2bo6NGjWrFihYYMGaKbN2+qVatW9g4XgKS///5b8fHxqlev3kO3f/XVV63K/P39tWLFCsvytWvXNGjQIC1dulRnzpzR7du3dePGjTSNlNq7d68SExNVunRpq/L4+Hjlzp1bktS4cWM5Ozvrl19+Ufv27fXTTz/Jw8ND9evXl3RntObhw4fl7u5utY2bN2/qyJEjluXy5cvLycnJspw/f37t3bs3jUcCeDpVqlTJajl//vw6d+6c/v77b/n5+cnPz8+yrly5cvLy8tLff/+t6tWrq0+fPurWrZtmz56t+vXrq02bNipRokSmx1y0aFGrvwd58+aVk5OTpY+dVHbu3DlJd/6GXLt2zfI3J8mNGzes/obg8UZSClmG8f8nM09ISJCzs7MqVaqkSpUqafbs2fLx8VGPHj1UpEgRq0nPDSZAh43Nnj1bc+bM0ZIlS1S1alXNnTtXHTt2VK5cuewdGp5iVapU0ZAhQ/T1119r+PDhKlq0qN5++23VrVtXdevWVaVKlTR+/HgNHz5cDg4Oatmypb1DBp5695sAOOkHmnHXbeFJcyylx4cffqjVq1frq6++UsmSJeXq6qrWrVtb3TqXmmvXrsnJyUk7duywShhJkpubmyQpe/bsat26tSIiItS+fXtFRESoXbt2ypYtm2Ub1apV05w5c5Jt38fHx/L/zs7OVuscHByYGw94gEf5dzNo0CB17NhRS5cu1fLlyzVw4EDNnTs3WaI7o6UU8/3249q1a8qfP79lLru7pfcJgbAfklLIEpKesifduQKXPXt2DRs2TJLk6+urr776SpL0zjvvqHDhwpLujAyoUqWKXeLF0+vYsWNq2LChJSHVo0cPTZw4UY0bN9b169d1+fJlFSxY0N5h4imSmJgoJycnBQYGymw2a+LEiZozZ466du1qqVO9enW9//77Gj9+vEaMGKHr16/r9ddft2PUAEqVKiVXV1etXbtW3bp1s1qXlLA5c+aM5aLH7t27reqULVvWat4VSdq6davV8m+//abOnTtbfmheu3bNapLx+6lataoSExN17tw5vfTSS6nWe+211/TKK69o3759WrdundW8Vs8++6zmzZsn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JcrKyjhx4gQRERGYTCZKS0uxWCzaFiU+c/ToUeLj4+nevTvvvvsuDz74oNG2c+dObDYbVquVzMzMVhylyB/WrVvHzJkzmTt3LhMmTKBz587MmTOHhx56yHhH/7ptWkRERETE3yiUkutkZ2eTmJjIokWLSEtLw+VyUV5eTnFxMbfffjtWq9VYhaItJ+JLpaWlTJkyhf79+zN37lz69u1rtB08eJBHHnlE76TcMrZu3UpSUpJx+mNISAiHDh0iMDBQgb6IiIiICAql/FLTyVBmZiadO3dm1qxZze7JysoiKSmJjIwMbDbbdX9DgZS0lsOHDzN9+nT69etHcnIyffr0adaud1NuJb/++iuVlZVcuXKFoUOHEhAQoFP2RERERET+TfsG/IzH4zECqaqqKurq6khMTKSgoMC4x+v1Mm3aNBISEoxtfH+lSb+0lujoaNauXcuRI0dIS0ujvLy8WbveTbmV3HvvvQwYMIBhw4apzpmIiIiIyF8olPIjTeuXLFu2jLfeeovRo0ezePFiXnjhBfLz84E/Cu9aLBbuu+8+hg4dyr59+9CCOrmVREdHs2rVKjp27Eh4eHhrD0fkv6bQVERERETkT/q51o80BlI2m42cnBwcDgfdunUjJSUFp9PJiy++iNfrJSEhAZPJxE8//cRrr72G1WoFUA0UuaXExMQwYMAATCaTCkaLiIiIiIj8A6mmlJ/58ssvmTFjBvn5+QwePNi4Xltby3vvvUdaWhoPP/wwtbW1BAUFUVJSolP25Jamd1NEREREROSfSSul/ExFRQW33XZbs1PLADp06EBqairDhg1j9+7dtG/fHpvNhsViUeFouaUpkBIREREREflnUijlJxpXk9TV1eF2u5tdb2z7+OOPiY6OZsmSJUa7TokSERERERERkZagIix+onE1yfDhw/nxxx9Zvny5cd1sNnPlyhU2bNjAnj17mvVTICUiIiIiIiIiLUE1pfxQdnY2s2fPJjExEavVSrt27cjIyKCqqsqoISUiIiIiIiIi0pIUSvkhr9fL9u3bmTNnDm63m+DgYLp06UJhYSGBgYGqISUiIiIiIiIiLU6hlB/7/fffqampwePx0L17d8xms2pIiYiIiIiIiIhPKJQSg8fjwWxWmTERERERERERaXkKpURERERERERExOe0LEZERERERERERHxOoZSIiIiIiIiIiPicQikREREREREREfE5hVIiIiIiIiIiIuJzCqVERERERERERMTnFEqJiIiIiIiIiIjPKZQSERERERERERGfUyglIiIiIiIiIiI+p1BKRERERERERER8TqGUiIiIiIiIiIj43L8AZI7j5yHk9CMAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Key insight: host_time is slightly slower due to CPU overhead,\n", - "but it catches ALL work on ALL streams - essential for untrusted code!\n" - ] - } - ], - "source": [ - "# Experiment 2: Compare all 4 timing methods\n", - "print(\"Comparing all KernelBench timing methods on 4096x4096 matmul:\")\n", - "print(\"=\" * 70)\n", - "\n", - "methods = [\"cuda_event\", \"host_time\", \"do_bench\", \"do_bench_impl\"]\n", - "results = {}\n", - "\n", - "for method in methods:\n", - " print(f\"\\nTesting {method}...\")\n", - " try:\n", - " method_fn = get_timing_function(method)\n", - " times = method_fn(\n", - " simple_mm, \n", - " [a, b], \n", - " num_warmup=10, \n", - " num_trials=50, \n", - " verbose=False,\n", - " device=DEVICE\n", - " )\n", - " results[method] = get_timing_stats(times, device=DEVICE)\n", - " print(f\" {method}: {results[method]['mean']:.4f} ms (std={results[method]['std']:.4f})\")\n", - " except Exception as e:\n", - " print(f\" {method}: Skipped due to {type(e).__name__} (Triton version compatibility)\")\n", - " # Remove from list if it failed\n", - " methods = [m for m in methods if m in results]\n", - "\n", - "# Only plot if we have results\n", - "if results:\n", - " # Visualize the comparison\n", - " fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", - "\n", - " # Bar chart of mean times\n", - " available_methods = [m for m in methods if m in results]\n", - " means = [results[m]['mean'] for m in available_methods]\n", - " stds = [results[m]['std'] for m in available_methods]\n", - " colors = ['#2ecc71', '#e74c3c', '#3498db', '#9b59b6'][:len(available_methods)]\n", - "\n", - " axes[0].bar(available_methods, means, yerr=stds, capsize=5, color=colors, alpha=0.8)\n", - " axes[0].set_ylabel('Time (ms)')\n", - " axes[0].set_title('Mean Execution Time by Method')\n", - " axes[0].tick_params(axis='x', rotation=45)\n", - "\n", - " # Highlight cuda_event vs host_time with truncated y-axis for readability\n", - " if 'cuda_event' in results and 'host_time' in results:\n", - " cuda_mean = results['cuda_event']['mean']\n", - " host_mean = results['host_time']['mean']\n", - " \n", - " axes[1].bar(['cuda_event', 'host_time'], \n", - " [cuda_mean, host_mean], \n", - " color=['#2ecc71', '#e74c3c'], alpha=0.8)\n", - " axes[1].set_ylabel('Time (ms)')\n", - " axes[1].set_title('cuda_event vs host_time\\n(host_time catches side-streams)\\n(graph truncated for readability)')\n", - " \n", - " # Truncate y-axis to make the difference easier to see\n", - " min_val = min(cuda_mean, host_mean)\n", - " max_val = max(cuda_mean, host_mean)\n", - " margin = (max_val - min_val) * 2 # Add margin around the data\n", - " axes[1].set_ylim(min_val - margin, max_val + margin)\n", - " else:\n", - " axes[1].text(0.5, 0.5, 'Comparison unavailable', ha='center', va='center')\n", - " axes[1].set_axis_off()\n", - "\n", - " plt.tight_layout()\n", - " plt.show()\n", - "\n", - "print(\"\\nKey insight: host_time is slightly slower due to CPU overhead,\")\n", - "print(\"but it catches ALL work on ALL streams - essential for untrusted code!\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The `discard_first` Effect\n", - "\n", - "Even after warmup, the first timing trial can be affected by lazy initialization. Let's see this in action." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T20:56:49.454708Z", - "iopub.status.busy": "2025-12-17T20:56:49.454585Z", - "iopub.status.idle": "2025-12-17T20:56:49.556972Z", - "shell.execute_reply": "2025-12-17T20:56:49.556169Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Demonstrating the discard_first effect:\n", - "============================================================\n", - "[Profiling] Using timing method: cuda_event\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 15\n", - "\n", - "First trial: 0.3438 ms\n", - "Mean of all trials: 0.3434 ms\n", - "Mean without first: 0.3434 ms\n", - "First trial overhead: 0.1%\n" - ] - }, - { - "data": { - "image/png": "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4+NFAOLGjRsrfDbHjx+Xy9LT08VmzZqJAMRLly5V+ZmJ4r22q+zVpk0bjVgA4vjx4zXKyvbbTz/9VKN81KhRopOTk5iZmalRPmzYMLFZs2by9q1du1YEIC5ZsqRC3co+o4yMDBGAOG/evGq3pcyaNWs0Pvf7abtfDh8+XDQzM9MoO3nyZIVjtKye2rZrdcdRZcaPHy86ODjI78PDw8U+ffqI9vb24qpVq0RRFMWbN2+KKpVKXLp0abXbGRkZKapUKjE1NVVjOys7x4ii1N5GRkYa+9AXX3whAhAdHR3F3NxcuXzWrFkV9jdXV9dKzz/lj/my48fZ2VljmVu3bhUBaGxXGS8vL/GZZ56pUE5EDY9dHInokbdixQrs27dP41WTt956S+N9s2bNAAB79+5FQUFBvdSzKmPHjtUq7v5fvMuuGvbt2xcXL16Uu2Fq6/bt2wAACwuLKmPKpuXm5gIAvLy84OPjgy1btsgxpaWl+O677/D888/L9du2bRuaNWuGgQMHIjMzU3516dIF5ubmOHjwoMZ63N3dERAQUGkdwsLCNO5ZKruicfHiRQDA6dOn8ffff+O1117DzZs35XXl5+ejf//++Pnnn+Wuifd/fiUlJbh58yZatWoFKysrJCYmytN2796N7t27a1yhsbOzk7upaWv79u0V9st169bVahllRFHE9u3b8fzzz0MURY3PNSAgADk5OfI2bN++Hba2tpgwYUKF5Tzooxtu3rwJAGjevHmFaXW5X5apTbuW0fY46t27N9LS0pCUlARAuqLVp08f9O7dG3FxcQCkq2qiKGpcQbt/O/Pz85GZmYkePXpAFEX8+uuvFdZT/hxTpn///hrdVrt16wYAePnllzWOx7Lysn39QYSGhmosMygoCE5OTti9e3eF2ObNm1foiUBEusEujkT0yOvatWuthiHX19fHY489plHm7u6O8PBwLFmyBJs3b0bv3r0xePBgvP7663LyVl/Kj0BZlaNHj2LevHmIj4+vkETm5OTUqp5lX9rKErXKVJbEBQcH45133sHVq1fh7OyMQ4cOIT09HcHBwXLM33//jZycHNjb21e63PT0dI331W1/y5YtNd6XJQhl97L9/fffAKRh6auSk5OD5s2b486dO4iMjMS6detw9epVjW5w9ycSqamp8pfj+93f9VIbffr0qXGQEG1lZGQgOzsbX375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VBQUFMDOzg6dO3fGgAED4OLiUl/1JCIiIiIiavS0uoJ2584dfPDBB3BxccGzzz6L//3vf8jOzoaenh4uXLiAefPmwd3dHc8++ywSEhLqu85ERERERESNklZX0Ly8vODn54evvvoKAwcOhIGBQYWY1NRUfPPNNxg2bBhmz56N0aNH13lliYiIiIiIGjOtErSffvoJ7dq1qzbG1dUVs2bNwrRp03D58uU6qRwREREREVFTolUXx5qSs/sZGBjA09PzgStERERERETUVNV6FMc9e/bgyJEj8vsVK1bAx8cHr732Gm7dulWnlSMiIiIiImpKap2gRUREIDc3FwDw+++/Y+rUqXj22Wdx6dIlhIeH13kFiYiIiIiImopaDbMPAJcuXUL79u0BANu3b8dzzz2Hjz76CImJiXj22WfrvIJERERERERNRa2voBkaGqKgoAAAsH//fjz99NMAAGtra/nKGhEREREREdVera+g9erVC+Hh4ejZsydOnDiBLVu2AAD++usvPPbYY3VeQSIiIiIioqai1lfQli9fDn19fXz33XdYtWoVnJ2dAQD/+9//MGjQoDqvIBERERE1TikpwH/+A6xZI/2bkqLrGhHpXq2voLVs2RIxMTEVyj/77LM6qRARERERNW7XrwOLFgFxcUBuLqBWA4IAWFoCffoAU6cCTk66riWRbtQ6QSuTnp6O9PR0CIKgUd6xY8eHrhQRERERNU7XrwPjxgFnzwJ2doCn570ELTsb2LkTSE4GVq5kkkZNU60TtFOnTmH48OE4d+4cRFEEAKhUKoiiCJVKhdLS0jqvJBERERE1DosWScmZhwdgYHCvXK0GrK0BCwtp+pIlwKef6q6eRLpS6wRt5MiR8PLywtdffw0HBweoVKr6qBcRERERNTIpKVK3Rjs7zeTsfgYG0vTDh6V4N7cGrCCRAtQ6Qbt48SK2b9+OVq1a1Ud9iIiIiKiRio+X7jnz9Kw+zspK6uaYkMAEjZqeWo/i2L9/f/z222/1URciIiIiasTy86WujOoavoGWxeTlNUy9iJSk1lfQ1qxZg+HDh+OPP/7A448/DoNy16cHDx5cZ5UjIiIiosbDzEwaDEQQqk/SymLMzRuubkRKUesELT4+HkePHsX//ve/CtM4SAgRERERVcXPTxpKPztbGhCkKtnZUpyfX0PVjEg5at3FccKECXj99ddx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vb29Im6SbOrYHsrDNlEetomysD2Uh22iPGwTZVFae2ibG+i+pkRERERERASACRoREREREZFiMEEjIiIiIiJSCCZoRERERERECsEEjYiIiIiISCGYoBERERERESkEEzQiIiIiIiKFYIJGRERERESkEEzQiIiIiIiIFIIJGhERERERkUIwQSMiIiIiIlIIJmhEREREREQKwQSNiIiIiIhIIZigERERERERKQQTNCIiIiIiIoVggkZERERERKQQTNCIiIiIiIgUggkaERERERGRQujrugJERESNVUoKEB8P5OcDZmaAnx/g5qbrWhERkZIxQSMiIqpj168DixYBcXFAbi6gVgOCAFhaAn36AFOnAk5Ouq4lEREpERM0IiKiOnT9OjBuHHD2LGBn9//t3XtQVAUfxvFnuSPX0BQ2QanBvJuKOGhvvpOoqZmOU04NEmb94YghmqaToo7lBSvzmoaVU6alf4SVo+MgKV4mkCQo826kmBdeSwUxktk97x+8UiSibwLnyH4/MztyLss+Mz/X09M5e1Z66KE/C9rly9KXX0onT0rvvktJAwDcjM+gAQBQj956q6qcPfigFBJSVc6kqj9DQqrW//ijtHixuTkBANZEQQMAoJ78/HPVZY333y95eta+j6dn1fbs7Kr9AQD4KwoaAAD15Jtvqj5zFhxc937BwVX75eQ0RioAwL2EggYAQD0pL6+6lNHtNkfXG/tcvdo4uQAA9w4KGgAA9cTPr+pmIE5n3fvd2Mffv3FyAQDuHRQ0AADqSWxs1a30L1+ue7/Ll6v2i41tjFQAgHsJBQ0AgHrStq30r39J//mPVFlZ+z6VldLFi1K/flKbNo0aDwBwD6CgAQBQj6ZMkTp1kn76Sfrttz8vd3Q6q5aLiqSOHaXJk83NCQCwJgoaAAD1KCys6kuohw+vOlt28uSfj8pK6amn+JJqAMCteZgdAACApiYsTHrzzarvOcvJqbpbo79/1WfOuKwRAFAXChoAAA2kbduqBwAAd4pLHAEAAADAIihoAAAAAGARFDQAAAAAsAgKGgAAAABYBAUNAAAAACyCggYAAAAAFkFBAwAAAACLoKABAAAAgEVQ0AAAAADAIjzMDtCUGYYhSSotLTU5ieR0OlVWViYfHx+5udHLzcY8rIeZWA8zsRbmYT3MxHqYibVYbR43OsGNjnArFLQGVFZWJkkK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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "The first trial often shows initialization overhead even after warmup.\n", - "Using discard_first=1 (default) gives more consistent measurements.\n" - ] - } - ], - "source": [ - "# Demonstrate the discard_first effect\n", - "# Even after warmup, the first timing trial can have higher overhead\n", - "\n", - "print(\"Demonstrating the discard_first effect:\")\n", - "print(\"=\" * 60)\n", - "\n", - "# Create fresh data and clear caches to make initialization overhead more visible\n", - "torch.cuda.empty_cache()\n", - "a_fresh, b_fresh = get_data(2048)\n", - "\n", - "# Collect trials with discard_first=0 to see ALL trials including the first one\n", - "timing_fn = get_timing_function(\"cuda_event\")\n", - "times_all = timing_fn(\n", - " simple_mm, [a_fresh, b_fresh],\n", - " num_warmup=3,\n", - " num_trials=15,\n", - " discard_first=0, # Keep ALL trials including first\n", - " verbose=False,\n", - " device=DEVICE\n", - ")\n", - "\n", - "# Calculate statistics\n", - "first_trial = times_all[0]\n", - "remaining_trials = times_all[1:]\n", - "mean_all = np.mean(times_all)\n", - "mean_remaining = np.mean(remaining_trials)\n", - "\n", - "print(f\"\\nFirst trial: {first_trial:.4f} ms\")\n", - "print(f\"Mean of all trials: {mean_all:.4f} ms\")\n", - "print(f\"Mean without first: {mean_remaining:.4f} ms\")\n", - "print(f\"First trial overhead: {((first_trial / mean_remaining) - 1) * 100:.1f}%\")\n", - "\n", - "# Visualize the effect with a scatter plot\n", - "plt.figure(figsize=(10, 5))\n", - "plt.scatter(range(len(times_all)), times_all, alpha=0.7, color='blue', s=60)\n", - "plt.scatter([0], [first_trial], color='red', s=100, zorder=5, label=f'First trial: {first_trial:.3f}ms')\n", - "plt.axhline(y=mean_remaining, color='green', linestyle='--', alpha=0.7, \n", - " label=f'Mean (without first): {mean_remaining:.3f}ms')\n", - "plt.axhline(y=mean_all, color='orange', linestyle=':', alpha=0.7,\n", - " label=f'Mean (all): {mean_all:.3f}ms')\n", - "plt.xlabel('Trial Index')\n", - "plt.ylabel('Time (ms)')\n", - "plt.title('First Trial Overhead Effect (after warmup)')\n", - "plt.legend(loc='upper right')\n", - "plt.grid(True, alpha=0.3)\n", - "plt.show()\n", - "\n", - "print(\"\\nThe first trial often shows initialization overhead even after warmup.\")\n", - "print(\"Using discard_first=1 (default) gives more consistent measurements.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "HwsjlhAazX2j" - }, - "source": [ - "## The \"Agent\" Trap: Reward Hacking via Hidden Streams\n", - "\n", - "When evaluating LLM-generated kernels (like with [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), you're not just fighting measurement noise—you're fighting an optimizer that may inadvertently discover exploits in your harness.\n", - "\n", - "One such exploit: launching work on a **side stream** to make the kernel appear instantaneous." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:49.559529Z", - "iopub.status.busy": "2025-12-17T20:56:49.559407Z", - "iopub.status.idle": "2025-12-17T20:56:49.893598Z", - "shell.execute_reply": "2025-12-17T20:56:49.892579Z" - }, - "id": "UuwtML39zX2j", - "outputId": "95ebbb26-e415-491a-da30-6a78ce387906" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Standard benchmark on tricky kernel: 0.0577 ms\n" - ] - } - ], - "source": [ - "def tricky_agent_kernel(a, b):\n", - " \"\"\"A 'clever' kernel that games the benchmarking harness.\"\"\"\n", - " # The agent creates a new stream to \"optimize\"\n", - " s = torch.cuda.Stream()\n", - " with torch.cuda.stream(s):\n", - " # This work happens on a side channel!\n", - " result = torch.matmul(a, b)\n", - " return result\n", - "\n", - "print(f\"Standard benchmark on tricky kernel: {final_benchmark(tricky_agent_kernel, a, b):.4f} ms\")\n", - "# Likely reports ~0.00ms or very close to it!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3HXns_XizX2j" - }, - "source": [ - "**The Issue:**\n", - "Standard benchmarking tools (including `do_bench`) record events on the *current default stream*.\n", - "\n", - "1. Benchmark starts timer on Stream A (the default stream).\n", - "2. Agent launches work on Stream B and returns immediately.\n", - "3. Benchmark stops timer on Stream A.\n", - "\n", - "Since Stream A had no work, the timer reports `~0.00ms`, while Stream B is still churning away in the background.\n", - "\n", - "**Why this matters for evals:**\n", - "If your reward signal is \"lower time = better score,\" an agent that discovers this pattern will be rewarded for producing *broken* code. The kernel \"runs\" instantly because you never measured it at all.\n", - "\n", - "**Mitigations:**\n", - "- **Wall-clock + full device sync:** Trade precision for correctness (catches all streams, but includes CPU overhead)\n", - "- **Static analysis:** Reject submissions that create `torch.cuda.Stream()` objects\n", - "- **Manual inspection:** For high-stakes evals, benchmark kernels in isolation outside the automated harness\n", - "\n", - "### How KernelBench Addresses This\n", - "\n", - "KernelBench's timing module provides the **`host_time`** method specifically designed for evaluating untrusted code:\n", - "\n", - "**Use `torch.cuda.synchronize()`** before AND after timing - this waits for ALL streams on the device, not just the default stream\n", - "\n", - "```python\n", - "# For trusted code (faster, but can be fooled)\n", - "timing_fn = get_timing_function(\"cuda_event\")\n", - "\n", - "# For untrusted/agent code (catches side-streams)\n", - "timing_fn = get_timing_function(\"host_time\")\n", - "```\n", - "\n", - "The trade-off: `host_time` includes some CPU overhead in the measurement. However, note that host_time should be pretty similar to sync_time. Therefore, if both times are within a some percent of each other, you can be pretty sure that the kernel is running correctly and score using sync_time." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:49.895966Z", - "iopub.status.busy": "2025-12-17T20:56:49.895842Z", - "iopub.status.idle": "2025-12-17T20:56:49.905191Z", - "shell.execute_reply": "2025-12-17T20:56:49.904402Z" - }, - "id": "KbAFqiyizX2j", - "outputId": "6bc91db4-935c-4af9-bdc9-be3c50e890c4" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Robust benchmark on tricky kernel: 2.7711 ms\n", - "Robust benchmark on normal kernel: 2.7269 ms\n" - ] - } - ], - "source": [ - "def benchmark_untrusted(func, *args):\n", - " \"\"\"Benchmark untrusted code by using wall-clock time with full device sync.\n", - "\n", - " This trades some precision (includes CPU overhead) for correctness\n", - " (catches work on any stream).\n", - " \"\"\"\n", - " torch.cuda.synchronize() # Clear any pending work\n", - " start = time.perf_counter()\n", - " func(*args)\n", - " torch.cuda.synchronize() # Wait for ALL streams\n", - " end = time.perf_counter()\n", - " return (end - start) * 1000\n", - "\n", - "print(f\"Robust benchmark on tricky kernel: {benchmark_untrusted(tricky_agent_kernel, a, b):.4f} ms\")\n", - "print(f\"Robust benchmark on normal kernel: {benchmark_untrusted(simple_mm, a, b):.4f} ms\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T20:56:49.907214Z", - "iopub.status.busy": "2025-12-17T20:56:49.907092Z", - "iopub.status.idle": "2025-12-17T20:56:50.122347Z", - "shell.execute_reply": "2025-12-17T20:56:50.121575Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Side-Stream Detection Experiment:\n", - "============================================================\n", - "[Profiling] Using timing method: cuda_event\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", - "[Profiling] Using timing method: host_time\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", - "\n", - "Tricky kernel with cuda_event: 0.1000 ms (FOOLED!)\n", - "Tricky kernel with host_time: 2.8900 ms (CORRECT)\n", - "Normal kernel with host_time: 2.8100 ms (reference)\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcRVJREFUeJzt3Xd4VGX+/vF70ia9kUYJhE5CDUUBhViACMqCjaZLE8sqsogV3a+AygJW1orgCqjLiopgoymCIiBVQHoniAkkQBLSQ+b5/cGPWYYESEKGSeD9uq65LuY5zznnc06YJ3PnNIsxxggAAAAAAFQ4N1cXAAAAAADAlYrQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAXERMTo8GDB1+034wZM2SxWHTgwAGn14Qrxw033KAbbrjB1WVcdhaLRWPHjnV1GZA0duxYWSwWpaWlubqUSzZ48GDFxMS4ugwAcEDoBnDV+v3333XXXXepTp068vb2Vs2aNdW1a1e99dZbri7NwTfffKOEhARFRETI19dX9erVU58+fbRw4UJ7nz///FNjx47Vxo0bXVeokyxbtkwWi8X+slqtioyM1A033KB//vOfSk1NLfeyL9d+27Ztm8aOHcsfZCBJysnJ0dixY7Vs2TJXl+Iyl7IPruTxDsCVycPVBQCAK6xcuVI33nijateurfvvv19RUVE6dOiQfv31V/3rX//So48+au+7c+dOubm55m+Ur776qp588kklJCRo9OjR8vX11Z49e/TDDz/o008/1S233CLp9JfQcePGKSYmRq1atXJJrc42YsQItWvXTkVFRUpNTdXKlSs1ZswYvf766/rss8900003lXmZl2u/bdu2TePGjdMNN9xQ7Cjc4sWLnbZeVE45OTkaN26cJF2VZzlIl7YPLvS5nTZtmmw2WwVVCQAVg9AN4Ko0fvx4BQUFae3atQoODnaYdvToUYf3Vqv1Mlb2P6dOndKLL76orl27lhjMzq2zLHJycuTr63sp5V12nTp10l133eXQtmnTJnXr1k133nmntm3bpurVq7uouvLz8vJydQnAFcPT09PVJQBAMZxeDuCqtHfvXjVt2rRY4JakiIgIh/clXdO9detW3XTTTfLx8VGtWrX0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B2eUZ7wrL2f8/AFcfTjSDeCq9OijjyonJ0e33367mjRpooKCAq1cudJ+pOvc073P9tRTT+njjz/WLbfcor///e/y8/PT1KlT7UcozwgMDNR7772nv/71r2rdurX69eun8PBwJSUl6bvvvtN1111X7NnSZ8vJyVHHjh3Vvn173XLLLYqOjlZ6errmzZun5cuXq3fv3oqPj5d0OgQFBwdrypQpCggIkJ+fn6699lrVrVv3vMv/61//qs8++0wPPfSQli5dquuuu05FRUXasWOHPvvsMy1atEht27ZVt27d5OXlpZ49e+rBBx9UVlaWpk2bpoiIiFI/97kiLF++XHl5eSoqKtKxY8e0YsUKff311woKCtLcuXMdTv2cOHGili5dqmuvvVb333+/4uLidPz4cW3YsEE//PCD/bTwC+23Dz74QN27d1fTpk01ZMgQ1axZU4cPH9bSpUsVGBiob775RpL0z3/+U4sXL1ZCQoIeeOABxcbGKjk5WZ9//rl++eUXBQcHq1WrVnJ3d9ekSZOUkZEhq9Vqf+75uR544AG9//77Gjx4sNavX6+YmBh98cUXWrFihSZPnmy/dr0sDh8+rNjYWA0aNOiiN1N78803df3116t169Z64IEHVLduXR04cEDfffedNm7cKEnq16+fnn76ad1+++0aMWKEcnJy9N5776lRo0YONz1r1aqV+vfvr3fffVcZGRnq2LGjlixZoj179hRb72233aaPP/5YQUFBiouL06pVq/TDDz+oWrVqZdrW+vXr66WXXtLo0aN14MAB9e7dWwEBAdq/f7/mzp2rBx54QE888YS9f+vWrdWgQQM999xzys/Pdzi1XLr0z3FJfHx8FBcXp9mzZ6tRo0YKDQ1Vs2bNLnotfd++ffX888/L29tb9913n8OZECdPnlStWrV01113qWXLlvL399cPP/ygtWvXOpw9cClatmypQYMGaerUqUpPT1dCQoLWrFmjmTNnqnfv3rrxxhslSTNnztS7776r22+/XfXr19fJkyc1bdo0BQYG2oN7efeBVL7xrryc8fMHcBW6zHdLB4BKYcGCBWbo0KGmSZMmxt/f33h5eZkGDRqYRx991Bw5csSh77mPDDPGmM2bN5uEhATj7e1tatasaV588UXz73//u9hzuo05/cirxMREExQUZLy9vU39+vXN4MGDzbp16y5YY2FhoZk2bZrp3bu3qVOnjrFarcbX19fEx8ebV155xeTn5zv0/+qrr0xcXJzx8PBweJxOQkKCadq0aYnrKCgoMJMmTTJNmzY1VqvVhISEmDZt2phx48aZjIwMe7+vv/7atGjRwnh7e5uYmBgzadIk8+GHHxbb3jp16phbb7212HokFXuU0ZlH+bzyyisX3A9nHhl25uXp6WnCw8NN586dzfjx483Ro0dLnO/IkSPmkUceMdHR0cbT09NERUWZm2++2UydOrVU+80YY3777Tdzxx13mGrVqhmr1Wrq1Klj+vTpY5YsWeKwjIMHD5qBAwea8PBwY7VaTb169cwjjzzi8DOaNm2aqVevnnF3d3d4fNi5jww7U/uQIUNMWFiY8fLyMs2bNy/2eKQL7T+d8yimsjwyzBhjtmzZYm6//XYTHBxsvL29TePGjc3//d//OfRZvHixadasmfHy8jKNGzc2n3zySYnP6c7NzTUjRoww1apVM35+fqZnz57m0KFDxWo8ceKEfZv9/f1NYmKi2bFjR4mfv9KYM2eOuf76642fn5/x8/MzTZo0MY888ojZuXNnsb7PPfeckWQaNGhw3uWV5nM8aNAg4+fnV2zekvbLypUrTZs2bYyXl1epH521e/du++fgl19+cZiWn59vnnzySdOyZUsTEBBg/Pz8TMuWLe3PB7+QM/WlpqY6tE+fPr3YZ7ywsNCMGzfO1K1b13h6epro6GgzevRo+yO2jDFmw4YNpn///qZ27drGarWaiIgIc9tttxUb88qzD8443+f2fI8MO/dzcr5HEZ7Z5nMfd1becRwAjDHGYowT77QCAAAAAMBVjGu6AQAAAABwEq7pBgAAVUJKSsoFp/v4+Dg8Mx5VS0FBwUUfwxcUFFTiIxABoDLj9HIAAFAlXOxRUaW5URwqr2XLltlvxnY+06dP1+DBgy9PQQBQQTjSDQAAqoSLPc++Ro0al6kSOEPLli0v+jNu2rTpZaoGACoOR7oBAAAAAHASbqQGAAAAAICTXHWnl9tsNv35558KCAi46LVhAAAAAACUxBijkydPqkaNGnJzu8DxbBc+I9y8++67pnnz5iYgIMAEBASY9u3bm/nz519wns8++8w0btzYWK1W06xZM/Pdd9+VaZ2HDh0yknjx4sWLFy9evHjx4sWLF69Lfh06dOiCGdSlR7pr1aqliRMnqmHDhjLGaObMmerVq5d+++23Em+UsXLlSvXv318TJkzQbbfdplmzZql3797asGGDmjVrVqp1BgQESJIOHTqkwMDACt0eAAAAAMDVITMzU9HR0faMeT6V7kZqoaGheuWVV3TfffcVm9a3b19lZ2fr22+/tbe1b99erVq10pQpU0q1/MzMTAUFBSkjI4PQDQAAAAAol9Jmy0pzI7WioiJ9+umnys7OVocOHUrss2rVKnXp0sWhLTExUatWrbocJQIAAAAAUCYuv5Ha77//rg4dOigvL0/+/v6aO3eu4uLiSuybkpKiyMhIh7bIyEilpKScd/n5+fnKz8+3v8/MzJR0+oZqNputArYAAAAAAHC1KW2edHnobty4sTZu3KiMjAx98cUXGjRokH766afzBu+ymjBhgsaNG1esPTU1VXl5eRWyDgAAAADA1eXkyZOl6ufy0O3l5aUGDRpIktq0aaO1a9fqX//6l95///1ifaOionTkyBGHtiNHjigqKuq8yx89erRGjRplf3/mYvfw8HCu6QYAAAAAlIu3t3ep+rk8dJ/LZrM5nA5+tg4dOmjJkiUaOXKkve37778/7zXgkmS1WmW1Wou1u7m5XfhZagAAAAAAnEdp86RLQ/fo0aPVvXt31a5dWydPntSsWbO0bNkyLVq0SJI0cOBA1axZUxMmTJAk/f3vf1dCQoJee+013Xrrrfr000+1bt06TZ061ZWbAQAAAABAiVwauo8ePaqBAwcqOTlZQUFBatGihRYtWqSuXbtKkpKSkhz+etCxY0fNmjVL//jHP/Tss8+qYcOGmjdvXqmf0Q0AAAAAwOVU6Z7T7Ww8pxsAAAAAcKmq3HO6AQAAAAC40hC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAk3i4ugAAQNXVdmpbV5cAoBzWPbDO1SUAwFWD0A0AAC4ouyBbR7OPKsg7SN4e3rK6W+Xu5u7qsgAAqBII3QAA4IJO5J3Q8bzjOp533N7m4eYhq7tV/l7+qhVYy4XVAQBQuRG6AQDABdUMqKnjucd1ynZKklTNp5o83T2VX5SvIlPk4uoAAKjcuJEaAAC4IIvFouigaBkZ+Xv5Ky03TTmFOaoVUEt1guq4ujwAACo1QjcAALioYGuw/Dz9dMp2SvWC6ym7MFtbU7fqRO4JV5cGAEClRugGAAAXZbFYFB0YrdxTuSoyRYoLi1OAV4D2pe/T/vT99lPPAQCAI0I3AAAoFT8vP4V4hyg1J1We7p6qF1JPMUExSs9L17bUbcrMz3R1iQAAVDrcSA0AAJRaTHCMCooKJJ0++l3Nt5oCrAE6kH5Au4/vVrhvuGoF1pKbhb/rAwAgcaQbAACUgZvFTd4e3g5tXu5eahjaUNGB0UrLSdO21G3KLsh2UYUAAFQuHOkGAACXzGKxKMIvQoHWQO1P368dx3Yoyj9K1f2rc9QbLte2rasrAFBW69a5uoKKw29BAABQYbw9vNWkWhPV8K+hlKwU7UjbodzCXFeXBQCAyxC6AQBAhbJYLKoeUF2xYbEyMtqetl1Hso7IGOPq0gAAuOwI3QAAwCl8PX0VGxarcL9w/XHyD+06vkv5p/JdXRYAAJcVoRsAADiNm8VN0YHRahTaSAVFBdqWtk1pOWkc9QYAXDUI3QAAwOkCrAGKC4tTiHeIDmYc1N4Te1VYVOjqsgAAcDpCNwAAuCzc3dwVExyj+iH1lV2Yra2pW3Ui94SrywIAwKl4ZBgAALisgr2D5efpp6TMJO1L36fQ/FBFB0bLw42vJQCAKw9HugEAwGXn6e6pesH1FBMUo4y8DG1L3abM/ExXlwUAQIUjdAMAAJewWCyq5ltNceFx8vbw1u7ju5WUkSSbsbm6NAAAKgyhGwAAuJSXu5cahjZUdGC00nLStC11m7ILsl1dFgAAFYLQDQAAXM5isSjCL0Jx4XFyd3PXjmM7dPjkYY56AwCqPEI3AACoNLw9vNWkWhPV8K+hlKwU7UjbodzCXFeXBQBAuRG6AQBApWKxWFQ9oLpiw2JlZLQ9bbtSslJkjHF1aQAAlBmhGwAAVEq+nr6KDYtVhF+EDp88rF3Hdyn/VL6rywIAoEwI3QAAoNJys7ipVmAtNQptpIKiAm1L26a0nDSOegMAqgxCNwAAqPQCrAGKC4tTiHeIDmYc1N4Te1VYVOjqsgAAuChCNwAAqBLc3dwVExyj+iH1lV2Yra2pW3Ui94SrywIA4II8XF0AAABAWQR7B8vP009JmUnal75PoXmhig6KlocbX2sAAJUPR7oBAECV4+nuqXrB9RQTFKOM/AxtS92mzPxMV5cFAEAxhG4AAFAlWSwWVfOtprjwOHl7eGv38d1KykhSka3I1aUBAGBH6AYAAFWal7uXGoY2VHRgtNJy0rQ9bbuyCrJcXRYAAJII3QAA4ApgsVgU4RehuPA4ubu5a+exnTp88rBsxubq0gAAVzlCNwAAuGJ4e3irSbUmquFfQylZKdqRtkO5hbmuLgsAcBUjdAMAgCuKxWJR9YDqig2LlZHR9rTtSslKkTHG1aUBAK5ChG4AAHBF8vX0VWxYrCL8InT45GHtOr5L+afyXV0WAOAqQ+gGAABXLDeLm2oF1lKj0EYqKCrQtrRtSstJ46g3AOCyIXQDAIArXoA1QHFhcQrxDtHBjIPae2KvCosKXV0WAOAqQOgGAABXBXc3d8UEx6h+SH1lF2Zra+pWncg94eqyAABXOEI3AAC4qgR7B6tpeFMFWAO0L32f9p/Yr1O2U64uCwBwhSJ0AwCAq46Hm4fqBddTTFCMMvIztC11mzLzM11dFgDgCkToBgAAVyWLxaJqvtUUFx4nbw9v7T6+W0kZSSqyFbm6NADAFYTQDQAArmpe7l5qGNpQ0YHRSstJ0/a07coqyHJ1WQCAKwShGwAAXPUsFosi/CIUFx4nDzcP7Ty2U4dPHpbN2FxdGgCgiiN0AwAA/H/eHt5qXK2xavjXUEpWinak7VBuYa6rywIAVGGEbgAAgLNYLBZVD6iu2LBYGRltT9uulKwUGWNcXRoAoAoidAMAAJTA19NXsWGxivCL0OGTh7Xr2C7ln8p3dVkAgCqG0A0AAHAebhY31QqspUahjVRgK9C2tG1KzUnlqDcAoNRcGronTJigdu3aKSAgQBEREerdu7d27tx5wXlmzJghi8Xi8PL29r5MFQMAgKtRgDVAcWFxCvUOVVJGkvac2KPCokJXlwUAqAJcGrp/+uknPfLII/r111/1/fffq7CwUN26dVN2dvYF5wsMDFRycrL9dfDgwctUMQAAuFq5u7mrTnAd1Q+pr5zCHG1N3aoTuSdcXRYAoJLzcOXKFy5c6PB+xowZioiI0Pr169W5c+fzzmexWBQVFeXs8gAAAIoJ9g6Wv5e/DmYc1L70fQrNC1V0ULQ83Fz6tQoAUElVqt8OGRkZkqTQ0NAL9svKylKdOnVks9nUunVr/fOf/1TTpk1L7Jufn6/8/P/d9CQzM1OSZLPZZLPx7E0AuBQWWVxdAuASnm6eqh9cX8fzjispI0knU08qJjhGQdYgV5dWKlfbdyALQxVQ5VSFYaq0Y2mlCd02m00jR47Uddddp2bNmp23X+PGjfXhhx+qRYsWysjI0KuvvqqOHTtq69atqlWrVrH+EyZM0Lhx44q1p6amKi8vr0K3AQCuNg28Gri6BMC1rFIzv2Zac2yNdh/frQb+DdQqpFWlP+p99OhRV5dwWTVgqAKqnKowTJ08ebJU/Symktx+829/+5sWLFigX375pcTwfD6FhYWKjY1V//799eKLLxabXtKR7ujoaJ04cUKBgYEVUjsAXK2u/eBaV5cAVArGGKXmpOqPzD/k6e6pusF15e/l7+qyzmv1sNWuLuGyupahCqhyVleBYSozM1MhISHKyMi4YLasFH+GHT58uL799lv9/PPPZQrckuTp6an4+Hjt2bOnxOlWq1VWq7VYu5ubm9zceGIaAFwKo0rxd1vA9SxSuF+4AqwBOpB+QDuO7VCUX5SqB1SXm6Xyfd+42r4DVY5DTADKoioMU6UdS126KcYYDR8+XHPnztWPP/6ounXrlnkZRUVF+v3331W9enUnVAgAAFB63h7ealytsWr411BKdop2pO1QbmGuq8sCALiQS0P3I488ok8++USzZs1SQECAUlJSlJKSotzc//1yGjhwoEaPHm1//8ILL2jx4sXat2+fNmzYoHvvvVcHDx7UsGHDXLEJAAAADiwWi6oHVFdsWKyMjLanbVdKVooqyRV9AIDLzKWnl7/33nuSpBtuuMGhffr06Ro8eLAkKSkpyeGw/YkTJ3T//fcrJSVFISEhatOmjVauXKm4uLjLVTYAAMBF+Xr6KjYsVn+e/FOHTx5WRl6GYoJjZPUoftkbAODKVWlupHa5ZGZmKigo6KIXuwMALq7t1LauLgGoEk7mn9SBjAM6ZTulWoG1FOYTJosLn2O17oF1Llu3K7RlqAKqnHVVYJgqbbasApenAwAAVG0B1gDFhcUp1DtUSRlJ2nNijwqLCl1dFgDgMiB0AwAAXAbubu6qE1xH9UPqK6cwR1tTt+p47nFXlwUAcLJK8cgwAACAq0Wwd7D8vfx1MOOg9qfvV3peumoH1ZaHG1/LAOBKxJFuAACAy8zDzUP1guupbnBdZeZnalvqNmXmZ7q6LACAExC6AQAAXMBisSjUJ1Rx4XHy9vDW7uO7lZSRpCJbkatLAwBUIEI3AACAC3m5e6lhaENFB0YrLSdN29O2K6sgy9VlAQAqCKEbAADAxSwWiyL8IhQXHicPNw/tPLZThzMPy2Zsri4NAHCJCN0AAACVhLeHtxpXa6waATWUkp2iHWk7lFuY6+qyAACXgNANAABQiVgsFlX3r67YsFgZGW1P266UrBQZY1xdGgCgHAjdAAAAlZCvp69iw2IV4RehwycPa+exnco/le/qsgAAZUToBgAAqKTcLG6qFVhLjao1UqGtUNvStik1J5Wj3gBQhRC6AQAAKrkArwDFhcUp1DtUSRlJ2nNijwqLCl1dFgCgFAjdAAAAVYC7m7vqBNdRg5AGyinM0dbUrTqee9zVZQEALoLQDQAAUIUEeQepaXhTBVoDtT99v/ad2KdTtlOuLgsAcB6EbgAAgCrGw81DdYPrqm5wXWXmZ2pb6jZl5Ge4uiwAQAkI3QAAAFWQxWJRqE+o4sLj5OPhoz3H9+hgxkEV2YpcXRoA4CyEbgAAgCrMy91LDUIbqHZgbR3PPa7taduVVZDl6rIAAP8foRsAAKCKs1gsCvcLV2xYrDzcPLTz2E4dzjwsm7G5ujQAuOoRugEAAK4Q3h7ealytsWoE1NCR7CPakbZDOYU5ri4LAK5qhG4AAIAriMViUXX/6moS1kRGRjvSdiglK0XGGFeXBgBXJUI3AADAFcjX01exYbGK8IvQ4ZOHtfPYTuWfynd1WQBw1SF0AwAAXKHcLG6qFVhLjas1VqGtUNvStik1O5Wj3gBwGRG6AQAArnD+Xv6KC4tTqE+okjKT1GNWD/158k9XlwUAVwVCNwAAwFXA3c1ddYLqqEFIA21M2ahm7zbT7C2zXV0WAFzxCN0AAABXkSDvIG352xZ1rd9V/eb0U/85/XU897irywKAKxahGwAA4CpTzbeaZt81W/+9879auGehmr3bTAv3LHR1WQBwRSJ0AwAAXKX6NeunLX/bohaRLdT9P931t2//pqyCLFeXBQBXFEI3AADAVaxmYE0tuGeB3rv1PX20+SO1mtJKK5JWuLosALhiELoBAACuchaLRQ+1fUibHtqkCL8IdZ7RWaN/GM1zvQGgAhC6AQAAIElqENpAy4cs1/ibxuu1Va/pmg+u0eYjm11dFgBUaYRuAAAA2Lm7ueuZ65/R2vvXyhijtlPbauIvE1VkK3J1aQBQJRG6AQAAUEzLqJZae/9ajeowSs8ueVadZ3TW3uN7XV0WAFQ5hG4AAACUyOph1cQuE/XzkJ+VkpWillNaasq6KTLGuLo0AKgyCN0AAAC4oOtrX69ND23SvS3u1d+++5t6zOqhP0/+6eqyAKBKIHQDAADgovy9/DXltimaP2C+NqVsUrN3m+nTLZ+6uiwAqPQI3QAAACi17g276/e//a5u9bup/5z+6vdFPx3PPe7qsgCg0iJ0AwAAoEyq+VbTp3d9qv/e+V8t3rtYzd5tpgW7F7i6LAColAjdAAAAKJd+zfrp97/9rhaRLdRjVg899O1DyirIcnVZAFCpELoBAABQbjUDa2rBPQv03q3v6ePNH6vllJZakbTC1WUBQKVB6AYAAMAlsVgseqjtQ9r00CZF+Uep0/ROeuaHZ5R/Kt/VpQGAyxG6AQAAUCEahDbQz4N/1oSbJ+j1Va+r3bR22pSyydVlAYBLEboBAABQYdzd3PX09U9r7f1rZbFY1G5aO/36x6+uLgsAXMbD1QUAAADgytMyqqXWDFujmZtmKiY4xtXlAIDLELoBAADgFFYPqx5o84CrywAAl+L0cgAAAAAAnITQDQAAAACAkxC6AQAA4FSWcRbN2zGvVH3HLhurVlNaXdZ1VhXre1qUHjXP1WUAKCNCNwAAQCWQVZCl9cnrtfv4bpfVcCD9gCzjLNqYsvGC/ZYdWCbLOIvS89JLtdzkx5PVvUH3Sy/QiQ60Gqw97XpX+HKdGZTzfQ5ofU+LcgI3OmX5ACoGoRsAAKASSMtJU4RvhLIKslRQVODqcirEme2I8o+S1cPq4moAwDUI3QAAAC5WZCvSibwTCvcLV5A1SMdyjxXrk56Xri1Ht2hD8gbtPLZTx3KOaX3yep2ynbL3ySrI0s60ndqQvEGbj2xWUkaSimxF9um/H/1dyVnJGvrVUAVMCFDtN2pr6vqp9ul1/1VXkhT/frws4yy6YcYNxeo4kH5AN868UZIUMilElnEWDZ43WJJ0w4wbNHz+cI1cOFJhL4cp8ZNEScVP9f4j8w/1n9NfoZNC5fdPP7Wd2lar/1hd4r7Ze3yv6v2rnobPHy5jTIl9dh/brc7TO8v7JW/FvROn7/d+X6xPgfch7WvTRxtvCdbGxFDtaddL+T4HJEl/NhqrY9EzlRH1ldb3tGh9T4tOVlt20fnOSIv+UFtvaKoNPaza1LW6kpoNP72/b445vQ3tbtf6nhb7e0lKj/xK2zq31oYe3vr9pnr6s9E4Gcv/fpZ5fru1s2Nnbejhra03xCkzrPg2AagaeGQYAACAi53IOyFvD295e3gr1CdUf2T+oSi/KFksFklS/ql87TuxTxF+EQrzDVNOYY7+yPzDYRn5p/K1+/hu1QiooTrBdXTKdkpJGUk6lHnI4TnZR7KOqG2Ntnq207P6YtsX+tt3f1NCnQQ1DmusNcPW6JoPrtEPf/1BTSOaysvdq1it0YHRmtNnju787E7tHL5TgdZA+Xj42KfP3DRTf2v7N60YuqLEbc0qyFLCjATVDKipr/t/rSj/KG1I3iCbsRXru/nIZiV+kqj74u/TSze9VOLybMamOz67Q5F+kVo9bLUy8jM0cuFIhz7GUqjd7RPld6KDGq9YLhkPpTR8Sbvb36K4ZZsVufcJ5flvV5FnpmI2TpckuReEXnQ+N+Ol1Drv6VDTUaq5faKCjnZXkUeGskJPb3uT5Wu1OTFCdX6brqDUWyTjLkk6Gbpc++MHqvaWN+V/vJPyfffqYMvTj1arsWuMjGza2/YOeeZHqskvq1XkkaFDzRy3CUDVQegGAABwsbScNIX6hEqSgqxBOmgOKqsgSwHWAElSak6qrB5W1QqsJUny9vBW7qlcpWSl2JeRnJWsUJ9QRfpF2ttqB9XWzmM7VTuottwsp09wDPIO0sPtHpYkPX3d03rj1ze09MBSNQ5rrHC/cElSNd9qivKPKrFWdzd3e60RfhEK9g52mN4wtKFe7vryebd11u+zlJqdqrX3r7Uvp0Fog2L9Vh5aqdtm3abnOj2nxzs+ft7l/bDvB+1I26FF9y5SjYAakqR/3vxPdf/P/64hP15jtozFpjqbPpBFp/+QUWfjdG3sHqyssGUKTO0mN5uPbLZ8eeb/b7uP1fzkovMlN3xJkXsfV+T+v9vn88toJ0nyLDi9Pz1OBTssN7nROEXteUbV/hgkSbLm1FONHS/qcNxTqrFrjE6G/6A8/x1q+OsieeWf3qaa2/+pPe0r93XxAEpG6AYAAHChvFN5yi7MVv2Q+pIki8WiEO8QpeWm2UN3/ql8+Xn6Ocx37vvcU7nKLczV8dzjxdaRfypfPp6nj0affVTaYrEoyj9KR7OPVtj2tKne5oLTN6ZsVHz1eHvgLklSRpK6ftxV428ar5HtR15wedtTtys6MNoeuCWpQ60ODn1yAzcp33ePNnYPcGg3bnnK99173mVfbL5Cr6Mq9PlTgWk3X7DGkpabFbpCKQ3H/2+ZliIZ9zzZ3HOU679dXrnR9sAtSf4nOpS0KABVAKEbAADAhdJy0iRJm49udmi3yKLagbXl7uZequXYbDaF+YYpwi+i2LSzTxM/c8r62esp6dTu8vLz8rvg9LND//mE+4WrRkAN/XfLfzU0fqgCrYGXVFORR5Z8M9qo7ob/FJt25mh0ueYz5bs9UpFHlmrsHKfg5DuKTbMUeZdrmQAqL0I3AACAixhjdCz3mGoF1CoWLPee2KvjuccV7hcuq4dVmfmZDtOzC7Md3vt6+irvVJ68Pcof2s6E87NvvnYp/UrSIrKFPvjtAx3PPX7eo90+Hj76tv+36jGrhxI/SdTiexfbj/qfKzY8VocyDyn5ZLKqB1SXJP36x68OfXwzWutEjdnyLIiQ+6mSA7zF5iWpqMzzeeXEKDNsiQKO3Xie5XrKWIovN89/p7xzip9WL0k+WbEq8DmkQmuyPPNPb1NWyK/F+llzY9Tmm5JvLgeg8uDu5QAAAC6SkZ+hIluRwnzD5OPp4/AK9g5WWu7po+DhvuHKO5WnPzL/UN6pPB3PPa5jOafvcH7mWuNI/0hlFWQpKSNJOYU5yjuVp/S8dCVlJJW6ngi/CPl4+GjhnoU6knVEGXkZJfarE1RHFln07a5vlZqdqqyCrFKvo3/z/oryj1LvT3trRdIK7TuxT3O2zdGqQ6sc+vl5+em7Ad/Jw81D3f/T/bzr6FKvixpVa6RB8wZpU8omLT+4XM/9+JxDn2qH75FHQZj2tOulk6HLle+zXyerLVNS0xEq8D59QzqvnBjlBm5Wnt9OnfJKk7EUlmq+GjvH6kj913S07pvK89utnKANOhrzln3dXjkxOhm2RIXWFJ3yPCFJqr7reR2r9ZH+bDROuf5bleu/XcdrfKrDjf8hSQpI7SLv7EbaHz9IOYGbdDJ0uf5s4rhNkpQdvEZbbmyiPP8dpd7/AC4/l4buCRMmqF27dgoICFBERIR69+6tnTt3XnS+zz//XE2aNJG3t7eaN2+u+fPnX4ZqAQAAKlZazunrtks6hTzEO0Q5hTnKKcyR1cOqeiH1lJ6Xrm2p25Sak6rq/qePgJ45XdzX01eNqzVW3qk87Ty2U9vTtuvPk3/K092z1PV4uHnoze5v6v3176vG6zXU69NeJfarGVhT424Yp2eWPKPIVyM1fP7wUq/Dy91Li+9drAi/CPWY1UPN32uuiSsmlrgP/L38teCeBTIyunXWrcouyC7Wx83iprl95yr3VK6u+eAaDftmmMbfNN6xT5GvGq/8WV65tbWv7R3aemOsDrS8T8Y9z34EOyzpflmzG2t757balBiurNAVpZqv2h+DFL11so7GvKttNzTVnmtuU57fbvu6a217TZlh32tzl2ht7xwvSQpKTVSDNd8qM3yxtndupx3Xt9eRem/IK7eOJMkiN9VfO1fGLVc7rr9GB1sOU40djtskSTb3HOX775TNLa/U+x/A5Wcx53vg4WVwyy23qF+/fmrXrp1OnTqlZ599Vlu2bNG2bdvk51fy9UArV65U586dNWHCBN12222aNWuWJk2apA0bNqhZs2YXXWdmZqaCgoKUkZGhwMBLuz4IAK52bae2dXUJwFUr+WSyUnNS1SKyRZnnXffAOidUVHm1ZagCqpx1VWCYKm22dGnoPldqaqoiIiL0008/qXPnziX26du3r7Kzs/Xtt9/a29q3b69WrVppypQpF10HoRsAKg6hG7h8jmYflZ+nnzzcPJRVkKVDmYcU7heumgE1y7wsQjeAyu5KCt2V6kZqGRmnrxsKDT3/IyRWrVqlUaNGObQlJiZq3rx5JfbPz89Xfn6+/X1m5umbkNhsNtlsFXenTgC4Gp25lhSA8+UX5SslK0WnbKfk5e6lSL9IVfevXq7P4dX2HcjCUAVUOVVhmCrtWFppQrfNZtPIkSN13XXXXfA08ZSUFEVGRjq0RUZGKiUlpcT+EyZM0Lhx44q1p6amKi+P618A4FI08Cr5zrsAKl6DsIr7vB09WnHP5a4KGjBUAVVOVRimTp48Wap+lSZ0P/LII9qyZYt++eWXCl3u6NGjHY6MZ2ZmKjo6WuHh4ZxeDgCXaE/BHleXAKAcIiKKP8v7SraHoQqocqrCMOXtXbpHNFaK0D18+HB9++23+vnnn1WrVq0L9o2KitKRI0cc2o4cOaKoqKgS+1utVlmt1mLtbm5ucnPjiWkAcCmMKs1tQQCUwdX2Hajy3MEIQGlVhWGqtGOpSzfFGKPhw4dr7ty5+vHHH1W3bt2LztOhQwctWbLEoe37779Xhw4dnFUmAAAAAADl4tIj3Y888ohmzZqlr776SgEBAfbrsoOCguTj4yNJGjhwoGrWrKkJEyZIkv7+978rISFBr732mm699VZ9+umnWrdunaZOneqy7QAAAAAAoCQuPdL93nvvKSMjQzfccIOqV69uf82ePdveJykpScnJyfb3HTt21KxZszR16lS1bNlSX3zxhebNm1eqZ3QDAAAAAHA5ufRId2keEb5s2bJibXfffbfuvvtuJ1QEAAAAAEDFqQKXpwMAAAAAUDURugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJMQugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJMQugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJN4lKWzzWbTTz/9pOXLl+vgwYPKyclReHi44uPj1aVLF0VHRzurTgAAAAAAqpxSHenOzc3VSy+9pOjoaPXo0UMLFixQenq63N3dtWfPHo0ZM0Z169ZVjx499Ouvvzq7ZgAAAAAAqoRSHelu1KiROnTooGnTpqlr167y9PQs1ufgwYOaNWuW+vXrp+eee073339/hRcLAAAAAEBVUqrQvXjxYsXGxl6wT506dTR69Gg98cQTSkpKqpDiAAAAAACoykp1evnFAvfZPD09Vb9+/XIXBAAAAADAlaLMdy9fuHChfvnlF/v7d955R61atdKAAQN04sSJCi0OAAAAAICqrMyh+8knn1RmZqYk6ffff9fjjz+uHj16aP/+/Ro1alSFFwgAAAAAQFVVpkeGSdL+/fsVFxcnSZozZ45uu+02/fOf/9SGDRvUo0ePCi8QAAAAAICqqsxHur28vJSTkyNJ+uGHH9StWzdJUmhoqP0IOAAAAAAAKMeR7uuvv16jRo3SddddpzVr1mj27NmSpF27dqlWrVoVXiAAAAAAAFVVmY90v/322/Lw8NAXX3yh9957TzVr1pQkLViwQLfcckuFFwgAAAAAQFVV5iPdtWvX1rffflus/Y033qiQggAAAAAAuFKUOXSfcfToUR09elQ2m82hvUWLFpdcFAAAAAAAV4Iyh+7169dr0KBB2r59u4wxkiSLxSJjjCwWi4qKiiq8SAAAAAAAqqIyh+6hQ4eqUaNG+ve//63IyEhZLBZn1AUAAAAAQJVX5tC9b98+zZkzRw0aNHBGPQAAAAAAXDHKfPfym2++WZs2bXJGLQAAAAAAXFHKfKT7gw8+0KBBg7RlyxY1a9ZMnp6eDtP/8pe/VFhxAAAAAABUZWUO3atWrdKKFSu0YMGCYtO4kRoAAAAAAP9T5tPLH330Ud17771KTk6WzWZzeBG4AQAAAAD4nzKH7mPHjumxxx5TZGSkM+oBAAAAAOCKUebQfccdd2jp0qXOqAUAAAAAgCtKma/pbtSokUaPHq1ffvlFzZs3L3YjtREjRlRYcQAAAAAAVGXlunu5v7+/fvrpJ/30008O0ywWC6EbAAAAAID/r8yhe//+/c6oAwAAAACAK06Zr+kGAAAAAAClU6rQPXHiROXm5pZqgatXr9Z33313SUUBAAAAAHAlKFXo3rZtm2rXrq2HH35YCxYsUGpqqn3aqVOntHnzZr377rvq2LGj+vbtq4CAAKcVDAAAAABAVVGqa7o/+ugjbdq0SW+//bYGDBigzMxMubu7y2q1KicnR5IUHx+vYcOGafDgwfL29nZq0QAAAAAAVAWlvpFay5YtNW3aNL3//vvavHmzDh48qNzcXIWFhalVq1YKCwtzZp0AAAAAAFQ5Zb57uZubm1q1aqVWrVo5oRwAAAAAAK4cLr17+c8//6yePXuqRo0aslgsmjdv3gX7L1u2TBaLpdgrJSXl8hQMAAAAAEAZuDR0Z2dnq2XLlnrnnXfKNN/OnTuVnJxsf0VERDipQgAAAAAAyq/Mp5dXpO7du6t79+5lni8iIkLBwcEVXxAAAAAAABXIpaG7vFq1aqX8/Hw1a9ZMY8eO1XXXXXfevvn5+crPz7e/z8zMlCTZbDbZbDan1woAVzKLLK4uAUA5XG3fgSwMVUCVUxWGqdKOpeUO3Xv27NHevXvVuXNn+fj4yBgji5NHtOrVq2vKlClq27at8vPz9cEHH+iGG27Q6tWr1bp16xLnmTBhgsaNG1esPTU1VXl5eU6tFwCudA28Gri6BADlcPToUVeXcFk1YKgCqpyqMEydPHmyVP0sxhhTlgUfO3ZMffv21Y8//iiLxaLdu3erXr16Gjp0qEJCQvTaa6+Vq2CLxaK5c+eqd+/eZZovISFBtWvX1scff1zi9JKOdEdHR+vEiRMKDAwsV60AgNOu/eBaV5cAoBxWD1vt6hIuq2sZqoAqZ3UVGKYyMzMVEhKijIyMC2bLMh/pfuyxx+Th4aGkpCTFxsba2/v27atRo0aVO3SX1zXXXKNffvnlvNOtVqusVmuxdjc3N7m5ufQ+cgBQ5RmV6e+2ACqJq+07UNkOMQGoDKrCMFXasbTMoXvx4sVatGiRatWq5dDesGFDHTx4sKyLu2QbN25U9erVL/t6AQAAAAC4mDKH7uzsbPn6+hZrP378eIlHlC8kKytLe/bssb/fv3+/Nm7cqNDQUNWuXVujR4/W4cOH9dFHH0mSJk+erLp166pp06bKy8vTBx98oB9//FGLFy8u62YAAAAAAOB0ZT5o36lTJ3sIlk5fi22z2fTyyy/rxhtvLNOy1q1bp/j4eMXHx0uSRo0apfj4eD3//POSpOTkZCUlJdn7FxQU6PHHH1fz5s2VkJCgTZs26YcfftDNN99c1s0AAAAAAMDpynwjtS1btujmm29W69at9eOPP+ovf/mLtm7dquPHj2vFihWqX7++s2qtEJmZmQoKCrroxe4AgItrO7Wtq0sAUA7rHljn6hIuq7YMVUCVs64KDFOlzZZlPtLdrFkz7dq1S9dff7169eql7Oxs3XHHHfrtt98qfeAGAAAAAOByKtdzuoOCgvTcc89VdC0AAAAAAFxRyhW68/LytHnzZh09elQ2m81h2l/+8pcKKQwAAAAAgKquzKF74cKFGjhwoNLS0opNs1gsKioqqpDCAAAAAACo6sp8Tfejjz6qu+++W8nJybLZbA4vAjcAAAAAAP9T5tB95MgRjRo1SpGRkc6oBwAAAACAK0aZQ/ddd92lZcuWOaEUAAAAAACuLGW+pvvtt9/W3XffreXLl6t58+by9PR0mD5ixIgKKw4AAAAAgKqszKH7v//9rxYvXixvb28tW7ZMFovFPs1isRC6AQAAAAD4/8ocup977jmNGzdOzzzzjNzcynx2OgAAAAAAV40yp+aCggL17duXwA0AAAAAwEWUOTkPGjRIs2fPdkYtAAAAAABcUcp8enlRUZFefvllLVq0SC1atCh2I7XXX3+9wooDAAAAAKAqK3Po/v333xUfHy9J2rJli8O0s2+qBgAAAADA1a7MoXvp0qXOqAMAAAAAgCsOd0MDAAAAAMBJSnWk+4477tCMGTMUGBioO+6444J9v/zyywopDAAAAACAqq5UoTsoKMh+vXZQUJBTCwIAAAAA4EpRqtA9ffp0vfDCC3riiSc0ffp0Z9cEAAAAAMAVodTXdI8bN05ZWVnOrAUAAAAAgCtKqUO3McaZdQAAAAAAcMUp093LeQ43AAAAAAClV6bndDdq1Oiiwfv48eOXVBAAAAAAAFeKMoXucePGcfdyAAAAAABKqUyhu1+/foqIiHBWLQAAAAAAXFFKfU0313MDAAAAAFA23L0cAAAAAAAnKfXp5TabzZl1AAAAAABwxSnTI8MAAAAAAEDpEboBAAAAAHASQjcAAAAAAE5C6AYAAAAAwEkI3QAAAAAAOAmhGwAAAAAAJyF0AwAAAADgJIRuAAAAAACchNANAAAAAICTELoBAAAAAHASQjcAAAAAAE5C6AYAAAAAwEkI3QAAAAAAOAmhGwAAAAAAJyF0AwAAAADgJIRuAAAAAACchNANAAAAAICTELoBAAAAAHASQjcAAAAAAE5C6AYAAAAAwEkI3QAAAAAAOAmhGwAAAAAAJyF0AwAAAADgJIRuAAAAAACchNANAAAAAICTELoBAAAAAHASQjcAAAAAAE5C6AYAAAAAwElcGrp//vln9ezZUzVq1JDFYtG8efMuOs+yZcvUunVrWa1WNWjQQDNmzHB6nQAAAAAAlIdLQ3d2drZatmypd955p1T99+/fr1tvvVU33nijNm7cqJEjR2rYsGFatGiRkysFAAAAAKDsPFy58u7du6t79+6l7j9lyhTVrVtXr732miQpNjZWv/zyi9544w0lJiY6q0wAAAAAAMqlSl3TvWrVKnXp0sWhLTExUatWrXJRRQAAAAAAnJ9Lj3SXVUpKiiIjIx3aIiMjlZmZqdzcXPn4+BSbJz8/X/n5+fb3mZmZkiSbzSabzebcggHgCmeRxdUlACiHq+07kIWhCqhyqsIwVdqxtEqF7vKYMGGCxo0bV6w9NTVVeXl5LqgIAK4cDbwauLoEAOVw9OhRV5dwWTVgqAKqnKowTJ08ebJU/apU6I6KitKRI0cc2o4cOaLAwMASj3JL0ujRozVq1Cj7+8zMTEVHRys8PFyBgYFOrRcArnR7Cva4ugQA5RAREeHqEi6rPQxVQJVTFYYpb2/vUvWrUqG7Q4cOmj9/vkPb999/rw4dOpx3HqvVKqvVWqzdzc1Nbm5V6pJ2AKh0jIyrSwBQDlfbdyDDUAVUOVVhmCrtWOrSTcnKytLGjRu1ceNGSacfCbZx40YlJSVJOn2UeuDAgfb+Dz30kPbt26ennnpKO3bs0LvvvqvPPvtMjz32mCvKBwAAAADgglwautetW6f4+HjFx8dLkkaNGqX4+Hg9//zzkqTk5GR7AJekunXr6rvvvtP333+vli1b6rXXXtMHH3zA48IAAAAAAJWSS08vv+GGG2QucL7PjBkzSpznt99+c2JVAAAAAABUjCpwpjwAAAAAAFUToRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJKkXofueddxQTEyNvb29de+21WrNmzXn7zpgxQxaLxeHl7e19GasFAAAAAKB0XB66Z8+erVGjRmnMmDHasGGDWrZsqcTERB09evS88wQGBio5Odn+Onjw4GWsGAAAAACA0nF56H799dd1//33a8iQIYqLi9OUKVPk6+urDz/88LzzWCwWRUVF2V+RkZGXsWIAAAAAAErHpaG7oKBA69evV5cuXextbm5u6tKli1atWnXe+bKyslSnTh1FR0erV69e2rp16+UoFwAAAACAMvFw5crT0tJUVFRU7Eh1ZGSkduzYUeI8jRs31ocffqgWLVoo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Hnvbgw8+aHx9fR3+4JeYmGgefPDB89a5du1aI8k+T2lD9+eff24GDBhgYmNjzR9//GGfdt9995kHHnjAof/y5cuNm5ubyc3NLdP2vPPOOyYyMtL+vn79+mbWrFkO87344oumQ4cOxhhC99WI08txxdq+fbvy8/N18803l3v+a6+91qGtQ4cODu+zsrL0xBNPKDY2VsHBwfL399f27duVlJR00eX//vvvKioqUqNGjeTv729//fTTT9q7d68kqUePHvL09NTXX38t6fRpXYGBgerSpYuk06eP7tmzRwEBAfb5Q0NDlZeXZ1+GJDVt2lTu7u7299WrV7/kU7QAOF+LFi0c3p/57G7fvl3R0dGKjo62T4uLi1NwcLC2b98uSRo1apSGDRumLl26aOLEiQ5jgjPFxMQoICDA/j4yMlJxcXFyc3NzaDszBm3atElZWVmqVq2aw1i4f//+y1YzgNMmTZqkmTNn2seRs23fvl3XXXedQ9t1112n3bt3O5wW3rZt22Lz+vr6qn79+vb3kZGRiomJkb+/v0Pb2d9N1q9fr549e6p27doKCAhQQkKCJJXqO9bZHnvsMa1evVo///yzatasaW/ftGmTZsyY4TDuJCYmymazaf/+/WXanrO/V2VnZ2vv3r267777HJb90ksvMaZdxTxcXQDgLD4+PueddubLnzHG3nbmGueyeOKJJ/T999/r1VdfVYMGDeTj46O77rqrVDfayMrKkru7u9avX+8QiCXZfwl5eXnprrvu0qxZs9SvXz/NmjVLffv2lYeHh30Zbdq00X/+859iyw8PD7f/29PT02GaxWKRzWYr8/YCuLwu5bM7duxYDRgwQN99950WLFigMWPG6NNPP9Xtt9/ujFLtSqr5QtuRlZWl6tWr2+9ncTYeRwZcXp07d1ZiYqJGjx6twYMHl2sZfn5+xdrKOi5kZ2crMTFRiYmJ+s9//qPw8HAlJSUpMTGxzDcz69q1q/773/9q0aJFuueee+ztWVlZevDBBzVixIhi89SuXbvM23PmO2VWVpYkadq0acUO3pz7fQ9XD0I3rlgNGzaUj4+PlixZomHDhjlMOxNIk5OTFRISIknFnpUYGxur1atXO7T9+uuvDu9XrFihwYMH27/EZmVlOdzE7ELi4+NVVFSko0ePqlOnTuftd88996hr167aunWrfvzxR7300kv2aa1bt9bs2bMVERGhwMDAUq23JF5eXg5/pQZQucXGxurQoUM6dOiQ/Wj3tm3blJ6erri4OHu/Ro0aqVGjRnrsscfUv39/TZ8+Xbfffnu5PvPOGidat26tlJQUeXh4KCYmpsKXD6BsJk6cqFatWqlx48YO7bGxsVqxYoVD24oVK9SoUaMKD5M7duzQsWPHNHHiRPsYt27dunIt6y9/+Yt69uypAQMGyN3dXf369ZN0euzZtm2bGjRoUGF1S6eP2NeoUUP79u1zCPm4unF6Oa5Y3t7eevrpp/XUU0/po48+0t69e/Xrr7/q3//+txo0aKDo6GiNHTtWu3fv1nfffVfsDpwjRozQwoUL9eqrr2r37t16++23tXDhQoc+DRs21JdffqmNGzdq06ZNGjBgQKmPQjVq1Ej33HOPBg4cqC+//FL79+/XmjVrNGHCBH333Xf2fp07d1ZUVJTuuece1a1b1+Gvpvfcc4/CwsLUq1cvLV++XPv379eyZcs0YsQI/fHHH6XeVzExMfr55591+PBhpaWllXo+AK7RpUsXNW/eXPfcc482bNigNWvWaODAgUpISFDbtm2Vm5ur4cOHa9myZTp48KBWrFihtWvXKjY2VtLpz3xWVpaWLFmitLQ0+9MQLsRZ40SXLl3UoUMH9e7dW4sXL9aBAwe0cuVKPffcc+X+kg2g/M6MLW+++aZD++OPP64lS5boxRdf1K5duzRz5ky9/fbbeuKJJyq8htq1a8vLy0tvvfWW9u3bp6+//lovvvhiuZd3++236+OPP9aQIUP0xRdfSJKefvpprVy5UsOHD9fGjRu1e/duffXVVxo+fPgl1z9u3DhNmDBBb775pnbt2qXff/9d06dP1+uvv37Jy0bVROjGFe3//u//9Pjjj+v5559XbGys+vbtq6NHj8rT01P//e9/tWPHDrVo0UKTJk1yOIIsSe3bt9e0adP0r3/9Sy1bttTixYv1j3/8w6HP66+/rpCQEHXs2FE9e/ZUYmKiWrduXer6pk+froEDB+rxxx9X48aN1bt3b61du9bhtCaLxaL+/ftr06ZNxf5i6uvrq59//lm1a9fWHXfcodjYWN13333Ky8sr05HvF154QQcOHFD9+vUdTksHUDlZLBZ99dVXCgkJUefOndWlSxfVq1dPs2fPlnT6FMZjx45p4MCBatSokfr06aPu3btr3LhxkqSOHTvqoYceUt++fRUeHq6XX375out01jhhsVg0f/58de7cWUOGDFGjRo3Ur18/HTx4UJGRkRW2HgCl98ILLxQ7iNC6dWt99tln+vTTT9WsWTM9//zzeuGFF8p9GvqFhIeHa8aMGfr8888VFxeniRMn6tVXX72kZd51112aOXOm/vrXv+rLL79UixYt9NNPP2nXrl3q1KmT4uPj9fzzz6tGjRqXXP+wYcP0wQcfaPr06WrevLkSEhI0Y8YM1a1b95KXjarJYs6+qBUAAAAAAFQYjnQDAAAAAOAkhG7ASZYvX+7wqIhzXwBQWTBeAQDgPJxeDjhJbm6uDh8+fN7pFX23TAAoL8YrAACch9ANAAAAAICTcHo5AAAAgFI5duyYIiIidODAgUtazooVK9S8eXN5enqqd+/eFVKbK7Vv315z5sxxdRmopAjdQAnO/YXijF8My5Ytk8ViUXp6+iUtJyYmRpMnT5YkFRQUKCYmhmfbAleoivqyW1lMmTJFPXv2dHUZAMpg/Pjx6tWrl2JiYi5pOaNGjVKrVq20f/9+zZgxo0Jqc6V//OMfeuaZZ4o9ag2QCN1Aic79hVJVfjF4eXnpiSee0NNPP+3qUgA4QUV92XUFi8WiefPmObQNHTpUGzZs0PLly11TFIAyycnJ0b///W/dd999JU43xujUqVOlWtbevXt10003qVatWgoODi5XPQUFBeWazxm6d++ukydPasGCBa4uBZUQoRs4R0m/UCriF8Plcs899+iXX37R1q1bXV0KgAp0sS+7FaGwsLBYmzO/1Hp5eWnAgAF68803nbYOABVn/vz5slqtat++vaT/nbW3YMECtWnTRlarVb/88otsNpsmTJigunXrysfHRy1bttQXX3whSTpw4IAsFouOHTumoUOHymKx2A9obNmyRd27d5e/v78iIyP117/+VWlpafb133DDDRo+fLhGjhypsLAwJSYmlnq+ESNG6KmnnlJoaKiioqI0duxYh21LT0/Xgw8+qMjISHl7e6tZs2b69ttv7dN/+eUXderUST4+PoqOjtaIESOUnZ1tn+7u7q4ePXro008/rdB9jisDoRs4x9m/UC70i+Gnn37SNddcI6vVqurVq+uZZ55x+Otufn6+RowYoYiICHl7e+v666/X2rVrL7juiw3oR48eVc+ePeXj46O6devqP//5T7FlhISE6Lrr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fu7Ly8tLTZo00alTp7R+/Xr7PDt37izxOd8M+sCV59yxqUWLFlq+fHmJdxwPDAxUjRo1HMYg6fQ4db4x6EJat26t3bt3KyIiotj4FBQUpICAAMXExGjJkiXnXYanp6eKioqKte/du1d5eXmMWUAVkJiYqK1bt17w4ERAQICeeOIJPfbYY5o5c6b27t2rDRs26K233tLMmTPPO98jjzyi48ePq3///lq7dq327t2rRYsWaciQISWOHZc639kSEhLUuXNn3Xnnnfr++++1f/9+LViwwH7zyaefflorV67U8OHDtXHjRu3evVtfffVVsRupLV++XN26dSvVOnF1IXQD5yjNL5SHH35Yhw4d0qOPPqodO3boq6++0pgxYzRq1Ci5ubnJz89Pf/vb3/Tkk09q4cKF2rZtm+6//37l5OSc93E/FxvQGzdurFtuuUUPPvigVq9erfXr12vYsGElHu1i0AeuPOeOTcOHD1dmZqb69eundevWaffu3fr444+1c+dOSdKTTz6pSZMmafbs2dq5c6eeeeYZbdy40eGa69K65557FBYWpl69emn58uXav3+/li1bphEjRuiPP/6QJI0dO1avvfaa3nzzTe3evdv+JfuMM6E8JSXFYXxdvny56tWrp/r161/K7gFwGTRv3lytW7fWZ599dsF+L774ov7v//5PEyZMUGxsrG655RZ99913qlu37nnnOfOHwqKiInXr1k3NmzfXyJEjFRwcfMGzaco737nmzJmjdu3aqX///oqLi9NTTz1lD+0tWrTQTz/9pF27dqlTp06Kj4/X888/73CfjcOHD2vlypUaMmRIqdeJq4iLb+QGVErXXHONmTJliv39uXfYNMaYZcuWmXbt2hkvLy8TFRVlnn76aVNYWGifnpubax599FETFhZmrFarue6668yaNWvs08+9e7kxxqxZs8Z07drV+Pv7Gz8/P9OiRQszfvx4+/Tk5GRz6623GqvVamrXrm0++ugjU6dOHYe7l69cudIEBwebnJycitshACqFc8emTZs2mW7duhlfX18TEBBgOnXqZPbu3WuMMaaoqMiMHTvW1KxZ03h6epqWLVuaBQsW2Oc9c/fy3377zWEdgwYNMr169Sq27uTkZDNw4ED7mFavXj1z//33m4yMDHufKVOmmMaNGxtPT09TvXp18+ijj9qnff3116ZBgwbGw8PD1KlTx97erVs3M2HChEvcMwAul2+//dbExsZyh+5zPPXUU+b+++93dRmopCzGnHV+LABJp2/+8eSTT2rLli2XfK3i5da3b1+1bNlSzz77rKtLAVDBqvLYVJKtW7fqpptu0q5duxQUFOTqcgCU0uTJk3XnnXcqOjra1aVUGq+99pruvfdeRUZGuroUVEKEbuA8quIvlIKCAr388st6/PHHuXMmcIWqimPT+fzwww8qKipSYmKiq0sBAMBpCN0AAAAAADhJ1T83DQAAAACASorQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnOT/Afb3845bTMjvAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Key insight: host_time correctly measures the tricky kernel!\n", - "Use host_time for evaluating untrusted/agent-generated code.\n" - ] - } - ], - "source": [ - "# Side-Stream Detection with KernelBench's host_time\n", - "# Let's demonstrate how host_time catches the tricky kernel\n", - "\n", - "print(\"Side-Stream Detection Experiment:\")\n", - "print(\"=\" * 60)\n", - "\n", - "# cuda_event (can be fooled by side-streams)\n", - "cuda_timing = get_timing_function(\"cuda_event\")\n", - "cuda_times = cuda_timing(tricky_agent_kernel, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", - "cuda_stats = get_timing_stats(cuda_times, device=DEVICE)\n", - "\n", - "# host_time (catches all streams)\n", - "host_timing = get_timing_function(\"host_time\")\n", - "host_times = host_timing(tricky_agent_kernel, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", - "host_stats = get_timing_stats(host_times, device=DEVICE)\n", - "\n", - "# Normal kernel for reference\n", - "normal_times = host_timing(simple_mm, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", - "normal_stats = get_timing_stats(normal_times, device=DEVICE)\n", - "\n", - "print(f\"\\nTricky kernel with cuda_event: {cuda_stats['mean']:.4f} ms (FOOLED!)\")\n", - "print(f\"Tricky kernel with host_time: {host_stats['mean']:.4f} ms (CORRECT)\")\n", - "print(f\"Normal kernel with host_time: {normal_stats['mean']:.4f} ms (reference)\")\n", - "\n", - "# Visualize the dramatic difference\n", - "plt.figure(figsize=(10, 5))\n", - "methods = ['cuda_event\\n(fooled)', 'host_time\\n(correct)', 'Normal kernel\\n(reference)']\n", - "times = [cuda_stats['mean'], host_stats['mean'], normal_stats['mean']]\n", - "colors = ['red', 'green', 'blue']\n", - "\n", - "plt.bar(methods, times, color=colors, alpha=0.8)\n", - "plt.ylabel('Time (ms)')\n", - "plt.title('Side-Stream Detection: cuda_event vs host_time')\n", - "plt.grid(True, alpha=0.3, axis='y')\n", - "\n", - "# Add annotation\n", - "plt.annotate('Agent trick detected!', xy=(1, host_stats['mean']), \n", - " xytext=(1.3, host_stats['mean'] * 0.7),\n", - " arrowprops=dict(arrowstyle='->', color='green'),\n", - " fontsize=10, color='green')\n", - "plt.tight_layout()\n", - "plt.show()\n", - "\n", - "print(\"\\nKey insight: host_time correctly measures the tricky kernel!\")\n", - "print(\"Use host_time for evaluating untrusted/agent-generated code.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Uq4qvl8FzX2j" - }, - "source": [ - "## Correctness Before Speed\n", - "\n", - "A kernel that runs in 0.1ms but produces garbage is worthless. Before you start optimizing, **always verify correctness** against a reference implementation." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T20:56:50.124591Z", - "iopub.status.busy": "2025-12-17T20:56:50.124472Z", - "iopub.status.idle": "2025-12-17T20:56:50.204291Z", - "shell.execute_reply": "2025-12-17T20:56:50.203333Z" - }, - "id": "J9W63Q5czX2k", - "outputId": "312076ee-f089-4276-8b8f-bb7a23575d3d" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "✓ Correctness verified!\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", - "Kernel time: 0.0652 ms\n" - ] - } - ], - "source": [ - "def my_experimental_kernel(a, b):\n", - " \"\"\"Pretend this is our custom optimized kernel.\"\"\"\n", - " return torch.matmul(a, b) # In reality, this would be your Triton/CUDA code\n", - "\n", - "def verify_correctness(kernel_fn, ref_fn, *args, atol=1e-2, rtol=1e-2):\n", - " \"\"\"Verify kernel produces correct output before benchmarking.\"\"\"\n", - " ref_output = ref_fn(*args)\n", - " kernel_output = kernel_fn(*args)\n", - "\n", - " if not torch.allclose(ref_output, kernel_output, atol=atol, rtol=rtol):\n", - " max_diff = (ref_output - kernel_output).abs().max().item()\n", - " raise AssertionError(\n", - " f\"Kernel output doesn't match reference! \"\n", - " f\"Max difference: {max_diff:.6f}\"\n", - " )\n", - " print(\"✓ Correctness verified!\")\n", - " return True\n", - "\n", - "# Always verify before benchmarking\n", - "a_test, b_test = get_data(1024)\n", - "verify_correctness(my_experimental_kernel, simple_mm, a_test, b_test)\n", - "\n", - "# Only benchmark if correct\n", - "time_ms = final_benchmark(my_experimental_kernel, a_test, b_test)\n", - "print(f\"Kernel time: {time_ms:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Computing TFLOPS: Are We Hitting the Speed of Light?\n", - "\n", - "Now that we have correct, well-measured timings, the natural question is: **\"Is this kernel actually fast?\"** A kernel that runs in 2ms might sound good, but if the hardware could theoretically do it in 0.5ms, you're leaving 75% of performance on the table.\n", - "\n", - "To answer this, we convert our millisecond timings into **TFLOPS** (Tera Floating-Point Operations Per Second) and compare against the hardware's theoretical maximum—often called the **\"speed of light\"** or **roofline**.\n", - "\n", - "### Understanding Roofline Analysis\n", - "\n", - "The Roofline Model helps you understand whether your kernel is:\n", - "- **Compute-bound**: Limited by the GPU's arithmetic throughput (FLOPS)\n", - "- **Memory-bound**: Limited by memory bandwidth (GB/s)\n", - "\n", - "**Key formulas:**\n", - "- **Arithmetic Intensity** = FLOPs / Bytes accessed\n", - "- **Theoretical Peak FLOPS** = Clock speed × Cores × FLOPs/cycle\n", - "- **Theoretical Peak Bandwidth** = Memory clock × Bus width × 2 (for DDR)\n", - "\n", - "For matrix multiplication of two $N \\times N$ matrices:\n", - "- **FLOPs** = $2N^3$ (one multiply + one add per output element, summed $N$ times)\n", - "- **Bytes** = $3N^2 \\times \\text{sizeof(dtype)}$ (read A, read B, write C)\n", - "- **Arithmetic Intensity** = $\\frac{2N^3}{3N^2 \\times 4} = \\frac{N}{6}$ for float32\n", - "\n", - "Large matrix multiplications are highly compute-bound (high arithmetic intensity), so we expect to approach the compute roofline. For a deeper dive into roofline analysis and speed-of-light calculations, see the excellent [JAX Scaling Book chapter on Roofline](https://jax-ml.github.io/scaling-book/roofline/)." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T20:56:50.206914Z", - "iopub.status.busy": "2025-12-17T20:56:50.206787Z", - "iopub.status.idle": "2025-12-17T20:56:53.016156Z", - "shell.execute_reply": "2025-12-17T20:56:53.015088Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Matrix Multiplication Performance\n", - "=================================================================\n", - "Size Time (ms) TFLOPS % of TF32 Peak \n", - "-----------------------------------------------------------------\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", - "1024 0.0652 32.94 3.3 %\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", - "2048 0.3450 49.80 5.0 %\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4096 2.6700 51.48 5.2 %\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8192 21.4000 51.38 5.2 %\n", - "\n", - "Note: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\n", - "H200 TF32 theoretical peak: 989.0 TFLOPS\n", - "\n", - "For roofline analysis details, see: https://jax-ml.github.io/scaling-book/roofline/\n" - ] - } - ], - "source": [ - "def get_tflops(n, time_ms):\n", - " \"\"\"Calculate achieved TFLOPS for matrix multiplication.\"\"\"\n", - " flops = 2 * n ** 3 # Multiply-add for each of N^2 output elements\n", - " tflops = flops / (time_ms * 1e-3) / 1e12\n", - " return tflops\n", - "\n", - "# Theoretical peaks vary by GPU and precision\n", - "# PyTorch uses TF32 by default on Ampere+ GPUs for matmul\n", - "GPU_PEAK_TFLOPS = {\n", - " 'A100': {'fp32': 19.5, 'tf32': 156.0, 'fp16': 312.0},\n", - " 'H100': {'fp32': 67.0, 'tf32': 989.0, 'fp16': 1979.0},\n", - " 'H200': {'fp32': 67.0, 'tf32': 989.0, 'fp16': 1979.0},\n", - "}\n", - "\n", - "# Use TF32 peak since PyTorch defaults to TF32 on Ampere+\n", - "PEAK_TFLOPS = 989.0 # H200 TF32 peak\n", - "\n", - "# Benchmark at different sizes\n", - "print(\"Matrix Multiplication Performance\")\n", - "print(\"=\" * 65)\n", - "print(f\"{'Size':<8} {'Time (ms)':<12} {'TFLOPS':<12} {'% of TF32 Peak':<15}\")\n", - "print(\"-\" * 65)\n", - "\n", - "for size in [1024, 2048, 4096, 8192]:\n", - " a_test, b_test = get_data(size)\n", - " time_ms = final_benchmark(simple_mm, a_test, b_test)\n", - " tflops = get_tflops(size, time_ms)\n", - " efficiency = (tflops / PEAK_TFLOPS) * 100\n", - " print(f\"{size:<8} {time_ms:<12.4f} {tflops:<12.2f} {efficiency:<15.1f}%\")\n", - "\n", - "print(f\"\\nNote: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\")\n", - "print(f\"H200 TF32 theoretical peak: {PEAK_TFLOPS} TFLOPS\")\n", - "print(f\"\\nFor roofline analysis details, see: https://jax-ml.github.io/scaling-book/roofline/\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zcYVXCkUzX2k" - }, - "source": [ - "## Conclusion\n", - "\n", - "Benchmarking on GPUs is fundamentally different from CPUs. The asynchronous nature of kernel launches, the hidden state of the L2 cache, and the noise of the OS scheduler all conspire to give you the wrong numbers.\n", - "\n", - "### What We Learned\n", - "\n", - "Through our journey, we discovered that robust GPU benchmarking requires:\n", - "1. **Device Synchronization** - Wait for GPU work to complete\n", - "2. **CUDA Events** - Use GPU-side timestamps, not CPU clocks\n", - "3. **Warmup Runs** - Settle compilation and memory allocators\n", - "4. **Multiple Samples** - Build statistical distributions\n", - "5. **L2 Cache Flushing** - Measure cold cache (realistic) performance\n", - "6. **Median Aggregation** - Filter out OS jitter and outliers\n", - "7. **Side-Stream Detection** - Catch work on non-default streams\n", - "\n", - "### What KernelBench Provides\n", - "\n", - "We've implemented all these best practices in **KernelBench's timing module** (`src/timing.py`):\n", - "\n", - "| Function | Purpose |\n", - "|----------|---------|\n", - "| `get_timing_function(method)` | Factory returning timing function by name |\n", - "| `clear_l2_cache(device)` | L2 cache flushing utility |\n", - "| `get_timing_stats(times)` | Statistical aggregation (mean, std, min, max) |\n", - "\n", - "**Four timing methods for different use cases:**\n", - "- **`cuda_event`** - Default for trusted code (fastest, GPU-side timing)\n", - "- **`host_time`** - For untrusted/agent code (catches all streams)\n", - "- **`do_bench`** - Triton-style adaptive trial counts\n", - "- **`do_bench_impl`** - Transparent do_bench with explicit control\n", - "\n", - "**Key parameters:**\n", - "- `num_warmup`, `num_trials`, `discard_first`, `device`, `verbose`\n", - "\n", - "### Recommended Usage\n", - "\n", - "```python\n", - "from src.timing import get_timing_function, get_timing_stats\n", - "\n", - "# For trusted code\n", - "timing_fn = get_timing_function(\"cuda_event\")\n", - "\n", - "# For agent evaluations (catches side-streams)\n", - "timing_fn = get_timing_function(\"host_time\")\n", - "\n", - "# Run benchmark\n", - "times = timing_fn(kernel, args, num_warmup=10, num_trials=100, device=\"cuda:0\")\n", - "stats = get_timing_stats(times, device=\"cuda:0\")\n", - "print(f\"Mean: {stats['mean']:.4f}ms, Std: {stats['std']:.4f}ms\")\n", - "```\n", - "\n", - "Happy optimizing!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "7Ah151CHzX2k" - }, - "source": [ - "---\n", - "\n", - "### Footnotes\n", - "\n", - "**On GPU Clock States:** For highly reproducible benchmarks (e.g., publishing papers), consider locking GPU clocks with `nvidia-smi -lgc `. GPUs dynamically adjust clock speeds based on thermals and power, which can introduce variance between runs. For most development work, median-based benchmarking handles this adequately.\n", - "\n", - "**On Warmup Iterations:** We use fixed warmup counts (10-50 iterations) for simplicity, but this can be insufficient or wasteful depending on the kernel. In extremely sensitive environments, you can implement an adaptive stopping criterion: run warmup iterations until the variance of recent samples falls below a threshold, indicating the system has stabilized. This is covered in more detail in the [GPU MODE lecture](https://www.youtube.com/watch?v=1i7dxoAfKOU).\n", - "\n", - "**On Bare Metal vs. Virtualized Environments:** Cloud VMs and containers add layers of abstraction that can introduce variance and overhead. GPU passthrough in virtualized environments adds latency, and shared cloud instances suffer from \"noisy neighbor\" effects where other tenants' workloads impact your measurements. For publishable results or when chasing small performance deltas, prefer bare metal. For day-to-day development, cloud instances are fine as long as you're aware your numbers may not match others exactly." - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "gpuType": "A100", - "include_colab_link": true, - "provenance": [] - }, - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.9" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/notebooks/benchmarking.ipynb b/notebooks/benchmarking.ipynb index 7ec44d71..5bb7470d 100644 --- a/notebooks/benchmarking.ipynb +++ b/notebooks/benchmarking.ipynb @@ -28,7 +28,7 @@ "2. **Sample Extensively:** Don't trust one run. Collect 100+ samples to build a statistical distribution.\n", "3. **Flush the L2 Cache:** Between *every* sample, flush the cache to force a cold cache state (simulating real-world inference).\n", "4. **Use Device Timers:** Use `torch.cuda.Event` instead of `time.time()` to measure execution on the GPU, not the CPU driver.\n", - "5. **Aggregate Robustly:** Use the **Median** (not Mean) of your samples to filter out OS jitter/outliers.\n", + "5. **Aggregate Robustly:** Aggregate over many samples to filter out jitter/outliers.\n", "6. **Wait for sidestreams to finish:** Ensure no side-streams are running or wait for all of them to finish before reporting a time.\n", "\n", "*Pro-Tip:* **KernelBench's timing module** (`src/timing.py`) implements all these best practices. Use `get_timing_function(\"cuda_event\")` for trusted code or `get_timing_function(\"host_time\")` for evaluating untrusted/agent-generated code.\n", @@ -50,10 +50,10 @@ "base_uri": "https://localhost:8080/" }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:42.780616Z", - "iopub.status.busy": "2025-12-17T20:56:42.780511Z", - "iopub.status.idle": "2025-12-17T20:56:47.446613Z", - "shell.execute_reply": "2025-12-17T20:56:47.445546Z" + "iopub.execute_input": "2025-12-17T21:24:36.427802Z", + "iopub.status.busy": "2025-12-17T21:24:36.427684Z", + "iopub.status.idle": "2025-12-17T21:24:40.995279Z", + "shell.execute_reply": "2025-12-17T21:24:40.994328Z" }, "id": "PKWz_W7uzX2f", "outputId": "8751fd78-569b-4080-f21a-60bbb5ee8caf" @@ -79,7 +79,10 @@ "# @title Environment Setup\n", "# Ensure we have the necessary libraries and a GPU available\n", "# !pip install -q triton matplotlib numpy torch\n", - "# !pip install -e . # Install KernelBench locally for timing utilities\n", + "# !pip install -e .. # Install KernelBench locally for timing utilities\n", + "\n", + "import sys\n", + "sys.path.insert(0, '..') # Add parent directory to path for imports\n", "\n", "import torch\n", "import time\n", @@ -120,10 +123,10 @@ "base_uri": "https://localhost:8080/" }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.449363Z", - "iopub.status.busy": "2025-12-17T20:56:47.449114Z", - "iopub.status.idle": "2025-12-17T20:56:47.705668Z", - "shell.execute_reply": "2025-12-17T20:56:47.704728Z" + "iopub.execute_input": "2025-12-17T21:24:40.997969Z", + "iopub.status.busy": "2025-12-17T21:24:40.997722Z", + "iopub.status.idle": "2025-12-17T21:24:41.252072Z", + "shell.execute_reply": "2025-12-17T21:24:41.250967Z" }, "id": "gxtKes5lzX2g", "outputId": "5890bae4-5b9a-4366-8947-367146593158" @@ -133,14 +136,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Output shape: torch.Size([4096, 4096])\n", + "Output shape: torch.Size([8192, 8192])\n", "Op ran successfully\n" ] } ], "source": [ "# A standard size for testing\n", - "N = 4096\n", + "N = 8192\n", "\n", "def get_data(n=N, device=DEVICE):\n", " \"\"\"Generate random float32 matrices for benchmarking.\"\"\"\n", @@ -176,10 +179,10 @@ "base_uri": "https://localhost:8080/" }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.708574Z", - "iopub.status.busy": "2025-12-17T20:56:47.708437Z", - "iopub.status.idle": "2025-12-17T20:56:47.712126Z", - "shell.execute_reply": "2025-12-17T20:56:47.711422Z" + "iopub.execute_input": "2025-12-17T21:24:41.254622Z", + "iopub.status.busy": "2025-12-17T21:24:41.254499Z", + "iopub.status.idle": "2025-12-17T21:24:41.258106Z", + "shell.execute_reply": "2025-12-17T21:24:41.257414Z" }, "id": "LynIxLaRzX2g", "outputId": "72548dad-6570-4eaa-ce07-923556fe70b4" @@ -189,7 +192,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Naive time: 0.5345 ms\n" + "Naive time: 0.5236 ms\n" ] } ], @@ -229,10 +232,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.714693Z", - "iopub.status.busy": "2025-12-17T20:56:47.714579Z", - "iopub.status.idle": "2025-12-17T20:56:47.884978Z", - "shell.execute_reply": "2025-12-17T20:56:47.884070Z" + "iopub.execute_input": "2025-12-17T21:24:41.260592Z", + "iopub.status.busy": "2025-12-17T21:24:41.260479Z", + "iopub.status.idle": "2025-12-17T21:24:41.460207Z", + "shell.execute_reply": "2025-12-17T21:24:41.459267Z" } }, "outputs": [ @@ -242,15 +245,15 @@ "text": [ "Comparing Synchronized time.time() vs CUDA Events:\n", "------------------------------------------------------------\n", - "N= 512: sync= 0.0358ms, events= 0.0334ms, overhead=+0.0023ms\n", - "N=1024: sync= 0.0725ms, events= 0.0716ms, overhead=+0.0008ms\n", - "N=2048: sync= 0.3552ms, events= 0.3536ms, overhead=+0.0017ms\n", - "N=4096: sync= 2.6958ms, events= 2.6885ms, overhead=+0.0073ms\n" + "N= 512: sync= 0.0699ms, events= 0.0374ms, overhead=+0.0325ms\n", + "N=1024: sync= 0.0725ms, events= 0.0718ms, overhead=+0.0007ms\n", + "N=2048: sync= 0.3567ms, events= 0.3543ms, overhead=+0.0024ms\n", + "N=4096: sync= 2.7008ms, events= 2.6914ms, overhead=+0.0094ms\n" ] }, { "data": { - "image/png": "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x6lXr56wtrYW0dHRup5apomPjxcVKlQQ5ubmwt/fX+3xsLAwMXbsWGm7W7duwsLCQqVOYmKiqFSpkgAgXr58qbVeShYWFqJbt24ZcxJfgUKhEFFRURk2fsxIa9eu1TgOHzRokHBychIKhUI/gZFOePke0UezZs1CZGQkVq9eDUdHR7XHixcvjp9++inVNhwcHODi4oLHjx9naGzLly/Hy5cvMXfuXJQuXVrt8Xz58mH8+PGpthEcHIxevXohX758kMvlqFChAv744w+1egqFAgsWLEC5cuUgl8thZ2eHRo0a4fLly6m2P3XqVBgYGGDhwoVa65QtWxZ16tTReMwCBQqgTZs2UtnmzZvh7u4OKysrWFtbo1y5cliwYEGqMZw/fx6HDx9G37590apVK411KlWqhE6dOqXaDgDUrVsXADL8bzl58mTIZDJs3LgRVlZWGuNLayr31atX0bhxY1hbW8PS0hL16tXDhQsX1OqFhoZi6NChKFKkCExNTVGwYEF07doVb9680dp2bGwsmjVrBhsbG5w7dy7d5/cpTdf4J13SevLkSVSqVAlmZmYoV64cTp48CQDYsWOH9Pxzd3fH1atXVdrUtLZH0jpnu3btQtmyZWFqagpXV1ccOnRILaak48rlcjg7O2P58uVcL4SIsqzHjx/jv//+Q/369VXKAwICAAAeHh5q+yQtPwAAa9euhUwmU3svBYBff/0VhoaGePnyJQDl5dlly5bF7du3UadOHZibm6NAgQKYNWuW2r4xMTGYNGkSSpYsCblcDkdHR7Rq1UqKS5tP15RKWp/m77//xrRp01CwYEHI5XLUq1cPDx8+VNv/4sWLaNKkCWxtbWFhYYHy5cunOj5IunxM01IJmi41P3PmDCpXrqzyGaHNhg0b4O7uDjMzM+TOnRvt27fH8+fPVeo8ePAArVu3hoODA+RyOQoWLIj27dsjLCxMa7tfYtu2bahcuTIqV64slZUuXRr16tXD33//neq+4eHhOHr0KDp37iw9fwCga9eusLS0VNl/27ZtMDQ0RN++faUyuVyOXr164fz582r9kNKrV6/g5+eHVq1aQS6XS+VJn8X3799H586dYWNjAzs7O/z8888QQuD58+fS7BcHBwfMmTNHre2FCxfC1dUV5ubmsLW1RaVKlbBp06ZUz3v79u24fv06xo0bJ83wSsna2hrTpk1L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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHpCAYAAABTH4/7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA5SdJREFUeJzs3XdYU9cbB/BvmGGLCgIOVERFRLFuceBA3FIXbq2zddXtz1V33VXr3taq1br3Fvfe2ypuEcHBkk3O74/IhZiEoWAQvp/n8Wnvueee++YkISdvzj1XJoQQICIiIiIiIiIi+ob0dB0AERERERERERHlPExKERERERERERHRN8ekFBERERERERERfXNMShERERERERER0TfHpBQREREREREREX1zTEoREREREREREdE3x6QUERERERERERF9c0xKERERERERERHRN8ekFBERERERERERfXNMShEREREREWUjXbt2hbm5ua7DUOHp6QlPT09dh0FEWQyTUkRERERElGX5+/ujd+/eKFq0KORyOSwtLeHh4YF58+YhKipKqle4cGHIZDLpn62tLWrUqIHt27ertFe4cGE0adJE47kuX74MmUyGNWvWpCm258+f4+eff0bhwoVhbGwMW1tb+Pj44MyZM1/8eCltFi1alObnCYD0upg9e7bavjVr1kAmk+Hy5csZGKGSl5cXZDIZ+vXrp3H/ypUr4eLiArlcDmdnZ8yfP19jvY0bN+KHH36AXC6HjY0Nunfvjrdv32qs++bNG/Tu3Rv58+eHXC5H4cKF0b179wx7TEQZyUDXARAREREREWmyd+9etG7dGsbGxujcuTNKly6N2NhYnD59GsOGDcOdO3ewbNkyqb67uzuGDBkCAAgICMDSpUvRokULLF68GD///HOGxnbmzBk0atQIANCjRw+UKlUKgYGBWLNmDWrUqIF58+ahf//+GXpOSrJo0SLkzZsXXbt2TddxM2fOxC+//AJTU9PMCSyZbdu24dy5c1r3L126FD///DNatmyJwYMH49SpUxgwYAAiIyMxYsQIqd7ixYvRp08f1K1bF3/88QdevnyJefPm4fLly7hw4QLkcrlU98WLF/Dw8AAA/Pzzz8ifPz8CAgJw8eLFzHugRF+BSSkiIiIiIspynjx5grZt28LR0RHHjh2Dvb29tK9v37549OgR9u7dq3JM/vz5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", "text/plain": [ "
" ] @@ -263,8 +266,8 @@ "output_type": "stream", "text": [ "\n", - "Key insight: Synchronized timing includes 0.007ms of CPU overhead.\n", - "CUDA Events (2.6885ms) measure pure GPU execution time.\n" + "Key insight: Synchronized timing includes 0.009ms of CPU overhead.\n", + "CUDA Events (2.6914ms) measure pure GPU execution time.\n" ] } ], @@ -361,10 +364,10 @@ "base_uri": "https://localhost:8080/" }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.887269Z", - "iopub.status.busy": "2025-12-17T20:56:47.887144Z", - "iopub.status.idle": "2025-12-17T20:56:47.899041Z", - "shell.execute_reply": "2025-12-17T20:56:47.898350Z" + "iopub.execute_input": "2025-12-17T21:24:41.463315Z", + "iopub.status.busy": "2025-12-17T21:24:41.463177Z", + "iopub.status.idle": "2025-12-17T21:24:41.532922Z", + "shell.execute_reply": "2025-12-17T21:24:41.531966Z" }, "id": "i6PfSdkTzX2i", "outputId": "8b3e29d1-1789-4bfb-9a44-599016516dd7" @@ -374,9 +377,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Run 0: 2.8415 ms\n", - "Run 1: 2.7093 ms\n", - "Run 2: 2.7007 ms\n" + "Run 0: 21.9622 ms\n", + "Run 1: 21.6770 ms\n", + "Run 2: 21.4259 ms\n" ] } ], @@ -421,10 +424,10 @@ "base_uri": "https://localhost:8080/" }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.901255Z", - "iopub.status.busy": "2025-12-17T20:56:47.901143Z", - "iopub.status.idle": "2025-12-17T20:56:47.993793Z", - "shell.execute_reply": "2025-12-17T20:56:47.992809Z" + "iopub.execute_input": "2025-12-17T21:24:41.535509Z", + "iopub.status.busy": "2025-12-17T21:24:41.535387Z", + "iopub.status.idle": "2025-12-17T21:24:42.246476Z", + "shell.execute_reply": "2025-12-17T21:24:42.245382Z" }, "id": "j_PsAuJkzX2i", "outputId": "d6983401-72d3-468c-ffd8-c0833e8d5556" @@ -434,9 +437,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Run 0: 2.7697 ms\n", - "Run 1: 2.6890 ms\n", - "Run 2: 2.6891 ms\n" + "Run 0: 21.4824 ms\n", + "Run 1: 21.4355 ms\n", + "Run 2: 21.4300 ms\n" ] } ], @@ -485,10 +488,10 @@ "height": 653 }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:47.996630Z", - "iopub.status.busy": "2025-12-17T20:56:47.996511Z", - "iopub.status.idle": "2025-12-17T20:56:48.348631Z", - "shell.execute_reply": "2025-12-17T20:56:48.347785Z" + "iopub.execute_input": "2025-12-17T21:24:42.248937Z", + "iopub.status.busy": "2025-12-17T21:24:42.248818Z", + "iopub.status.idle": "2025-12-17T21:24:44.484746Z", + "shell.execute_reply": "2025-12-17T21:24:44.483759Z" }, "id": "T-7QH4cHzX2i", "outputId": "c758effd-a810-422d-d3ca-66c128cdb716" @@ -496,7 +499,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAIjCAYAAADvBuGTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkKdJREFUeJzs3Xd4VFX+x/HPTMqkTAqQBAg1AtJFRLCggoKgoogFZYUF1HVxDbrI6iK6FnQ1a13rYlkE3BVxUfiJICgqoChYQJEmvSgtoaSXSXLv74+YgSHJZGZyk0zg/XoenofcOffOuTPnnjnfe8q1maZpCgAAAABQI/b6zgAAAAAAnAwIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgCggVi2bJlsNpvee++9+s6KTx555BHZbDYdOnTIa7qxY8eqbdu2dZMpH7Rt21Zjx46t72w0SLt27ZLNZtOMGTOqTRts3zsAWIHgCgAkzZgxQzabzeNfUlKSLr74Yi1atKi+s4da0r9/f3Xr1s1rmo0bN+qRRx7Rrl27Krz2r3/9y6dAwmpHjx7V7bffrhYtWig6Olo9evTQ008/HdCx5s2bp8svv1wJCQkKDw9XcnKybrjhBn3++ecW5zowhmHorbfe0jnnnKPGjRsrJiZGp59+ukaPHq1Vq1a503n7nqxQX981gIYltL4zAADB5NFHH1VKSopM09TBgwc1Y8YMXXHFFfrwww915ZVX1nf2TkpvvPGGDMOo72y4bd68WXb7sXuPGzdu1JQpU9S/f/8KPS3/+te/lJCQUOc9XWPHjtVHH32k8ePHq1OnTlq7dq3efvtt3XvvvT4fwzRN3XLLLZoxY4Z69uypiRMnqlmzZtq/f7/mzZunAQMG6KuvvtL5559fi2dSvbvuukuvvPKKrr76ao0cOVKhoaHavHmzFi1apNNOO03nnnuuJO/fkxXq67sG0LAQXAHAcS6//HKdffbZ7r9vvfVWNW3aVO+88w7BlY/y8vIUHR3tc/qwsLBazI3/HA5Hvb5/SUmJDMNQeHh4pa/n5eVpwYIFuv322/XPf/7Tvb2oqMiv93n22Wc1Y8YMTZgwQc8995xsNpv7tQceeED/+c9/FBpav82EgwcP6l//+pduu+02vf766x6vPf/888rIyKj1POTn5ysqKqrW3wfAyYFhgQDgRXx8vCIjIys0Mg3D0PPPP6+uXbsqIiJCTZs21bhx43T06FGPdG3bttWVV16pFStWqE+fPoqIiNBpp52mt956q8J7ZWZm6u6771bbtm3lcDjUsmVLjR49usKcJcMw9Pjjj6tly5aKiIjQgAEDtG3bNo805cPdfvrpJ/Xr109RUVFq3769e77W8uXLdc455ygyMlIdO3bUp59+6rH/7t27dccdd6hjx46KjIxUkyZNNHz48ApDrsqHUy5fvlx33HGHkpKS1LJlyyo/z927d6t9+/bq1q2bDh48KKni3JvyeTvPPPOMXn/9dbVr104Oh0O9e/fWd999V+GYc+bMUZcuXRQREaFu3bpp3rx5NZrPc/ycqxkzZmj48OGSpIsvvtg9ZHTZsmVq27atNmzYoOXLl7u39+/f332czMxMTZgwQa1atZLD4VD79u315JNPevTSHX+uzz//vPtcN27cWGX+yt/LNE2P7f4EhQUFBUpLS1OnTp30zDPPeARW5X7/+9+rT58+7r937Nih4cOHq3HjxoqKitK5556rhQsX+vR+//d//6du3bp5fEe+2Llzp0zTVN++fSu8Vj50V/L+PUnSBx98oCFDhig5OVkOh0Pt2rXTY489ptLSUo9jll83q1ev1kUXXaSoqCjdf//91X7XAFCOnisAOE5WVpYOHTok0zSVnp6ul156Sbm5uRo1apRHunHjxmnGjBm6+eabddddd2nnzp16+eWX9cMPP+irr77y6I3Ztm2brr/+et16660aM2aM3nzzTY0dO1a9evVS165dJUm5ubm68MILtWnTJt1yyy0666yzdOjQIc2fP1+//vqrEhIS3Mf7xz/+IbvdrnvuuUdZWVl66qmnNHLkSH3zzTceeTx69KiuvPJKjRgxQsOHD9fUqVM1YsQIvf3225owYYJuv/123XTTTXr66ad1/fXX65dfflFMTIwk6bvvvtPXX3+tESNGqGXLltq1a5emTp2q/v37a+PGjRXu5N9xxx1KTEzUQw89pLy8vEo/2+3bt+uSSy5R48aNtWTJEo9zqsysWbOUk5OjcePGyWaz6amnntK1116rHTt2uD/fhQsX6sYbb1T37t2Vlpamo0eP6tZbb1WLFi28HttXF110ke666y69+OKLuv/++9W5c2dJUufOnfX8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nsaMGaNnn33Wva2wsFCZmZl+H+vpp59WaGio7rjjDsXExOimm26yJI/lDeoTV0qsalugKltJr7rX2rVrp9zcXHdPldV5+eWXX9w9kJ06ddLChQs1YMAA9erVS3v27NFrr73m9TgXXHCBGjVqpHfeeUf3339/tYtatGnTRps3b66wvXxIXVXBTfn2rVu3VnitsuP54+yzz9by5cu1f/9+tWnTpsrvYtmyZTp8+LDmzp2riy66yL19586dfr2ft3IAAOUYFggAXhQXF+uTTz5ReHi4ewjUDTfcoNLSUj322GMV0peUlAQUgFx33XVau3ZtpUtU10dPTUhISIX3femllyosXe0Lm82m119/Xddff73GjBmj+fPnW5LH5ORkdevWTW+99ZY78JXKlplft26dJe8hyf3Mrsq+1+jo6Eq333DDDVq5cqU+/vjjCq9lZma6A3Z/DRgwQFLZw66PP8Y555yjv/3tb9q1a5c6dOhQ7RDTqKgoTZo0SZs2bdKkSZMqLWP//e9/9e2330qSrrjiCn377bdauXKl+/W8vDy9/vrratu2bZXzp5o3b64zzzxTM2fO9Bh+t2TJEq/LzZc7cOBApelcLpc+++wz2e129xDQqr6n8sDx+HN0uVz617/+Ve37H6+q7xoAjkfPFQAcZ9GiRe678enp6Zo1a5a2bt2q++67zz1PpV+/fho3bpzS0tL0448/atCgQQoLC9PWrVs1Z84cvfDCC7r++uv9et97771X7733noYPH65bbrlFvXr10pEjRzR//ny9+uqr6tGjh+Xn6s2VV16p//znP4qLi1OXLl20cuVKffrpp2rSpElAx7Pb7frvf/+rYcOG6YYbbtBHH32kSy65pMb5fOKJJ3T11Verb9++uvnmm3X06FG9/PLL6tatm0fAVRNnnnmmQkJC9OSTTyorK0sOh0OXXHKJkpKS1KtXL02dOlV///vf1b59eyUlJemSSy7Rvffeq/nz5+vKK690L7ufl5endevW6b333tOuXbuqXYq+MmeccYZ7yfHevXvrd7/7neLj4/Xll19q9uzZuvDCC7VixQrddtttmjlzptdj3XvvvdqwYYOeffZZLV26VNdff72aNWumAwcO6P/+7//07bffuoch3nfffXrnnXd0+eWX66677lLjxo01c+ZM7dy5U++//77s9qrv1aalpWnIkCG64IILdMstt+jIkSN66aWX1LVr12q/o19//VV9+vTRJZdcogEDBqhZs2ZKT0/XO++8o7Vr12rChAnuz7Gq7+n8889Xo0aNNGbMGN11112y2Wz6z3/+4/dNi6q+awDwUG/rFAJAEKlsKfaIiAjzzDPPNKdOnepeDv14r7/+utmrVy8zMjLSjImJMbt3727+9a9/Nfft2+dO06ZNG3PIkCEV9u3Xr1+FZZ0PHz5sjh8/3mzRooUZHh5utmzZ0hwzZox56NAh0zSPLcU+Z84cj/0qW/66siXGveVHkpmamur+++jRo+bNN99sJiQkmE6n0xw8eLD5888/V1imvPxz++677yoc8/il2Mvl5+eb/fr1M51Op3s5+KqWYn/66acrzefDDz/ssW327Nlmp06dTIfDYXbr1s2cP3++ed1115mdOnWqsP+JLrroIvOMM87w2HbiOZqmab7xxhvmaaedZoaEhHgs933gwAFzyJAhZkxMjCnJ4zvNyckxJ0+ebLZv394MDw83ExISzPPPP9985plnTJfLVe25ejNt2jSzV69eZkREhOl0Os0LL7zQnD17tmmapnn//febkswpU6b4dKz33nvPHDRokNm4cWMzNDTUbN68uXnjjTeay5Yt80i3fft28/rrrzfj4+PNiIgIs0+fPuaCBQs80lRWFk3TNN9//32zc+fOpsPhMLt06WLOnTu3wvdemezsbPOFF14wBw8ebLZs2dIMCwszY2JizPPOO8984403KlyXVX1PX331lXnuueeakZGRZnJysvnXv/7V/QiC45dur+q6MU3v3zUAlLOZZgOYGQwAgB/OPPNMJSYmasmSJV7TnXXWWYqOjtaXX35ZRzkDAJzMmHMFAGiwiouLK8xfWrZsmdauXav+/ft73Tc3N1c///yzz89bAgCgOsy5AgA0WHv37tXAgQM1atQoJScn6+eff9arr76qZs2a6fbbb690n4MHD2revHn6z3/+o4KCAo0ePbqOcw0AOFkRXAEAGqxGjRqpV69e+ve//62MjAxFR0dryJAh+sc//lHl4hubNm3S+PHj1b59e7311lvq27dvHecaAHCyYs4VAAAAAFiAOVcAAAAAYAGCKwAAAACwAHOuKmEYhvbt26eYmBjZbLb6zg4AAACAemKapnJycpScnOz1oekSwVWl9u3bp1atWtV3NgAAAAAEiV9++UUtW7b0mobgqhIxMTGSyj7A2NjYes2LYRjKyMhQYmJitZEycDzKDgJBuUEgKDcIFGUHgajrcpOdna1WrVq5YwRvCK4qUT4UMDY2NiiCq8LCQsXGxlLpwC+UHQSCcoNAUG4QKMoOAlFf5caX6UKUYgAAAACwAMEVAAAAAFiA4AoAAAAALMCcKwAAAPjFNE2VlJSotLS0RscxDEPFxcUqLCxkzhV8ZnW5CQkJUWhoqCWPYCK4AgAAgM9cLpf279+v/Pz8Gh/LNE0ZhqGcnByeLQqf1Ua5iYqKUvPmzRUeHl6j4xBcAQAAwCeGYWjnzp0KCQlRcnKywsPDa9S4Le8Bs6rXAKcGK8uNaZpyuVzKyMjQzp071aFDhxr1hhFcAQAAwCcul0uGYahVq1aKioqq8fEIrhAIq8tNZGSkwsLCtHv3brlcLkVERAR8LAa3AgAAwC/Mj8LJxqoyzZUBAAAAABYguAIAAAAACxBcAQAAADW0bNky2Ww2ZWZmSpJmzJih+Pj4es0T6h7BFQAAAE5qY8eOlc1m0+23317htdTUVNlsNo0dO9bS97zxxhu1ZcsWS4/pi127dunWW29VSkqKIiMj1a5dOz388MNyuVzV7rty5Updcsklio6OVmxsrC666CIVFBS4X9+yZYuuvvpqJSQkKDY2VhdccIGWLl3qcYzPPvtM559/vmJiYtSsWTNNmjRJJSUlHmlM09Qzzzyj008/XQ6HQy1atNDjjz9uzQdQzwiuAAAAcNJr1aqVZs+e7REsFBYWatasWWrdurXl7xcZGamkpCTLj1udn3/+WYZh6LXXXtOGDRv0z3/+U6+++qruv/9+r/utXLlSl112mQYNGqRvv/1W3333ncaPH++x0MOVV16pkpISff7551q9erV69OihK6+8UgcOHJAkrV27VldccYUuu+wy/fDDD3r33Xc1f/583XfffR7v9ec//1n//ve/9cwzz+jnn3/W/Pnz1adPH+s/jHpAcBXEDMPUzkO52pmRq52HcmUYZn1nCQAAoHJ5eVX/Kyz0Pe1xwU+VaQNw1llnqVWrVpo7d65729y5c9W6dWv17NnTI61hGEpLS3P3/vTo0UPvvfeeR5qPPvpIp59+uiIjI3XxxRdr165dHq+fOCxw+/btuvrqq9W0aVM5nU717t1bn376qcc+bdu21RNPPKFbbrlFMTExat26tV5//XW/zvOyyy7T9OnTNWjQIJ122mkaOnSo7rnnHo/zrszdd9+tu+66S/fdd5+6du2qjh076oYbbpDD4ZAkHTp0SFu3btV9992nM844Qx06dNA//vEP5efna/369ZKkd999V2eccYYeeughtW/fXv369dNTTz2lV155RTk5OZKkTZs2aerUqfrggw80dOhQpaSkqFevXrr00kurzNuuXbtks9n0v//9TxdeeKGioqJ03nnnacuWLfruu+909tlny+l06vLLL1dGRoZ7v2XLlqlPnz6Kjo5WfHy8+vbtq927d/v1efqL4CpIrd+bpccWbtSUDzfqf9//qikfbtRjCzdq/d6s+s4aAABARU5n1f+uu84zbVKS5HTKFhOjsEaNZIuJOZb28ss907ZtW/F4Abrllls0ffp0999vvvmmbr755grp0tLS9NZbb+nVV1/Vhg0bdPfdd2vUqFFavny5JOmXX37Rtddeq6uuuko//vij/vCHP1TonTlRbm6urrjiCn322Wf64YcfdNlll+mqq67Snj17PNI9++yzOvvss/XDDz/ojjvu0J/+9Cdt3rzZ/Xr//v39HsKYlZWlxo0bV/l6enq6vvnmGyUlJen8889X06ZN1a9fP61YscKdpkmTJurYsaPeeust5eXlqaSkRK+99pqSkpLUq1cvSVJRUVGFZ0RFRkaqsLBQq1evliR9+OGHOu2007RgwQKlpKSobdu2+sMf/qAjR45Uex4PP/yw/va3v2n16tUKDQ3VyJEj9de//lUvvPCCvvzyS23btk0PPfSQJKmkpETDhg1Tv3799NNPP2nlypX64x//WOvPUyO4CkLr92bpxc+2at2vWYqPDFdSbITiI8O17tey7QRYAAAA/hs1apRWrFih3bt3a/fu3frqq680atQojzRFRUV64okn9Oabb2rw4ME67bTTNHbsWI0aNUqvvfaaJGnq1Klq166dnn32WXXs2FEjR46sNuDp0aOHxo0bp27duqlDhw567LHH1K5dO82fP98j3RVXXKE77rhD7du316RJk5SQkOAxr6l169Zq3ry5z+e8bds2vfTSSxo3blyVaXbs2CFJeuSRR3Tbbbdp8eLFOuusszRgwABt3bpVkmSz2fTpp5/qhx9+UExMjCIiIvTcc89p8eLFatSokSRp8ODB+vrrr/XOO++otLRUe/fu1aOPPipJ2r9/v/u9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ILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAJzUxo4dK5vNpttvv73Ca6mpqbLZbBo7dmzdZ6waxcXFmjRpkrp3767o6GglJydr9OjR2rdvX7X77t27V6NGjVKTJk0UGRmp7t276/vvv3e/fvDgQY0dO1bJycmKiorSZZddpq1bt3oco7CwUKmpqWrSpImcTqeuu+46HTx40CPNd999pwEDBig+Pl6NGjXS4MGDtXbtWms+gAaI4AoAAAAnvVatWmn27NkqKChwbyssLNSsWbPUunXresxZ1fLz87VmzRo9+OCDWrNmjebOnavNmzdr6NChXvc7evSo+vbtq7CwMC1atEgbN27Us88+q0aNGkmSTNPUsGHDtGPHDn3wwQf64Ycf1KZNGw0cOFB5eXnu49x999368MMPNWfOHC1fvlz79u3Ttdde6349NzdXl112mVq3bq1vvvlGK1asUExMjAYPHqzi4uLa+VCCHMEVAAAAaizPlac8V55M03Rvc5W6lOfKU1FJUaVpDdNwbysuLVaeK0+FJYXVpg3EWWedpVatWmnu3LnubXPnzlXr1q3Vs2dPj7SGYSgtLU0pKSmKjIxUjx499N5777lfLy0t1a233up+vWPHjnrhhRc8jjF27FgNGzZMzzzzjJo3b64mTZooNTXVr6AjLi5OS5Ys0Q033KCOHTvq3HPP1csvv6zVq1drz549Ve735JNPqlWrVpo+fbr69OmjlJQUDRo0SO3atZMkbd26VatWrdLUqVPVu3dvdezYUVOnTlVBQYHeeecdSVJWVpamTZum5557Tpdccol69eql6dOn6+uvv9aqVaskST///LOOHDmiRx99VB07dlTXrl318MMP6+DBg9q9e3eV+bPZbHrttdd05ZVXKioqSp07d9bKlSu1bds29e/fX9HR0Tr//PO1fft29z5r167VxRdfrJiYGMXFxemcc87x6IkLFgRXAAAAqDFnmlPONKcO5R9yb3v6q6flTHNq/EfjPdImPZMkZ5pTe7KOBQivfPeKnGlO3Tr/Vo+0bV9oK2eaU5syNtU4j7fccoumT5/u/vvNN9/UzTffXCFdWlqa3nrrLb366qvasGGD7r77bo0aNUrLly+XVBZ8tWzZUnPmzNHGjRv10EMP6f7779f//vc/j+MsXbpU27dv19KlSzVz5kzNmDFDM2bMcL/+yCOPqG3btn6dQ1ZWlmw2m+Lj46tMM3/+fJ199tkaPny4kpKS1LNnT73xxhvu14uKyoLdiIgI9za73S6Hw6EVK1ZIklavXq3i4mINHDjQnaZTp05q3bq1Vq5cKUnq2LGjmjRpomnTpsnlcqmgoEDTpk1T586dqz2vxx57TKNHj9aPP/6oTp066aabbtK4ceM0efJkff/99zJNU+PHHys3I0eOVMuWLfXdd9/p+++/17333quwsDCfP7e6QnAFAACAU8KoUaO0YsUK7d69W7t379ZXX32lUaNGeaQpKirSE088oTfffFODBw/WaaedprFjx2rUqFF67bXXJElhYWGaMmWKzj77bKWkpGjkyJG6+eabKwRXjRo10ssvv6xOnTrpyiuv1JAhQ/TZZ5+5X09ISHD3JvmisLBQkyZN0u9+9zvFxsZWmW7Hjh2aOnWqOnTooI8//lh/+tOfdNddd2nmzJmSjgVJkydP1tGjR+VyufTkk0/q119/1f79+yVJBw4cUHh4eIUgrmnTpjpw4IAkKSYmRsuWLdN///tfRUZGyul0avHixVq0aJFCQ0O9nsvNN9+sG264QaeffromTZqkXbt2aeTIkRo8eLA6d+6sP//5z1q2bJk7/Z49ezRw4EB16tRJHTp00PXXX68ePXr4/NnVFe9nDQAAAPggd3KuJCkqLMq97d6+92rCuRMUavdscqbfky5JigiNkFFaNtwvtXeqbjvrNoXYQzzS7vrzLklSZFhkjfOYmJioIUOGaMaMGTJNU0OGDFFCQoJHmm3btik/P1+XXnqpx3aXy+UxfPCVV17Rm2++qT179qigoEAul0tnnnmmxz5du3ZVSMix82nevLnWrVvn/nv8+PEevTPeFBcX64YbbpBpmpo6darXtIZh6Oyzz9YTTzwhSerZs6fWr1+vV199VWPGjFFYWJjmzp2rW2+9VY0bN1ZISIgGDhyoyy+/3GNYZ3UKCgp06623qm/fvnrnnXdUWlqqZ555RkOGDNF3332nyMiqv7MzzjjD/f+mTZtKkrp37+6xrbCwUNnZ2YqNjdXEiRP1hz/8Qf/5z380YMAAXXPNNerYsaPPea0rBFcAAACosejw6ArbwkPCFR4SXmVa0zRlqCy4CgsJU1hIxWFelR23Jm655RZ3QPPKK69UeD03tyxIXLhwoVq0aOHxmsPhkCTNnj1b99xzj5599lmdd955iomJ0dNPP61vvvnGI/2Jw9ZsNpsMw/+5Y+WB1e7du/X555977bWSyoK4Ll26eGzr3Lmz3n//ffffvXr10o8//qisrCy5XC4lJibqnHPO0dlnny1JatasmVwulzIzMz16rw4ePKhmzZpJkmbNmqVdu3Zp5cqVstvt7m2NGjXSBx98oBEjRlSZx+M/G5vNVuW28s/rkUce0U033aSFCxdq0aJFeuSRR/TOO+94LLARDAiuAAAAcMq47LLL5HK5ZLPZNHjw4Aqvd+nSRQ6HQ3v27FG/fv0qPcZXX32l888/X3fccYd72/GLL1ipPLDaunWrli5dqiZNmlS7T9++fbV582aPbVu2bFGbNm0qpI2Li5NUtsjF999/r8cee0xSWfAVFhamzz77TNddd50kafPmzdqzZ4/OO+88SWWrGdrtdncgJMn9dyBBZHVOP/10nX766ZowYYJGjBihGTNmBF1wxZwrAAAAnDJCQkK0adMmbdy40WPIXrmYmBjdc889uvvuuzVz5kxt375da9as0UsvveSes9ShQwd9//33+vjjj7VlyxY9+OCD+u677/zOy8svv6wBAwZU+XpxcbGuv/56ff/993r77bdVWlqqAwcO6MCBA3K5XO50AwYM0Msvv+z+++6779aqVav0xBNPaNu2bZo1a5Zef/11paamutPMmTNHy5Ytcy/Hfumll2rYsGEaNGiQpLKg69Zbb9XEiRO1dOlSrV69WjfffLPOO+88nXvuuZKkSy+9VEePHlVqaqo2bdqkDRs26Oabb1ZoaKguvvhivz+PqhQUFGj8+PFatmyZe67c6tWr1alTJ8vewyr0XAEAAOCUUt2wuscee0yJiYlKS0vTjh07FB8fr7POOkv333+/JGncuHH64YcfdOONN8pms+l3v/ud7rjjDi1atMivfBw6dMhrj9fevXs1f/58Saown2vp0qXq37+/pLJes0OHjq3S2Lt3b82bN0+TJ0/Wo48+qpSUFD3//PMaOXKkO83+/fs1ceJEHTx4UM2bN9fo0aP14IMPerzHP//5T9ntdl133XUqKirS4MGD9a9//cv9eqdOnfThhx9qypQpOu+882S329WzZ08tXrxYzZs39+uz8CYkJESHDx/W6NGjdfDgQSUkJGjYsGGaMmWKZe9hFZvpz6y1U0R2drbi4uKUlZVV7cVX2wzDUHp6upKSktxjWQFfUHYQCMoNAkG5OXUUFhZq586dSklJ8VjGO1CmaaqkpEShoaEeQ8sAb2qj3Hgr2/7EBtSAAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAC/sB4aTjZWlel6Da7S0tLUu3dvxcTEKCkpScOGDavwwLMT9e/fXzabrcK/IUOGuNPk5uZq/PjxatmypSIjI9WlSxe9+uqrtX06AAAAJ7WwsDBJZQ+PBU4m5WW6vIwHql6fc7V8+XKlpqaqd+/eKikp0f33369BgwZp48aNio6OrnSfuXPnejw07fDhw+rRo4eGDx/u3jZx4kR9/vnn+u9//6u2bdvqk08+0R133KHk5GQNHTq01s8LAADgZBQSEqL4+Hilp6dLkqKiomq0FDZLsSMQVpYb0zSVn5+v9PR0xcfHV/pgaX/Ua3C1ePFij79nzJihpKQkrV69WhdddFGl+zRu3Njj79mzZysqKsojuPr66681ZswY94PV/vjHP+q1117Tt99+S3AFAABQA82aNZMkd4BVE6ZpyjAM2e12giv4rDbKTXx8vLts10S9BlcnysrKklQxgPJm2rRpGjFihEdP1/nnn6/58+frlltuUXJyspYtW6YtW7bon//8Z6XHKCoqUlFRkfvv7OxsSWUPRTQMI5BTsYxhGO4CBPiDsoNAUG4QCMrNqadp06ZKSEhQcXFxjY5jGIaOHDmixo0b8wBq+MzqchMWFqaQkBCZplnp3Ct/6ragCa4Mw9CECRPUt29fdevWzad9vv32W61fv17Tpk3z2P7SSy/pj3/8o1q2bKnQ0FDZ7Xa98cYbVfaGpaWlacqUKRW2Z2RkqLCw0P+TsZBhGMrKypJpmlQ68AtlB4Gg3CAQlBsEyjAM5eXludtrgC/qutzk5OT4nDZogqvU1FStX79eK1as8HmfadOmqXv37urTp4/H9pdeekmrVq3S/Pnz1aZNG33xxRdKTU1VcnKyBg4cWOE4kydP1sSJE91/Z2dnq1WrVkpMTFRsbGzgJ2UBwzBks9mUmJhIpQO/UHYQCMoNAkG5QaAoOwhEXZebiIgIn9MGRXA1fvx4LViwQF988YVatmzp0z55eXmaPXu2Hn30UY/tBQUFuv/++zVv3jz3CoJnnHGGfvzxRz3zzDOVBlcOh0MOh6PCdrvdHhQXus1mC5q8oGGh7CAQlBsEgnKDQFF2EIi6LDf+vEe9BlemaerOO+/UvHnztGzZMqWkpPi875w5c1RUVKRRo0Z5bC8uLlZxcXGFDyEkJISx4AAAAABqTb0GV6mpqZo1a5Y++OADxcTE6MCBA5KkuLg4RUZGSpJGjx6tFi1aKC0tzWPfadOmadiwYWrSpInH9tjYWPXr10/33nuvIiMj1aZNGy1fvlxvvfWWnnvuubo5MQAAAACnnHoNrqZOnSpJ7iXTy02fPl1jx46VJO3Zs6dCL9TmzZu1YsUKffLJJ5Ued/bs2Zo8ebJGjhypI0eOqE2bNnr88cd1++23W34OAAAAACAFwbDA6ixbtqzCto4dO3rdt1mzZpo+fXpNsgYAAAAAfmHmIAAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAAL1GtwlZaWpt69eysmJkZJSUkaNmyYNm/e7HWf/v37y2azVfg3ZMgQj3SbNm3S0KFDFRcXp+joaPXu3Vt79uypzdMBAAAAcAqr1+Bq+fLlSk1N1apVq7RkyRIVFxdr0KBBysvLq3KfuXPnav/+/e5/69evV0hIiIYPH+5Os337dl1wwQXq1KmTli1bpp9++kkPPvigIiIi6uK0AAAAAJyCQuvzzRcvXuzx94wZM5SUlKTVq1froosuqnSfxo0be/w9e/ZsRUVFeQRXDzzwgK644go99dRT7m3t2rWzMOcAAAAA4Kleg6sTZWVlSaoYQHkzbdo0jRgxQtHR0ZIkwzC0cOFC/fWvf9XgwYP1ww8/KCUlRZMnT9awYcMqPUZRUZGKiorcf2dnZ7uPZRhGgGdjDcMwZJpmvecDDQ9lB4Gg3CAQlBsEirKDQNR1ufHnfYImuDIMQxMmTFDfvn3VrVs3n/b59ttvtX79ek2bNs29LT09Xbm5ufrHP/6hv//973ryySe1ePFiXXvttVq6dKn69etX4ThpaWmaMmVKhe0ZGRkqLCwM/KQsYBiGsrKyZJqm7HbWH4HvKDsIBOUGgaDcIFCUHQSirstNTk6Oz2ltpmmatZgXn/3pT3/SokWLtGLFCrVs2dKnfcaNG6eVK1fqp59+cm/bt2+fWrRood/97neaNWuWe/vQoUMVHR2td955p8JxKuu5atWqlY4eParY2NganFXNGYahjIwMJSYmUunAL5QdBIJyg0BQbhAoyg4CUdflJjs7W40aNVJWVla1sUFQ9FyNHz9eCxYs0BdffOFzYJWXl6fZs2fr0Ucf9diekJCg0NBQdenSxWN7586dtWLFikqP5XA45HA4Kmy32+1BcaHbbLagyQsaFsoOAkG5QSAoNwgUZQeBqMty48971GtwZZqm7rzzTs2bN0/Lli1TSkqKz/vOmTNHRUVFGjVqlMf28PBw9e7du8KS7lu2bFGbNm0syTcAAAAAnKheg6vU1FTNmjVLH3zwgWJiYnTgwAFJUlxcnCIjIyVJo0ePVosWLZSWluax77Rp0zRs2DA1adKkwnHvvfde3Xjjjbrooot08cUXa/Hixfrwww+1bNmyWj8nAAAAAKemeg2upk6dKqnswcDHmz59usaOHStJ2rNnT4WuuM2bN2vFihX65JNPKj3uNddco1dffVVpaWm666671LFjR73//vu64IILLD8HAAAAAJCCYFhgdSrrberYsWO1+95yyy265ZZbAs0aAAAAAPiFmYMAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYIFQf3cwDEPLly/Xl19+qd27dys/P1+JiYnq2bOnBg4cqFatWtVGPgEAAAAgqPncc1VQUKC///3vatWqla644gotWrRImZmZCgkJ0bZt2/Twww8rJSVFV1xxhVatWlWbeQYAAACAoONzz9Xpp5+u8847T2+88YYuvfRShYWFVUize/duzZo1SyNGjNADDzyg2267zdLMAgAAAECw8jm4+uSTT9S5c2evadq0aaPJkyfrnnvu0Z49e2qcOQAAAABoKHweFlhdYHW8sLAwtWvXLqAMAQAAAEBDFNBqgYsXL9aKFSvcf7/yyis688wzddNNN+no0aOWZQ4AAAAAGoqAgqt7771X2dnZkqR169bpL3/5i6644grt3LlTEydOtDSDAAAAANAQ+L0UuyTt3LlTXbp0kSS9//77uvLKK/XEE09ozZo1uuKKKyzNIAAAAAA0BAH1XIWHhys/P1+S9Omnn2rQoEGSpMaNG7t7tAAAAADgVBJQz9UFF1ygiRMnqm/fvvr222/17rvvSpK2bNmili1bWppBAAAAAGgIAuq5evnllxUaGqr33ntPU6dOVYsWLSRJixYt0mWXXWZpBgEAAACgIQio56p169ZasGBBhe3//Oc/a5whAAAAAGiIAuq5Kpeenq7169frp59+8vjnq7S0NPXu3VsxMTFKSkrSsGHDtHnzZq/79O/fXzabrcK/IUOGVJr+9ttvl81m0/PPP+/PqQEAAACAXwLquVq9erXGjBmjTZs2yTRNSZLNZpNpmrLZbCotLfXpOMuXL1dqaqp69+6tkpIS3X///Ro0aJA2btyo6OjoSveZO3euXC6X++/Dhw+rR48eGj58eIW08+bN06pVq5ScnBzAWQIAAACA7wIKrm655RadfvrpmjZtmpo2bSqbzRbQmy9evNjj7xkzZigpKUmrV6/WRRddVOk+jRs39vh79uzZioqKqhBc7d27V3feeac+/vjjKnu1yhUVFamoqMj9d/mKh4ZhyDAMn8+nNhiGIdM06z0faHgoOwgE5QaBoNwgUJQdBKKuy40/7xNQcLVjxw69//77at++fSC7VykrK0tSxQDKm2nTpmnEiBEePV2GYej3v/+97r33XnXt2rXaY6SlpWnKlCkVtmdkZKiwsNDnvNQGwzCUlZUl0zRlt9doFCdOMZQdBIJyg0BQbhAoyg4CUdflJicnx+e0AQVXAwYM0Nq1ay0NrgzD0IQJE9S3b19169bNp32+/fZbrV+/XtOmTfPY/uSTTyo0NFR33XWXT8eZPHmyJk6c6P47OztbrVq1UmJiomJjY30/iVpgGIZsNpsSExOpdOAXyg4CQblBICg3CBRlB4Go63ITERHhc9qAgqt///vfGjNmjNavX69u3bopLCzM4/WhQ4f6fczU1FStX79eK1as8HmfadOmqXv37urTp4972+rVq/XCCy9ozZo1Pg9XdDgccjgcFbbb7faguNBtNlvQ5AUNC2UHgaDcIBCUGwSKsoNA1GW58ec9AgquVq5cqa+++kqLFi2q8Jo/C1qUGz9+vBYsWKAvvvjC54cQ5+Xlafbs2Xr00Uc9tn/55ZdKT09X69at3dtKS0v1l7/8Rc8//7x27drlV94AAAAAwBcBhXp33nmnRo0apf3797sXfSj/509gZZqmxo8fr3nz5unzzz9XSkqKz/vOmTNHRUVFGjVqlMf23//+9/rpp5/0448/uv8lJyfr3nvv1ccff+zz8QEAAADAHwH1XB0+fFh33323mjZtWqM3T01N1axZs/TBBx8oJiZGBw4ckCTFxcUpMjJSkjR69Gi1aNFCaWlpHvtOmzZNw4YNU5MmTTy2N2nSpMK2sLAwNWvWTB07dqxRfgEAAACgKgEFV9dee62WLl2qdu3a1ejNp06dKqnswcDHmz59usaOHStJ2rNnT4Vxjps3b9aKFSv0ySef1Oj9AQAAAMAqAQVXp59+uiZPnqwVK1aoe/fuFRa08HWVvvIHEHuzbNmyCts6duzo077lmGcFAAAAoLYFvFqg0+nU8uXLtXz5co/XbDabz8EVAAAAAJwsAgqudu7caXU+AAAAAKBB44ECAAAAAGABn4Orf/zjHyooKPAp7TfffKOFCxcGnCkAAAAAaGh8Dq42btyo1q1b64477tCiRYuUkZHhfq2kpEQ//fST/vWvf+n888/XjTfeqJiYmFrJMAAAAAAEI5/nXL311ltau3atXn75Zd10003Kzs5WSEiIHA6H8vPzJUk9e/bUH/7wB40dO1YRERG1lmkAAAAACDZ+LWjRo0cPvfHGG3rttdf0008/affu3SooKFBCQoLOPPNMJSQk1FY+AQAAACCoBbRaoN1u15lnnqkzzzzT4uwAAAAAQMPEaoEAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALFCj4Grbtm36+OOP3Q8XNk3TkkwBAAAAQEMTUHB1+PBhDRw4UKeffrquuOIK7d+/X5J066236i9/+YulGQQAAACAhiCg4Oruu+9WaGio9uzZo6ioKPf2G2+8UYsXL7YscwAAAADQUAT0nKtPPvlEH3/8sVq2bOmxvUOHDtq9e7clGQMAAACAhiSgnqu8vDyPHqtyR44ckcPhqHGmAAAAAKChCSi4uvDCC/XWW2+5/7bZbDIMQ0899ZQuvvhiyzIHAAAAAA1FQMMCn3rqKQ0YMEDff/+9XC6X/vrXv2rDhg06cuSIvvrqK6vzCAAAAABBL6Ceq27dumnLli264IILdPXVVysvL0/XXnutfvjhB7Vr187qPAIAAABA0Auo50qS4uLi9MADD1iZFwAAAABosAIOrgoLC/XTTz8pPT1dhmF4vDZ06NAaZwwAAAAAGpKAgqvFixdr9OjROnToUIXXbDabSktLa5wxAAAAAGhIAppzdeedd2r48OHav3+/DMPw+EdgBQAAAOBUFFBwdfDgQU2cOFFNmza1Oj8AAAAA0CAFFFxdf/31WrZsmcVZAQAAAICGK6A5Vy+//LKGDx+uL7/8Ut27d1dYWJjH63fddZclmQMAAACAhiKg4Oqdd97RJ598ooiICC1btkw2m839ms1mI7gCAAAAcMoJKLh64IEHNGXKFN13332y2wMaWQgAAAAAJ5WAIiOXy6Ubb7yRwAoAAAAAfhNQdDRmzBi9++67VucFAAAAABqsgIYFlpaW6qmnntLHH3+sM844o8KCFs8995wlmQMAAACAhiKg4GrdunXq2bOnJGn9+vUerx2/uAUAAAAAnCoCCq6WLl1qdT4AAAAAoEFjRQoAAAAAsIDPPVfXXnutZsyYodjYWF177bVe086dO7fGGQMAAACAhsTn4CouLs49nyouLq7WMgQAAAAADZHPwdX06dP16KOP6p577tH06dNrM08AAAAA0OD4NedqypQpys3Nra28AAAAAECD5VdwZZpmbeUDAAAAABo0v1cL5DlWAAAAAFCR38+5Ov3006sNsI4cORJwhgAAAACgIfI7uJoyZQqrBQIAAADACfwOrkaMGKGkpKTayAsAAAAANFh+zblivhUAAAAAVI7VAgEAAADAAn4NCzQMo7byAQAAAAANmt9LsQMAAAAAKiK4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGABgisAAAAAsADBFQAAAABYgOAKAAAAACxAcAUAAAAAFiC4AgAAAAALEFwBAAAAgAUIrgAAAADAAgRXAAAAAGCBeg2u0tLS1Lt3b8XExCgpKUnDhg3T5s2bve7Tv39/2Wy2Cv+GDBkiSSouLtakSZPUvXt3RUdHKzk5WaNHj9a+ffvq4pQAAAAAnKLqNbhavny5UlNTtWrVKi1ZskTFxcUaNGiQ8vLyqtxn7ty52r9/v/vf+vXrFRISouHDh0uS8vPztWbNGj344INas2aN5s6dq82bN2vo0KF1dVoAAAAATkGh9fnmixcv9vh7xowZSkpK0urVq3XRRRdVuk/jxo09/p49e7aioqLcwVVcXJyWLFnikebll19Wnz59tGfPHrVu3drCMwAAAACAMvUaXJ0oKytLUsUAyptp06ZpxIgRio6O9npcm82m+Pj4Sl8vKipSUVGR++/s7GxJkmEYMgzD57zUBsMwZJpmvecDDQ9lB4Gg3CAQlBsEirKDQNR1ufHnfYImuDIMQxMmTFDfvn3VrVs3n/b59ttvtX79ek2bNq3KNIWFhZo0aZJ+97vfKTY2ttI0aWlpmjJlSoXtGRkZKiws9O0EaolhGMrKypJpmrLbWX8EvqPsIBCUGwSCcoNAUXYQiLouNzk5OT6nDZrgKjU1VevXr9eKFSt83mfatGnq3r27+vTpU+nrxcXFuuGGG2SapqZOnVrlcSZPnqyJEye6/87OzlarVq2UmJhYZUBWVwzDkM1mU2JiIpUO/ELZQSAoNwgE5QaBouwgEHVdbiIiInxOGxTB1fjx47VgwQJ98cUXatmypU/75OXlafbs2Xr00Ucrfb08sNq9e7c+//xzr0GSw+GQw+GosN1utwfFhW6z2YImL2hYKDsIBOUGgaDcIFCUHQSiLsuNP+9Rr8GVaZq68847NW/ePC1btkwpKSk+7ztnzhwVFRVp1KhRFV4rD6y2bt2qpUuXqkmTJlZmGwAAAAAqqNfgKjU1VbNmzdIHH3ygmJgYHThwQFLZin+RkZGSpNGjR6tFixZKS0vz2HfatGkaNmxYhcCpuLhY119/vdasWaMFCxaotLTUfdzGjRsrPDy8Ds4MAAAAwKmmXoOr8nlQ/fv399g+ffp0jR07VpK0Z8+eCl1xmzdv1ooVK/TJJ59UOObevXs1f/58SdKZZ57p8drSpUsrvBcAAAAAWKHehwVWZ9myZRW2dezYscp927Zt69NxAQAAAMBKzBwEAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYAGCKwAAAACwAMEVAAAAAFiA4AoAAAAALEBwBQAAAAAWILgCAAAAAAsQXAEAAACABQiuAAAAAMACBFcAAAAAYIF6Da7S0tLUu3dvxcTEKCkpScOGDdPmzZu97tO/f3/ZbLYK/4YMGeJOY5qmHnroITVv3lyRkZEaOHCgtm7dWtunAwAAgphhmNqRkau1v2RqR0auDMOs7ywBOMmE1uebL1++XKmpqerdu7dKSkp0//33a9CgQdq4caOio6Mr3Wfu3LlyuVzuvw8fPqwePXpo+PDh7m1PPfWUXnzxRc2cOVMpKSl68MEHNXjwYG3cuFERERG1fl4AACC4rN+bpffX/Kpt6bkqKjbkCLOrfZJT153VUt1axNV39k5JhmFq56FcpWfkKs8epZSEGNnttvrOFlAj9RpcLV682OPvGTNmKCkpSatXr9ZFF11U6T6NGzf2+Hv27NmKiopyB1emaer555/X3/72N1199dWSpLfeektNmzbV//3f/2nEiBG1cCYAACBYrd+bpRc/26ojeS41j4tUZFyIClylWvdrlvYeLdBdAzoQYNWx8mB3e3qOmtgLddg4pHZJMQS7aPDqNbg6UVZWlqSKAZQ306ZN04gRI9w9XTt37tSBAwc0cOBAd5q4uDidc845WrlyZaXBVVFRkYqKitx/Z2dnS5IMw5BhGAGdi1UMw5BpmvWeDzQ8lB0EgnKDQARzuTEMU++v/kVH84rUPskpm62sZ8QZEaL2jmhtT8/V3NW/qlNTJ70mdWTDviy9/Pk2HclzKTkuQkkOU0ZRmNb/mql9R/M1/pL26ppMgIWq1XWd48/7BE1wZRiGJkyYoL59+6pbt24+7fPtt99q/fr1mjZtmnvbgQMHJElNmzb1SNu0aVP3aydKS0vTlClTKmzPyMhQYWGhr6dQKwzDUFZWlkzTlN3O+iPwHWUHgaDc1C3DMJWeU6gCV6kiw0OUFBPRIBv4wVxuDmQVKC/rsLo1DlWErcDzRZvUrbGUm3VI67fvUbO4yPrJ5CnEMEx9uuYXRZbk6eymkZKK5ZRL9gibkiNCtD8zV5+t2aom9lYN8lpA3ajrOicnJ8fntEETXKWmpmr9+vVasWKFz/tMmzZN3bt3V58+fWr03pMnT9bEiRPdf2dnZ6tVq1ZKTExUbGxsjY5dU4ZhyGazKTExMeh+sBDcKDsIBOWm7mzYl6W5a/Zqe8axOUDtEp269qwWDe6ufTCXmwOuLO3O2682kdEqVMXGemmIqd15eVJkvJKSGtbn3hDtPJSrHzIMxUfGKVOhkkxJpjIVKckmIyJcazJcuio0WikJznrOLYJVXdc5/qzZEBTB1fjx47VgwQJ98cUXatmypU/75OXlafbs2Xr00Uc9tjdr1kySdPDgQTVv3ty9/eDBgzrzzDMrPZbD4ZDD4aiw3W63B8WPhM1mC5q8oGGh7CAQlJvat35vll76fHvFOUB7s7U3s7BBzgEK1nITGxmm8LAQFbgMOSMqNnsKXKUKDwtRbGRY0OX9ZJRbZKiw2FREXKjkDnZt7n8R4aEqzC5SbpHB9wGv6rLO8ec96rXUmqap8ePHa968efr888+VkpLi875z5sxRUVGRRo0a5bE9JSVFzZo102effebelp2drW+++UbnnXeeZXkHACAQhmHq/TW/6kieS+2TnHJGhCrEbpMzIlTtk5w6kufS3DV7WSbcIm2bRKt9klP7swpkmp6fqWma2p9VoA5JMWrbpPJVimvTqbg0fExEqBxhdhW4Sit9vcBVKkeYXTGVBMJAQ1CvJTc1NVWzZs3SBx98oJiYGPecqLi4OEVGlo17Hj16tFq0aKG0tDSPfadNm6Zhw4apSZMmHtttNpsmTJigv//97+rQoYN7Kfbk5GQNGzasTs4LAICq7Dqcp23puWoeF+leXKGczWZT87hIbU3P0a7DeTotkWFRNWW323TdWS2192iB+3OPDC/rKdyfVaDG0eG69qwWdT6/51RdGr482F33a5baO5w6/hIoD3bPaBlfL8EuYIV6Da6mTp0qqezBwMebPn26xo4dK0nas2dPha64zZs3a8WKFfrkk08qPe5f//pX5eXl6Y9//KMyMzN1wQUXaPHixTzjCgBQ73IKS1RUbCgyLqTS1yPDQ3Qw21BOYUkd5+zk1a1FnO4a0MEdzBzMLgtmzmgZr2vPalHnwcypvDT8icFuclyEYh1SXlGJ9mUV1luwC1ilXoOrE7vnK7Ns2bIK2zp27Oh1X5vNpkcffbTCfCwAAOrb8cOiqpoDxLCowBmGqV2H85RTWKKYiFC1bRItu92mbi3i1KV5bKWv1XX+jh8Wemxp+FC1dzi1LT1Xc9fsVZfmsSdtgHF8sLs9PUchRYXKNFRvwS5gJWpuAADqUMVhUcca0AyLqpnqhtrZ7bZ6H2rJsNAy5cHuzkM5Sj+YrqSmSUpJiDlpA0qcOgiuAACoQ8E6B6ihayhD7RgWeozdblNKglPRRr6SEniIM04OrHEJAEAdKx8W1b1lnDILXNp1KE+ZBS6d0TI+aIKAhqQhrcDIannAyY0rFwCAehAsc4BOBg1pqB3DQoGTG8FVA1XVhF0AQMMRDHOATgYNaagdw0KBkxvBVQN0qj4bAwBQP4L9hl5DW4Ex2JaGB2Cd4Khl4LOGMmEXAHByaAg39BriUDuGhQYu2IN9nNoIrhoQno0BAKeOum5AVvZ+G/dnN4gbeg11qB3DQv3XEIJ9nNoIrhqQhjRhFwAQuLpuQFb2fu0So3Ukr9inG3rB4GQbakfvTEWM3kFDQHDVgDSkCbuoOX5YgVNTXTcgq3q/73cd1f6sQnVNjq32hl7bJlGW5acmTpahdsHWOxMMv0eM3kFDQXDVgDS0CbsIXLD9sAKoG3XdgPT2fs3jIrTrcL72ZxWqRXykdEKAFaw39Br6ULtg650Jlt8jRu+goeAhwg1I+YTd/VkFMk3PByGWT9jtkBQTVBN24b/yH9Z1v2YpPjJcbROiFR8ZrnW/lm1fvzervrMIoJb404Cs7fcLDw1RRJhdR/NdyimqGEBxQ896wfYw5GD6PXKP3gmvevROUXHwBfs49RBcNSDlE3YbR4drW3qucgtLVGqYyi0s0bb03KCdsAvfBdsPK4C6VdcNSG/vFxMRqkZR4SosNuQqLvV4jRt6xxiGqR0ZuVr7S6Z2ZOTWqH6u6+Dam2D7PTp+9E5lgjXYt7J8oGEIrhKIap1sE3bhiWEPwKnNiuHf/syP8fZ+5XXOkTyX9mUXyhEWWuUKfCd7g7Gqz9TqIXNWzK22an5UsP0eNcTl9oNlSCXqFsFVA3SyTNhFRSxaApzaatqA9LcxV9375btKdEH7hLIRExmn5g29qj7TM1vFa+FP+y2dG1XT4Lq679+fwKu+f48qy2tNl9uvy4U5gm3uHOoOwVUD1dAn7KJyLFoCnNpq8rymQBpzvrzfbReddkrc0PPnOV8//ZKpzzYdlNMRqjNaxlu28EhNguvqvv8hZzTXj79k+hx41+fvkbcgMdDRO3XZi8TKhqc2WmhAEGmIwx4QuGBY3hjBJ5Dh3zVpzPn6fifzDT1/n/PVNC5CW9NzFWKz68QrtiZD5gINrqv7/n/6NVPPfrJFSTEOnwNvX3+PWjeK0o6M3CrrMX/rOV9uEjw4pIvlx7QywAq2IZWoWwRXQBCpyV1rNCyMxYc3/g7/rmlj7lQebh7Ic75KSk2F2u3Kd5Uop6hEMRFhHq/XZMhcIMG1t+9fKutlOprvUvcWse5eqOoCb19+j3q0itPjizZVWY/5W8/5fJNgSKzPQUld9CKdGEBmFRQzxP8URnAFBBkWLTn5MRYfvvBn+LcV82MCHW5uGKZ2HspVekau8uxRSkmIaTBBWaDP+QoLsSss1KbiElPFJUaF4x4/ZC6QHurqgl1/GvM5hSXKLy5VmN2uklLPhUeqC7y9/R71aBXndc7ZkDOa+z0nrTZ6fGq7F6myADIxxqHiUoMh/qcovlUgCJ3Kd5FPdozFhxVObFxHO0LqZX5MecNye3qOmtgLddg4pHZJMQ2mB9af53wd3zsVExGqqLAQHXK5FBriud/xQ+byikr02MKNAfVQVxXs+tuYLy41VFxiKizEprDQik/gqS7wruz3qHWjKD2+aFOV9djWgzl6bfkORYWHVFvPHa82FtGozYU5qrpRtvtQng7nFamopNRjTp7EEP9TAcEVEKRYtOTknJPEWHzUVFXzgxpFhWtfZkGdzdc8vmGZHBehJIdUWhTeoHpgvTW8y5/ztT+rsOw5X5UM/WtkhutgdpHsNnulQ+Ze+nybpT3UgTTmQ0NsKjEMxUU6FOOoOvCOdoRUOXfqxN+jHRm5Xuux2MhwbT90VD1bxVdbz7VtEuXxmVt9k8DXY3o7/8p4u1HWoWmMCopLlVtUyhD/UxDBFdBAnYyBx/FO1jlJ9b28MRq2qhrX6/dmK9RuU2iIrU4acxUblpJdLkXX4jyW2qjjavKcr5aNojxW4Dt+yNywnsma98NeS3uoA23MH8wqVHxUmCLD7TIljwU4ygPvFvGRenvVHm3L8K2+ra4eC7H/Ni+tkvlfUtX1XG0s6uTLMf09f6n6G2XtEmP069F8tWkcpfTcIob4n0IIruDhZG+wnyxO1sCjXG3OSarvMs5y+wiUL0NKW8RH1skzqSo2LI/N5fGnB7auHs5bFSue83XVGckVzqE+5g5V1Zjv0aqRe35UZYF3qN2mgzmF2ptZ4HN9W109Vmr81mNmVv5w6arqudpY1Km6YwZy/pJvN8rCQuwadV4bxUWG0a46hfDrDbeTvcF+svAl8OjSPPaknGBe0zviwVDGWW4fgfKlwX4k36U7B7SX3War1cacFT2wdflw3qpY8ZyvyoZw19fcIW+N+XaJzgoLU3RvEafDea6y4aR+1LfV1WPZBS4lx0Uqp7BETWPNauo5zwCsNhZ1quqYvp5/p6Yx2nM03+Mz9fVGWVxkWMALxXCzu2EiuIIkVi9rKHwJPN74YocaR4dre8bJN8G8JnOSgqWMs9w+AuVrgz2vqFQ9WsXXal5q2gNb1fVYWw/n9aY2nvNVn3OHqmrMV7YwhWGamvLhRr/r2+rqsSZOh3u1wOrqOcOo2LtVG4s6BXr+P+w5qknv/6T03CKPmwDX9GxRazfKguFGIAJHcAVWL2tAqgs8osJDtWLbITWPj9BpTaJPugnmUmB3fIOtjLPcPgIRTENKK/ZcHHutuoalt+uxth7OWx2rG/P1NXeoumOe2Mu29pfMgOtbX+qxynrLfK3namNRJ3/Pv7CkVDsP5amwuFTtk2IqXW7e6htlwXIjEIEjuELQrl5Gl3hF3gKP8h/XohJDybERio4ItXyCeV2ojQZkMJZxltsPPsFe5wTTkNITey6S4yIU65Dyikq0L6vQa8PS2/VYmw/n9eWcrLr+62PuUCDHrGl9W109Fuz1nLfzN01T2w7mqNQ0dVpidKUPX177S5buvKS95v6wN6AA8sQ6p3WjqKC6EYjAEFx5kefKU4wZ4y7crlKXikuLFWoPlSPU4ZFOkiLDImW3lT1Dori0WK5Sl0LsIYoIjQgobX5xvkpLS1VqlLq3lRglKir5bdnXsEiPtKZpKiI0QiH2EK9pC4oLZJiGHKEOhdpDlVNYokJXsUJiTBUbJQqzH8tDsVGokNBSFbiK3T9mpUapCksKy3pKwo4toVpYUqhSo1ThIeEKCwnzO61hGiooLpAk7cwocd/tyncVKjzUVPukeN14doq6tYjzSBsdfqwhUVRSpBKjRGEhYQoPCZf026Tk4nxJUlRYVIXv05+0vnz3VpSTyr7P4tJihYQUKTS02OOHoNgokClT+YVlz2OJCLMrNNSUy8hXsQole5Q7gNh0MEMbDzRR52YJfpcTb9+nP2mr++6Pb0C2DQuTaTMUYgtTiC1MpmlqX2aeOidHKDFGHrx99+k5WR5BaYnhkqEShShMIfYwRYaH6EBWqdJzstQ0zubXdx9oOSn/7pMbhSoi1OlTWl/KiSV1REmB8lx5igyPrPB91qScWFlHVHfd+1tHfLd7vz74ca92HyqVq8SUI8yutgkOXdUjSWe2SgiaOqK8cf3zwUNqFhshpyNSRcXS/qwCxUfZdVn3eLmMIkXYAysn5d+nL2nbJYXrDxcla8FPGdqVUaCQokIdKS1Vp+YOXd3Ts2F5fDkpv0nkiJVcRr5ssinMXnbcsBC7QkKKVVhSoqJipzu4Mk1DxWah8gpL5QgLcTf2a1pOjv8+a/pbcuL3mZIYqj9clKyPfjqi7Rl5OphtKDS0VJ2aR+jas1p7fD6+XvfdWsTpDxcl/1ZWC3UwW3KE2dW1RbSGnJGo9k2Pvb8v3/3x9W2bsBDJJoXaHLLbQmSapvZm5qhLcpSaxno+H+vE6/60RKf7Wi4qLVSk/Vg5KSotVNM4m1o3cVZaR0SEHCurdV1HJMZIrZvYtXn/sUcYlP8+5BaaOpznUkJ02RL2LqPsuw+zRbp/U38+eEQ2exNNuqy99mWWtZOcjhAlxdpkt9tkmmaV5aR86N/PBzJUVGIoKixSSbGR2pmRp+bxYSo2C2Q3QxVqL8uvzWZTQoy06UC6dhxqqfZJsVWWk6q+eyt+SyqrI1wlxdqSfkR5RYYSnTHuALq634eIkEh3cBkWWqxWjSIVGR7h029JcUmxikuL3duq+u6tqiPKr1FfVHyaHNySn03WofxD7r+f/uppOdOcGv/ReI90Sc8kyZnm1J6sPe5tr3z3ipxpTt06/1aPtG1faCtnmlObMja5t834cYacaU6NeG+ER9our3RR7JOxWndonXvbu+vflTPNqaGzh3qk7f1GbznTnPpyz5fubQu2LJAzzamB/xnokfaiGRfJmebUx9s+llR25+aosUYvbDpP/9n+e4+0/9t1h17YdJ7SS750/5it+nWVnGlO9Xi1h0fa6/53nZxpTr297m33tnXp6+RMc6rDSx080v5+3u/lTHPq9dWvu7dtP7JdzjSnmj+brBc/26p1v2YpPjJcm13Pafa+i/V/W9/Qi59t1fq9Wdqfs1/ONKfin4z3OO7EjyfKmebUE18+4d6WVZQlZ5pTzjSnSoxjdzsf+OwBOdOceuCzB9zbSowSd9qsoiz39ie+fELONKcmfjzR4/3in4yXM82p/Tn73dteWPWCnGlOjVswziNti+dayJnm1PYj293bXl/9upxpTv1+nufn3uGlDnKmObUu/dh3//a6t9X9jWb6Pudv2p9VIPO3VZje3Dpcz204V7/mrVVhsVH2XJaiL/TchvP05q5j+Y0MD9Gig7ep+xvN9PnOz93bP972sZxpTl004yKPPAz8z0A505xasGWBe9uXe76UM82p3m/09kg7dPZQOdOcenf9u+5ta/avkTPNqS6vdPFIO+K9EXKmOTXjxxnubZsyNsmZ5lTbF9q67842jg7X/7Y/oOc2nKvvD81WbmGJtqXnKtxxRI+v7a1mzzX1OO74j8bLmebU01897d52KP+QnGlOnfeflu67k5K07MA/9dyGc7UifaqksruzoaEunfeflnKmOd0NKEmasmyKnGlOTfp0ksf7lZeT+q4jnGlOrdm/xr3NijrimvnXKPbJWHcdIUmf7/y87LOcdp5H2svfvlzONKfmbZrn3lbbdUSL51p4pB23YJycaU69sOoF9zZ/6oiVO/fonJkt9MTaPoqNtKttQrTiI8P17pandM7MFhr3wT3utPVdR5QPxfo883d6bXtf/XTgJ2UWuMp6rFqv0TkzW+i6/13ncdwer/aQM82pVb+ucm+bt2menGlOXf725R5pz5t2npxpTp/riHNmttCZ7Xfo4au66IazW+ryXpl6fG1vjV3oWaaOryPKewv25GzQcxvO1RtbrnGni4kI1U7zCf2kq7Ut71jdc6hoh57bcK6m7xiiDkkx7t65W+ffKmeaU69894o77Z6sPXKmOZX0TJJHHrzVEc40zx6rSZ9OkjPNqSnLpri35Rfnu9P6WkecM7OF/nRxkqYM7aoHhnRW8xZL9Pja3pr64wMeaf2pI4bM6aEn1vbRqAtD9cCQzpoytKuSk7/ROTNb+F1HHF/fvrF5hJ7bcK52565217e5tm/1+NreGvT2pR7HPbEdITXMOiL2yRg99dP5ZatBpucqt7BEn+57Ws9tOFef/fqa7HabOiQ5VWTm6rkN5+q5DefKUFk7IjI8RKuPTlX3N5rpwaV/02mJTvVoFa/WTSIU+2SM1zqifOjful+z9L99l2pe+gCFhWdr075s7Tycp9WH39ZzG87V4r2PepzHjJ2Xafa+i7Uxfat7m7/tCGea09I6Yv3eLN08+w11f6OZLp91iR6ev0GPLdyo9XuzvLYjzvhXLz22cKMenr9Bjy/cpAEzhyj2yRg98+V0d1pv7YjYJ2P17pZjbY7j2xHHs6qOSH42Wb4iuILaNolWcnxk5S/+Ns+0eVxkna1e5io13V3izohQ97j7BKdDR/Jcmrtmb6UTYE8VzeIiPX4Iyj+Jw3kuOULtah4XIdkqDhcocJWqfBTB/qwCrf0lUzsycmVUsVRufSpvQMZHld05OpLrcjcgx/ZtG9Ax2yc5PYLScuXDqdrVYDiQYZjakZGr/Vlld8JMBd9nisoZhqn5a/e5/3ZGhCrEbpPztwfIStKWg7le6xzDMHU0zyVJyi4srvX6qVuLOPfNrlsvPE1ThnbV34Z0VstGUdXsWTvsdptSEpxKSXSqeZznb0n5tVE+8sEwTXdvyaHcokqPF/Jb/ZVdWKLcwhKVGqbyi8pujNhtanALvpQPN+zRKl6No8MtO26rRlHq0SpepyU6Za/ieVK+KK9vI8LKeiEOZBW669shZzS3Krt1yjB17DeuuuvRJt01oIO6t4xTZoFLOYVlvSGJMQ6lNImWI6zy+VgFrlKFBFAOTXnOOSwX7QhRSmK0DMOs8too/22JdlSep7pWHiTuOlR2s8ERGqL4yLJ53i9+ttV93VbmcF6R+yZ624RohdnLQpJPNhzQ+r1ZVe7XENjME1saUHZ2tuLi4rQvY5+aNWlW78MCs49kq3mz5rLb7bUyLFCS1v5yRM9/tkGZ+SVqGR/vHsf9a2am4qNC9ecBXXRmqyaSanfIz8b9GXp84SYlRMe5h70dP4SrwGVTZoFLD1/VWc3jy87zVBoWWJ5228Ei97DJPFe+HKE2nZ7UWEfzS7Uvs0CnJUaoVC41UqHy7I1lmtK29Fw1jbUpPipUuw4Xq7jEJkeYXSmJEbryjER1b9EoKIYFHv995rsKtONQtgqL7Woc9VuAbzMDGvKzM6PEPUk4KSZE4eGmXMV2pWeXqHF0uO68pL1OSwrz+7vfkV7sHm9f4CpSWKih9klxuvHs09zDfmqzjrB6WKBhGNq9b7cSEhLqZFhgcUmJNqcfVm5RqZKcse7hJHU1LHBHRq4e+mC9nBGGoiNC3EN+ys6jWNmFhcouNPT3q8/UaYnOCnXEhn3Zen/Nr9p88KgKi12KCAtTx6aN3at61VcdYeWQH19+S+yyKz09XU0SmshluGSz2bQjvfi44d0FCg+VOjRtpBt6tZUkPf/pzzqUl6tmsZGKjXC65w7FRpoa3C1JG/blaWdG2Qpt4aFS24QwDT0zWX3aHruDHMzDAq0aOlxXdURuUZ52Hc6VqzhU8VEOtW0SLUOlfg8b97eOiAiJUHp6upKSkuQyXDVqR/z061G9+/027cjIU2mpw73K3lU9EtWxWbTXOqJ8/tPhvDxFhkunNYnT059s17pfs9QuMVolKpRUNixQKvtN7ZIcpXsHt5cjLNzncrLnSKGeWLhN8ZHhckYcP9wwQpJN3+w4rPS8PPVtF6+4yEj3sEDTNPXzwQx1S47TI1f1VGiI/9e9lXVEuN2hJxZt1rpfs35rcxTLJrvC7BFl89XSc9U5OUJ/HXy6x1C/4pISPbLgB23Yl6NOTRPcn0+xUSjDLNWuDJfObJWgvw3pLFOG12GBmYcz1aJ5C9nt9lofFpidna3kxGRlZWUpNjZW3hBcVaI8uPLlA6xthmG4Kx27vXY7Gitb+rNDUkxAkzIDnbC69pdMPb5wk9omRFd6R6jUMLXrUJ4eGNK51pcaDnaVfeYb92e7A4jkuAg1d7i0vyhc+7IKFWq3SbayCeOVTYQ+FVYgqkkZr+p4Hqs6nQSfaX3XOXW93HBN6pyT8fsP1InlxpfPRpLX6zHYFxiBNayqc2rjeqyNY1ZX5xzKLdJ3O4+oeVxE2QqFQVqv7MjI1cPzN7iDxBPlFpYos8ClKUO7eiwUE+h+J6rL3yrJv9iABS28ycuTQirpeg0JkSIiPNNVxW6XIiMDS5ufL5WWypafX7bf8YXHZpOiojzTVhUnn5i2oEAyjArJusWHqkv/NtpVqGM/ZlF22WVWne/oaHcDaffewyouKpEjzK7TEqN19Zkt1DU5ziOtW2GhVFqxuzi2tEixRpEKihxyRpbdYQgpdsleWjakxFVYqljDpdjSomN5ioo6NgyuqEgq8bKKVGTksc/R5ZKKi61JGxFxrKz4k7a4uCx9VRwOKTS00rR2SadF2aSo31bTMkrdwzvmfrdLe/YdUaa9UPlGhM5KcOpIXrH2ZxWoQ2K0jFBTxm9Dn04PjdDufUf14ddb1eWyThUbL+HhUthv71FaWvbdVSUsrCy9v2kNo6xcWpE2NLTsc5PKron8Y3Mjysv47sN5yi0qUXR0hNomNy475xPSVnDCdW/k5Gr+11uUdyRbnROjZZNLckkRkuLiw/RzpuvYqk4FXo5b0zrC1+veh7SGYWrnoVwd+uWQ8gtMta3q4dPHX8tV1CeVpj3uut+wL0uvLtuuo3kuNYuNVITTrmz7sccG/LlvK3Vt5mWopj/XvZe05XVOabapiIgQlYRHyPztug8pLpYrr7BinaPflhP/fo97aE9oSYnsrgJFSIqPtWtHRpbnNVUPdURlaQ17SFnAkluoWFup2lQVsBx/3ZeUlH1uVQkPP5bf0lIZeflVXhuxjRzafLRIc9fs1d8uO93jenQ6Qo/lJy9P9rDjntdkGNJx15FhmJ77NYuXPcJxXNrA6ogapfWnbVCX7QgL6wg3f6776tIen98q2gaVHve4tIZhVihzxbZI9yp7u/Yeqfo3TqqyjugWH6o/n1e2gMiOjCxlFhuyRUUeWw0wMdL791FJO+LEOqdcSZhDZkiIIkJD1CE+XO3jw5SRWfaejjC7eiU6NfTMZHWNDy0771qqI9xpq7nuc3IK3AtF2UtLFFLsedxYw1Rmbr7yjmRJ8Q53fZKTVyTl5inWYSqksGJenLZQHSz+bUVQb+0Iw/A8l9puR3j7nk9kooKsrCxTkplV9pFW/HfFFZ47REVVnk4yzX79PNMmJFSd9uyzPdO2aVN12i5dPNN26VJ12jZtPNOefXbVaRMSPNP261d12qgoc92vmeZtM78zr/vXV+b6My+oOu2JRe36672mvemfn5qT3ltr3vf+T+b3/Yd6P256+rHj3nGH97Q7dx5Le8893tOuX38s7cMPe0/77bfH0j71lPe0S5ceS/vyy97TLlhwLO306d7T/u9/7qSls9/1mvZ/qY+Z973/k3nf+z+Z0++vJg8vv3wsD0uXek/71FPH0n77rfe0Dz98LO369d7T3nPPsbQ7d3pPe8cdZmmpYW5PzzHX/bDVe9oxY44dNzfXe9rrr/csw17SbjrrQnP822vMUf9eZW5Pz2kQdcS6XzPNR+avN3//75Xm7rYdq07rZx3h4YorvH5u973/kznpvbXmdf/6ytxw/iDv30du7rHjjhnjPa0fdcQ/pi5yXxvLhno/7qQps8zxb68x73v/J3PJDbd7z0MQ1BG7X51hPjJ/vTnq36vMZ//wd+/HnT792HEXLPCe9uWXzdLSUnP//v1m6WefeU278Pd3u6+NXz9e5v24ftQRX10z1lz3a2ZZWh/qCLf0dO9pa6mOoB3x27+oqGNlp7S02jrCQzXtiAffXuW+llddeJX34/pRR+z+fr1ZWmqUpbWwHfHyk7Pc9d8nY//i/bh10I4w//c/r2kPvjjVHPXvVeb4t9f41Y7YO+8jr2nn/e7Px347q2lH5PzlL2XlxjQtb0e4/VZHZEmmJDMrK8usDj1XpyBTqvBwxkCPc/ykzEAmdlal0W8LNjSPi5RpWnbYU8apPHTmcJ5LLy/cWLay4JHDmlZP+ajN5/FYzVVqeAwnDQupv7WOypc4zi2qn88tv6hUpYapAlepMvO93OGV5CoxFBkeHBPLfbFo3X6tM7LUPC5SibGO6neoJeXXRp7LSw+FnzJyijTjs61lQ6YsOypOFla2T1o3iZZq4Tc2v6hU29Jz1Tg6XN2DYNhfdRKiHWqfWLaMv+lHQ61ZbITX17MLi4+tCLqrhpmsJ8y5qoR7XOW+fZWPq6zD7nyjtFQZGRlKTEz0HFMaYHf++r1Z+mDlNu1Mz3GPca8whM/H7vydGbl66LNd7nGzoa4i2Y57JldeYamyCl164IrOSkl0VtqdX2Fox29DQtYfLdb7vy0SUJpfqKgQU+3Ku8STT6h0TtFhgV7TlpTIKChwl53dh/P1+EebFBcRruiIEJWGhskILeuit5eWqDCnQHsz85XSJFoZeUUeZWNo7xR1a5tQNv8hPVt5Wbmew3eOV8/DAjfsy9IrX+xSuqtshcvIMLtKc/J0ILtAjaLD9af+7TzLTw2G/OzcddDjMz2eaQ9RphFybNx4lJcf4noe8mMYptI+/lk/ZJQ/tFJKKDqiLDNCpintyMhTtxZxundQR/1yNL9sOGXjuGPzXwIYFrju10w9tXizWjeJ8mj0FEeU5bfUMLV3/xHdN6iDureMr/SwRkSkdh3JLxvCbCtV2zhH1TcVfKgjNuzL0gc/7tXPmSUqLC17dlDHRg5d0z2pYp2jsvrv4SU7FBcdUbbCYHGx7Mc9c6VC/VePdYRhmPrH4k368WCBTmseL5vN5h7GY5qm+zuedPyQKT+HBRohIWXzH5o00e69R6q8NoyQMGWVli1MNGVIJ50W4+Ue7wnXvZGXr38s3qQNe7N1WmK0xwOIS+2h2ny0SGe0jNffLu8oe5GXuodhgWWCZFigERl5bO6MyxXQsMCdGbkVylyxI9J93Rfm5Csnr+DY9XiiemhHlNc5OzLyVFRsyBYVofbNjhtuGATtiOqu+/Xp+Xrxs63KzM5Xq6hQRYTbVegyKv7mnjC9YMOOg5p6/LDw4/aLjY1S6uAuZfPKvLQjDMNQ+tGjSmrZsqx9XMvDArOzsxWX7NuCFvRceRMd7Xkhe0vnzzF9FRUlGYbMvLyy/bxN2Du+0quCx8TM+Dg1/m2S5JpDBdq1cp/uGhBdcZLk8ZX0CbKPFHs+mDXc805oSLipbFeeskMcFc87IsL7ZPaW8eqSHOf/ZGaH49gFUZ3w8GMXWn2lDQs7VuFYmTY0VIqOdpedNtFOtWp1SOt+zVL7uMgTGiUh2pRTotySEJXkmxXLxhe7NCSzSD/+kunfwgMhIdWW94AmrNvtlR7XMEy993NZYHX8k+1D4mPUKq7syfbv/5ypzu2aV/4eNptf12eb1klVfqamaWp/em7Zs4f8vcvpbx1Rw7S7MnL1c1apmrvPwVSJI0LFipJkU+Mkh75Nz9ekxduVnltUs4UnfmtMRjc2JWe0su2VT2gucJXKHhWp6MZxlX4eZXXHpsAWwqiijujaIVqd2zX3uTy2iYxSu2a/ff8Op0rDwlQaVv7AW1O7s3J1RqsktWmdVPH7r+M6YldGrjZlG2raOMZdTo2QUBkhZZ994ySHNma7tKtQOi2xkvIXGnqswVWV8sZzSEj118aR366NpFjfrw27XbsKpU3ZhhonNVZJJeWmeZxdW9NztOtogdeJ8B78ue79rCOCIq0FdUSlvLQN/E57fOAV4b1Xw8NxadtERnktc7/kl1Z9PZ6ojtoR1dY5wdCOqOa6L5/n7W7L5RpyhIWoY7vmuvasFupaWX0cEqKuHZJ1e1R0lfu5F7Q5UlB1fWwYnjcaqmgbVMqftOXXvbeg/wQEV6cIw/B8rkJ5xVM+2XNbeu6xyfc+/tiVPwiywFVaZQPJEWZ3P4/leBVW4Ikra8yXT2YvXw3H5x/Iehbsq1qVPyhy79EC93DL8hWI9mXmu3sOKysbP/2aqWc/2aKkGIfX78pfVq8Ut+twnvvcjv9hlY4NNduanqNdh/MsKVfePtPyVZ0awvN4cgpLPG6SnKiwpFQ7D+WpsLi0bOUqC77/8ucclQcmFRrfWQXHAtMT+Fp3BKL8eUS+pm0o339137HVQ1hr67Op6/NAw9GQrsfj+VPnBKtuLeLUpXms320gb/sFw0qyNUFwdYqojYZnoA2k2gj06lNDqQROvMN0MLssr20TnDJMqWWjqAplQyoLko/mu9S9Raw7iK7pd1UbDeT6aHhV9Zm6V5Kqxe/fqoDe200S0zS17WCOSk1TpyVGW/b9B9oQCra6oz6/f3/U5EZYoGrjs6mP80DD0VCux5ORtyDR229VZfvV5g20ukINdIqojYZnoA2kuu5hqE0NrRKo7E5RVkGx0j76udKJ+TmFJcovLlWY3a6SUs+x+IF+V7XVQK6vhlegd+1qwsqAvuJNkmOvZRcW63CeSwnRDsVGeA4lqem1GkhDKBjrjuq+/2Do1a5JT2FNWH1t1Nd5oOGoj/oYVfP3t8qf9kEwI7g6RdRWwzOQBtLJMrQj2O6i++rEO0U7MnKrLBvFpYaKS0yFhdgUFlpxzl/5d5VVUKwdGbk+/ZjVVgO5thte/t59qy1WB/Qn3iRJjotQrEPKKyrRzow82e02dUhySpX0atb0WvW3IRSsdUdV33+w9GrX55ApK6+Nhjr0C3XrZBhqdzII5LfKn/ZB2yZ+zBGsYwRXp4jabHj620Cq76EdVt1JDsa76IHwVjZCQ2wqMQzFRToU46j8uyouNfTflbt9XuzAqgZyZd9jbTW8gqWRXFsB/fE3Sban5yikqFCZhtQlOU4RYSFyhFX+XVlxrfrTEKrvusMfwdarfbIMmTpZzgM4mQX6WxWsN9D8Vf+/QKgTtX3Hz58GUn0O7bCykXyyVALeysbBrELFR4UpMtxe4flopmlqe0aOcotKFWK3VdmAPDHwjnaE1LiB7O17tLrhFUyN5NoM6Mtvkuw8lKP0g+lKapqkNo2denzRpqAZhtVQhoUFa6/2yTJk6mQ5D6Cu1dUw5UB/qxrSDTRvgjt3CFhlF1Cw3PGrr6EdVjeST5ZKQKr6bnCPVo3Uo1WcFv603+9VBrel5+qNL3aocXS4tmUcC4LaJUarUVS49mUWBNRA9uV7fHBIF0t+QIKtkexrQO/PMM3j2e02pSQ4FW3kKynBKbvdHlTDsBrKsLBg7tU+WYZMnSznAdSVuhyBEejNZ/9uoAXvY3qDv9UHv1V3AdX1Hb9gCPRqo5HcUO6i+8pb2WiX6PRrlUGbzaao8FCt2HZIzeMjlNLE6Q6C1u/NVqjdptAQm98NZJ+/xyGxATW8TiyrhmnWayP5xPz40uvn7zDN6vhyrXq7G2r1ndL6uknkz3mcLL3aAE4OvtyUtLJtGOjNZ39uoBkGwRXqSLA9PypYAr3auJPcUO6i+6Oqu8H+rjJYHlwWlRhKjo2odAnvFvGR7l4tXxvItdkjUFlZjYsMc19LlfGlkRxocFFZfqrr9fNlmGagAVYgzyORVCt3Suv6JpG/d3xPpl5tAA2bLzclKxtlUpO6uiY3n4NllFVNULOfRIJtCFMwBXq1NZzqZKgEfOXPKoM5hSU6mu9SRJhd4ScshlAeBB3Jd+nOAe1lt9l8/rxrq0egqrK681CuDmQVqkl0uFo0qrgyUXWN5ECHYVSVH2+9fr4M06zJ9e/v80g27cuWbFJJqVkrc9XqalhYIMOJT7ZebQANV3U3JasaZVKTurqmN58b+rxKgquTSG2P8/fnDnywBXq+3EmubjhVVeff0CuBQHlrQLpKSlVYbKh5XESlqwyWB0F5RaXq0Sre5/esjR4Bb2W1a3Ks0nOKtPlAjpLjImSzH1uOvrpGcqBz/Hy5dirr9atumKbVQxi95bNdeLSWbs6QTdLFHRPdn1t9L+hQnu/arsdOxl5tAA2Tt5uSvowyCbSurunN54Y8r5Lg6iRSm+P8/b0DH2wTuqu7k1zdcKohZzTXj79kVnn+DbkSCJT3BmShHKF2NY+LqPT5SIEOi6qNHgFvZdVut6tTs1ht2Jel9fuzy+7q+dBIrsnNBV+uncp6/bwN05RqvtiFP59bblGpDLNsPHyuq1QxEceC0vpc0KEu67FTqVcbQN3y5yaRt5uSvowyqUldfarefCa4OonU1jj/QO7A1/eEbn+egVTdcKqffs3Us59sUVKMo96X4g42VTUge7dtrMN5Lu3LLJBpmpYNi6qNHoHqymqzuAgdzi1SSpNoZRa4fGok16RR7uu1c2Kvn7dhmpL1i114y2dxqVH2H1MqLjGqPIe6vP437s+u83rsVG1YAKg9/t4ksmKUSU1uyp2KN58Jrk4itXFXP9A78PU5odvfZyB5G05Vntej+S51bxEbUJd5XT1Xor5U1YAsb8xaPSzK6h4BX8pqY2e4/jywg8/zw2rSKA/02qlp76yVjyIIC/mtp8omhYXaK+xb19d/u8RoHckrrpd67FRsWACoHYGu+leTUSZWr0B7KiC4OonUxl39QO/A19eE7kCegeRtOFVOYYnyi0sVZrerpNRz2U9fusyru8N0sgRelTUga3NYlJU9Ar6W1dMSnD4fvyaN8kCvHW/Xvz+LXfjKWz6djhDZbTbZJDlPuK78uf79vT6quv6/33VU+7MK1TU5tkHUYwBwopqu+hfIKJPaWoH2ZEdwdZKxukEb6B34+pjQHegzkLwNpyouNVRcYiosxFbpHXhvPRDVBXrVzeM6GdTmsCiregRqo6zWpFFek/xUdf37s9hF2yYVV0UM5HM7LSFasknbMvIC+kz9Hfri7fpvHhehXYfztT+rUC3iIyvcoQ2megwAKmPFqn8n3lz2NsqktlegPZkRXJ2ErGzQ1uQOfF1P6K6NXrbQEJtKDENxkY5KxyNXdf7VBXqn0jyuhjAsyuqyasUytIHmx99nkkmBz4GqLp+SAjqHQOZ5erv+w0NDFBFm19F8l3KKShQTEebxejDVYwBQGUtW/Tvh5rJkzU25YP+Nr2sEVycpqxq0NR0WU5cTumujl+1gVqHio8IUGW6XKen4XHs7f28NPanm87hgPavLak0b5TXJjz/PJJNqNgequnz6ew6BzvP0dv3HRISqUVS49mcVylVcKh0XXAVbPQYAlanNVf/q8qbcqYDgCl5ZMSymrnouaqOXrUerRurRKk4Lf9rv1/l7a+jVdB4Xao/VZbWmjfL6uUliVn2gAPLp7zkE2gPt7fp3L2Gf59K+7EI5wkKDth4DgMpYseqft0CoLm/Knez4RFCthjIspjZ72dolOv06f28NvZrM40LDEwyNcn9ukhiG/8GVlQLtga7u+s93leiC9gkVHr4cbPUYAFSmrp8tyYI+gSO4gk+CcViMP8+yqundaX/PvzbmcQE10VBukgTaA+1LAHnbRacFXT0GAL6qy2dLsqBP4Gi9wWfBcAe+nL/PsrKiAenP+dfGPC6gpoLxJsmJanK31NcAMljqMQDwV10+W7Kh3JQLNgRXaHACeZZVfTQgrZ7HBVghmG6SVMaKlRaDPYAEgJqoy2dLUqf6j+AKDUqgz7KqL1bO4wJOFTVtJAR7AAkAtaG2AiHqVP8QXKFBCXQlsfpk1Twu4FTC9QEA/iMQqn8EV2hQAl1JLFhRCQJV4/oAADQ0FdeBBoLY8SuJVYaV9gAAAFBfCK7QoJSvJLY/q2y50eOVryTWISmGlfYAAABQ5wiu0KCUryTWODpc29JzlVtYolLDVG5hibal57LSHgAAAOoNwRUanPKVxLq3jFNmgUu7DuUps8ClM1rG664BHVhpDwAAAPWCiSlokFhJDAAAAMGmXnuu0tLS1Lt3b8XExCgpKUnDhg3T5s2bq90vMzNTqampat68uRwOh04//XR99NFH7tdLS0v14IMPKiUlRZGRkWrXrp0ee+yxCnN00LCVryTWo1W8Tkt0ElgBAACgXtVrz9Xy5cuVmpqq3r17q6SkRPfff78GDRqkjRs3Kjq68gUJXC6XLr30UiUlJem9995TixYttHv3bsXHx7vTPPnkk5o6dapmzpyprl276vvvv9fNN9+suLg43XXXXXV0dgAAAABOJfUaXC1evNjj7xkzZigpKUmrV6/WRRddVOk+b775po4cOaKvv/5aYWFhkqS2bdt6pPn666919dVXa8iQIe7X33nnHX377bfWnwQAAAAAKMjmXGVlZUmSGjduXGWa+fPn67zzzlNqaqo++OADJSYm6qabbtKkSZMUElL2YNnzzz9fr7/+urZs2aLTTz9da9eu1YoVK/Tcc89VesyioiIVFRW5/87OzpYkGYYhwzCsOr2AGIYh0zTrPR9oeCg7CATlBoGg3CBQlB0Eoq7LjT/vEzTBlWEYmjBhgvr27atu3bpVmW7Hjh36/PPPNXLkSH300Ufatm2b7rjjDhUXF+vhhx+WJN13333Kzs5Wp06dFBISotLSUj3++OMaOXJkpcdMS0vTlClTKmzPyMhQYWGhNScYIMMwlJWVJdM0ZbezuCN8R9lBICg3CATlBoGi7CAQdV1ucnJyfE4bNMFVamqq1q9frxUrVnhNZxiGkpKS9PrrryskJES9evXS3r179fTTT7uDq//97396++23NWvWLHXt2lU//vijJkyYoOTkZI0ZM6bCMSdPnqyJEye6/87OzlarVq2UmJio2NhYa0/UT4ZhyGazKTExkUoHfqHsIBCUGwSCcoNAUXYQiLouNxERET6nDYrgavz48VqwYIG++OILtWzZ0mva5s2bKywszD0EUJI6d+6sAwcOyOVyKTw8XPfee6/uu+8+jRgxQpLUvXt37d69W2lpaZUGVw6HQw6Ho8J2u90eFBe6zWYLmrygYaHsIBCUGwSCcoNAUXYQiLosN/68R72WYtM0NX78eM2bN0+ff/65UlJSqt2nb9++2rZt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", + "image/png": "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5zB37lxoNBosXrwYANC1a1cAjb0lo0aNQmlpKe644w707NkT33//PRYuXIiysjI899xzLudZuXIlrFYr/vznP0OpVCIpKcljnuLi4nDjjTciPz8fs2fPxtChQ32+ru3bt6OyshLz58+HXC5vM/3JkycxYsQI1NbWYt68eUhOTsYbb7yBa6+9Fh9++CGuv/56j6/96quvMHnyZPTv3x95eXmoqKjAjBkzWg3SHXr16gWgMcC+4YYbPPZAtfY5AY3BmUajwYIFC6DRaPDNN9/goYceQnV1dYu5chUVFbjqqqtw8803Y+rUqejatStGjx7t8bMmInKSiIjIKytXrpQAtPinVCql/Px8l7TffvutBEB65513XLZ/8cUXLbb36tVLAiBt27bNuc1gMEhKpVL629/+5tz20EMPSQCktWvXtsibKIqSJEnS5s2bJQDSOeecI9XV1Tn3P//88xIAqbCw0Llt1KhREgBp1apVzm2//vqrBECSyWTSzp07ndu//PJLCYC0cuVK57ba2toW+dixY4cEQHrzzTdbvG+XXHKJ1NDQ4JL+4YcflgBIp06dkvbt2yd1795dGj58uFRZWemSbtq0aVKvXr2cfx8+fFgCICUnJ7uk/fjjjyUA0ieffOLcNnDgQCkjI0OqqalxbtuyZYsEwOWYnowaNUoaMGCAy7ZevXpJ06ZNc/79wQcfSACkzZs3t3j9gAEDpFGjRrXY/uijj0rx8fHS//73P5ftDzzwgCSXy6WjR4+6XGtCQoJkMBjazK8kSVJNTY00duxYKTY2VuratWuLc3jDUWbWrVvnVfr58+dLAKRvv/3WJR+9e/eWMjMzJbvd7nI9TcvSkCFDpLS0NKmqqsq57auvvvL6M7r99tslAFKXLl2k66+/XnrmmWekffv2tUjX2ufkrjzfcccdUlxcnGS1Wp3bHN+bFStWtEjv6bMmInLgsEMiIh+99NJL2LhxIzZu3Ii3334bl112Gf70pz9h7dq1zjQffPABdDodrrjiCpSXlzv/nXvuudBoNNi8ebPLMfv3749LL73U+Xdqair69u2LQ4cOObetWbMGgwcPdtuD0HxI2IwZM1zmAzmO3fR4AKDRaHDzzTc7/+7bty8SExNxzjnn4IILLnBud/x/09er1Wrn/9fX16OiogLZ2dlITExEQUFBizzOnj3bYw9KUVERRo0ahczM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unXrBoPBgHfffRe//PIL5s+f73wfPX1OI0aMQJcuXTBt2jTMmzcPgiDgrbfe8vmmhqfPmojIqdPWWSQiCjPulppXqVTSkCFDpOXLlzuXe2/q1Vdflc4991xJrVZLWq1WGjhwoHTfffdJx48fd6bp1auXNHHixBavHTVqVItlqysqKqQ5c+ZI6enpUmxsrJSRkSFNmzZNKi8vlyTpzFLzH3zwgcvr3C3v7W4J9dbyA0DKzc11/n369GlpxowZUkpKiqTRaKQrr7xS+vXXX1ssw+5433bt2tXimE2Xmneora2VRo0aJWk0Gudy956Wmn/66afd5vPhhx922bZ69WqpX79+klKplHJycqT169dLkydPlvr169fi9c2NHDlSGjRokMu25tcoSZL02muvSWeddZYkl8tdljM/ceKENHHiREmr1UoAXD7TmpoaaeHChVJ2drYUGxsrpaSkSCNGjJCeeeYZyWaztXmtrfn3v/8tnXvuuZJKpZI0Go106aWXSqtXr5YkSZIWLVokAZCWLl3q1bE+/PBDady4cVJSUpKkUCiktLQ06aabbpK2bNniku7gwYPSlClTpMTEREmlUknnn3++tGHDBpc07sqiJEnSmjVrpHPOOUdSKpVS//79pbVr17b43N2prq6Wnn/+eenKK6+UMjIypJiYGEmr1UoXXXSR9Nprr7X4Xnr6nL777jvpwgsvlNRqtdS9e3fpvvvucz5ioenS9J6+N5LU+mdNRCRJkiRIUhjMSiYiIgqwIUOGIDU1FRs3bmw13bBhwxAfH49vv/02SDkjIqJIxTlfREQU0err61vMn9qyZQt++eUXjB49utXXmkwm/Prrr14/b4qIiKg1nPNFREQRrbS0FGPHjsXUqVPRvXt3/Prrr1ixYgW6deuGO++80+1rTp48iXXr1uGtt96CxWLB7bffHuRcExFRJGLwRUREEa1Lly4499xz8X//9384deoU4uPjMXHiRDzxxBMeFwfZt28f5syZg+zsbLz55pu4+OKLg5xrIiKKRJzzRUREREREFASc80VERERERBQEDL6IiIiIiIiCgHO+/CSKIo4fPw6tVgtBEDo7O0RERERE1EkkSUJNTQ26d+/e6kPlGXz56fjx4+jRo0dnZ4OIiIiIiELEb7/9hoyMDI/7GXz5SavVAmh8gxMSEjo1L6Io4tSpU0hNTW010iZqiuWG/MWyQ/5guSF/sNyQv4Jddqqrq9GjRw9njOAJgy8/OYYaJiQkhETwZbVakZCQwIqJvMZyQ/5i2SF/sNyQP1huyF+dVXbamo7EUkxERERERBQEDL6IiIiIiIiCgMEXERERERFREHDOFxERERH5RJIkNDQ0wG63d+h5RFFEfX09rFYr53yRTwJdduRyORQKRbsfMcXgi4iIiIi8ZrPZUFZWhtra2g4/lyRJEEURNTU1fK4q+aQjyk5cXBzS0tIQGxvr9zEYfBERERGRV0RRxOHDhyGXy9G9e3fExsZ2aFDk6GELRI8DRZdAlh1JkmCz2XDq1CkcPnwYffr08bs3jcEXEREREXnFZrNBFEX06NEDcXFxHX4+Bl/kr0CXHbVajZiYGBw5cgQ2mw0qlcqv43DwLBERERH5hPOvKBoFotzzm0NERERERBQEDL6IiIiIiIiCgMEXEREREVEAbNmyBYIgoKqqCgCQn5+PxMTETs0ThRYGX0REREQU8aZPnw5BEHDnnXe22JebmwtBEDB9+vSAnvOmm27C//73v4Ae0xslJSWYNWsWevfuDbVajaysLDz88MOw2WzONFarFdOnT8fAgQOhUChw3XXX+XSOuro6DBkyBIIg4Oeff3abpri4GFqttkUAmp+fD0EQXP61toDFnXfeCUEQ8Nxzz/mUx1DE4IuIiIiIokKPHj2wevVqWCwW5zar1YpVq1ahZ8+eAT+fWq2GXq8P+HHb8uuvv0IURbzyyivYs2cP/vWvf2HFihVYtGiRM43dbodarca8efMwduxYn89x3333oXv37h7319fX45ZbbsGll17qdn9CQgLKysqc/44cOeI23bp167Bz585WzxVOGHyFOVGUcLjchMOnTDhcboIoSp2dJSIiIopGZrPnf1ar92mbBEatpvXDsGHD0KNHD6xdu9a5be3atejZsyeGDh3qklYUReTl5Tl7jwYPHowPP/zQJc1nn32Gs88+G2q1GpdddhlKSkpc9jcfdnjw4EH84Q9/QNeuXaHRaDB8+HB8/fXXLq/JzMzE448/jpkzZ0Kr1aJnz5549dVXfbrO8ePHY+XKlRg3bhzOOussXHvttbjnnntcrjs+Ph7Lly/H7Nmz0a1bN5+O//nnn+Orr77CM8884zHNgw8+iH79+uHGG290u18QBHTr1s35r2vXri3SlJaWYu7cuXjnnXcQExPTZr5Gjx6NuXPnYv78+UhKSkJGRgZee+01mM1mzJgxA1qtFtnZ2fj888+drzl9+jRuvfVWpKamQq1Wo0+fPli5cqUX74J/OjX4ysvLw/Dhw6HVaqHX63Hddddh//79LmleffVVjB49GgkJCS5jaFuzZMmSFl2Z/fr1c+6vrKzE3Llz0bdvX6jVavTs2RPz5s2D0WgM9CV2qKJSIx79dC+WfrIX7//nGJZ+shePfroXRaXhdR1EREQUATQaz/8mT3ZNq9d7TnvVVS5JFX36QNBqW6bz08yZM10a16+//jpmzJjRIl1eXh7efPNNrFixAnv27MHdd9+NqVOnYuvWrQCA3377DZMmTcI111yDn3/+GX/605/wwAMPtHpuk8mECRMmYNOmTfjpp58wfvx4XHPNNTh69KhLumeffRbnnXcefvrpJ9x11134y1/+4tJGHj16tM9DJI1GI5KSknx6jTsnT57E7Nmz8dZbb3l81ts333yDDz74AC+99JLH45hMJvTq1Qs9evTAH/7wB+zZs8dlvyiKuO2223DvvfdiwIABXufvjTfeQEpKCn744QfcdddduOuuu3DDDTdgxIgRKCgowLhx43DbbbehtrYWAPD3v/8de/fuxeeff459+/Zh+fLlSElJ8fp8vurU4Gvr1q3Izc3Fzp07sXHjRtTX12PcuHEwN7mbUVtbi/Hjx7t0k3pjwIABLl2Z27dvd+47fvw4jh8/jmeeeQZFRUXIz8/HF198gVmzZgXs2jpaUakRL2w6gMJjRiSqY6FPUCFRHYvCY43bGYARERERtTR16lRs374dR44cwZEjR/Ddd99h6tSpLmnq6urw+OOP4/XXX8eVV16Js846C9OnT8fUqVPxyiuvAACWL1+OrKwsPPvss+jbty9uvfXWNgOiwYMH44477kBOTg769OmDRx99FFlZWVi/fr1LugkTJuCuu+5CdnY27r//fqSkpGDz5s3O/T179kRaWprX11xcXIwXX3wRd9xxh9evcUeSJEyfPh133nknzjvvPLdpKioqMH36dOTn5yMhIcFtmr59++L111/Hxx9/jLfffhuiKGLEiBE4duyYM82TTz4JhUKBefPm+ZTHwYMH48EHH0SfPn1w//33Q6VSISUlBbNnz0afPn3w0EMPoaKiAv/9738BAEePHsXQoUNx3nnnITMzE2PHjsU1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LMaMGYPFixcjNTUV33zzDSZNmhTwc/mDwRcRERERRRW5XI59+/Y5/785rVaLe+65B3fffTdEUcQll1wCo9GI7777DgkJCZg2bRr69OmDN998E19++SV69+6Nt956C7t27ULv3r19ysuyZcuwbt06bNq0ye3++vp6TJkyBQUFBdiwYQPsdjtOnDgBAEhKSkJsbCwA4OjRo6isrMTRo0dht9udz+LKzs52DtPr168f8vLycP311yM5OblFEBcTE4Nu3bqhb9++ANBi+X3HcbKyspCRkQEAOOecc1zS/Oc//4FMJkNOTo5z2w8//IDS0lIMGTIEpaWlWLJkCURRxH333efTe9WWDRs24NChQxg5cqRzpURRFJ3XEwoYfBERERFR1Glr2N6jjz6K1NRU5OXl4dChQ0hMTMSwYcOwaNEiAMAdd9yBn376CTfddBMEQcAtt9yCu+66C59//rlP+SgvL2+1x6y0tBTr168HgBbzyTZv3ozRo0cDAB566CG88cYbzn2OuWlN0+zfvx9Go9Gn/AWC1WrFgw8+iEOHDkGj0WDChAl466232r1aY3OJiYlYu3YtlixZAqvViuzsbKxatcrjSo6dQZCaPoyBvFZdXQ2dTgej0djuMbftJYoiDAYD9Ho9ZDJO4yPvsNyQv1h2yB8sN5HBarXi8OHD6N27d4ulwzuCJEloaGiAQqHwuCgEkTsdUXZaK//exgas/YiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIh8wvXaKBoFotwz+CIiIiIir8TExAAAamtrOzknRMHnKPeO74E/+JwvIiIiIvKKXC5HYmIiDAYDACAuLq5Dl4DnUvPkr0CWHUmSUFtbC4PBgMTERLcP5vYWgy8iIiIi8lq3bt0AwBmAdSRJkiCKImQyGYMv8klHlJ3ExERn+fcXgy8iIiIi8pogCEhLS4Ner0d9fX2HnksURVRUVCA5OZkP5yafBLrsxMTEtKvHy4HBFxERERH5TC6XB6Qx2hpRFBETEwOVSsXgi3wSqmUndHJCREREREQUwRh8ERERERERBQGDLyIiIiIioiBg8EVERERERBQEDL6IiIiIiIiCgMEXERERERFREDD4IiIiIiIiCgIGX0REREREREHA4IuIiIiIiCgIGHwREREREREFAYMvIiIiIiKiIGDwRUREREREFAQMvoiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAgYfBEREREREQWBorMzQERERETRSRQllFSYUWNtgFalQGZyPGQyobOzRdRhGHwRERERUdAVlRqxpuAYig0m1NWLUMbIkK3XYPKwDOSk6zo7e0QdgsEXEREREQVVUakRL2w6gEqzDWk6NdQ6OSw2OwqPGVF62oJ5Y/owAKOIxDlfRERERBQ0oihhTcExVJptyNZroFEpIJcJ0KgUyNZrUGm2YW1BKURR6uysEgUcgy8iIiIiCpqSCjOKDSak6dQQBNf5XYIgIE2nxgFDDUoqzJ2UQ6KOw+CLiIiIiIKmxtqAunoR6li52/3qWDnq6kXUWBuCnDOijsfgi4iIiIiCRqtSQBkjg8Vmd7vfYrNDGSODVsWlCSjyMPgiIiIioqDJTI5Htl6DMqMFkuQ6r0uSJJQZLeij1yIzOb6TckjUcRh8EREREVHQyGQCJg/LQFJ8LIoNJpisDbCLEkzWBhQbTEiKj8WkYel83hdFJAZfRERERBRUOek6zBvTBwMzdKiy2FBSbkaVxYZBGYlcZp4iGgfTEhEREVHQ5aTr0D8tASUVZtRYG6BVKZCZHM8eL4poDL6IiIiIqFPIZALOStV0djaIgobDDomIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAg6NfjKy8vD8OHDodVqodfrcd1112H//v0uaV599VWMHj0aCQkJEAQBVVVVbR53yZIlEATB5V+/fv1c0litVuTm5iI5ORkajQaTJ0/GyZMnA3l5RERERERETp0afG3duhW5ubnYuXMnNm7ciPr6eowbNw5ms9mZpra2FuPHj8eiRYt8OvaAAQNQVlbm/Ld9+3aX/XfffTc++eQTfPDBB9i6dSuOHz+OSZMmBeS6iIiIiIiImuvU53x98cUXLn/n5+dDr9dj9+7dGDlyJABg/vz5AIAtW7b4dGyFQoFu3bq53Wc0GvHvf/8bq1atwuWXXw4AWLlyJc455xzs3LkTF154oW8XQkRERERE1IaQesiy0WgEACQlJbX7WAcOHED37t2hUqlw0UUXIS8vDz179gQA7N69G/X19Rg7dqwzfb9+/dCzZ0/s2LHDbfBVV1eHuro659/V1dUAAFEUIYpiu/PbHqIoQpKkTs8HhReWG/IXyw75g+WG/MFyQ/4Kdtnx9jwhE3yJooj58+fj4osvRk5OTruOdcEFFyA/Px99+/ZFWVkZli5diksvvRRFRUXQarU4ceIEYmNjkZiY6PK6rl274sSJE26PmZeXh6VLl7bYfurUKVit1nblt71EUYTRaIQkSZDJuIYKeYflhvzFskP+YLkhf7DckL+CXXZqamq8ShcywVdubi6KiopazM3yx1VXXeX8/0GDBuGCCy5Ar1698P7772PWrFl+HXPhwoVYsGCB8+/q6mr06NEDqampSEhIaHee20MURQiCgNTUVFZM5DWWG/IXyw75g+WG/MFyQ/4KdtlRqVRepQuJ4GvOnDnYsGEDtm3bhoyMjIAfPzExEWeffTaKi4sBAN26dYPNZkNVVZVL79fJkyc9zhNTKpVQKpUttstkspCoDARBCJm8UPhguSF/seyQP1huyB8sN+SvYJYdb8/RqaVYkiTMmTMH69atwzfffIPevXt3yHlMJhMOHjyItLQ0AMC5556LmJgYbNq0yZlm//79OHr0KC666KIOyQMREREREUW3Tu35ys3NxapVq/Dxxx8752IBgE6ng1qtBgCcOHECJ06ccPZaFRYWQqvVomfPns6FOcaMGYPrr78ec+bMAQDcc889uOaaa9CrVy8cP34cDz/8MORyOW655Rbn8WfNmoUFCxYgKSkJCQkJmDt3Li666CKudEhERERERB2iU4Ov5cuXAwBGjx7tsn3lypWYPn06AGDFihUuC104lqBvmubgwYMoLy93pjl27BhuueUWVFRUIDU1FZdccgl27tyJ1NRUZ5p//etfkMlkmDx5Murq6nDllVfi5Zdf7oCrJCIiIiIiAgRJkqTOzkQ4qq6uhk6ng9FoDIkFNwwGA/R6PcdDk9dYbshfLDvkD5Yb8gfLDfkr2GXH29iApZiIiIiIiCgIGHwREREREREFAYMvIiIiIiKiIGDwRUREREREFAQMvoiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAgYfBEREREREQUBgy8iIiIiIqIgYPBFREREREQUBAy+iIiIiIiIgoDBFxERERERURAw+CIiIiIiIgoCBl9ERERERERBwOCLiIiIiIgoCBh8ERERERERBQGDLyIiIiIioiBg8EVERERERBQEDL6IiIiIiIiCgMEXERERERFREDD4IiIiIiIiCgIGX0REREREREHA4IuIiIiIiCgIGHwREREREREFAYMvIiIiIiKiIGDwRUREREREFAQMvoiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAgYfBEREREREQUBgy8iIiIiIqIgYPBFREREREQUBAy+iIiIiIiIgoDBFxERERERURAw+CIiIiIiIgoCBl9ERERERERBwOCLiIiIiIgoCBh8ERERERERBQGDLyIiIiIioiBg8EVERERERBQEDL6IiIiIiIiCgMEXERERERFREDD4IiIiIiIiCgIGX0REREREREHA4IuIiIiIiCgIGHwREREREREFAYMvIiIiIiKiIGDwRUREREREFAQMvoiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAgYfBEREREREQUBgy8iIiIiIqIgYPBFREREREQUBAy+iIiIiIiIgoDBFxERERERURAw+CIiIiIiIgoCBl9ERERERERB0KnBV15eHoYPHw6tVgu9Xo/rrrsO+/fvd0nz6quvYvTo0UhISIAgCKiqqvLpHE888QQEQcD8+fNdtp84cQK33XYbunXrhvj4eAwbNgxr1qxp5xURERERERG516nB19atW5Gbm4udO3di48aNqK+vx7hx42A2m51pamtrMX78eCxatMjn4+/atQuvvPIKBg0a1GLf7bffjv3792P9+vUoLCzEpEmTcOONN+Knn35q1zURERERERG5o+jMk3/xxRcuf+fn50Ov12P37t0YOXIkADh7rLZs2eLTsU0mE2699Va89tpr+Mc//tFi//fff4/ly5fj/PPPBwA8+OCD+Ne//oXdu3dj6NChvl8MERERERFRKzo1+GrOaDQCAJKSktp9rNzcXEycOBFjx451G3yNGDEC7733HiZOnIjExES8//77sFqtGD16tNvj1dXVoa6uzvl3dXU1AEAURYii2O78tocoipAkqdPzQeGF5Yb8xbJD/mC5IX+w3JC/gl12vD1PyARfoihi/vz5uPjii5GTk9OuY61evRoFBQXYtWuXxzTvv/8+brrpJiQnJ0OhUCAuLg7r1q1Ddna22/R5eXlYunRpi+2nTp2C1WptV37bSxRFGI1GSJIEmYxr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", "text/plain": [ "
" ] @@ -508,11 +511,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mean: 2.6908 ms\n", - "Median: 2.6896 ms\n", - "Std: 0.0106 ms\n", - "Min: 2.6827 ms\n", - "Max: 2.7886 ms\n" + "Mean: 21.4449 ms\n", + "Median: 21.4454 ms\n", + "Std: 0.0213 ms\n", + "Min: 21.4074 ms\n", + "Max: 21.5199 ms\n" ] } ], @@ -563,10 +566,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.352179Z", - "iopub.status.busy": "2025-12-17T20:56:48.352053Z", - "iopub.status.idle": "2025-12-17T20:56:48.354842Z", - "shell.execute_reply": "2025-12-17T20:56:48.354225Z" + "iopub.execute_input": "2025-12-17T21:24:44.487140Z", + "iopub.status.busy": "2025-12-17T21:24:44.487016Z", + "iopub.status.idle": "2025-12-17T21:24:44.489937Z", + "shell.execute_reply": "2025-12-17T21:24:44.489208Z" }, "id": "Kj5azcpxzX2j" }, @@ -602,13 +605,13 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.357339Z", - "iopub.status.busy": "2025-12-17T20:56:48.357229Z", - "iopub.status.idle": "2025-12-17T20:56:48.403430Z", - "shell.execute_reply": "2025-12-17T20:56:48.402471Z" + "iopub.execute_input": "2025-12-17T21:24:44.492322Z", + "iopub.status.busy": "2025-12-17T21:24:44.492090Z", + "iopub.status.idle": "2025-12-17T21:24:44.507209Z", + "shell.execute_reply": "2025-12-17T21:24:44.506066Z" } }, "outputs": [ @@ -620,9 +623,9 @@ "\n", "With cache flushing (cold cache):\n", "\n", - "Warm cache median: 0.0859 ms\n", - "Cold cache median: 0.0922 ms\n", - "Difference: 0.0063 ms (7.3% slower with cold cache)\n", + "Warm cache median: 0.0283 ms\n", + "Cold cache median: 0.0323 ms\n", + "Difference: 0.0040 ms (14.3% slower with cold cache)\n", "\n", "Without cache flushing, you measure artificially fast times!\n" ] @@ -663,19 +666,19 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 10, "metadata": { "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.405781Z", - "iopub.status.busy": "2025-12-17T20:56:48.405659Z", - "iopub.status.idle": "2025-12-17T20:56:48.489739Z", - "shell.execute_reply": "2025-12-17T20:56:48.488860Z" + "iopub.execute_input": "2025-12-17T21:24:44.509465Z", + "iopub.status.busy": "2025-12-17T21:24:44.509344Z", + "iopub.status.idle": "2025-12-17T21:24:44.597419Z", + "shell.execute_reply": "2025-12-17T21:24:44.596500Z" } }, "outputs": [ { "data": { - "image/png": "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R6N79+4PtK2SziHlyQ3YLZCIiIhqNR8fOXFauhTYu1ceFVCbXLm6AoMGARERTKyqgwEDBuCff/7BtWvXHvg+H6r6rly5gtdff/2BEytTYnJFREREtZ6PD7BkCZCYKA+3npUlD14RFGT6roBUuaZNm2bpIpCZaAcaqUqYXBERERH9R6023TxWRFT7VI3OqERERERERNUckysiIiKqMThOFxFVhKnOHUyuiIiIqNqzsbEBIA9FTURUXtpzh/ZcUlG854qIiIiqPSsrK7i7uyMlJQUA4OjoaHDYaw6LTebGOle1CSGQk5ODlJQUuLu7w8rK6oG2x+SKiIiIagRvb28A0CVYhgghIEkSlEolL3TJLFjnqgd3d3fdOeRBMLkiIiKiGkGhUMDHxweenp4oKCgwGCNJEm7evIl69epVmUlmqWZjnav6bGxsHrjFSovJFREREdUoVlZWRi+UJEmCjY0N7O3teaFLZsE6V7vwEyYiIiIiIjIBJldEREREREQmwOSKiIiIiIjIBJhcERERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkioiIiIiIyASYXBEREREREZkAkysiIiIiIiITYHJFRERERERkAkyuiIiIiIiITKBKJFcrV66EWq2Gvb09unbtiiNHjhiNjY+Px1NPPQW1Wg2FQoHly5cXi1m1ahXatm0LV1dXuLq6IigoCL///nslHgEREREREdV2Fk+uNm3ahIiICERGRuLEiRNo164dQkNDkZKSYjA+JycH/v7+WLx4Mby9vQ3GNGzYEIsXL8bx48dx7NgxPProoxg8eDDi4+Mr81CIiIiIiKgWs3hytXTpUkyYMAHh4eEICAjA6tWr4ejoiM8++8xgfOfOnbFkyRI888wzsLOzMxgzcOBA9O/fH82aNUPz5s3x9ttvw9nZGYcPH67MQyEiIiIiolrM2pI712g0OH78OGbPnq1bplQqERISgtjYWJPso6ioCJs3b0Z2djaCgoIMxuTn5yM/P1/3PDMzEwAgSRIkSTJJOSpKkiQIISxeDqo9WOfI3FjnyJxY38jcWOeqv/J8dhZNrtLS0lBUVAQvLy+95V5eXjh37twDbfvUqVMICgpCXl4enJ2d8eOPPyIgIMBg7KJFizB//vxiy1NTU5GXl/dA5XhQkiQhIyMDQggolRZvaKRagHWOzI11jsyJ9Y3MjXWu+rtz506ZYy2aXFWmhx56CHFxccjIyMB3332HsLAw7N2712CCNXv2bEREROieZ2ZmwtfXFyqVCq6uruYsdjGSJEGhUEClUvELSWbBOkfmxjpH5sT6RubGOlf92dvblznWosmVh4cHrKyskJycrLc8OTnZ6GAVZWVra4umTZsCADp27IijR4/igw8+wJo1a4rF2tnZGbx/S6lUVokvgUKhqDJlodqBdY7MjXWOzIn1jcyNda56K8/nZtFP2NbWFh07dkRMTIxumSRJiImJMXp/VEVJkqR3XxUREREREZEpWbxbYEREBMLCwtCpUyd06dIFy5cvR3Z2NsLDwwEAY8aMQYMGDbBo0SIA8iAYZ86c0f1+7do1xMXFwdnZWddSNXv2bPTr1w+NGjXCnTt3EB0djT179mD79u2WOUgiIiIiIqrxLJ5cjRgxAqmpqZg7dy5u3LiBwMBAbNu2TTfIxZUrV/Sa4q5fv4727dvrnkdFRSEqKgrBwcHYs2cPACAlJQVjxoxBUlIS3Nzc0LZtW2zfvh2PP/64WY+NiIiIiIhqD4UQQli6EFVNZmYm3NzckJGRUSUGtEhJSYGnpyf76ZJZsM6RubHOkTmxvpG5sc5Vf+XJDfgJExERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkioiIiIiIyASYXBEREREREZkAkysiIiIiIiITYHJFRERERERkAkyuiIiIiIiITIDJFRERERERkQkwuSIiIiIiIjIBJldEREREREQmwOSKiIiIiIjIBJhcERERERERmQCTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMr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KhEREQgLC0OnTp3QpUsXLF++HNnZ2QgPDwcAjBkzBg0aNMCiRYsAyINgnDlzRvf7tWvXEBcXB2dnZzRt2hQAkJWVhQsXLuj2cenSJcTFxaFu3bpo1KiRmY+QiIiIiIhqC4smVyNGjEBqairmzp2LGzduIDAwENu2bdMNcnHlyhW9Zrjr16+jffv2uudRUVGIiopCcHAw9uzZAwA4duwYevfurYvR3ksVFhaGDRs2VP5BERERERFRraQQQghLF6KqyczMhJubGzIyMqrEgBYpKSnw9PRkP10yC9Y5MjfWOTIn1jcyN9a56q88ucEDfcIXLlzA9u3bdZMLM08jIiIiIqLaqkLJ1c2bNxESEoLmzZujf//+SEpKAgA8//zzmDFjhkkLSEREREREVB1UKLmaPn06rK2tceXKFTg6OuqWjxgxAtu2bTNZ4YiIiIiIiKqLCg1osWPHDmzfvh0NGzbUW96sWTNcvnzZJAUjIiIiIiKqTirUcpWdna3XYqV169Ytg5PxEhERERER1XQVSq569OiBL774QvdcoVBAkiS89957esOgExERERER1RYV6hb43nvv4bHHHsOxY8eg0Wjw6quvIj4+Hrdu3cLBgwdNXUYiIiIiIqIqr0ItV61bt8b58+fxyCOPYPDgwcjOzsaTTz6Jv/76C02aNDF1GYmIiIiIiKq8CrVcAYCbmxvmzJljyrIQERERERFVWxVOrvLy8vC///0PKSkpkCRJb92gQYMeuGBERERERETVSYWSq23btmHMmDFIS0srtk6hUKCoqOiBC0ZERERERFSdVOieqylTpmDYsGFISkqCJEl6DyZWRERERERUG1UouUpOTkZERAS8vLxMXR4iIiIiIqJqqULJ1dNPP409e/aYuChERERERETVV4XuuVqxYgWGDRuG/fv3o02bNrCxsdFbP3XqVJMUjoiIiIiIqLqoUHL1zTffYMeOHbC3t8eePXugUCh06xQKBZMrIiIiIiKqdSqUXM2ZMwfz58/Ha6+9BqWyQj0LiYiIiIiIapQKZUYajQYjRoxgYkVERERERPSfCmVHYWFh2LRpk6nLQkREREREVG1VqFtgUVER3nvvPWzfvh1t27YtNqDF0qVLTVI4IiIiIiKi6qJCydWpU6fQvn17AMDp06f11t07uAUREREREVFtUaHkavfu3aYuBxERERERUbXGESmIiIiIiIhMoMwtV08++SQ2bNgAV1dXPPnkkyXG/vDDDw9cMCIiIiIiouqkzMmVm5ub7n4qNze3SisQERERERFRdVTm5Gr9+vVYsGABZs6cifXr11dmmYiIiIiIiKqdct1zNX/+fGRlZVVWWYiIiIiIiKqtciVXQojKKgcREREREVG1Vu7RAjmPFRERERERUXHlnueqefPmpSZYt27dqnCBiIiIiIiIqqNyJ1fz58/naIFERERERET3KXdy9cwzz8DT07MyykJERERERFRtleueK95vRUREREREZBhHCyQiIiIiIjKBcnULlCSpsspBRERERERUrZV7KHYiIiIiIiIqjskVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZQJVIrlauXAm1Wg17e3t07doVR44cMRobHx+Pp556Cmq1GgqFAsuXL3/gbRIRERERET0oiydXmzZtQkREBCIjI3HixAm0a9cOoaGhSElJMRifk5MDf39/LF68GN7e3ibZJhERERER0YOyeHK1dOlSTJgwAeHh4QgICMDq1avh6OiIzz77zGB8586dsWTJEjzzzDOws7MzyTaJiIiIiIgelLUld67RaHD8+HHMnj1bt0ypVCIkJASxsbFm22Z+fj7y8/N1zzMzMwEAkiRBkqQKlcNUJEmCEMLi5aDag3WOzI11jsyJ9Y3MjXWu+ivPZ2fR5CotLQ1FRUXw8vLSW+7l5YVz586ZbZuLFi3C/Pnziy1PTU1FXl5ehcphKpIkISMjA0IIKJUWb2ikWoB1jsyNdY7MifWNzI11rvq7c+dOmWMtmlxVFbNnz0ZERITueWZmJnx9faFSqeDq6mrBkslfSIVCAZVKxS8kmQXrHJkb6xyZE+sbmRvrXPVnb29f5liLJlceHh6wsrJCcnKy3vLk5GSjg1VUxjbt7OwM3r+lVCqrxJdAoVBUmbJQ7cA6R+bGOkfmxPpG5sY6V72V53Oz6Cdsa2uLjh07IiYmRrdMkiTExMQgKCioymyTiIiIiIioNBbvFhgREYGwsDB06tQJXbp0wfLly5GdnY3w8HAAwJgxY9CgQQMsWrQIgDxgxZkzZ3S/X7t2DXFxcXB2dkbTpk3LtE0iIiIiIiJTs3hyNWLECKSmpmLu3Lm4ceMGAgMDsW3bNt2AFFeuXNFrirt+/Trat2+vex4VFYWoqCgEBwdjz549ZdomERERERGRqSmEEMLShahqMjMz4ebmhoyMjCoxoEVKSgo8PT3ZT5fMgnWOzI11jsyJ9Y3MjXWu+itPbmDxlquqTKORH/dTKgFra/04YxQKwMamYrEFBUBR0d1y3Pt9NBRrLE0uTywA2NpWLLawEChpGoDyxNrYyOWuzNiiIvlhilhr67ufT1WIlST5vTDGykp+GIqVJP06V1JsebZbUqwQcl0zRey938/KigVK/i6b8xxhiu+9pc8R2jp3L54jKje2sr7L1eEccS+eI0wfC/A6wljs/ddy9+I54sFiK/s6oqTv3f2YXJXg/fcBA4MIolkzYNSou8+XLDH+IanVwNixd58vXw7k5BiOrV8feOGFu89XrgRu31YgO9sZTk4K3RcUAFQqYNKku8/XrgVSUw1v190dmDbt7vP164Hr1w3HOjoCr7569/nXXwOJiYZjbWyAOXPuPt+0CfjnH8OxADBv3t3ff/gB+O/WOYNef/3uSfSXX4C4OOOxs2YBTk7y79u3A0ePGo+dNk1+PwAgJgY4dMh47MSJgKen/Pv+/cB/vU4NmjABaNBA/v3wYWDnTuOxY8fK9QIAjh8HfvvNeOyzzwLNm8u/nzoFbNliPHbYMKBVK/n3s2eBzZuNxw4ZAgQGyr9fuABER99dJ4R+nevfH+jSRV535QqwYYPx7T7+ONC9u/x7UhKwbp3x2F695Acg192PPzYe260b0KeP/HtGhvw9MqZzZ2DAAPn3nBz5+2lMYKD8XgDyd/idd4zHBgQAw4fffV5SrDnPEenphmOr0zlCW+fee+/uMp4j5N+r4jniftXtHNGxo3yeAHiOqC7nCK3qfB3x55+2OHlS/1ruXjxHyKrCOcLQdUR+vvH4+zG5IiJ6QOnpwNWr8sWRjc3dP7xERERUu/CeKwO0/SpTUw33qzRvt0DD/XTZnP/gsezyYzj2/r7hNaE539SxgPxdTkoCli0DDhwA7tyRYyQJcHUFgoOBGTMAHx92+dEy3i1QrnMNG949z/EcUbmxVaEbj+W6BUq4dUs+xykUSnYLNHEswOuI+2MlSUJSUgrq1TN+zxXPEQ8WW9nXEZmZmVCpeM/VA7O11f8ilxRXnm2WlY2NXBG05SjpHsh7T3pl2W5lxFqXozZVhdh7v2g1LVapLHtduz9WkozXuQfZbkkUiuoVCwA3b8rdQ+Lj5e41Xl53k6v0dGDrViAhQe6m4ONT9u2W9xxRnWKNfT+1da4sseXZ7oPGVoXvclU8R1gi1pTf5XsvnCvzHFEVYqvC957XEXdjS7uWq+h2eY6o/GuD8nzvOGQJEVEFREXJiZW/P1C37t0/mEql/NzfX16/dKlly0lERETmw+SKiKicEhPlAQxUKuP/lbWxkdfv3Wv8Zm4iIiKqWZhcERGVU2wskJlZ+sAV7u5y3OHD5igVERERWRqTKyKicsrOlrv/ldZ3XhuTlWWechEREZFlMbkiIionJyf5pviSRpQC7sY4O5unXERERGRZTK6IiMopKEgebt3Y5Jxa6elyXFCQOUpFRERElsbkioionNRqoEcPeUZ4Y3NlFBQAaWnyfFd+fmYtHhEREVkIkysiogqYORNo1Qq4eBG4detuF0FJkp9fugQEBAAREZYtJxEREZkPkysiogrw8ZEnCB48WG6lSki4+ygoAAYNKv8EwkRERFS9lWMeaiIiupePD7BkiTyP1eHD8qiAzs7yPVbsCkhERFT7MLkiInpAarX8ICIiotqN3QKJiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE+A8V1QjJSYCsbFAdjbg5CRP6sp5iIiIiIioMjG5oholKQmIigL27wcyMwGlEpAkwNUV6NkTmDED8PGxdCmJiIiIqCZickU1RlISMHEiEB8PqFRAkyZ3k6v0dGDrViAhAfj4YyZYRERERGR6vOeKaoyoKDmx8vcH6taVEytA/lm3rrw8Ph5YutSy5SQiIiKimonJFdUIiYlyV0CVCrCxMRxjYyOv37tXjiciIiIiMiUmV1QjxMbK91i5u5cc5+4uxx0+bI5SEREREVFtwuSKaoTsbLn7n7KUGq2NycoyT7mIiIiIqPZgckU1gpOTPHCFJJUcp41xdjZPuYiIiIio9mByRTVCUJA83Hp6eslx6elyXFCQOUpFRERERLUJkyuqEdRqoEcPIDUVKCgwHFNQAKSlAcHBgJ+fWYtXfWQlApc3AUk75J9ZiZYuEREREVG1wXmuqMaYORO4ePHuPFfu7vrzXKWlAQEBQESEpUtaBeUmAWejgJT9gCYLULQArp4DbJ0Bz55AyxmAAycHIyIiIioJkyuqMXx85AmCly6Vh1tPSLibXLm6AoMGyYkVJxC+T24ScHQikBEP2KoAZ3+gyAew0gAFt4FrW4GsBKDzx0ywiIhqocREeVTe7Gz5HuegILnHCBEVx+SKahQfH2DJEvkPweHD8qiAzs7yHwJ2BTTibJScWDn5A0obQCjk5QolYFcXsHGR159dCnRYYtmyEhGR2SQlAVFR8jySmZn6/7Ds2ROYMYP/sCS6H5MrqpHUav5XrUyyEuWugLYqObEyRGkjr0/ZK8c7q81YQCIisoSkJGDixLtd7Zs00e9qv3Wr3EPk44+ZYBHdiwNaENVmabFAQSZg615ynK27HJfG2ZfJtBITgU2bgB075J+JiZYuEREBcotVfDzg7w/UrXt3HkmlUn7u7y+vX7rUsuUkqmrYckVUmxVmy93/FKX8n0UbU8jZl8k07u1ulJUFtGgBnDsnd+NldyMiy0pMlL+bKhVgY6RTg42NvH7vXjmevUWIZGy5IqrNrJ0AIcmPkmhjrDn7Mj04bXejn3+WL9D8/eVEyt9ffr51q7w+KcnSJSWqnWJj5Xus3N1LjnN3l+MOs1MDkQ6TK6LazCMIsHEFNOklx2nS5TgVZ1+mB8fuRkRVW3a2/H1UlnKVqI3JYqcGIh0mV0S1mbMa8OwBaFIBycjsy1IBoEkDPIMBJw65SA+mIt2NiMi8nJzkgSukUjo1aGOc2amBSKdKJFcrV66EWq2Gvb09unbtiiNHjpQYv3nzZrRo0QL29vZo06YNfvvtN731ycnJGDt2LOrXrw9HR0f07dsX//zzT2UeAlH11XIm4NYKyL4I5N+620VQSPLz7EuAWwDQkrMv04NjdyOiqi8oSB5uPT295Lj0dDkuiJ0aiHQsnlxt2rQJERERiIyMxIkTJ9CuXTuEhoYiJSXFYPyhQ4cwcuRIPP/88/jrr78wZMgQDBkyBKdPnwYACCEwZMgQXLx4ET/99BP++usv+Pn5ISQkBNnZ2eY8NKLqwcFHniC4wWBAFABZF4G8JPmnKAAaDOIEwmQy7G5EVPWp1UCPHkBqKlBgpFNDQQGQlgYEB3MeSaJ7KYQQwpIF6Nq1Kzp37owVK1YAACRJgq+vL6ZMmYLXXnutWPyIESOQnZ2NX375Rbfs4YcfRmBgIFavXo3z58/joYcewunTp9GqVSvdNr29vfHOO+9g/PjxpZYpMzMTbm5uyMjIgKurq4mOtGIkSUJKSgo8PT2hLO1qhOhBZSVCSj2MlHQNPN1tofQMYldAMqlvvgHmz787Zw4AKBQSfH1TcPWqJ4SQF0qSPIfOvHnAM89YrrxU8/DvatncP8+Vu7v+PFdpaUBAAOe5KgvWueqvPLmBRYdi12g0OH78OGbPnq1bplQqERISgtjYWIOviY2NRUSEfvek0NBQbNmyBQCQn58PALC3t9fbpp2dHQ4cOGAwucrPz9e9DpDfQACQCvIgFdgWL4RCCSjveeuKNMYPUqHQn5y1PLFSAaSiIoiifEgFefr/6jUQC2N5cnliAcDKtoKxhSWPOleeWKWNXO5KjS0CRJGJYq3vDmdeFWKFJL8XxiisAKVV8Vg7b0j1B0HYpkLyUMl1rrDAcGx5tltqrDB+z1e5Y+/5flZWLFDKd9l85wiTfO/NeI54uIuEenWA7Dvy4BXy7iVYK/OhUNz97mZlFqJeHQkPdzHysfAc8WCxlfZdrvrnCEnIvVwkSeI5ooRYLw9g5UfAhx8C+/YrcOmSjS65cncrwNDBAlOnynHF3hZeR+jFSpIEIRUWv5bTi+U54sFiK/c6QirIMx5/H4smV2lpaSgqKoKXl5feci8vL5w7d87ga27cuGEw/saNGwCAFi1aoFGjRpg9ezbWrFkDJycnLFu2DP/++y+SjIzru2jRIsyfP7/Y8pwTC2HtZFdseaFjY+R5P6V77pS4HAojH36Rgy9yfUbcjb28EoqiXMOxdl7IbTBa99zx6looNBmwzs9DbqI9FNovMwDJth5yGobfjf13PZSamwa3K9m4Isf3Bd1zh2tfwio/2WCssHJAtt+ku7FJm2CVe9VwrNIa2eppuuf2N76Hdc4lg7EAkOU/825s8lZYZ583HqueCijlk6hd6u+wuRNvNDbbbyKElaMcm/YHbDLjjMf6ToCwcQMA2N7cA9uMY0ZjcxqOhWTrIcfePgTb24eMxzYYBclO/tedTfoR2N3aZzQ212cEihx85djMv2CXFmM81nsoihybAACs75yGfeo2o7F5ngNR6PyQHJv1N+xTfjYeq+qLQpfWAACrnAQ43PhRt04IoVfn8j0eQ4Frezk29yockjYZ3W5+3Z4ocO8CAFDmJ8Hx2tdGYzV1ukFTp5scq0mD478bjMe6dYKmXi8AgKIgA05X1xmNLXANRL5HiBxblAOnyx8bj3VphXxVP/mJpIFz4odGYwudmiPPa5DuufPFKOOxZjxHKAsyDcZW1XOEKucSFj0HXLsm3wQvX2cIODnlYbM0B4AShYVAj0Zb8XDAeXjcAHJuFN82zxH/xVrgHHG/6naOyHdpi3TrzhBCwErk8RyhjTVwjnAF8MYQIKOvKw6mvYC8PMDeHujm+SXcbZOBK0DOFf3t8jriLu05QpIkFPwbg9xL/9O7ltOL5TlCjv3vHJGcDFw5l4RGBV/D2gqo5wE4O+nHmvM6Iic732j8/WrcJMI2Njb44Ycf8Pzzz6Nu3bqwsrJCSEgI+vXrB2M9IGfPnq3XGpaZmQlfX184OTrByUByJVxc4erpeXdBqjMURjJg4eQCl3tjbzpDUWj4vxbC4b7Y2y5AfiGgAJwcnfS+kMLeBc73xma4QJFnOKsWtvfFZrpAYW34RgZh7Qine2OzXKBQOhmOVdrox+a4QqEwHAsAjvfG5rlCgRJiVZ53/0OlcYNCKilWJc/XBACFblAUlRJr6y4/KXKHorCEWA8PwP6/Mgt3KDQlxNbzABz/i1XUgSK/pNh6gPN/sVZ1oMgtIbZuPcD1v1ibulDklLTduoDbf7F2qVBkl7TdukCd/2Iz06G4czdWCKFX5xzr1AHq/ReblQNFZgnbrVMHUP0Xm1MARXoJse7ugLZO5AGK22WM1dhCcct4rHB3uxtbmA1FWgmxbvfEFmmgSC0pVv97r0guIdaM5wiFxvB/IavyOaJ9oNzl6PJlwNERsLcXUCiAK1c8cfu2EjdvAs0ed0VgOyc4GXmbeY74L9YC54hisdXsHOHg5g6NjTtUKhWUUi7PEVolnCMc67jg6V73xF5wgSKX1xFlPUdIkoSMdGc4aZyMJlc8R8jyRB0sWeKJAwcABxRgeAcnCAHY2sr39gU9fHd0SnNeRxSJsqdMFr3nSqPRwNHREd999x2GDBmiWx4WFob09HT89NNPxV7TqFEjREREYNq0abplkZGR2LJlC06ePKkXm5GRAY1GA5VKha5du6JTp05YuXJlqeXS9au8lWq4X6WZuwWmpKbAU3VfP90q2uWnJjbnly225jTnS5KkX+dqQHO+yWOBat/lp8KxgEnOEUk3gA8+APbtA7KzJDz0UApOn20IZ2clgoOBiGmF8PHmOaIqniMsE2vaboEpabfk+18UCp4jTB0L8DrivlhJkpCSnARPj3rG77niOQJJN4DJk61wKt4KKhVQx12CjXWh/n1+LYEPPwJ8vO/fbuVeR2RmZsKtrqrq33Nla2uLjh07IiYmRpdcSZKEmJgYTJ482eBrgoKCEBMTo5dc7dy5E0EGxgF1c5Obbf/55x8cO3YMCxcuLF8BrWz1v8glxZVnm2WltAFgJTdrW9ka76eriy3PdisjthzVqUrEWgGwqpmxCmXZ69r9sQrJeJ17kO2WGKuoXrFA1YitEt/7ip0jfBoAi9+T57E6fFiCRmOLJ4fJQzrLI4/xHFGpsZX2Xa4G54h7J2/iOaKKxVaF730lnSMUVqVfy1VkuzXoHBG1FDj13wTz8jyIShRKcqyrO+DgBJw8DSxdDixZcv92K/naoBzfO4t3C4yIiEBYWBg6deqELl26YPny5cjOzkZ4uNwPeMyYMWjQoAEWLVoEAHjllVcQHByM999/HwMGDMDGjRtx7NgxrF27VrfNzZs3Q6VSoVGjRjh16hReeeUVDBkyBH369LHIMRIRkWFqNdCoEZCSIvfC4EBaRES1T0UmmFerzVjAcrB4cjVixAikpqZi7ty5uHHjBgIDA7Ft2zbdoBVXrlzRa0Lt1q0boqOj8cYbb+D1119Hs2bNsGXLFrRu3VoXk5SUhIiICCQnJ8PHxwdjxozBm2++afZjIyIiIiKikmknmG/SpOQ4d3d5mo7Dh6tucmXxea6qIs5zRbUZ6xyZG+scmRPrG5kb61zpPvkEWLq09OQKkJOriAigDFPXmkx5cgN+wkREREREZDFOTvLtkFIJY4kAd2O0IwZWRUyuiIiIiIjIYoKCAFdXeVTAkqSny3EGxrGrMphcERERERFVhqxE4PImIGmH/DMr0dIlqpLUaqBHDyA1FSgwMkp6QYE8HHtwsHZU2arJ4gNaEBEREZlDYqJ843xBgTzyWFBQ1b0pnqq53CTgbBSQsh/QZAGKFsDVc4CtM+DZE2g5A3DwsXQpq5SZM4GLF4H4eHlUQHd3eQRZvXmuAuT7raoyJldERERUoyUlAVFR8lDPWVlAixbAuXPyfRs9ewIzZgA+vM4lU8lNAo5OBDLiAVsV4OwPFPkAVhqg4DZwbSuQlQB0/pgJ1j18fICPP5YHtti7Ox8J5/KgVEiQhBKudewxaJAdIiKq/neVyRURERHVWElJwMSJd/8b7u8vX5xpNMDt28DWrfLoYx9/XPUv2qiaOBslJ1ZO/vIkykIhL1coAbu6gI2LvP7sUqDD/bPh1m4+7klYMjIKia0v4PDpJsjKc4KzfTaCWl+AX5vmgPsMAFX7i8rkioiIiGqsqCg5sfL3l7sCKv67zlUqgbp1ARcXef3SpcASXufSg8pKlLsC2qrkxMoQpY28PmWvHO+sNmMBq7B7WvzU3iqoGxXKCamQAE16tWnx44AWVDNlJQKJ3wAXPpF/8gZSIqJaJzFR7gqoUsmJlSE2NvL6vXvleKIHkhYLFGQCtu4lx9m6y3Fph81Rqurh3hY/u7pyYgXcbfFz8r/b4leFseWKapZ7byAtyLz7Hw8bV95ASkRUy8TGApmZpU9M6u4udw08fJgDXNADKsyWrz0UpbRfaGMKs8xTrqquBrX4seWKag5tc/K1nwGFDeDc5O5DYSM3Jx+dKMcREVGNl50td/9TlnK1o43J4nUuPShrJ/mfuqKU2XC1MdZVeDZcc6pBLX5suaKa4/4bSLV4AykRUa3k5CQP4yxJJSdY2hhnXucalpUoX/wWZsvJg0dQlW01sDiPILm3jCZdvvYwRpMux6mq8Gy45lSDWvyYXFHNUIOak4mISqOdryk7W04gOF+TYUFBgKurPEdO3RKuc9PT5bggXufqY1f78nNWA5495F40Ni6Gr0mkAkCTBjQYBDhV4dlwzeneFr+SEqxq0OLH5IpqBm1zsnMpHett3eWRZtIOM7kiomrn3vmaMjPvTrDp6sr5mgxRq4EePYCff5ZHBTQ0qEVBgTw56aBBgB+vc+8qNldTk2o5cptFtJwJZF28+97Z1JGXCwnQ3JYTK7cAoGUVnw3XnGpQix/vuaKaoQY1JxMRGaKdr+nnn+UkoUmTuw8bG3m+pokT5Ti6a+ZMoFUr4OJF4NYtORkF5J+3bgGXLgEBAUAEr3P11ZCR2yzCwUdOOhsMBkSBnGjlJck/RYHcYsWkVJ+2xU+TKrfsGaJt8fMMrtItfmy5opqhBjUnExEZcv98TVqcr6lkPj7yBMFLl8rDrV+8CNjayj+dneUWq4gItvjpYVf7B+fgI9/fnZUIpB4G0jWAuy3gGVSlEwOLur/Fz9Zdv7W0mrT4MbmimqEGNSdTNcSbvamSVWS+Jt6DdZePj5xwJibKw61rNHKCFRTEroAGsau96TirAcdGgEMK4OlZ+tCVtZm2xe/s0v+S9gT9+/waDJITqyre4sfkimoG3kBKlsCbvclMOF+TaajVQKNGQAqvc0vGrvZkKfe2+KUdluuWtbP8T/Fqcu3G5IpqjhrSnEzVBG/2JjPifE1kVuxqT5bmrK62raH8nw3VHMVuIE24++ANpGRqvNmbzOje+ZpKwvmayCTu7WpfEna1JyqGLVdUs9SA5mSqBnizN5kZ52sis2JXe6IKY3JFNVM1bk6maoA3e5OZcb4mMjt2tSeqEHYLJCIqL97sTRbA+ZrIrNjVnqhC2HJFRFRevNmbLOD++ZoSEuTBKyRJ7grI+ZrI5NjVnqjcmFwREZUX51UjC7l/vqasLHnwCs7XRJWKXe2JyozJFRFRefFmb7IwtZrzWBERVUW854qIqCJazgTcWgHZF4H8W3L3P0D+mX8LyL7Em72JiIhqGSZXREQVwZu9iYiI6D7sFkhEVFG82ZuIiIjuweSKiOhB8WZvIiIiArsFEhERERERmQSTKyIiIiIiIhNgckVERERERGQCTK6IiIiIiIhMgMkVERERERGRCTC5IiIiIiIiMgEmV0RERERERCbA5IqIiIiIiMgEmFwRERERERGZAJMrIiIiIiIiE2ByRUREREREZAJMroiIiIiIiEzA2tIFICIiIjKLrEQgNRZILwBybQBVEOCstnSpiKgGqRItVytXroRarYa9vT26du2KI0eOlBi/efNmtGjRAvb29mjTpg1+++03vfVZWVmYPHkyGjZsCAcHBwQEBGD16tWVeQhERERUVeUmASdmAAeGA6cWAv9ukX8eGA6cmCmvJyIyAYsnV5s2bUJERAQiIyNx4sQJtGvXDqGhoUhJSTEYf+jQIYwcORLPP/88/vrrLwwZMgRDhgzB6dOndTERERHYtm0bvvrqK5w9exbTpk3D5MmTsXXrVnMdFhEREVUFuUnA0YnAtZ8BhQ3g7A/Y+8g/FTbAta3yeiZYRGQCFk+uli5digkTJiA8PFzXwuTo6IjPPvvMYPwHH3yAvn37YtasWWjZsiUWLlyIDh06YMWKFbqYQ4cOISwsDL169YJarcYLL7yAdu3aldoiRkRERDXM2SggIx5w8gfs6gKK/y59FEr5uZO/vP7sUsuWk4hqBIvec6XRaHD8+HHMnj1bt0ypVCIkJASxsbEGXxMbG4uIiAi9ZaGhodiyZYvuebdu3bB161aMGzcO9evXx549e3D+/HksW7bM4Dbz8/ORn5+ve56ZmQkAkCQJkiRV9PBMQpIkCCEsXg6qPVjnyNxY56jSZF0Gkg8ANp6AwhYQgCQUEEIBSSjkGIWtvD55H5B5CXD2s2yZqcbhOa76K89nZ9HkKi0tDUVFRfDy8tJb7uXlhXPnzhl8zY0bNwzG37hxQ/f8o48+wgsvvICGDRvC2toaSqUS69atQ8+ePQ1uc9GiRZg/f36x5ampqcjLyyvvYZmUJEnIyMiAEAJKpcUbGqkWYJ0jc2Odo0qTfBQoqA/YewOFct2SBJBR5AEBAeV/+RWUDYC8G8Clo4CXg+XKSzUSz3HV3507d8ocWyNHC/zoo49w+PBhbN26FX5+fti3bx8mTZqE+vXrIyQkpFj87Nmz9VrDMjMz4evrC5VKBVdXV3MWvRhJkqBQKKBSqfiFJLNgnSNzY52jSnMnE1D8A9gU6RZJQgEFFFBZ/wulQtyNzb8IOGYCnp4WKCjVZDzHVX/29vZljrVocuXh4QErKyskJyfrLU9OToa3t7fB13h7e5cYn5ubi9dffx0//vgjBgwYAABo27Yt4uLiEBUVZTC5srOzg52dXbHlSqWySnwJFApFlSkL1Q6sc2RurHNUKWycABQCKLp7rxUAhUJA+d8DACAkOc7GGWAdpErAc1z1Vp7PzaKfsK2tLTp27IiYmBjdMkmSEBMTg6CgIIOvCQoK0osHgJ07d+riCwoKUFBQUOxNsLKyYl9XIiKi2sQjCLBxBTTpJcdp0uU4leFrDyKisrJ4t8CIiAiEhYWhU6dO6NKlC5YvX47s7GyEh4cDAMaMGYMGDRpg0aJFAIBXXnkFwcHBeP/99zFgwABs3LgRx44dw9q1awEArq6uCA4OxqxZs+Dg4AA/Pz/s3bsXX3zxBZYu5UhAREREtYazGvDsIQ/DbuMCKG2Kx0gFgCYNaDAIcOJgFkT0YCyeXI0YMQKpqamYO3cubty4gcDAQGzbtk03aMWVK1f0WqG6deuG6OhovPHGG3j99dfRrFkzbNmyBa1bt9bFbNy4EbNnz8aoUaNw69Yt+Pn54e2338ZLL71k9uMjIiIiC2o5E8i6KA+3bqsCbOrIy4UEaG7LiZVbANAyouTtEBGVgUIIIUoPq10yMzPh5uaGjIyMKjGgRUpKCjw9PdlPl8yCdY7MKisRUmosUtIL4OluA6UqSG5tIDKl3CR5HquUvZA0WUhRtICnOAelrTPgGSwnVg4+li4l1VD8u1r9lSc3sHjLFRER1UK5SfLkrin7AU0WoGgBXD0H2DoDnj2BljN4sUum4+ADdFgCZCUCqYeBdA3gbgt4BrErIBGZFJMrIiIyr9wk4OjEu920nP2BIh/ASgMU3AaubQWyEoDOHzPBItNyVgOOjQCHFHnIdbYiEJGJ8axCRETmdTZKTqyc/AG7uneHyFYo5edO/vL6sxyEiIiIqhcmV0REZD5ZiXJXQFuV4ZHbAHm5rQpI2SvHExERVRNMroiIyHzSYoGCTMDWveQ4W3c5Lu2wOUpFRERkEkyuiIjIfAqz5e5/ilL+/GhjCrPMUy4iIiITYHJFRETmY+0kzy8kpJLjtDHWzuYpFxERkQkwuSIiIvPxCAJsXAFNeslxmnQ5ThVkjlIRERGZBIdiJyIi83FWA549gGs/AzYuhge1kAoATRrQYBDnIDImK1G+f60wW24N9ODky0REVQGTKyIiMq+WM4Gsi3fnubKpIy8XEqC5LSdWbgFAywjLlrMqunfy5YJM+b40IcmtfJx8mYjI4tgtkIiIzMvBR54guMFgQBTIiVZekvxTFMgtVpxAuDjt5MvXfgYUNoBzk7sPhY08+fLRiXIcERFZBFuuiIjI/Bx8gA5L5O5tqYeBdA3gbgt4BrEroDH3Tr58b3dK7eTLNi53J1/usMRy5SQiqsWYXBERkeU4qwHHRoBDCuDpCSjZocKgiky+zHuwiIjMjn/FiIiIqjpOvkxEVC0wuSIiIqrqOPkyEVG1wOSKiIioquPky0RE1QKTKyIioqqOky8TEVULTK6IiIiqOu3ky5pUeZJlQ7STL3sGc8RFIiILYXJFRERUHbScCbi1ArIvAvm37nYRFJL8PPsSJ18mIrIwJldERETVQbHJlxPuPjj5MhFRlcB5roiIiKqLeydfTjssjwpo7SzfY8WugEREFsfkioiIqLpxVnOSYCKiKojdAomIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkioiIiIiIyASYXBEREREREZkAkysiIiIiIiITYHJFRERERERkAkyuiIiIiIiITMDa0gWoioQQAIDMzEwLlwSQJAl37tyBvb09lErmwlT5WOfI3FjnyJxY38jcWOeqP21OoM0RSsLkyoA7d+4AAHx9fS1cEiIiIiIiqgru3LkDNze3EmMUoiwpWC0jSRKuX78OFxcXKBQKi5YlMzMTvr6+uHr1KlxdXS1aFqodWOfI3FjnyJxY38jcWOeqPyEE7ty5g/r165fa+siWKwOUSiUaNmxo6WLocXV15ReSzIp1jsyNdY7MifWNzI11rnorrcVKix0/iYiIiIiITIDJFRERERERkQkwuari7OzsEBkZCTs7O0sXhWoJ1jkyN9Y5MifWNzI31rnahQNaEBERERERmQBbroiIiIiIiEyAyRUREREREZEJMLkiIiIiIiIyASZXREREREREJsDkqopbuXIl1Go17O3t0bVrVxw5csTSRaIaatGiRejcuTNcXFzg6emJIUOG4O+//7Z0saiWWLx4MRQKBaZNm2bpolANdu3aNTz33HOoV68eHBwc0KZNGxw7dszSxaIaqKioCG+++SYaN24MBwcHNGnSBAsXLgTHkav5mFxVYZs2bUJERAQiIyNx4sQJtGvXDqGhoUhJSbF00agG2rt3LyZNmoTDhw9j586dKCgoQJ8+fZCdnW3polENd/ToUaxZswZt27a1dFGoBrt9+za6d+8OGxsb/P777zhz5gzef/991KlTx9JFoxro3XffxapVq7BixQqcPXsW7777Lt577z189NFHli4aVTIOxV6Fde3aFZ07d8aKFSsAAJIkwdfXF1OmTMFrr71m4dJRTZeamgpPT0/s3bsXPXv2tHRxqIbKyspChw4d8PHHH+Ott95CYGAgli9fbuliUQ302muv4eDBg9i/f7+li0K1wBNPPAEvLy98+umnumVPPfUUHBwc8NVXX1mwZFTZ2HJVRWk0Ghw/fhwhISG6ZUqlEiEhIYiNjbVgyai2yMjIAADUrVvXwiWhmmzSpEkYMGCA3rmOqDJs3boVnTp1wrBhw+Dp6Yn27dtj3bp1li4W1VDdunVDTEwMzp8/DwA4efIkDhw4gH79+lm4ZFTZrC1dADIsLS0NRUVF8PLy0lvu5eWFc+fOWahUVFtIkoRp06ahe/fuaN26taWLQzXUxo0bceLECRw9etTSRaFa4OLFi1i1ahUiIiLw+uuv4+jRo5g6dSpsbW0RFhZm6eJRDfPaa68hMzMTLVq0gJWVFYqKivD2229j1KhRli4aVTImV0RUzKRJk3D69GkcOHDA0kWhGurq1at45ZVXsHPnTtjb21u6OFQLSJKETp06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", + "image/png": "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Tx+4ubnh6NGjiI+PR0hICMzMzPDhhx8afN+IESMQHx+PPXv2oLCwEGPGjMH48eMREREBADAzM0NISAjatm0LBwcHnDt3DuPGjYMkSZrlHjhwAMOGDUPHjh1haWmJjz76CD179kR0dDTq1q0LAAgNDcW+ffvwzTffwNvbG3/88QcmTJgADw8P9O3bt8r2y+jRo/Hpp59i5MiRVbYOowmqkPT0dAFApKenV3dRRHFxsYiPjxfFxcXVXRR6QrDOkZxY36iy5ObmigsXLojc3NxS4yRJEgUFBUKSJM20O3eE6N9fiMaNhejYUYjevYV4/nnV344dVdP791fFVbbnnntO1K1bV2RlZenMu3fvnub5zZs3Rd++fYW1tbWwtbUVgwcPFgkJCZr5YWFhonXr1prXRUVFYurUqcLe3l44OTmJGTNmiJCQENGvXz+DZdm6dasAILZv364zT5IkkZaWJoQQ4sSJEyIoKEjUrl1b2NnZia5du4rTp0/rlH38+PHCxcVFWFhYiBYtWohffvlFCCHEhg0bhL29vdi9e7do2rSpsLa2FsHBweLOAzt43bp1omnTpsLCwkI89dRTYtWqVQbLLoQQ27ZtE87OzlrT9u/fLwCI3bt3C19fX2FpaSm6d+8uEhMTxa5du0TTpk2Fra2tGDZsmMjOzta8r7i4WHz44YfC29tbWFpailatWolt27Zp7d9XXnlFM79JkyZixYoVWuseNWqU6Nevn1i0aJFwc3MTTk5OYsKECaKgoKDU7TBk165dQqlUan3ua9asEXZ2diI/P1/vey5cuCAAiJMnT2qm/fbbb0KhUIjbt28bXNfUqVNF586dDc4vKioStra2YtOmTZppLVq0EAsWLNCKa9u2rZg9e7bmNQCxdu1a0adPH1GrVi3RtGlTcfToUXH16lURGBgorKysREBAgLh27ZrmPWfPnhXdunUTNjY2wtbWVrRt21Zre27evCkAaL2nIkr7DjE2N2C3QyIiIqIyLF0KREcDPj6Ak5Oq1QtQ/XVyUk2PjgaWL6/c9aampmL37t2YOHEirK2tdearr4uSJAn9+vVDamoqDh48iD179uD69esYOnSowWUvW7YMGzduxPr163H48GGkpqbip59+KrU83377LZ566in069dPZ55CoYC9vT0AIDMzE6NGjcLhw4dx7NgxNG7cGL1790ZmZqamvM89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mmmSJCEyMhIBAQGVtp6srCzExMTA3d0dANCuXTuYmZlprffy5cuIi4ur1PUSERERERGVVK3dDkNDQzFq1Ci0b98eHTp0wIoVK5Cdna0Z/TAkJAR169ZFeHg4ANUgHRcuXNA8v337Ns6ePQsbGxs0atQIADB9+nS88MIL8PLywp07dxAWFgYTExMMGzYMAGBvb4+xY8ciNDQUTk5OsLOzw+TJkxEQEGBwsA0iIiIiIqKHVa3J19ChQ5GcnIy5c+ciISEBvr6+2L17t2YQjri4OK3+k3fu3EGbNm00r5cuXYqlS5ciMDAQBw4cAADcunULw4YNw927d+Hs7IzOnTvj2LFjcHZ21rzv448/hlKpxKBBg5Cfn4/g4GCsXr1ano0mIiIiIqInkkIIIaq7EI+ijIwM2NvbIz09vUaMdpiUlAQXFxdeqEmyYJ0jObG+kdxY50hOrG+PB2NzA37CREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAPT8gRLkoSDBw/i0KFDuHnzJnJycuDs7Iw2bdogKCgInp6eVVVOIiIiIiKiR5pRLV+5ubl4//334enpid69e+O3335DWloaTExMcO3aNYSFhaFBgwbo3bs3jh07VtVlJiIiIiIieuQYlXw1adIEf//9N9atW4eMjAxERUXhhx9+wDfffINdu3YhLi4OMTEx6NKlC1566SWsW7fO6AKsWrUK3t7esLS0hL+/P06cOGEwNjo6GoMGDYK3tzcUCgVWrFihExMeHg4/Pz/Y2trCxcUF/fv3x+XLl7ViunXrBoVCofV4/fXXjS4zERERERFReRmVfP3xxx/47rvv0Lt3b5iZmemN8fLywqxZs3D16lU8++yzRq1869atCA0NRVhYGM6cOYPWrVsjODgYSUlJeuNzcnLg4+ODRYsWwc3NTW/MwYMHMXHiRBw7dgx79uxBYWEhevbsiezsbK24cePGIT4+XvNYvHixUWUmIiIiIiKqCKOu+WrWrJnRCzQzM0PDhg2Nil2+fDnGjRuHMWPGAADWrl2LnTt3Yv369Zg5c6ZOvJ+fH/z8/ABA73wA2L17t9brjRs3wsXFBadPn0bXrl01062srAwmcERERERERJWtXANuAKrkxsbGBp07dwag6ja4bt06NG/eHKtWrYKjo6NRyykoKMDp06cxa9YszTSlUomgoCBERUWVt1gGpaenAwCcnJy0pn/77bf45ptv4ObmhhdeeAHvvfcerKysDC4nPz8f+fn5mtcZGRkAVIOQSJJUaeWtCEmSIISo9nLQk4N1juTE+kZyY50jObG+PR6M/fzKnXzNmDEDH330EQDgn3/+wbRp0xAaGor9+/cjNDQUGzZsMGo5KSkpKC4uhqurq9Z0V1dXXLp0qbzF0kuSJEyZMgWdOnXC008/rZk+fPhweHl5wcPDA3///TfeeecdXL58GT/++KPBZYWHh2P+/Pk605OTk5GXl1cp5a0oSZKQnp4OIQSUSt49gKoe6xzJifWN5MY6R3JifXs8ZGZmGhVX7uTrxo0baN68OQDghx9+wPPPP48PP/wQZ86cQe/evcu7uCo1ceJEnD9/HocPH9aaPn78eM3zli1bwt3dHT169EBMTIzBLpOzZs1CaGio5nVGRgY8PT3h7OwMOzu7qtkAI0mSBIVCAWdnZx60JAvWOZIT6xvJjXWO5MT69niwtLQ0Kq7cyZe5uTlycnIAAHv37kVISAgAVbc+dVc8Y9SpUwcmJiZITEzUmp6YmFgp12JNmjQJv/76K/7880/Uq1ev1Fh/f38AwLVr1wwmXxYWFrCwsNCZrlQqa8SBolAoakxZ6MnAOkdyYn0jubHOkZxY3x59xn525f6EO3fujNDQUCxcuBAnTpxAnz59AABXrlwpM8kpydzcHO3atUNkZKRmmiRJiIyMREBAQHmLpSGEwKRJk/DTTz9h3759aNCgQZnvOXv2LADA3d29wuslIiIiIiIqTblbvlauXIkJEybg+++/x5o1a1C3bl0AwG+//YZevXqVa1mhoaEYNWoU2rdvjw4dOmDFihXIzs7WjH4YEhKCunXrIjw8HIBqkI4LFy5ont++fRtnz56FjY0NGjVqBEDV1TAiIgI///wzbG1tkZCQAACwt7dHrVq1EBMTg4iICPTu3Ru1a9fG33//jalTp6Jr165o1apVeXcHERERERGRURRCCFGdBVi5ciWWLFmChIQE+Pr64tNPP9V0A+zWrRu8vb2xceNGAEBsbKzelqzAwEAcOHAAgKrZVp8NGzZg9OjR+Pfff/Hyyy/j/PnzyM7OhqenJwYMGIA5c+aU69qtjIwM2NvbIz09vUZc85WUlAQXFxc2V5MsWOdITqxvJDfWOZIT69vjwdjcoMLJV1JSEpKSknSGVXxSWo+YfNGTjHWO5MT6RnJjnSM5sb49HozNDcrd7fD06dMYNWoULl68CHXeplAoIISAQqFAcXFxxUtNRERERET0mCp38vXKK6+gSZMm+PLLL+Hq6mqwmx8RERERERHdV+7k6/r16/jhhx80A1wQERERERFR2crdsbRHjx44d+5cVZSFiIiIiIjosVXulq8vvvgCo0aNwvnz5/H000/DzMxMa37fvn0rrXBERERERESPi3InX1FRUThy5Ah+++03nXkccIOIiIiIiEi/cnc7nDx5Ml5++WXEx8dDkiStBxMvIiIiIiIi/cqdfN29exdTp06Fq6trVZSHiIiIiIjosVTu5GvgwIHYv39/VZSFiIiIiIjosVXua76aNGmCWbNm4fDhw2jZsqXOgBtvvvlmpRWOiIiIiIjocVGh0Q5tbGxw8OBBHDx4UGueQqFg8kVERERERKRHuZOvGzduVEU5iIiIiIiIHmvlvuaLiIiIiIiIys+o5GvRokXIzc01aoHHjx/Hzp07H6pQREREREREjxujkq8LFy6gfv36mDBhAn777TckJydr5hUVFeHvv//G6tWr0bFjRwwdOhS2trZVVmAiIiIiIqJHkVHXfH311Vc4d+4cVq5cieHDhyMjIwMmJiawsLBATk4OAKBNmzZ49dVXMXr0aFhaWlZpoYmIiIiIiB41Rg+40bp1a6xbtw6fffYZ/v77b9y8eRO5ubmoU6cOfH19UadOnaosJxERERER0SOt3KMdKpVK+Pr6wtfXtwqKQ0RERERE9HjiaIdEREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJIMKJ1/Xrl3D77//rrn5shCi0gpFRERERET0uCl38nX37l0EBQWhSZMm6N27N+Lj4wEAY8eOxbRp0yq9gERERERERI+DcidfU6dOhampKeLi4mBlZaWZPnToUOzevbtSC0dERERERPS4KPd9vv744w/8/vvvqFevntb0xo0b4+bNm5VWMCIiIiIiosdJuVu+srOztVq81FJTU2FhYVEphSIiIiIiInrclDv56tKlC7766ivNa4VCAUmSsHjxYnTv3r1SC0dERERERPS4KHe3w8WLF6NHjx44deoUCgoK8PbbbyM6Ohqpqak4cuRIVZSRiIiIiIjokVfulq+nn34aV65cQefOndGvXz9kZ2dj4MCB+Ouvv9CwYcOqKCMREREREdEjr9wtXwBgb2+P2bNnV3ZZiIiIiIiIHlsVSr7y8vLw999/IykpCZIkac3r27dvpRSMiIiIiIjocVLu5Gv37t0ICQlBSkqKzjyFQoHi4uJKKRgREREREdHjpNzXfE2ePBmDBw9GfHw8JEnSejDxIiIiIiIi0q/cyVdiYiJCQ0Ph6upaFeUhIiIiIiJ6LJU7+XrxxRdx4MCBKigKERERERHR46vc13ytXLkSgwcPxqFDh9CyZUuYmZlpzX/zzTcrrXBERERERESPi3InX5s3b8Yff/wBS0tLHDhwAAqFQjNPoVAw+SIiIiIiItKj3MnX7NmzMX/+fMycORNKZbl7LRIRERERET2Ryp09FRQUYOjQoUy8iIiIiIiIyqHcGdSoUaOwdevWqigLERERERHRY6vcyVdxcTEWL16MwMBATJ48GaGhoVqP8lq1ahW8vb1haWkJf39/nDhxwmBsdHQ0Bg0aBG9vbygUCqxYsaJCy8zLy8PEiRNRu3Zt2NjYYNCgQUhMTCx32YmIiIiIiIxV7uTrn3/+QZs2baBUKnH+/Hn89ddfmsfZs2fLtaytW7ciNDQUYWFhOHPmDFq3bo3g4GAkJSXpjc/JyYGPjw8WLVoENze3Ci9z6tSp+OWXX7Bt2zYcPHgQd+7cwcCBA8tVdiIiIiIiovJQCCFEda3c398ffn5+WLlyJQBAkiR4enpi8uTJmDlzZqnv9fb2xpQpUzBlypRyLTM9PR3Ozs6IiIjAiy++CAC4dOkSmjVrhqioKDzzzDNGlT0jIwP29vZIT0+HnZ1dObe8ckmShKSkJLi4uPBaPJIF6xzJifWN5MY6R3JifXs8GJsblHu0w8pSUFCA06dPY9asWZppSqUSQUFBiIqKqrJlnj59GoWFhQgKCtLENG3aFPXr1y81+crPz0d+fr7mdUZGBgDVASNJUoXKW1kkSYIQotrLQU8O1jmSE+sbyY11juTE+vZ4MPbzMyr5GjhwIDZu3Ag7O7syu+f9+OOPRq04JSUFxcXFcHV11Zru6uqKS5cuGbWMiiwzISEB5ubmcHBw0IlJSEgwuOzw8HDMnz9fZ3pycjLy8vIqVN7KIkkS0tPTIYTgLyYkC9Y5khPrG8mNdY7kxPr2eMjMzDQqzqjky97eXnMzZXt7+4qX6hE2a9YsrQFFMjIy4OnpCWdn5xrR7VChUMDZ2ZkHLcmCdY7kxPpGcmOdIzmxvj0eLC0tjYozKvnasGEDFixYgOnTp2PDhg0PVTC1OnXqwMTERGeUwcTERIODaVTGMt3c3FBQUIC0tDSt1q+y1mthYQELCwud6UqlskYcKAqFosaUhZ4MrHMkJ9Y3khvrHMmJ9e3RZ+xnZ/QnPH/+fGRlZVW4QA8yNzdHu3btEBkZqZkmSRIiIyMREBBQZcts164dzMzMtGIuX76MuLi4Cq+XiIiIiIioLEYPuFEVgyKGhoZi1KhRaN++PTp06IAVK1YgOzsbY8aMAQCEhISgbt26CA8PB6AaUOPChQua57dv38bZs2dhY2ODRo0aGbVMe3t7jB07FqGhoXBycoKdnR0mT56MgIAAo0c6JCIiIiIiKq9yjXaovu6rsgwdOhTJycmYO3cuEhIS4Ovri927d2sGzIiLi9Nqwrtz5w7atGmjeb106VIsXboUgYGBOHDggFHLBICPP/4YSqUSgwYNQn5+PoKDg7F69epK3TYiIiIiIqKSjL7Pl1Kp1Bp4w5DU1NRKKVhNx/t80ZOMdY7kxPpGcmOdIzmxvj0equQ+X/Pnz39iRzskIiIiIiJ6GOVKvl566SW4uLhUVVmIiIiIiIgeW0a3bVb29V5ERERERERPEqOTr6oY7ZCIiIiIiOhJYXS3Q0mSqrIcREREREREjzUOqUJERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDKoEcnXqlWr4O3tDUtLS/j7++PEiROlxm/btg1NmzaFpaUlWrZsiV27dmnNVygUeh9LlizRxHh7e+vMX7RoUZVsHxERERERUbUnX1u3bkVoaCjCwsJw5swZtG7dGsHBwUhKStIbf/ToUQwbNgxjx47FX3/9hf79+6N///44f/68JiY+Pl7rsX79eigUCgwaNEhrWQsWLNCKmzx5cpVuKxERERERPbkUQghRnQXw9/eHn58fVq5cCQCQJAmenp6YPHkyZs6cqRM/dOhQZGdn49dff9VMe+aZZ+Dr64u1a9fqXUf//v2RmZmJyMhIzTRvb29MmTIFU6ZMMaqc+fn5yM/P17zOyMiAp6cn7t27Bzs7O6OWUVUkSUJycjKcnZ2hVFZ7Pk1PANY5khPrG8mNdY7kxPr2eMjIyICjoyPS09NLzQ1MZSyTjoKCApw+fRqzZs3STFMqlQgKCkJUVJTe90RFRSE0NFRrWnBwMLZv3643PjExETt37sSmTZt05i1atAgLFy5E/fr1MXz4cEydOhWmpvp3SXh4OObPn68zPTk5GXl5eYY2URaSJCE9PR1CCB60JAvWOZIT6xvJjXWO5MT69njIzMw0Kq5ak6+UlBQUFxfD1dVVa7qrqysuXbqk9z0JCQl64xMSEvTGb9q0Cba2thg4cKDW9DfffBNt27aFk5MTjh49ilmzZiE+Ph7Lly/Xu5xZs2ZpJX3qli9nZ+ca0fKlUCj4iwnJhnWO5MT6RnJjnSM5sb49HiwtLY2Kq9bkSw7r16/HiBEjdHZIyUSqVatWMDc3x2uvvYbw8HBYWFjoLMfC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", "text/plain": [ "
" ] @@ -729,10 +732,10 @@ "base_uri": "https://localhost:8080/" }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.492125Z", - "iopub.status.busy": "2025-12-17T20:56:48.491999Z", - "iopub.status.idle": "2025-12-17T20:56:48.816105Z", - "shell.execute_reply": "2025-12-17T20:56:48.815073Z" + "iopub.execute_input": "2025-12-17T21:24:44.600123Z", + "iopub.status.busy": "2025-12-17T21:24:44.600004Z", + "iopub.status.idle": "2025-12-17T21:24:47.005899Z", + "shell.execute_reply": "2025-12-17T21:24:47.004654Z" }, "id": "3aVFtWt_zX2j", "outputId": "6cf1e493-86ca-419e-a8e1-e19486814e09" @@ -742,7 +745,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "[Profiling] Using timing method: cuda_event\n", + "[Profiling] Using timing method: cuda_event\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" ] }, @@ -750,7 +759,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "KernelBench cuda_event time: 2.6700 ms\n" + "KernelBench cuda_event time: 21.4000 ms\n" ] } ], @@ -866,13 +875,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "execution": { - "iopub.execute_input": "2025-12-17T20:56:48.818984Z", - "iopub.status.busy": "2025-12-17T20:56:48.818836Z", - "iopub.status.idle": "2025-12-17T20:56:49.452295Z", - "shell.execute_reply": "2025-12-17T20:56:49.451496Z" + "iopub.execute_input": "2025-12-17T21:24:47.008751Z", + "iopub.status.busy": "2025-12-17T21:24:47.008456Z", + "iopub.status.idle": "2025-12-17T21:24:50.238519Z", + "shell.execute_reply": "2025-12-17T21:24:50.237366Z" } }, "outputs": [ @@ -884,9 +893,21 @@ "======================================================================\n", "\n", "Testing cuda_event...\n", - "[Profiling] Using timing method: cuda_event\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n", - " cuda_event: 2.6700 ms (std=0.0034)\n", + "[Profiling] Using timing method: cuda_event\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " cuda_event: 21.4000 ms (std=0.0169)\n", "\n", "Testing host_time...\n", "[Profiling] Using timing method: host_time\n" @@ -896,8 +917,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n", - " host_time: 2.8200 ms (std=0.0022)\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " host_time: 21.6000 ms (std=0.0159)\n", "\n", "Testing do_bench...\n", "[Profiling] Using timing method: do_bench\n" @@ -907,16 +934,22 @@ "name": "stdout", "output_type": "stream", "text": [ - " do_bench: 2.6700 ms (std=0.0012)\n", + " do_bench: 21.4000 ms (std=0.0150)\n", "\n", "Testing do_bench_impl...\n", - "[Profiling] Using timing method: do_bench_impl\n", + "[Profiling] Using timing method: do_bench_impl\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ " do_bench_impl: Skipped due to AttributeError (Triton version compatibility)\n" ] }, { "data": { - "image/png": "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VZ88JWlpl1LfLD4+Xr1795aPj4/c3d31v//9T//++2+K7/Eon9mD4uvcubMmTpwoSVZTQkjWfdexY8dajvP+/fvTfFwvXbqkDz/8UBUrVpSbm5s8PDzUqFEj7dmzx6pe0vn+448/avDgwSpYsKDc3d3VunVrxcTEKD4+Xr169ZKvr6/c3NzUpUuXZH2n1atX68UXX5SXl5fc3NxUpkwZffrpp1Z1nJ2dVadOHS1evDhNxw9PpycjhQw8pKJFi8rf318//PCDGjVqJElavny5YmJi1L59e40fPz5Zm7ffflvh4eHq0qWL3nvvPR07dkwTJkzQrl279Ntvv8nZ2VnSnWSLm5ub+vTpIzc3N61bt06fffaZYmNjNXLkSKttXr58WQ0bNlTLli3Vtm1bLViwQB9//LEqVqxoiet+bt26leKorpw5c8rV1VW+vr6aPHmy2rRpo6+//lrvvfeezGazOnfuLHd3d02aNEnSnYTb//73P23evFlvvfWWypYtq71792rMmDH6559/rOb3GTx4sAYNGqSaNWtqyJAhyp49u7Zt26Z169apQYMGaf4Mateurffee0/jx4/Xp59+qrJly0qS5b/3unHjhurUqaPDhw8rJCRExYoV0/z589W5c2dduXJF77//vlX9iIgIXb16VW+//bYcHBw0YsQItWzZUkePHrV8Vplh06ZN+uWXXxQcHCxJCgsLU9OmTdW3b19NmjRJ7777ri5fvqwRI0bozTff1Lp16yxt161bp0aNGqlatWoaOHCgHB0dNXPmTL388svatGmTnn/++Qe+/xdffCEHBwd9/PHHOnfunMaOHav69etr9+7dcnV11RtvvKEhQ4Zo3rx5VnM+JSVlW7VqlaYrxrVr11ahQoUUERFhuQI2b948ubm5qUmTJsnqp/Ucmz17trp166bnn39eb731liQlG/bdtm1bFStWTGFhYdq5c6emTZsmX19fDR8+3FKnW7dumjVrllq3bq0PPvhA27ZtU1hYmP7++28tWrTIUu+zzz7T559/rsaNG6tx48bauXOnGjRooISEhAceAwB40v3++++SpGeffTbF9Wn5rl2zZo0aNWqk4sWLa9CgQbpx44a+/vpr1apVSzt37rQkSXr06KEFCxYoJCRE5cqV08WLF7V582b9/fffevbZZ9WvXz/FxMTo33//1ZgxYyRJbm5uadqPsWPHqmfPnnJzc1O/fv0kSXnz5r1vm8uXL6tp06Zq37692rRpo8mTJ6t9+/aaM2eOevXqpR49eqhjx44aOXKkWrdurVOnTsnd3V2SdPbsWb3wwguWi1U+Pj5avny5unbtqtjY2AfeSpeWvlZa+pv3O2aJiYlq2rSp1q5dq/bt2+v999/X1atXtXr1akVFRVl996blc963b59q1aqlggUL6pNPPlHOnDn1448/qkWLFvrpp5/06quvSrqTOAoLC7N818fGxmr79u3auXOnXnnllVSPycO269atm77//nt17NhRNWvW1Lp161LspzzqZ/ag+N5++239999/Wr16tWbPnp3iNmbOnKmbN2/qrbfekslkkre3d5qP69GjR/Xzzz+rTZs2KlasmM6ePaspU6YoICBA+/fvTza1R1hYmFxdXfXJJ5/o8OHD+vrrr+Xs7CxHR0ddvnxZgwYN0tatWxUeHq5ixYpZ5ofat2+fmjZtqkqVKmnIkCEymUw6fPhwihdQq1WrpsWLFys2NlYeHh73PX54ShnAU2jmzJmGJOPPP/80JkyYYLi7uxvXr183DMMw2rRpY9StW9cwDMMoUqSI0aRJE0u7TZs2GZKMOXPmWG1vxYoVycqTtne3t99+28iRI4dx8+ZNS1lAQIAhyfjuu+8sZfHx8Ua+fPmMVq1aPXBfihQpYkhK8RUWFmZVt0OHDkaOHDmMf/75xxg5cqQhyfj5558t62fPnm04OjoamzZtsmr3zTffGJKM3377zTAMwzh06JDh6OhovPrqq0ZiYqJVXbPZbPl/ScbAgQNTjLlTp06W5fnz5xuSjPXr1yerGxAQYAQEBFiWx44da0gyvv/+e0tZQkKC4e/vb7i5uRmxsbGGYRjGsWPHDElG7ty5jUuXLlnqLl682JBk/Prrr8neKzVJx+rYsWPJ1g0cONC490+pJMNkMlnVnzJliiHJyJcvnyVGwzCM0NBQq22bzWajVKlSRmBgoNWxvH79ulGsWDHjlVdeuW+s69evNyQZBQsWtHqfH3/80ZBkjBs3zlLm7+9v1KhRw6r9woULU/0sUtrv8+fPGx9++KFRsmRJy7rq1asbXbp0sRyL4OBgy7q0nmOGYRg5c+a0Ok/ufe8333zTqvzVV181cufObVnevXu3Icno1q2bVb0PP/zQkGSsW7fOMAzDOHfunJE9e3ajSZMmVsf8008/NSSlGAMAPE369+9vSDKuXr1qVZ6e79oqVaoYvr6+xsWLFy1le/bsMRwdHY2goCBLmaenp9X3RkqaNGliFClS5KH2pXz58lb9iiRJ3593f/8l9dEiIiIsZQcOHDAkGY6OjsbWrVst5StXrjQkGTNnzrSUde3a1cifP79x4cIFq/dq37694enpmWJfMUla+1pp7W+mdsxmzJhhSDJGjx6dbF3S+6Tnc65Xr55RsWJFq/c2m81GzZo1jVKlSlnKKleubNXHTqu0tLu3b5bUH3j33Xet6nXs2DFZX/VRPrO0xhccHJys72gY/3ecPTw8jHPnzlmtS+txvXnzZrLz5dixY4bJZDKGDBliKUs63ytUqGAkJCRYyjt06GA4ODgYjRo1stqGv7+/1fkzZswYSz/wQSIiIgxJxrZt2x5YF08nbt/DU69t27a6ceOGlixZoqtXr2rJkiWp3nY0f/58eXp66pVXXtGFCxcsr2rVqsnNzU3r16+31HV1dbX8/9WrV3XhwgW99NJLun79utWtTtKdq1V3zwmVPXt2Pf/88zp69Gia9qFGjRpavXp1ste9k5FOmDBBnp6eat26tQYMGKA33nhDzZs3t9q/smXL6plnnrHav5dfflmSLPv3888/y2w267PPPkv2BJ60PoL3YS1btkz58uWz2jdnZ2e99957unbtmjZs2GBVv127dsqVK5dl+aWXXpKkNB/bh1WvXj2rofE1atSQJLVq1cpyBfXu8qR4du/erUOHDqljx466ePGi5TOIi4tTvXr1tHHjRsujuO8nKCjI6n1at26t/Pnza9myZVZ1tm3bZjU8f86cOfLz81NAQECa97Vjx446fPiw/vzzT8t/7/dvKC3nWFr06NHDavmll17SxYsXFRsbK0mWfe3Tp49VvaSHAixdulTSnav3CQkJ6tmzp9X5+zRMBgsAaXHx4kVly5Yt1RFJD/quPXPmjHbv3q3OnTvL29vbUq9SpUp65ZVXrL6bvLy8tG3bNv3333+ZsSvp5ubmpvbt21uWy5QpIy8vL5UtW9byHS4l/z43DEM//fSTmjVrJsMwrL7zAgMDFRMTY7klMSVp7Wulp7+Zkp9++kl58uRRz549k627t0/3oM/50qVLWrdundq2bWuJ5cKFC7p48aICAwN16NAhnT59WtKdz3nfvn06dOjQA2O828O0Szq/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smXL9OabbypfvnySxJBt2FXS6JO+fftqzpw5ql69uvbv36/vvvtO77//vl577TU7R4in1e7du7V06VL9/vvvcnNzk4ODgxYsWKAZM2bo6NGjWrFihYYMGaKbN2+qVatW9g4XgKS///5b8fHxqlev3kO3f/XVV63K/P39tWLFCsvytWvXNGjQIC1dulRnzpzR7du3dePGjTSNlNq7d68SExNVunRpq/L4+Hjlzp1bktS4cWM5Ozvrl19+Ufv27fXTTz/Jw8ND9evXl3RntObhw4fl7u5utY2bN2/qyJEjluXy5cvLycnJspw/f37t3bs3jUcCeDpVqlTJajl//vw6d+6c/v77b/n5+cnPz8+yrly5cvLy8tLff/+t6tWrq0+fPurWrZtmz56t+vXrq02bNipRokSmx1y0aFGrvwd58+aVk5OTpY+dVHbu3DlJd/6GXLt2zfI3J8mNGzes/obg8UZSClmG8f8nM09ISJCzs7MqVaqkSpUqafbs2fLx8VGPHj1UpEgRq0nPDSZAh43Nnj1bc+bM0ZIlS1S1alXNnTtXHTt2VK5cuewdGp5iVapU0ZAhQ/T1119r+PDhKlq0qN5++23VrVtXdevWVaVKlTR+/HgNHz5cDg4Oatmypb1DBp5695sAOOkHmnHXbeFJcyylx4cffqjVq1frq6++UsmSJeXq6qrWrVtb3TqXmmvXrsnJyUk7duywShhJkpubmyQpe/bsat26tSIiItS+fXtFRESoXbt2ypYtm2Ub1apV05w5c5Jt38fHx/L/zs7OVuscHByYGw94gEf5dzNo0CB17NhRS5cu1fLlyzVw4EDNnTs3WaI7o6UU8/3249q1a8qfP79lLru7pfcJgbAfklLIEpKesifduQKXPXt2DRs2TJLk6+urr776SpL0zjvvqHDhwpLujAyoUqWKXeLF0+vYsWNq2LChJSHVo0cPTZw4UY0bN9b169d1+fJlFSxY0N5h4imSmJgoJycnBQYGymw2a+LEiZozZ466du1qqVO9enW9//77Gj9+vEaMGKHr16/r9ddft2PUAEqVKiVXV1etXbtW3bp1s1qXlLA5c+aM5aLH7t27reqULVvWat4VSdq6davV8m+//abOnTtbfmheu3bNapLx+6lataoSExN17tw5vfTSS6nWe+211/TKK69o3759WrdundW8Vs8++6zmzZsn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JcrKyjhx4gQRERGYTCZKS0uxWCzaFiU+c/ToUeLj4+nevTvvvvsuDz74oNG2c+dObDYbVquVzMzMVhylyB/WrVvHzJkzmTt3LhMmTKBz587MmTOHhx56yHhH/7ptWkRERETE3yiUkutkZ2eTmJjIokWLSEtLw+VyUV5eTnFxMbfffjtWq9VYhaItJ+JLpaWlTJkyhf79+zN37lz69u1rtB08eJBHHnlE76TcMrZu3UpSUpJx+mNISAiHDh0iMDBQgb6IiIiICAql/FLTyVBmZiadO3dm1qxZze7JysoiKSmJjIwMbDbbdX9DgZS0lsOHDzN9+nT69etHcnIyffr0adaud1NuJb/++iuVlZVcuXKFoUOHEhAQoFP2RERERET+TfsG/IzH4zECqaqqKurq6khMTKSgoMC4x+v1Mm3aNBISEoxtfH+lSb+0lujoaNauXcuRI0dIS0ujvLy8WbveTbmV3HvvvQwYMIBhw4apzpmIiIiIyF8olPIjTeuXLFu2jLfeeovRo0ezePFiXnjhBfLz84E/Cu9aLBbuu+8+hg4dyr59+9CCOrmVREdHs2rVKjp27Eh4eHhrD0fkv6bQVERERETkT/q51o80BlI2m42cnBwcDgfdunUjJSUFp9PJiy++iNfrJSEhAZPJxE8//cRrr72G1WoFUA0UuaXExMQwYMAATCaTCkaLiIiIiIj8A6mmlJ/58ssvmTFjBvn5+QwePNi4Xltby3vvvUdaWhoPP/wwtbW1BAUFUVJSolP25Jamd1NEREREROSfSSul/ExFRQW33XZbs1PLADp06EBqairDhg1j9+7dtG/fHpvNhsViUeFouaUpkBIREREREflnUijlJxpXk9TV1eF2u5tdb2z7+OOPiY6OZsmSJUa7TokSERERERERkZagIix+onE1yfDhw/nxxx9Zvny5cd1sNnPlyhU2bNjAnj17mvVTICUiIiIiIiIiLUE1pfxQdnY2s2fPJjExEavVSrt27cjIyKCqqsqoISUiIiIiIiIi0pIUSvkhr9fL9u3bmTNnDm63m+DgYLp06UJhYSGBgYGqISUiIiIiIiIiLU6hlB/7/fffqampwePx0L17d8xms2pIiYiIiIiIiIhPKJQSg8fjwWxWmTERERERERERaXkKpURERERERERExOe0LEZERERERERERHxOoZSIiIiIiIiIiPicQikREREREREREfE5hVIiIiIiIiIiIuJzCqVERERERERERMTnFEqJiIiIiIiIiIjPKZQSERERERERERGfUyglIiIiIiIiIiI+p1BKRERERERERER8TqGUiIiIiIiIiIj43L8AZI7j5yHk9CMAAAAASUVORK5CYII=", + "image/png": "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QbVt2zbV0S32vM8HDx5U+/bt5evrKzc3Nz3++OP66quvbOpcv35d4eHhKlWqlNzc3JQ3b17VqVNH69atu+P5sGe71OaUSkhI0CuvvCI/Pz95eXnpmWee0V9//ZXqPu7nPbtbfD169NDUqVMlyfpeJMd669xdkyZNsp7nAwcO2H1eL1y4oCFDhqhixYry9PSUt7e3mjZtqj179tjUS77eFy9erPDwcD3yyCPy8vJS+/btFRsbq4SEBIWGhsrf31+enp7q2bOnEhISbNpYt26d6tSpo9y5c8vT01OPPvqo3njjDZs6Li4uCgoK0ooVK+w6f3j45MjqAAAAAABkbz/++KMk6bHHHkt1/YIFC3Tx4kX169dPFotF48aNU9u2bXXs2DG5uLhIktavX6+mTZuqePHiCgsL05UrV/TBBx+odu3a2rVrlzVJ8uKLL2rp0qUaMGCAypUrp/Pnz+v777/X77//rscee0xvvvmmYmNj9ddff2nixImSJE9PT7uOY9KkSRo4cKA8PT315ptvSpLy589/x23+/fdftWjRQp07d1aHDh00ffp0de7cWfPnz1doaKhefPFFde3aVePHj1f79u118uRJeXl5SZJOnz6tJ598UhaLRQMGDJCfn59WrVqlF154QXFxcQoNDb3jvsPDwxUWFqZatWopIiJCOXPm1Pbt27Vx40Y1btxYkjR79mx5enpq8ODB8vT01MaNGzVy5EjFxcVp/PjxknTHc5aYmKgWLVpow4YN6ty5s15++WVdvHhR69at0759+1SiRIl0vc/79+9X7dq19cgjj+j111+Xh4eHFi9erNatW+uLL75QmzZtJN1MHEVGRqp379564oknFBcXp19++UW7du3S008/neY5udftevfurc8++0xdu3ZVrVq1tHHjRjVv3jxFvft9z+4WX79+/fTPP/9o3bp1mjdvXqptzJo1S1evXlXfvn3l6uoqX19fu8/rsWPHtHz5cnXo0EGBgYE6ffq0ZsyYofr16+vAgQMKCAiw2VdkZKTc3d31+uuv68iRI/rggw/k4uIiJycn/fvvvwoLC9O2bds0e/ZsBQYGWueH2r9/v1q0aKFKlSopIiJCrq6uOnLkiH744YcUx1OtWjWtWLFCcXFx8vb2vuP5w0PIAAAAAMAdvPXWW0aSuXjxok15VFSUkWTy5s1rLly4YC1fsWKFkWS+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3b1fZk/fNCgoSN98841OnDhhPaZb/yBnbz8xISFBr7zyivz8/OTl5aVnnnlGf/311x3PafJ5tVgsMsZo6tSp1hiSHTt2TB06dJCvr69y5cqlJ598Ut98841NG8nzM33++ed666239MgjjyhXrlyKi4tLdZ+39hknTZpkvQ4OHDggSTp48KDat28vX19fubm56fHHH9dXX31l08aFCxc0ZMgQVaxYUZ6envL29lbTpk21Z8+eFPv766+/1Lp1a3l4eMjf31+vvPJKqv1se6/3W8/N3a53e+b0urXvvXnzZlWvXl2S1LNnT5spLNLbl3z66ad14sSJ+7oNEA+Xh/fP/nioFCtWTDVr1tTChQvVtGlTSdKqVasUGxurzp07a/LkySm26devn2bPnq2ePXtq0KBBioqK0pQpU/Trr7/qhx9+kIuLi6SbH6qenp4aPHiwPD09tXHjRo0cOVJxcXEaP368TZv//vuvmjRporZt26pjx45aunSphg0bpooVK1rjupPr16+nOqrLw8ND7u7u8vf31/Tp09WhQwd98MEHGjRokJKSktSjRw95eXlp2rRpkm4m3J555hl9//336tu3r8qWLau9e/dq4sSJ+uOPP2zm9wkPD1dYWJhq1aqliIgI5cyZU9u3b9fGjRvVuHFju9+DevXqadCgQZo8ebLeeOMNlS1bVpKs/97uypUrCgoK0pEjRzRgwAAFBgZqyZIl6tGjh2JiYvTyyy/b1F+wYIEuXryofv36yWKxaNy4cWrbtq2OHTtmfa8yw3fffaevvvpKISEhkqTIyEi1aNFCQ4cO1bRp0/TSSy/p33//1bhx49SrVy9t3LjRuu3GjRvVtGlTVatWTaNGjZKTk5NmzZqlp556St99952eeOKJu+7/nXfekcVi0bBhw3TmzBlNmjRJjRo10u7du+Xu7q7nn39eERERWrRokc2cT8lJ2Xbt2tn117R69eqpUKFCWrBggXU49qJFi+Tp6anmzZunqG/vNTZv3jz17t1bTzzxhPr27StJKlGihE1bHTt2VGBgoCIjI7Vr1y59/PHH8vf319ixY611evfurTlz5qh9+/Z69dVXtX37dkVGRur333/XsmXLrPVGjhypt99+W82aNVOzZs20a9cuNW7cWNeuXbvrOQAA3PTjjz9Kkh577DGb8qSkJLVs2VI///yz+vfvrzJlymjFihXq3r17qu3cuHFDwcHBqlOnjt59913lypVLkrRkyRJdvnxZ/fv3V968efXzzz/rgw8+0F9//aUlS5bYtJGYmKgmTZroySef1Lhx47R69WqNGjVKN27cSHH70L30Fezpvxw6dEhdunRRv3791KdPHz366KPpOJv/x57PO3v6Zfb0Td98803Fxsbqr7/+0sSJEyXJOol2evqJvXv31meffaauXbuqVq1a2rhxY6r9gtTO67x58/T888/r6aefVrdu3azrTp8+rVq1auny5csaNGiQ8ubNqzlz5uiZZ57R0qVL1aZNG5u2Ro8erZw5c2rIkCFKSEi46wigWbNm6erVq+rbt69cXV3l6+ur/fv3q3bt2nrkkUf0+uuvy8PDQ4sXL1br1q31xRdfWPd57NgxLV++XB06dFBgYKBOnz6tGTNmqH79+jpw4IB1So0rV66oYcOG+vPPPzVo0CAFBARo3rx5Nv3AZJl1vadH2bJlFRERoZEjR6pv376qW7eupJtTWNSpUyddfclq1apJkn744QdVrVr1nmPCQ8QA/2GzZs0yksyOHTvMlClTjJeXl7l8+bIxxpgOHTqYBg0aGGOMKVq0qGnevLl1u++++85IMvPnz7dpb/Xq1SnKk9u7Vb9+/UyuXLnM1atXrWX169c3kszcuXOtZQkJCaZAgQKmXbt2dz2WokWLGkmpviIjI23qdunSxeTKlcv88ccfZvz48UaSWb58uXX9vHnzjJOTk/nuu+9stvvwww+NJPPDDz8YY4w5fPiwcXJyMm3atDGJiYk2dZOSkqz/l2RGjRqVaszdu3e3Li9ZssRIMps2bUpRt379+qZ+/frW5UmTJhlJ5rPPPrOWXbt2zdSsWdN4enqauLg4Y4wxUVFRRpLJmzevuXDhgrXuihUrjCTz9ddfp9hXWpLPVVRUVIp1o0aNMrf/ypRkXF1dberPmDHDSDIFChSwxmiMMcOHD7dpOykpyZQqVcoEBwfbnMvLly+bwMBA8/TTT98x1k2bNhlJ5pFHHrHZz+LFi40k8/7771vLatasaWrUqGGz/Zdffpnme5HacZ89e9YMGTLElCxZ0rquevXqpmfPntZzERISYl1n7zVmjDEeHh4218nt++7Vq5dNeZs2bUzevHmty7t37zaSTO/evW3qDRkyxEgyGzduNMYYc+bMGZMzZ07TvHlzm3P+xhtvGEmpxgAASOmtt94ykszFixdtyr/44gsjyUyaNMlalpiYaJ566ikjycyaNcta3r17dyPJvP766ynaT61vFRkZaSwWizlx4kSKNgYOHGgtS0pKMs2bNzc5c+Y0Z8+eNcbcf1/hTv2X5P7Z6tWrbcqT93nrMSe7vd9k7+edvf0ye/umzZs3N0WLFk1R197P8OTP35deesmmXteuXdPsG97u9v6DMcaEhoYaSTb7v3jxogkMDDTFihWzHntyX6h48eKpHvPtkt8Tb29vc+bMGZt1DRs2NBUrVrQ5P0lJSaZWrVqmVKlS1rKrV6+mOPdRUVHG1dXVREREWMuS+7GLFy+2lsXHx5uSJUumuJYy+no3JuU1lvyd6NY+6+197x07dqR5zaa3L5kzZ07Tv3//FOVAarh9Dw+Njh076sqVK1q5cqUuXryolStXpnnb0ZIlS+Tj46Onn35a586ds76qVasmT09Pbdq0yVr31jkDLl68qHPnzqlu3bq6fPmyza1O0s2/QN06J1TOnDn1xBNP6NixY3YdQ40aNbRu3boUr9snGZ0yZYp8fHzUvn17jRgxQs8//7xatWplc3xly5ZVmTJlbI7vqaeekiTr8S1fvlxJSUkaOXJkinvzM/se8W+//VYFChSwOTYXFxcNGjRIly5d0pYtW2zqd+rUSXny5LEuJ/+Fx95ze68aNmxoM9y9Ro0akqR27drJy8srRXlyPLt379bhw4fVtWtXnT9/3voexMfHq2HDhtq6datdj9ju1q2bzX7at2+vggUL6ttvv7Wps337dh09etRaNn/+fBUuXFj169e3+1i7du2qI0eOaMeOHdZ/7/QzZM81Zo8XX3zRZrlu3bo6f/68dXh+8rEOHjzYpl7yQwGSh/uvX79e165d08CBA22u36yc4BUAHkTnz59Xjhw5UjyefvXq1XJxcVGfPn2sZU5OTtbRxKnp379/irJb+1bx8fE6d+6catWqJWOMfv311xT1bx29kXxr/bVr17R+/XqbepnVVwgMDFRwcPB9tSHd/fPO3n5ZevqmqbH3Mzz583fQoEE229/v5+q3336rJ554wuYBRZ6enurbt6+OHz9uvd0uWffu3dM1h1e7du3k5+dnXb5w4YI2btyojh07Ws/XuXPndP78eQUHB+vw4cP6+++/Jd188EvyuU9MTNT58+fl6empRx99VLt27bI5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7PLly5o5c6ZNvex0vd/tOre3L7lz505JN5/cB9iDkVJ46NxpDp9k9evXV79+/RQZGandu3ercePGcnFx0eHDh7VkyRK9//77at++vWrVqqU8efKoe/fuGjRokCwWi+bNm5dpt4z9/fff+uyzz1KUe3p6qnXr1pKkl19+WefPn9f69evl7OysJk2aqHfv3nr77bfVqlUrVa5cWc8//7wWL16sF198UZs2bVLt2rWVmJiogwcPavHixVqzZo0ef/xxlSxZUm+++aZGjx6tunXrqm3btnJ1ddWOHTsUEBCgyMhISTcfB/ziiy+qXbt2evrpp7Vnzx6tWbMmxbDdKlWqyNnZWWPHjlVsbKxcXV311FNPpTp3V9++fTVjxgz16NFDO3fuVLFixbR06VL98MMPmjRp0n3dLpAdODk56eOPP1bTpk1Vvnx59ezZU4888oj+/vtvbdq0Sd7e3vr666/v2o6vr6/q1Kmjnj176vTp05o0aZJKlixpM8msdPOvf507d9aUKVPk7OycYnL89Hj55ZfvWsfea0y6maBbv369JkyYoICAAAUGBqY6l0RaKleurO7du2vmzJnW2xZ+/vlnzZkzR61bt1aDBg0k3bztdsiQIYqMjFSLFi3UrFkz/frrr1q1ahVDzAEgHYoXL64KFSpo/fr16tWrl7W8devWeuKJJ/Tqq6/qyJEjKlOmjL766itduHBBkn0jjsqUKaMSJUpoyJAh+vvvv+Xt7a0vvvgizRGtbm5uWr16tbp3764aNWpo1apV+uabb/TGG2+kOSdSeqWn/3Kr3r1763//+5969+6txx9/XFu3brWOarkX9vTL0tM3rVatmhYtWqTBgwerevXq8vT0VMuWLe3+DK9SpYq6dOmiadOmKTY2VrVq1dKGDRvSNTIuNa+//roWLlyopk2batCgQfL19dWcOXMUFRWlL774Is2pA+7H1KlTVadOHVWsWFF9+vRR8eLFdfr0af3000/666+/tGfPHklSixYtFBERoZ49e6pWrVrau3ev5s+fn2Kepz59+mjKlCnq1q2bdu7cqYIFC2revHkp5lvLTtd7iRIllDt3bn344Yfy8vKSh4eHatSoYZ2Dy96+5Lp161SkSBFVrVr1vuLBQ8RRj/kDskLy40937Nhxx3pFixY1zZs3T1E+c+ZMU61aNePu7m68vLxMxYoVzdChQ80/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p5/0+eef67ffflOHDh3UpEkTHT58WN7e3mrRooUWLFhgs838+fPVunVr5cqVS9evX1dwcLC8vLz03Xff6YcffpCnp6eaNGmia9euWbfZtGmTjh49qk2bNmnOnDmaPXu2Zs+eLUn68ssvVahQIUVEROjUqVM6deqUXbED/2Vz5syRh4eHtm/frnHjxikiIkLr1q1TUlKSWrVqpQsXLmjLli1at26djh07pk6dOlm3ffbZZ1WoUCHt2LFDO3fu1Ouvvy4XFxfVqlVLkyZNkre3t/VnbciQIXeMIz0/n0ePHtWqVau0evVqLVy4UJ988omaN2+uv/76S1u2bNHYsWP11ltvafv27dZtOnTooDNnzmjVqlXauXOnHnvsMTVs2FAXLly4/5MIxzBANvf++++bvHnzmho1aph8+fKZ/fv3G2OMSUpKyuLI8LBKTEy0/n/58uXm448/Nh988IE5efJkFkYF3BQeHm7WrFljXX7ttddMsWLFTJ48eUyHDh3MypUrszA6AOkRFxdnXF1dzUcffZRi3aZNm4wk8++//1rLfv31VyPJREVFGWOM6dKli2nWrJnNdp06dTI+Pj533G/58uXNBx98cNf4Tpw4YZydnc3ff/9tU96wYUMzfPhwY4wxy5YtM56eniY+Pt4YY0xsbKxxc3Mzq1atMsYYM2/ePPPoo4/a9OsSEhKMu7u79XdZ9+7dTdGiRc2NGzesdTp06GA6depkXS5atKiZOHHiXWMGHgb169c3derUsSmrXr26GTZsmFm7dq1xdnY2f/75p3Xd/v37jSTz888/G2OM8fLyMrNnz0617VmzZt31d8jtUvv5vL2dUaNGmVy5cpm4uDhrWXBwsClWrJhN3/vRRx81kZGRxhhjvvvuO+Pt7W2uXr1q03aJEiXMjBkz0hUjsg5zSiHbGzRokNauXatvv/1WvXr1UoECBSSJodnIMsmjT4YOHar58+erevXqOnDggObOnauXX35Zzz77bBZHiIfV7t279c033+jHH3+Up6enLBaLli5dqk8//VTHjh3T6tWrFRERoatXr6pdu3ZZHS6Au/j999+VkJCghg0b3vP2bdq0sSmrWbOmVq9ebV2+dOmSwsLC9M033+jUqVO6ceOGrly5YtdIqb179yoxMVGlS5e2KU9ISFDevHklSc2aNZOLi4u++uorde7cWV988YW8vb3VqFEjSTdHch45ckReXl42bVy9elVHjx61LpcvX17Ozs7W5YIFC2rv3r12ngng4VOpUiWb5YIFC+rMmTP6/fffVbhwYRUuXNi6rly5csqdO7d+//13Va9eXYMHD1bv3r01b948NWrUSB06dFCJEiUyPeZixYrZ/C7Inz+/nJ2drX3v5LIzZ85Iuvn749KlS9bfN8muXLli8/sD2RtJKWRL5v9PZn7t2jW5uLioUqVKqlSpkubNmyc/Pz+9+OKLKlq0qM2k54YJ0OFA8+bN0/z587Vy5UpVrVpVn3/+ubp27ao8efJkdWh4iFWpUkURERH64IMPNHbsWBUrVkz9+vVTgwYN1KBBA1WqVEmTJ0/W2LFjZbFY1LZt26wOGcAd3GkS4OQvaeaWW8aT51hKjyFDhmjdunV69913VbJkSbm7u6t9+/Y2t86l5dKlS3J2dtbOnTttEkaS5OnpKUnKmTOn2rdvrwULFqhz585asGCBOnXqpBw5cljbqFatmubPn5+ifT8/P+v/XVxcbNZZLBbmzQPu4H5+ZsLCwtS1a1d98803WrVqlUaNGqXPP/88RZI7o6UW852O49KlSypYsKB1HrtbpfcJgcg6JKWQ7SQ/ZU+6+Ze2nDlzasyYMZIkf39/vfvuu5Kk/v37q0iRIpJujg6oUqVKlsSLh1NUVJSaNGliTUi9+OKLmjp1qpo1a6bLly/r33//1SOPPJLVYeIhkpiYKGdnZwUHByspKUlTp07V/Pnz9cILL1jrVK9eXS+//LImT56scePG6fLly3ruueeyMGoAd1KqVCm5u7trw4YN6t27t8265ITNqVOnrH8Q2b17t02dsmXL2sy9Iknbtm2zWf7hhx/Uo0cP65fNS5cu2UwyfidVq1ZVYmKizpw5o7p166ZZ79lnn9XTTz+t/fv3a+PGjTbzWj322GNatGiR/P395e3tbdd+U5MzZ04lJibe8/bAw6Js2bI6efKkTp48aR0tdeDAAcXExKhcuXLWeqVLl1bp0qX1yiuvqEuXLpo1a5batGlzTz9rmfXz+dhjjyk6Olo5cuRQsWLFMrx9OAYTnSPbSU5Ivfvuu2rbtq2ee+45zZkzR5IUGhqq1157TfPnz9f777+vLVu2qGnTpurQoYMkJphG5kv+QP3zzz+VP39+/frrr+rTp48iIyPVv39/GWM0a9YsLVu2TDdu3MjiaPGwSEpKso5SuHr1qpo2baohQ4aoYsWK+vLLL7Vx40Zr3ccff1wvv/yy8uXLl+pfFgFkH25ubho2bJiGDh2quXPn6ujRo9q2bZs++eQTlSxZUoULF1ZYWJgOHz6sb775Ru+9957N9oMGDdLq1av17rvv6vDhw5oyZYrNrXvSzcTXl19+qd27d2vPnj3q2rWr3aMpSpcurWeffVbdunXTl19+qaioKP3888+KjIzUN998Y61Xr149FShQQM8++6wCAwNVo0YN67pnn31W+fLlU6tWrfTdd98pKipKmzdv1qBBg/TXX3/Zfa6KFSumrVu36u+//9a5c+fs3g542DRq1EgVK1bUs88+q127dunnn39Wt27dVL9+fT3++OPWh0tt3rxZJ06c0A8//KAdO3aobNmykm7+rF26dEkbNmzQuXPnrE/RvJPM+vls1KiRatasqdatW2vt2rU6fvy4fvzxR7355pv65ZdfMmw/yFwkpZBt3JpQmjRpkt555x098cQTOn78uKZPn67hw4dLkl5++WUNGzZMa9asUb9+/XTx4kUdOHBAEvNMIePd3jFP/uLftm1bTZo0SdWqVdPMmTPVv39/STfvYf/66691/Phx660JQGa6dXTp2LFjNXToUEVFRSkoKEhvvfWWSpUqpbFjx9okoKpVq6b33ntPM2fOzKKoAdhrxIgRevXVVzVy5EiVLVtWnTp10pkzZ+Ti4qKFCxfq4MGDqlSpksaOHZviyXpPPvmkPvroI73//vuqXLmy1q5dq7feesumzoQJE5QnTx7VqlVLLVu2VHBwsB577DG745s1a5a6deumV199VY8++qhat26tHTt2WEezSzf7Z126dNGePXtSzLuYK1cubd26VUWKFFHbtm1VtmxZvfDCC7p69Wq6Rk5FRETo+PHjKlGihM1tfwBsWSwWrVixQnny5FG9evXUqFEjFS9eXIsWLZJ0s697/vx5devWTaVLl1bHjh3VtGlThYeHS5Jq1aqlF198UZ06dZKfn5/GjRt3131m1s+nxWLRt99+q3r16qlnz54qXbq0OnfurBMnTtj9lFJkPYthaAmymR9//FErVqzQU089peDgYJ0/f14TJ07UqlWr9PTTT+t///ufJGnfvn26ceOGKlWqJCcnJ924cYMkADLUrfOUrVq1SmfOnFGdOnUUEBAgFxcXvf7661qwYIHGjx9vfXz2a6+9ptOnT+vnn3/meoRDDRs2THPnzlV4eLiaN29uvX10zZo1mjx5sm7cuKE333xT9erVs9nu1qQWAAAA4EgkpZCtfPvttxo6dKguX76sFStWqGLFipKks2fPavLkyVq1apUaN25snWMqWfJcKkBmGDZsmD755BO5uLjI3d1d/fr1U//+/fXvv/9q4sSJ+vDDD+Xr6ys/Pz/lzZtXa9askYuLC9clHGbDhg3q0aOHlixZoieffFKSbVJ17dq1+uCDD/TPP//o448/VtWqVbMyXAAAAEASE50jmylZsqRq1KihpUuXatmyZdaklJ+fn15++WU5OTnp008/VdGiRdWvXz/rdnzxR0ZK/jJvjNGJEye0fft2rVq1SuXKlVNYWJg+//xzXbp0Sa+99pomTZqkvn376vjx48qfP7+qVq3KyD04XHR0tPz9/VW5cuVUk6GNGzfWtWvXtHnzZlWuXDmLogTwoPnuu+/UtGnTNNdfunTJgdEAyI74PYH7xTcmZJnbbxlJTExU6dKlFRYWJmdnZ3311Vfy9fXVgAEDJEn58uXTSy+9pEKFCqlXr15ZFTb+4269LmNiYpQjRw4VL15clSpVkqurq8aPH68RI0Zo5cqVkqSQkBCVK1fO5mklSUlJJKTgUJcuXdKRI0d0/fp1ubu7W6/jpKQkbdiwQaVKlVKLFi3UokULSdyyB8A+jz/+eIon+gHArfg9gfvF7XvIErd+Ifroo4908OBBHT58WC+++KIaN26ss2fPauTIkdq3b5+effZZa2LqVtwahcw0YsQILVu2TP/++6/y5s2r7777Tj4+PjbrV69erZo1ayoiIkK5c+fOumDx0EgrmbR37149++yzaty4sYYNG2adRDQ+Pl4tWrRQmzZtNGjQIEeHCwAAANwRfyZFlkj+UjV06FCFhYXp+vXrKlasmFq0aKGIiAgVLFhQb7zxhipWrKjPP//cOrn5rUhIISPdmp9ftmyZpk+frldffVWNGzfWpUuXNHDgQJ0+fdpaZ/To0apVq5YuXbpkk6wCMosxxvq7c+7cuYqIiND06dN17do1VaxYUW3bttX333+vwYMHa/v27Vq9erXat2+v2NhYvfTSS1kcPQAAAJASI6WQZdauXas+ffpo+fLlqlq1qnbt2qXHH39c8+fPV5cuXSRJx48f12uvvSZfX199+OGH1kl7gcyyePFiHThwQEWKFLHeJjpp0iQtXbpUpUuX1v/+9z/5+/tb6986/xTXJzLLrdfXW2+9pYkTJ6p27dpav369mjRpovfff1+lSpXS1KlTtXTpUm3ZskWVKlVS/vz5tXLlSibeBwAAQLbESCk4zO35z7i4OJUvX15Vq1bVwoULVb9+fU2dOlVdunRRXFycDhw4oGLFiun999/X9OnTrV/8gYzy9NNPa9WqVdblffv2aezYsXr33XeVlJRkLQ8NDVX79u31xx9/6M0339SpU6es60hIwRGSr6+jR49q165d2rJli9auXasjR45o//79CgkJ0cGDBxUSEqJNmzZp9+7d+vbbb7Vq1Sq5uLjoxo0bJKQAAACQ7ZCUgsPc/qU9JiZG//zzj1asWKEXX3xR48aNU//+/SVJ3377rcaMGaOzZ88qICDAOmEvX/yRUc6cOaPg4GA1bNjQWlamTBm98sor1hEn586ds64LDQ1Vx44dtXXrVs2ePdumLa5LOMLYsWPVrVs3OTk5qUSJEpKk4sWLa/369frjjz8UGhqqXbt2SZIqVapk87uTifcBAACQHXH7Hhxq6tSp+uqrr7RmzRqdO3fOOgfK+PHj9eqrr0qSrly5ok6dOilPnjyaPXs2X/iR6caNGydfX1/17t1biYmJWrJkiSZPnqzcuXNr3rx5yps3r7Xu4sWL1a5dO0adwOF+/PFHNWrUSG5ubtq0aZMqV65sHaV35MgRBQcHK2/evPrss89UunTprA4XAAAAuCtGSsGh8ubNq3///Vd79uyRr6+vunbtqqpVq+r777/Xjh07tGzZMrVt21bHjx/XJ598wi17yBS3X1MHDx7UwIEDNX/+fDk7O6tDhw4KCQlRXFycunXrpvPnz1vrduzYUc7OzkpMTHR02HiI3Hr7qHTzmq1Vq5a+++47Xb16Ve+8845Onjxp/R1ZsmRJffPNNypcuLBKliyZRVEDAAAA6cNIKWSa1ObZ+fPPP9WoUSN16NBB77zzjhISEjR37lwtXLhQ27ZtU8WKFVWoUCF9/vnnTMyLTHHw4EHlz59fefLk0VtvvaW+ffvKxcVFEyZM0IwZMzRt2jQ999xzSkxM1KJFizRjxv9r786jorzuP46/ZxjEGDRIg5gaYpFoPcSkuCFxqWskbbGucYlijFuUuOBSJp5KCKLgUneJAR3QiPuSE7UKGhVr3IrGDTVNo6RYFOsWlX2Z+f2RwwRilrY/Fguf11/wPM/l3DnnnudwP3Pv98aQl5fH/v37qVevXlV3X2oAq9VqP2UvMTGRa9eu4ejoSOfOnfH09OT48eN069aNvn37Mm/ePDw8PB5535b+GyIiIiIijyuFUlLhvhssJSQkMG3aNHbt2oWvr699MvW3v/2NZ555hrp162IwGCgqKlIdFClX586dw9/fn7CwMFJTU1m5ciWpqal4e3tz7do1lixZwqpVq8oEU3FxcXz22WdER0drki+VKiQkhB07duDm5kb9+vVJTk7mL3/5C23atCElJYXOnTvTr18/IiIi8PT0rOruioiIiIj8xzTDkgo1Z84cxo4dy7Zt2+zXunTpgre3N8eOHQOgqKgIgGbNmlGvXj0MBoMK80qF+NWvfsXo0aP54x//SHx8PMnJyXh7ewPg4eFBcHAwY8aMYcKECfatfKNGjWLlypX2gtEilWHt2rX2VaTHjx9nwIAB5OXl8eWXXwLQtm1bDh06xIYNG1i7dm0V91ZERERE5L+jUErK1XcX3nl5eZGRkcGMGTN49dVXOXDgAA0bNqRv375ERUWRnZ2No6MjUPYEM61IkfJWUgPqpZdeAsDFxYXU1FT+9a9/2Z8pHUwFBgaSlJRUZixqXEpl+eKLLxgxYgRt27blo48+YvLkycTExDB48GAePHjAzZs3adeuHampqcycObOquysiIiIi8l/RDEvKjdVqtQdLVquVnJwcBg8ezI4dO9i8eTMFBQWYzWa6du2Kl5cXzs7OLFiwQKtPpFKUbCHt0aMHV69eZdSoUcyfP5+EhARu3bplf87Dw4OZM2eycOFCunfvXlXdlRru4cOHFBYWsnPnToYPH86CBQsYM2YMNpuNrVu3EhsbS05ODt7e3phMJvuKUxERERGR/yUKpaRclC6qu2DBAoYNG4aPjw8LFy7k/PnztGrVioMHDzJv3jyaN2/O0KFDSUtL45///KdWn0ilsVqtuLq64uLiQkREBIMGDWLZsmVs3LiR27dvAzB06FAePnzIlClTNNmXCvdDoXyLFi3Yu3cvQ4cOZe7cuYwbNw6A+/fvs337dgoLC6lTp479eW13FhEREZH/RSp0LuVqxowZWCwWZs2aRV5eHu+//z5NmjQhPj6eZ555xv7ckSNHOHXqFBMnTtRkSipd6RD1nXfeYevWrbRr147r169z8eJFrl+/bt9WKlJRSh/mkJycjNVqxcnJiQ4dOlBcXMyAAQM4fPgwa9asoXXr1mRlZREcHMytW7c4ceKE3p0iIiIi8j9PoZSUm9OnTxMYGEhcXBx+fn4cPXqUrl27YrFYCAwMfOQUvhI6ZU+qQunxuHjxYi5fvkxBQQGrV6/GZDL94HgV+f8aNmwYv/3tb3n99dcBmDp1KmvXrsXZ2ZnMzEz69evHvHnzaNSoEf7+/mRmZnLlyhV8fHwwmUwcPHgQR0dHjVERERER+Z+nJEDKjc1mo1atWvj5+bF161ZGjhzJsmXLCAwMJDs7m+TkZNq3b0/9+vXLtFMgJRUlLy+P2rVrf+89BwcH+4qpKVOmlAlHFZRKRSmpX/b222/j7OxMq1at2LlzJ3v27MHd3Z2MjAwGDx7MuHHj2LhxI/v27ePMmTNcu3aN5557Dh8fH4xGo8aoiIiIiFQLKuYj5SY3N5ecnBzWrVvH2LFjy9RBOXHiBOvXry9z0plIeTtw4IC9Rs+sWbOwWCw/WkjfaDRis9mw2WyYTCZsNhvFxcWa7EuFcXNzY/bs2QwbNozhw4czd+5cXnnlFdq1a0fjxo3p0KEDSUlJnDhxgvfeew+j0Ujr1q3p06cPrVq1wmg0YrVaNUZFREREpFrQ9j0pV71792bXrl0sWrSI4OBg4JvVKgMGDMDJyYmtW7eqsLlUiBs3btCtWzfq1q2Ln58fsbGxnDp1ihYtWvxoO5vNZj81Micnp0zxaJGKkpaWxtKlS1m1ahUdO3YkKSkJq9VKYWEhTk5OxMTEMGfOHE6dOsXTTz+t96aIiIiIVEv6qlXKRcnEftasWdy9e5dFixbx1FNPce/ePRITE7l+/Tpnzpyxf8uvCZaUN3d3d9auXYu/vz+pqal8+umntGjRgoKCAmrVqvW9bUoHUosXL8ZisXDq1Kkf3PInUl48PT2ZOHEiAMuWLWPLli0MHDgQJycnAJycnHBxcaF27dp6X4qIiIhItaVQSspFycT+xRdfxGKxEBkZycKFC3Fzc6Np06bs2bMHk8mkOihS7kpCTqPRiMlkwtXVFYPBwJQpU9i/fz+1a9f+3nFXOhwtWZWydOlSBVJSaby8vJgyZQr5+fkMHTqU/Px8unXrhslkYuPGjTRs2JC6detWdTdFRERERCqMtu9Jhbl79y4uLi72ib8CKSlvpYOl1NRUXF1dqVOnDpcuXSIoKIg6depw6NAh++oTgOzsbJ588kn77zExMYSEhBAXF0f//v0r/TOIpKenM3fuXGJjY3F1dWXIkCGcPXuWTz75BEdHR60uFREREZFqS//lSrkryTlLB1IlhaRFykvpiXpoaCgjRozgwoUL1KtXD19fX/70pz+Rk5ND9+7dycvLA2Ds2LFs3rzZ/jdiY2Mxm80KpKRKPffcc5jNZqZNm8bt27fp3Lkzhw8fxtHRkaKiIgVSIiIiIlJtaaWU/Kgf+4a+dD2en7pXXFyMg4NDhfRRaraZM2disVhYvXo1L7/8Mq6ursA3Y/fIkSNMnDiRW7du0axZM7766iuuXLmCyWRi/fr1BAYGsm3bNvr161fFn0IEvvjiC/bs2cOECRPsp0H+0DtWRERERKQ6UCglP6h0ILVt2zbS09OpVasWv/vd7/D09AS+P5gqfW3t2rW0b9+epk2bVm7npUa4ePEiffv2Zfny5fj7+/PgwQNu3rzJkSNHaN68Oe3btyctLY24uDisVivh4eGYTCYKCgo4ePAgAK+++moVfwqpbr7vvfifBvMK8kVERESkJlAoJT/JbDazZs0afH19OX/+PC+88AIjR45kwIABQNkJWOmfV61axVtvvcXOnTsJCAiosv5L9XXu3DkGDRpEXFwcRUVFbNmyheTkZO7du4ebmxsRERH06tWrTJuS2mZahSIVoXSYf/PmTQoKCvDw8LDf/6FxVzqEunv3rn3Fn4iIiIhIdaZCFfKIoqIi+8/Lly9n48aN/PnPf2bXrl2Eh4eTmJjI8uXL2bRpE/DNyXtWq7XMZCsmJobp06ezfft2BVJSLqxW6yPXfvnLX2I0Ghk9ejQ9evQAICoqiuPHj1NUVERmZuYjbUpqmymQkvJks9mw2Wz2QCosLIyePXvi6+tLy5YtWbduHXfv3v3ecWez2eyBlMViITw8nAcPHlRq/0VEREREqoIqT4vd+PHjmTp1Kk2bNqW4uJjc3FzS09Mxm820adOGHTt2MGXKFMLCwti7dy+RkZEYjUYGDhxYpu5U6dPM+vbtW4WfSKqL0qtPUlJSsFqtGAwGfH19OXPmDLt378bNzY2OHTvan6tXr973BlkiFcFgMNgPeYiMjCQ6OpqlS5fi7u5OXFwcCxYsICMjg6CgIOrVq2dvVzrMj42NZcKECWzZsqXMMyIiIiIi1ZW27wkAV65cYeDAgdy/f5/9+/fj6elJYWEhn3/+Oe7u7ty5c4fevXsTFBREcHAwiYmJvPbaazz//PNERUXZ6/IsXbqU8PBwVq9ereLRUi5KT9rNZjMbN27EYDBw8+ZNhgwZQmhoKE2aNAEgOzubr7/+mjFjxpCZmUlKSorq8kiFmjlzJu7u7kycOBGAO3fuEBAQQGBgIEFBQfbnQkJC+Oijj4iLi6NTp072AKv06tKQkBDi4+P17hQRERGRGkPb9wQAT09PYmNj8fLyomvXrqSlpeHo6EizZs1o0KABJ0+epH79+gQGBgLw8OFDunfvjr+/Pz179gQgIyODhIQEoqOjNamSclMyaV+xYgVxcXFs2rSJffv2sXv3bhITEzGbzfzjH/8AYPXq1fTu3ZusrCxOnjyJg4MDxcXFVdl9qca+/vprjh49yrZt24iPjwfgqaee4v79+/YVe/n5+QDMnz+fp59+mujoaHv70oGU2WwmLi5O704RERERqVEUSgmFhYUYjUZat25NSEgIzz77LAEBAVy7dg0nJycAcnJyyM3N5cKFC2RlZZGQkICfnx9z587FaDRis9lwd3dnz549DBkypIo/kVRHKSkp9O/fn/bt29OsWTN69OjB3r17SUpKwmKxAPDGG2/w9ttvc+jQIRwdHSkqKtJKKakQNpsNFxcXNm/eTIMGDUhISMBisWAymWjSpAkbNmwAwMnJiYKCAgBatmz5SE2z+Ph4pk+fjsVioX///lXzYUREREREqohCKcHR0RGAiIgIFi1aRH5+PpcvX6Zbt25cvXoVgF//+tc4ODgwatQovL29+eqrr5g2bRrw7fYqk8mEm5tblX0OqT6+u6u4sLCQjIwM8vLy7PcLCgrw8fHhvffeY9OmTdy5cwcXFxfefPNN+wqpkgBApLyV1Ctr0KABU6dOpbi4mJiYGLZv305ERATp6ekMGjQIwB6Mnjt3jp/97GfAt4XRL126xPr16xVIiYiIiEiNpJpSAkB0dDRms5ndu3fTuHFj/vrXvxIdHc21a9fYv38/zz//PJcuXeLixYvk5OQwdOhQTCYTRUVFmvhLuSouLrZP4q9evYqzszMNGjTgww8/JCgoiI8//pju3bvbw9Do6GjWr19PcnIytWrVquLeS00zbdo0rly5wo0bN7h8+TKNGjUiODjYHlY5OTnRpEkT7t27x/379zl//jwmk8levL90zTQRERERkZpGoZRQXFzM+PHjgW9Ofypx9OhRJkyYQG5uLklJSTRu3PiRdtoaJeVl5cqVvPzyy/j4+AAwY8YMdu3aRWZmJiNHjsTPz4/k5GT27dvHkiVLeOWVV8jKymLw4ME4OzuzZcsWTe6lUn344YcEBwfzySef0LhxY/Lz83njjTcoKChg5MiR9OjRgw8++IAHDx7g4uJCaGiownwRERERkVL0X3ENVPINfQkHBweMRiOnT58u81yHDh3o06cP4eHhtGjRgs8//5xGjRqVaSdSHtLS0oiMjOQ3v/kNISEhXLp0iXXr1rFixQrOnz9PYmIi6enp+Pn50atXLwICAmjSpAkODg44OTmRkpKCwWDQqhOpVFeuXMHb2xsfHx8MBgMGg8F+et7s2bOpW7cuERERZdpoW6mIiIiIyLdUU6oGKgmkjh07Zr/WrVs3ioqKWLNmDbm5ufbrzZs357XXXmPq1Kk0bNiw0vsqNYOnpye7du3is88+Izo6msOHDxMeHk6fPn149913eeedd7hz5w7Hjh2jZ8+enD59munTpxMaGsrp06ftRc0VSEllKFlg/MQTT5Cfn09+fj4Gg4HCwkKeffZZoqKiuHHjBqGhoXz88cdl2ijMFxERERH5lkKpGurs2bN07NiRWbNmAdC7d2+aNm1KTEwMq1atIjMzk1u3brFhwwY8PDwIDw+3F48WqQg+Pj7Exsby6aefEh8fz8OHD+33fv/73zNp0iTu3LnD+++/T35+PmPHjuX1119XUXOpdCXhZ69evTh79izz588Hvj00Ij8/n+7du9OnTx969epVpo2IiIiIiHxLNaVqsA8++IDg4GBmzJhBWFgYeXl5jBs3jvPnz3P58mU8PT0xGAycO3cOk8mkrVFSKS5cuECfPn3w8vJi4cKFvPjii/Z7e/bswWw2ExAQQFRUVBX2UuQba9asYezYsUyePJmBAwfi6urKpEmTeOmll+xj9LtbpkVERERE5BsKpWq42NhYxo8fz7vvvktYWBhFRUWkpaWRkpLCk08+SUBAgH0liradSGU5d+4cb775Jm3atGHy5Mm88MIL9nvHjh2jXbt2Go/y2Ni+fTtBQUH20x/d3Nw4efIkjo6OCvNFRERERH6EQqlqrvSEKCoqCldXV956660yz8TExBAUFERkZCRms/mRv6FASqrCmTNnGD16NK1btyY4OBhvb+8y9zUu5XFy/fp1MjIyyM7OplOnTjg4OOiUPRERERGRn6D9BNWY1Wq1B1KZmZnk5uYyfvx4EhIS7M/YbDZGjRrFoEGD7Nv4vksTf6kKLVu2ZPXq1Zw9e5awsDDS0tLK3Ne4lMfJz3/+c9q2bUuXLl1U50xERERE5N+kUKqaKl3DZNGiRcyZMwd/f39mzZrF8OHDWbduHfBN8V2TycQvfvELOnXqxKFDh9DiOXlctGzZkhUrVlC3bl0aN25c1d0R+bcpNBURERER+Wn6GreaKgmkzGYzFouF6OhoPDw8CAkJIT8/nxEjRmCz2Rg0aBAGg4Evv/ySP/zhDwQEBACoDoo8Nnx9fWnbti0Gg0EFo0VERERERKoR1ZSqxg4cOMCYMWNYt24dHTp0sF/Pyspi8eLFhIWF0apVK7KysnBycuL06dM6ZU8eWxqXIiIiIiIi1YtWSlVj6enp1KlTp8zJZQDOzs6EhobSpUsXkpKSeOKJJzCbzZhMJhWPlseWAikREREREZHqRaFUNVSyoiQ3N5fi4uIy10vubd26lZYtWzJ79mz7fZ0UJSIiIiIiIiKVRcVZqqGSFSVdu3bl73//O0uWLLFfNxqNZGdns379evbt21emnQIpEREREREREaksqilVzcXGxjJhwgTGjx9PQEAAtWrVIjIykszMTHsNKRERERERERGRyqZQqpqz2Wzs3LmTSZMmUVxcjIuLC40aNWL37t04OjqqhpSIiIiIiIiIVAmFUjXE7du3uX//PlarFS8vL4xGo2pIiYiIiIiIiEiVUShVQ1mtVoxGlRQTERERERERkaqhUEpERERERERERCqdlsqIiIiIiIiIiEilUyglIiIiIiIiIiKVTqGUiIiIiIiIiIhUOoVSIiIiIiIiIiJS6RRKiYiIiIiIiIhIpVMoJSIiIiIiIiIilU6hlIiIiIiIiIiIVDqFUiIiIiIiIiIiUukUSomIiIiIiIiISKVTKCUiIiIiIiIiIpVOoZSIiIiIiIiIiFS6/wPWCyo492h2nAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1018,10 +1051,10 @@ "execution_count": 13, "metadata": { "execution": { - "iopub.execute_input": "2025-12-17T20:56:49.454708Z", - "iopub.status.busy": "2025-12-17T20:56:49.454585Z", - "iopub.status.idle": "2025-12-17T20:56:49.556972Z", - "shell.execute_reply": "2025-12-17T20:56:49.556169Z" + "iopub.execute_input": "2025-12-17T21:24:50.241069Z", + "iopub.status.busy": "2025-12-17T21:24:50.240945Z", + "iopub.status.idle": "2025-12-17T21:24:50.348421Z", + "shell.execute_reply": "2025-12-17T21:24:50.347364Z" } }, "outputs": [ @@ -1034,15 +1067,15 @@ "[Profiling] Using timing method: cuda_event\n", "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 15\n", "\n", - "First trial: 0.3438 ms\n", - "Mean of all trials: 0.3434 ms\n", - "Mean without first: 0.3434 ms\n", - "First trial overhead: 0.1%\n" + "First trial: 0.3454 ms\n", + "Mean of all trials: 0.3444 ms\n", + "Mean without first: 0.3443 ms\n", + "First trial overhead: 0.3%\n" ] }, { "data": { - "image/png": "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4+NFAOLGjRsrfDbHjx+Xy9LT08VmzZqJAMRLly5V+ZmJ4r22q+zVpk0bjVgA4vjx4zXKyvbbTz/9VKN81KhRopOTk5iZmalRPmzYMLFZs2by9q1du1YEIC5ZsqRC3co+o4yMDBGAOG/evGq3pcyaNWs0Pvf7abtfDh8+XDQzM9MoO3nyZIVjtKye2rZrdcdRZcaPHy86ODjI78PDw8U+ffqI9vb24qpVq0RRFMWbN2+KKpVKXLp0abXbGRkZKapUKjE1NVVjOys7x4ii1N5GRkYa+9AXX3whAhAdHR3F3NxcuXzWrFkV9jdXV9dKzz/lj/my48fZ2VljmVu3bhUBaGxXGS8vL/GZZ56pUE5EDY9dHInokbdixQrs27dP41WTt956S+N9s2bNAAB79+5FQUFBvdSzKmPHjtUq7v5fvMuuGvbt2xcXL16Uu2Fq6/bt2wAACwuLKmPKpuXm5gIAvLy84OPjgy1btsgxpaWl+O677/D888/L9du2bRuaNWuGgQMHIjMzU3516dIF5ubmOHjwoMZ63N3dERAQUGkdwsLCNO5ZKruicfHiRQDA6dOn8ffff+O1117DzZs35XXl5+ejf//++Pnnn+Wuifd/fiUlJbh58yZatWoFKysrJCYmytN2796N7t27a1yhsbOzk7upaWv79u0V9st169bVahllRFHE9u3b8fzzz0MURY3PNSAgADk5OfI2bN++Hba2tpgwYUKF5Tzooxtu3rwJAGjevHmFaXW5X5apTbuW0fY46t27N9LS0pCUlARAuqLVp08f9O7dG3FxcQCkq2qiKGpcQbt/O/Pz85GZmYkePXpAFEX8+uuvFdZT/hxTpn///hrdVrt16wYAePnllzWOx7Lysn39QYSGhmosMygoCE5OTti9e3eF2ObNm1foiUBEusEujkT0yOvatWuthiHX19fHY489plHm7u6O8PBwLFmyBJs3b0bv3r0xePBgvP7663LyVl/Kj0BZlaNHj2LevHmIj4+vkETm5OTUqp5lX9rKErXKVJbEBQcH45133sHVq1fh7OyMQ4cOIT09HcHBwXLM33//jZycHNjb21e63PT0dI331W1/y5YtNd6XJQhl97L9/fffAKRh6auSk5OD5s2b486dO4iMjMS6detw9epVjW5w9ycSqamp8pfj+93f9VIbffr0qXGQEG1lZGQgOzsbX375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VBQUFMDOzg6dO3fGgAED4OLiUl/1JCIiIiIiavS0uoJ2584dfPDBB3BxccGzzz6L//3vf8jOzoaenh4uXLiAefPmwd3dHc8++ywSEhLqu85ERERERESNklZX0Ly8vODn54evvvoKAwcOhIGBQYWY1NRUfPPNNxg2bBhmz56N0aNH13lliYiIiIiIGjOtErSffvoJ7dq1qzbG1dUVs2bNwrRp03D58uU6qRwREREREVFTolUXx5qSs/sZGBjA09PzgStERERERETUVNV6FMc9e/bgyJEj8vsVK1bAx8cHr732Gm7dulWnlSMiIiIiImpKap2gRUREIDc3FwDw+++/Y+rUqXj22Wdx6dIlhIeH13kFiYiIiIiImopaDbMPAJcuXUL79u0BANu3b8dzzz2Hjz76CImJiXj22WfrvIJERERERERNRa2voBkaGqKgoAAAsH//fjz99NMAAGtra/nKGhEREREREdVera+g9erVC+Hh4ejZsydOnDiBLVu2AAD++usvPPbYY3VeQSIiIiIioqai1lfQli9fDn19fXz33XdYtWoVnJ2dAQD/+9//MGjQoDqvIBERERE1TikpwH/+A6xZI/2bkqLrGhHpXq2voLVs2RIxMTEVyj/77LM6qRARERERNW7XrwOLFgFxcUBuLqBWA4IAWFoCffoAU6cCTk66riWRbtQ6QSuTnp6O9PR0CIKgUd6xY8eHrhQRERERNU7XrwPjxgFnzwJ2doCn570ELTsb2LkTSE4GVq5kkkZNU60TtFOnTmH48OE4d+4cRFEEAKhUKoiiCJVKhdLS0jqvJBERERE1DosWScmZhwdgYHCvXK0GrK0BCwtp+pIlwKef6q6eRLpS6wRt5MiR8PLywtdffw0HBweoVKr6qBcRERERNTIpKVK3Rjs7zeTsfgYG0vTDh6V4N7cGrCCRAtQ6Qbt48SK2b9+OVq1a1Ud9iIiIiKiRio+X7jnz9Kw+zspK6uaYkMAEjZqeWo/i2L9/f/z222/1URciIiIiasTy86WujOoavoGWxeTlNUy9iJSk1lfQ1qxZg+HDh+OPP/7A448/DoNy16cHDx5cZ5UjIiIiosbDzEwaDEQQqk/SymLMzRuubkRKUesELT4+HkePHsX//ve/CtM4SAgRERERVcXPTxpKPztbGhCkKtnZUpyfX0PVjEg5at3FccKECXj99ddx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vb29Im6SbOrYHsrDNlEetomysD2Uh22iPGwTZVFae2ibG+i+pkRERERERASACRoREREREZFiMEEjIiIiIiJSCCZoRERERERECsEEjYiIiIiISCGYoBERERERESkEEzQiIiIiIiKFYIJGRERERESkEEzQiIiIiIiIFIIJGhERERERkUIwQSMiIiIiIlIIJmhEREREREQKwQSNiIiIiIhIIZigERERERERKQQTNCIiIiIiIoVggkZERERERKQQTNCIiIiIiIgUggkaERERERGRQujrugJERESNVUoKEB8P5OcDZmaAnx/g5qbrWhERkZIxQSMiIqpj168DixYBcXFAbi6gVgOCAFhaAn36AFOnAk5Ouq4lEREpERM0IiKiOnT9OjBuHHD2LGBn9//t3XtQVAUfxvFnuSPX0BQ2QanBvJuKOGhvvpOoqZmOU04NEmb94YghmqaToo7lBSvzmoaVU6alf4SVo+MgKV4mkCQo826kmBdeSwUxktk97x+8UiSibwLnyH4/MztyLss+Mz/X09M5e1Z66KE/C9rly9KXX0onT0rvvktJAwDcjM+gAQBQj956q6qcPfigFBJSVc6kqj9DQqrW//ijtHixuTkBANZEQQMAoJ78/HPVZY333y95eta+j6dn1fbs7Kr9AQD4KwoaAAD15Jtvqj5zFhxc937BwVX75eQ0RioAwL2EggYAQD0pL6+6lNHtNkfXG/tcvdo4uQAA9w4KGgAA9cTPr+pmIE5n3fvd2Mffv3FyAQDuHRQ0AADqSWxs1a30L1+ue7/Ll6v2i41tjFQAgHsJBQ0AgHrStq30r39J//mPVFlZ+z6VldLFi1K/flKbNo0aDwBwD6CgAQBQj6ZMkTp1kn76Sfrttz8vd3Q6q5aLiqSOHaXJk83NCQCwJgoaAAD1KCys6kuohw+vOlt28uSfj8pK6amn+JJqAMCteZgdAACApiYsTHrzzarvOcvJqbpbo79/1WfOuKwRAFAXChoAAA2kbduqBwAAd4pLHAEAAADAIihoAAAAAGARFDQAAAAAsAgKGgAAAABYBAUNAAAAACyCggYAAAAAFkFBAwAAAACLoKABAAAAgEVQ0AAAAADAIjzMDtCUGYYhSSotLTU5ieR0OlVWViYfHx+5udHLzcY8rIeZWA8zsRbmYT3MxHqYibVYbR43OsGNjnArFLQGVFZWJkkK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", + "image/png": "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I/tRUlKCX3/9Fe7u7hXuOxERERERkb4MOpwyMjISAwcORGBgINq1a4eYmBjk5eXJs1WGh4fDw8MD0dHRAKRrygIDA+Hv74/CwkJs374dsbGxWLp0KQDA0dERjo6OGvswMTGBm5sbGjVqBAAaZ+kAwMrKCgDg7+8vX8u2f/9+9OzZE6NHj8Zrr72GtLQ0AFLh6eDgAACYMWMGnn32WdSvXx+3b9/GnDlzkJKSgnfffbc63ioiIiIiIiIABi7iwsLCkJmZiSlTpiAtLQ0BAQHYuXOnPNnJtWvXNE4r5uXlYfjw4bh+/TosLCzQuHFjfPfddwgLC6vSfq1evRr5+fmIjo6WC0gA6NKlCw4cOAAAuHXrFoYMGYK0tDTY29ujbdu2OHLkCJo2bVqlfSEiIiIiInqQShRF0dCdeFrl5OTA1tYW2dnZipjYJCMjAy4uLgYfD0wS5kR5mBNlYT6UhzlRHuZEWZgP5VFSTvSpDfjpISIiIiIiqkVYxBEREREREdUiLOKIiIiIiIhqERZxREREREREtQiLOCIiIiIiolqERRwREREREVEtwiKOiIiIiIioFmERR0REREREVIuwiCMiIiIiIqpFWMQRERERERHVIiziiIiIiIiIahEWcURERERERLUIizgiIiIiIqJahEUcERERERFRLcIijoiIiIiIqBZhEUdERERERFSLsIgjIiIiIiKqRVjEERERERER1SIs4oiIiIiIiGoRFnFERERERES1CIs4IiIiIiKiWoRFHBERERERUS3CIo6IiIiIiKgWYRFHRERERERUi7CIIyIiIiIiqkVYxBEREREREdUiLOKIiIiIiIhqERZxREREREREtQiLOCIiIiIiolqERRwREREREVEtwiKOiIiIiIioFmERR0REREREVIuwiCMiIiIiIqpFWMQRERERERHVIiziiIiIiIiIahEWcURERERERLWIwYu4xYsXw8fHB+bm5mjfvj2OHz+uM3bz5s0IDAyEnZ0dLC0tERAQgNjYWJ3xw4YNg0qlQkxMjNblhYWFCAgIgEqlQlJSksays2fPolOnTjA3N4enpyc+//zzMutv3LgRjRs3hrm5OVq0aIHt27dX6DUTERERERFVlkGLuPXr1yMyMhJTp05FYmIiWrVqhZCQEGRkZGiNd3BwwOTJk5GQkICzZ88iIiICERER2LVrV5nYH3/8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", "text/plain": [ "
" ] @@ -1133,10 +1166,10 @@ "base_uri": "https://localhost:8080/" }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:49.559529Z", - "iopub.status.busy": "2025-12-17T20:56:49.559407Z", - "iopub.status.idle": "2025-12-17T20:56:49.893598Z", - "shell.execute_reply": "2025-12-17T20:56:49.892579Z" + "iopub.execute_input": "2025-12-17T21:24:50.351000Z", + "iopub.status.busy": "2025-12-17T21:24:50.350876Z", + "iopub.status.idle": "2025-12-17T21:24:52.778917Z", + "shell.execute_reply": "2025-12-17T21:24:52.777685Z" }, "id": "UuwtML39zX2j", "outputId": "95ebbb26-e415-491a-da30-6a78ce387906" @@ -1153,7 +1186,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Standard benchmark on tricky kernel: 0.0577 ms\n" + "Standard benchmark on tricky kernel: 0.0978 ms\n" ] } ], @@ -1208,7 +1241,7 @@ "timing_fn = get_timing_function(\"host_time\")\n", "```\n", "\n", - "The trade-off: `host_time` includes some CPU overhead in the measurement, but **correctness beats precision**. However, note that host_time should be pretty similar to sync_time. Therefore, if both times are within a some percent of each other, you can be pretty sure that the kernel is running correctly and score using sync_time." + "The trade-off: `host_time` includes some CPU overhead in the measurement. However, note that host_time should be pretty similar to sync_time. Therefore, if both times are within a some percent of each other, you can be pretty sure that the kernel is running correctly and score using sync_time." ] }, { @@ -1219,10 +1252,10 @@ "base_uri": "https://localhost:8080/" }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:49.895966Z", - "iopub.status.busy": "2025-12-17T20:56:49.895842Z", - "iopub.status.idle": "2025-12-17T20:56:49.905191Z", - "shell.execute_reply": "2025-12-17T20:56:49.904402Z" + "iopub.execute_input": "2025-12-17T21:24:52.782281Z", + "iopub.status.busy": "2025-12-17T21:24:52.782061Z", + "iopub.status.idle": "2025-12-17T21:24:52.830292Z", + "shell.execute_reply": "2025-12-17T21:24:52.829161Z" }, "id": "KbAFqiyizX2j", "outputId": "6bc91db4-935c-4af9-bdc9-be3c50e890c4" @@ -1232,8 +1265,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Robust benchmark on tricky kernel: 2.7711 ms\n", - "Robust benchmark on normal kernel: 2.7269 ms\n" + "Robust benchmark on tricky kernel: 21.5401 ms\n", + "Robust benchmark on normal kernel: 21.4700 ms\n" ] } ], @@ -1257,13 +1290,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "execution": { - "iopub.execute_input": "2025-12-17T20:56:49.907214Z", - "iopub.status.busy": "2025-12-17T20:56:49.907092Z", - "iopub.status.idle": "2025-12-17T20:56:50.122347Z", - "shell.execute_reply": "2025-12-17T20:56:50.121575Z" + "iopub.execute_input": "2025-12-17T21:24:52.832854Z", + "iopub.status.busy": "2025-12-17T21:24:52.832734Z", + "iopub.status.idle": "2025-12-17T21:24:53.846639Z", + "shell.execute_reply": "2025-12-17T21:24:53.845578Z" } }, "outputs": [ @@ -1274,19 +1307,37 @@ "Side-Stream Detection Experiment:\n", "============================================================\n", "[Profiling] Using timing method: cuda_event\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "[Profiling] Using timing method: host_time\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", - "Tricky kernel with cuda_event: 0.1000 ms (FOOLED!)\n", - "Tricky kernel with host_time: 2.8900 ms (CORRECT)\n", - "Normal kernel with host_time: 2.8100 ms (reference)\n" + "Tricky kernel with cuda_event: 0.3070 ms (FOOLED!)\n", + "Tricky kernel with host_time: 21.8000 ms (CORRECT)\n", + "Normal kernel with host_time: 21.6000 ms (reference)\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcRVJREFUeJzt3Xd4VGX+/vF70ia9kUYJhE5CDUUBhViACMqCjaZLE8sqsogV3a+AygJW1orgCqjLiopgoymCIiBVQHoniAkkQBLSQ+b5/cGPWYYESEKGSeD9uq65LuY5zznnc06YJ3PnNIsxxggAAAAAAFQ4N1cXAAAAAADAlYrQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAXERMTo8GDB1+034wZM2SxWHTgwAGn14Qrxw033KAbbrjB1WVcdhaLRWPHjnV1GZA0duxYWSwWpaWlubqUSzZ48GDFxMS4ugwAcEDoBnDV+v3333XXXXepTp068vb2Vs2aNdW1a1e99dZbri7NwTfffKOEhARFRETI19dX9erVU58+fbRw4UJ7nz///FNjx47Vxo0bXVeokyxbtkwWi8X+slqtioyM1A033KB//vOfSk1NLfeyL9d+27Ztm8aOHcsfZCBJysnJ0dixY7Vs2TJXl+Iyl7IPruTxDsCVycPVBQCAK6xcuVI33nijateurfvvv19RUVE6dOiQfv31V/3rX//So48+au+7c+dOubm55m+Ur776qp588kklJCRo9OjR8vX11Z49e/TDDz/o008/1S233CLp9JfQcePGKSYmRq1atXJJrc42YsQItWvXTkVFRUpNTdXKlSs1ZswYvf766/rss8900003lXmZl2u/bdu2TePGjdMNN9xQ7Cjc4sWLnbZeVE45OTkaN26cJF2VZzlIl7YPLvS5nTZtmmw2WwVVCQAVg9AN4Ko0fvx4BQUFae3atQoODnaYdvToUYf3Vqv1Mlb2P6dOndKLL76orl27lhjMzq2zLHJycuTr63sp5V12nTp10l133eXQtmnTJnXr1k133nmntm3bpurVq7uouvLz8vJydQnAFcPT09PVJQBAMZxeDuCqtHfvXjVt2rRY4JakiIgIh/clXdO9detW3XTTTfLx8VGtWrX0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B2eUZ7wrL2f8/AFcfTjSDeCq9OijjyonJ0e33367mjRpooKCAq1cudJ+pOvc073P9tRTT+njjz/WLbfcor///e/y8/PT1KlT7UcozwgMDNR7772nv/71r2rdurX69eun8PBwJSUl6bvvvtN1111X7NnSZ8vJyVHHjh3Vvn173XLLLYqOjlZ6errmzZun5cuXq3fv3oqPj5d0OgQFBwdrypQpCggIkJ+fn6699lrVrVv3vMv/61//qs8++0wPPfSQli5dquuuu05FRUXasWOHPvvsMy1atEht27ZVt27d5OXlpZ49e+rBBx9UVlaWpk2bpoiIiFI/97kiLF++XHl5eSoqKtKxY8e0YsUKff311woKCtLcuXMdTv2cOHGili5dqmuvvVb333+/4uLidPz4cW3YsEE//PCD/bTwC+23Dz74QN27d1fTpk01ZMgQ1axZU4cPH9bSpUsVGBiob775RpL0z3/+U4sXL1ZCQoIeeOABxcbGKjk5WZ9//rl++eUXBQcHq1WrVnJ3d9ekSZOUkZEhq9Vqf+75uR544AG9//77Gjx4sNavX6+YmBh98cUXWrFihSZPnmy/dr0sDh8+rNjYWA0aNOiiN1N78803df3116t169Z64IEHVLduXR04cEDfffedNm7cKEnq16+fnn76ad1+++0aMWKEcnJy9N5776lRo0YONz1r1aqV+vfvr3fffVcZGRnq2LGjlixZoj179hRb72233aaPP/5YQUFBiouL06pVq/TDDz+oWrVqZdrW+vXr66WXXtLo0aN14MAB9e7dWwEBAdq/f7/mzp2rBx54QE888YS9f+vWrdWgQQM999xzys/Pdzi1XLr0z3FJfHx8FBcXp9mzZ6tRo0YKDQ1Vs2bNLnotfd++ffX888/L29tb9913n8OZECdPnlStWrV01113qWXLlvL399cPP/ygtWvXOpw9cClatmypQYMGaerUqUpPT1dCQoLWrFmjmTNnqnfv3rrxxhslSTNnztS7776r22+/XfXr19fJkyc1bdo0BQYG2oN7efeBVL7xrryc8fMHcBW6zHdLB4BKYcGCBWbo0KGmSZMmxt/f33h5eZkGDRqYRx991Bw5csSh77mPDDPGmM2bN5uEhATj7e1tatasaV588UXz73//u9hzuo05/cirxMREExQUZLy9vU39+vXN4MGDzbp16y5YY2Fh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mCrtWOrSTcnKytLGjRu1ceNGSacfCbZx40YlJSVJOn2UeuDAgfb+Dz30kPbt26ennnpKO3bs0LvvvqvPPvtMjz32mCvKBwAAAADgglwautetW6f4+HjFx8dLkkaNGqX4+Hg9//zzkqTk5GR7AJekunXr6rvvvtP333+vli1b6rXXXtMHH3zA48IAAAAAAJWSS08vv+GGG2QucL7PjBkzSpznt99+c2JVAAAAAABUjCpwpjwAAAAAAFUToRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnITQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJKkXofueddxQTEyNvb29de+21WrNmzXn7zpgxQxaLxeHl7e19GasFAAAAAKB0XB66Z8+erVGjRmnMmDHasGGDWrZsqcTERB09evS88wQGBio5Odn+Onjw4GWsGAAAAACA0nF56H799dd1//33a8iQIYqLi9OUKVPk6+urDz/88LzzWCwWRUVF2V+RkZGXsWIAAAAAAErHpaG7oKBA69evV5cuXextbm5u6tKli1atWnXe+bKyslSnTh1FR0erV69e2rp16+UoFwAAAACAMvFw5crT0tJUVFRU7Eh1ZGSkduzYUeI8jRs31ocffqgWLVoo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Hnvbgw8+aHx9fR3+4JeYmGgefPDB89a5du1aI8k+T2lD9+eff24GDBhgYmNjzR9//GGfdt9995kHHnjAof/y5cuNm5ubyc3NLdP2vPPOOyYyMtL+vn79+mbWrFkO87344oumQ4cOxhhC99WI08txxdq+fbvy8/N18803l3v+a6+91qGtQ4cODu+zsrL0xBNPKDY2VsHBwfL399f27duVlJR00eX//vvvKioqUqNGjeTv729//fTTT9q7d68kqUePHvL09NTXX38t6fRpXYGBgerSpYuk06eP7tmzRwEBAfb5Q0NDlZeXZ1+GJDVt2lTu7u7299WrV7/kU7QAOF+LFi0c3p/57G7fvl3R0dGKjo62T4uLi1NwcLC2b98uSRo1apSGDRumLl26aOLEiQ5jgjPFxMQoICDA/j4yMlJxcXFyc3NzaDszBm3atElZWVmqVq2aw1i4f//+y1YzgNMmTZqkmTNn2seRs23fvl3XXXedQ9t1112n3bt3O5wW3rZt22Lz+vr6qn79+vb3kZGRiomJkb+/v0Pb2d9N1q9fr549e6p27doKCAhQQkKCJJXqO9bZHnvsMa1evVo///yzatasaW/ftGmTZsyY4TDuJCYmymazaf/+/WXanrO/V2VnZ2vv3r267777HJb90ksvMaZdxTxcXQDgLD4+PueddubLnzHG3nbmGueyeOKJJ/T999/r1VdfVYMGDeTj46O77rqrVDfayMrKkru7u9avX+8QiCXZfwl5eXnprrvu0qxZs9SvXz/NmjVLffv2lYeHh30Zbdq00X/+859iyw8PD7f/29PT02GaxWKRzWYr8/YCuLwu5bM7duxYDRgwQN99950WLFigMWPG6NNPP9Xtt9/ujFLtSqr5QtuRlZWl6tWr2+9ncTYeRwZcXp07d1ZiYqJGjx6twYMHl2sZfn5+xdrKOi5kZ2crMTFRiYmJ+s9//qPw8HAlJSUpMTGxzDcz69q1q/773/9q0aJFuueee+ztWVlZevDBBzVixIhi89SuXbvM23PmO2VWVpYkadq0acUO3pz7fQ9XD0I3rlgNGzaUj4+PlixZomHDhjlMOxNIk5OTFRISIknFnpUYGxur1atXO7T9+uuvDu9XrFihwYMH27/EZmVlOdzE7ELi4+NVVFSko0ePqlOnTuftd88996hr167aunWrfvzxR7300kv2aa1bt9bs2bMVERGhwMDAUq23JF5eXg5/pQZQucXGxurQoUM6dOiQ/Wj3tm3blJ6erri4OHu/Ro0aqVGjRnrsscfUv39/TZ8+Xbfffnu5PvPOGidat26tlJQUeXh4KCYmpsKXD6BsJk6cqFatWqlx48YO7bGxsVqxYoVD24oVK9SoUaMKD5M7duzQsWPHNHHiRPsYt27dunIt6y9/+Yt69uypAQMGyN3dXf369ZN0euzZtm2bGjRoUGF1S6eP2NeoUUP79u1zCPm4unF6Oa5Y3t7eevrpp/XUU0/po48+0t69e/Xrr7/q3//+txo0aKDo6GiNHTtWu3fv1nfffVfsDpwjRozQwoUL9eqrr2r37t16++23tXDhQoc+DRs21JdffqmNGzdq06ZNGjBgQKmPQjVq1Ej33HOPBg4cqC+//FL79+/XmjVrNGHCBH333Xf2fp07d1ZUVJTuuece1a1b1+Gvpvfcc4/CwsLUq1cvLV++XPv379eyZcs0YsQI/fHHH6XeVzExMfr55591+PBhpaWllXo+AK7RpUsXNW/eXPfcc482bNigNWvWaODAgUpISFDbtm2Vm5ur4cOHa9myZTp48KBWrFihtWvXKjY2VtLpz3xWVpaWLFmitLQ0+9MQLsRZ40SXLl3UoUMH9e7dW4sXL9aBAwe0cuVKPffcc+X+kg2g/M6MLW+++aZD++OPP64lS5boxRdf1K5duzRz5ky9/fbbeuKJJyq8htq1a8vLy0tvvfWW9u3bp6+//lovvvhiuZd3++236+OPP9aQIUP0xRdfSJKefvpprVy5UsOHD9fGjRu1e/duffXVVxo+fPgl1z9u3DhNmDBBb775pnbt2qXff/9d06dP1+uvv37Jy0bVROjGFe3//u//9Pjjj+v5559XbGys+vbtq6NHj8rT01P//e9/tWPHDrVo0UKTJk1yOIIsSe3bt9e0adP0r3/9Sy1bttTixYv1j3/8w6HP66+/rpCQEHXs2FE9e/ZUYmKiWrduXer6pk+froEDB+rxxx9X48aN1bt3b61du9bhtCaLxaL+/ftr06ZNxf5i6uvrq59//lm1a9fWHXfcodjYWN13333Ky8sr05HvF154QQcOHFD9+vUdTksHUDlZLBZ99dVXCgkJUefOndWlSxfVq1dPs2fPlnT6FMZjx45p4MCBatSokfr06aPu3btr3LhxkqSOHTvqoYceUt++fRUeHq6XX375out01jhhsVg0f/58de7cWUOGDFGjRo3Ur18/HTx4UJGRkRW2HgCl98ILLxQ7iNC6dWt99tln+vTTT9WsWTM9//zzeuGFF8p9GvqFhIeHa8aMGfr8888VFxeniRMn6tVXX72kZd51112aOXOm/vrXv+rLL79UixYt9NNPP2nXrl3q1KmT4uPj9fzzz6tGjRqXXP+wYcP0wQcfaPr06WrevLkSEhI0Y8YM1a1b95KXjarJYs6+qBUAAAAAAFQYjnQDAAAAAOAkhG7ASZYvX+7wqIhzXwBQWTBeAQDgPJxeDjhJbm6uDh8+fN7pFX23TAAoL8YrAACch9ANAAAAAICTcHo5AAAAgFI5duyYIiIidODAgUtazooVK9S8eXN5enqqd+/eFVKbK7Vv315z5sxxdRmopAjdQAnO/YXijF8My5Ytk8ViUXp6+iUtJyYmRpMnT5YkFRQUKCYmhmfbAleoivqyW1lMmTJFPXv2dHUZAMpg/Pjx6tWrl2JiYi5pOaNGjVKrVq20f/9+zZgxo0Jqc6V//OMfeuaZZ4o9ag2QCN1Aic79hVJVfjF4eXnpiSee0NNPP+3qUgA4QUV92XUFi8WiefPmObQNHTpUGzZs0PLly11TFIAyycnJ0b///W/dd999JU43xujUqVOlWtbevXt10003qVatWgoODi5XPQUFBeWazxm6d++ukydPasGCBa4uBZUQoRs4R0m/UCriF8Plcs899+iXX37R1q1bXV0KgAp0sS+7FaGwsLBYmzO/1Hp5eWnAgAF68803nbYOABVn/vz5slqtat++vaT/nbW3YMECtWnTRlarVb/88otsNpsmTJigunXrysfHRy1bttQXX3whSTpw4IAsFouOHTumoUOHymKx2A9obNmyRd27d5e/v78iIyP117/+VWlpafb133DDDRo+fLhGjhypsLAwJSYmlnq+ESNG6KmnnlJoaKiioqI0duxYh21LT0/Xgw8+qMjISHl7e6tZs2b69ttv7dN/+eUXderUST4+PoqOjtaIESOUnZ1tn+7u7q4ePXro008/rdB9jisDoRs4x9m/UC70i+Gnn37SNddcI6vVqurVq+uZZ55x+Otufn6+RowYoYiICHl7e+v666/X2rVrL7juiw3oR48eVc+ePeXj46O6devqP//5T7FlhISE6Lrr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fu7Ly8tLTZo00alTp7R+/Xr7PDt37izxOd8M+sCV59yxqUWLFlq+fHmJdxwPDAxUjRo1HMYg6fQ4db4x6EJat26t3bt3KyIiotj4FBQUpICAAMXExGjJkiXnXYanp6eKioqKte/du1d5eXmMWUAVkJiYqK1bt17w4ERAQICeeOIJPfbYY5o5c6b27t2rDRs26K233tLMmTPPO98jjzyi48ePq3///lq7dq327t2rRYsWaciQISWOHZc639kSEhLUuXNn3Xnnnfr++++1f/9+LViwwH7zyaefflorV67U8OHDtXHjRu3evVtfffVVsRupLV++XN26dSvVOnF1IXQD5yjNL5SHH35Yhw4d0qOPPqodO3boq6++0pgxYzRq1Ci5ubnJz89Pf/vb3/Tkk09q4cKF2rZtm+6//37l5OSc93E/FxvQGzdurFtuuUUPPvigVq9erfXr12vYsGElHu1i0AeuPOeOTcOHD1dmZqb69eundevWaffu3fr444+1c+dOSdKTTz6pSZMmafbs2dq5c6eeeeYZbdy40eGa69K65557FBYWpl69emn58uXav3+/li1bphEjRuiPP/6QJI0dO1avvfaa3nzzTe3evdv+JfuMM6E8JSXFYXxdvny56tWrp/r161/K7gFwGTRv3lytW7fWZ599dsF+L774ov7v//5PEyZMUGxsrG655RZ99913qlu37nnnOfOHwqKiInXr1k3NmzfXyJEjFRwcfMGzaco737nmzJmjdu3aqX///oqLi9NTTz1lD+0tWrTQTz/9pF27dqlTp06Kj4/X888/73CfjcOHD2vlypUaMmRIqdeJq4iLb+QGVErXXHONmTJliv39uXfYNMaYZcuWmXbt2hkvLy8TFRVlnn76aVNYWGifnpubax599FETFhZmrFarue6668yaNWvs08+9e7kxxqxZs8Z07drV+Pv7Gz8/P9OiRQszfvx4+/Tk5GRz6623GqvVamrXrm0++ugjU6dOHYe7l69cudIEBwebnJycitshACqFc8emTZs2mW7duhlfX18TEBBgOnXqZPbu3WuMMaaoqMiMHTvW1KxZ03h6epqWLVuaBQsW2Oc9c/fy3377zWEdgwYNMr169Sq27uTkZDNw4ED7mFavXj1z//33m4yMDHufKVOmmMaNGxtPT09TvXp18+ijj9qnff3116ZBgwbGw8PD1KlTx97erVs3M2HChEvcMwAul2+//dbExsZyh+5zPPXUU+b+++93dRmopCzGnHV+LABJp2/+8eSTT2rLli2XfK3i5da3b1+1bNlSzz77rKtLAVDBqvLYVJKtW7fqpptu0q5duxQUFOTqcgCU0uTJk3XnnXcqOjra1aVUGq+99pruvfdeRUZGuroUVEKEbuA8quIvlIKCAr388st6/PHHuXMmcIWqimPT+fzwww8qKipSYmKiq0sBAMBpCN0AAAAAADhJ1T83DQAAAACASorQDQAAAACAkxC6AQAAAABwEkI3AAAAAABOQugGAAAAAMBJCN0AAAAAADgJoRsAAAAAACchdAMAAAAA4CSEbgAAAAAAnOT/Afb3845bTMjvAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAajRJREFUeJzt3Xd8VFX+//H3pE16I40SEjoJ0kFBBSxAgJWlKc1Cs+wqsIiKi7pCVBbBAmtDRQXUVVERO0X9AiJNQAHpEOkEUiAJ6ZA5vz/4ZZYhARLIMAm8no8Hjwdz7rl3PvdO5mTeOXfutRhjjAAAAAAAQIVzc3UBAAAAAABcqQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJMQugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAHAOsbGxGjp06AX7zZ49WxaLRXv37nV6Tbhy3HTTTbrppptcXcZlZ7FYNHHiRFeXAUkTJ06UxWJRWlqaq0u5ZEOHDlVsbKyrywCAUhG6AVx1/vjjD91+++2KiYmRt7e3atasqS5duujVV191dWkOvvnmG3Xq1EkRERHy9fVV3bp11b9/fy1cuNDe5/Dhw5o4caI2bNjgukKdZOnSpbJYLPZ/VqtVkZGRuummm/Tvf/9bqampF73ty3Xctm7dqokTJ/IHGUiScnNzNXHiRC1dutTVpbjMpRyDK3m8A3Bl83B1AQBwOa1cuVI333yzateurfvuu09RUVE6cOCAVq9erf/85z8aNWqUve+OHTvk5uaav02++OKLeuyxx9SpUyeNHz9evr6+2r17t3788Ud98skn6tatm6TTH0ITExMVGxurFi1auKRWZxs9erTatm2roqIipaamauXKlZowYYJefvllffrpp7rlllvKvc3Lddy2bt2qxMRE3XTTTSVm4RYvXuy050XllJubq8TEREm6Ks9ykC7tGJzvfTtz5kzZbLYKqhIAKhahG8BVZdKkSQoKCtLatWsVHBzssCwlJcXhsdVqvYyV/c+pU6f07LPPqkuXLqUGs7PrLI/c3Fz5+vpeSnmXXYcOHXT77bc7tG3cuFFdu3ZVv379tHXrVlWvXt1F1V08Ly8vV5cAXDE8PT1dXQIAnBOnlwO4qiQlJalJkyYlArckRUREODwu7TvdW7Zs0S233CIfHx/VqlVLzz333DlnVxYsWKAOHTrIz89PAQEB+stf/qItW7ZcsMa0tDRlZWXphhtuKHV5cZ1Lly5V27ZtJUnDhg2zn4Y9e/ZsSadnka655hqtX79eHTt2lK+vr5544glJUkFBgSZMmKD69evLarUqOjpa48aNU0FBgcNzzZo1S7fccosiIiJktVoVHx+vGTNmlKgpNjZWt912m5YuXao2bdrIx8dHTZs2tZ9C+sUXX6hp06by9vZW69at9fvvv1/wOJxP8+bNNX36dGVkZOi1115zWHbo0CENHz5ckZGRslqtatKkid577z378gsdN0las2aNunXrpqCgIPn6+qpTp05asWJFiToOHTqkESNGqEaNGrJarapTp47+/ve/q7CwULNnz9Ydd9whSbr55pvtz1N8TEr7TndKSopGjBihyMhIeXt7q3nz5pozZ45Dn71798pisejFF1/U22+/rXr16slqtapt27Zau3atQ9+TJ09q+/btSk5OLtNx3b59u/r376/w8HD5+PioUaNGevLJJ+3Lz/W92eLvBp+poKBADz/8sMLDwxUQEKC//vWvOnjwYIl19+3bpwcffFCNGjWSj4+PqlWrpjvuuOOiT8n/8MMP1bp1a/n4+Cg0NFQDBw7UgQMH7MtHjhwpf39/5ebmllh30KBBioqKUlFRkb2tLO/joUOHyt/fX4cOHVLv3r3l7++v8PBwPfroo/Zt7d27V+Hh4ZKkxMRE+8/Dub7fvm7dOlkslhKvvyQtWrRIFotF3377rSTpxIkTGjNmjGJjY2W1WhUREaEuXbrot99+K9Mxy8jI0NChQxUcHKygoCANGzasxPEp/mNg8c9bbGysnnjiiRJjxrp165SQkKCwsDD5+PioTp06Gj58+EUdgzNd6H179s/mme+T119/XXXr1pWvr6+6du2qAwcOyBijZ599VrVq1ZKPj4969eqlY8eOlXjeix3HAcCBAYCrSNeuXU1AQID5448/Ltg3JibGDBkyxP44OTnZhIeHm5CQEDNx4kTzwgsvmAYNGphmzZoZSWbPnj32vu+//76xWCymW7du5tVXXzVTpkwxsbGxJjg42KFfaYqKioyPj49p3bq1SU9PP2e/I0eOmGeeecZIMvfff7/54IMPzAcffGCSkpKMMcZ06tTJREVFmfDwcDNq1Cjz1ltvmS+//NIUFRWZrl27Gl9fXzNmzBjz1ltvmZEjRxoPDw/Tq1cvh+do27atGTp0qJk2bZp59dVXTdeuXY0k89prr5U4Vo0aNTLVq1c3EydONNOmTTM1a9Y0/v7+5sMPPzS1a9c2zz//vHn++edNUFCQqV+/vikqKjrvcViyZImRZD777LNSlxcWFhofHx/Tpk0bh2NSq1YtEx0dbZ555hkzY8YM89e//tVIMtOmTSvTcfvpp5+Ml5eXad++vXnppZfMtGnTTLNmzYyXl5dZs2aN/bkOHTpkatSoYT+Ob775pvnXv/5l4uLizPHjx01SUpIZPXq0kWSeeOIJ+/McOXLE/vp06tTJvr3c3FwTFxdnPD09zcMPP2xeeeUV06FDByPJTJ8+3d5vz549RpJp2bKlqV+/vpkyZYqZOnWqCQsLM7Vq1TKFhYUl+p75c3wuGzduNIGBgaZatWpm/Pjx5q233jLjxo0zTZs2tfcZMmSIiYmJKbHuhAkTzNkfKe666y4jyQwePNi89tprpm/fvvb3yoQJE+z9PvvsM9O8eXPz9NNPm7fffts88cQTJiQkxMTExJicnJwL1n2m5557zlgsFjNgwADzxhtvmMTERBMWFmZiY2PN8ePHjTHG/Pzzz0aS+fTTTx3WzcnJMX5+fuahhx6yt5X1fTxkyBDj7e1tmjRpYoYPH25mzJhh+vXrZySZN954wxhjTHZ2tpkxY4aRZPr06WP/edi4ceM596du3bqmR48eJdqHDRtmQkJC7K/14MGDjZeXlxk7dqx55513zJQpU0zPnj3Nhx9+eN7jVfy6tWzZ0vTt29e88cYb5t577zWSzLhx4xz6DhkyxEgyt99+u3n99dfNPffcYySZ3r172/scPXrUhISEmIYNG5oXXnjBzJw50zz55JMmLi7uoo9BsQu9b8/+2Sz+2W/RooWJj483L7/8snnqqaeMl5eXadeunXniiSfM9ddfb1555RUzevRoY7FYzLBhwxye81LGcQA4E6EbwFVl8eLFxt3d3bi7u5v27dubcePGmUWLFjkElWJnh+4xY8YYSQ7BKyUlxQQFBTmE7hMnTpjg4GBz3333OWzvyJEjJigoqER7aZ5++mkjyfj5+Znu3bubSZMmmfXr15fot3btWiPJzJo1q8SyTp06GUnmzTffdGj/4IMPjJubm1m+fLlD+5tvvmkkmRUrVtjbcnNzS2w3ISHB1K1b16EtJibGSDIrV660ty1atMhIMj4+Pmbfvn329rfeestIMkuWLDnvMbhQ6DbGmObNm5uQkBD74xEjRpjq1aubtLQ0h34DBw40QUFB9v0513Gz2WymQYMGJiEhwdhsNnt7bm6uqVOnjunSpYu97Z577jFubm5m7dq1JeoqXvezzz47576eHbqnT59uJDkEpcLCQtO+fXvj7+9vsrKyjDH/CxPVqlUzx44ds/f96quvjCTzzTff2NvKE7o7duxoAgICHF6rM/fFmLKH7g0bNhhJ5sEHH3ToN3jw4BKhu7SfsVWrVhlJ5v33379g3cX27t1r3N3dzaRJkxza//jjD+Ph4WFvt9lspmbNmqZfv34O/T799FMjyfz888/GmPK9j4sD6TPPPOPQt2XLlqZ169b2x6mpqSX2/3zGjx9vPD09HV7ngoICExwcbIYPH25vCwoKcvhjQVkVv25nbssYY/r06WOqVatmf1z8et57770O/R599FEjyfzf//2fMcaY+fPnG0mlvieKlfcYnOl84925Qnd4eLjJyMiwt48fP95IMs2bNzcnT560tw8aNMh4eXmZ/Px8Y0zFjOMAUIzTywFcVbp06aJVq1bpr3/9qzZu3KipU6cqISFBNWvW1Ndff33edb///nu1a9dO1157rb0tPDxcd955p0O/H374QRkZGRo0aJDS0tLs/9zd3XXddddpyZIlF6wzMTFRH330kVq2bKlFixbpySefVOvWrdWqVStt27atzPtrtVo1bNgwh7bPPvtMcXFxaty4sUN9xRckO7M+Hx8f+/8zMzOVlpamTp066c8//1RmZqbDduPj49W+fXv74+uuu06SdMstt6h27dol2v/8888y78e5+Pv768SJE5IkY4zmzZunnj17yhjjsG8JCQnKzMy84Om2GzZs0K5duzR48GClp6fb18/JydGtt96qn3/+WTabTTabTV9++aV69uypNm3alNjO2adal8X333+vqKgoDRo0yN7m6emp0aNHKzs7W8uWLXPoP2DAAIWEhNgfd+jQQZLjcY2NjZUxxuHU+dKkpqbq559/1vDhwx1eq0vZF+n0RfDONGbMmBJ9z/wZO3nypNLT01W/fn0FBweX+fRo6fRXGGw2m/r37+/w2kdFRalBgwb2n2uLxaI77rhD33//vbKzs+3rz507VzVr1tSNN94o6eLex3/7298cHnfo0OGSfs4HDBigkydP6osvvrC3LV68WBkZGRowYIC9LTg4WGvWrNHhw4cv6nlKqzs9PV1ZWVmS/vd6jh071qHfI488Ikn67rvv7HVI0rfffquTJ09eVC0V7Y477lBQUJD9cfH4c9ddd8nDw8OhvbCwUIcOHZJUMeM4ABTjQmoArjpt27bVF198ocLCQm3cuFHz58/XtGnTdPvtt2vDhg2Kj48vdb19+/bZP7CdqVGjRg6Pd+3aJUnnvKp2YGCgJCkvL69EcI2KirL/f9CgQRo0aJCysrK0Zs0azZ49Wx999JF69uypzZs3y9vb+4L7WrNmzRIX7Nq1a5e2bdtm/27l2c68UNuKFSs0YcIErVq1qsR3PDMzMx0+zJ4d1oqXRUdHl9p+/PjxC9Z/IdnZ2QoICJB0OjhmZGTo7bff1ttvv11q/wtdhK74tRsyZMg5+2RmZqqwsFBZWVm65pprLrLykvbt26cGDRqUuGJ+XFycffmZzj7exQH8Yo5rcTCsqP3Zt2+f3NzcVK9ePYf2s98r0un3weTJkzVr1iwdOnRIxhj7srPfH+eza9cuGWPUoEGDUpefeaGtAQMGaPr06fr66681ePBgZWdn6/vvv9cDDzxg/yNDWd/Hxby9vUu8p0JCQi7p57x58+Zq3Lix5s6dqxEjRkg6/ceBsLAwh7qmTp2qIUOGKDo6Wq1bt1aPHj10zz33qG7dumV6nvP9LAUGBtpfz/r16zv0i4qKUnBwsP1ns1OnTurXr58SExM1bdo03XTTTerdu7cGDx7ssgtTXuy4VN7XHwDOh9AN4Krl5eWltm3bqm3btmrYsKGGDRumzz77TBMmTLik7RZfWO2DDz5wCNHFimdX5s6dW2IW+szAUSwwMFBdunRRly5d5OnpqTlz5mjNmjXq1KnTBWs5cxbxzPqaNm2ql19+udR1ij+MJiUl6dZbb1Xjxo318ssvKzo6Wl5eXvr+++81bdq0EheQc3d3L3V752ovbV/L4+TJk9q5c6c9KBbXc9ddd50zNDdr1uy82yzexgsvvHDOW4n5+/uXesGly81Zx/V8zjXrfeaFx8pr1KhRmjVrlsaMGaP27dsrKChIFotFAwcOLNctoGw2mywWixYsWFDqsfH397f/v127doqNjdWnn36qwYMH65tvvlFeXp7D7HFZ38fFzvV6XKoBAwZo0qRJSktLU0BAgL7++msNGjTI4fn79++vDh06aP78+Vq8eLFeeOEFTZkyRV988YW6d+9+weco68/Shc56sFgs+vzzz7V69Wp98803WrRokYYPH66XXnpJq1evdngNLpeLHZfK+/oDwPkwYgCAZD9F+HxXeY6JibHPfpxpx44dDo+LZ/ciIiLUuXPnc24vISFBP/zwQ7nrnDNnjr3Oizn1t169etq4caNuvfXW867/zTffqKCgQF9//bXDbFFlOa3y888/V15enhISEiTJfpXsoqKi8x536dzHrfi1CwwMPO82wsPDFRgYqM2bN1/U85QmJiZGmzZtks1mc5jt3r59u325sxTPiF5of0JCQpSRkVGi/exZ+JiYGNlsNiUlJTnMbp/9XpFOv45DhgzRSy+9ZG/Lz88v9XnOp169ejLGqE6dOmrYsOEF+/fv31//+c9/lJWVpblz5yo2Nlbt2rVz2J504fdxeVzM+3XAgAFKTEzUvHnzFBkZqaysLA0cOLBEv+rVq+vBBx/Ugw8+qJSUFLVq1UqTJk0qU+i+kOLXc9euXfYzLyTp6NGjysjIKPGz2a5dO7Vr106TJk3SRx99pDvvvFOffPKJ7r333os6BsUuZd3ycsbrD+DqxXe6AVxVlixZUupMYPF3Fks7/bVYjx49tHr1av3666/2ttTUVP33v/916JeQkKDAwED9+9//LvV7jampqZJOf0ju3Lmzwz/p9L20V61aVWoNCxYscKjTz89PksoVUPr3769Dhw5p5syZJZbl5eUpJydH0v9mgs4+3XfWrFllfi5n2bhxo8aMGaOQkBA99NBDkk7X269fP82bN6/U8Fh83KVzH7fWrVurXr16evHFFx2+73v2Ntzc3NS7d2998803WrduXYl+xcesPK9Pjx49dOTIEc2dO9fedurUKb366qvy9/cv05kNZyvrLcPCw8PVsWNHvffee9q/f7/DsjNf/3r16ikzM1ObNm2ytyUnJ2v+/PkO6xQHvVdeecWhffr06SWe293dvcR78tVXXy337Hnfvn3l7u6uxMTEEtszxig9Pd2hbcCAASooKNCcOXO0cOFC9e/f32F5Wd/H5eHr6yupfO/XuLg4NW3aVHPnztXcuXNVvXp1dezY0b68qKioxGn4ERERqlGjRonbeV2sHj16SCr5+hWfLfOXv/xF0ulTs88+9sVnjBTXcjHHoNjFjHcXyxmvP4CrFzPdAK4qo0aNUm5urvr06aPGjRursLBQK1eutM90nX2695nGjRunDz74QN26ddM//vEP+fn56e2337bPUBYLDAzUjBkzdPfdd6tVq1YaOHCgwsPDtX//fn333Xe64YYbStxb+ky5ubm6/vrr1a5dO3Xr1k3R0dHKyMjQl19+qeXLl6t3795q2bKlpNMhKDg4WG+++aYCAgLk5+en6667TnXq1Dnn9u+++259+umn+tvf/qYlS5bohhtuUFFRkbZv365PP/1UixYtUps2bdS1a1d5eXmpZ8+eeuCBB5Sdna2ZM2cqIiKizPd9rgjLly9Xfn6+ioqKlJ6erhUrVujrr79WUFCQ5s+f73Dq5/PPP68lS5bouuuu03333af4+HgdO3ZMv/32m3788Uf7aeHnO27vvPOOunfvriZNmmjYsGGqWbOmDh06pCVLligwMFDffPONJOnf//63Fi9erE6dOun+++9XXFyckpOT9dlnn+mXX35RcHCwWrRoIXd3d02ZMkWZmZmyWq32+56f7f7779dbb72loUOHav369YqNjdXnn3+uFStWaPr06fbvrpfHoUOHFBcXpyFDhlzwYmqvvPKKbrzxRrVq1Ur333+/6tSpo7179+q7777Thg0bJEkDBw7U448/rj59+mj06NHKzc3VjBkz1LBhQ4eLnrVo0UKDBg3SG2+8oczMTF1//fX66aeftHv37hLPe9ttt+mDDz5QUFCQ4uPjtWrVKv3444+qVq1aufa1Xr16eu655zR+/Hjt3btXvXv3VkBAgPbs2aP58+fr/vvv16OPPmrv36pVK9WvX19PPvmkCgoKHE4tly79fVwaHx8fxcfHa+7cuWrYsKFCQ0N1zTXXXPC79AMGDNDTTz8tb29vjRgxwuFMiBMnTqhWrVq6/fbb1bx5c/n7++vHH3/U2rVrHc4euBTNmzfXkCFD9PbbbysjI0OdOnXSr7/+qjlz5qh37966+eabJUlz5szRG2+8oT59+qhevXo6ceKEZs6cqcDAQHtwv9hjIF3ceHexnPH6A7iKXearpQOASy1YsMAMHz7cNG7c2Pj7+xsvLy9Tv359M2rUKHP06FGHvmffMswYYzZt2mQ6depkvL29Tc2aNc2zzz5r3n333RL36Tbm9C2vEhISTFBQkPH29jb16tUzQ4cONevWrTtvjSdPnjQzZ840vXv3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EbPzadmypYqKipSSkqIOHTqcs9+dd96pLl26aMuWLfq///s/Pffcc/ZlrVq10ty5cxUREaHAwMAyPW9pvLy8HP4yDaBqiIuL04EDB3TgwAH7bPfWrVuVkZGh+Ph4e7+GDRuqYcOGevjhhzVo0CDNmjVLffr0uaj3vrPGi1atWunIkSPy8PBQbGxshW8fQPk9//zzatGihRo1auTQHhcXpxUrVji0rVixQg0bNqzwMLl9+3alp6fr+eeft49z69atu6ht/fWvf1XPnj01ePBgubu7a+DAgZJOjz9bt25V/fr1K6xu6fSMfY0aNfTnn386hHyA08txxfD29tbjjz+ucePG6f3331dSUpJWr16td999V/Xr11d0dLQmTpyoXbt26bvvvitx1c3Ro0dr4cKFevHFF7Vr1y699tprWrhwoUOfBg0a6IsvvtCGDRu0ceNGDR48uMyzTw0bNtSdd96pe+65R1988YX27NmjX3/9VZMnT9Z3331n79exY0dFRUXpzjvvVJ06dRz+UnrnnXcqLCxMvXr10vLly7Vnzx4tXbpUo0eP1sGDB8t8rGJjY/Xzzz/r0KFDSktLK/N6AFyrc+fOatq0qe6880799ttv+vXXX3XPPfeoU6dOatOmjfLy8jRy5EgtXbpU+/bt04oVK7R27VrFxcVJOv3ez87O1k8//aS0tDT7XRHOx1njRefOndW+fXv17t1bixcv1t69e7Vy5Uo9+eSTF/0BG8ClKR5fXnnlFYf2Rx55RD/99JOeffZZ7dy5U3PmzNFrr72mRx99tMJrqF27try8vPTqq6/qzz//1Ndff61nn332orfXp08fffDBBxo2bJg+//xzSdLjjz+ulStXauTIkdqwYYN27dqlr776SiNHjrzk+hMTEzV58mS98sor2rlzp/744w/NmjVLL7/88iVvG1UXoRtXlH/961965JFH9PTTTysuLk4DBgxQSkqKPD099fHHH2v79u1q1qyZpkyZ4jCDLEnt2rXTzJkz9Z///EfNmzfX4sWL9dRTTzn0efnllxUSEqLrr79ePXv2VEJCglq1alXm+mbNmqV77rlHjzzyiBo1aqTevXtr7dq1DqcyWSwWDRo0SBs3bizxV1JfX1/9/PPPql27tvr27au4uDiNGDFC+fn55Zr5fuaZZ7R3717Vq1fP4bR0AJWbxWLRV199pZCQEHXs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", "text/plain": [ "
" ] @@ -1371,10 +1422,10 @@ "base_uri": "https://localhost:8080/" }, "execution": { - "iopub.execute_input": "2025-12-17T20:56:50.124591Z", - "iopub.status.busy": "2025-12-17T20:56:50.124472Z", - "iopub.status.idle": "2025-12-17T20:56:50.204291Z", - "shell.execute_reply": "2025-12-17T20:56:50.203333Z" + "iopub.execute_input": "2025-12-17T21:24:53.849299Z", + "iopub.status.busy": "2025-12-17T21:24:53.849171Z", + "iopub.status.idle": "2025-12-17T21:24:53.929702Z", + "shell.execute_reply": "2025-12-17T21:24:53.928700Z" }, "id": "J9W63Q5czX2k", "outputId": "312076ee-f089-4276-8b8f-bb7a23575d3d" @@ -1386,7 +1437,7 @@ "text": [ "✓ Correctness verified!\n", "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", - "Kernel time: 0.0652 ms\n" + "Kernel time: 0.0648 ms\n" ] } ], @@ -1452,10 +1503,10 @@ "execution_count": 18, "metadata": { "execution": { - "iopub.execute_input": "2025-12-17T20:56:50.206914Z", - "iopub.status.busy": "2025-12-17T20:56:50.206787Z", - "iopub.status.idle": "2025-12-17T20:56:53.016156Z", - "shell.execute_reply": "2025-12-17T20:56:53.015088Z" + "iopub.execute_input": "2025-12-17T21:24:53.932346Z", + "iopub.status.busy": "2025-12-17T21:24:53.932227Z", + "iopub.status.idle": "2025-12-17T21:24:56.741833Z", + "shell.execute_reply": "2025-12-17T21:24:56.740706Z" } }, "outputs": [ @@ -1468,9 +1519,21 @@ "Size Time (ms) TFLOPS % of TF32 Peak \n", "-----------------------------------------------------------------\n", "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", - "1024 0.0652 32.94 3.3 %\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", - "2048 0.3450 49.80 5.0 %\n", + "1024 0.0647 33.19 3.4 %\n", + "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2048 0.3440 49.94 5.0 %\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" ] }, From 353e4e1c86616f268242f7914bbbebf07fb9f8ee Mon Sep 17 00:00:00 2001 From: Sahan Paliskara Date: Wed, 17 Dec 2025 21:34:43 +0000 Subject: [PATCH 18/25] benchmarking guide From 8c28b8857f08e620c47322192100d9f2ba253152 Mon Sep 17 00:00:00 2001 From: Sahan Paliskara Date: Wed, 17 Dec 2025 21:34:48 +0000 Subject: [PATCH 19/25] benchmarking guide From d2207ea03077eb36bd58b3306ce705dbc2f78364 Mon Sep 17 00:00:00 2001 From: Sahan Date: Wed, 17 Dec 2025 22:11:35 +0000 Subject: [PATCH 20/25] try uv --- uv.lock | 4527 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4527 insertions(+) create mode 100644 uv.lock diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..400beb08 --- /dev/null +++ b/uv.lock @@ -0,0 +1,4527 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version >= '3.14' and sys_platform != 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform != 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform != 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform != 'darwin'", +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.13.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "async-timeout", marker = "python_full_version < '3.11'" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/ce/3b83ebba6b3207a7135e5fcaba49706f8a4b6008153b4e30540c982fae26/aiohttp-3.13.2.tar.gz", hash = "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca", size = 7837994, upload-time = "2025-10-28T20:59:39.937Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/34/939730e66b716b76046dedfe0842995842fa906ccc4964bba414ff69e429/aiohttp-3.13.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2372b15a5f62ed37789a6b383ff7344fc5b9f243999b0cd9b629d8bc5f5b4155", size = 736471, upload-time = "2025-10-28T20:55:27.924Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/dcbdf2df7f6ca72b0bb4c0b4509701f2d8942cf54e29ca197389c214c07f/aiohttp-3.13.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7f8659a48995edee7229522984bd1009c1213929c769c2daa80b40fe49a180c", size = 493985, upload-time = "2025-10-28T20:55:29.456Z" }, + { url = "https://files.pythonhosted.org/packages/9d/87/71c8867e0a1d0882dcbc94af767784c3cb381c1c4db0943ab4aae4fed65e/aiohttp-3.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:939ced4a7add92296b0ad38892ce62b98c619288a081170695c6babe4f50e636", size = 489274, upload-time = "2025-10-28T20:55:31.134Z" }, + { url = "https://files.pythonhosted.org/packages/38/0f/46c24e8dae237295eaadd113edd56dee96ef6462adf19b88592d44891dc5/aiohttp-3.13.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6315fb6977f1d0dd41a107c527fee2ed5ab0550b7d885bc15fee20ccb17891da", size = 1668171, upload-time = "2025-10-28T20:55:36.065Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c6/4cdfb4440d0e28483681a48f69841fa5e39366347d66ef808cbdadddb20e/aiohttp-3.13.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6e7352512f763f760baaed2637055c49134fd1d35b37c2dedfac35bfe5cf8725", size = 1636036, upload-time = "2025-10-28T20:55:37.576Z" }, + { url = "https://files.pythonhosted.org/packages/84/37/8708cf678628216fb678ab327a4e1711c576d6673998f4f43e86e9ae90dd/aiohttp-3.13.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e09a0a06348a2dd73e7213353c90d709502d9786219f69b731f6caa0efeb46f5", size = 1727975, upload-time = "2025-10-28T20:55:39.457Z" }, + { url = "https://files.pythonhosted.org/packages/e6/2e/3ebfe12fdcb9b5f66e8a0a42dffcd7636844c8a018f261efb2419f68220b/aiohttp-3.13.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a09a6d073fb5789456545bdee2474d14395792faa0527887f2f4ec1a486a59d3", size = 1815823, upload-time = "2025-10-28T20:55:40.958Z" }, + { url = "https://files.pythonhosted.org/packages/a1/4f/ca2ef819488cbb41844c6cf92ca6dd15b9441e6207c58e5ae0e0fc8d70ad/aiohttp-3.13.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b59d13c443f8e049d9e94099c7e412e34610f1f49be0f230ec656a10692a5802", size = 1669374, upload-time = "2025-10-28T20:55:42.745Z" }, + { url = "https://files.pythonhosted.org/packages/f8/fe/1fe2e1179a0d91ce09c99069684aab619bf2ccde9b20bd6ca44f8837203e/aiohttp-3.13.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:20db2d67985d71ca033443a1ba2001c4b5693fe09b0e29f6d9358a99d4d62a8a", size = 1555315, upload-time = "2025-10-28T20:55:44.264Z" }, + { url = "https://files.pythonhosted.org/packages/5a/2b/f3781899b81c45d7cbc7140cddb8a3481c195e7cbff8e36374759d2ab5a5/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:960c2fc686ba27b535f9fd2b52d87ecd7e4fd1cf877f6a5cba8afb5b4a8bd204", size = 1639140, upload-time = "2025-10-28T20:55:46.626Z" }, + { url = "https://files.pythonhosted.org/packages/72/27/c37e85cd3ece6f6c772e549bd5a253d0c122557b25855fb274224811e4f2/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6c00dbcf5f0d88796151e264a8eab23de2997c9303dd7c0bf622e23b24d3ce22", size = 1645496, upload-time = "2025-10-28T20:55:48.933Z" }, + { url = "https://files.pythonhosted.org/packages/66/20/3af1ab663151bd3780b123e907761cdb86ec2c4e44b2d9b195ebc91fbe37/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fed38a5edb7945f4d1bcabe2fcd05db4f6ec7e0e82560088b754f7e08d93772d", size = 1697625, upload-time = "2025-10-28T20:55:50.377Z" }, + { url = "https://files.pythonhosted.org/packages/95/eb/ae5cab15efa365e13d56b31b0d085a62600298bf398a7986f8388f73b598/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:b395bbca716c38bef3c764f187860e88c724b342c26275bc03e906142fc5964f", size = 1542025, upload-time = "2025-10-28T20:55:51.861Z" }, + { url = "https://files.pythonhosted.org/packages/e9/2d/1683e8d67ec72d911397fe4e575688d2a9b8f6a6e03c8fdc9f3fd3d4c03f/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:204ffff2426c25dfda401ba08da85f9c59525cdc42bda26660463dd1cbcfec6f", size = 1714918, upload-time = "2025-10-28T20:55:53.515Z" }, + { url = "https://files.pythonhosted.org/packages/99/a2/ffe8e0e1c57c5e542d47ffa1fcf95ef2b3ea573bf7c4d2ee877252431efc/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:05c4dd3c48fb5f15db31f57eb35374cb0c09afdde532e7fb70a75aede0ed30f6", size = 1656113, upload-time = "2025-10-28T20:55:55.438Z" }, + { url = "https://files.pythonhosted.org/packages/0d/42/d511aff5c3a2b06c09d7d214f508a4ad8ac7799817f7c3d23e7336b5e896/aiohttp-3.13.2-cp310-cp310-win32.whl", hash = "sha256:e574a7d61cf10351d734bcddabbe15ede0eaa8a02070d85446875dc11189a251", size = 432290, upload-time = "2025-10-28T20:55:56.96Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ea/1c2eb7098b5bad4532994f2b7a8228d27674035c9b3234fe02c37469ef14/aiohttp-3.13.2-cp310-cp310-win_amd64.whl", hash = "sha256:364f55663085d658b8462a1c3f17b2b84a5c2e1ba858e1b79bff7b2e24ad1514", size = 455075, upload-time = "2025-10-28T20:55:58.373Z" }, + { url = "https://files.pythonhosted.org/packages/35/74/b321e7d7ca762638cdf8cdeceb39755d9c745aff7a64c8789be96ddf6e96/aiohttp-3.13.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4647d02df098f6434bafd7f32ad14942f05a9caa06c7016fdcc816f343997dd0", size = 743409, upload-time = "2025-10-28T20:56:00.354Z" }, + { url = "https://files.pythonhosted.org/packages/99/3d/91524b905ec473beaf35158d17f82ef5a38033e5809fe8742e3657cdbb97/aiohttp-3.13.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e3403f24bcb9c3b29113611c3c16a2a447c3953ecf86b79775e7be06f7ae7ccb", size = 497006, upload-time = "2025-10-28T20:56:01.85Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:43dff14e35aba17e3d6d5ba628858fb8cb51e30f44724a2d2f0c75be492c55e9", size = 493195, upload-time = "2025-10-28T20:56:03.314Z" }, + { url = "https://files.pythonhosted.org/packages/98/31/913f774a4708775433b7375c4f867d58ba58ead833af96c8af3621a0d243/aiohttp-3.13.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2a9ea08e8c58bb17655630198833109227dea914cd20be660f52215f6de5613", size = 1747759, upload-time = "2025-10-28T20:56:04.904Z" }, + { url = "https://files.pythonhosted.org/packages/e8/63/04efe156f4326f31c7c4a97144f82132c3bb21859b7bb84748d452ccc17c/aiohttp-3.13.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53b07472f235eb80e826ad038c9d106c2f653584753f3ddab907c83f49eedead", size = 1704456, upload-time = "2025-10-28T20:56:06.986Z" }, + { url = "https://files.pythonhosted.org/packages/8e/02/4e16154d8e0a9cf4ae76f692941fd52543bbb148f02f098ca73cab9b1c1b/aiohttp-3.13.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e736c93e9c274fce6419af4aac199984d866e55f8a4cec9114671d0ea9688780", size = 1807572, upload-time = "2025-10-28T20:56:08.558Z" }, + { url = "https://files.pythonhosted.org/packages/34/58/b0583defb38689e7f06798f0285b1ffb3a6fb371f38363ce5fd772112724/aiohttp-3.13.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ff5e771f5dcbc81c64898c597a434f7682f2259e0cd666932a913d53d1341d1a", size = 1895954, upload-time = "2025-10-28T20:56:10.545Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3b6fb0c207cc661fa0bf8c66d8d9b657331ccc814f4719468af61034b478592", size = 1747092, upload-time = "2025-10-28T20:56:12.118Z" }, + { url = "https://files.pythonhosted.org/packages/ac/61/98a47319b4e425cc134e05e5f3fc512bf9a04bf65aafd9fdcda5d57ec693/aiohttp-3.13.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:97a0895a8e840ab3520e2288db7cace3a1981300d48babeb50e7425609e2e0ab", size = 1606815, upload-time = "2025-10-28T20:56:14.191Z" }, + { url = "https://files.pythonhosted.org/packages/97/4b/e78b854d82f66bb974189135d31fce265dee0f5344f64dd0d345158a5973/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e8f8afb552297aca127c90cb840e9a1d4bfd6a10d7d8f2d9176e1acc69bad30", size = 1723789, upload-time = "2025-10-28T20:56:16.101Z" }, + { url = "https://files.pythonhosted.org/packages/ed/fc/9d2ccc794fc9b9acd1379d625c3a8c64a45508b5091c546dea273a41929e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ed2f9c7216e53c3df02264f25d824b079cc5914f9e2deba94155190ef648ee40", size = 1718104, upload-time = "2025-10-28T20:56:17.655Z" }, + { url = "https://files.pythonhosted.org/packages/66/65/34564b8765ea5c7d79d23c9113135d1dd3609173da13084830f1507d56cf/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:99c5280a329d5fa18ef30fd10c793a190d996567667908bef8a7f81f8202b948", size = 1785584, upload-time = "2025-10-28T20:56:19.238Z" }, + { url = "https://files.pythonhosted.org/packages/30/be/f6a7a426e02fc82781afd62016417b3948e2207426d90a0e478790d1c8a4/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ca6ffef405fc9c09a746cb5d019c1672cd7f402542e379afc66b370833170cf", size = 1595126, upload-time = "2025-10-28T20:56:20.836Z" }, + { url = "https://files.pythonhosted.org/packages/e5/c7/8e22d5d28f94f67d2af496f14a83b3c155d915d1fe53d94b66d425ec5b42/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:47f438b1a28e926c37632bff3c44df7d27c9b57aaf4e34b1def3c07111fdb782", size = 1800665, upload-time = "2025-10-28T20:56:22.922Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/91133c8b68b1da9fc16555706aa7276fdf781ae2bb0876c838dd86b8116e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9acda8604a57bb60544e4646a4615c1866ee6c04a8edef9b8ee6fd1d8fa2ddc8", size = 1739532, upload-time = "2025-10-28T20:56:25.924Z" }, + { url = "https://files.pythonhosted.org/packages/17/6b/3747644d26a998774b21a616016620293ddefa4d63af6286f389aedac844/aiohttp-3.13.2-cp311-cp311-win32.whl", hash = "sha256:868e195e39b24aaa930b063c08bb0c17924899c16c672a28a65afded9c46c6ec", size = 431876, upload-time = "2025-10-28T20:56:27.524Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/688462108c1a00eb9f05765331c107f95ae86f6b197b865d29e930b7e462/aiohttp-3.13.2-cp311-cp311-win_amd64.whl", hash = "sha256:7fd19df530c292542636c2a9a85854fab93474396a52f1695e799186bbd7f24c", size = 456205, upload-time = "2025-10-28T20:56:29.062Z" }, + { url = "https://files.pythonhosted.org/packages/29/9b/01f00e9856d0a73260e86dd8ed0c2234a466c5c1712ce1c281548df39777/aiohttp-3.13.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b1e56bab2e12b2b9ed300218c351ee2a3d8c8fdab5b1ec6193e11a817767e47b", size = 737623, upload-time = "2025-10-28T20:56:30.797Z" }, + { url = "https://files.pythonhosted.org/packages/5a/1b/4be39c445e2b2bd0aab4ba736deb649fabf14f6757f405f0c9685019b9e9/aiohttp-3.13.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:364e25edaabd3d37b1db1f0cbcee8c73c9a3727bfa262b83e5e4cf3489a2a9dc", size = 492664, upload-time = "2025-10-28T20:56:32.708Z" }, + { url = "https://files.pythonhosted.org/packages/28/66/d35dcfea8050e131cdd731dff36434390479b4045a8d0b9d7111b0a968f1/aiohttp-3.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5c94825f744694c4b8db20b71dba9a257cd2ba8e010a803042123f3a25d50d7", size = 491808, upload-time = "2025-10-28T20:56:34.57Z" }, + { url = "https://files.pythonhosted.org/packages/00/29/8e4609b93e10a853b65f8291e64985de66d4f5848c5637cddc70e98f01f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba2715d842ffa787be87cbfce150d5e88c87a98e0b62e0f5aa489169a393dbbb", size = 1738863, upload-time = "2025-10-28T20:56:36.377Z" }, + { url = "https://files.pythonhosted.org/packages/9d/fa/4ebdf4adcc0def75ced1a0d2d227577cd7b1b85beb7edad85fcc87693c75/aiohttp-3.13.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:585542825c4bc662221fb257889e011a5aa00f1ae4d75d1d246a5225289183e3", size = 1700586, upload-time = "2025-10-28T20:56:38.034Z" }, + { url = "https://files.pythonhosted.org/packages/da/04/73f5f02ff348a3558763ff6abe99c223381b0bace05cd4530a0258e52597/aiohttp-3.13.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39d02cb6025fe1aabca329c5632f48c9532a3dabccd859e7e2f110668972331f", size = 1768625, upload-time = "2025-10-28T20:56:39.75Z" }, + { url = "https://files.pythonhosted.org/packages/f8/49/a825b79ffec124317265ca7d2344a86bcffeb960743487cb11988ffb3494/aiohttp-3.13.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e67446b19e014d37342f7195f592a2a948141d15a312fe0e700c2fd2f03124f6", size = 1867281, upload-time = "2025-10-28T20:56:41.471Z" }, + { url = "https://files.pythonhosted.org/packages/b9/48/adf56e05f81eac31edcfae45c90928f4ad50ef2e3ea72cb8376162a368f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4356474ad6333e41ccefd39eae869ba15a6c5299c9c01dfdcfdd5c107be4363e", size = 1752431, upload-time = "2025-10-28T20:56:43.162Z" }, + { url = "https://files.pythonhosted.org/packages/30/ab/593855356eead019a74e862f21523db09c27f12fd24af72dbc3555b9bfd9/aiohttp-3.13.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeacf451c99b4525f700f078becff32c32ec327b10dcf31306a8a52d78166de7", size = 1562846, upload-time = "2025-10-28T20:56:44.85Z" }, + { url = "https://files.pythonhosted.org/packages/39/0f/9f3d32271aa8dc35036e9668e31870a9d3b9542dd6b3e2c8a30931cb27ae/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8a9b889aeabd7a4e9af0b7f4ab5ad94d42e7ff679aaec6d0db21e3b639ad58d", size = 1699606, upload-time = "2025-10-28T20:56:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3c/52d2658c5699b6ef7692a3f7128b2d2d4d9775f2a68093f74bca06cf01e1/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fa89cb11bc71a63b69568d5b8a25c3ca25b6d54c15f907ca1c130d72f320b76b", size = 1720663, upload-time = "2025-10-28T20:56:48.528Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d4/8f8f3ff1fb7fb9e3f04fcad4e89d8a1cd8fc7d05de67e3de5b15b33008ff/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8aa7c807df234f693fed0ecd507192fc97692e61fee5702cdc11155d2e5cadc8", size = 1737939, upload-time = "2025-10-28T20:56:50.77Z" }, + { url = "https://files.pythonhosted.org/packages/03/d3/ddd348f8a27a634daae39a1b8e291ff19c77867af438af844bf8b7e3231b/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9eb3e33fdbe43f88c3c75fa608c25e7c47bbd80f48d012763cb67c47f39a7e16", size = 1555132, upload-time = "2025-10-28T20:56:52.568Z" }, + { url = "https://files.pythonhosted.org/packages/39/b8/46790692dc46218406f94374903ba47552f2f9f90dad554eed61bfb7b64c/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9434bc0d80076138ea986833156c5a48c9c7a8abb0c96039ddbb4afc93184169", size = 1764802, upload-time = "2025-10-28T20:56:54.292Z" }, + { url = "https://files.pythonhosted.org/packages/ba/e4/19ce547b58ab2a385e5f0b8aa3db38674785085abcf79b6e0edd1632b12f/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff15c147b2ad66da1f2cbb0622313f2242d8e6e8f9b79b5206c84523a4473248", size = 1719512, upload-time = "2025-10-28T20:56:56.428Z" }, + { url = "https://files.pythonhosted.org/packages/70/30/6355a737fed29dcb6dfdd48682d5790cb5eab050f7b4e01f49b121d3acad/aiohttp-3.13.2-cp312-cp312-win32.whl", hash = "sha256:27e569eb9d9e95dbd55c0fc3ec3a9335defbf1d8bc1d20171a49f3c4c607b93e", size = 426690, upload-time = "2025-10-28T20:56:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/0a/0d/b10ac09069973d112de6ef980c1f6bb31cb7dcd0bc363acbdad58f927873/aiohttp-3.13.2-cp312-cp312-win_amd64.whl", hash = "sha256:8709a0f05d59a71f33fd05c17fc11fcb8c30140506e13c2f5e8ee1b8964e1b45", size = 453465, upload-time = "2025-10-28T20:57:00.795Z" }, + { url = "https://files.pythonhosted.org/packages/bf/78/7e90ca79e5aa39f9694dcfd74f4720782d3c6828113bb1f3197f7e7c4a56/aiohttp-3.13.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7519bdc7dfc1940d201651b52bf5e03f5503bda45ad6eacf64dda98be5b2b6be", size = 732139, upload-time = "2025-10-28T20:57:02.455Z" }, + { url = "https://files.pythonhosted.org/packages/db/ed/1f59215ab6853fbaa5c8495fa6cbc39edfc93553426152b75d82a5f32b76/aiohttp-3.13.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:088912a78b4d4f547a1f19c099d5a506df17eacec3c6f4375e2831ec1d995742", size = 490082, upload-time = "2025-10-28T20:57:04.784Z" }, + { url = "https://files.pythonhosted.org/packages/68/7b/fe0fe0f5e05e13629d893c760465173a15ad0039c0a5b0d0040995c8075e/aiohttp-3.13.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5276807b9de9092af38ed23ce120539ab0ac955547b38563a9ba4f5b07b95293", size = 489035, upload-time = "2025-10-28T20:57:06.894Z" }, + { url = "https://files.pythonhosted.org/packages/d2/04/db5279e38471b7ac801d7d36a57d1230feeee130bbe2a74f72731b23c2b1/aiohttp-3.13.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1237c1375eaef0db4dcd7c2559f42e8af7b87ea7d295b118c60c36a6e61cb811", size = 1720387, upload-time = "2025-10-28T20:57:08.685Z" }, + { url = "https://files.pythonhosted.org/packages/31/07/8ea4326bd7dae2bd59828f69d7fdc6e04523caa55e4a70f4a8725a7e4ed2/aiohttp-3.13.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:96581619c57419c3d7d78703d5b78c1e5e5fc0172d60f555bdebaced82ded19a", size = 1688314, upload-time = "2025-10-28T20:57:10.693Z" }, + { url = "https://files.pythonhosted.org/packages/48/ab/3d98007b5b87ffd519d065225438cc3b668b2f245572a8cb53da5dd2b1bc/aiohttp-3.13.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2713a95b47374169409d18103366de1050fe0ea73db358fc7a7acb2880422d4", size = 1756317, upload-time = "2025-10-28T20:57:12.563Z" }, + { url = "https://files.pythonhosted.org/packages/97/3d/801ca172b3d857fafb7b50c7c03f91b72b867a13abca982ed6b3081774ef/aiohttp-3.13.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:228a1cd556b3caca590e9511a89444925da87d35219a49ab5da0c36d2d943a6a", size = 1858539, upload-time = "2025-10-28T20:57:14.623Z" }, + { url = "https://files.pythonhosted.org/packages/f7/0d/4764669bdf47bd472899b3d3db91fffbe925c8e3038ec591a2fd2ad6a14d/aiohttp-3.13.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac6cde5fba8d7d8c6ac963dbb0256a9854e9fafff52fbcc58fdf819357892c3e", size = 1739597, upload-time = "2025-10-28T20:57:16.399Z" }, + { url = "https://files.pythonhosted.org/packages/c4/52/7bd3c6693da58ba16e657eb904a5b6decfc48ecd06e9ac098591653b1566/aiohttp-3.13.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2bef8237544f4e42878c61cef4e2839fee6346dc60f5739f876a9c50be7fcdb", size = 1555006, upload-time = "2025-10-28T20:57:18.288Z" }, + { url = "https://files.pythonhosted.org/packages/48/30/9586667acec5993b6f41d2ebcf96e97a1255a85f62f3c653110a5de4d346/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:16f15a4eac3bc2d76c45f7ebdd48a65d41b242eb6c31c2245463b40b34584ded", size = 1683220, upload-time = "2025-10-28T20:57:20.241Z" }, + { url = "https://files.pythonhosted.org/packages/71/01/3afe4c96854cfd7b30d78333852e8e851dceaec1c40fd00fec90c6402dd2/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:bb7fb776645af5cc58ab804c58d7eba545a97e047254a52ce89c157b5af6cd0b", size = 1712570, upload-time = "2025-10-28T20:57:22.253Z" }, + { url = "https://files.pythonhosted.org/packages/11/2c/22799d8e720f4697a9e66fd9c02479e40a49de3de2f0bbe7f9f78a987808/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e1b4951125ec10c70802f2cb09736c895861cd39fd9dcb35107b4dc8ae6220b8", size = 1733407, upload-time = "2025-10-28T20:57:24.37Z" }, + { url = "https://files.pythonhosted.org/packages/34/cb/90f15dd029f07cebbd91f8238a8b363978b530cd128488085b5703683594/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:550bf765101ae721ee1d37d8095f47b1f220650f85fe1af37a90ce75bab89d04", size = 1550093, upload-time = "2025-10-28T20:57:26.257Z" }, + { url = "https://files.pythonhosted.org/packages/69/46/12dce9be9d3303ecbf4d30ad45a7683dc63d90733c2d9fe512be6716cd40/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fe91b87fc295973096251e2d25a811388e7d8adf3bd2b97ef6ae78bc4ac6c476", size = 1758084, upload-time = "2025-10-28T20:57:28.349Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c8/0932b558da0c302ffd639fc6362a313b98fdf235dc417bc2493da8394df7/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0c8e31cfcc4592cb200160344b2fb6ae0f9e4effe06c644b5a125d4ae5ebe23", size = 1716987, upload-time = "2025-10-28T20:57:30.233Z" }, + { url = "https://files.pythonhosted.org/packages/5d/8b/f5bd1a75003daed099baec373aed678f2e9b34f2ad40d85baa1368556396/aiohttp-3.13.2-cp313-cp313-win32.whl", hash = "sha256:0740f31a60848d6edb296a0df827473eede90c689b8f9f2a4cdde74889eb2254", size = 425859, upload-time = "2025-10-28T20:57:32.105Z" }, + { url = "https://files.pythonhosted.org/packages/5d/28/a8a9fc6957b2cee8902414e41816b5ab5536ecf43c3b1843c10e82c559b2/aiohttp-3.13.2-cp313-cp313-win_amd64.whl", hash = "sha256:a88d13e7ca367394908f8a276b89d04a3652044612b9a408a0bb22a5ed976a1a", size = 452192, upload-time = "2025-10-28T20:57:34.166Z" }, + { url = "https://files.pythonhosted.org/packages/9b/36/e2abae1bd815f01c957cbf7be817b3043304e1c87bad526292a0410fdcf9/aiohttp-3.13.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2475391c29230e063ef53a66669b7b691c9bfc3f1426a0f7bcdf1216bdbac38b", size = 735234, upload-time = "2025-10-28T20:57:36.415Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e3/1ee62dde9b335e4ed41db6bba02613295a0d5b41f74a783c142745a12763/aiohttp-3.13.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:f33c8748abef4d8717bb20e8fb1b3e07c6adacb7fd6beaae971a764cf5f30d61", size = 490733, upload-time = "2025-10-28T20:57:38.205Z" }, + { url = "https://files.pythonhosted.org/packages/1a/aa/7a451b1d6a04e8d15a362af3e9b897de71d86feac3babf8894545d08d537/aiohttp-3.13.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ae32f24bbfb7dbb485a24b30b1149e2f200be94777232aeadba3eecece4d0aa4", size = 491303, upload-time = "2025-10-28T20:57:40.122Z" }, + { url = "https://files.pythonhosted.org/packages/57/1e/209958dbb9b01174870f6a7538cd1f3f28274fdbc88a750c238e2c456295/aiohttp-3.13.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d7f02042c1f009ffb70067326ef183a047425bb2ff3bc434ead4dd4a4a66a2b", size = 1717965, upload-time = "2025-10-28T20:57:42.28Z" }, + { url = "https://files.pythonhosted.org/packages/08/aa/6a01848d6432f241416bc4866cae8dc03f05a5a884d2311280f6a09c73d6/aiohttp-3.13.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93655083005d71cd6c072cdab54c886e6570ad2c4592139c3fb967bfc19e4694", size = 1667221, upload-time = "2025-10-28T20:57:44.869Z" }, + { url = "https://files.pythonhosted.org/packages/87/4f/36c1992432d31bbc789fa0b93c768d2e9047ec8c7177e5cd84ea85155f36/aiohttp-3.13.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0db1e24b852f5f664cd728db140cf11ea0e82450471232a394b3d1a540b0f906", size = 1757178, upload-time = "2025-10-28T20:57:47.216Z" }, + { url = "https://files.pythonhosted.org/packages/ac/b4/8e940dfb03b7e0f68a82b88fd182b9be0a65cb3f35612fe38c038c3112cf/aiohttp-3.13.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b009194665bcd128e23eaddef362e745601afa4641930848af4c8559e88f18f9", size = 1838001, upload-time = "2025-10-28T20:57:49.337Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ef/39f3448795499c440ab66084a9db7d20ca7662e94305f175a80f5b7e0072/aiohttp-3.13.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c038a8fdc8103cd51dbd986ecdce141473ffd9775a7a8057a6ed9c3653478011", size = 1716325, upload-time = "2025-10-28T20:57:51.327Z" }, + { url = "https://files.pythonhosted.org/packages/d7/51/b311500ffc860b181c05d91c59a1313bdd05c82960fdd4035a15740d431e/aiohttp-3.13.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66bac29b95a00db411cd758fea0e4b9bdba6d549dfe333f9a945430f5f2cc5a6", size = 1547978, upload-time = "2025-10-28T20:57:53.554Z" }, + { url = "https://files.pythonhosted.org/packages/31/64/b9d733296ef79815226dab8c586ff9e3df41c6aff2e16c06697b2d2e6775/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4ebf9cfc9ba24a74cf0718f04aac2a3bbe745902cc7c5ebc55c0f3b5777ef213", size = 1682042, upload-time = "2025-10-28T20:57:55.617Z" }, + { url = "https://files.pythonhosted.org/packages/3f/30/43d3e0f9d6473a6db7d472104c4eff4417b1e9df01774cb930338806d36b/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a4b88ebe35ce54205c7074f7302bd08a4cb83256a3e0870c72d6f68a3aaf8e49", size = 1680085, upload-time = "2025-10-28T20:57:57.59Z" }, + { url = "https://files.pythonhosted.org/packages/16/51/c709f352c911b1864cfd1087577760ced64b3e5bee2aa88b8c0c8e2e4972/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:98c4fb90bb82b70a4ed79ca35f656f4281885be076f3f970ce315402b53099ae", size = 1728238, upload-time = "2025-10-28T20:57:59.525Z" }, + { url = "https://files.pythonhosted.org/packages/19/e2/19bd4c547092b773caeb48ff5ae4b1ae86756a0ee76c16727fcfd281404b/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:ec7534e63ae0f3759df3a1ed4fa6bc8f75082a924b590619c0dd2f76d7043caa", size = 1544395, upload-time = "2025-10-28T20:58:01.914Z" }, + { url = "https://files.pythonhosted.org/packages/cf/87/860f2803b27dfc5ed7be532832a3498e4919da61299b4a1f8eb89b8ff44d/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5b927cf9b935a13e33644cbed6c8c4b2d0f25b713d838743f8fe7191b33829c4", size = 1742965, upload-time = "2025-10-28T20:58:03.972Z" }, + { url = "https://files.pythonhosted.org/packages/67/7f/db2fc7618925e8c7a601094d5cbe539f732df4fb570740be88ed9e40e99a/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:88d6c017966a78c5265d996c19cdb79235be5e6412268d7e2ce7dee339471b7a", size = 1697585, upload-time = "2025-10-28T20:58:06.189Z" }, + { url = "https://files.pythonhosted.org/packages/0c/07/9127916cb09bb38284db5036036042b7b2c514c8ebaeee79da550c43a6d6/aiohttp-3.13.2-cp314-cp314-win32.whl", hash = "sha256:f7c183e786e299b5d6c49fb43a769f8eb8e04a2726a2bd5887b98b5cc2d67940", size = 431621, upload-time = "2025-10-28T20:58:08.636Z" }, + { url = "https://files.pythonhosted.org/packages/fb/41/554a8a380df6d3a2bba8a7726429a23f4ac62aaf38de43bb6d6cde7b4d4d/aiohttp-3.13.2-cp314-cp314-win_amd64.whl", hash = "sha256:fe242cd381e0fb65758faf5ad96c2e460df6ee5b2de1072fe97e4127927e00b4", size = 457627, upload-time = "2025-10-28T20:58:11Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8e/3824ef98c039d3951cb65b9205a96dd2b20f22241ee17d89c5701557c826/aiohttp-3.13.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f10d9c0b0188fe85398c61147bbd2a657d616c876863bfeff43376e0e3134673", size = 767360, upload-time = "2025-10-28T20:58:13.358Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0f/6a03e3fc7595421274fa34122c973bde2d89344f8a881b728fa8c774e4f1/aiohttp-3.13.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e7c952aefdf2460f4ae55c5e9c3e80aa72f706a6317e06020f80e96253b1accd", size = 504616, upload-time = "2025-10-28T20:58:15.339Z" }, + { url = "https://files.pythonhosted.org/packages/c6/aa/ed341b670f1bc8a6f2c6a718353d13b9546e2cef3544f573c6a1ff0da711/aiohttp-3.13.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c20423ce14771d98353d2e25e83591fa75dfa90a3c1848f3d7c68243b4fbded3", size = 509131, upload-time = "2025-10-28T20:58:17.693Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f0/c68dac234189dae5c4bbccc0f96ce0cc16b76632cfc3a08fff180045cfa4/aiohttp-3.13.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e96eb1a34396e9430c19d8338d2ec33015e4a87ef2b4449db94c22412e25ccdf", size = 1864168, upload-time = "2025-10-28T20:58:20.113Z" }, + { url = "https://files.pythonhosted.org/packages/8f/65/75a9a76db8364b5d0e52a0c20eabc5d52297385d9af9c35335b924fafdee/aiohttp-3.13.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:23fb0783bc1a33640036465019d3bba069942616a6a2353c6907d7fe1ccdaf4e", size = 1719200, upload-time = "2025-10-28T20:58:22.583Z" }, + { url = "https://files.pythonhosted.org/packages/f5/55/8df2ed78d7f41d232f6bd3ff866b6f617026551aa1d07e2f03458f964575/aiohttp-3.13.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1a9bea6244a1d05a4e57c295d69e159a5c50d8ef16aa390948ee873478d9a5", size = 1843497, upload-time = "2025-10-28T20:58:24.672Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e0/94d7215e405c5a02ccb6a35c7a3a6cfff242f457a00196496935f700cde5/aiohttp-3.13.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0a3d54e822688b56e9f6b5816fb3de3a3a64660efac64e4c2dc435230ad23bad", size = 1935703, upload-time = "2025-10-28T20:58:26.758Z" }, + { url = "https://files.pythonhosted.org/packages/0b/78/1eeb63c3f9b2d1015a4c02788fb543141aad0a03ae3f7a7b669b2483f8d4/aiohttp-3.13.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a653d872afe9f33497215745da7a943d1dc15b728a9c8da1c3ac423af35178e", size = 1792738, upload-time = "2025-10-28T20:58:29.787Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/aaf1eea4c188e51538c04cc568040e3082db263a57086ea74a7d38c39e42/aiohttp-3.13.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:56d36e80d2003fa3fc0207fac644216d8532e9504a785ef9a8fd013f84a42c61", size = 1624061, upload-time = "2025-10-28T20:58:32.529Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c2/3b6034de81fbcc43de8aeb209073a2286dfb50b86e927b4efd81cf848197/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:78cd586d8331fb8e241c2dd6b2f4061778cc69e150514b39a9e28dd050475661", size = 1789201, upload-time = "2025-10-28T20:58:34.618Z" }, + { url = "https://files.pythonhosted.org/packages/c9/38/c15dcf6d4d890217dae79d7213988f4e5fe6183d43893a9cf2fe9e84ca8d/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:20b10bbfbff766294fe99987f7bb3b74fdd2f1a2905f2562132641ad434dcf98", size = 1776868, upload-time = "2025-10-28T20:58:38.835Z" }, + { url = "https://files.pythonhosted.org/packages/04/75/f74fd178ac81adf4f283a74847807ade5150e48feda6aef024403716c30c/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9ec49dff7e2b3c85cdeaa412e9d438f0ecd71676fde61ec57027dd392f00c693", size = 1790660, upload-time = "2025-10-28T20:58:41.507Z" }, + { url = "https://files.pythonhosted.org/packages/e7/80/7368bd0d06b16b3aba358c16b919e9c46cf11587dc572091031b0e9e3ef0/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:94f05348c4406450f9d73d38efb41d669ad6cd90c7ee194810d0eefbfa875a7a", size = 1617548, upload-time = "2025-10-28T20:58:43.674Z" }, + { url = "https://files.pythonhosted.org/packages/7d/4b/a6212790c50483cb3212e507378fbe26b5086d73941e1ec4b56a30439688/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:fa4dcb605c6f82a80c7f95713c2b11c3b8e9893b3ebd2bc9bde93165ed6107be", size = 1817240, upload-time = "2025-10-28T20:58:45.787Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f7/ba5f0ba4ea8d8f3c32850912944532b933acbf0f3a75546b89269b9b7dde/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cf00e5db968c3f67eccd2778574cf64d8b27d95b237770aa32400bd7a1ca4f6c", size = 1762334, upload-time = "2025-10-28T20:58:47.936Z" }, + { url = "https://files.pythonhosted.org/packages/7e/83/1a5a1856574588b1cad63609ea9ad75b32a8353ac995d830bf5da9357364/aiohttp-3.13.2-cp314-cp314t-win32.whl", hash = "sha256:d23b5fe492b0805a50d3371e8a728a9134d8de5447dce4c885f5587294750734", size = 464685, upload-time = "2025-10-28T20:58:50.642Z" }, + { url = "https://files.pythonhosted.org/packages/9f/4d/d22668674122c08f4d56972297c51a624e64b3ed1efaa40187607a7cb66e/aiohttp-3.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f", size = 498093, upload-time = "2025-10-28T20:58:52.782Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/16/ce/8a777047513153587e5434fd752e89334ac33e379aa3497db860eeb60377/anyio-4.12.0.tar.gz", hash = "sha256:73c693b567b0c55130c104d0b43a9baf3aa6a31fc6110116509f27bf75e21ec0", size = 228266, upload-time = "2025-11-28T23:37:38.911Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl", hash = "sha256:dad2376a628f98eeca4881fc56cd06affd18f659b17a747d3ff0307ced94b1bb", size = 113362, upload-time = "2025-11-28T23:36:57.897Z" }, +] + +[[package]] +name = "apache-tvm-ffi" +version = "0.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/e8/7db1ca6db40877d190a8538cc378f740aae247c6fe063815898607c2d2ca/apache_tvm_ffi-0.1.1.tar.gz", hash = "sha256:728ce3f4ae02b89a7147b718f7f670afac3c6d1f96df38d488757274643709fc", size = 1259223, upload-time = "2025-11-04T02:43:38.154Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/ad/550aff4c9652ee8297f90a04c3ab4143ece1d373101010d85b5c9a9a2e7d/apache_tvm_ffi-0.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:af0de7bb9581ac9e090276cba37c4e7ffaeed601a2b2b546bf0e2daed3810cec", size = 1723658, upload-time = "2025-11-04T02:42:37.628Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/01e65f4a6c2b146f7c40f6d8d663d76b60c3be324159f8fb8223ea505738/apache_tvm_ffi-0.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb7d6828652803cb8c0e13d1f06d01fc6bfb8e79e77e3de7e6fd4b5fae5ee9d2", size = 1882437, upload-time = "2025-11-04T02:42:39.647Z" }, + { url = "https://files.pythonhosted.org/packages/6b/bd/b52b71d03637d7a82388c2e90d48dddec2c46121be1333c9851d6a135824/apache_tvm_ffi-0.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1fe072b55a7949720a792a9d455c0659aa097825e709a16a4667d720137b8b5c", size = 1954949, upload-time = "2025-11-04T02:42:41.119Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ef/ff85926928694785f2399a4c5b793bcfecf8c3cf806dedf9202b7db73b8b/apache_tvm_ffi-0.1.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b25178b265903dabd9a35bd767db26928be3b7869f681fe1d6e1aed93d7c0799", size = 1837395, upload-time = "2025-11-04T02:42:42.954Z" }, + { url = "https://files.pythonhosted.org/packages/de/69/f048bda5e5445a89200737062a202cb39097d3b1902e886654de9cd6b624/apache_tvm_ffi-0.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5552af3c625750361d1b7d646d499a28caf94858967e74c9cce6ed7d4629b28", size = 1947740, upload-time = "2025-11-04T02:42:44.49Z" }, + { url = "https://files.pythonhosted.org/packages/dc/df/295f71613502edeb39a39b30c8bbb9ec8fcc06bd95b3043dd99b55fa98a8/apache_tvm_ffi-0.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:c102ba5899ce106c8068a3f21155c106790b5b0141fba52a52ed6e9aeb286aff", size = 1710966, upload-time = "2025-11-04T02:42:46.037Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a9/544767d7058f825c0ceb5bc25760ad3a821b2efcc6a3dbe2e3988a3aee86/apache_tvm_ffi-0.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7cbf31c472920cdc5b3f75f2d2720b8a6b37ddbdb11d573fa94524815ea5a144", size = 1725662, upload-time = "2025-11-04T02:42:47.528Z" }, + { url = "https://files.pythonhosted.org/packages/54/c3/fe1a9f8968d5ce2d3b674e397c2bf01961e32a72b723817478c67c9780e3/apache_tvm_ffi-0.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d7602bc37019387a4705677b6e742059c7e1973a899b6918af235febcb3d3b47", size = 1884278, upload-time = "2025-11-04T02:42:48.998Z" }, + { url = "https://files.pythonhosted.org/packages/24/b9/80cbba18b2d7d9013031d8c13671986912275b9ca6aaea70a1dd9b361c39/apache_tvm_ffi-0.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7941f82a2ae4549f55c07d82d37c5765628d70f29dace98628393fcea525e870", size = 1957018, upload-time = "2025-11-04T02:42:50.538Z" }, + { url = "https://files.pythonhosted.org/packages/b4/0c/d27beb98d6841a3929468648433ed2c53e4da953fadb73c754b9372b2356/apache_tvm_ffi-0.1.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e0d6d8e0888ee3a3defd2cbe1eff7a65c05900b4e8fa0e18c890048fc6a44a6", size = 1839279, upload-time = "2025-11-04T02:42:52.438Z" }, + { url = "https://files.pythonhosted.org/packages/0f/10/d7cf7779c65047ad2ca652234a174c2908d936cb69bc4f5156e17382fa91/apache_tvm_ffi-0.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:549c2150e1c2d7ca7912cad173f62a192aec90cd981c024bd246161283ea5d78", size = 1950476, upload-time = "2025-11-04T02:42:54.159Z" }, + { url = "https://files.pythonhosted.org/packages/53/71/bb5ee4bca52a37a8f9580ab1f1de1be5366808a194981c324a756dabbe15/apache_tvm_ffi-0.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fbcfe526b458bc8edeafdc769388782d3bb4321c46a987e50bcece93ae78af8", size = 1711278, upload-time = "2025-11-04T02:42:55.56Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1e/f8d16dbe2303d1e7348037b4207d6c1093c554573484c97c8f3cde61a060/apache_tvm_ffi-0.1.1-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:f2c0164a5c6286f9c333ddedeb448b855cbc1225688d0a4c9aeab006ddfa1180", size = 1701072, upload-time = "2025-11-04T02:42:57.28Z" }, + { url = "https://files.pythonhosted.org/packages/3d/47/f7a55e9b5b741f901ed9101a3ef46fd250f2c1519a6479e055432ff4f308/apache_tvm_ffi-0.1.1-cp312-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:33cc35738e0c44f2a67e550457b6b7dc7de9109ca64422a9e7063b1ba43c336e", size = 1854467, upload-time = "2025-11-04T02:43:00.158Z" }, + { url = "https://files.pythonhosted.org/packages/f2/db/f3adbe1e2d092fbb18908971a25ceb5496669ec65d01a28b7dd57f471ae0/apache_tvm_ffi-0.1.1-cp312-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e9db6484259120b1bdc600f736084ee3d574775b1f4a3e8fef110323e3a9d2b6", size = 1930968, upload-time = "2025-11-04T02:43:01.96Z" }, + { url = "https://files.pythonhosted.org/packages/3b/da/7f678675ccc8af1c7d313322f3875e2c829f1faaa58c0d982431beeb3b3e/apache_tvm_ffi-0.1.1-cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7bd812058ce9046cb69fd7b3e18538d1d0eefa1719822a1441b00bb841f7af4", size = 1811173, upload-time = "2025-11-04T02:43:03.404Z" }, + { url = "https://files.pythonhosted.org/packages/e1/11/c8b3b7d69ceebd219dcb06f5e4a3997edea3bc2e0bbdd8f57ae65bba4f2f/apache_tvm_ffi-0.1.1-cp312-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:807def3039fb336a228c120ca8c32eb794bdfd2d7aff218c8611f287ad913736", size = 1922690, upload-time = "2025-11-04T02:43:04.846Z" }, + { url = "https://files.pythonhosted.org/packages/fd/0b/f816735d761049e53eb388264238655f58fcb42a31e0d1848a4fb6a6556b/apache_tvm_ffi-0.1.1-cp312-abi3-win_amd64.whl", hash = "sha256:624b4430ca3949f85fffd9ef498ebaf1155ff0ac659fc764eec6c6fd66ec7986", size = 1690969, upload-time = "2025-11-04T02:43:06.581Z" }, + { url = "https://files.pythonhosted.org/packages/12/aa/df81df8f8b39d3c41fbac41b1e6661d192d9987a3ef317fabcefecf727a6/apache_tvm_ffi-0.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c93d9de81c1ba9560fcc696cf84d777f88016eb53f05ee2d6288ddcb95a5e72f", size = 1732582, upload-time = "2025-11-04T02:43:08.042Z" }, + { url = "https://files.pythonhosted.org/packages/a8/55/861090532e4accd855e119f0e67e0e482b42abb866c9505edd8956148ebc/apache_tvm_ffi-0.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f9e0227179a0ce83384132b34757fd05f492270f1c031eae615870a5641b5039", size = 1870196, upload-time = "2025-11-04T02:43:09.911Z" }, + { url = "https://files.pythonhosted.org/packages/2a/c6/470493934559e371ad699e1764649176efc5e022267c6dd0a565217177ad/apache_tvm_ffi-0.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:78e75e193d675b9639e6fd0c33c60c3a4259d4c9f848f60baa6a3194df7e1fea", size = 1941999, upload-time = "2025-11-04T02:43:11.467Z" }, + { url = "https://files.pythonhosted.org/packages/85/b8/84eba0d266c9b10beae59a6863ef5c68044e20a6f12d46a42116e80db774/apache_tvm_ffi-0.1.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49792622720421525a18e378d848411731d32fcb05a00b6e54b84d05ff46cc22", size = 1823965, upload-time = "2025-11-04T02:43:12.941Z" }, + { url = "https://files.pythonhosted.org/packages/64/73/ca73a43260a1374b1f34d0e6fcf6f8af16f66867a89dfd562b26184af1bd/apache_tvm_ffi-0.1.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:039293086d44e7f601bf8231e369198afe7ad38986330969ddb1a5fc7622976b", size = 1933779, upload-time = "2025-11-04T02:43:14.543Z" }, + { url = "https://files.pythonhosted.org/packages/5b/91/687c3b9ff3313addeebc1188ac50b299a82944ef1784b91890fc6f250ebd/apache_tvm_ffi-0.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:3f6cbd214bee2e52719d5264f05a2685c955ae7b096980f0361d917a5a9f47a6", size = 1751905, upload-time = "2025-11-04T02:43:16.286Z" }, +] + +[[package]] +name = "apscheduler" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tzlocal" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/81/192db4f8471de5bc1f0d098783decffb1e6e69c4f8b4bc6711094691950b/apscheduler-3.11.1.tar.gz", hash = "sha256:0db77af6400c84d1747fe98a04b8b58f0080c77d11d338c4f507a9752880f221", size = 108044, upload-time = "2025-10-31T18:55:42.819Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/9f/d3c76f76c73fcc959d28e9def45b8b1cc3d7722660c5003b19c1022fd7f4/apscheduler-3.11.1-py3-none-any.whl", hash = "sha256:6162cb5683cb09923654fa9bdd3130c4be4bfda6ad8990971c9597ecd52965d2", size = 64278, upload-time = "2025-10-31T18:55:41.186Z" }, +] + +[[package]] +name = "async-timeout" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, +] + +[[package]] +name = "attrs" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, +] + +[[package]] +name = "azure-core" +version = "1.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/83/41c9371c8298999c67b007e308a0a3c4d6a59c6908fa9c62101f031f886f/azure_core-1.37.0.tar.gz", hash = "sha256:7064f2c11e4b97f340e8e8c6d923b822978be3016e46b7bc4aa4b337cfb48aee", size = 357620, upload-time = "2025-12-11T20:05:13.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/34/a9914e676971a13d6cc671b1ed172f9804b50a3a80a143ff196e52f4c7ee/azure_core-1.37.0-py3-none-any.whl", hash = "sha256:b3abe2c59e7d6bb18b38c275a5029ff80f98990e7c90a5e646249a56630fcc19", size = 214006, upload-time = "2025-12-11T20:05:14.96Z" }, +] + +[[package]] +name = "azure-identity" +version = "1.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "azure-core" }, + { name = "cryptography" }, + { name = "msal" }, + { name = "msal-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/8d/1a6c41c28a37eab26dc85ab6c86992c700cd3f4a597d9ed174b0e9c69489/azure_identity-1.25.1.tar.gz", hash = "sha256:87ca8328883de6036443e1c37b40e8dc8fb74898240f61071e09d2e369361456", size = 279826, upload-time = "2025-10-06T20:30:02.194Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/7b/5652771e24fff12da9dde4c20ecf4682e606b104f26419d139758cc935a6/azure_identity-1.25.1-py3-none-any.whl", hash = "sha256:e9edd720af03dff020223cd269fa3a61e8f345ea75443858273bcb44844ab651", size = 191317, upload-time = "2025-10-06T20:30:04.251Z" }, +] + +[[package]] +name = "azure-storage-blob" +version = "12.27.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "azure-core" }, + { name = "cryptography" }, + { name = "isodate" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/7c/2fd872e11a88163f208b9c92de273bf64bb22d0eef9048cc6284d128a77a/azure_storage_blob-12.27.1.tar.gz", hash = "sha256:a1596cc4daf5dac9be115fcb5db67245eae894cf40e4248243754261f7b674a6", size = 597579, upload-time = "2025-10-29T12:27:16.185Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/9e/1c90a122ea6180e8c72eb7294adc92531b0e08eb3d2324c2ba70d37f4802/azure_storage_blob-12.27.1-py3-none-any.whl", hash = "sha256:65d1e25a4628b7b6acd20ff7902d8da5b4fde8e46e19c8f6d213a3abc3ece272", size = 428954, upload-time = "2025-10-29T12:27:18.072Z" }, +] + +[[package]] +name = "backoff" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/d7/5bbeb12c44d7c4f2fb5b56abce497eb5ed9f34d85701de869acedd602619/backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", size = 17001, upload-time = "2022-10-05T19:19:32.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148, upload-time = "2022-10-05T19:19:30.546Z" }, +] + +[[package]] +name = "boto3" +version = "1.36.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c8/c6/ec86c6eafc942dbddffcaa4eb623373bf94ecf38fab0ab3e7f9fe7051e62/boto3-1.36.0.tar.gz", hash = "sha256:159898f51c2997a12541c0e02d6e5a8fe2993ddb307b9478fd9a339f98b57e00", size = 111035, upload-time = "2025-01-15T21:37:38.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/36/b91f560a0ed11f7f90ac59554cbc52340158ce24db879a7c8faa68ff1cef/boto3-1.36.0-py3-none-any.whl", hash = "sha256:d0ca7a58ce25701a52232cc8df9d87854824f1f2964b929305722ebc7959d5a9", size = 139165, upload-time = "2025-01-15T21:37:35.343Z" }, +] + +[[package]] +name = "botocore" +version = "1.36.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/db/caa8778cf98ecbe0ad0efd7fbf673e2d036373386582e15dffff80bf16e1/botocore-1.36.26.tar.gz", hash = "sha256:4a63bcef7ecf6146fd3a61dc4f9b33b7473b49bdaf1770e9aaca6eee0c9eab62", size = 13574958, upload-time = "2025-02-21T20:28:07.114Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/0c/a3eeca35b22ac8f441d412881582a5f3b8665de0269baf9fdeb8e86d7f1c/botocore-1.36.26-py3-none-any.whl", hash = "sha256:4e3f19913887a58502e71ef8d696fe7eaa54de7813ff73390cd5883f837dfa6e", size = 13360675, upload-time = "2025-02-21T20:28:02.987Z" }, +] + +[[package]] +name = "cbor2" +version = "5.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/b8/c0f6a7d46f816cb18b1fda61a2fe648abe16039f1ff93ea720a6e9fb3cee/cbor2-5.7.1.tar.gz", hash = "sha256:7a405a1d7c8230ee9acf240aad48ae947ef584e8af05f169f3c1bde8f01f8b71", size = 102467, upload-time = "2025-10-24T09:23:06.569Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/08/a9b3e777ace829d9d782f0a80877085af24708d73bd1c41c296aeba4ebac/cbor2-5.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a0fc6cc50e0aa04e54792e7824e65bf66c691ae2948d7c012153df2bab1ee314", size = 67914, upload-time = "2025-10-24T09:22:05.395Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b5/1c23af80b279d5ec336c57e41a53bf8158e2ec3610b415cbc74887145d5d/cbor2-5.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c2fe69c1473d18d102f1e20982edab5bfa543fa1cda9888bdecc49f8b2f3d720", size = 68445, upload-time = "2025-10-24T09:22:06.93Z" }, + { url = "https://files.pythonhosted.org/packages/f6/76/4d14dce9acd92333a249c676579e4879c492efda142c91c242044a70816d/cbor2-5.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34cbbe4fcf82080412a641984a0be43dfe66eac50a8f45596da63fde36189450", size = 254506, upload-time = "2025-10-24T09:22:08.264Z" }, + { url = "https://files.pythonhosted.org/packages/b0/70/d835e91d53bc9df4d77764262489b6de505cfa400799a6625e9368391ea7/cbor2-5.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fc3d3f00aed397a1e4634b8e1780f347aad191a2e1e7768a233baadd4f87561", size = 247760, upload-time = "2025-10-24T09:22:09.497Z" }, + { url = "https://files.pythonhosted.org/packages/29/c7/7fe1c82b5ddb00a407f016ca0de0560e47b3f6c15228478911b3b9ffb0e2/cbor2-5.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:99e1666887a868e619096e9b5953734efd034f577e078f4efc5abd23dc1bcd32", size = 250188, upload-time = "2025-10-24T09:22:10.803Z" }, + { url = "https://files.pythonhosted.org/packages/49/fd/40887b1aee3270284d2e9ac6740566a554cb6fd7ca9f251d7e1ee86ba1c3/cbor2-5.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:59b78c90a5e682e7d004586fb662be6e451ec06f32fc3a738bbfb9576c72ecc9", size = 244190, upload-time = "2025-10-24T09:22:12.294Z" }, + { url = "https://files.pythonhosted.org/packages/81/ba/9a91f4046c9a101fc68c23913c916d1fbcb6fae11d6a6f574f91c26ed31a/cbor2-5.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:6300e0322e52f831892054f1ccf25e67fa8040664963d358db090f29d8976ae4", size = 68150, upload-time = "2025-10-24T09:22:13.394Z" }, + { url = "https://files.pythonhosted.org/packages/12/1e/aad24a2fe0b54353e19aaad06f7d7eb2d835dc4f5bbf5882f98be20e8744/cbor2-5.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:7badbde0d89eb7c8b9f7ef8e4f2395c02cfb24b514815656fef8e23276a7cd36", size = 64123, upload-time = "2025-10-24T09:22:14.669Z" }, + { url = "https://files.pythonhosted.org/packages/52/67/319baac9c51de0053f58fa74a9548f93f3629aa3adeebd7d2c99d1379370/cbor2-5.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2b1efbe6e82721be44b9faf47d0fd97b0150213eb6a4ba554f4947442bc4e13f", size = 67894, upload-time = "2025-10-24T09:22:16.081Z" }, + { url = "https://files.pythonhosted.org/packages/2c/53/d23d0a234a4a098b019ac1cadd33631c973142fc947a68c4a38ca47aa5dc/cbor2-5.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fb94bab27e00283bdd8f160e125e17dbabec4c9e6ffc8da91c36547ec1eb707f", size = 68444, upload-time = "2025-10-24T09:22:17.136Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a2/a6fa59e1c23b0bc77628d64153eb9fc69ac8dde5f8ed41a7d5316fcd0bcd/cbor2-5.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29f22266b5e08e0e4152e87ba185e04d3a84a4fd545b99ae3ebe42c658c66a53", size = 261600, upload-time = "2025-10-24T09:22:18.293Z" }, + { url = "https://files.pythonhosted.org/packages/3d/cb/e0fa066aa7a09b15b8f56bafef6b2be19d9db31310310b0a5601af5c0128/cbor2-5.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25d4c7554d6627da781c9bd1d0dd0709456eecb71f605829f98961bb98487dda", size = 254904, upload-time = "2025-10-24T09:22:19.645Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d5/b1fb4a3828c440e100a4b2658dd2e8f422faf08f4fcc8e2c92b240656b44/cbor2-5.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1e15c3a08008cf13ce1dfc64d17c960df5d66d935788d28ec7df54bf0ffb0ef", size = 257388, upload-time = "2025-10-24T09:22:20.805Z" }, + { url = "https://files.pythonhosted.org/packages/34/d5/252657bc5af964fc5f19c0e0e82031b4c32eba5d3ed4098e963e0e8c47a6/cbor2-5.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9f6cdf7eb604ea0e7ef34e3f0b5447da0029ecd3ab7b2dc70e43fa5f7bcfca89", size = 251494, upload-time = "2025-10-24T09:22:21.986Z" }, + { url = "https://files.pythonhosted.org/packages/8a/3a/503ea4c2977411858ca287808d077fdb4bb1fafdb4b39177b8ce3d5619ac/cbor2-5.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:dd25cbef8e8e6dbf69f0de95311aecaca7217230cda83ae99fdc37cd20d99250", size = 68147, upload-time = "2025-10-24T09:22:23.136Z" }, + { url = "https://files.pythonhosted.org/packages/49/9e/fe4c9703fd444da193f892787110c5da2a85c16d26917fcb2584f5d00077/cbor2-5.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:40cc9c67242a7abac5a4e062bc4d1d2376979878c0565a4b2f08fd9ed9212945", size = 64126, upload-time = "2025-10-24T09:22:24.197Z" }, + { url = "https://files.pythonhosted.org/packages/56/54/48426472f0c051982c647331441aed09b271a0500356ae0b7054c813d174/cbor2-5.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd5ca44891c06f6b85d440836c967187dc1d30b15f86f315d55c675d3a841078", size = 69031, upload-time = "2025-10-24T09:22:25.438Z" }, + { url = "https://files.pythonhosted.org/packages/d3/68/1dd58c7706e9752188358223db58c83f3c48e07f728aa84221ffd244652f/cbor2-5.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:537d73ef930ccc1a7b6a2e8d2cbf81407d270deb18e40cda5eb511bd70f71078", size = 68825, upload-time = "2025-10-24T09:22:26.497Z" }, + { url = "https://files.pythonhosted.org/packages/09/4e/380562fe9f9995a1875fb5ec26fd041e19d61f4630cb690a98c5195945fc/cbor2-5.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:edbf814dd7763b6eda27a5770199f6ccd55bd78be8f4367092460261bfbf19d0", size = 286222, upload-time = "2025-10-24T09:22:27.546Z" }, + { url = "https://files.pythonhosted.org/packages/7c/bb/9eccdc1ea3c4d5c7cdb2e49b9de49534039616be5455ce69bd64c0b2efe2/cbor2-5.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fc81da8c0e09beb42923e455e477b36ff14a03b9ca18a8a2e9b462de9a953e8", size = 285688, upload-time = "2025-10-24T09:22:28.651Z" }, + { url = "https://files.pythonhosted.org/packages/59/8c/4696d82f5bd04b3d45d9a64ec037fa242630c134e3218d6c252b4f59b909/cbor2-5.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e4a7d660d428911a3aadb7105e94438d7671ab977356fdf647a91aab751033bd", size = 277063, upload-time = "2025-10-24T09:22:29.775Z" }, + { url = "https://files.pythonhosted.org/packages/95/50/6538e44ca970caaad2fa376b81701d073d84bf597aac07a59d0a253b1a7f/cbor2-5.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:228e0af9c0a9ddf6375b6ae010eaa1942a1901d403f134ac9ee6a76a322483f9", size = 278334, upload-time = "2025-10-24T09:22:30.904Z" }, + { url = "https://files.pythonhosted.org/packages/64/a9/156ccd2207fb26b5b61d23728b4dbdc595d1600125aa79683a4a8ddc9313/cbor2-5.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:2d08a6c0d9ed778448e185508d870f4160ba74f59bb17a966abd0d14d0ff4dd3", size = 68404, upload-time = "2025-10-24T09:22:32.108Z" }, + { url = "https://files.pythonhosted.org/packages/4f/49/adc53615e9dd32c4421f6935dfa2235013532c6e6b28ee515bbdd92618be/cbor2-5.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:752506cfe72da0f4014b468b30191470ee8919a64a0772bd3b36a4fccf5fcefc", size = 64047, upload-time = "2025-10-24T09:22:33.147Z" }, + { url = "https://files.pythonhosted.org/packages/16/b1/51fb868fe38d893c570bb90b38d365ff0f00421402c1ae8f63b31b25d665/cbor2-5.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:59d5da59fffe89692d5bd1530eef4d26e4eb7aa794aaa1f4e192614786409009", size = 69068, upload-time = "2025-10-24T09:22:34.464Z" }, + { url = "https://files.pythonhosted.org/packages/b9/db/5abc62ec456f552f617aac3359a5d7114b23be9c4d886169592cd5f074b9/cbor2-5.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:533117918d518e01348f8cd0331271c207e7224b9a1ed492a0ff00847f28edc8", size = 68927, upload-time = "2025-10-24T09:22:35.458Z" }, + { url = "https://files.pythonhosted.org/packages/9a/c2/58d787395c99874d2a2395b3a22c9d48a3cfc5a7dcd5817bf74764998b75/cbor2-5.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8d6d9436ff3c3323ea5863ecf7ae1139590991685b44b9eb6b7bb1734a594af6", size = 285185, upload-time = "2025-10-24T09:22:36.867Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9c/b680b264a8f4b9aa59c95e166c816275a13138cbee92dd2917f58bca47b9/cbor2-5.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:661b871ca754a619fcd98c13a38b4696b2b57dab8b24235c00b0ba322c040d24", size = 284440, upload-time = "2025-10-24T09:22:38.08Z" }, + { url = "https://files.pythonhosted.org/packages/1f/59/68183c655d6226d0eee10027f52516882837802a8d5746317a88362ed686/cbor2-5.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8065aa90d715fd9bb28727b2d774ee16e695a0e1627ae76e54bf19f9d99d63f", size = 276876, upload-time = "2025-10-24T09:22:39.561Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a2/1964e0a569d2b81e8f4862753fee7701ae5773c22e45492a26f92f62e75a/cbor2-5.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cb1b7047d73590cfe8e373e2c804fa99be47e55b1b6186602d0f86f384cecec1", size = 278216, upload-time = "2025-10-24T09:22:41.132Z" }, + { url = "https://files.pythonhosted.org/packages/00/78/9b566d68cb88bb1ecebe354765625161c9d6060a16e55008006d6359f776/cbor2-5.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:31d511df7ebd6624fdb4cecdafb4ffb9a205f9ff8c8d98edd1bef0d27f944d74", size = 68451, upload-time = "2025-10-24T09:22:42.227Z" }, + { url = "https://files.pythonhosted.org/packages/db/85/7a6a922d147d027fd5d8fd5224b39e8eaf152a42e8cf16351458096d3d62/cbor2-5.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:f5d37f7b0f84394d2995bd8722cb01c86a885c4821a864a34b7b4d9950c5e26e", size = 64111, upload-time = "2025-10-24T09:22:43.213Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f0/f220222a57371e33434ba7bdc25de31d611cbc0ade2a868e03c3553305e7/cbor2-5.7.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e5826e4fa4c33661960073f99cf67c82783895524fb66f3ebdd635c19b5a7d68", size = 69002, upload-time = "2025-10-24T09:22:44.316Z" }, + { url = "https://files.pythonhosted.org/packages/c7/3c/34b62ba5173541659f248f005d13373530f02fb997b78fde00bf01ede4f4/cbor2-5.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f19a00d6ac9a77cb611073250b06bf4494b41ba78a1716704f7008e0927d9366", size = 69177, upload-time = "2025-10-24T09:22:45.711Z" }, + { url = "https://files.pythonhosted.org/packages/77/fd/2400d820d9733df00a5c18aa74201e51d710fb91588687eb594f4a7688ea/cbor2-5.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2113aea044cd172f199da3520bc4401af69eae96c5180ca7eb660941928cb89", size = 284259, upload-time = "2025-10-24T09:22:46.749Z" }, + { url = "https://files.pythonhosted.org/packages/42/65/280488ef196c1d71ba123cd406ea47727bb3a0e057767a733d9793fcc428/cbor2-5.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f17eacea2d28fecf28ac413c1d7927cde0a11957487d2630655d6b5c9c46a0b", size = 281958, upload-time = "2025-10-24T09:22:48.876Z" }, + { url = "https://files.pythonhosted.org/packages/42/82/bcdd3fdc73bd5f4194fdb08c808112010add9530bae1dcfdb1e2b2ceae19/cbor2-5.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d65deea39cae533a629561e7da672402c46731122b6129ed7c8eaa1efe04efce", size = 276025, upload-time = "2025-10-24T09:22:50.147Z" }, + { url = "https://files.pythonhosted.org/packages/ae/a8/a6065dd6a157b877d7d8f3fe96f410fb191a2db1e6588f4d20b5f9a507c2/cbor2-5.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:57d8cc29ec1fd20500748e0e767ff88c13afcee839081ba4478c41fcda6ee18b", size = 275978, upload-time = "2025-10-24T09:22:51.873Z" }, + { url = "https://files.pythonhosted.org/packages/62/f4/37934045174af9e4253a340b43f07197af54002070cb80fae82d878f1f14/cbor2-5.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:94fb939d0946f80c49ba45105ca3a3e13e598fc9abd63efc6661b02d4b4d2c50", size = 70269, upload-time = "2025-10-24T09:22:53.275Z" }, + { url = "https://files.pythonhosted.org/packages/0b/fd/933416643e7f5540ae818691fb23fa4189010c6efa39a12c4f59d825da28/cbor2-5.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4fd7225ac820bbb9f03bd16bc1a7efb6c4d1c451f22c0a153ff4ec46495c59c5", size = 66182, upload-time = "2025-10-24T09:22:54.697Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7d/383bafeabb54c17fe5b6d5aca4e863e6b7df10bcc833b34aa169e9dfce1a/cbor2-5.7.1-py3-none-any.whl", hash = "sha256:68834e4eff2f56629ce6422b0634bc3f74c5a4269de5363f5265fe452c706ba7", size = 23829, upload-time = "2025-10-24T09:23:05.54Z" }, +] + +[[package]] +name = "certifi" +version = "2025.11.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", size = 209709, upload-time = "2025-10-14T04:40:11.385Z" }, + { url = "https://files.pythonhosted.org/packages/5c/af/1f9d7f7faafe2ddfb6f72a2e07a548a629c61ad510fe60f9630309908fef/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", size = 148814, upload-time = "2025-10-14T04:40:13.135Z" }, + { url = "https://files.pythonhosted.org/packages/79/3d/f2e3ac2bbc056ca0c204298ea4e3d9db9b4afe437812638759db2c976b5f/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", size = 144467, upload-time = "2025-10-14T04:40:14.728Z" }, + { url = "https://files.pythonhosted.org/packages/ec/85/1bf997003815e60d57de7bd972c57dc6950446a3e4ccac43bc3070721856/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", size = 162280, upload-time = "2025-10-14T04:40:16.14Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8e/6aa1952f56b192f54921c436b87f2aaf7c7a7c3d0d1a765547d64fd83c13/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", size = 159454, upload-time = "2025-10-14T04:40:17.567Z" }, + { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", size = 153609, upload-time = "2025-10-14T04:40:19.08Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/6a13396948b8fd3c4b4fd5bc74d045f5637d78c9675585e8e9fbe5636554/charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", size = 151849, upload-time = "2025-10-14T04:40:20.607Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7a/59482e28b9981d105691e968c544cc0df3b7d6133152fb3dcdc8f135da7a/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", size = 151586, upload-time = "2025-10-14T04:40:21.719Z" }, + { url = "https://files.pythonhosted.org/packages/92/59/f64ef6a1c4bdd2baf892b04cd78792ed8684fbc48d4c2afe467d96b4df57/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", size = 145290, upload-time = "2025-10-14T04:40:23.069Z" }, + { url = "https://files.pythonhosted.org/packages/6b/63/3bf9f279ddfa641ffa1962b0db6a57a9c294361cc2f5fcac997049a00e9c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", size = 163663, upload-time = "2025-10-14T04:40:24.17Z" }, + { url = "https://files.pythonhosted.org/packages/ed/09/c9e38fc8fa9e0849b172b581fd9803bdf6e694041127933934184e19f8c3/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", size = 151964, upload-time = "2025-10-14T04:40:25.368Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d1/d28b747e512d0da79d8b6a1ac18b7ab2ecfd81b2944c4c710e166d8dd09c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", size = 161064, upload-time = "2025-10-14T04:40:26.806Z" }, + { url = "https://files.pythonhosted.org/packages/bb/9a/31d62b611d901c3b9e5500c36aab0ff5eb442043fb3a1c254200d3d397d9/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", size = 155015, upload-time = "2025-10-14T04:40:28.284Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/107e008fa2bff0c8b9319584174418e5e5285fef32f79d8ee6a430d0039c/charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", size = 99792, upload-time = "2025-10-14T04:40:29.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/66/e396e8a408843337d7315bab30dbf106c38966f1819f123257f5520f8a96/charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", size = 107198, upload-time = "2025-10-14T04:40:30.644Z" }, + { url = "https://files.pythonhosted.org/packages/b5/58/01b4f815bf0312704c267f2ccb6e5d42bcc7752340cd487bc9f8c3710597/charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", size = 100262, upload-time = "2025-10-14T04:40:32.108Z" }, + { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, + { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, + { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, + { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, + { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, + { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, + { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, + { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, + { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, + { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, + { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, + { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, + { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, + { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, + { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, + { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, + { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, + { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, + { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, + { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, + { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, + { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, + { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, + { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, + { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, + { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, + { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, + { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, + { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, + { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, + { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, + { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, + { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "click" +version = "8.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "croniter" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "pytz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ad/2f/44d1ae153a0e27be56be43465e5cb39b9650c781e001e7864389deb25090/croniter-6.0.0.tar.gz", hash = "sha256:37c504b313956114a983ece2c2b07790b1f1094fe9d81cc94739214748255577", size = 64481, upload-time = "2024-12-17T17:17:47.32Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/4b/290b4c3efd6417a8b0c284896de19b1d5855e6dbdb97d2a35e68fa42de85/croniter-6.0.0-py2.py3-none-any.whl", hash = "sha256:2f878c3856f17896979b2a4379ba1f09c83e374931ea15cc835c5dd2eee9b368", size = 25468, upload-time = "2024-12-17T17:17:45.359Z" }, +] + +[[package]] +name = "cryptography" +version = "46.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, + { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, + { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, + { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, + { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, + { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, + { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, + { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, + { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e2/a510aa736755bffa9d2f75029c229111a1d02f8ecd5de03078f4c18d91a3/cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217", size = 7158012, upload-time = "2025-10-15T23:17:19.982Z" }, + { url = "https://files.pythonhosted.org/packages/73/dc/9aa866fbdbb95b02e7f9d086f1fccfeebf8953509b87e3f28fff927ff8a0/cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5", size = 4288728, upload-time = "2025-10-15T23:17:21.527Z" }, + { url = "https://files.pythonhosted.org/packages/c5/fd/bc1daf8230eaa075184cbbf5f8cd00ba9db4fd32d63fb83da4671b72ed8a/cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715", size = 4435078, upload-time = "2025-10-15T23:17:23.042Z" }, + { url = "https://files.pythonhosted.org/packages/82/98/d3bd5407ce4c60017f8ff9e63ffee4200ab3e23fe05b765cab805a7db008/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54", size = 4293460, upload-time = "2025-10-15T23:17:24.885Z" }, + { url = "https://files.pythonhosted.org/packages/26/e9/e23e7900983c2b8af7a08098db406cf989d7f09caea7897e347598d4cd5b/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459", size = 3995237, upload-time = "2025-10-15T23:17:26.449Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/af68c509d4a138cfe299d0d7ddb14afba15233223ebd933b4bbdbc7155d3/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422", size = 4967344, upload-time = "2025-10-15T23:17:28.06Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e3/8643d077c53868b681af077edf6b3cb58288b5423610f21c62aadcbe99f4/cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7", size = 4466564, upload-time = "2025-10-15T23:17:29.665Z" }, + { url = "https://files.pythonhosted.org/packages/0e/43/c1e8726fa59c236ff477ff2b5dc071e54b21e5a1e51aa2cee1676f1c986f/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044", size = 4292415, upload-time = "2025-10-15T23:17:31.686Z" }, + { url = "https://files.pythonhosted.org/packages/42/f9/2f8fefdb1aee8a8e3256a0568cffc4e6d517b256a2fe97a029b3f1b9fe7e/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665", size = 4931457, upload-time = "2025-10-15T23:17:33.478Z" }, + { url = "https://files.pythonhosted.org/packages/79/30/9b54127a9a778ccd6d27c3da7563e9f2d341826075ceab89ae3b41bf5be2/cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3", size = 4466074, upload-time = "2025-10-15T23:17:35.158Z" }, + { url = "https://files.pythonhosted.org/packages/ac/68/b4f4a10928e26c941b1b6a179143af9f4d27d88fe84a6a3c53592d2e76bf/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20", size = 4420569, upload-time = "2025-10-15T23:17:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/a3/49/3746dab4c0d1979888f125226357d3262a6dd40e114ac29e3d2abdf1ec55/cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de", size = 4681941, upload-time = "2025-10-15T23:17:39.236Z" }, + { url = "https://files.pythonhosted.org/packages/fd/30/27654c1dbaf7e4a3531fa1fc77986d04aefa4d6d78259a62c9dc13d7ad36/cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914", size = 3022339, upload-time = "2025-10-15T23:17:40.888Z" }, + { url = "https://files.pythonhosted.org/packages/f6/30/640f34ccd4d2a1bc88367b54b926b781b5a018d65f404d409aba76a84b1c/cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db", size = 3494315, upload-time = "2025-10-15T23:17:42.769Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8b/88cc7e3bd0a8e7b861f26981f7b820e1f46aa9d26cc482d0feba0ecb4919/cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21", size = 2919331, upload-time = "2025-10-15T23:17:44.468Z" }, + { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, + { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, + { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, + { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, + { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, + { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, + { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, + { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cd/1a8633802d766a0fa46f382a77e096d7e209e0817892929655fe0586ae32/cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32", size = 3689163, upload-time = "2025-10-15T23:18:13.821Z" }, + { url = "https://files.pythonhosted.org/packages/4c/59/6b26512964ace6480c3e54681a9859c974172fb141c38df11eadd8416947/cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c", size = 3429474, upload-time = "2025-10-15T23:18:15.477Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/e60e46adab4362a682cf142c7dcb5bf79b782ab2199b0dcb81f55970807f/cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", size = 3698132, upload-time = "2025-10-15T23:18:17.056Z" }, + { url = "https://files.pythonhosted.org/packages/da/38/f59940ec4ee91e93d3311f7532671a5cef5570eb04a144bf203b58552d11/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", size = 4243992, upload-time = "2025-10-15T23:18:18.695Z" }, + { url = "https://files.pythonhosted.org/packages/b0/0c/35b3d92ddebfdfda76bb485738306545817253d0a3ded0bfe80ef8e67aa5/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", size = 4409944, upload-time = "2025-10-15T23:18:20.597Z" }, + { url = "https://files.pythonhosted.org/packages/99/55/181022996c4063fc0e7666a47049a1ca705abb9c8a13830f074edb347495/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", size = 4242957, upload-time = "2025-10-15T23:18:22.18Z" }, + { url = "https://files.pythonhosted.org/packages/ba/af/72cd6ef29f9c5f731251acadaeb821559fe25f10852f44a63374c9ca08c1/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", size = 4409447, upload-time = "2025-10-15T23:18:24.209Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "13.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/63/579402b642f5b9b8ceb79e456b39b5771f27e132a8af3b140e54d69790fc/cuda_bindings-13.1.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4400370a83f1538e25ed4c18c34a0e9d5fad39741e282e69ce24d1479a11017d", size = 15777291, upload-time = "2025-12-09T22:05:41.109Z" }, + { url = "https://files.pythonhosted.org/packages/df/6a/3a293cfb01cd4964444a0f75917b6edb1c31ea69d0230e329975da6991ba/cuda_bindings-13.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f92500e2f6aec2dac00a5a1ce77d5aa77ea77b606dc484d951f1f2cc3eaa13", size = 16311623, upload-time = "2025-12-09T22:05:43.897Z" }, + { url = "https://files.pythonhosted.org/packages/72/b8/a5860b9e70faa53658236dc61efc3ecc51846beff4a0b73de9151130ff98/cuda_bindings-13.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:3f5bb8190267216f96597235252087accac4cbccefd1b60756cced114b2d6754", size = 15185932, upload-time = "2025-12-09T22:05:46.089Z" }, + { url = "https://files.pythonhosted.org/packages/b0/58/b8d4c7c5fb29ba46088a7e78d1065484219f8fe41a08adc4a85b1ee56149/cuda_bindings-13.1.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5f5a6ade0ad45096568bc4dd1eb3377b65884d29124338fe9a4353130ef6631", size = 15771605, upload-time = "2025-12-09T22:05:48.266Z" }, + { url = "https://files.pythonhosted.org/packages/17/af/710403f76f2d608d483d87089465e1f666351641dbd73d19bd025e652bad/cuda_bindings-13.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9348f69b03b257f07159dd4c869615e139722c2bd81e96c66f6b8f77615efd82", size = 16338970, upload-time = "2025-12-09T22:05:50.598Z" }, + { url = "https://files.pythonhosted.org/packages/64/1c/e7ea27d4cb7d07331c88e3bbed3cacc947d2237471801086c7447b3e195d/cuda_bindings-13.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ec33b84f4bd65a86a734427f2b9cb8f221bedab2c4cfb681488cabc82f1d64ab", size = 15210672, upload-time = "2025-12-09T22:05:53.369Z" }, + { url = "https://files.pythonhosted.org/packages/53/3d/c8ed9d169843091f3f0d6b8218e826fd59520a37e0434c204feada597988/cuda_bindings-13.1.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e75ad0cb863330df784236d289612d71ca855c013d19ae00e5693574abd6915", size = 15530160, upload-time = "2025-12-09T22:05:55.386Z" }, + { url = "https://files.pythonhosted.org/packages/4a/8e/368295623ee43fba622909d780fbb6863efc1638dff55f67a0f04eac6470/cuda_bindings-13.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25785d1a3cdcd98f151240fd5efd025609319a6720a217dee2a929241749d488", size = 16110386, upload-time = "2025-12-09T22:05:57.71Z" }, + { url = "https://files.pythonhosted.org/packages/60/1f/ecc4701ade3e85f091c625a920574527b9daf7fb354189fbfbc5516af6cd/cuda_bindings-13.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:ccde9c95c0e953b31fe7731bb08da9d0a34b1770498df9a3c156fdfdbe3951ad", size = 15250028, upload-time = "2025-12-09T22:06:00.346Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c1/0ee8fd94bab7e23116e0e3da8c0902e299f3d9edc95f1d7d8ef894c897ed/cuda_bindings-13.1.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c9822a57c8f952dc367aacd7c32fe4cb17371104383606f455ea74635bff4c7", size = 15421116, upload-time = "2025-12-09T22:06:02.994Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c2/f272fad414b96299e010dcbe510cf17fc25deaf3443e0fdb55020a8298a3/cuda_bindings-13.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5837f5ea422c5653626dcfe22e9ab68142cd19af9e67a226100f224cc25a1b99", size = 15940152, upload-time = "2025-12-09T22:06:05.079Z" }, + { url = "https://files.pythonhosted.org/packages/2a/56/433093bec0121f031edb582ea3a72f71031e8fbebecaaf329809344da4c7/cuda_bindings-13.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:9e4f348cd7a779657d51e6f71aac3965fb1738f40ff3bbe75265a3242fd6f29f", size = 15216463, upload-time = "2025-12-09T22:06:07.296Z" }, + { url = "https://files.pythonhosted.org/packages/de/38/40416d037ed25db68f1dbd50e0232775a62d90c9f25af22b196c0a13b88c/cuda_bindings-13.1.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:86258fe1b0d3998bea7f57dc891569e4996705b8dd00366e44c722d0a29b2090", size = 15498927, upload-time = "2025-12-09T22:06:09.476Z" }, + { url = "https://files.pythonhosted.org/packages/ac/3f/f1f88b6cdb7d41ba076f8ff10edf6d3bd17e740da9a163544b43d6349653/cuda_bindings-13.1.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:daf8468fd603b2724c2d16cbd499348c64916ed72b1d04643f1660ce13cd12ae", size = 15984539, upload-time = "2025-12-09T22:06:11.882Z" }, + { url = "https://files.pythonhosted.org/packages/f6/33/7739cc5e9a3373df8e7dea9060528bee5f70cf6e28b9c14f765502816c71/cuda_bindings-13.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:f2e079182014dbc162562b46467815272c14c7afe5b988978fa968728b0ac726", size = 15373212, upload-time = "2025-12-09T22:06:13.989Z" }, + { url = "https://files.pythonhosted.org/packages/9e/0a/5c6d514e566ff86c4054bbbb6554bf49b9c55fefbc934eb456faecab53c9/cuda_bindings-13.1.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d0cd96a6ec00a78235947bff9462b2139bc5b83ce8e297d865802f0b52d1e23d", size = 15403944, upload-time = "2025-12-09T22:06:16.315Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5b/319cfa491a685d4d4757aa24223b6dbc0976954afac42f49fc47290ba6a3/cuda_bindings-13.1.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff465829c6c394c2b4047250324a19925cf8c44633345b2746a4741e07bf827", size = 15911462, upload-time = "2025-12-09T22:06:18.403Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5c/38b92080c5b6c4ddb09f0be2536123f81c7e9e1a89e4573f20cb00347ee3/cuda_bindings-13.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:8205eee6b8b458a2110c0384923ace206855d0f1b436fc1b145fcbaa1653b501", size = 16044390, upload-time = "2025-12-09T22:06:20.945Z" }, +] + +[[package]] +name = "cuda-pathfinder" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/02/4dbe7568a42e46582248942f54dc64ad094769532adbe21e525e4edf7bc4/cuda_pathfinder-1.3.3-py3-none-any.whl", hash = "sha256:9984b664e404f7c134954a771be8775dfd6180ea1e1aef4a5a37d4be05d9bbb1", size = 27154, upload-time = "2025-12-04T22:35:08.996Z" }, +] + +[[package]] +name = "cuda-python" +version = "13.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-bindings" }, + { name = "cuda-pathfinder" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/08/b5e3b9822662d72d540d830531e3ab6a7cabbda3dd56175696aabccfeb76/cuda_python-13.1.1-py3-none-any.whl", hash = "sha256:944cc4fe6482673d28dd545797a28840945a1668739328fa2ad1e9be4f7050d9", size = 8038, upload-time = "2025-12-09T22:13:10.719Z" }, +] + +[[package]] +name = "cupy-cuda12x" +version = "13.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastrlock" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/2e/db22c5148884e4e384f6ebbc7971fa3710f3ba67ca492798890a0fdebc45/cupy_cuda12x-13.6.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:9e37f60f27ff9625dfdccc4688a09852707ec613e32ea9404f425dd22a386d14", size = 126341714, upload-time = "2025-08-18T08:24:08.335Z" }, + { url = "https://files.pythonhosted.org/packages/53/2b/8064d94a6ab6b5c4e643d8535ab6af6cabe5455765540931f0ef60a0bc3b/cupy_cuda12x-13.6.0-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:e78409ea72f5ac7d6b6f3d33d99426a94005254fa57e10617f430f9fd7c3a0a1", size = 112238589, upload-time = "2025-08-18T08:24:15.541Z" }, + { url = "https://files.pythonhosted.org/packages/de/7b/bac3ca73e164d2b51c6298620261637c7286e06d373f597b036fc45f5563/cupy_cuda12x-13.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f33c9c975782ef7a42c79b6b4fb3d5b043498f9b947126d792592372b432d393", size = 89874119, upload-time = "2025-08-18T08:24:20.628Z" }, + { url = "https://files.pythonhosted.org/packages/54/64/71c6e08f76c06639e5112f69ee3bc1129be00054ad5f906d7fd3138af579/cupy_cuda12x-13.6.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:c790d012fd4d86872b9c89af9f5f15d91c30b8e3a4aa4dd04c2610f45f06ac44", size = 128016458, upload-time = "2025-08-18T08:24:26.394Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d9/5c5077243cd92368c3eccecdbf91d76db15db338169042ffd1647533c6b1/cupy_cuda12x-13.6.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:77ba6745a130d880c962e687e4e146ebbb9014f290b0a80dbc4e4634eb5c3b48", size = 113039337, upload-time = "2025-08-18T08:24:31.814Z" }, + { url = "https://files.pythonhosted.org/packages/88/f5/02bea5cdf108e2a66f98e7d107b4c9a6709e5dbfedf663340e5c11719d83/cupy_cuda12x-13.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:a20b7acdc583643a623c8d8e3efbe0db616fbcf5916e9c99eedf73859b6133af", size = 89885526, upload-time = "2025-08-18T08:24:37.258Z" }, + { url = "https://files.pythonhosted.org/packages/12/c5/7e7fc4816d0de0154e5d9053242c3a08a0ca8b43ee656a6f7b3b95055a7b/cupy_cuda12x-13.6.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a6970ceefe40f9acbede41d7fe17416bd277b1bd2093adcde457b23b578c5a59", size = 127334633, upload-time = "2025-08-18T08:24:43.065Z" }, + { url = "https://files.pythonhosted.org/packages/e0/95/d7e1295141e7d530674a3cc567e13ed0eb6b81524cb122d797ed996b5bea/cupy_cuda12x-13.6.0-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:79b0cacb5e8b190ef409f9e03f06ac8de1b021b0c0dda47674d446f5557e0eb1", size = 112886268, upload-time = "2025-08-18T08:24:49.294Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/14555b63fd78cfac7b88af0094cea0a3cb845d243661ec7da69f7b3ea0de/cupy_cuda12x-13.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca06fede7b8b83ca9ad80062544ef2e5bb8d4762d1c4fc3ac8349376de9c8a5e", size = 89785108, upload-time = "2025-08-18T08:24:54.527Z" }, + { url = "https://files.pythonhosted.org/packages/19/ec/f62cb991f11fb41291c4c15b6936d7b67ffa71ddb344ad6e8894e06ce58d/cupy_cuda12x-13.6.0-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e5426ae3b1b9cf59927481e457a89e3f0b50a35b114a8034ec9110e7a833434c", size = 126904601, upload-time = "2025-08-18T08:24:59.951Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b8/30127bcdac53a25f94ee201bf4802fcd8d012145567d77c54174d6d01c01/cupy_cuda12x-13.6.0-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:52d9e7f83d920da7d81ec2e791c2c2c747fdaa1d7b811971b34865ce6371e98a", size = 112654824, upload-time = "2025-08-18T08:25:05.944Z" }, + { url = "https://files.pythonhosted.org/packages/72/36/c9e24acb19f039f814faea880b3704a3661edaa6739456b73b27540663e3/cupy_cuda12x-13.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:297b4268f839de67ef7865c2202d3f5a0fb8d20bd43360bc51b6e60cb4406447", size = 89750580, upload-time = "2025-08-18T08:25:10.972Z" }, +] + +[[package]] +name = "datasets" +version = "4.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, + { name = "filelock" }, + { name = "fsspec", extra = ["http"] }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "multiprocess" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/bf/0dae295d6d1ba0b1a200a9dd216838464b5bbd05da01407cb1330b377445/datasets-4.4.1.tar.gz", hash = "sha256:80322699aa8c0bbbdb7caa87906da689c3c2e29523cff698775c67f28fdab1fc", size = 585341, upload-time = "2025-11-05T16:00:38.162Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/5e/6f8d874366788ad5d549e9ba258037d974dda6e004843be1bda794571701/datasets-4.4.1-py3-none-any.whl", hash = "sha256:c1163de5211e42546079ab355cc0250c7e6db16eb209ac5ac6252f801f596c44", size = 511591, upload-time = "2025-11-05T16:00:36.365Z" }, +] + +[[package]] +name = "dill" +version = "0.3.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/43/86fe3f9e130c4137b0f1b50784dd70a5087b911fe07fa81e53e0c4c47fea/dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c", size = 187000, upload-time = "2024-09-29T00:03:20.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/d1/e73b6ad76f0b1fb7f23c35c6d95dbc506a9c8804f43dda8cb5b0fa6331fd/dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a", size = 119418, upload-time = "2024-09-29T00:03:19.344Z" }, +] + +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "einops" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/81/df4fbe24dff8ba3934af99044188e20a98ed441ad17a274539b74e82e126/einops-0.8.1.tar.gz", hash = "sha256:de5d960a7a761225532e0f1959e5315ebeafc0cd43394732f103ca44b9837e84", size = 54805, upload-time = "2025-02-09T03:17:00.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/62/9773de14fe6c45c23649e98b83231fffd7b9892b6cf863251dc2afa73643/einops-0.8.1-py3-none-any.whl", hash = "sha256:919387eb55330f5757c6bea9165c5ff5cfe63a642682ea788a6d472576d81737", size = 64359, upload-time = "2025-02-09T03:17:01.998Z" }, +] + +[[package]] +name = "email-validator" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "fastapi" +version = "0.125.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/17/71/2df15009fb4bdd522a069d2fbca6007c6c5487fce5cb965be00fc335f1d1/fastapi-0.125.0.tar.gz", hash = "sha256:16b532691a33e2c5dee1dac32feb31dc6eb41a3dd4ff29a95f9487cb21c054c0", size = 370550, upload-time = "2025-12-17T21:41:44.15Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/2f/ff2fcc98f500713368d8b650e1bbc4a0b3ebcdd3e050dcdaad5f5a13fd7e/fastapi-0.125.0-py3-none-any.whl", hash = "sha256:2570ec4f3aecf5cca8f0428aed2398b774fcdfee6c2116f86e80513f2f86a7a1", size = 112888, upload-time = "2025-12-17T21:41:41.286Z" }, +] + +[[package]] +name = "fastapi-sso" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastapi" }, + { name = "httpx" }, + { name = "oauthlib" }, + { name = "pydantic", extra = ["email"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/9b/25c43c928b46ec919cb8941d3de53dd2e12bab12e1c0182646425dbefd60/fastapi_sso-0.16.0.tar.gz", hash = "sha256:f3941f986347566b7d3747c710cf474a907f581bfb6697ff3bb3e44eb76b438c", size = 16555, upload-time = "2024-11-04T11:54:38.579Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/84/df15745ff06c1b44e478b72759d5cf48e4583e221389d4cdea76c472dd1c/fastapi_sso-0.16.0-py3-none-any.whl", hash = "sha256:3a66a942474ef9756d3a9d8b945d55bd9faf99781facdb9b87a40b73d6d6b0c3", size = 23942, upload-time = "2024-11-04T11:54:37.189Z" }, +] + +[[package]] +name = "fastrlock" +version = "0.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/b1/1c3d635d955f2b4bf34d45abf8f35492e04dbd7804e94ce65d9f928ef3ec/fastrlock-0.8.3.tar.gz", hash = "sha256:4af6734d92eaa3ab4373e6c9a1dd0d5ad1304e172b1521733c6c3b3d73c8fa5d", size = 79327, upload-time = "2024-12-17T11:03:39.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/02/3f771177380d8690812d5b2b7736dc6b6c8cd1c317e4572e65f823eede08/fastrlock-0.8.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:cc5fa9166e05409f64a804d5b6d01af670979cdb12cd2594f555cb33cdc155bd", size = 55094, upload-time = "2024-12-17T11:01:49.721Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/aae7ed94b8122c325d89eb91336084596cebc505dc629b795fcc9629606d/fastrlock-0.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7a77ebb0a24535ef4f167da2c5ee35d9be1e96ae192137e9dc3ff75b8dfc08a5", size = 48220, upload-time = "2024-12-17T11:01:51.071Z" }, + { url = "https://files.pythonhosted.org/packages/96/87/9807af47617fdd65c68b0fcd1e714542c1d4d3a1f1381f591f1aa7383a53/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d51f7fb0db8dab341b7f03a39a3031678cf4a98b18533b176c533c122bfce47d", size = 49551, upload-time = "2024-12-17T11:01:52.316Z" }, + { url = "https://files.pythonhosted.org/packages/9d/12/e201634810ac9aee59f93e3953cb39f98157d17c3fc9d44900f1209054e9/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:767ec79b7f6ed9b9a00eb9ff62f2a51f56fdb221c5092ab2dadec34a9ccbfc6e", size = 49398, upload-time = "2024-12-17T11:01:53.514Z" }, + { url = "https://files.pythonhosted.org/packages/15/a1/439962ed439ff6f00b7dce14927e7830e02618f26f4653424220a646cd1c/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d6a77b3f396f7d41094ef09606f65ae57feeb713f4285e8e417f4021617ca62", size = 53334, upload-time = "2024-12-17T11:01:55.518Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9e/1ae90829dd40559ab104e97ebe74217d9da794c4bb43016da8367ca7a596/fastrlock-0.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:92577ff82ef4a94c5667d6d2841f017820932bc59f31ffd83e4a2c56c1738f90", size = 52495, upload-time = "2024-12-17T11:01:57.76Z" }, + { url = "https://files.pythonhosted.org/packages/e5/8c/5e746ee6f3d7afbfbb0d794c16c71bfd5259a4e3fb1dda48baf31e46956c/fastrlock-0.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3df8514086e16bb7c66169156a8066dc152f3be892c7817e85bf09a27fa2ada2", size = 51972, upload-time = "2024-12-17T11:02:01.384Z" }, + { url = "https://files.pythonhosted.org/packages/76/a7/8b91068f00400931da950f143fa0f9018bd447f8ed4e34bed3fe65ed55d2/fastrlock-0.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:001fd86bcac78c79658bac496e8a17472d64d558cd2227fdc768aa77f877fe40", size = 30946, upload-time = "2024-12-17T11:02:03.491Z" }, + { url = "https://files.pythonhosted.org/packages/90/9e/647951c579ef74b6541493d5ca786d21a0b2d330c9514ba2c39f0b0b0046/fastrlock-0.8.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:f68c551cf8a34b6460a3a0eba44bd7897ebfc820854e19970c52a76bf064a59f", size = 55233, upload-time = "2024-12-17T11:02:04.795Z" }, + { url = "https://files.pythonhosted.org/packages/be/91/5f3afba7d14b8b7d60ac651375f50fff9220d6ccc3bef233d2bd74b73ec7/fastrlock-0.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:55d42f6286b9d867370af4c27bc70d04ce2d342fe450c4a4fcce14440514e695", size = 48911, upload-time = "2024-12-17T11:02:06.173Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7a/e37bd72d7d70a8a551b3b4610d028bd73ff5d6253201d5d3cf6296468bee/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:bbc3bf96dcbd68392366c477f78c9d5c47e5d9290cb115feea19f20a43ef6d05", size = 50357, upload-time = "2024-12-17T11:02:07.418Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ef/a13b8bab8266840bf38831d7bf5970518c02603d00a548a678763322d5bf/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:77ab8a98417a1f467dafcd2226718f7ca0cf18d4b64732f838b8c2b3e4b55cb5", size = 50222, upload-time = "2024-12-17T11:02:08.745Z" }, + { url = "https://files.pythonhosted.org/packages/01/e2/5e5515562b2e9a56d84659377176aef7345da2c3c22909a1897fe27e14dd/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04bb5eef8f460d13b8c0084ea5a9d3aab2c0573991c880c0a34a56bb14951d30", size = 54553, upload-time = "2024-12-17T11:02:10.925Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8f/65907405a8cdb2fc8beaf7d09a9a07bb58deff478ff391ca95be4f130b70/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c9d459ce344c21ff03268212a1845aa37feab634d242131bc16c2a2355d5f65", size = 53362, upload-time = "2024-12-17T11:02:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b9/ae6511e52738ba4e3a6adb7c6a20158573fbc98aab448992ece25abb0b07/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33e6fa4af4f3af3e9c747ec72d1eadc0b7ba2035456c2afb51c24d9e8a56f8fd", size = 52836, upload-time = "2024-12-17T11:02:13.74Z" }, + { url = "https://files.pythonhosted.org/packages/88/3e/c26f8192c93e8e43b426787cec04bb46ac36e72b1033b7fe5a9267155fdf/fastrlock-0.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:5e5f1665d8e70f4c5b4a67f2db202f354abc80a321ce5a26ac1493f055e3ae2c", size = 31046, upload-time = "2024-12-17T11:02:15.033Z" }, + { url = "https://files.pythonhosted.org/packages/00/df/56270f2e10c1428855c990e7a7e5baafa9e1262b8e789200bd1d047eb501/fastrlock-0.8.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:8cb2cf04352ea8575d496f31b3b88c42c7976e8e58cdd7d1550dfba80ca039da", size = 55727, upload-time = "2024-12-17T11:02:17.26Z" }, + { url = "https://files.pythonhosted.org/packages/57/21/ea1511b0ef0d5457efca3bf1823effb9c5cad4fc9dca86ce08e4d65330ce/fastrlock-0.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:85a49a1f1e020097d087e1963e42cea6f307897d5ebe2cb6daf4af47ffdd3eed", size = 52201, upload-time = "2024-12-17T11:02:19.512Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/cdecb7aa976f34328372f1c4efd6c9dc1b039b3cc8d3f38787d640009a25/fastrlock-0.8.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5f13ec08f1adb1aa916c384b05ecb7dbebb8df9ea81abd045f60941c6283a670", size = 53924, upload-time = "2024-12-17T11:02:20.85Z" }, + { url = "https://files.pythonhosted.org/packages/88/6d/59c497f8db9a125066dd3a7442fab6aecbe90d6fec344c54645eaf311666/fastrlock-0.8.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0ea4e53a04980d646def0f5e4b5e8bd8c7884288464acab0b37ca0c65c482bfe", size = 52140, upload-time = "2024-12-17T11:02:22.263Z" }, + { url = "https://files.pythonhosted.org/packages/62/04/9138943c2ee803d62a48a3c17b69de2f6fa27677a6896c300369e839a550/fastrlock-0.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:38340f6635bd4ee2a4fb02a3a725759fe921f2ca846cb9ca44531ba739cc17b4", size = 53261, upload-time = "2024-12-17T11:02:24.418Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4b/db35a52589764c7745a613b6943bbd018f128d42177ab92ee7dde88444f6/fastrlock-0.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:da06d43e1625e2ffddd303edcd6d2cd068e1c486f5fd0102b3f079c44eb13e2c", size = 31235, upload-time = "2024-12-17T11:02:25.708Z" }, + { url = "https://files.pythonhosted.org/packages/92/74/7b13d836c3f221cff69d6f418f46c2a30c4b1fe09a8ce7db02eecb593185/fastrlock-0.8.3-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:5264088185ca8e6bc83181dff521eee94d078c269c7d557cc8d9ed5952b7be45", size = 54157, upload-time = "2024-12-17T11:02:29.196Z" }, + { url = "https://files.pythonhosted.org/packages/06/77/f06a907f9a07d26d0cca24a4385944cfe70d549a2c9f1c3e3217332f4f12/fastrlock-0.8.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a98ba46b3e14927550c4baa36b752d0d2f7387b8534864a8767f83cce75c160", size = 50954, upload-time = "2024-12-17T11:02:32.12Z" }, + { url = "https://files.pythonhosted.org/packages/f9/4e/94480fb3fd93991dd6f4e658b77698edc343f57caa2870d77b38c89c2e3b/fastrlock-0.8.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dbdea6deeccea1917c6017d353987231c4e46c93d5338ca3e66d6cd88fbce259", size = 52535, upload-time = "2024-12-17T11:02:33.402Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a7/ee82bb55b6c0ca30286dac1e19ee9417a17d2d1de3b13bb0f20cefb86086/fastrlock-0.8.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c6e5bfecbc0d72ff07e43fed81671747914d6794e0926700677ed26d894d4f4f", size = 50942, upload-time = "2024-12-17T11:02:34.688Z" }, + { url = "https://files.pythonhosted.org/packages/63/1d/d4b7782ef59e57dd9dde69468cc245adafc3674281905e42fa98aac30a79/fastrlock-0.8.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:2a83d558470c520ed21462d304e77a12639859b205759221c8144dd2896b958a", size = 52044, upload-time = "2024-12-17T11:02:36.613Z" }, + { url = "https://files.pythonhosted.org/packages/28/a3/2ad0a0a69662fd4cf556ab8074f0de978ee9b56bff6ddb4e656df4aa9e8e/fastrlock-0.8.3-cp313-cp313-win_amd64.whl", hash = "sha256:8d1d6a28291b4ace2a66bd7b49a9ed9c762467617febdd9ab356b867ed901af8", size = 30472, upload-time = "2024-12-17T11:02:37.983Z" }, +] + +[[package]] +name = "fastuuid" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/7d/d9daedf0f2ebcacd20d599928f8913e9d2aea1d56d2d355a93bfa2b611d7/fastuuid-0.14.0.tar.gz", hash = "sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26", size = 18232, upload-time = "2025-10-19T22:19:22.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/b2/731a6696e37cd20eed353f69a09f37a984a43c9713764ee3f7ad5f57f7f9/fastuuid-0.14.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:6e6243d40f6c793c3e2ee14c13769e341b90be5ef0c23c82fa6515a96145181a", size = 516760, upload-time = "2025-10-19T22:25:21.509Z" }, + { url = "https://files.pythonhosted.org/packages/c5/79/c73c47be2a3b8734d16e628982653517f80bbe0570e27185d91af6096507/fastuuid-0.14.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:13ec4f2c3b04271f62be2e1ce7e95ad2dd1cf97e94503a3760db739afbd48f00", size = 264748, upload-time = "2025-10-19T22:41:52.873Z" }, + { url = "https://files.pythonhosted.org/packages/24/c5/84c1eea05977c8ba5173555b0133e3558dc628bcf868d6bf1689ff14aedc/fastuuid-0.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b2fdd48b5e4236df145a149d7125badb28e0a383372add3fbaac9a6b7a394470", size = 254537, upload-time = "2025-10-19T22:33:55.603Z" }, + { url = "https://files.pythonhosted.org/packages/0e/23/4e362367b7fa17dbed646922f216b9921efb486e7abe02147e4b917359f8/fastuuid-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f74631b8322d2780ebcf2d2d75d58045c3e9378625ec51865fe0b5620800c39d", size = 278994, upload-time = "2025-10-19T22:26:17.631Z" }, + { url = "https://files.pythonhosted.org/packages/b2/72/3985be633b5a428e9eaec4287ed4b873b7c4c53a9639a8b416637223c4cd/fastuuid-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83cffc144dc93eb604b87b179837f2ce2af44871a7b323f2bfed40e8acb40ba8", size = 280003, upload-time = "2025-10-19T22:23:45.415Z" }, + { url = "https://files.pythonhosted.org/packages/b3/6d/6ef192a6df34e2266d5c9deb39cd3eea986df650cbcfeaf171aa52a059c3/fastuuid-0.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a771f135ab4523eb786e95493803942a5d1fc1610915f131b363f55af53b219", size = 303583, upload-time = "2025-10-19T22:26:00.756Z" }, + { url = "https://files.pythonhosted.org/packages/9d/11/8a2ea753c68d4fece29d5d7c6f3f903948cc6e82d1823bc9f7f7c0355db3/fastuuid-0.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4edc56b877d960b4eda2c4232f953a61490c3134da94f3c28af129fb9c62a4f6", size = 460955, upload-time = "2025-10-19T22:36:25.196Z" }, + { url = "https://files.pythonhosted.org/packages/23/42/7a32c93b6ce12642d9a152ee4753a078f372c9ebb893bc489d838dd4afd5/fastuuid-0.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bcc96ee819c282e7c09b2eed2b9bd13084e3b749fdb2faf58c318d498df2efbe", size = 480763, upload-time = "2025-10-19T22:24:28.451Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e9/a5f6f686b46e3ed4ed3b93770111c233baac87dd6586a411b4988018ef1d/fastuuid-0.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7a3c0bca61eacc1843ea97b288d6789fbad7400d16db24e36a66c28c268cfe3d", size = 452613, upload-time = "2025-10-19T22:25:06.827Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c9/18abc73c9c5b7fc0e476c1733b678783b2e8a35b0be9babd423571d44e98/fastuuid-0.14.0-cp310-cp310-win32.whl", hash = "sha256:7f2f3efade4937fae4e77efae1af571902263de7b78a0aee1a1653795a093b2a", size = 155045, upload-time = "2025-10-19T22:28:32.732Z" }, + { url = "https://files.pythonhosted.org/packages/5e/8a/d9e33f4eb4d4f6d9f2c5c7d7e96b5cdbb535c93f3b1ad6acce97ee9d4bf8/fastuuid-0.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ae64ba730d179f439b0736208b4c279b8bc9c089b102aec23f86512ea458c8a4", size = 156122, upload-time = "2025-10-19T22:23:15.59Z" }, + { url = "https://files.pythonhosted.org/packages/98/f3/12481bda4e5b6d3e698fbf525df4443cc7dce746f246b86b6fcb2fba1844/fastuuid-0.14.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34", size = 516386, upload-time = "2025-10-19T22:42:40.176Z" }, + { url = "https://files.pythonhosted.org/packages/59/19/2fc58a1446e4d72b655648eb0879b04e88ed6fa70d474efcf550f640f6ec/fastuuid-0.14.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7", size = 264569, upload-time = "2025-10-19T22:25:50.977Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/3c74756e5b02c40cfcc8b1d8b5bac4edbd532b55917a6bcc9113550e99d1/fastuuid-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1", size = 254366, upload-time = "2025-10-19T22:29:49.166Z" }, + { url = "https://files.pythonhosted.org/packages/52/96/d761da3fccfa84f0f353ce6e3eb8b7f76b3aa21fd25e1b00a19f9c80a063/fastuuid-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc", size = 278978, upload-time = "2025-10-19T22:35:41.306Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c2/f84c90167cc7765cb82b3ff7808057608b21c14a38531845d933a4637307/fastuuid-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8", size = 279692, upload-time = "2025-10-19T22:25:36.997Z" }, + { url = "https://files.pythonhosted.org/packages/af/7b/4bacd03897b88c12348e7bd77943bac32ccf80ff98100598fcff74f75f2e/fastuuid-0.14.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7", size = 303384, upload-time = "2025-10-19T22:29:46.578Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a2/584f2c29641df8bd810d00c1f21d408c12e9ad0c0dafdb8b7b29e5ddf787/fastuuid-0.14.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73", size = 460921, upload-time = "2025-10-19T22:36:42.006Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/c6b77443bb7764c760e211002c8638c0c7cce11cb584927e723215ba1398/fastuuid-0.14.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36", size = 480575, upload-time = "2025-10-19T22:28:18.975Z" }, + { url = "https://files.pythonhosted.org/packages/5a/87/93f553111b33f9bb83145be12868c3c475bf8ea87c107063d01377cc0e8e/fastuuid-0.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94", size = 452317, upload-time = "2025-10-19T22:25:32.75Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8c/a04d486ca55b5abb7eaa65b39df8d891b7b1635b22db2163734dc273579a/fastuuid-0.14.0-cp311-cp311-win32.whl", hash = "sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24", size = 154804, upload-time = "2025-10-19T22:24:15.615Z" }, + { url = "https://files.pythonhosted.org/packages/9c/b2/2d40bf00820de94b9280366a122cbaa60090c8cf59e89ac3938cf5d75895/fastuuid-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa", size = 156099, upload-time = "2025-10-19T22:24:31.646Z" }, + { url = "https://files.pythonhosted.org/packages/02/a2/e78fcc5df65467f0d207661b7ef86c5b7ac62eea337c0c0fcedbeee6fb13/fastuuid-0.14.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a", size = 510164, upload-time = "2025-10-19T22:31:45.635Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b3/c846f933f22f581f558ee63f81f29fa924acd971ce903dab1a9b6701816e/fastuuid-0.14.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d", size = 261837, upload-time = "2025-10-19T22:38:38.53Z" }, + { url = "https://files.pythonhosted.org/packages/54/ea/682551030f8c4fa9a769d9825570ad28c0c71e30cf34020b85c1f7ee7382/fastuuid-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070", size = 251370, upload-time = "2025-10-19T22:40:26.07Z" }, + { url = "https://files.pythonhosted.org/packages/14/dd/5927f0a523d8e6a76b70968e6004966ee7df30322f5fc9b6cdfb0276646a/fastuuid-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796", size = 277766, upload-time = "2025-10-19T22:37:23.779Z" }, + { url = "https://files.pythonhosted.org/packages/16/6e/c0fb547eef61293153348f12e0f75a06abb322664b34a1573a7760501336/fastuuid-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09", size = 278105, upload-time = "2025-10-19T22:26:56.821Z" }, + { url = "https://files.pythonhosted.org/packages/2d/b1/b9c75e03b768f61cf2e84ee193dc18601aeaf89a4684b20f2f0e9f52b62c/fastuuid-0.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8", size = 301564, upload-time = "2025-10-19T22:30:31.604Z" }, + { url = "https://files.pythonhosted.org/packages/fc/fa/f7395fdac07c7a54f18f801744573707321ca0cee082e638e36452355a9d/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741", size = 459659, upload-time = "2025-10-19T22:31:32.341Z" }, + { url = "https://files.pythonhosted.org/packages/66/49/c9fd06a4a0b1f0f048aacb6599e7d96e5d6bc6fa680ed0d46bf111929d1b/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057", size = 478430, upload-time = "2025-10-19T22:26:22.962Z" }, + { url = "https://files.pythonhosted.org/packages/be/9c/909e8c95b494e8e140e8be6165d5fc3f61fdc46198c1554df7b3e1764471/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8", size = 450894, upload-time = "2025-10-19T22:27:01.647Z" }, + { url = "https://files.pythonhosted.org/packages/90/eb/d29d17521976e673c55ef7f210d4cdd72091a9ec6755d0fd4710d9b3c871/fastuuid-0.14.0-cp312-cp312-win32.whl", hash = "sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176", size = 154374, upload-time = "2025-10-19T22:29:19.879Z" }, + { url = "https://files.pythonhosted.org/packages/cc/fc/f5c799a6ea6d877faec0472d0b27c079b47c86b1cdc577720a5386483b36/fastuuid-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397", size = 156550, upload-time = "2025-10-19T22:27:49.658Z" }, + { url = "https://files.pythonhosted.org/packages/a5/83/ae12dd39b9a39b55d7f90abb8971f1a5f3c321fd72d5aa83f90dc67fe9ed/fastuuid-0.14.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:77a09cb7427e7af74c594e409f7731a0cf887221de2f698e1ca0ebf0f3139021", size = 510720, upload-time = "2025-10-19T22:42:34.633Z" }, + { url = "https://files.pythonhosted.org/packages/53/b0/a4b03ff5d00f563cc7546b933c28cb3f2a07344b2aec5834e874f7d44143/fastuuid-0.14.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:9bd57289daf7b153bfa3e8013446aa144ce5e8c825e9e366d455155ede5ea2dc", size = 262024, upload-time = "2025-10-19T22:30:25.482Z" }, + { url = "https://files.pythonhosted.org/packages/9c/6d/64aee0a0f6a58eeabadd582e55d0d7d70258ffdd01d093b30c53d668303b/fastuuid-0.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ac60fc860cdf3c3f327374db87ab8e064c86566ca8c49d2e30df15eda1b0c2d5", size = 251679, upload-time = "2025-10-19T22:36:14.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/f5/a7e9cda8369e4f7919d36552db9b2ae21db7915083bc6336f1b0082c8b2e/fastuuid-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab32f74bd56565b186f036e33129da77db8be09178cd2f5206a5d4035fb2a23f", size = 277862, upload-time = "2025-10-19T22:36:23.302Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d3/8ce11827c783affffd5bd4d6378b28eb6cc6d2ddf41474006b8d62e7448e/fastuuid-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33e678459cf4addaedd9936bbb038e35b3f6b2061330fd8f2f6a1d80414c0f87", size = 278278, upload-time = "2025-10-19T22:29:43.809Z" }, + { url = "https://files.pythonhosted.org/packages/a2/51/680fb6352d0bbade04036da46264a8001f74b7484e2fd1f4da9e3db1c666/fastuuid-0.14.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e3cc56742f76cd25ecb98e4b82a25f978ccffba02e4bdce8aba857b6d85d87b", size = 301788, upload-time = "2025-10-19T22:36:06.825Z" }, + { url = "https://files.pythonhosted.org/packages/fa/7c/2014b5785bd8ebdab04ec857635ebd84d5ee4950186a577db9eff0fb8ff6/fastuuid-0.14.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cb9a030f609194b679e1660f7e32733b7a0f332d519c5d5a6a0a580991290022", size = 459819, upload-time = "2025-10-19T22:35:31.623Z" }, + { url = "https://files.pythonhosted.org/packages/01/d2/524d4ceeba9160e7a9bc2ea3e8f4ccf1ad78f3bde34090ca0c51f09a5e91/fastuuid-0.14.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:09098762aad4f8da3a888eb9ae01c84430c907a297b97166b8abc07b640f2995", size = 478546, upload-time = "2025-10-19T22:26:03.023Z" }, + { url = "https://files.pythonhosted.org/packages/bc/17/354d04951ce114bf4afc78e27a18cfbd6ee319ab1829c2d5fb5e94063ac6/fastuuid-0.14.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1383fff584fa249b16329a059c68ad45d030d5a4b70fb7c73a08d98fd53bcdab", size = 450921, upload-time = "2025-10-19T22:31:02.151Z" }, + { url = "https://files.pythonhosted.org/packages/fb/be/d7be8670151d16d88f15bb121c5b66cdb5ea6a0c2a362d0dcf30276ade53/fastuuid-0.14.0-cp313-cp313-win32.whl", hash = "sha256:a0809f8cc5731c066c909047f9a314d5f536c871a7a22e815cc4967c110ac9ad", size = 154559, upload-time = "2025-10-19T22:36:36.011Z" }, + { url = "https://files.pythonhosted.org/packages/22/1d/5573ef3624ceb7abf4a46073d3554e37191c868abc3aecd5289a72f9810a/fastuuid-0.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:0df14e92e7ad3276327631c9e7cec09e32572ce82089c55cb1bb8df71cf394ed", size = 156539, upload-time = "2025-10-19T22:33:35.898Z" }, + { url = "https://files.pythonhosted.org/packages/16/c9/8c7660d1fe3862e3f8acabd9be7fc9ad71eb270f1c65cce9a2b7a31329ab/fastuuid-0.14.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:b852a870a61cfc26c884af205d502881a2e59cc07076b60ab4a951cc0c94d1ad", size = 510600, upload-time = "2025-10-19T22:43:44.17Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f4/a989c82f9a90d0ad995aa957b3e572ebef163c5299823b4027986f133dfb/fastuuid-0.14.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c7502d6f54cd08024c3ea9b3514e2d6f190feb2f46e6dbcd3747882264bb5f7b", size = 262069, upload-time = "2025-10-19T22:43:38.38Z" }, + { url = "https://files.pythonhosted.org/packages/da/6c/a1a24f73574ac995482b1326cf7ab41301af0fabaa3e37eeb6b3df00e6e2/fastuuid-0.14.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1ca61b592120cf314cfd66e662a5b54a578c5a15b26305e1b8b618a6f22df714", size = 251543, upload-time = "2025-10-19T22:32:22.537Z" }, + { url = "https://files.pythonhosted.org/packages/1a/20/2a9b59185ba7a6c7b37808431477c2d739fcbdabbf63e00243e37bd6bf49/fastuuid-0.14.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa75b6657ec129d0abded3bec745e6f7ab642e6dba3a5272a68247e85f5f316f", size = 277798, upload-time = "2025-10-19T22:33:53.821Z" }, + { url = "https://files.pythonhosted.org/packages/ef/33/4105ca574f6ded0af6a797d39add041bcfb468a1255fbbe82fcb6f592da2/fastuuid-0.14.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8a0dfea3972200f72d4c7df02c8ac70bad1bb4c58d7e0ec1e6f341679073a7f", size = 278283, upload-time = "2025-10-19T22:29:02.812Z" }, + { url = "https://files.pythonhosted.org/packages/fe/8c/fca59f8e21c4deb013f574eae05723737ddb1d2937ce87cb2a5d20992dc3/fastuuid-0.14.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1bf539a7a95f35b419f9ad105d5a8a35036df35fdafae48fb2fd2e5f318f0d75", size = 301627, upload-time = "2025-10-19T22:35:54.985Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e2/f78c271b909c034d429218f2798ca4e89eeda7983f4257d7865976ddbb6c/fastuuid-0.14.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:9a133bf9cc78fdbd1179cb58a59ad0100aa32d8675508150f3658814aeefeaa4", size = 459778, upload-time = "2025-10-19T22:28:00.999Z" }, + { url = "https://files.pythonhosted.org/packages/1e/f0/5ff209d865897667a2ff3e7a572267a9ced8f7313919f6d6043aed8b1caa/fastuuid-0.14.0-cp314-cp314-musllinux_1_1_i686.whl", hash = "sha256:f54d5b36c56a2d5e1a31e73b950b28a0d83eb0c37b91d10408875a5a29494bad", size = 478605, upload-time = "2025-10-19T22:36:21.764Z" }, + { url = "https://files.pythonhosted.org/packages/e0/c8/2ce1c78f983a2c4987ea865d9516dbdfb141a120fd3abb977ae6f02ba7ca/fastuuid-0.14.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:ec27778c6ca3393ef662e2762dba8af13f4ec1aaa32d08d77f71f2a70ae9feb8", size = 450837, upload-time = "2025-10-19T22:34:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/df/60/dad662ec9a33b4a5fe44f60699258da64172c39bd041da2994422cdc40fe/fastuuid-0.14.0-cp314-cp314-win32.whl", hash = "sha256:e23fc6a83f112de4be0cc1990e5b127c27663ae43f866353166f87df58e73d06", size = 154532, upload-time = "2025-10-19T22:35:18.217Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f6/da4db31001e854025ffd26bc9ba0740a9cbba2c3259695f7c5834908b336/fastuuid-0.14.0-cp314-cp314-win_amd64.whl", hash = "sha256:df61342889d0f5e7a32f7284e55ef95103f2110fee433c2ae7c2c0956d76ac8a", size = 156457, upload-time = "2025-10-19T22:33:44.579Z" }, +] + +[[package]] +name = "filelock" +version = "3.20.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/23/ce7a1126827cedeb958fc043d61745754464eb56c5937c35bbf2b8e26f34/filelock-3.20.1.tar.gz", hash = "sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c", size = 19476, upload-time = "2025-12-15T23:54:28.027Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/7f/a1a97644e39e7316d850784c642093c99df1290a460df4ede27659056834/filelock-3.20.1-py3-none-any.whl", hash = "sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a", size = 16666, upload-time = "2025-12-15T23:54:26.874Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, + { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, + { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, + { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, + { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, + { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, + { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, + { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, + { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, + { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, + { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, + { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, + { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, + { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, + { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, + { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, + { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, + { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, + { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, + { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, + { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, + { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, + { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, + { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, + { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, + { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, + { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, + { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, + { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, + { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, + { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, + { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, + { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, + { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, + { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "fsspec" +version = "2025.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/7f/2747c0d332b9acfa75dc84447a066fdf812b5a6b8d30472b74d309bfe8cb/fsspec-2025.10.0.tar.gz", hash = "sha256:b6789427626f068f9a83ca4e8a3cc050850b6c0f71f99ddb4f542b8266a26a59", size = 309285, upload-time = "2025-10-30T14:58:44.036Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl", hash = "sha256:7c7712353ae7d875407f97715f0e1ffcc21e33d5b24556cb1e090ae9409ec61d", size = 200966, upload-time = "2025-10-30T14:58:42.53Z" }, +] + +[package.optional-dependencies] +http = [ + { name = "aiohttp" }, +] + +[[package]] +name = "grpcio" +version = "1.67.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform != 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform != 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform != 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/20/53/d9282a66a5db45981499190b77790570617a604a38f3d103d0400974aeb5/grpcio-1.67.1.tar.gz", hash = "sha256:3dc2ed4cabea4dc14d5e708c2b426205956077cc5de419b4d4079315017e9732", size = 12580022, upload-time = "2024-10-29T06:30:07.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/cd/f6ca5c49aa0ae7bc6d0757f7dae6f789569e9490a635eaabe02bc02de7dc/grpcio-1.67.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:8b0341d66a57f8a3119b77ab32207072be60c9bf79760fa609c5609f2deb1f3f", size = 5112450, upload-time = "2024-10-29T06:23:38.202Z" }, + { url = "https://files.pythonhosted.org/packages/d4/f0/d9bbb4a83cbee22f738ee7a74aa41e09ccfb2dcea2cc30ebe8dab5b21771/grpcio-1.67.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:f5a27dddefe0e2357d3e617b9079b4bfdc91341a91565111a21ed6ebbc51b22d", size = 10937518, upload-time = "2024-10-29T06:23:43.535Z" }, + { url = "https://files.pythonhosted.org/packages/5b/17/0c5dbae3af548eb76669887642b5f24b232b021afe77eb42e22bc8951d9c/grpcio-1.67.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:43112046864317498a33bdc4797ae6a268c36345a910de9b9c17159d8346602f", size = 5633610, upload-time = "2024-10-29T06:23:47.168Z" }, + { url = "https://files.pythonhosted.org/packages/17/48/e000614e00153d7b2760dcd9526b95d72f5cfe473b988e78f0ff3b472f6c/grpcio-1.67.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9b929f13677b10f63124c1a410994a401cdd85214ad83ab67cc077fc7e480f0", size = 6240678, upload-time = "2024-10-29T06:23:49.352Z" }, + { url = "https://files.pythonhosted.org/packages/64/19/a16762a70eeb8ddfe43283ce434d1499c1c409ceec0c646f783883084478/grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7d1797a8a3845437d327145959a2c0c47c05947c9eef5ff1a4c80e499dcc6fa", size = 5884528, upload-time = "2024-10-29T06:23:52.345Z" }, + { url = "https://files.pythonhosted.org/packages/6b/dc/bd016aa3684914acd2c0c7fa4953b2a11583c2b844f3d7bae91fa9b98fbb/grpcio-1.67.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0489063974d1452436139501bf6b180f63d4977223ee87488fe36858c5725292", size = 6583680, upload-time = "2024-10-29T06:23:55.074Z" }, + { url = "https://files.pythonhosted.org/packages/1a/93/1441cb14c874f11aa798a816d582f9da82194b6677f0f134ea53d2d5dbeb/grpcio-1.67.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9fd042de4a82e3e7aca44008ee2fb5da01b3e5adb316348c21980f7f58adc311", size = 6162967, upload-time = "2024-10-29T06:23:57.286Z" }, + { url = "https://files.pythonhosted.org/packages/29/e9/9295090380fb4339b7e935b9d005fa9936dd573a22d147c9e5bb2df1b8d4/grpcio-1.67.1-cp310-cp310-win32.whl", hash = "sha256:638354e698fd0c6c76b04540a850bf1db27b4d2515a19fcd5cf645c48d3eb1ed", size = 3616336, upload-time = "2024-10-29T06:23:59.69Z" }, + { url = "https://files.pythonhosted.org/packages/ce/de/7c783b8cb8f02c667ca075c49680c4aeb8b054bc69784bcb3e7c1bbf4985/grpcio-1.67.1-cp310-cp310-win_amd64.whl", hash = "sha256:608d87d1bdabf9e2868b12338cd38a79969eaf920c89d698ead08f48de9c0f9e", size = 4352071, upload-time = "2024-10-29T06:24:02.477Z" }, + { url = "https://files.pythonhosted.org/packages/59/2c/b60d6ea1f63a20a8d09c6db95c4f9a16497913fb3048ce0990ed81aeeca0/grpcio-1.67.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:7818c0454027ae3384235a65210bbf5464bd715450e30a3d40385453a85a70cb", size = 5119075, upload-time = "2024-10-29T06:24:04.696Z" }, + { url = "https://files.pythonhosted.org/packages/b3/9a/e1956f7ca582a22dd1f17b9e26fcb8229051b0ce6d33b47227824772feec/grpcio-1.67.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ea33986b70f83844cd00814cee4451055cd8cab36f00ac64a31f5bb09b31919e", size = 11009159, upload-time = "2024-10-29T06:24:07.781Z" }, + { url = "https://files.pythonhosted.org/packages/43/a8/35fbbba580c4adb1d40d12e244cf9f7c74a379073c0a0ca9d1b5338675a1/grpcio-1.67.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c7a01337407dd89005527623a4a72c5c8e2894d22bead0895306b23c6695698f", size = 5629476, upload-time = "2024-10-29T06:24:11.444Z" }, + { url = "https://files.pythonhosted.org/packages/77/c9/864d336e167263d14dfccb4dbfa7fce634d45775609895287189a03f1fc3/grpcio-1.67.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b866f73224b0634f4312a4674c1be21b2b4afa73cb20953cbbb73a6b36c3cc", size = 6239901, upload-time = "2024-10-29T06:24:14.2Z" }, + { url = "https://files.pythonhosted.org/packages/f7/1e/0011408ebabf9bd69f4f87cc1515cbfe2094e5a32316f8714a75fd8ddfcb/grpcio-1.67.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fff78ba10d4250bfc07a01bd6254a6d87dc67f9627adece85c0b2ed754fa96", size = 5881010, upload-time = "2024-10-29T06:24:17.451Z" }, + { url = "https://files.pythonhosted.org/packages/b4/7d/fbca85ee9123fb296d4eff8df566f458d738186d0067dec6f0aa2fd79d71/grpcio-1.67.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8a23cbcc5bb11ea7dc6163078be36c065db68d915c24f5faa4f872c573bb400f", size = 6580706, upload-time = "2024-10-29T06:24:20.038Z" }, + { url = "https://files.pythonhosted.org/packages/75/7a/766149dcfa2dfa81835bf7df623944c1f636a15fcb9b6138ebe29baf0bc6/grpcio-1.67.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1a65b503d008f066e994f34f456e0647e5ceb34cfcec5ad180b1b44020ad4970", size = 6161799, upload-time = "2024-10-29T06:24:22.604Z" }, + { url = "https://files.pythonhosted.org/packages/09/13/5b75ae88810aaea19e846f5380611837de411181df51fd7a7d10cb178dcb/grpcio-1.67.1-cp311-cp311-win32.whl", hash = "sha256:e29ca27bec8e163dca0c98084040edec3bc49afd10f18b412f483cc68c712744", size = 3616330, upload-time = "2024-10-29T06:24:25.775Z" }, + { url = "https://files.pythonhosted.org/packages/aa/39/38117259613f68f072778c9638a61579c0cfa5678c2558706b10dd1d11d3/grpcio-1.67.1-cp311-cp311-win_amd64.whl", hash = "sha256:786a5b18544622bfb1e25cc08402bd44ea83edfb04b93798d85dca4d1a0b5be5", size = 4354535, upload-time = "2024-10-29T06:24:28.614Z" }, + { url = "https://files.pythonhosted.org/packages/6e/25/6f95bd18d5f506364379eabc0d5874873cc7dbdaf0757df8d1e82bc07a88/grpcio-1.67.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:267d1745894200e4c604958da5f856da6293f063327cb049a51fe67348e4f953", size = 5089809, upload-time = "2024-10-29T06:24:31.24Z" }, + { url = "https://files.pythonhosted.org/packages/10/3f/d79e32e5d0354be33a12db2267c66d3cfeff700dd5ccdd09fd44a3ff4fb6/grpcio-1.67.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:85f69fdc1d28ce7cff8de3f9c67db2b0ca9ba4449644488c1e0303c146135ddb", size = 10981985, upload-time = "2024-10-29T06:24:34.942Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/36fbc14b3542e3a1c20fb98bd60c4732c55a44e374a4eb68f91f28f14aab/grpcio-1.67.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f26b0b547eb8d00e195274cdfc63ce64c8fc2d3e2d00b12bf468ece41a0423a0", size = 5588770, upload-time = "2024-10-29T06:24:38.145Z" }, + { url = "https://files.pythonhosted.org/packages/0d/af/bbc1305df60c4e65de8c12820a942b5e37f9cf684ef5e49a63fbb1476a73/grpcio-1.67.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4422581cdc628f77302270ff839a44f4c24fdc57887dc2a45b7e53d8fc2376af", size = 6214476, upload-time = "2024-10-29T06:24:41.006Z" }, + { url = "https://files.pythonhosted.org/packages/92/cf/1d4c3e93efa93223e06a5c83ac27e32935f998bc368e276ef858b8883154/grpcio-1.67.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7616d2ded471231c701489190379e0c311ee0a6c756f3c03e6a62b95a7146e", size = 5850129, upload-time = "2024-10-29T06:24:43.553Z" }, + { url = "https://files.pythonhosted.org/packages/ae/ca/26195b66cb253ac4d5ef59846e354d335c9581dba891624011da0e95d67b/grpcio-1.67.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8a00efecde9d6fcc3ab00c13f816313c040a28450e5e25739c24f432fc6d3c75", size = 6568489, upload-time = "2024-10-29T06:24:46.453Z" }, + { url = "https://files.pythonhosted.org/packages/d1/94/16550ad6b3f13b96f0856ee5dfc2554efac28539ee84a51d7b14526da985/grpcio-1.67.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:699e964923b70f3101393710793289e42845791ea07565654ada0969522d0a38", size = 6149369, upload-time = "2024-10-29T06:24:49.112Z" }, + { url = "https://files.pythonhosted.org/packages/33/0d/4c3b2587e8ad7f121b597329e6c2620374fccbc2e4e1aa3c73ccc670fde4/grpcio-1.67.1-cp312-cp312-win32.whl", hash = "sha256:4e7b904484a634a0fff132958dabdb10d63e0927398273917da3ee103e8d1f78", size = 3599176, upload-time = "2024-10-29T06:24:51.443Z" }, + { url = "https://files.pythonhosted.org/packages/7d/36/0c03e2d80db69e2472cf81c6123aa7d14741de7cf790117291a703ae6ae1/grpcio-1.67.1-cp312-cp312-win_amd64.whl", hash = "sha256:5721e66a594a6c4204458004852719b38f3d5522082be9061d6510b455c90afc", size = 4346574, upload-time = "2024-10-29T06:24:54.587Z" }, + { url = "https://files.pythonhosted.org/packages/12/d2/2f032b7a153c7723ea3dea08bffa4bcaca9e0e5bdf643ce565b76da87461/grpcio-1.67.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:aa0162e56fd10a5547fac8774c4899fc3e18c1aa4a4759d0ce2cd00d3696ea6b", size = 5091487, upload-time = "2024-10-29T06:24:57.416Z" }, + { url = "https://files.pythonhosted.org/packages/d0/ae/ea2ff6bd2475a082eb97db1104a903cf5fc57c88c87c10b3c3f41a184fc0/grpcio-1.67.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:beee96c8c0b1a75d556fe57b92b58b4347c77a65781ee2ac749d550f2a365dc1", size = 10943530, upload-time = "2024-10-29T06:25:01.062Z" }, + { url = "https://files.pythonhosted.org/packages/07/62/646be83d1a78edf8d69b56647327c9afc223e3140a744c59b25fbb279c3b/grpcio-1.67.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:a93deda571a1bf94ec1f6fcda2872dad3ae538700d94dc283c672a3b508ba3af", size = 5589079, upload-time = "2024-10-29T06:25:04.254Z" }, + { url = "https://files.pythonhosted.org/packages/d0/25/71513d0a1b2072ce80d7f5909a93596b7ed10348b2ea4fdcbad23f6017bf/grpcio-1.67.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e6f255980afef598a9e64a24efce87b625e3e3c80a45162d111a461a9f92955", size = 6213542, upload-time = "2024-10-29T06:25:06.824Z" }, + { url = "https://files.pythonhosted.org/packages/76/9a/d21236297111052dcb5dc85cd77dc7bf25ba67a0f55ae028b2af19a704bc/grpcio-1.67.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e838cad2176ebd5d4a8bb03955138d6589ce9e2ce5d51c3ada34396dbd2dba8", size = 5850211, upload-time = "2024-10-29T06:25:10.149Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fe/70b1da9037f5055be14f359026c238821b9bcf6ca38a8d760f59a589aacd/grpcio-1.67.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a6703916c43b1d468d0756c8077b12017a9fcb6a1ef13faf49e67d20d7ebda62", size = 6572129, upload-time = "2024-10-29T06:25:12.853Z" }, + { url = "https://files.pythonhosted.org/packages/74/0d/7df509a2cd2a54814598caf2fb759f3e0b93764431ff410f2175a6efb9e4/grpcio-1.67.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:917e8d8994eed1d86b907ba2a61b9f0aef27a2155bca6cbb322430fc7135b7bb", size = 6149819, upload-time = "2024-10-29T06:25:15.803Z" }, + { url = "https://files.pythonhosted.org/packages/0a/08/bc3b0155600898fd10f16b79054e1cca6cb644fa3c250c0fe59385df5e6f/grpcio-1.67.1-cp313-cp313-win32.whl", hash = "sha256:e279330bef1744040db8fc432becc8a727b84f456ab62b744d3fdb83f327e121", size = 3596561, upload-time = "2024-10-29T06:25:19.348Z" }, + { url = "https://files.pythonhosted.org/packages/5a/96/44759eca966720d0f3e1b105c43f8ad4590c97bf8eb3cd489656e9590baa/grpcio-1.67.1-cp313-cp313-win_amd64.whl", hash = "sha256:fa0c739ad8b1996bd24823950e3cb5152ae91fca1c09cc791190bf1627ffefba", size = 4346042, upload-time = "2024-10-29T06:25:21.939Z" }, +] + +[[package]] +name = "grpcio" +version = "1.76.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version >= '3.14' and sys_platform != 'darwin'", +] +dependencies = [ + { name = "typing-extensions", marker = "python_full_version >= '3.14'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b6/e0/318c1ce3ae5a17894d5791e87aea147587c9e702f24122cc7a5c8bbaeeb1/grpcio-1.76.0.tar.gz", hash = "sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73", size = 12785182, upload-time = "2025-10-21T16:23:12.106Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/17/ff4795dc9a34b6aee6ec379f1b66438a3789cd1315aac0cbab60d92f74b3/grpcio-1.76.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc", size = 5840037, upload-time = "2025-10-21T16:20:25.069Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ff/35f9b96e3fa2f12e1dcd58a4513a2e2294a001d64dec81677361b7040c9a/grpcio-1.76.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde", size = 11836482, upload-time = "2025-10-21T16:20:30.113Z" }, + { url = "https://files.pythonhosted.org/packages/3e/1c/8374990f9545e99462caacea5413ed783014b3b66ace49e35c533f07507b/grpcio-1.76.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3", size = 6407178, upload-time = "2025-10-21T16:20:32.733Z" }, + { url = "https://files.pythonhosted.org/packages/1e/77/36fd7d7c75a6c12542c90a6d647a27935a1ecaad03e0ffdb7c42db6b04d2/grpcio-1.76.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990", size = 7075684, upload-time = "2025-10-21T16:20:35.435Z" }, + { url = "https://files.pythonhosted.org/packages/38/f7/e3cdb252492278e004722306c5a8935eae91e64ea11f0af3437a7de2e2b7/grpcio-1.76.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af", size = 6611133, upload-time = "2025-10-21T16:20:37.541Z" }, + { url = "https://files.pythonhosted.org/packages/7e/20/340db7af162ccd20a0893b5f3c4a5d676af7b71105517e62279b5b61d95a/grpcio-1.76.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2", size = 7195507, upload-time = "2025-10-21T16:20:39.643Z" }, + { url = "https://files.pythonhosted.org/packages/10/f0/b2160addc1487bd8fa4810857a27132fb4ce35c1b330c2f3ac45d697b106/grpcio-1.76.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6", size = 8160651, upload-time = "2025-10-21T16:20:42.492Z" }, + { url = "https://files.pythonhosted.org/packages/2c/2c/ac6f98aa113c6ef111b3f347854e99ebb7fb9d8f7bb3af1491d438f62af4/grpcio-1.76.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3", size = 7620568, upload-time = "2025-10-21T16:20:45.995Z" }, + { url = "https://files.pythonhosted.org/packages/90/84/7852f7e087285e3ac17a2703bc4129fafee52d77c6c82af97d905566857e/grpcio-1.76.0-cp310-cp310-win32.whl", hash = "sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b", size = 3998879, upload-time = "2025-10-21T16:20:48.592Z" }, + { url = "https://files.pythonhosted.org/packages/10/30/d3d2adcbb6dd3ff59d6ac3df6ef830e02b437fb5c90990429fd180e52f30/grpcio-1.76.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b", size = 4706892, upload-time = "2025-10-21T16:20:50.697Z" }, + { url = "https://files.pythonhosted.org/packages/a0/00/8163a1beeb6971f66b4bbe6ac9457b97948beba8dd2fc8e1281dce7f79ec/grpcio-1.76.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a", size = 5843567, upload-time = "2025-10-21T16:20:52.829Z" }, + { url = "https://files.pythonhosted.org/packages/10/c1/934202f5cf335e6d852530ce14ddb0fef21be612ba9ecbbcbd4d748ca32d/grpcio-1.76.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c", size = 11848017, upload-time = "2025-10-21T16:20:56.705Z" }, + { url = "https://files.pythonhosted.org/packages/11/0b/8dec16b1863d74af6eb3543928600ec2195af49ca58b16334972f6775663/grpcio-1.76.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465", size = 6412027, upload-time = "2025-10-21T16:20:59.3Z" }, + { url = "https://files.pythonhosted.org/packages/d7/64/7b9e6e7ab910bea9d46f2c090380bab274a0b91fb0a2fe9b0cd399fffa12/grpcio-1.76.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48", size = 7075913, upload-time = "2025-10-21T16:21:01.645Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/093c46e9546073cefa789bd76d44c5cb2abc824ca62af0c18be590ff13ba/grpcio-1.76.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da", size = 6615417, upload-time = "2025-10-21T16:21:03.844Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b6/5709a3a68500a9c03da6fb71740dcdd5ef245e39266461a03f31a57036d8/grpcio-1.76.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397", size = 7199683, upload-time = "2025-10-21T16:21:06.195Z" }, + { url = "https://files.pythonhosted.org/packages/91/d3/4b1f2bf16ed52ce0b508161df3a2d186e4935379a159a834cb4a7d687429/grpcio-1.76.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749", size = 8163109, upload-time = "2025-10-21T16:21:08.498Z" }, + { url = "https://files.pythonhosted.org/packages/5c/61/d9043f95f5f4cf085ac5dd6137b469d41befb04bd80280952ffa2a4c3f12/grpcio-1.76.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00", size = 7626676, upload-time = "2025-10-21T16:21:10.693Z" }, + { url = "https://files.pythonhosted.org/packages/36/95/fd9a5152ca02d8881e4dd419cdd790e11805979f499a2e5b96488b85cf27/grpcio-1.76.0-cp311-cp311-win32.whl", hash = "sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054", size = 3997688, upload-time = "2025-10-21T16:21:12.746Z" }, + { url = "https://files.pythonhosted.org/packages/60/9c/5c359c8d4c9176cfa3c61ecd4efe5affe1f38d9bae81e81ac7186b4c9cc8/grpcio-1.76.0-cp311-cp311-win_amd64.whl", hash = "sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d", size = 4709315, upload-time = "2025-10-21T16:21:15.26Z" }, + { url = "https://files.pythonhosted.org/packages/bf/05/8e29121994b8d959ffa0afd28996d452f291b48cfc0875619de0bde2c50c/grpcio-1.76.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8", size = 5799718, upload-time = "2025-10-21T16:21:17.939Z" }, + { url = "https://files.pythonhosted.org/packages/d9/75/11d0e66b3cdf998c996489581bdad8900db79ebd83513e45c19548f1cba4/grpcio-1.76.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280", size = 11825627, upload-time = "2025-10-21T16:21:20.466Z" }, + { url = "https://files.pythonhosted.org/packages/28/50/2f0aa0498bc188048f5d9504dcc5c2c24f2eb1a9337cd0fa09a61a2e75f0/grpcio-1.76.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4", size = 6359167, upload-time = "2025-10-21T16:21:23.122Z" }, + { url = "https://files.pythonhosted.org/packages/66/e5/bbf0bb97d29ede1d59d6588af40018cfc345b17ce979b7b45424628dc8bb/grpcio-1.76.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11", size = 7044267, upload-time = "2025-10-21T16:21:25.995Z" }, + { url = "https://files.pythonhosted.org/packages/f5/86/f6ec2164f743d9609691115ae8ece098c76b894ebe4f7c94a655c6b03e98/grpcio-1.76.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6", size = 6573963, upload-time = "2025-10-21T16:21:28.631Z" }, + { url = "https://files.pythonhosted.org/packages/60/bc/8d9d0d8505feccfdf38a766d262c71e73639c165b311c9457208b56d92ae/grpcio-1.76.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8", size = 7164484, upload-time = "2025-10-21T16:21:30.837Z" }, + { url = "https://files.pythonhosted.org/packages/67/e6/5d6c2fc10b95edf6df9b8f19cf10a34263b7fd48493936fffd5085521292/grpcio-1.76.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980", size = 8127777, upload-time = "2025-10-21T16:21:33.577Z" }, + { url = "https://files.pythonhosted.org/packages/3f/c8/dce8ff21c86abe025efe304d9e31fdb0deaaa3b502b6a78141080f206da0/grpcio-1.76.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882", size = 7594014, upload-time = "2025-10-21T16:21:41.882Z" }, + { url = "https://files.pythonhosted.org/packages/e0/42/ad28191ebf983a5d0ecef90bab66baa5a6b18f2bfdef9d0a63b1973d9f75/grpcio-1.76.0-cp312-cp312-win32.whl", hash = "sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958", size = 3984750, upload-time = "2025-10-21T16:21:44.006Z" }, + { url = "https://files.pythonhosted.org/packages/9e/00/7bd478cbb851c04a48baccaa49b75abaa8e4122f7d86da797500cccdd771/grpcio-1.76.0-cp312-cp312-win_amd64.whl", hash = "sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347", size = 4704003, upload-time = "2025-10-21T16:21:46.244Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ed/71467ab770effc9e8cef5f2e7388beb2be26ed642d567697bb103a790c72/grpcio-1.76.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2", size = 5807716, upload-time = "2025-10-21T16:21:48.475Z" }, + { url = "https://files.pythonhosted.org/packages/2c/85/c6ed56f9817fab03fa8a111ca91469941fb514e3e3ce6d793cb8f1e1347b/grpcio-1.76.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468", size = 11821522, upload-time = "2025-10-21T16:21:51.142Z" }, + { url = "https://files.pythonhosted.org/packages/ac/31/2b8a235ab40c39cbc141ef647f8a6eb7b0028f023015a4842933bc0d6831/grpcio-1.76.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3", size = 6362558, upload-time = "2025-10-21T16:21:54.213Z" }, + { url = "https://files.pythonhosted.org/packages/bd/64/9784eab483358e08847498ee56faf8ff6ea8e0a4592568d9f68edc97e9e9/grpcio-1.76.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb", size = 7049990, upload-time = "2025-10-21T16:21:56.476Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/8c12319a6369434e7a184b987e8e9f3b49a114c489b8315f029e24de4837/grpcio-1.76.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae", size = 6575387, upload-time = "2025-10-21T16:21:59.051Z" }, + { url = "https://files.pythonhosted.org/packages/15/0f/f12c32b03f731f4a6242f771f63039df182c8b8e2cf8075b245b409259d4/grpcio-1.76.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77", size = 7166668, upload-time = "2025-10-21T16:22:02.049Z" }, + { url = "https://files.pythonhosted.org/packages/ff/2d/3ec9ce0c2b1d92dd59d1c3264aaec9f0f7c817d6e8ac683b97198a36ed5a/grpcio-1.76.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03", size = 8124928, upload-time = "2025-10-21T16:22:04.984Z" }, + { url = "https://files.pythonhosted.org/packages/1a/74/fd3317be5672f4856bcdd1a9e7b5e17554692d3db9a3b273879dc02d657d/grpcio-1.76.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42", size = 7589983, upload-time = "2025-10-21T16:22:07.881Z" }, + { url = "https://files.pythonhosted.org/packages/45/bb/ca038cf420f405971f19821c8c15bcbc875505f6ffadafe9ffd77871dc4c/grpcio-1.76.0-cp313-cp313-win32.whl", hash = "sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f", size = 3984727, upload-time = "2025-10-21T16:22:10.032Z" }, + { url = "https://files.pythonhosted.org/packages/41/80/84087dc56437ced7cdd4b13d7875e7439a52a261e3ab4e06488ba6173b0a/grpcio-1.76.0-cp313-cp313-win_amd64.whl", hash = "sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8", size = 4702799, upload-time = "2025-10-21T16:22:12.709Z" }, + { url = "https://files.pythonhosted.org/packages/b4/46/39adac80de49d678e6e073b70204091e76631e03e94928b9ea4ecf0f6e0e/grpcio-1.76.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62", size = 5808417, upload-time = "2025-10-21T16:22:15.02Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f5/a4531f7fb8b4e2a60b94e39d5d924469b7a6988176b3422487be61fe2998/grpcio-1.76.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd", size = 11828219, upload-time = "2025-10-21T16:22:17.954Z" }, + { url = "https://files.pythonhosted.org/packages/4b/1c/de55d868ed7a8bd6acc6b1d6ddc4aa36d07a9f31d33c912c804adb1b971b/grpcio-1.76.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc", size = 6367826, upload-time = "2025-10-21T16:22:20.721Z" }, + { url = "https://files.pythonhosted.org/packages/59/64/99e44c02b5adb0ad13ab3adc89cb33cb54bfa90c74770f2607eea629b86f/grpcio-1.76.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a", size = 7049550, upload-time = "2025-10-21T16:22:23.637Z" }, + { url = "https://files.pythonhosted.org/packages/43/28/40a5be3f9a86949b83e7d6a2ad6011d993cbe9b6bd27bea881f61c7788b6/grpcio-1.76.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba", size = 6575564, upload-time = "2025-10-21T16:22:26.016Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a9/1be18e6055b64467440208a8559afac243c66a8b904213af6f392dc2212f/grpcio-1.76.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09", size = 7176236, upload-time = "2025-10-21T16:22:28.362Z" }, + { url = "https://files.pythonhosted.org/packages/0f/55/dba05d3fcc151ce6e81327541d2cc8394f442f6b350fead67401661bf041/grpcio-1.76.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc", size = 8125795, upload-time = "2025-10-21T16:22:31.075Z" }, + { url = "https://files.pythonhosted.org/packages/4a/45/122df922d05655f63930cf42c9e3f72ba20aadb26c100ee105cad4ce4257/grpcio-1.76.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc", size = 7592214, upload-time = "2025-10-21T16:22:33.831Z" }, + { url = "https://files.pythonhosted.org/packages/4a/6e/0b899b7f6b66e5af39e377055fb4a6675c9ee28431df5708139df2e93233/grpcio-1.76.0-cp314-cp314-win32.whl", hash = "sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e", size = 4062961, upload-time = "2025-10-21T16:22:36.468Z" }, + { url = "https://files.pythonhosted.org/packages/19/41/0b430b01a2eb38ee887f88c1f07644a1df8e289353b78e82b37ef988fb64/grpcio-1.76.0-cp314-cp314-win_amd64.whl", hash = "sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e", size = 4834462, upload-time = "2025-10-21T16:22:39.772Z" }, +] + +[[package]] +name = "grpclib" +version = "0.4.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "h2" }, + { name = "multidict" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/75/0f0d3524b38b35e5cd07334b754aa9bd0570140ad982131b04ebfa3b0374/grpclib-0.4.8.tar.gz", hash = "sha256:d8823763780ef94fed8b2c562f7485cf0bbee15fc7d065a640673667f7719c9a", size = 62793, upload-time = "2025-05-04T16:27:30.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/8b/ad381ec1b8195fa4a9a693cb8087e031b99530c0d6b8ad036dcb99e144c4/grpclib-0.4.8-py3-none-any.whl", hash = "sha256:a5047733a7acc1c1cee6abf3c841c7c6fab67d2844a45a853b113fa2e6cd2654", size = 76311, upload-time = "2025-05-04T16:27:22.818Z" }, +] + +[[package]] +name = "gunicorn" +version = "23.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/72/9614c465dc206155d93eff0ca20d42e1e35afc533971379482de953521a4/gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec", size = 375031, upload-time = "2024-08-10T20:25:27.378Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/7d/6dac2a6e1eba33ee43f318edbed4ff29151a49b5d37f080aad1e6469bca4/gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", size = 85029, upload-time = "2024-08-10T20:25:24.996Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "h2" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hpack" }, + { name = "hyperframe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/17/afa56379f94ad0fe8defd37d6eb3f89a25404ffc71d4d848893d270325fc/h2-4.3.0.tar.gz", hash = "sha256:6c59efe4323fa18b47a632221a1888bd7fde6249819beda254aeca909f221bf1", size = 2152026, upload-time = "2025-08-23T18:12:19.778Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/b2/119f6e6dcbd96f9069ce9a2665e0146588dc9f88f29549711853645e736a/h2-4.3.0-py3-none-any.whl", hash = "sha256:c438f029a25f7945c69e0ccf0fb951dc3f73a5f6412981daee861431b70e2bdd", size = 61779, upload-time = "2025-08-23T18:12:17.779Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/6e/0f11bacf08a67f7fb5ee09740f2ca54163863b07b70d579356e9222ce5d8/hf_xet-1.2.0.tar.gz", hash = "sha256:a8c27070ca547293b6890c4bf389f713f80e8c478631432962bb7f4bc0bd7d7f", size = 506020, upload-time = "2025-10-24T19:04:32.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/a5/85ef910a0aa034a2abcfadc360ab5ac6f6bc4e9112349bd40ca97551cff0/hf_xet-1.2.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:ceeefcd1b7aed4956ae8499e2199607765fbd1c60510752003b6cc0b8413b649", size = 2861870, upload-time = "2025-10-24T19:04:11.422Z" }, + { url = "https://files.pythonhosted.org/packages/ea/40/e2e0a7eb9a51fe8828ba2d47fe22a7e74914ea8a0db68a18c3aa7449c767/hf_xet-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b70218dd548e9840224df5638fdc94bd033552963cfa97f9170829381179c813", size = 2717584, upload-time = "2025-10-24T19:04:09.586Z" }, + { url = "https://files.pythonhosted.org/packages/a5/7d/daf7f8bc4594fdd59a8a596f9e3886133fdc68e675292218a5e4c1b7e834/hf_xet-1.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d40b18769bb9a8bc82a9ede575ce1a44c75eb80e7375a01d76259089529b5dc", size = 3315004, upload-time = "2025-10-24T19:04:00.314Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ba/45ea2f605fbf6d81c8b21e4d970b168b18a53515923010c312c06cd83164/hf_xet-1.2.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:cd3a6027d59cfb60177c12d6424e31f4b5ff13d8e3a1247b3a584bf8977e6df5", size = 3222636, upload-time = "2025-10-24T19:03:58.111Z" }, + { url = "https://files.pythonhosted.org/packages/4a/1d/04513e3cab8f29ab8c109d309ddd21a2705afab9d52f2ba1151e0c14f086/hf_xet-1.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6de1fc44f58f6dd937956c8d304d8c2dea264c80680bcfa61ca4a15e7b76780f", size = 3408448, upload-time = "2025-10-24T19:04:20.951Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7c/60a2756d7feec7387db3a1176c632357632fbe7849fce576c5559d4520c7/hf_xet-1.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f182f264ed2acd566c514e45da9f2119110e48a87a327ca271027904c70c5832", size = 3503401, upload-time = "2025-10-24T19:04:22.549Z" }, + { url = "https://files.pythonhosted.org/packages/4e/64/48fffbd67fb418ab07451e4ce641a70de1c40c10a13e25325e24858ebe5a/hf_xet-1.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:293a7a3787e5c95d7be1857358a9130694a9c6021de3f27fa233f37267174382", size = 2900866, upload-time = "2025-10-24T19:04:33.461Z" }, + { url = "https://files.pythonhosted.org/packages/e2/51/f7e2caae42f80af886db414d4e9885fac959330509089f97cccb339c6b87/hf_xet-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:10bfab528b968c70e062607f663e21e34e2bba349e8038db546646875495179e", size = 2861861, upload-time = "2025-10-24T19:04:19.01Z" }, + { url = "https://files.pythonhosted.org/packages/6e/1d/a641a88b69994f9371bd347f1dd35e5d1e2e2460a2e350c8d5165fc62005/hf_xet-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2a212e842647b02eb6a911187dc878e79c4aa0aa397e88dd3b26761676e8c1f8", size = 2717699, upload-time = "2025-10-24T19:04:17.306Z" }, + { url = "https://files.pythonhosted.org/packages/df/e0/e5e9bba7d15f0318955f7ec3f4af13f92e773fbb368c0b8008a5acbcb12f/hf_xet-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30e06daccb3a7d4c065f34fc26c14c74f4653069bb2b194e7f18f17cbe9939c0", size = 3314885, upload-time = "2025-10-24T19:04:07.642Z" }, + { url = "https://files.pythonhosted.org/packages/21/90/b7fe5ff6f2b7b8cbdf1bd56145f863c90a5807d9758a549bf3d916aa4dec/hf_xet-1.2.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:29c8fc913a529ec0a91867ce3d119ac1aac966e098cf49501800c870328cc090", size = 3221550, upload-time = "2025-10-24T19:04:05.55Z" }, + { url = "https://files.pythonhosted.org/packages/6f/cb/73f276f0a7ce46cc6a6ec7d6c7d61cbfe5f2e107123d9bbd0193c355f106/hf_xet-1.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e159cbfcfbb29f920db2c09ed8b660eb894640d284f102ada929b6e3dc410a", size = 3408010, upload-time = "2025-10-24T19:04:28.598Z" }, + { url = "https://files.pythonhosted.org/packages/b8/1e/d642a12caa78171f4be64f7cd9c40e3ca5279d055d0873188a58c0f5fbb9/hf_xet-1.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c91d5ae931510107f148874e9e2de8a16052b6f1b3ca3c1b12f15ccb491390f", size = 3503264, upload-time = "2025-10-24T19:04:30.397Z" }, + { url = "https://files.pythonhosted.org/packages/17/b5/33764714923fa1ff922770f7ed18c2daae034d21ae6e10dbf4347c854154/hf_xet-1.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:210d577732b519ac6ede149d2f2f34049d44e8622bf14eb3d63bbcd2d4b332dc", size = 2901071, upload-time = "2025-10-24T19:04:37.463Z" }, + { url = "https://files.pythonhosted.org/packages/96/2d/22338486473df5923a9ab7107d375dbef9173c338ebef5098ef593d2b560/hf_xet-1.2.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:46740d4ac024a7ca9b22bebf77460ff43332868b661186a8e46c227fdae01848", size = 2866099, upload-time = "2025-10-24T19:04:15.366Z" }, + { url = "https://files.pythonhosted.org/packages/7f/8c/c5becfa53234299bc2210ba314eaaae36c2875e0045809b82e40a9544f0c/hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:27df617a076420d8845bea087f59303da8be17ed7ec0cd7ee3b9b9f579dff0e4", size = 2722178, upload-time = "2025-10-24T19:04:13.695Z" }, + { url = "https://files.pythonhosted.org/packages/9a/92/cf3ab0b652b082e66876d08da57fcc6fa2f0e6c70dfbbafbd470bb73eb47/hf_xet-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3651fd5bfe0281951b988c0facbe726aa5e347b103a675f49a3fa8144c7968fd", size = 3320214, upload-time = "2025-10-24T19:04:03.596Z" }, + { url = "https://files.pythonhosted.org/packages/46/92/3f7ec4a1b6a65bf45b059b6d4a5d38988f63e193056de2f420137e3c3244/hf_xet-1.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d06fa97c8562fb3ee7a378dd9b51e343bc5bc8190254202c9771029152f5e08c", size = 3229054, upload-time = "2025-10-24T19:04:01.949Z" }, + { url = "https://files.pythonhosted.org/packages/0b/dd/7ac658d54b9fb7999a0ccb07ad863b413cbaf5cf172f48ebcd9497ec7263/hf_xet-1.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4c1428c9ae73ec0939410ec73023c4f842927f39db09b063b9482dac5a3bb737", size = 3413812, upload-time = "2025-10-24T19:04:24.585Z" }, + { url = "https://files.pythonhosted.org/packages/92/68/89ac4e5b12a9ff6286a12174c8538a5930e2ed662091dd2572bbe0a18c8a/hf_xet-1.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a55558084c16b09b5ed32ab9ed38421e2d87cf3f1f89815764d1177081b99865", size = 3508920, upload-time = "2025-10-24T19:04:26.927Z" }, + { url = "https://files.pythonhosted.org/packages/cb/44/870d44b30e1dcfb6a65932e3e1506c103a8a5aea9103c337e7a53180322c/hf_xet-1.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:e6584a52253f72c9f52f9e549d5895ca7a471608495c4ecaa6cc73dba2b24d69", size = 2905735, upload-time = "2025-10-24T19:04:35.928Z" }, +] + +[[package]] +name = "hpack" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276, upload-time = "2025-01-22T21:44:58.347Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357, upload-time = "2025-01-22T21:44:56.92Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "httpx-sse" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "0.36.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/63/4910c5fa9128fdadf6a9c5ac138e8b1b6cee4ca44bf7915bbfbce4e355ee/huggingface_hub-0.36.0.tar.gz", hash = "sha256:47b3f0e2539c39bf5cde015d63b72ec49baff67b6931c3d97f3f84532e2b8d25", size = 463358, upload-time = "2025-10-23T12:12:01.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/bd/1a875e0d592d447cbc02805fd3fe0f497714d6a2583f59d14fa9ebad96eb/huggingface_hub-0.36.0-py3-none-any.whl", hash = "sha256:7bcc9ad17d5b3f07b57c78e79d527102d08313caa278a641993acddcb894548d", size = 566094, upload-time = "2025-10-23T12:11:59.557Z" }, +] + +[[package]] +name = "hyperframe" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566, upload-time = "2025-01-22T21:41:49.302Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007, upload-time = "2025-01-22T21:41:47.295Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "8.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "isodate" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload-time = "2024-10-08T23:04:11.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload-time = "2024-10-08T23:04:09.501Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jiter" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/45/9d/e0660989c1370e25848bb4c52d061c71837239738ad937e83edca174c273/jiter-0.12.0.tar.gz", hash = "sha256:64dfcd7d5c168b38d3f9f8bba7fc639edb3418abcc74f22fdbe6b8938293f30b", size = 168294, upload-time = "2025-11-09T20:49:23.302Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/91/13cb9505f7be74a933f37da3af22e029f6ba64f5669416cb8b2774bc9682/jiter-0.12.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e7acbaba9703d5de82a2c98ae6a0f59ab9770ab5af5fa35e43a303aee962cf65", size = 316652, upload-time = "2025-11-09T20:46:41.021Z" }, + { url = "https://files.pythonhosted.org/packages/4e/76/4e9185e5d9bb4e482cf6dec6410d5f78dfeb374cfcecbbe9888d07c52daa/jiter-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:364f1a7294c91281260364222f535bc427f56d4de1d8ffd718162d21fbbd602e", size = 319829, upload-time = "2025-11-09T20:46:43.281Z" }, + { url = "https://files.pythonhosted.org/packages/86/af/727de50995d3a153138139f259baae2379d8cb0522c0c00419957bc478a6/jiter-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ee4d25805d4fb23f0a5167a962ef8e002dbfb29c0989378488e32cf2744b62", size = 350568, upload-time = "2025-11-09T20:46:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c1/d6e9f4b7a3d5ac63bcbdfddeb50b2dcfbdc512c86cffc008584fdc350233/jiter-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:796f466b7942107eb889c08433b6e31b9a7ed31daceaecf8af1be26fb26c0ca8", size = 369052, upload-time = "2025-11-09T20:46:46.818Z" }, + { url = "https://files.pythonhosted.org/packages/eb/be/00824cd530f30ed73fa8a4f9f3890a705519e31ccb9e929f1e22062e7c76/jiter-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35506cb71f47dba416694e67af996bbdefb8e3608f1f78799c2e1f9058b01ceb", size = 481585, upload-time = "2025-11-09T20:46:48.319Z" }, + { url = "https://files.pythonhosted.org/packages/74/b6/2ad7990dff9504d4b5052eef64aa9574bd03d722dc7edced97aad0d47be7/jiter-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:726c764a90c9218ec9e4f99a33d6bf5ec169163f2ca0fc21b654e88c2abc0abc", size = 380541, upload-time = "2025-11-09T20:46:49.643Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c7/f3c26ecbc1adbf1db0d6bba99192143d8fe8504729d9594542ecc4445784/jiter-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa47810c5565274810b726b0dc86d18dce5fd17b190ebdc3890851d7b2a0e74", size = 364423, upload-time = "2025-11-09T20:46:51.731Z" }, + { url = "https://files.pythonhosted.org/packages/18/51/eac547bf3a2d7f7e556927278e14c56a0604b8cddae75815d5739f65f81d/jiter-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8ec0259d3f26c62aed4d73b198c53e316ae11f0f69c8fbe6682c6dcfa0fcce2", size = 389958, upload-time = "2025-11-09T20:46:53.432Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1f/9ca592e67175f2db156cff035e0d817d6004e293ee0c1d73692d38fcb596/jiter-0.12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:79307d74ea83465b0152fa23e5e297149506435535282f979f18b9033c0bb025", size = 522084, upload-time = "2025-11-09T20:46:54.848Z" }, + { url = "https://files.pythonhosted.org/packages/83/ff/597d9cdc3028f28224f53e1a9d063628e28b7a5601433e3196edda578cdd/jiter-0.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cf6e6dd18927121fec86739f1a8906944703941d000f0639f3eb6281cc601dca", size = 513054, upload-time = "2025-11-09T20:46:56.487Z" }, + { url = "https://files.pythonhosted.org/packages/24/6d/1970bce1351bd02e3afcc5f49e4f7ef3dabd7fb688f42be7e8091a5b809a/jiter-0.12.0-cp310-cp310-win32.whl", hash = "sha256:b6ae2aec8217327d872cbfb2c1694489057b9433afce447955763e6ab015b4c4", size = 206368, upload-time = "2025-11-09T20:46:58.638Z" }, + { url = "https://files.pythonhosted.org/packages/e3/6b/eb1eb505b2d86709b59ec06681a2b14a94d0941db091f044b9f0e16badc0/jiter-0.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7f49ce90a71e44f7e1aa9e7ec415b9686bbc6a5961e57eab511015e6759bc11", size = 204847, upload-time = "2025-11-09T20:47:00.295Z" }, + { url = "https://files.pythonhosted.org/packages/32/f9/eaca4633486b527ebe7e681c431f529b63fe2709e7c5242fc0f43f77ce63/jiter-0.12.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8f8a7e317190b2c2d60eb2e8aa835270b008139562d70fe732e1c0020ec53c9", size = 316435, upload-time = "2025-11-09T20:47:02.087Z" }, + { url = "https://files.pythonhosted.org/packages/10/c1/40c9f7c22f5e6ff715f28113ebaba27ab85f9af2660ad6e1dd6425d14c19/jiter-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2218228a077e784c6c8f1a8e5d6b8cb1dea62ce25811c356364848554b2056cd", size = 320548, upload-time = "2025-11-09T20:47:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1b/efbb68fe87e7711b00d2cfd1f26bb4bfc25a10539aefeaa7727329ffb9cb/jiter-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9354ccaa2982bf2188fd5f57f79f800ef622ec67beb8329903abf6b10da7d423", size = 351915, upload-time = "2025-11-09T20:47:05.171Z" }, + { url = "https://files.pythonhosted.org/packages/15/2d/c06e659888c128ad1e838123d0638f0efad90cc30860cb5f74dd3f2fc0b3/jiter-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2607185ea89b4af9a604d4c7ec40e45d3ad03ee66998b031134bc510232bb7", size = 368966, upload-time = "2025-11-09T20:47:06.508Z" }, + { url = "https://files.pythonhosted.org/packages/6b/20/058db4ae5fb07cf6a4ab2e9b9294416f606d8e467fb74c2184b2a1eeacba/jiter-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a585a5e42d25f2e71db5f10b171f5e5ea641d3aa44f7df745aa965606111cc2", size = 482047, upload-time = "2025-11-09T20:47:08.382Z" }, + { url = "https://files.pythonhosted.org/packages/49/bb/dc2b1c122275e1de2eb12905015d61e8316b2f888bdaac34221c301495d6/jiter-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd9e21d34edff5a663c631f850edcb786719c960ce887a5661e9c828a53a95d9", size = 380835, upload-time = "2025-11-09T20:47:09.81Z" }, + { url = "https://files.pythonhosted.org/packages/23/7d/38f9cd337575349de16da575ee57ddb2d5a64d425c9367f5ef9e4612e32e/jiter-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a612534770470686cd5431478dc5a1b660eceb410abade6b1b74e320ca98de6", size = 364587, upload-time = "2025-11-09T20:47:11.529Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a3/b13e8e61e70f0bb06085099c4e2462647f53cc2ca97614f7fedcaa2bb9f3/jiter-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3985aea37d40a908f887b34d05111e0aae822943796ebf8338877fee2ab67725", size = 390492, upload-time = "2025-11-09T20:47:12.993Z" }, + { url = "https://files.pythonhosted.org/packages/07/71/e0d11422ed027e21422f7bc1883c61deba2d9752b720538430c1deadfbca/jiter-0.12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b1207af186495f48f72529f8d86671903c8c10127cac6381b11dddc4aaa52df6", size = 522046, upload-time = "2025-11-09T20:47:14.6Z" }, + { url = "https://files.pythonhosted.org/packages/9f/59/b968a9aa7102a8375dbbdfbd2aeebe563c7e5dddf0f47c9ef1588a97e224/jiter-0.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef2fb241de583934c9915a33120ecc06d94aa3381a134570f59eed784e87001e", size = 513392, upload-time = "2025-11-09T20:47:16.011Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e4/7df62002499080dbd61b505c5cb351aa09e9959d176cac2aa8da6f93b13b/jiter-0.12.0-cp311-cp311-win32.whl", hash = "sha256:453b6035672fecce8007465896a25b28a6b59cfe8fbc974b2563a92f5a92a67c", size = 206096, upload-time = "2025-11-09T20:47:17.344Z" }, + { url = "https://files.pythonhosted.org/packages/bb/60/1032b30ae0572196b0de0e87dce3b6c26a1eff71aad5fe43dee3082d32e0/jiter-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:ca264b9603973c2ad9435c71a8ec8b49f8f715ab5ba421c85a51cde9887e421f", size = 204899, upload-time = "2025-11-09T20:47:19.365Z" }, + { url = "https://files.pythonhosted.org/packages/49/d5/c145e526fccdb834063fb45c071df78b0cc426bbaf6de38b0781f45d956f/jiter-0.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:cb00ef392e7d684f2754598c02c409f376ddcef857aae796d559e6cacc2d78a5", size = 188070, upload-time = "2025-11-09T20:47:20.75Z" }, + { url = "https://files.pythonhosted.org/packages/92/c9/5b9f7b4983f1b542c64e84165075335e8a236fa9e2ea03a0c79780062be8/jiter-0.12.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:305e061fa82f4680607a775b2e8e0bcb071cd2205ac38e6ef48c8dd5ebe1cf37", size = 314449, upload-time = "2025-11-09T20:47:22.999Z" }, + { url = "https://files.pythonhosted.org/packages/98/6e/e8efa0e78de00db0aee82c0cf9e8b3f2027efd7f8a71f859d8f4be8e98ef/jiter-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c1860627048e302a528333c9307c818c547f214d8659b0705d2195e1a94b274", size = 319855, upload-time = "2025-11-09T20:47:24.779Z" }, + { url = "https://files.pythonhosted.org/packages/20/26/894cd88e60b5d58af53bec5c6759d1292bd0b37a8b5f60f07abf7a63ae5f/jiter-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df37577a4f8408f7e0ec3205d2a8f87672af8f17008358063a4d6425b6081ce3", size = 350171, upload-time = "2025-11-09T20:47:26.469Z" }, + { url = "https://files.pythonhosted.org/packages/f5/27/a7b818b9979ac31b3763d25f3653ec3a954044d5e9f5d87f2f247d679fd1/jiter-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75fdd787356c1c13a4f40b43c2156276ef7a71eb487d98472476476d803fb2cf", size = 365590, upload-time = "2025-11-09T20:47:27.918Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7e/e46195801a97673a83746170b17984aa8ac4a455746354516d02ca5541b4/jiter-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eb5db8d9c65b112aacf14fcd0faae9913d07a8afea5ed06ccdd12b724e966a1", size = 479462, upload-time = "2025-11-09T20:47:29.654Z" }, + { url = "https://files.pythonhosted.org/packages/ca/75/f833bfb009ab4bd11b1c9406d333e3b4357709ed0570bb48c7c06d78c7dd/jiter-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73c568cc27c473f82480abc15d1301adf333a7ea4f2e813d6a2c7d8b6ba8d0df", size = 378983, upload-time = "2025-11-09T20:47:31.026Z" }, + { url = "https://files.pythonhosted.org/packages/71/b3/7a69d77943cc837d30165643db753471aff5df39692d598da880a6e51c24/jiter-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4321e8a3d868919bcb1abb1db550d41f2b5b326f72df29e53b2df8b006eb9403", size = 361328, upload-time = "2025-11-09T20:47:33.286Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ac/a78f90caf48d65ba70d8c6efc6f23150bc39dc3389d65bbec2a95c7bc628/jiter-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a51bad79f8cc9cac2b4b705039f814049142e0050f30d91695a2d9a6611f126", size = 386740, upload-time = "2025-11-09T20:47:34.703Z" }, + { url = "https://files.pythonhosted.org/packages/39/b6/5d31c2cc8e1b6a6bcf3c5721e4ca0a3633d1ab4754b09bc7084f6c4f5327/jiter-0.12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2a67b678f6a5f1dd6c36d642d7db83e456bc8b104788262aaefc11a22339f5a9", size = 520875, upload-time = "2025-11-09T20:47:36.058Z" }, + { url = "https://files.pythonhosted.org/packages/30/b5/4df540fae4e9f68c54b8dab004bd8c943a752f0b00efd6e7d64aa3850339/jiter-0.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efe1a211fe1fd14762adea941e3cfd6c611a136e28da6c39272dbb7a1bbe6a86", size = 511457, upload-time = "2025-11-09T20:47:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/07/65/86b74010e450a1a77b2c1aabb91d4a91dd3cd5afce99f34d75fd1ac64b19/jiter-0.12.0-cp312-cp312-win32.whl", hash = "sha256:d779d97c834b4278276ec703dc3fc1735fca50af63eb7262f05bdb4e62203d44", size = 204546, upload-time = "2025-11-09T20:47:40.47Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c7/6659f537f9562d963488e3e55573498a442503ced01f7e169e96a6110383/jiter-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e8269062060212b373316fe69236096aaf4c49022d267c6736eebd66bbbc60bb", size = 205196, upload-time = "2025-11-09T20:47:41.794Z" }, + { url = "https://files.pythonhosted.org/packages/21/f4/935304f5169edadfec7f9c01eacbce4c90bb9a82035ac1de1f3bd2d40be6/jiter-0.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:06cb970936c65de926d648af0ed3d21857f026b1cf5525cb2947aa5e01e05789", size = 186100, upload-time = "2025-11-09T20:47:43.007Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a6/97209693b177716e22576ee1161674d1d58029eb178e01866a0422b69224/jiter-0.12.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6cc49d5130a14b732e0612bc76ae8db3b49898732223ef8b7599aa8d9810683e", size = 313658, upload-time = "2025-11-09T20:47:44.424Z" }, + { url = "https://files.pythonhosted.org/packages/06/4d/125c5c1537c7d8ee73ad3d530a442d6c619714b95027143f1b61c0b4dfe0/jiter-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37f27a32ce36364d2fa4f7fdc507279db604d27d239ea2e044c8f148410defe1", size = 318605, upload-time = "2025-11-09T20:47:45.973Z" }, + { url = "https://files.pythonhosted.org/packages/99/bf/a840b89847885064c41a5f52de6e312e91fa84a520848ee56c97e4fa0205/jiter-0.12.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbc0944aa3d4b4773e348cda635252824a78f4ba44328e042ef1ff3f6080d1cf", size = 349803, upload-time = "2025-11-09T20:47:47.535Z" }, + { url = "https://files.pythonhosted.org/packages/8a/88/e63441c28e0db50e305ae23e19c1d8fae012d78ed55365da392c1f34b09c/jiter-0.12.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:da25c62d4ee1ffbacb97fac6dfe4dcd6759ebdc9015991e92a6eae5816287f44", size = 365120, upload-time = "2025-11-09T20:47:49.284Z" }, + { url = "https://files.pythonhosted.org/packages/0a/7c/49b02714af4343970eb8aca63396bc1c82fa01197dbb1e9b0d274b550d4e/jiter-0.12.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:048485c654b838140b007390b8182ba9774621103bd4d77c9c3f6f117474ba45", size = 479918, upload-time = "2025-11-09T20:47:50.807Z" }, + { url = "https://files.pythonhosted.org/packages/69/ba/0a809817fdd5a1db80490b9150645f3aae16afad166960bcd562be194f3b/jiter-0.12.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:635e737fbb7315bef0037c19b88b799143d2d7d3507e61a76751025226b3ac87", size = 379008, upload-time = "2025-11-09T20:47:52.211Z" }, + { url = "https://files.pythonhosted.org/packages/5f/c3/c9fc0232e736c8877d9e6d83d6eeb0ba4e90c6c073835cc2e8f73fdeef51/jiter-0.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e017c417b1ebda911bd13b1e40612704b1f5420e30695112efdbed8a4b389ed", size = 361785, upload-time = "2025-11-09T20:47:53.512Z" }, + { url = "https://files.pythonhosted.org/packages/96/61/61f69b7e442e97ca6cd53086ddc1cf59fb830549bc72c0a293713a60c525/jiter-0.12.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:89b0bfb8b2bf2351fba36bb211ef8bfceba73ef58e7f0c68fb67b5a2795ca2f9", size = 386108, upload-time = "2025-11-09T20:47:54.893Z" }, + { url = "https://files.pythonhosted.org/packages/e9/2e/76bb3332f28550c8f1eba3bf6e5efe211efda0ddbbaf24976bc7078d42a5/jiter-0.12.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:f5aa5427a629a824a543672778c9ce0c5e556550d1569bb6ea28a85015287626", size = 519937, upload-time = "2025-11-09T20:47:56.253Z" }, + { url = "https://files.pythonhosted.org/packages/84/d6/fa96efa87dc8bff2094fb947f51f66368fa56d8d4fc9e77b25d7fbb23375/jiter-0.12.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed53b3d6acbcb0fd0b90f20c7cb3b24c357fe82a3518934d4edfa8c6898e498c", size = 510853, upload-time = "2025-11-09T20:47:58.32Z" }, + { url = "https://files.pythonhosted.org/packages/8a/28/93f67fdb4d5904a708119a6ab58a8f1ec226ff10a94a282e0215402a8462/jiter-0.12.0-cp313-cp313-win32.whl", hash = "sha256:4747de73d6b8c78f2e253a2787930f4fffc68da7fa319739f57437f95963c4de", size = 204699, upload-time = "2025-11-09T20:47:59.686Z" }, + { url = "https://files.pythonhosted.org/packages/c4/1f/30b0eb087045a0abe2a5c9c0c0c8da110875a1d3be83afd4a9a4e548be3c/jiter-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:e25012eb0c456fcc13354255d0338cd5397cce26c77b2832b3c4e2e255ea5d9a", size = 204258, upload-time = "2025-11-09T20:48:01.01Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f4/2b4daf99b96bce6fc47971890b14b2a36aef88d7beb9f057fafa032c6141/jiter-0.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:c97b92c54fe6110138c872add030a1f99aea2401ddcdaa21edf74705a646dd60", size = 185503, upload-time = "2025-11-09T20:48:02.35Z" }, + { url = "https://files.pythonhosted.org/packages/39/ca/67bb15a7061d6fe20b9b2a2fd783e296a1e0f93468252c093481a2f00efa/jiter-0.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:53839b35a38f56b8be26a7851a48b89bc47e5d88e900929df10ed93b95fea3d6", size = 317965, upload-time = "2025-11-09T20:48:03.783Z" }, + { url = "https://files.pythonhosted.org/packages/18/af/1788031cd22e29c3b14bc6ca80b16a39a0b10e611367ffd480c06a259831/jiter-0.12.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94f669548e55c91ab47fef8bddd9c954dab1938644e715ea49d7e117015110a4", size = 345831, upload-time = "2025-11-09T20:48:05.55Z" }, + { url = "https://files.pythonhosted.org/packages/05/17/710bf8472d1dff0d3caf4ced6031060091c1320f84ee7d5dcbed1f352417/jiter-0.12.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:351d54f2b09a41600ffea43d081522d792e81dcfb915f6d2d242744c1cc48beb", size = 361272, upload-time = "2025-11-09T20:48:06.951Z" }, + { url = "https://files.pythonhosted.org/packages/fb/f1/1dcc4618b59761fef92d10bcbb0b038b5160be653b003651566a185f1a5c/jiter-0.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2a5e90604620f94bf62264e7c2c038704d38217b7465b863896c6d7c902b06c7", size = 204604, upload-time = "2025-11-09T20:48:08.328Z" }, + { url = "https://files.pythonhosted.org/packages/d9/32/63cb1d9f1c5c6632a783c0052cde9ef7ba82688f7065e2f0d5f10a7e3edb/jiter-0.12.0-cp313-cp313t-win_arm64.whl", hash = "sha256:88ef757017e78d2860f96250f9393b7b577b06a956ad102c29c8237554380db3", size = 185628, upload-time = "2025-11-09T20:48:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/a8/99/45c9f0dbe4a1416b2b9a8a6d1236459540f43d7fb8883cff769a8db0612d/jiter-0.12.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c46d927acd09c67a9fb1416df45c5a04c27e83aae969267e98fba35b74e99525", size = 312478, upload-time = "2025-11-09T20:48:10.898Z" }, + { url = "https://files.pythonhosted.org/packages/4c/a7/54ae75613ba9e0f55fcb0bc5d1f807823b5167cc944e9333ff322e9f07dd/jiter-0.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:774ff60b27a84a85b27b88cd5583899c59940bcc126caca97eb2a9df6aa00c49", size = 318706, upload-time = "2025-11-09T20:48:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/2aa241ad2c10774baf6c37f8b8e1f39c07db358f1329f4eb40eba179c2a2/jiter-0.12.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5433fab222fb072237df3f637d01b81f040a07dcac1cb4a5c75c7aa9ed0bef1", size = 351894, upload-time = "2025-11-09T20:48:13.673Z" }, + { url = "https://files.pythonhosted.org/packages/54/4f/0f2759522719133a9042781b18cc94e335b6d290f5e2d3e6899d6af933e3/jiter-0.12.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8c593c6e71c07866ec6bfb790e202a833eeec885022296aff6b9e0b92d6a70e", size = 365714, upload-time = "2025-11-09T20:48:15.083Z" }, + { url = "https://files.pythonhosted.org/packages/dc/6f/806b895f476582c62a2f52c453151edd8a0fde5411b0497baaa41018e878/jiter-0.12.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:90d32894d4c6877a87ae00c6b915b609406819dce8bc0d4e962e4de2784e567e", size = 478989, upload-time = "2025-11-09T20:48:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/86/6c/012d894dc6e1033acd8db2b8346add33e413ec1c7c002598915278a37f79/jiter-0.12.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:798e46eed9eb10c3adbbacbd3bdb5ecd4cf7064e453d00dbef08802dae6937ff", size = 378615, upload-time = "2025-11-09T20:48:18.614Z" }, + { url = "https://files.pythonhosted.org/packages/87/30/d718d599f6700163e28e2c71c0bbaf6dace692e7df2592fd793ac9276717/jiter-0.12.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3f1368f0a6719ea80013a4eb90ba72e75d7ea67cfc7846db2ca504f3df0169a", size = 364745, upload-time = "2025-11-09T20:48:20.117Z" }, + { url = "https://files.pythonhosted.org/packages/8f/85/315b45ce4b6ddc7d7fceca24068543b02bdc8782942f4ee49d652e2cc89f/jiter-0.12.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65f04a9d0b4406f7e51279710b27484af411896246200e461d80d3ba0caa901a", size = 386502, upload-time = "2025-11-09T20:48:21.543Z" }, + { url = "https://files.pythonhosted.org/packages/74/0b/ce0434fb40c5b24b368fe81b17074d2840748b4952256bab451b72290a49/jiter-0.12.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:fd990541982a24281d12b67a335e44f117e4c6cbad3c3b75c7dea68bf4ce3a67", size = 519845, upload-time = "2025-11-09T20:48:22.964Z" }, + { url = "https://files.pythonhosted.org/packages/e8/a3/7a7a4488ba052767846b9c916d208b3ed114e3eb670ee984e4c565b9cf0d/jiter-0.12.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:b111b0e9152fa7df870ecaebb0bd30240d9f7fff1f2003bcb4ed0f519941820b", size = 510701, upload-time = "2025-11-09T20:48:24.483Z" }, + { url = "https://files.pythonhosted.org/packages/c3/16/052ffbf9d0467b70af24e30f91e0579e13ded0c17bb4a8eb2aed3cb60131/jiter-0.12.0-cp314-cp314-win32.whl", hash = "sha256:a78befb9cc0a45b5a5a0d537b06f8544c2ebb60d19d02c41ff15da28a9e22d42", size = 205029, upload-time = "2025-11-09T20:48:25.749Z" }, + { url = "https://files.pythonhosted.org/packages/e4/18/3cf1f3f0ccc789f76b9a754bdb7a6977e5d1d671ee97a9e14f7eb728d80e/jiter-0.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:e1fe01c082f6aafbe5c8faf0ff074f38dfb911d53f07ec333ca03f8f6226debf", size = 204960, upload-time = "2025-11-09T20:48:27.415Z" }, + { url = "https://files.pythonhosted.org/packages/02/68/736821e52ecfdeeb0f024b8ab01b5a229f6b9293bbdb444c27efade50b0f/jiter-0.12.0-cp314-cp314-win_arm64.whl", hash = "sha256:d72f3b5a432a4c546ea4bedc84cce0c3404874f1d1676260b9c7f048a9855451", size = 185529, upload-time = "2025-11-09T20:48:29.125Z" }, + { url = "https://files.pythonhosted.org/packages/30/61/12ed8ee7a643cce29ac97c2281f9ce3956eb76b037e88d290f4ed0d41480/jiter-0.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e6ded41aeba3603f9728ed2b6196e4df875348ab97b28fc8afff115ed42ba7a7", size = 318974, upload-time = "2025-11-09T20:48:30.87Z" }, + { url = "https://files.pythonhosted.org/packages/2d/c6/f3041ede6d0ed5e0e79ff0de4c8f14f401bbf196f2ef3971cdbe5fd08d1d/jiter-0.12.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a947920902420a6ada6ad51892082521978e9dd44a802663b001436e4b771684", size = 345932, upload-time = "2025-11-09T20:48:32.658Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5d/4d94835889edd01ad0e2dbfc05f7bdfaed46292e7b504a6ac7839aa00edb/jiter-0.12.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:add5e227e0554d3a52cf390a7635edaffdf4f8fce4fdbcef3cc2055bb396a30c", size = 367243, upload-time = "2025-11-09T20:48:34.093Z" }, + { url = "https://files.pythonhosted.org/packages/fd/76/0051b0ac2816253a99d27baf3dda198663aff882fa6ea7deeb94046da24e/jiter-0.12.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f9b1cda8fcb736250d7e8711d4580ebf004a46771432be0ae4796944b5dfa5d", size = 479315, upload-time = "2025-11-09T20:48:35.507Z" }, + { url = "https://files.pythonhosted.org/packages/70/ae/83f793acd68e5cb24e483f44f482a1a15601848b9b6f199dacb970098f77/jiter-0.12.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deeb12a2223fe0135c7ff1356a143d57f95bbf1f4a66584f1fc74df21d86b993", size = 380714, upload-time = "2025-11-09T20:48:40.014Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/4808a88338ad2c228b1126b93fcd8ba145e919e886fe910d578230dabe3b/jiter-0.12.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c596cc0f4cb574877550ce4ecd51f8037469146addd676d7c1a30ebe6391923f", size = 365168, upload-time = "2025-11-09T20:48:41.462Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d4/04619a9e8095b42aef436b5aeb4c0282b4ff1b27d1db1508df9f5dc82750/jiter-0.12.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ab4c823b216a4aeab3fdbf579c5843165756bd9ad87cc6b1c65919c4715f783", size = 387893, upload-time = "2025-11-09T20:48:42.921Z" }, + { url = "https://files.pythonhosted.org/packages/17/ea/d3c7e62e4546fdc39197fa4a4315a563a89b95b6d54c0d25373842a59cbe/jiter-0.12.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:e427eee51149edf962203ff8db75a7514ab89be5cb623fb9cea1f20b54f1107b", size = 520828, upload-time = "2025-11-09T20:48:44.278Z" }, + { url = "https://files.pythonhosted.org/packages/cc/0b/c6d3562a03fd767e31cb119d9041ea7958c3c80cb3d753eafb19b3b18349/jiter-0.12.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:edb868841f84c111255ba5e80339d386d937ec1fdce419518ce1bd9370fac5b6", size = 511009, upload-time = "2025-11-09T20:48:45.726Z" }, + { url = "https://files.pythonhosted.org/packages/aa/51/2cb4468b3448a8385ebcd15059d325c9ce67df4e2758d133ab9442b19834/jiter-0.12.0-cp314-cp314t-win32.whl", hash = "sha256:8bbcfe2791dfdb7c5e48baf646d37a6a3dcb5a97a032017741dea9f817dca183", size = 205110, upload-time = "2025-11-09T20:48:47.033Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c5/ae5ec83dec9c2d1af805fd5fe8f74ebded9c8670c5210ec7820ce0dbeb1e/jiter-0.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2fa940963bf02e1d8226027ef461e36af472dea85d36054ff835aeed944dd873", size = 205223, upload-time = "2025-11-09T20:48:49.076Z" }, + { url = "https://files.pythonhosted.org/packages/97/9a/3c5391907277f0e55195550cf3fa8e293ae9ee0c00fb402fec1e38c0c82f/jiter-0.12.0-cp314-cp314t-win_arm64.whl", hash = "sha256:506c9708dd29b27288f9f8f1140c3cb0e3d8ddb045956d7757b1fa0e0f39a473", size = 185564, upload-time = "2025-11-09T20:48:50.376Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/5339ef1ecaa881c6948669956567a64d2670941925f245c434f494ffb0e5/jiter-0.12.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:4739a4657179ebf08f85914ce50332495811004cc1747852e8b2041ed2aab9b8", size = 311144, upload-time = "2025-11-09T20:49:10.503Z" }, + { url = "https://files.pythonhosted.org/packages/27/74/3446c652bffbd5e81ab354e388b1b5fc1d20daac34ee0ed11ff096b1b01a/jiter-0.12.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:41da8def934bf7bec16cb24bd33c0ca62126d2d45d81d17b864bd5ad721393c3", size = 305877, upload-time = "2025-11-09T20:49:12.269Z" }, + { url = "https://files.pythonhosted.org/packages/a1/f4/ed76ef9043450f57aac2d4fbeb27175aa0eb9c38f833be6ef6379b3b9a86/jiter-0.12.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c44ee814f499c082e69872d426b624987dbc5943ab06e9bbaa4f81989fdb79e", size = 340419, upload-time = "2025-11-09T20:49:13.803Z" }, + { url = "https://files.pythonhosted.org/packages/21/01/857d4608f5edb0664aa791a3d45702e1a5bcfff9934da74035e7b9803846/jiter-0.12.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd2097de91cf03eaa27b3cbdb969addf83f0179c6afc41bbc4513705e013c65d", size = 347212, upload-time = "2025-11-09T20:49:15.643Z" }, + { url = "https://files.pythonhosted.org/packages/cb/f5/12efb8ada5f5c9edc1d4555fe383c1fb2eac05ac5859258a72d61981d999/jiter-0.12.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:e8547883d7b96ef2e5fe22b88f8a4c8725a56e7f4abafff20fd5272d634c7ecb", size = 309974, upload-time = "2025-11-09T20:49:17.187Z" }, + { url = "https://files.pythonhosted.org/packages/85/15/d6eb3b770f6a0d332675141ab3962fd4a7c270ede3515d9f3583e1d28276/jiter-0.12.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:89163163c0934854a668ed783a2546a0617f71706a2551a4a0666d91ab365d6b", size = 304233, upload-time = "2025-11-09T20:49:18.734Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3e/e7e06743294eea2cf02ced6aa0ff2ad237367394e37a0e2b4a1108c67a36/jiter-0.12.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d96b264ab7d34bbb2312dedc47ce07cd53f06835eacbc16dde3761f47c3a9e7f", size = 338537, upload-time = "2025-11-09T20:49:20.317Z" }, + { url = "https://files.pythonhosted.org/packages/2f/9c/6753e6522b8d0ef07d3a3d239426669e984fb0eba15a315cdbc1253904e4/jiter-0.12.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24e864cb30ab82311c6425655b0cdab0a98c5d973b065c66a3f020740c2324c", size = 346110, upload-time = "2025-11-09T20:49:21.817Z" }, +] + +[[package]] +name = "jmespath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843, upload-time = "2022-06-17T18:00:12.224Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256, upload-time = "2022-06-17T18:00:10.251Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "kernelbench" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "cupy-cuda12x" }, + { name = "datasets" }, + { name = "einops" }, + { name = "litellm", extra = ["proxy"] }, + { name = "modal" }, + { name = "ninja" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "nvidia-cutlass-dsl" }, + { name = "openai" }, + { name = "packaging" }, + { name = "pydra-config" }, + { name = "pytest" }, + { name = "python-dotenv" }, + { name = "tilelang" }, + { name = "torch" }, + { name = "tqdm" }, + { name = "transformers" }, + { name = "triton" }, +] + +[package.optional-dependencies] +dev = [ + { name = "pytest" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pytest" }, +] + +[package.metadata] +requires-dist = [ + { name = "cupy-cuda12x" }, + { name = "datasets" }, + { name = "einops" }, + { name = "litellm", extras = ["proxy"] }, + { name = "modal" }, + { name = "ninja" }, + { name = "numpy" }, + { name = "nvidia-cutlass-dsl" }, + { name = "openai" }, + { name = "packaging" }, + { name = "pydra-config" }, + { name = "pytest" }, + { name = "pytest", marker = "extra == 'dev'" }, + { name = "python-dotenv" }, + { name = "tilelang" }, + { name = "torch", specifier = "==2.9.0" }, + { name = "tqdm" }, + { name = "transformers" }, + { name = "triton" }, +] +provides-extras = ["dev"] + +[package.metadata.requires-dev] +dev = [{ name = "pytest" }] + +[[package]] +name = "litellm" +version = "1.80.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "click" }, + { name = "fastuuid" }, + { name = "grpcio", version = "1.67.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, + { name = "grpcio", version = "1.76.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, + { name = "httpx" }, + { name = "importlib-metadata" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "openai" }, + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "tiktoken" }, + { name = "tokenizers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/44/0aaa7449e7c4aa05668ec03f1f68a01b1e476591071d9659a68db19371a2/litellm-1.80.10.tar.gz", hash = "sha256:4a4aff7558945c2f7e5c6523e67c1b5525a46b10b0e1ad6b8f847cb13b16779e", size = 12764777, upload-time = "2025-12-14T02:07:05.362Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/a9/4814b6aa58f6705df2831eaadeb5bc8240684c8c9d5964245212f85049d1/litellm-1.80.10-py3-none-any.whl", hash = "sha256:9b3e561efaba0eb1291cb1555d3dcb7283cf7f3cb65aadbcdb42e2a8765898c8", size = 11264240, upload-time = "2025-12-14T02:07:02.414Z" }, +] + +[package.optional-dependencies] +proxy = [ + { name = "apscheduler" }, + { name = "azure-identity" }, + { name = "azure-storage-blob" }, + { name = "backoff" }, + { name = "boto3" }, + { name = "cryptography" }, + { name = "fastapi" }, + { name = "fastapi-sso" }, + { name = "gunicorn" }, + { name = "litellm-enterprise" }, + { name = "litellm-proxy-extras" }, + { name = "mcp" }, + { name = "orjson" }, + { name = "polars" }, + { name = "pyjwt" }, + { name = "pynacl" }, + { name = "python-multipart" }, + { name = "pyyaml" }, + { name = "rich" }, + { name = "rq" }, + { name = "soundfile" }, + { name = "uvicorn" }, + { name = "uvloop", marker = "sys_platform != 'win32'" }, + { name = "websockets" }, +] + +[[package]] +name = "litellm-enterprise" +version = "0.1.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/0a/2a166a3e598c581fcd295ec74f0706718051d0aeefccc636914d18c7fc86/litellm_enterprise-0.1.25.tar.gz", hash = "sha256:1c82178b8e2c85f47b31910fd103a322b46d6caea44cd7a8c80b00fdcfeacd22", size = 43420, upload-time = "2025-12-11T04:33:10.694Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/b2/31ac8e551216a6a92e6d47b6d9e3e49d8957ee6da15abf73eeb9aaeec1f3/litellm_enterprise-0.1.25-py3-none-any.whl", hash = "sha256:80c8f1996846453ad309e74cd6d2659d9508320370df5d462d34326b06401c4d", size = 104440, upload-time = "2025-12-11T04:33:06.103Z" }, +] + +[[package]] +name = "litellm-proxy-extras" +version = "0.4.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ab/3f/8beffc57faae37a3c47a532cdfb2ac3bf6397905a8c0f4b50366bc0f0dc5/litellm_proxy_extras-0.4.14.tar.gz", hash = "sha256:518680192aac39c8c4f96ee0f3a87e2905250d3edaea8e0c4ff54ee598e775b0", size = 19525, upload-time = "2025-12-14T00:20:52.111Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/61/67f9d39afda151e3f37d2f1426fd797675a2af0d2c1045764b598476a4a9/litellm_proxy_extras-0.4.14-py3-none-any.whl", hash = "sha256:6943e19abb696e080b5a2a01472b99b1d78603ecb9df24604eba428f54440e7d", size = 43086, upload-time = "2025-12-14T00:20:50.298Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "mcp" +version = "1.24.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "python-multipart" }, + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/2c/db9ae5ab1fcdd9cd2bcc7ca3b7361b712e30590b64d5151a31563af8f82d/mcp-1.24.0.tar.gz", hash = "sha256:aeaad134664ce56f2721d1abf300666a1e8348563f4d3baff361c3b652448efc", size = 604375, upload-time = "2025-12-12T14:19:38.205Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/0d/5cf14e177c8ae655a2fd9324a6ef657ca4cafd3fc2201c87716055e29641/mcp-1.24.0-py3-none-any.whl", hash = "sha256:db130e103cc50ddc3dffc928382f33ba3eaef0b711f7a87c05e7ded65b1ca062", size = 232896, upload-time = "2025-12-12T14:19:36.14Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "ml-dtypes" +version = "0.5.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/4a/c27b42ed9b1c7d13d9ba8b6905dece787d6259152f2309338aed29b2447b/ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453", size = 692314, upload-time = "2025-11-17T22:32:31.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/3a/c5b855752a70267ff729c349e650263adb3c206c29d28cc8ea7ace30a1d5/ml_dtypes-0.5.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b95e97e470fe60ed493fd9ae3911d8da4ebac16bd21f87ffa2b7c588bf22ea2c", size = 679735, upload-time = "2025-11-17T22:31:31.367Z" }, + { url = "https://files.pythonhosted.org/packages/41/79/7433f30ee04bd4faa303844048f55e1eb939131c8e5195a00a96a0939b64/ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4b801ebe0b477be666696bda493a9be8356f1f0057a57f1e35cd26928823e5a", size = 5051883, upload-time = "2025-11-17T22:31:33.658Z" }, + { url = "https://files.pythonhosted.org/packages/10/b1/8938e8830b0ee2e167fc75a094dea766a1152bde46752cd9bfc57ee78a82/ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:388d399a2152dd79a3f0456a952284a99ee5c93d3e2f8dfe25977511e0515270", size = 5030369, upload-time = "2025-11-17T22:31:35.595Z" }, + { url = "https://files.pythonhosted.org/packages/c7/a3/51886727bd16e2f47587997b802dd56398692ce8c6c03c2e5bb32ecafe26/ml_dtypes-0.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:4ff7f3e7ca2972e7de850e7b8fcbb355304271e2933dd90814c1cb847414d6e2", size = 210738, upload-time = "2025-11-17T22:31:37.43Z" }, + { url = "https://files.pythonhosted.org/packages/c6/5e/712092cfe7e5eb667b8ad9ca7c54442f21ed7ca8979745f1000e24cf8737/ml_dtypes-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6c7ecb74c4bd71db68a6bea1edf8da8c34f3d9fe218f038814fd1d310ac76c90", size = 679734, upload-time = "2025-11-17T22:31:39.223Z" }, + { url = "https://files.pythonhosted.org/packages/4f/cf/912146dfd4b5c0eea956836c01dcd2fce6c9c844b2691f5152aca196ce4f/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc11d7e8c44a65115d05e2ab9989d1e045125d7be8e05a071a48bc76eb6d6040", size = 5056165, upload-time = "2025-11-17T22:31:41.071Z" }, + { url = "https://files.pythonhosted.org/packages/a9/80/19189ea605017473660e43762dc853d2797984b3c7bf30ce656099add30c/ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b9a53598f21e453ea2fbda8aa783c20faff8e1eeb0d7ab899309a0053f1483", size = 5034975, upload-time = "2025-11-17T22:31:42.758Z" }, + { url = "https://files.pythonhosted.org/packages/b4/24/70bd59276883fdd91600ca20040b41efd4902a923283c4d6edcb1de128d2/ml_dtypes-0.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:7c23c54a00ae43edf48d44066a7ec31e05fdc2eee0be2b8b50dd1903a1db94bb", size = 210742, upload-time = "2025-11-17T22:31:44.068Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c9/64230ef14e40aa3f1cb254ef623bf812735e6bec7772848d19131111ac0d/ml_dtypes-0.5.4-cp311-cp311-win_arm64.whl", hash = "sha256:557a31a390b7e9439056644cb80ed0735a6e3e3bb09d67fd5687e4b04238d1de", size = 160709, upload-time = "2025-11-17T22:31:46.557Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a174837a64f5b16cab6f368171a1a03a27936b31699d167684073ff1c4237dac", size = 676927, upload-time = "2025-11-17T22:31:48.182Z" }, + { url = "https://files.pythonhosted.org/packages/54/0f/428ef6881782e5ebb7eca459689448c0394fa0a80bea3aa9262cba5445ea/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7f7c643e8b1320fd958bf098aa7ecf70623a42ec5154e3be3be673f4c34d900", size = 5028464, upload-time = "2025-11-17T22:31:50.135Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ad459e99793fa6e13bd5b7e6792c8f9190b4e5a1b45c63aba14a4d0a7f1d5ff", size = 5009002, upload-time = "2025-11-17T22:31:52.001Z" }, + { url = "https://files.pythonhosted.org/packages/f5/f0/0cfadd537c5470378b1b32bd859cf2824972174b51b873c9d95cfd7475a5/ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:c1a953995cccb9e25a4ae19e34316671e4e2edaebe4cf538229b1fc7109087b7", size = 212222, upload-time = "2025-11-17T22:31:53.742Z" }, + { url = "https://files.pythonhosted.org/packages/16/2e/9acc86985bfad8f2c2d30291b27cd2bb4c74cea08695bd540906ed744249/ml_dtypes-0.5.4-cp312-cp312-win_arm64.whl", hash = "sha256:9bad06436568442575beb2d03389aa7456c690a5b05892c471215bfd8cf39460", size = 160793, upload-time = "2025-11-17T22:31:55.358Z" }, + { url = "https://files.pythonhosted.org/packages/d9/a1/4008f14bbc616cfb1ac5b39ea485f9c63031c4634ab3f4cf72e7541f816a/ml_dtypes-0.5.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c760d85a2f82e2bed75867079188c9d18dae2ee77c25a54d60e9cc79be1bc48", size = 676888, upload-time = "2025-11-17T22:31:56.907Z" }, + { url = "https://files.pythonhosted.org/packages/d3/b7/dff378afc2b0d5a7d6cd9d3209b60474d9819d1189d347521e1688a60a53/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce756d3a10d0c4067172804c9cc276ba9cc0ff47af9078ad439b075d1abdc29b", size = 5036993, upload-time = "2025-11-17T22:31:58.497Z" }, + { url = "https://files.pythonhosted.org/packages/eb/33/40cd74219417e78b97c47802037cf2d87b91973e18bb968a7da48a96ea44/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:533ce891ba774eabf607172254f2e7260ba5f57bdd64030c9a4fcfbd99815d0d", size = 5010956, upload-time = "2025-11-17T22:31:59.931Z" }, + { url = "https://files.pythonhosted.org/packages/e1/8b/200088c6859d8221454825959df35b5244fa9bdf263fd0249ac5fb75e281/ml_dtypes-0.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:f21c9219ef48ca5ee78402d5cc831bd58ea27ce89beda894428bc67a52da5328", size = 212224, upload-time = "2025-11-17T22:32:01.349Z" }, + { url = "https://files.pythonhosted.org/packages/8f/75/dfc3775cb36367816e678f69a7843f6f03bd4e2bcd79941e01ea960a068e/ml_dtypes-0.5.4-cp313-cp313-win_arm64.whl", hash = "sha256:35f29491a3e478407f7047b8a4834e4640a77d2737e0b294d049746507af5175", size = 160798, upload-time = "2025-11-17T22:32:02.864Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/e9ddb35fd1dd43b1106c20ced3f53c2e8e7fc7598c15638e9f80677f81d4/ml_dtypes-0.5.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:304ad47faa395415b9ccbcc06a0350800bc50eda70f0e45326796e27c62f18b6", size = 702083, upload-time = "2025-11-17T22:32:04.08Z" }, + { url = "https://files.pythonhosted.org/packages/74/f5/667060b0aed1aa63166b22897fdf16dca9eb704e6b4bbf86848d5a181aa7/ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a0df4223b514d799b8a1629c65ddc351b3efa833ccf7f8ea0cf654a61d1e35d", size = 5354111, upload-time = "2025-11-17T22:32:05.546Z" }, + { url = "https://files.pythonhosted.org/packages/40/49/0f8c498a28c0efa5f5c95a9e374c83ec1385ca41d0e85e7cf40e5d519a21/ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531eff30e4d368cb6255bc2328d070e35836aa4f282a0fb5f3a0cd7260257298", size = 5366453, upload-time = "2025-11-17T22:32:07.115Z" }, + { url = "https://files.pythonhosted.org/packages/8c/27/12607423d0a9c6bbbcc780ad19f1f6baa2b68b18ce4bddcdc122c4c68dc9/ml_dtypes-0.5.4-cp313-cp313t-win_amd64.whl", hash = "sha256:cb73dccfc991691c444acc8c0012bee8f2470da826a92e3a20bb333b1a7894e6", size = 225612, upload-time = "2025-11-17T22:32:08.615Z" }, + { url = "https://files.pythonhosted.org/packages/e5/80/5a5929e92c72936d5b19872c5fb8fc09327c1da67b3b68c6a13139e77e20/ml_dtypes-0.5.4-cp313-cp313t-win_arm64.whl", hash = "sha256:3bbbe120b915090d9dd1375e4684dd17a20a2491ef25d640a908281da85e73f1", size = 164145, upload-time = "2025-11-17T22:32:09.782Z" }, + { url = "https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22", size = 673781, upload-time = "2025-11-17T22:32:11.364Z" }, + { url = "https://files.pythonhosted.org/packages/04/f9/067b84365c7e83bda15bba2b06c6ca250ce27b20630b1128c435fb7a09aa/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:805cef3a38f4eafae3a5bf9ebdcdb741d0bcfd9e1bd90eb54abd24f928cd2465", size = 5036145, upload-time = "2025-11-17T22:32:12.783Z" }, + { url = "https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f", size = 5010230, upload-time = "2025-11-17T22:32:14.38Z" }, + { url = "https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl", hash = "sha256:8c6a2dcebd6f3903e05d51960a8058d6e131fe69f952a5397e5dbabc841b6d56", size = 221032, upload-time = "2025-11-17T22:32:15.763Z" }, + { url = "https://files.pythonhosted.org/packages/76/a3/9c912fe6ea747bb10fe2f8f54d027eb265db05dfb0c6335e3e063e74e6e8/ml_dtypes-0.5.4-cp314-cp314-win_arm64.whl", hash = "sha256:5a0f68ca8fd8d16583dfa7793973feb86f2fbb56ce3966daf9c9f748f52a2049", size = 163353, upload-time = "2025-11-17T22:32:16.932Z" }, + { url = "https://files.pythonhosted.org/packages/cd/02/48aa7d84cc30ab4ee37624a2fd98c56c02326785750cd212bc0826c2f15b/ml_dtypes-0.5.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:bfc534409c5d4b0bf945af29e5d0ab075eae9eecbb549ff8a29280db822f34f9", size = 702085, upload-time = "2025-11-17T22:32:18.175Z" }, + { url = "https://files.pythonhosted.org/packages/5a/e7/85cb99fe80a7a5513253ec7faa88a65306be071163485e9a626fce1b6e84/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2314892cdc3fcf05e373d76d72aaa15fda9fb98625effa73c1d646f331fcecb7", size = 5355358, upload-time = "2025-11-17T22:32:19.7Z" }, + { url = "https://files.pythonhosted.org/packages/79/2b/a826ba18d2179a56e144aef69e57fb2ab7c464ef0b2111940ee8a3a223a2/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d2ffd05a2575b1519dc928c0b93c06339eb67173ff53acb00724502cda231cf", size = 5366332, upload-time = "2025-11-17T22:32:21.193Z" }, + { url = "https://files.pythonhosted.org/packages/84/44/f4d18446eacb20ea11e82f133ea8f86e2bf2891785b67d9da8d0ab0ef525/ml_dtypes-0.5.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4381fe2f2452a2d7589689693d3162e876b3ddb0a832cde7a414f8e1adf7eab1", size = 236612, upload-time = "2025-11-17T22:32:22.579Z" }, + { url = "https://files.pythonhosted.org/packages/ad/3f/3d42e9a78fe5edf792a83c074b13b9b770092a4fbf3462872f4303135f09/ml_dtypes-0.5.4-cp314-cp314t-win_arm64.whl", hash = "sha256:11942cbf2cf92157db91e5022633c0d9474d4dfd813a909383bd23ce828a4b7d", size = 168825, upload-time = "2025-11-17T22:32:23.766Z" }, +] + +[[package]] +name = "modal" +version = "1.2.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "cbor2" }, + { name = "certifi" }, + { name = "click" }, + { name = "grpclib" }, + { name = "protobuf" }, + { name = "rich" }, + { name = "synchronicity" }, + { name = "toml" }, + { name = "typer" }, + { name = "types-certifi" }, + { name = "types-toml" }, + { name = "typing-extensions" }, + { name = "watchfiles" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/82/45a5f0d5e03eac6ca45c7273fe93e1ad9347162d97c2926be813933721ea/modal-1.2.6.tar.gz", hash = "sha256:95a81b7218cc8f6a4b2a23f74d2afaa972293926729c67c00d881b0daf3ee79a", size = 644401, upload-time = "2025-12-16T17:23:41.286Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3f/9aa4175a49152043ae43f6a7570511d64c7916d8248f694c93218b3f322f/modal-1.2.6-py3-none-any.whl", hash = "sha256:fdd7ee42e546aa445d915887801c4cad3e73aa667eb5d8f9bd0db618a1914e72", size = 740680, upload-time = "2025-12-16T17:23:38.94Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "msal" +version = "1.34.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/0e/c857c46d653e104019a84f22d4494f2119b4fe9f896c92b4b864b3b045cc/msal-1.34.0.tar.gz", hash = "sha256:76ba83b716ea5a6d75b0279c0ac353a0e05b820ca1f6682c0eb7f45190c43c2f", size = 153961, upload-time = "2025-09-22T23:05:48.989Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/dc/18d48843499e278538890dc709e9ee3dea8375f8be8e82682851df1b48b5/msal-1.34.0-py3-none-any.whl", hash = "sha256:f669b1644e4950115da7a176441b0e13ec2975c29528d8b9e81316023676d6e1", size = 116987, upload-time = "2025-09-22T23:05:47.294Z" }, +] + +[[package]] +name = "msal-extensions" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "msal" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/99/5d239b6156eddf761a636bded1118414d161bd6b7b37a9335549ed159396/msal_extensions-1.3.1.tar.gz", hash = "sha256:c5b0fd10f65ef62b5f1d62f4251d51cbcaf003fcedae8c91b040a488614be1a4", size = 23315, upload-time = "2025-03-14T23:51:03.902Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/75/bd9b7bb966668920f06b200e84454c8f3566b102183bc55c5473d96cb2b9/msal_extensions-1.3.1-py3-none-any.whl", hash = "sha256:96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca", size = 20583, upload-time = "2025-03-14T23:51:03.016Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/1e/5492c365f222f907de1039b91f922b93fa4f764c713ee858d235495d8f50/multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5", size = 101834, upload-time = "2025-10-06T14:52:30.657Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/63/7bdd4adc330abcca54c85728db2327130e49e52e8c3ce685cec44e0f2e9f/multidict-6.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349", size = 77153, upload-time = "2025-10-06T14:48:26.409Z" }, + { url = "https://files.pythonhosted.org/packages/3f/bb/b6c35ff175ed1a3142222b78455ee31be71a8396ed3ab5280fbe3ebe4e85/multidict-6.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e", size = 44993, upload-time = "2025-10-06T14:48:28.4Z" }, + { url = "https://files.pythonhosted.org/packages/e0/1f/064c77877c5fa6df6d346e68075c0f6998547afe952d6471b4c5f6a7345d/multidict-6.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3", size = 44607, upload-time = "2025-10-06T14:48:29.581Z" }, + { url = "https://files.pythonhosted.org/packages/04/7a/bf6aa92065dd47f287690000b3d7d332edfccb2277634cadf6a810463c6a/multidict-6.7.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046", size = 241847, upload-time = "2025-10-06T14:48:32.107Z" }, + { url = "https://files.pythonhosted.org/packages/94/39/297a8de920f76eda343e4ce05f3b489f0ab3f9504f2576dfb37b7c08ca08/multidict-6.7.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32", size = 242616, upload-time = "2025-10-06T14:48:34.054Z" }, + { url = "https://files.pythonhosted.org/packages/39/3a/d0eee2898cfd9d654aea6cb8c4addc2f9756e9a7e09391cfe55541f917f7/multidict-6.7.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73", size = 222333, upload-time = "2025-10-06T14:48:35.9Z" }, + { url = "https://files.pythonhosted.org/packages/05/48/3b328851193c7a4240815b71eea165b49248867bbb6153a0aee227a0bb47/multidict-6.7.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc", size = 253239, upload-time = "2025-10-06T14:48:37.302Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ca/0706a98c8d126a89245413225ca4a3fefc8435014de309cf8b30acb68841/multidict-6.7.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62", size = 251618, upload-time = "2025-10-06T14:48:38.963Z" }, + { url = "https://files.pythonhosted.org/packages/5e/4f/9c7992f245554d8b173f6f0a048ad24b3e645d883f096857ec2c0822b8bd/multidict-6.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84", size = 241655, upload-time = "2025-10-06T14:48:40.312Z" }, + { url = "https://files.pythonhosted.org/packages/31/79/26a85991ae67efd1c0b1fc2e0c275b8a6aceeb155a68861f63f87a798f16/multidict-6.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0", size = 239245, upload-time = "2025-10-06T14:48:41.848Z" }, + { url = "https://files.pythonhosted.org/packages/14/1e/75fa96394478930b79d0302eaf9a6c69f34005a1a5251ac8b9c336486ec9/multidict-6.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e", size = 233523, upload-time = "2025-10-06T14:48:43.749Z" }, + { url = "https://files.pythonhosted.org/packages/b2/5e/085544cb9f9c4ad2b5d97467c15f856df8d9bac410cffd5c43991a5d878b/multidict-6.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4", size = 243129, upload-time = "2025-10-06T14:48:45.225Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c3/e9d9e2f20c9474e7a8fcef28f863c5cbd29bb5adce6b70cebe8bdad0039d/multidict-6.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648", size = 248999, upload-time = "2025-10-06T14:48:46.703Z" }, + { url = "https://files.pythonhosted.org/packages/b5/3f/df171b6efa3239ae33b97b887e42671cd1d94d460614bfb2c30ffdab3b95/multidict-6.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111", size = 243711, upload-time = "2025-10-06T14:48:48.146Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2f/9b5564888c4e14b9af64c54acf149263721a283aaf4aa0ae89b091d5d8c1/multidict-6.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36", size = 237504, upload-time = "2025-10-06T14:48:49.447Z" }, + { url = "https://files.pythonhosted.org/packages/6c/3a/0bd6ca0f7d96d790542d591c8c3354c1e1b6bfd2024d4d92dc3d87485ec7/multidict-6.7.0-cp310-cp310-win32.whl", hash = "sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85", size = 41422, upload-time = "2025-10-06T14:48:50.789Z" }, + { url = "https://files.pythonhosted.org/packages/00/35/f6a637ea2c75f0d3b7c7d41b1189189acff0d9deeb8b8f35536bb30f5e33/multidict-6.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7", size = 46050, upload-time = "2025-10-06T14:48:51.938Z" }, + { url = "https://files.pythonhosted.org/packages/e7/b8/f7bf8329b39893d02d9d95cf610c75885d12fc0f402b1c894e1c8e01c916/multidict-6.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0", size = 43153, upload-time = "2025-10-06T14:48:53.146Z" }, + { url = "https://files.pythonhosted.org/packages/34/9e/5c727587644d67b2ed479041e4b1c58e30afc011e3d45d25bbe35781217c/multidict-6.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc", size = 76604, upload-time = "2025-10-06T14:48:54.277Z" }, + { url = "https://files.pythonhosted.org/packages/17/e4/67b5c27bd17c085a5ea8f1ec05b8a3e5cba0ca734bfcad5560fb129e70ca/multidict-6.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721", size = 44715, upload-time = "2025-10-06T14:48:55.445Z" }, + { url = "https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6", size = 44332, upload-time = "2025-10-06T14:48:56.706Z" }, + { url = "https://files.pythonhosted.org/packages/31/61/0c2d50241ada71ff61a79518db85ada85fdabfcf395d5968dae1cbda04e5/multidict-6.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c", size = 245212, upload-time = "2025-10-06T14:48:58.042Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e0/919666a4e4b57fff1b57f279be1c9316e6cdc5de8a8b525d76f6598fefc7/multidict-6.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7", size = 246671, upload-time = "2025-10-06T14:49:00.004Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cc/d027d9c5a520f3321b65adea289b965e7bcbd2c34402663f482648c716ce/multidict-6.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7", size = 225491, upload-time = "2025-10-06T14:49:01.393Z" }, + { url = "https://files.pythonhosted.org/packages/75/c4/bbd633980ce6155a28ff04e6a6492dd3335858394d7bb752d8b108708558/multidict-6.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9", size = 257322, upload-time = "2025-10-06T14:49:02.745Z" }, + { url = "https://files.pythonhosted.org/packages/4c/6d/d622322d344f1f053eae47e033b0b3f965af01212de21b10bcf91be991fb/multidict-6.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8", size = 254694, upload-time = "2025-10-06T14:49:04.15Z" }, + { url = "https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd", size = 246715, upload-time = "2025-10-06T14:49:05.967Z" }, + { url = "https://files.pythonhosted.org/packages/78/59/950818e04f91b9c2b95aab3d923d9eabd01689d0dcd889563988e9ea0fd8/multidict-6.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb", size = 243189, upload-time = "2025-10-06T14:49:07.37Z" }, + { url = "https://files.pythonhosted.org/packages/7a/3d/77c79e1934cad2ee74991840f8a0110966d9599b3af95964c0cd79bb905b/multidict-6.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6", size = 237845, upload-time = "2025-10-06T14:49:08.759Z" }, + { url = "https://files.pythonhosted.org/packages/63/1b/834ce32a0a97a3b70f86437f685f880136677ac00d8bce0027e9fd9c2db7/multidict-6.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2", size = 246374, upload-time = "2025-10-06T14:49:10.574Z" }, + { url = "https://files.pythonhosted.org/packages/23/ef/43d1c3ba205b5dec93dc97f3fba179dfa47910fc73aaaea4f7ceb41cec2a/multidict-6.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff", size = 253345, upload-time = "2025-10-06T14:49:12.331Z" }, + { url = "https://files.pythonhosted.org/packages/6b/03/eaf95bcc2d19ead522001f6a650ef32811aa9e3624ff0ad37c445c7a588c/multidict-6.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b", size = 246940, upload-time = "2025-10-06T14:49:13.821Z" }, + { url = "https://files.pythonhosted.org/packages/e8/df/ec8a5fd66ea6cd6f525b1fcbb23511b033c3e9bc42b81384834ffa484a62/multidict-6.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34", size = 242229, upload-time = "2025-10-06T14:49:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a2/59b405d59fd39ec86d1142630e9049243015a5f5291ba49cadf3c090c541/multidict-6.7.0-cp311-cp311-win32.whl", hash = "sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff", size = 41308, upload-time = "2025-10-06T14:49:16.871Z" }, + { url = "https://files.pythonhosted.org/packages/32/0f/13228f26f8b882c34da36efa776c3b7348455ec383bab4a66390e42963ae/multidict-6.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81", size = 46037, upload-time = "2025-10-06T14:49:18.457Z" }, + { url = "https://files.pythonhosted.org/packages/84/1f/68588e31b000535a3207fd3c909ebeec4fb36b52c442107499c18a896a2a/multidict-6.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912", size = 43023, upload-time = "2025-10-06T14:49:19.648Z" }, + { url = "https://files.pythonhosted.org/packages/c2/9e/9f61ac18d9c8b475889f32ccfa91c9f59363480613fc807b6e3023d6f60b/multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184", size = 76877, upload-time = "2025-10-06T14:49:20.884Z" }, + { url = "https://files.pythonhosted.org/packages/38/6f/614f09a04e6184f8824268fce4bc925e9849edfa654ddd59f0b64508c595/multidict-6.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45", size = 45467, upload-time = "2025-10-06T14:49:22.054Z" }, + { url = "https://files.pythonhosted.org/packages/b3/93/c4f67a436dd026f2e780c433277fff72be79152894d9fc36f44569cab1a6/multidict-6.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa", size = 43834, upload-time = "2025-10-06T14:49:23.566Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f5/013798161ca665e4a422afbc5e2d9e4070142a9ff8905e482139cd09e4d0/multidict-6.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7", size = 250545, upload-time = "2025-10-06T14:49:24.882Z" }, + { url = "https://files.pythonhosted.org/packages/71/2f/91dbac13e0ba94669ea5119ba267c9a832f0cb65419aca75549fcf09a3dc/multidict-6.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e", size = 258305, upload-time = "2025-10-06T14:49:26.778Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b0/754038b26f6e04488b48ac621f779c341338d78503fb45403755af2df477/multidict-6.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546", size = 242363, upload-time = "2025-10-06T14:49:28.562Z" }, + { url = "https://files.pythonhosted.org/packages/87/15/9da40b9336a7c9fa606c4cf2ed80a649dffeb42b905d4f63a1d7eb17d746/multidict-6.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4", size = 268375, upload-time = "2025-10-06T14:49:29.96Z" }, + { url = "https://files.pythonhosted.org/packages/82/72/c53fcade0cc94dfaad583105fd92b3a783af2091eddcb41a6d5a52474000/multidict-6.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1", size = 269346, upload-time = "2025-10-06T14:49:31.404Z" }, + { url = "https://files.pythonhosted.org/packages/0d/e2/9baffdae21a76f77ef8447f1a05a96ec4bc0a24dae08767abc0a2fe680b8/multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d", size = 256107, upload-time = "2025-10-06T14:49:32.974Z" }, + { url = "https://files.pythonhosted.org/packages/3c/06/3f06f611087dc60d65ef775f1fb5aca7c6d61c6db4990e7cda0cef9b1651/multidict-6.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304", size = 253592, upload-time = "2025-10-06T14:49:34.52Z" }, + { url = "https://files.pythonhosted.org/packages/20/24/54e804ec7945b6023b340c412ce9c3f81e91b3bf5fa5ce65558740141bee/multidict-6.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12", size = 251024, upload-time = "2025-10-06T14:49:35.956Z" }, + { url = "https://files.pythonhosted.org/packages/14/48/011cba467ea0b17ceb938315d219391d3e421dfd35928e5dbdc3f4ae76ef/multidict-6.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62", size = 251484, upload-time = "2025-10-06T14:49:37.631Z" }, + { url = "https://files.pythonhosted.org/packages/0d/2f/919258b43bb35b99fa127435cfb2d91798eb3a943396631ef43e3720dcf4/multidict-6.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0", size = 263579, upload-time = "2025-10-06T14:49:39.502Z" }, + { url = "https://files.pythonhosted.org/packages/31/22/a0e884d86b5242b5a74cf08e876bdf299e413016b66e55511f7a804a366e/multidict-6.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a", size = 259654, upload-time = "2025-10-06T14:49:41.32Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e5/17e10e1b5c5f5a40f2fcbb45953c9b215f8a4098003915e46a93f5fcaa8f/multidict-6.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8", size = 251511, upload-time = "2025-10-06T14:49:46.021Z" }, + { url = "https://files.pythonhosted.org/packages/e3/9a/201bb1e17e7af53139597069c375e7b0dcbd47594604f65c2d5359508566/multidict-6.7.0-cp312-cp312-win32.whl", hash = "sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4", size = 41895, upload-time = "2025-10-06T14:49:48.718Z" }, + { url = "https://files.pythonhosted.org/packages/46/e2/348cd32faad84eaf1d20cce80e2bb0ef8d312c55bca1f7fa9865e7770aaf/multidict-6.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b", size = 46073, upload-time = "2025-10-06T14:49:50.28Z" }, + { url = "https://files.pythonhosted.org/packages/25/ec/aad2613c1910dce907480e0c3aa306905830f25df2e54ccc9dea450cb5aa/multidict-6.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec", size = 43226, upload-time = "2025-10-06T14:49:52.304Z" }, + { url = "https://files.pythonhosted.org/packages/d2/86/33272a544eeb36d66e4d9a920602d1a2f57d4ebea4ef3cdfe5a912574c95/multidict-6.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6", size = 76135, upload-time = "2025-10-06T14:49:54.26Z" }, + { url = "https://files.pythonhosted.org/packages/91/1c/eb97db117a1ebe46d457a3d235a7b9d2e6dcab174f42d1b67663dd9e5371/multidict-6.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159", size = 45117, upload-time = "2025-10-06T14:49:55.82Z" }, + { url = "https://files.pythonhosted.org/packages/f1/d8/6c3442322e41fb1dd4de8bd67bfd11cd72352ac131f6368315617de752f1/multidict-6.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca", size = 43472, upload-time = "2025-10-06T14:49:57.048Z" }, + { url = "https://files.pythonhosted.org/packages/75/3f/e2639e80325af0b6c6febdf8e57cc07043ff15f57fa1ef808f4ccb5ac4cd/multidict-6.7.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8", size = 249342, upload-time = "2025-10-06T14:49:58.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/cc/84e0585f805cbeaa9cbdaa95f9a3d6aed745b9d25700623ac89a6ecff400/multidict-6.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60", size = 257082, upload-time = "2025-10-06T14:49:59.89Z" }, + { url = "https://files.pythonhosted.org/packages/b0/9c/ac851c107c92289acbbf5cfb485694084690c1b17e555f44952c26ddc5bd/multidict-6.7.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4", size = 240704, upload-time = "2025-10-06T14:50:01.485Z" }, + { url = "https://files.pythonhosted.org/packages/50/cc/5f93e99427248c09da95b62d64b25748a5f5c98c7c2ab09825a1d6af0e15/multidict-6.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f", size = 266355, upload-time = "2025-10-06T14:50:02.955Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0c/2ec1d883ceb79c6f7f6d7ad90c919c898f5d1c6ea96d322751420211e072/multidict-6.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf", size = 267259, upload-time = "2025-10-06T14:50:04.446Z" }, + { url = "https://files.pythonhosted.org/packages/c6/2d/f0b184fa88d6630aa267680bdb8623fb69cb0d024b8c6f0d23f9a0f406d3/multidict-6.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32", size = 254903, upload-time = "2025-10-06T14:50:05.98Z" }, + { url = "https://files.pythonhosted.org/packages/06/c9/11ea263ad0df7dfabcad404feb3c0dd40b131bc7f232d5537f2fb1356951/multidict-6.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036", size = 252365, upload-time = "2025-10-06T14:50:07.511Z" }, + { url = "https://files.pythonhosted.org/packages/41/88/d714b86ee2c17d6e09850c70c9d310abac3d808ab49dfa16b43aba9d53fd/multidict-6.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec", size = 250062, upload-time = "2025-10-06T14:50:09.074Z" }, + { url = "https://files.pythonhosted.org/packages/15/fe/ad407bb9e818c2b31383f6131ca19ea7e35ce93cf1310fce69f12e89de75/multidict-6.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e", size = 249683, upload-time = "2025-10-06T14:50:10.714Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a4/a89abdb0229e533fb925e7c6e5c40201c2873efebc9abaf14046a4536ee6/multidict-6.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64", size = 261254, upload-time = "2025-10-06T14:50:12.28Z" }, + { url = "https://files.pythonhosted.org/packages/8d/aa/0e2b27bd88b40a4fb8dc53dd74eecac70edaa4c1dd0707eb2164da3675b3/multidict-6.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd", size = 257967, upload-time = "2025-10-06T14:50:14.16Z" }, + { url = "https://files.pythonhosted.org/packages/d0/8e/0c67b7120d5d5f6d874ed85a085f9dc770a7f9d8813e80f44a9fec820bb7/multidict-6.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288", size = 250085, upload-time = "2025-10-06T14:50:15.639Z" }, + { url = "https://files.pythonhosted.org/packages/ba/55/b73e1d624ea4b8fd4dd07a3bb70f6e4c7c6c5d9d640a41c6ffe5cdbd2a55/multidict-6.7.0-cp313-cp313-win32.whl", hash = "sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17", size = 41713, upload-time = "2025-10-06T14:50:17.066Z" }, + { url = "https://files.pythonhosted.org/packages/32/31/75c59e7d3b4205075b4c183fa4ca398a2daf2303ddf616b04ae6ef55cffe/multidict-6.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390", size = 45915, upload-time = "2025-10-06T14:50:18.264Z" }, + { url = "https://files.pythonhosted.org/packages/31/2a/8987831e811f1184c22bc2e45844934385363ee61c0a2dcfa8f71b87e608/multidict-6.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e", size = 43077, upload-time = "2025-10-06T14:50:19.853Z" }, + { url = "https://files.pythonhosted.org/packages/e8/68/7b3a5170a382a340147337b300b9eb25a9ddb573bcdfff19c0fa3f31ffba/multidict-6.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00", size = 83114, upload-time = "2025-10-06T14:50:21.223Z" }, + { url = "https://files.pythonhosted.org/packages/55/5c/3fa2d07c84df4e302060f555bbf539310980362236ad49f50eeb0a1c1eb9/multidict-6.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb", size = 48442, upload-time = "2025-10-06T14:50:22.871Z" }, + { url = "https://files.pythonhosted.org/packages/fc/56/67212d33239797f9bd91962bb899d72bb0f4c35a8652dcdb8ed049bef878/multidict-6.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b", size = 46885, upload-time = "2025-10-06T14:50:24.258Z" }, + { url = "https://files.pythonhosted.org/packages/46/d1/908f896224290350721597a61a69cd19b89ad8ee0ae1f38b3f5cd12ea2ac/multidict-6.7.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c", size = 242588, upload-time = "2025-10-06T14:50:25.716Z" }, + { url = "https://files.pythonhosted.org/packages/ab/67/8604288bbd68680eee0ab568fdcb56171d8b23a01bcd5cb0c8fedf6e5d99/multidict-6.7.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1", size = 249966, upload-time = "2025-10-06T14:50:28.192Z" }, + { url = "https://files.pythonhosted.org/packages/20/33/9228d76339f1ba51e3efef7da3ebd91964d3006217aae13211653193c3ff/multidict-6.7.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b", size = 228618, upload-time = "2025-10-06T14:50:29.82Z" }, + { url = "https://files.pythonhosted.org/packages/f8/2d/25d9b566d10cab1c42b3b9e5b11ef79c9111eaf4463b8c257a3bd89e0ead/multidict-6.7.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5", size = 257539, upload-time = "2025-10-06T14:50:31.731Z" }, + { url = "https://files.pythonhosted.org/packages/b6/b1/8d1a965e6637fc33de3c0d8f414485c2b7e4af00f42cab3d84e7b955c222/multidict-6.7.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad", size = 256345, upload-time = "2025-10-06T14:50:33.26Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0c/06b5a8adbdeedada6f4fb8d8f193d44a347223b11939b42953eeb6530b6b/multidict-6.7.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c", size = 247934, upload-time = "2025-10-06T14:50:34.808Z" }, + { url = "https://files.pythonhosted.org/packages/8f/31/b2491b5fe167ca044c6eb4b8f2c9f3b8a00b24c432c365358eadac5d7625/multidict-6.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5", size = 245243, upload-time = "2025-10-06T14:50:36.436Z" }, + { url = "https://files.pythonhosted.org/packages/61/1a/982913957cb90406c8c94f53001abd9eafc271cb3e70ff6371590bec478e/multidict-6.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10", size = 235878, upload-time = "2025-10-06T14:50:37.953Z" }, + { url = "https://files.pythonhosted.org/packages/be/c0/21435d804c1a1cf7a2608593f4d19bca5bcbd7a81a70b253fdd1c12af9c0/multidict-6.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754", size = 243452, upload-time = "2025-10-06T14:50:39.574Z" }, + { url = "https://files.pythonhosted.org/packages/54/0a/4349d540d4a883863191be6eb9a928846d4ec0ea007d3dcd36323bb058ac/multidict-6.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c", size = 252312, upload-time = "2025-10-06T14:50:41.612Z" }, + { url = "https://files.pythonhosted.org/packages/26/64/d5416038dbda1488daf16b676e4dbfd9674dde10a0cc8f4fc2b502d8125d/multidict-6.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762", size = 246935, upload-time = "2025-10-06T14:50:43.972Z" }, + { url = "https://files.pythonhosted.org/packages/9f/8c/8290c50d14e49f35e0bd4abc25e1bc7711149ca9588ab7d04f886cdf03d9/multidict-6.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6", size = 243385, upload-time = "2025-10-06T14:50:45.648Z" }, + { url = "https://files.pythonhosted.org/packages/ef/a0/f83ae75e42d694b3fbad3e047670e511c138be747bc713cf1b10d5096416/multidict-6.7.0-cp313-cp313t-win32.whl", hash = "sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d", size = 47777, upload-time = "2025-10-06T14:50:47.154Z" }, + { url = "https://files.pythonhosted.org/packages/dc/80/9b174a92814a3830b7357307a792300f42c9e94664b01dee8e457551fa66/multidict-6.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6", size = 53104, upload-time = "2025-10-06T14:50:48.851Z" }, + { url = "https://files.pythonhosted.org/packages/cc/28/04baeaf0428d95bb7a7bea0e691ba2f31394338ba424fb0679a9ed0f4c09/multidict-6.7.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792", size = 45503, upload-time = "2025-10-06T14:50:50.16Z" }, + { url = "https://files.pythonhosted.org/packages/e2/b1/3da6934455dd4b261d4c72f897e3a5728eba81db59959f3a639245891baa/multidict-6.7.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842", size = 75128, upload-time = "2025-10-06T14:50:51.92Z" }, + { url = "https://files.pythonhosted.org/packages/14/2c/f069cab5b51d175a1a2cb4ccdf7a2c2dabd58aa5bd933fa036a8d15e2404/multidict-6.7.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b", size = 44410, upload-time = "2025-10-06T14:50:53.275Z" }, + { url = "https://files.pythonhosted.org/packages/42/e2/64bb41266427af6642b6b128e8774ed84c11b80a90702c13ac0a86bb10cc/multidict-6.7.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38", size = 43205, upload-time = "2025-10-06T14:50:54.911Z" }, + { url = "https://files.pythonhosted.org/packages/02/68/6b086fef8a3f1a8541b9236c594f0c9245617c29841f2e0395d979485cde/multidict-6.7.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128", size = 245084, upload-time = "2025-10-06T14:50:56.369Z" }, + { url = "https://files.pythonhosted.org/packages/15/ee/f524093232007cd7a75c1d132df70f235cfd590a7c9eaccd7ff422ef4ae8/multidict-6.7.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34", size = 252667, upload-time = "2025-10-06T14:50:57.991Z" }, + { url = "https://files.pythonhosted.org/packages/02/a5/eeb3f43ab45878f1895118c3ef157a480db58ede3f248e29b5354139c2c9/multidict-6.7.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99", size = 233590, upload-time = "2025-10-06T14:50:59.589Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/76d02f8270b97269d7e3dbd45644b1785bda457b474315f8cf999525a193/multidict-6.7.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202", size = 264112, upload-time = "2025-10-06T14:51:01.183Z" }, + { url = "https://files.pythonhosted.org/packages/76/0b/c28a70ecb58963847c2a8efe334904cd254812b10e535aefb3bcce513918/multidict-6.7.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1", size = 261194, upload-time = "2025-10-06T14:51:02.794Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/2ab26e4209773223159b83aa32721b4021ffb08102f8ac7d689c943fded1/multidict-6.7.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3", size = 248510, upload-time = "2025-10-06T14:51:04.724Z" }, + { url = "https://files.pythonhosted.org/packages/93/cd/06c1fa8282af1d1c46fd55c10a7930af652afdce43999501d4d68664170c/multidict-6.7.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d", size = 248395, upload-time = "2025-10-06T14:51:06.306Z" }, + { url = "https://files.pythonhosted.org/packages/99/ac/82cb419dd6b04ccf9e7e61befc00c77614fc8134362488b553402ecd55ce/multidict-6.7.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6", size = 239520, upload-time = "2025-10-06T14:51:08.091Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f3/a0f9bf09493421bd8716a362e0cd1d244f5a6550f5beffdd6b47e885b331/multidict-6.7.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7", size = 245479, upload-time = "2025-10-06T14:51:10.365Z" }, + { url = "https://files.pythonhosted.org/packages/8d/01/476d38fc73a212843f43c852b0eee266b6971f0e28329c2184a8df90c376/multidict-6.7.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb", size = 258903, upload-time = "2025-10-06T14:51:12.466Z" }, + { url = "https://files.pythonhosted.org/packages/49/6d/23faeb0868adba613b817d0e69c5f15531b24d462af8012c4f6de4fa8dc3/multidict-6.7.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f", size = 252333, upload-time = "2025-10-06T14:51:14.48Z" }, + { url = "https://files.pythonhosted.org/packages/1e/cc/48d02ac22b30fa247f7dad82866e4b1015431092f4ba6ebc7e77596e0b18/multidict-6.7.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f", size = 243411, upload-time = "2025-10-06T14:51:16.072Z" }, + { url = "https://files.pythonhosted.org/packages/4a/03/29a8bf5a18abf1fe34535c88adbdfa88c9fb869b5a3b120692c64abe8284/multidict-6.7.0-cp314-cp314-win32.whl", hash = "sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885", size = 40940, upload-time = "2025-10-06T14:51:17.544Z" }, + { url = "https://files.pythonhosted.org/packages/82/16/7ed27b680791b939de138f906d5cf2b4657b0d45ca6f5dd6236fdddafb1a/multidict-6.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c", size = 45087, upload-time = "2025-10-06T14:51:18.875Z" }, + { url = "https://files.pythonhosted.org/packages/cd/3c/e3e62eb35a1950292fe39315d3c89941e30a9d07d5d2df42965ab041da43/multidict-6.7.0-cp314-cp314-win_arm64.whl", hash = "sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000", size = 42368, upload-time = "2025-10-06T14:51:20.225Z" }, + { url = "https://files.pythonhosted.org/packages/8b/40/cd499bd0dbc5f1136726db3153042a735fffd0d77268e2ee20d5f33c010f/multidict-6.7.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63", size = 82326, upload-time = "2025-10-06T14:51:21.588Z" }, + { url = "https://files.pythonhosted.org/packages/13/8a/18e031eca251c8df76daf0288e6790561806e439f5ce99a170b4af30676b/multidict-6.7.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718", size = 48065, upload-time = "2025-10-06T14:51:22.93Z" }, + { url = "https://files.pythonhosted.org/packages/40/71/5e6701277470a87d234e433fb0a3a7deaf3bcd92566e421e7ae9776319de/multidict-6.7.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2", size = 46475, upload-time = "2025-10-06T14:51:24.352Z" }, + { url = "https://files.pythonhosted.org/packages/fe/6a/bab00cbab6d9cfb57afe1663318f72ec28289ea03fd4e8236bb78429893a/multidict-6.7.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e", size = 239324, upload-time = "2025-10-06T14:51:25.822Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5f/8de95f629fc22a7769ade8b41028e3e5a822c1f8904f618d175945a81ad3/multidict-6.7.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064", size = 246877, upload-time = "2025-10-06T14:51:27.604Z" }, + { url = "https://files.pythonhosted.org/packages/23/b4/38881a960458f25b89e9f4a4fdcb02ac101cfa710190db6e5528841e67de/multidict-6.7.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e", size = 225824, upload-time = "2025-10-06T14:51:29.664Z" }, + { url = "https://files.pythonhosted.org/packages/1e/39/6566210c83f8a261575f18e7144736059f0c460b362e96e9cf797a24b8e7/multidict-6.7.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd", size = 253558, upload-time = "2025-10-06T14:51:31.684Z" }, + { url = "https://files.pythonhosted.org/packages/00/a3/67f18315100f64c269f46e6c0319fa87ba68f0f64f2b8e7fd7c72b913a0b/multidict-6.7.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a", size = 252339, upload-time = "2025-10-06T14:51:33.699Z" }, + { url = "https://files.pythonhosted.org/packages/c8/2a/1cb77266afee2458d82f50da41beba02159b1d6b1f7973afc9a1cad1499b/multidict-6.7.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96", size = 244895, upload-time = "2025-10-06T14:51:36.189Z" }, + { url = "https://files.pythonhosted.org/packages/dd/72/09fa7dd487f119b2eb9524946ddd36e2067c08510576d43ff68469563b3b/multidict-6.7.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e", size = 241862, upload-time = "2025-10-06T14:51:41.291Z" }, + { url = "https://files.pythonhosted.org/packages/65/92/bc1f8bd0853d8669300f732c801974dfc3702c3eeadae2f60cef54dc69d7/multidict-6.7.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599", size = 232376, upload-time = "2025-10-06T14:51:43.55Z" }, + { url = "https://files.pythonhosted.org/packages/09/86/ac39399e5cb9d0c2ac8ef6e10a768e4d3bc933ac808d49c41f9dc23337eb/multidict-6.7.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394", size = 240272, upload-time = "2025-10-06T14:51:45.265Z" }, + { url = "https://files.pythonhosted.org/packages/3d/b6/fed5ac6b8563ec72df6cb1ea8dac6d17f0a4a1f65045f66b6d3bf1497c02/multidict-6.7.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38", size = 248774, upload-time = "2025-10-06T14:51:46.836Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8d/b954d8c0dc132b68f760aefd45870978deec6818897389dace00fcde32ff/multidict-6.7.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9", size = 242731, upload-time = "2025-10-06T14:51:48.541Z" }, + { url = "https://files.pythonhosted.org/packages/16/9d/a2dac7009125d3540c2f54e194829ea18ac53716c61b655d8ed300120b0f/multidict-6.7.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0", size = 240193, upload-time = "2025-10-06T14:51:50.355Z" }, + { url = "https://files.pythonhosted.org/packages/39/ca/c05f144128ea232ae2178b008d5011d4e2cea86e4ee8c85c2631b1b94802/multidict-6.7.0-cp314-cp314t-win32.whl", hash = "sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13", size = 48023, upload-time = "2025-10-06T14:51:51.883Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8f/0a60e501584145588be1af5cc829265701ba3c35a64aec8e07cbb71d39bb/multidict-6.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd", size = 53507, upload-time = "2025-10-06T14:51:53.672Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ae/3148b988a9c6239903e786eac19c889fab607c31d6efa7fb2147e5680f23/multidict-6.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827", size = 44804, upload-time = "2025-10-06T14:51:55.415Z" }, + { url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" }, +] + +[[package]] +name = "multiprocess" +version = "0.70.17" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/34/1acca6e18697017ad5c8b45279b59305d660ecf2fbed13e5f406f69890e4/multiprocess-0.70.17.tar.gz", hash = "sha256:4ae2f11a3416809ebc9a48abfc8b14ecce0652a0944731a1493a3c1ba44ff57a", size = 1785744, upload-time = "2024-09-30T18:06:07.718Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/97/e57eaa8a4dc4036460d13162470eb0da520e6496a90b943529cf1ca40ebd/multiprocess-0.70.17-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ddb24e5bcdb64e90ec5543a1f05a39463068b6d3b804aa3f2a4e16ec28562d6", size = 135007, upload-time = "2024-09-30T18:05:45.421Z" }, + { url = "https://files.pythonhosted.org/packages/8f/0a/bb06ea45e5b400cd9944e05878fdbb9016ba78ffb9190c541eec9c8e8380/multiprocess-0.70.17-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d729f55198a3579f6879766a6d9b72b42d4b320c0dcb7844afb774d75b573c62", size = 135008, upload-time = "2024-09-30T18:05:46.711Z" }, + { url = "https://files.pythonhosted.org/packages/20/e3/db48b10f0a25569c5c3a20288d82f9677cb312bccbd1da16cf8fb759649f/multiprocess-0.70.17-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2c82d0375baed8d8dd0d8c38eb87c5ae9c471f8e384ad203a36f095ee860f67", size = 135012, upload-time = "2024-09-30T18:05:48.073Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a9/39cf856d03690af6fd570cf40331f1f79acdbb3132a9c35d2c5002f7f30b/multiprocess-0.70.17-py310-none-any.whl", hash = "sha256:38357ca266b51a2e22841b755d9a91e4bb7b937979a54d411677111716c32744", size = 134830, upload-time = "2024-09-30T18:05:58.145Z" }, + { url = "https://files.pythonhosted.org/packages/b2/07/8cbb75d6cfbe8712d8f7f6a5615f083c6e710ab916b748fbb20373ddb142/multiprocess-0.70.17-py311-none-any.whl", hash = "sha256:2884701445d0177aec5bd5f6ee0df296773e4fb65b11903b94c613fb46cfb7d1", size = 144346, upload-time = "2024-09-30T18:05:59.272Z" }, + { url = "https://files.pythonhosted.org/packages/a4/69/d3f343a61a2f86ef10ed7865a26beda7c71554136ce187b0384b1c2c9ca3/multiprocess-0.70.17-py312-none-any.whl", hash = "sha256:2818af14c52446b9617d1b0755fa70ca2f77c28b25ed97bdaa2c69a22c47b46c", size = 147990, upload-time = "2024-09-30T18:06:00.634Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b7/2e9a4fcd871b81e1f2a812cd5c6fb52ad1e8da7bf0d7646c55eaae220484/multiprocess-0.70.17-py313-none-any.whl", hash = "sha256:20c28ca19079a6c879258103a6d60b94d4ffe2d9da07dda93fb1c8bc6243f522", size = 149843, upload-time = "2024-09-30T18:06:02.261Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d7/fd7a092fc0ab1845a1a97ca88e61b9b7cc2e9d6fcf0ed24e9480590c2336/multiprocess-0.70.17-py38-none-any.whl", hash = "sha256:1d52f068357acd1e5bbc670b273ef8f81d57863235d9fbf9314751886e141968", size = 132635, upload-time = "2024-09-30T18:06:03.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/0618ac724b8a56254962c143759e04fa01c73b37aa69dd433f16643bd38b/multiprocess-0.70.17-py39-none-any.whl", hash = "sha256:c3feb874ba574fbccfb335980020c1ac631fbf2a3f7bee4e2042ede62558a021", size = 133359, upload-time = "2024-09-30T18:06:05.627Z" }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform != 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263, upload-time = "2024-10-21T12:39:36.247Z" }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version >= '3.14' and sys_platform != 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform != 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform != 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + +[[package]] +name = "ninja" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/74/d02409ed2aa865e051b7edda22ad416a39d81a84980f544f8de717cab133/ninja-1.13.0-py3-none-macosx_10_9_universal2.whl", hash = "sha256:fa2a8bfc62e31b08f83127d1613d10821775a0eb334197154c4d6067b7068ff1", size = 310125, upload-time = "2025-08-11T15:09:50.971Z" }, + { url = "https://files.pythonhosted.org/packages/8e/de/6e1cd6b84b412ac1ef327b76f0641aeb5dcc01e9d3f9eee0286d0c34fd93/ninja-1.13.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630", size = 177467, upload-time = "2025-08-11T15:09:52.767Z" }, + { url = "https://files.pythonhosted.org/packages/c8/83/49320fb6e58ae3c079381e333575fdbcf1cca3506ee160a2dcce775046fa/ninja-1.13.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:be7f478ff9f96a128b599a964fc60a6a87b9fa332ee1bd44fa243ac88d50291c", size = 187834, upload-time = "2025-08-11T15:09:54.115Z" }, + { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, + { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, + { url = "https://files.pythonhosted.org/packages/31/bf/0d7808af695ceddc763cf251b84a9892cd7f51622dc8b4c89d5012779f06/ninja-1.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f", size = 552388, upload-time = "2025-08-11T15:10:03.349Z" }, + { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, + { url = "https://files.pythonhosted.org/packages/9f/43/c217b1153f0e499652f5e0766da8523ce3480f0a951039c7af115e224d55/ninja-1.13.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f8e1e8a1a30835eeb51db05cf5a67151ad37542f5a4af2a438e9490915e5b72", size = 638280, upload-time = "2025-08-11T15:10:06.512Z" }, + { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, + { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, + { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, + { url = "https://files.pythonhosted.org/packages/95/97/51359c77527d45943fe7a94d00a3843b81162e6c4244b3579fe8fc54cb9c/ninja-1.13.0-py3-none-win32.whl", hash = "sha256:8cfbb80b4a53456ae8a39f90ae3d7a2129f45ea164f43fadfa15dc38c4aef1c9", size = 267201, upload-time = "2025-08-11T15:10:15.158Z" }, + { url = "https://files.pythonhosted.org/packages/29/45/c0adfbfb0b5895aa18cec400c535b4f7ff3e52536e0403602fc1a23f7de9/ninja-1.13.0-py3-none-win_amd64.whl", hash = "sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e", size = 309975, upload-time = "2025-08-11T15:10:16.697Z" }, + { url = "https://files.pythonhosted.org/packages/df/93/a7b983643d1253bb223234b5b226e69de6cda02b76cdca7770f684b795f5/ninja-1.13.0-py3-none-win_arm64.whl", hash = "sha256:3c0b40b1f0bba764644385319028650087b4c1b18cdfa6f45cb39a3669b81aa9", size = 290806, upload-time = "2025-08-11T15:10:18.018Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform != 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version >= '3.14' and sys_platform != 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform != 'darwin'", + "python_full_version == '3.12.*' and sys_platform != 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform != 'darwin'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/77/84dd1d2e34d7e2792a236ba180b5e8fcc1e3e414e761ce0253f63d7f572e/numpy-2.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10", size = 17034641, upload-time = "2025-11-16T22:49:19.336Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ea/25e26fa5837106cde46ae7d0b667e20f69cbbc0efd64cba8221411ab26ae/numpy-2.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218", size = 12528324, upload-time = "2025-11-16T22:49:22.582Z" }, + { url = "https://files.pythonhosted.org/packages/4d/1a/e85f0eea4cf03d6a0228f5c0256b53f2df4bc794706e7df019fc622e47f1/numpy-2.3.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d", size = 5356872, upload-time = "2025-11-16T22:49:25.408Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bb/35ef04afd567f4c989c2060cde39211e4ac5357155c1833bcd1166055c61/numpy-2.3.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5", size = 6893148, upload-time = "2025-11-16T22:49:27.549Z" }, + { url = "https://files.pythonhosted.org/packages/f2/2b/05bbeb06e2dff5eab512dfc678b1cc5ee94d8ac5956a0885c64b6b26252b/numpy-2.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7", size = 14557282, upload-time = "2025-11-16T22:49:30.964Z" }, + { url = "https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size = 16897903, upload-time = "2025-11-16T22:49:34.191Z" }, + { url = "https://files.pythonhosted.org/packages/ac/14/085f4cf05fc3f1e8aa95e85404e984ffca9b2275a5dc2b1aae18a67538b8/numpy-2.3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e", size = 16341672, upload-time = "2025-11-16T22:49:37.2Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size = 18838896, upload-time = "2025-11-16T22:49:39.727Z" }, + { url = "https://files.pythonhosted.org/packages/cd/b9/cf6649b2124f288309ffc353070792caf42ad69047dcc60da85ee85fea58/numpy-2.3.5-cp311-cp311-win32.whl", hash = "sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c", size = 6563608, upload-time = "2025-11-16T22:49:42.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/44/9fe81ae1dcc29c531843852e2874080dc441338574ccc4306b39e2ff6e59/numpy-2.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c", size = 13078442, upload-time = "2025-11-16T22:49:43.99Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a7/f99a41553d2da82a20a2f22e93c94f928e4490bb447c9ff3c4ff230581d3/numpy-2.3.5-cp311-cp311-win_arm64.whl", hash = "sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa", size = 10458555, upload-time = "2025-11-16T22:49:47.092Z" }, + { url = "https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size = 16733873, upload-time = "2025-11-16T22:49:49.84Z" }, + { url = "https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size = 12259838, upload-time = "2025-11-16T22:49:52.863Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size = 5088378, upload-time = "2025-11-16T22:49:55.055Z" }, + { url = "https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size = 6628559, upload-time = "2025-11-16T22:49:57.371Z" }, + { url = "https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size = 14250702, upload-time = "2025-11-16T22:49:59.632Z" }, + { url = "https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size = 16606086, upload-time = "2025-11-16T22:50:02.127Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size = 16025985, upload-time = "2025-11-16T22:50:04.536Z" }, + { url = "https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size = 18542976, upload-time = "2025-11-16T22:50:07.557Z" }, + { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" }, + { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" }, + { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" }, + { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" }, + { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" }, + { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" }, + { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" }, + { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" }, + { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" }, + { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, + { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, + { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, + { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" }, + { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" }, + { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" }, + { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" }, + { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" }, + { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" }, + { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" }, + { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl", hash = "sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size = 6405940, upload-time = "2025-11-16T22:51:11.541Z" }, + { url = "https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl", hash = "sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size = 12920341, upload-time = "2025-11-16T22:51:14.312Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl", hash = "sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size = 10262507, upload-time = "2025-11-16T22:51:16.846Z" }, + { url = "https://files.pythonhosted.org/packages/ba/97/1a914559c19e32d6b2e233cf9a6a114e67c856d35b1d6babca571a3e880f/numpy-2.3.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82", size = 16735706, upload-time = "2025-11-16T22:51:19.558Z" }, + { url = "https://files.pythonhosted.org/packages/57/d4/51233b1c1b13ecd796311216ae417796b88b0616cfd8a33ae4536330748a/numpy-2.3.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0", size = 12264507, upload-time = "2025-11-16T22:51:22.492Z" }, + { url = "https://files.pythonhosted.org/packages/45/98/2fe46c5c2675b8306d0b4a3ec3494273e93e1226a490f766e84298576956/numpy-2.3.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63", size = 5093049, upload-time = "2025-11-16T22:51:25.171Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0e/0698378989bb0ac5f1660c81c78ab1fe5476c1a521ca9ee9d0710ce54099/numpy-2.3.5-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9", size = 6626603, upload-time = "2025-11-16T22:51:27Z" }, + { url = "https://files.pythonhosted.org/packages/5e/a6/9ca0eecc489640615642a6cbc0ca9e10df70df38c4d43f5a928ff18d8827/numpy-2.3.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b", size = 14262696, upload-time = "2025-11-16T22:51:29.402Z" }, + { url = "https://files.pythonhosted.org/packages/c8/f6/07ec185b90ec9d7217a00eeeed7383b73d7e709dae2a9a021b051542a708/numpy-2.3.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520", size = 16597350, upload-time = "2025-11-16T22:51:32.167Z" }, + { url = "https://files.pythonhosted.org/packages/75/37/164071d1dde6a1a84c9b8e5b414fa127981bad47adf3a6b7e23917e52190/numpy-2.3.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c", size = 16040190, upload-time = "2025-11-16T22:51:35.403Z" }, + { url = "https://files.pythonhosted.org/packages/08/3c/f18b82a406b04859eb026d204e4e1773eb41c5be58410f41ffa511d114ae/numpy-2.3.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8", size = 18536749, upload-time = "2025-11-16T22:51:39.698Z" }, + { url = "https://files.pythonhosted.org/packages/40/79/f82f572bf44cf0023a2fe8588768e23e1592585020d638999f15158609e1/numpy-2.3.5-cp314-cp314-win32.whl", hash = "sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248", size = 6335432, upload-time = "2025-11-16T22:51:42.476Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2e/235b4d96619931192c91660805e5e49242389742a7a82c27665021db690c/numpy-2.3.5-cp314-cp314-win_amd64.whl", hash = "sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e", size = 12919388, upload-time = "2025-11-16T22:51:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/07/2b/29fd75ce45d22a39c61aad74f3d718e7ab67ccf839ca8b60866054eb15f8/numpy-2.3.5-cp314-cp314-win_arm64.whl", hash = "sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2", size = 10476651, upload-time = "2025-11-16T22:51:47.749Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/f6a721234ebd4d87084cfa68d081bcba2f5cfe1974f7de4e0e8b9b2a2ba1/numpy-2.3.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41", size = 16834503, upload-time = "2025-11-16T22:51:50.443Z" }, + { url = "https://files.pythonhosted.org/packages/5c/1c/baf7ffdc3af9c356e1c135e57ab7cf8d247931b9554f55c467efe2c69eff/numpy-2.3.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad", size = 12381612, upload-time = "2025-11-16T22:51:53.609Z" }, + { url = "https://files.pythonhosted.org/packages/74/91/f7f0295151407ddc9ba34e699013c32c3c91944f9b35fcf9281163dc1468/numpy-2.3.5-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39", size = 5210042, upload-time = "2025-11-16T22:51:56.213Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3b/78aebf345104ec50dd50a4d06ddeb46a9ff5261c33bcc58b1c4f12f85ec2/numpy-2.3.5-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20", size = 6724502, upload-time = "2025-11-16T22:51:58.584Z" }, + { url = "https://files.pythonhosted.org/packages/02/c6/7c34b528740512e57ef1b7c8337ab0b4f0bddf34c723b8996c675bc2bc91/numpy-2.3.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52", size = 14308962, upload-time = "2025-11-16T22:52:01.698Z" }, + { url = "https://files.pythonhosted.org/packages/80/35/09d433c5262bc32d725bafc619e095b6a6651caf94027a03da624146f655/numpy-2.3.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b", size = 16655054, upload-time = "2025-11-16T22:52:04.267Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ab/6a7b259703c09a88804fa2430b43d6457b692378f6b74b356155283566ac/numpy-2.3.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3", size = 16091613, upload-time = "2025-11-16T22:52:08.651Z" }, + { url = "https://files.pythonhosted.org/packages/c2/88/330da2071e8771e60d1038166ff9d73f29da37b01ec3eb43cb1427464e10/numpy-2.3.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227", size = 18591147, upload-time = "2025-11-16T22:52:11.453Z" }, + { url = "https://files.pythonhosted.org/packages/51/41/851c4b4082402d9ea860c3626db5d5df47164a712cb23b54be028b184c1c/numpy-2.3.5-cp314-cp314t-win32.whl", hash = "sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5", size = 6479806, upload-time = "2025-11-16T22:52:14.641Z" }, + { url = "https://files.pythonhosted.org/packages/90/30/d48bde1dfd93332fa557cff1972fbc039e055a52021fbef4c2c4b1eefd17/numpy-2.3.5-cp314-cp314t-win_amd64.whl", hash = "sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf", size = 13105760, upload-time = "2025-11-16T22:52:17.975Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fd/4b5eb0b3e888d86aee4d198c23acec7d214baaf17ea93c1adec94c9518b9/numpy-2.3.5-cp314-cp314t-win_arm64.whl", hash = "sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42", size = 10545459, upload-time = "2025-11-16T22:52:20.55Z" }, + { url = "https://files.pythonhosted.org/packages/c6/65/f9dea8e109371ade9c782b4e4756a82edf9d3366bca495d84d79859a0b79/numpy-2.3.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310", size = 16910689, upload-time = "2025-11-16T22:52:23.247Z" }, + { url = "https://files.pythonhosted.org/packages/00/4f/edb00032a8fb92ec0a679d3830368355da91a69cab6f3e9c21b64d0bb986/numpy-2.3.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c", size = 12457053, upload-time = "2025-11-16T22:52:26.367Z" }, + { url = "https://files.pythonhosted.org/packages/16/a4/e8a53b5abd500a63836a29ebe145fc1ab1f2eefe1cfe59276020373ae0aa/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18", size = 5285635, upload-time = "2025-11-16T22:52:29.266Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2f/37eeb9014d9c8b3e9c55bc599c68263ca44fdbc12a93e45a21d1d56df737/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff", size = 6801770, upload-time = "2025-11-16T22:52:31.421Z" }, + { url = "https://files.pythonhosted.org/packages/7d/e4/68d2f474df2cb671b2b6c2986a02e520671295647dad82484cde80ca427b/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb", size = 14391768, upload-time = "2025-11-16T22:52:33.593Z" }, + { url = "https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size = 16729263, upload-time = "2025-11-16T22:52:36.369Z" }, + { url = "https://files.pythonhosted.org/packages/2d/ee/346fa473e666fe14c52fcdd19ec2424157290a032d4c41f98127bfb31ac7/numpy-2.3.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425", size = 12967213, upload-time = "2025-11-16T22:52:39.38Z" }, +] + +[[package]] +name = "nvidia-cublas-cu12" +version = "12.8.4.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/61/e24b560ab2e2eaeb3c839129175fb330dfcfc29e5203196e5541a4c44682/nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8ac4e771d5a348c551b2a426eda6193c19aa630236b418086020df5ba9667142", size = 594346921, upload-time = "2025-03-07T01:44:31.254Z" }, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/02/2adcaa145158bf1a8295d83591d22e4103dbfd821bcaf6f3f53151ca4ffa/nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea0cb07ebda26bb9b29ba82cda34849e73c166c18162d3913575b0c9db9a6182", size = 10248621, upload-time = "2025-03-07T01:40:21.213Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.8.93" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/6b/32f747947df2da6994e999492ab306a903659555dddc0fbdeb9d71f75e52/nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a7756528852ef889772a84c6cd89d41dfa74667e24cca16bb31f8f061e3e9994", size = 88040029, upload-time = "2025-03-07T01:42:13.562Z" }, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/9b/a997b638fcd068ad6e4d53b8551a7d30fe8b404d6f1804abf1df69838932/nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adade8dcbd0edf427b7204d480d6066d33902cab2a4707dcfc48a2d0fd44ab90", size = 954765, upload-time = "2025-03-07T01:40:01.615Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.10.2.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" }, +] + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.3.3.83" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" }, +] + +[[package]] +name = "nvidia-cufile-cu12" +version = "1.13.1.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/fe/1bcba1dfbfb8d01be8d93f07bfc502c93fa23afa6fd5ab3fc7c1df71038a/nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d069003be650e131b21c932ec3d8969c1715379251f8d23a1860554b1cb24fc", size = 1197834, upload-time = "2025-03-07T01:45:50.723Z" }, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.9.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/aa/6584b56dc84ebe9cf93226a5cde4d99080c8e90ab40f0c27bda7a0f29aa1/nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:b32331d4f4df5d6eefa0554c565b626c7216f87a06a4f56fab27c3b68a830ec9", size = 63619976, upload-time = "2025-03-07T01:46:23.323Z" }, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.7.3.90" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12" }, + { name = "nvidia-cusparse-cu12" }, + { name = "nvidia-nvjitlink-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" }, +] + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.5.8.93" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" }, +] + +[[package]] +name = "nvidia-cusparselt-cu12" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/79/12978b96bd44274fe38b5dde5cfb660b1d114f70a65ef962bcbbed99b549/nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f1bb701d6b930d5a7cea44c19ceb973311500847f81b634d802b7b539dc55623", size = 287193691, upload-time = "2025-02-26T00:15:44.104Z" }, +] + +[[package]] +name = "nvidia-cutlass-dsl" +version = "4.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-python" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/48/52907ac203c6de58b451511e251c8b1fc77c414dcb32aef3a0cd5194c7bd/nvidia_cutlass_dsl-4.3.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:dca550c8a7f7556a4c46bd4b85453342ae4e70600dc4aa3b5a6f1ebcd39a5ce5", size = 58734224, upload-time = "2025-12-10T09:45:22.008Z" }, + { url = "https://files.pythonhosted.org/packages/44/d7/f1936fdf697a8b76eea1f60d4bcfe41faa015e5bca925c4e767035e6857a/nvidia_cutlass_dsl-4.3.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0d92144b9f161328be4a6734911c101d03c7d5335e307112ad579d826d7ac3b1", size = 58596215, upload-time = "2025-12-10T10:35:19.436Z" }, + { url = "https://files.pythonhosted.org/packages/53/ff/41a855a356067cab074c77e79ddb308a8d3df0e74659bdc2195f5c19bb10/nvidia_cutlass_dsl-4.3.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7d3914b3e865cf17334d3139c11d38aed1160b5855c29eaa4e3a470ea1fcfaba", size = 58731282, upload-time = "2025-12-17T09:17:36.918Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/79f494e08b85ea921eb376a5363a7a357db2352a6a1dfdfc659721fe94b2/nvidia_cutlass_dsl-4.3.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:046f3fc3fe3fa60f3207133e57512f2f5581ca36943f0763f3f7e8ab11180e16", size = 58596543, upload-time = "2025-12-10T10:09:13.657Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d4/7c5ef53ccf75d7f99a9ea29cae9f9c0233229b75b3b22f85a4ef4f52e6ab/nvidia_cutlass_dsl-4.3.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3278526f54bddd920d8e539771e5820c6166c549a1e67813375025f39417dec6", size = 58734009, upload-time = "2025-12-10T09:23:29.305Z" }, + { url = "https://files.pythonhosted.org/packages/88/a8/a27562194cc4182c67793cd21c5dbf9468cd5a49c775a487153c6f28364c/nvidia_cutlass_dsl-4.3.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f2b25816b8bb8bc332bcbf6fc341347b5d728344cf185c65af0dd73e8503d5c7", size = 58596724, upload-time = "2025-12-10T11:01:07.228Z" }, + { url = "https://files.pythonhosted.org/packages/9d/dd/83679f3467ee5827084994c2390c97659f2cda35ad824bfa936ba56295fd/nvidia_cutlass_dsl-4.3.3-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5200ede1f51f2127c53ed5e7d38849895760469160861739813f24557e1230b8", size = 58733331, upload-time = "2025-12-10T09:03:12.607Z" }, + { url = "https://files.pythonhosted.org/packages/c6/94/1f591add7341a2ecdab76fabc0b2c7a07cadf9589bb0e78c041bd8a5a81f/nvidia_cutlass_dsl-4.3.3-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0eb90254eee0bfdc73087034cab40f1ef723c26961606d3dd68e0fd6fe11115f", size = 58597870, upload-time = "2025-12-10T11:15:48.138Z" }, +] + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.27.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/89/f7a07dc961b60645dbbf42e80f2bc85ade7feb9a491b11a1e973aa00071f/nvidia_nccl_cu12-2.27.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ad730cf15cb5d25fe849c6e6ca9eb5b76db16a80f13f425ac68d8e2e55624457", size = 322348229, upload-time = "2025-06-26T04:11:28.385Z" }, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.8.93" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/74/86a07f1d0f42998ca31312f998bd3b9a7eff7f52378f4f270c8679c77fb9/nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:81ff63371a7ebd6e6451970684f916be2eab07321b73c9d244dc2b4da7f73b88", size = 39254836, upload-time = "2025-03-07T01:49:55.661Z" }, +] + +[[package]] +name = "nvidia-nvshmem-cu12" +version = "3.3.20" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/6c/99acb2f9eb85c29fc6f3a7ac4dccfd992e22666dd08a642b303311326a97/nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d00f26d3f9b2e3c3065be895e3059d6479ea5c638a3f38c9fec49b1b9dd7c1e5", size = 124657145, upload-time = "2025-08-04T20:25:19.995Z" }, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.8.90" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/eb/86626c1bbc2edb86323022371c39aa48df6fd8b0a1647bc274577f72e90b/nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b17e2001cc0d751a5bc2c6ec6d26ad95913324a4adb86788c944f8ce9ba441f", size = 89954, upload-time = "2025-03-07T01:42:44.131Z" }, +] + +[[package]] +name = "oauthlib" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, +] + +[[package]] +name = "openai" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/39/8e347e9fda125324d253084bb1b82407e5e3c7777a03dc398f79b2d95626/openai-2.13.0.tar.gz", hash = "sha256:9ff633b07a19469ec476b1e2b5b26c5ef700886524a7a72f65e6f0b5203142d5", size = 626583, upload-time = "2025-12-16T18:19:44.387Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/d5/eb52edff49d3d5ea116e225538c118699ddeb7c29fa17ec28af14bc10033/openai-2.13.0-py3-none-any.whl", hash = "sha256:746521065fed68df2f9c2d85613bb50844343ea81f60009b60e6a600c9352c79", size = 1066837, upload-time = "2025-12-16T18:19:43.124Z" }, +] + +[[package]] +name = "orjson" +version = "3.11.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/04/b8/333fdb27840f3bf04022d21b654a35f58e15407183aeb16f3b41aa053446/orjson-3.11.5.tar.gz", hash = "sha256:82393ab47b4fe44ffd0a7659fa9cfaacc717eb617c93cde83795f14af5c2e9d5", size = 5972347, upload-time = "2025-12-06T15:55:39.458Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/19/b22cf9dad4db20c8737041046054cbd4f38bb5a2d0e4bb60487832ce3d76/orjson-3.11.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:df9eadb2a6386d5ea2bfd81309c505e125cfc9ba2b1b99a97e60985b0b3665d1", size = 245719, upload-time = "2025-12-06T15:53:43.877Z" }, + { url = "https://files.pythonhosted.org/packages/03/2e/b136dd6bf30ef5143fbe76a4c142828b55ccc618be490201e9073ad954a1/orjson-3.11.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc70da619744467d8f1f49a8cadae5ec7bbe054e5232d95f92ed8737f8c5870", size = 132467, upload-time = "2025-12-06T15:53:45.379Z" }, + { url = "https://files.pythonhosted.org/packages/ae/fc/ae99bfc1e1887d20a0268f0e2686eb5b13d0ea7bbe01de2b566febcd2130/orjson-3.11.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:073aab025294c2f6fc0807201c76fdaed86f8fc4be52c440fb78fbb759a1ac09", size = 130702, upload-time = "2025-12-06T15:53:46.659Z" }, + { url = "https://files.pythonhosted.org/packages/6e/43/ef7912144097765997170aca59249725c3ab8ef6079f93f9d708dd058df5/orjson-3.11.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:835f26fa24ba0bb8c53ae2a9328d1706135b74ec653ed933869b74b6909e63fd", size = 135907, upload-time = "2025-12-06T15:53:48.487Z" }, + { url = "https://files.pythonhosted.org/packages/3f/da/24d50e2d7f4092ddd4d784e37a3fa41f22ce8ed97abc9edd222901a96e74/orjson-3.11.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667c132f1f3651c14522a119e4dd631fad98761fa960c55e8e7430bb2a1ba4ac", size = 139935, upload-time = "2025-12-06T15:53:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/02/4a/b4cb6fcbfff5b95a3a019a8648255a0fac9b221fbf6b6e72be8df2361feb/orjson-3.11.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42e8961196af655bb5e63ce6c60d25e8798cd4dfbc04f4203457fa3869322c2e", size = 137541, upload-time = "2025-12-06T15:53:51.226Z" }, + { url = "https://files.pythonhosted.org/packages/a5/99/a11bd129f18c2377c27b2846a9d9be04acec981f770d711ba0aaea563984/orjson-3.11.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75412ca06e20904c19170f8a24486c4e6c7887dea591ba18a1ab572f1300ee9f", size = 139031, upload-time = "2025-12-06T15:53:52.309Z" }, + { url = "https://files.pythonhosted.org/packages/64/29/d7b77d7911574733a036bb3e8ad7053ceb2b7d6ea42208b9dbc55b23b9ed/orjson-3.11.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6af8680328c69e15324b5af3ae38abbfcf9cbec37b5346ebfd52339c3d7e8a18", size = 141622, upload-time = "2025-12-06T15:53:53.606Z" }, + { url = "https://files.pythonhosted.org/packages/93/41/332db96c1de76b2feda4f453e91c27202cd092835936ce2b70828212f726/orjson-3.11.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a86fe4ff4ea523eac8f4b57fdac319faf037d3c1be12405e6a7e86b3fbc4756a", size = 413800, upload-time = "2025-12-06T15:53:54.866Z" }, + { url = "https://files.pythonhosted.org/packages/76/e1/5a0d148dd1f89ad2f9651df67835b209ab7fcb1118658cf353425d7563e9/orjson-3.11.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e607b49b1a106ee2086633167033afbd63f76f2999e9236f638b06b112b24ea7", size = 151198, upload-time = "2025-12-06T15:53:56.383Z" }, + { url = "https://files.pythonhosted.org/packages/0d/96/8db67430d317a01ae5cf7971914f6775affdcfe99f5bff9ef3da32492ecc/orjson-3.11.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7339f41c244d0eea251637727f016b3d20050636695bc78345cce9029b189401", size = 141984, upload-time = "2025-12-06T15:53:57.746Z" }, + { url = "https://files.pythonhosted.org/packages/71/49/40d21e1aa1ac569e521069228bb29c9b5a350344ccf922a0227d93c2ed44/orjson-3.11.5-cp310-cp310-win32.whl", hash = "sha256:8be318da8413cdbbce77b8c5fac8d13f6eb0f0db41b30bb598631412619572e8", size = 135272, upload-time = "2025-12-06T15:53:59.769Z" }, + { url = "https://files.pythonhosted.org/packages/c4/7e/d0e31e78be0c100e08be64f48d2850b23bcb4d4c70d114f4e43b39f6895a/orjson-3.11.5-cp310-cp310-win_amd64.whl", hash = "sha256:b9f86d69ae822cabc2a0f6c099b43e8733dda788405cba2665595b7e8dd8d167", size = 133360, upload-time = "2025-12-06T15:54:01.25Z" }, + { url = "https://files.pythonhosted.org/packages/fd/68/6b3659daec3a81aed5ab47700adb1a577c76a5452d35b91c88efee89987f/orjson-3.11.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9c8494625ad60a923af6b2b0bd74107146efe9b55099e20d7740d995f338fcd8", size = 245318, upload-time = "2025-12-06T15:54:02.355Z" }, + { url = "https://files.pythonhosted.org/packages/e9/00/92db122261425f61803ccf0830699ea5567439d966cbc35856fe711bfe6b/orjson-3.11.5-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:7bb2ce0b82bc9fd1168a513ddae7a857994b780b2945a8c51db4ab1c4b751ebc", size = 129491, upload-time = "2025-12-06T15:54:03.877Z" }, + { url = "https://files.pythonhosted.org/packages/94/4f/ffdcb18356518809d944e1e1f77589845c278a1ebbb5a8297dfefcc4b4cb/orjson-3.11.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67394d3becd50b954c4ecd24ac90b5051ee7c903d167459f93e77fc6f5b4c968", size = 132167, upload-time = "2025-12-06T15:54:04.944Z" }, + { url = "https://files.pythonhosted.org/packages/97/c6/0a8caff96f4503f4f7dd44e40e90f4d14acf80d3b7a97cb88747bb712d3e/orjson-3.11.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:298d2451f375e5f17b897794bcc3e7b821c0f32b4788b9bcae47ada24d7f3cf7", size = 130516, upload-time = "2025-12-06T15:54:06.274Z" }, + { url = "https://files.pythonhosted.org/packages/4d/63/43d4dc9bd9954bff7052f700fdb501067f6fb134a003ddcea2a0bb3854ed/orjson-3.11.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa5e4244063db8e1d87e0f54c3f7522f14b2dc937e65d5241ef0076a096409fd", size = 135695, upload-time = "2025-12-06T15:54:07.702Z" }, + { url = "https://files.pythonhosted.org/packages/87/6f/27e2e76d110919cb7fcb72b26166ee676480a701bcf8fc53ac5d0edce32f/orjson-3.11.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1db2088b490761976c1b2e956d5d4e6409f3732e9d79cfa69f876c5248d1baf9", size = 139664, upload-time = "2025-12-06T15:54:08.828Z" }, + { url = "https://files.pythonhosted.org/packages/d4/f8/5966153a5f1be49b5fbb8ca619a529fde7bc71aa0a376f2bb83fed248bcd/orjson-3.11.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2ed66358f32c24e10ceea518e16eb3549e34f33a9d51f99ce23b0251776a1ef", size = 137289, upload-time = "2025-12-06T15:54:09.898Z" }, + { url = "https://files.pythonhosted.org/packages/a7/34/8acb12ff0299385c8bbcbb19fbe40030f23f15a6de57a9c587ebf71483fb/orjson-3.11.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2021afda46c1ed64d74b555065dbd4c2558d510d8cec5ea6a53001b3e5e82a9", size = 138784, upload-time = "2025-12-06T15:54:11.022Z" }, + { url = "https://files.pythonhosted.org/packages/ee/27/910421ea6e34a527f73d8f4ee7bdffa48357ff79c7b8d6eb6f7b82dd1176/orjson-3.11.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b42ffbed9128e547a1647a3e50bc88ab28ae9daa61713962e0d3dd35e820c125", size = 141322, upload-time = "2025-12-06T15:54:12.427Z" }, + { url = "https://files.pythonhosted.org/packages/87/a3/4b703edd1a05555d4bb1753d6ce44e1a05b7a6d7c164d5b332c795c63d70/orjson-3.11.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8d5f16195bb671a5dd3d1dbea758918bada8f6cc27de72bd64adfbd748770814", size = 413612, upload-time = "2025-12-06T15:54:13.858Z" }, + { url = "https://files.pythonhosted.org/packages/1b/36/034177f11d7eeea16d3d2c42a1883b0373978e08bc9dad387f5074c786d8/orjson-3.11.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c0e5d9f7a0227df2927d343a6e3859bebf9208b427c79bd31949abcc2fa32fa5", size = 150993, upload-time = "2025-12-06T15:54:15.189Z" }, + { url = "https://files.pythonhosted.org/packages/44/2f/ea8b24ee046a50a7d141c0227c4496b1180b215e728e3b640684f0ea448d/orjson-3.11.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:23d04c4543e78f724c4dfe656b3791b5f98e4c9253e13b2636f1af5d90e4a880", size = 141774, upload-time = "2025-12-06T15:54:16.451Z" }, + { url = "https://files.pythonhosted.org/packages/8a/12/cc440554bf8200eb23348a5744a575a342497b65261cd65ef3b28332510a/orjson-3.11.5-cp311-cp311-win32.whl", hash = "sha256:c404603df4865f8e0afe981aa3c4b62b406e6d06049564d58934860b62b7f91d", size = 135109, upload-time = "2025-12-06T15:54:17.73Z" }, + { url = "https://files.pythonhosted.org/packages/a3/83/e0c5aa06ba73a6760134b169f11fb970caa1525fa4461f94d76e692299d9/orjson-3.11.5-cp311-cp311-win_amd64.whl", hash = "sha256:9645ef655735a74da4990c24ffbd6894828fbfa117bc97c1edd98c282ecb52e1", size = 133193, upload-time = "2025-12-06T15:54:19.426Z" }, + { url = "https://files.pythonhosted.org/packages/cb/35/5b77eaebc60d735e832c5b1a20b155667645d123f09d471db0a78280fb49/orjson-3.11.5-cp311-cp311-win_arm64.whl", hash = "sha256:1cbf2735722623fcdee8e712cbaaab9e372bbcb0c7924ad711b261c2eccf4a5c", size = 126830, upload-time = "2025-12-06T15:54:20.836Z" }, + { url = "https://files.pythonhosted.org/packages/ef/a4/8052a029029b096a78955eadd68ab594ce2197e24ec50e6b6d2ab3f4e33b/orjson-3.11.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:334e5b4bff9ad101237c2d799d9fd45737752929753bf4faf4b207335a416b7d", size = 245347, upload-time = "2025-12-06T15:54:22.061Z" }, + { url = "https://files.pythonhosted.org/packages/64/67/574a7732bd9d9d79ac620c8790b4cfe0717a3d5a6eb2b539e6e8995e24a0/orjson-3.11.5-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:ff770589960a86eae279f5d8aa536196ebda8273a2a07db2a54e82b93bc86626", size = 129435, upload-time = "2025-12-06T15:54:23.615Z" }, + { url = "https://files.pythonhosted.org/packages/52/8d/544e77d7a29d90cf4d9eecd0ae801c688e7f3d1adfa2ebae5e1e94d38ab9/orjson-3.11.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed24250e55efbcb0b35bed7caaec8cedf858ab2f9f2201f17b8938c618c8ca6f", size = 132074, upload-time = "2025-12-06T15:54:24.694Z" }, + { url = "https://files.pythonhosted.org/packages/6e/57/b9f5b5b6fbff9c26f77e785baf56ae8460ef74acdb3eae4931c25b8f5ba9/orjson-3.11.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a66d7769e98a08a12a139049aac2f0ca3adae989817f8c43337455fbc7669b85", size = 130520, upload-time = "2025-12-06T15:54:26.185Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6d/d34970bf9eb33f9ec7c979a262cad86076814859e54eb9a059a52f6dc13d/orjson-3.11.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86cfc555bfd5794d24c6a1903e558b50644e5e68e6471d66502ce5cb5fdef3f9", size = 136209, upload-time = "2025-12-06T15:54:27.264Z" }, + { url = "https://files.pythonhosted.org/packages/e7/39/bc373b63cc0e117a105ea12e57280f83ae52fdee426890d57412432d63b3/orjson-3.11.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a230065027bc2a025e944f9d4714976a81e7ecfa940923283bca7bbc1f10f626", size = 139837, upload-time = "2025-12-06T15:54:28.75Z" }, + { url = "https://files.pythonhosted.org/packages/cb/aa/7c4818c8d7d324da220f4f1af55c343956003aa4d1ce1857bdc1d396ba69/orjson-3.11.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b29d36b60e606df01959c4b982729c8845c69d1963f88686608be9ced96dbfaa", size = 137307, upload-time = "2025-12-06T15:54:29.856Z" }, + { url = "https://files.pythonhosted.org/packages/46/bf/0993b5a056759ba65145effe3a79dd5a939d4a070eaa5da2ee3180fbb13f/orjson-3.11.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74099c6b230d4261fdc3169d50efc09abf38ace1a42ea2f9994b1d79153d477", size = 139020, upload-time = "2025-12-06T15:54:31.024Z" }, + { url = "https://files.pythonhosted.org/packages/65/e8/83a6c95db3039e504eda60fc388f9faedbb4f6472f5aba7084e06552d9aa/orjson-3.11.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e697d06ad57dd0c7a737771d470eedc18e68dfdefcdd3b7de7f33dfda5b6212e", size = 141099, upload-time = "2025-12-06T15:54:32.196Z" }, + { url = "https://files.pythonhosted.org/packages/b9/b4/24fdc024abfce31c2f6812973b0a693688037ece5dc64b7a60c1ce69e2f2/orjson-3.11.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e08ca8a6c851e95aaecc32bc44a5aa75d0ad26af8cdac7c77e4ed93acf3d5b69", size = 413540, upload-time = "2025-12-06T15:54:33.361Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/01c0ec95d55ed0c11e4cae3e10427e479bba40c77312b63e1f9665e0737d/orjson-3.11.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e8b5f96c05fce7d0218df3fdfeb962d6b8cfff7e3e20264306b46dd8b217c0f3", size = 151530, upload-time = "2025-12-06T15:54:34.6Z" }, + { url = "https://files.pythonhosted.org/packages/f9/d4/f9ebc57182705bb4bbe63f5bbe14af43722a2533135e1d2fb7affa0c355d/orjson-3.11.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ddbfdb5099b3e6ba6d6ea818f61997bb66de14b411357d24c4612cf1ebad08ca", size = 141863, upload-time = "2025-12-06T15:54:35.801Z" }, + { url = "https://files.pythonhosted.org/packages/0d/04/02102b8d19fdcb009d72d622bb5781e8f3fae1646bf3e18c53d1bc8115b5/orjson-3.11.5-cp312-cp312-win32.whl", hash = "sha256:9172578c4eb09dbfcf1657d43198de59b6cef4054de385365060ed50c458ac98", size = 135255, upload-time = "2025-12-06T15:54:37.209Z" }, + { url = "https://files.pythonhosted.org/packages/d4/fb/f05646c43d5450492cb387de5549f6de90a71001682c17882d9f66476af5/orjson-3.11.5-cp312-cp312-win_amd64.whl", hash = "sha256:2b91126e7b470ff2e75746f6f6ee32b9ab67b7a93c8ba1d15d3a0caaf16ec875", size = 133252, upload-time = "2025-12-06T15:54:38.401Z" }, + { url = "https://files.pythonhosted.org/packages/dc/a6/7b8c0b26ba18c793533ac1cd145e131e46fcf43952aa94c109b5b913c1f0/orjson-3.11.5-cp312-cp312-win_arm64.whl", hash = "sha256:acbc5fac7e06777555b0722b8ad5f574739e99ffe99467ed63da98f97f9ca0fe", size = 126777, upload-time = "2025-12-06T15:54:39.515Z" }, + { url = "https://files.pythonhosted.org/packages/10/43/61a77040ce59f1569edf38f0b9faadc90c8cf7e9bec2e0df51d0132c6bb7/orjson-3.11.5-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3b01799262081a4c47c035dd77c1301d40f568f77cc7ec1bb7db5d63b0a01629", size = 245271, upload-time = "2025-12-06T15:54:40.878Z" }, + { url = "https://files.pythonhosted.org/packages/55/f9/0f79be617388227866d50edd2fd320cb8fb94dc1501184bb1620981a0aba/orjson-3.11.5-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:61de247948108484779f57a9f406e4c84d636fa5a59e411e6352484985e8a7c3", size = 129422, upload-time = "2025-12-06T15:54:42.403Z" }, + { url = "https://files.pythonhosted.org/packages/77/42/f1bf1549b432d4a78bfa95735b79b5dac75b65b5bb815bba86ad406ead0a/orjson-3.11.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:894aea2e63d4f24a7f04a1908307c738d0dce992e9249e744b8f4e8dd9197f39", size = 132060, upload-time = "2025-12-06T15:54:43.531Z" }, + { url = "https://files.pythonhosted.org/packages/25/49/825aa6b929f1a6ed244c78acd7b22c1481fd7e5fda047dc8bf4c1a807eb6/orjson-3.11.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ddc21521598dbe369d83d4d40338e23d4101dad21dae0e79fa20465dbace019f", size = 130391, upload-time = "2025-12-06T15:54:45.059Z" }, + { url = "https://files.pythonhosted.org/packages/42/ec/de55391858b49e16e1aa8f0bbbb7e5997b7345d8e984a2dec3746d13065b/orjson-3.11.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cce16ae2f5fb2c53c3eafdd1706cb7b6530a67cc1c17abe8ec747f5cd7c0c51", size = 135964, upload-time = "2025-12-06T15:54:46.576Z" }, + { url = "https://files.pythonhosted.org/packages/1c/40/820bc63121d2d28818556a2d0a09384a9f0262407cf9fa305e091a8048df/orjson-3.11.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e46c762d9f0e1cfb4ccc8515de7f349abbc95b59cb5a2bd68df5973fdef913f8", size = 139817, upload-time = "2025-12-06T15:54:48.084Z" }, + { url = "https://files.pythonhosted.org/packages/09/c7/3a445ca9a84a0d59d26365fd8898ff52bdfcdcb825bcc6519830371d2364/orjson-3.11.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7345c759276b798ccd6d77a87136029e71e66a8bbf2d2755cbdde1d82e78706", size = 137336, upload-time = "2025-12-06T15:54:49.426Z" }, + { url = "https://files.pythonhosted.org/packages/9a/b3/dc0d3771f2e5d1f13368f56b339c6782f955c6a20b50465a91acb79fe961/orjson-3.11.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75bc2e59e6a2ac1dd28901d07115abdebc4563b5b07dd612bf64260a201b1c7f", size = 138993, upload-time = "2025-12-06T15:54:50.939Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a2/65267e959de6abe23444659b6e19c888f242bf7725ff927e2292776f6b89/orjson-3.11.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:54aae9b654554c3b4edd61896b978568c6daa16af96fa4681c9b5babd469f863", size = 141070, upload-time = "2025-12-06T15:54:52.414Z" }, + { url = "https://files.pythonhosted.org/packages/63/c9/da44a321b288727a322c6ab17e1754195708786a04f4f9d2220a5076a649/orjson-3.11.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4bdd8d164a871c4ec773f9de0f6fe8769c2d6727879c37a9666ba4183b7f8228", size = 413505, upload-time = "2025-12-06T15:54:53.67Z" }, + { url = "https://files.pythonhosted.org/packages/7f/17/68dc14fa7000eefb3d4d6d7326a190c99bb65e319f02747ef3ebf2452f12/orjson-3.11.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a261fef929bcf98a60713bf5e95ad067cea16ae345d9a35034e73c3990e927d2", size = 151342, upload-time = "2025-12-06T15:54:55.113Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c5/ccee774b67225bed630a57478529fc026eda33d94fe4c0eac8fe58d4aa52/orjson-3.11.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c028a394c766693c5c9909dec76b24f37e6a1b91999e8d0c0d5feecbe93c3e05", size = 141823, upload-time = "2025-12-06T15:54:56.331Z" }, + { url = "https://files.pythonhosted.org/packages/67/80/5d00e4155d0cd7390ae2087130637671da713959bb558db9bac5e6f6b042/orjson-3.11.5-cp313-cp313-win32.whl", hash = "sha256:2cc79aaad1dfabe1bd2d50ee09814a1253164b3da4c00a78c458d82d04b3bdef", size = 135236, upload-time = "2025-12-06T15:54:57.507Z" }, + { url = "https://files.pythonhosted.org/packages/95/fe/792cc06a84808dbdc20ac6eab6811c53091b42f8e51ecebf14b540e9cfe4/orjson-3.11.5-cp313-cp313-win_amd64.whl", hash = "sha256:ff7877d376add4e16b274e35a3f58b7f37b362abf4aa31863dadacdd20e3a583", size = 133167, upload-time = "2025-12-06T15:54:58.71Z" }, + { url = "https://files.pythonhosted.org/packages/46/2c/d158bd8b50e3b1cfdcf406a7e463f6ffe3f0d167b99634717acdaf5e299f/orjson-3.11.5-cp313-cp313-win_arm64.whl", hash = "sha256:59ac72ea775c88b163ba8d21b0177628bd015c5dd060647bbab6e22da3aad287", size = 126712, upload-time = "2025-12-06T15:54:59.892Z" }, + { url = "https://files.pythonhosted.org/packages/c2/60/77d7b839e317ead7bb225d55bb50f7ea75f47afc489c81199befc5435b50/orjson-3.11.5-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e446a8ea0a4c366ceafc7d97067bfd55292969143b57e3c846d87fc701e797a0", size = 245252, upload-time = "2025-12-06T15:55:01.127Z" }, + { url = "https://files.pythonhosted.org/packages/f1/aa/d4639163b400f8044cef0fb9aa51b0337be0da3a27187a20d1166e742370/orjson-3.11.5-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:53deb5addae9c22bbe3739298f5f2196afa881ea75944e7720681c7080909a81", size = 129419, upload-time = "2025-12-06T15:55:02.723Z" }, + { url = "https://files.pythonhosted.org/packages/30/94/9eabf94f2e11c671111139edf5ec410d2f21e6feee717804f7e8872d883f/orjson-3.11.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82cd00d49d6063d2b8791da5d4f9d20539c5951f965e45ccf4e96d33505ce68f", size = 132050, upload-time = "2025-12-06T15:55:03.918Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c8/ca10f5c5322f341ea9a9f1097e140be17a88f88d1cfdd29df522970d9744/orjson-3.11.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3fd15f9fc8c203aeceff4fda211157fad114dde66e92e24097b3647a08f4ee9e", size = 130370, upload-time = "2025-12-06T15:55:05.173Z" }, + { url = "https://files.pythonhosted.org/packages/25/d4/e96824476d361ee2edd5c6290ceb8d7edf88d81148a6ce172fc00278ca7f/orjson-3.11.5-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9df95000fbe6777bf9820ae82ab7578e8662051bb5f83d71a28992f539d2cda7", size = 136012, upload-time = "2025-12-06T15:55:06.402Z" }, + { url = "https://files.pythonhosted.org/packages/85/8e/9bc3423308c425c588903f2d103cfcfe2539e07a25d6522900645a6f257f/orjson-3.11.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92a8d676748fca47ade5bc3da7430ed7767afe51b2f8100e3cd65e151c0eaceb", size = 139809, upload-time = "2025-12-06T15:55:07.656Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3c/b404e94e0b02a232b957c54643ce68d0268dacb67ac33ffdee24008c8b27/orjson-3.11.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa0f513be38b40234c77975e68805506cad5d57b3dfd8fe3baa7f4f4051e15b4", size = 137332, upload-time = "2025-12-06T15:55:08.961Z" }, + { url = "https://files.pythonhosted.org/packages/51/30/cc2d69d5ce0ad9b84811cdf4a0cd5362ac27205a921da524ff42f26d65e0/orjson-3.11.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1863e75b92891f553b7922ce4ee10ed06db061e104f2b7815de80cdcb135ad", size = 138983, upload-time = "2025-12-06T15:55:10.595Z" }, + { url = "https://files.pythonhosted.org/packages/0e/87/de3223944a3e297d4707d2fe3b1ffb71437550e165eaf0ca8bbe43ccbcb1/orjson-3.11.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4be86b58e9ea262617b8ca6251a2f0d63cc132a6da4b5fcc8e0a4128782c829", size = 141069, upload-time = "2025-12-06T15:55:11.832Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/81d5087ae74be33bcae3ff2d80f5ccaa4a8fedc6d39bf65a427a95b8977f/orjson-3.11.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:b923c1c13fa02084eb38c9c065afd860a5cff58026813319a06949c3af5732ac", size = 413491, upload-time = "2025-12-06T15:55:13.314Z" }, + { url = "https://files.pythonhosted.org/packages/d0/6f/f6058c21e2fc1efaf918986dbc2da5cd38044f1a2d4b7b91ad17c4acf786/orjson-3.11.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:1b6bd351202b2cd987f35a13b5e16471cf4d952b42a73c391cc537974c43ef6d", size = 151375, upload-time = "2025-12-06T15:55:14.715Z" }, + { url = "https://files.pythonhosted.org/packages/54/92/c6921f17d45e110892899a7a563a925b2273d929959ce2ad89e2525b885b/orjson-3.11.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:bb150d529637d541e6af06bbe3d02f5498d628b7f98267ff87647584293ab439", size = 141850, upload-time = "2025-12-06T15:55:15.94Z" }, + { url = "https://files.pythonhosted.org/packages/88/86/cdecb0140a05e1a477b81f24739da93b25070ee01ce7f7242f44a6437594/orjson-3.11.5-cp314-cp314-win32.whl", hash = "sha256:9cc1e55c884921434a84a0c3dd2699eb9f92e7b441d7f53f3941079ec6ce7499", size = 135278, upload-time = "2025-12-06T15:55:17.202Z" }, + { url = "https://files.pythonhosted.org/packages/e4/97/b638d69b1e947d24f6109216997e38922d54dcdcdb1b11c18d7efd2d3c59/orjson-3.11.5-cp314-cp314-win_amd64.whl", hash = "sha256:a4f3cb2d874e03bc7767c8f88adaa1a9a05cecea3712649c3b58589ec7317310", size = 133170, upload-time = "2025-12-06T15:55:18.468Z" }, + { url = "https://files.pythonhosted.org/packages/8f/dd/f4fff4a6fe601b4f8f3ba3aa6da8ac33d17d124491a3b804c662a70e1636/orjson-3.11.5-cp314-cp314-win_arm64.whl", hash = "sha256:38b22f476c351f9a1c43e5b07d8b5a02eb24a6ab8e75f700f7d479d4568346a5", size = 126713, upload-time = "2025-12-06T15:55:19.738Z" }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763, upload-time = "2025-09-29T23:16:53.287Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217, upload-time = "2025-09-29T23:17:04.522Z" }, + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791, upload-time = "2025-09-29T23:17:18.444Z" }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373, upload-time = "2025-09-29T23:17:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444, upload-time = "2025-09-29T23:17:49.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459, upload-time = "2025-09-29T23:18:03.722Z" }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086, upload-time = "2025-09-29T23:18:18.505Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "polars" +version = "1.36.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "polars-runtime-32" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/dc/56f2a90c79a2cb13f9e956eab6385effe54216ae7a2068b3a6406bae4345/polars-1.36.1.tar.gz", hash = "sha256:12c7616a2305559144711ab73eaa18814f7aa898c522e7645014b68f1432d54c", size = 711993, upload-time = "2025-12-10T01:14:53.033Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/c6/36a1b874036b49893ecae0ac44a2f63d1a76e6212631a5b2f50a86e0e8af/polars-1.36.1-py3-none-any.whl", hash = "sha256:853c1bbb237add6a5f6d133c15094a9b727d66dd6a4eb91dbb07cdb056b2b8ef", size = 802429, upload-time = "2025-12-10T01:13:53.838Z" }, +] + +[[package]] +name = "polars-runtime-32" +version = "1.36.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/df/597c0ef5eb8d761a16d72327846599b57c5d40d7f9e74306fc154aba8c37/polars_runtime_32-1.36.1.tar.gz", hash = "sha256:201c2cfd80ceb5d5cd7b63085b5fd08d6ae6554f922bcb941035e39638528a09", size = 2788751, upload-time = "2025-12-10T01:14:54.172Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/ea/871129a2d296966c0925b078a9a93c6c5e7facb1c5eebfcd3d5811aeddc1/polars_runtime_32-1.36.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:327b621ca82594f277751f7e23d4b939ebd1be18d54b4cdf7a2f8406cecc18b2", size = 43494311, upload-time = "2025-12-10T01:13:56.096Z" }, + { url = "https://files.pythonhosted.org/packages/d8/76/0038210ad1e526ce5bb2933b13760d6b986b3045eccc1338e661bd656f77/polars_runtime_32-1.36.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ab0d1f23084afee2b97de8c37aa3e02ec3569749ae39571bd89e7a8b11ae9e83", size = 39300602, upload-time = "2025-12-10T01:13:59.366Z" }, + { url = "https://files.pythonhosted.org/packages/54/1e/2707bee75a780a953a77a2c59829ee90ef55708f02fc4add761c579bf76e/polars_runtime_32-1.36.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:899b9ad2e47ceb31eb157f27a09dbc2047efbf4969a923a6b1ba7f0412c3e64c", size = 44511780, upload-time = "2025-12-10T01:14:02.285Z" }, + { url = "https://files.pythonhosted.org/packages/11/b2/3fede95feee441be64b4bcb32444679a8fbb7a453a10251583053f6efe52/polars_runtime_32-1.36.1-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:d9d077bb9df711bc635a86540df48242bb91975b353e53ef261c6fae6cb0948f", size = 40688448, upload-time = "2025-12-10T01:14:05.131Z" }, + { url = "https://files.pythonhosted.org/packages/05/0f/e629713a72999939b7b4bfdbf030a32794db588b04fdf3dc977dd8ea6c53/polars_runtime_32-1.36.1-cp39-abi3-win_amd64.whl", hash = "sha256:cc17101f28c9a169ff8b5b8d4977a3683cd403621841623825525f440b564cf0", size = 44464898, upload-time = "2025-12-10T01:14:08.296Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d8/a12e6aa14f63784cead437083319ec7cece0d5bb9a5bfe7678cc6578b52a/polars_runtime_32-1.36.1-cp39-abi3-win_arm64.whl", hash = "sha256:809e73857be71250141225ddd5d2b30c97e6340aeaa0d445f930e01bef6888dc", size = 39798896, upload-time = "2025-12-10T01:14:11.568Z" }, +] + +[[package]] +name = "propcache" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/0e/934b541323035566a9af292dba85a195f7b78179114f2c6ebb24551118a9/propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db", size = 79534, upload-time = "2025-10-08T19:46:02.083Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6b/db0d03d96726d995dc7171286c6ba9d8d14251f37433890f88368951a44e/propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8", size = 45526, upload-time = "2025-10-08T19:46:03.884Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c3/82728404aea669e1600f304f2609cde9e665c18df5a11cdd57ed73c1dceb/propcache-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925", size = 47263, upload-time = "2025-10-08T19:46:05.405Z" }, + { url = "https://files.pythonhosted.org/packages/df/1b/39313ddad2bf9187a1432654c38249bab4562ef535ef07f5eb6eb04d0b1b/propcache-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21", size = 201012, upload-time = "2025-10-08T19:46:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/5b/01/f1d0b57d136f294a142acf97f4ed58c8e5b974c21e543000968357115011/propcache-0.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5", size = 209491, upload-time = "2025-10-08T19:46:08.909Z" }, + { url = "https://files.pythonhosted.org/packages/a1/c8/038d909c61c5bb039070b3fb02ad5cccdb1dde0d714792e251cdb17c9c05/propcache-0.4.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db", size = 215319, upload-time = "2025-10-08T19:46:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/08/57/8c87e93142b2c1fa2408e45695205a7ba05fb5db458c0bf5c06ba0e09ea6/propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7", size = 196856, upload-time = "2025-10-08T19:46:12.003Z" }, + { url = "https://files.pythonhosted.org/packages/42/df/5615fec76aa561987a534759b3686008a288e73107faa49a8ae5795a9f7a/propcache-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4", size = 193241, upload-time = "2025-10-08T19:46:13.495Z" }, + { url = "https://files.pythonhosted.org/packages/d5/21/62949eb3a7a54afe8327011c90aca7e03547787a88fb8bd9726806482fea/propcache-0.4.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60", size = 190552, upload-time = "2025-10-08T19:46:14.938Z" }, + { url = "https://files.pythonhosted.org/packages/30/ee/ab4d727dd70806e5b4de96a798ae7ac6e4d42516f030ee60522474b6b332/propcache-0.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f", size = 200113, upload-time = "2025-10-08T19:46:16.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0b/38b46208e6711b016aa8966a3ac793eee0d05c7159d8342aa27fc0bc365e/propcache-0.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900", size = 200778, upload-time = "2025-10-08T19:46:18.023Z" }, + { url = "https://files.pythonhosted.org/packages/cf/81/5abec54355ed344476bee711e9f04815d4b00a311ab0535599204eecc257/propcache-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c", size = 193047, upload-time = "2025-10-08T19:46:19.449Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b6/1f237c04e32063cb034acd5f6ef34ef3a394f75502e72703545631ab1ef6/propcache-0.4.1-cp310-cp310-win32.whl", hash = "sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb", size = 38093, upload-time = "2025-10-08T19:46:20.643Z" }, + { url = "https://files.pythonhosted.org/packages/a6/67/354aac4e0603a15f76439caf0427781bcd6797f370377f75a642133bc954/propcache-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37", size = 41638, upload-time = "2025-10-08T19:46:21.935Z" }, + { url = "https://files.pythonhosted.org/packages/e0/e1/74e55b9fd1a4c209ff1a9a824bf6c8b3d1fc5a1ac3eabe23462637466785/propcache-0.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581", size = 38229, upload-time = "2025-10-08T19:46:23.368Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d4/4e2c9aaf7ac2242b9358f98dccd8f90f2605402f5afeff6c578682c2c491/propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf", size = 80208, upload-time = "2025-10-08T19:46:24.597Z" }, + { url = "https://files.pythonhosted.org/packages/c2/21/d7b68e911f9c8e18e4ae43bdbc1e1e9bbd971f8866eb81608947b6f585ff/propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5", size = 45777, upload-time = "2025-10-08T19:46:25.733Z" }, + { url = "https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e", size = 47647, upload-time = "2025-10-08T19:46:27.304Z" }, + { url = "https://files.pythonhosted.org/packages/58/1a/3c62c127a8466c9c843bccb503d40a273e5cc69838805f322e2826509e0d/propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566", size = 214929, upload-time = "2025-10-08T19:46:28.62Z" }, + { url = "https://files.pythonhosted.org/packages/56/b9/8fa98f850960b367c4b8fe0592e7fc341daa7a9462e925228f10a60cf74f/propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165", size = 221778, upload-time = "2025-10-08T19:46:30.358Z" }, + { url = "https://files.pythonhosted.org/packages/46/a6/0ab4f660eb59649d14b3d3d65c439421cf2f87fe5dd68591cbe3c1e78a89/propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc", size = 228144, upload-time = "2025-10-08T19:46:32.607Z" }, + { url = "https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48", size = 210030, upload-time = "2025-10-08T19:46:33.969Z" }, + { url = "https://files.pythonhosted.org/packages/40/e2/27e6feebb5f6b8408fa29f5efbb765cd54c153ac77314d27e457a3e993b7/propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570", size = 208252, upload-time = "2025-10-08T19:46:35.309Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f8/91c27b22ccda1dbc7967f921c42825564fa5336a01ecd72eb78a9f4f53c2/propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85", size = 202064, upload-time = "2025-10-08T19:46:36.993Z" }, + { url = "https://files.pythonhosted.org/packages/f2/26/7f00bd6bd1adba5aafe5f4a66390f243acab58eab24ff1a08bebb2ef9d40/propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e", size = 212429, upload-time = "2025-10-08T19:46:38.398Z" }, + { url = "https://files.pythonhosted.org/packages/84/89/fd108ba7815c1117ddca79c228f3f8a15fc82a73bca8b142eb5de13b2785/propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757", size = 216727, upload-time = "2025-10-08T19:46:39.732Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/3ec3f7e3173e73f1d600495d8b545b53802cbf35506e5732dd8578db3724/propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f", size = 205097, upload-time = "2025-10-08T19:46:41.025Z" }, + { url = "https://files.pythonhosted.org/packages/61/b0/b2631c19793f869d35f47d5a3a56fb19e9160d3c119f15ac7344fc3ccae7/propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1", size = 38084, upload-time = "2025-10-08T19:46:42.693Z" }, + { url = "https://files.pythonhosted.org/packages/f4/78/6cce448e2098e9f3bfc91bb877f06aa24b6ccace872e39c53b2f707c4648/propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6", size = 41637, upload-time = "2025-10-08T19:46:43.778Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e9/754f180cccd7f51a39913782c74717c581b9cc8177ad0e949f4d51812383/propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239", size = 38064, upload-time = "2025-10-08T19:46:44.872Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" }, + { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037, upload-time = "2025-10-08T19:46:47.23Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324, upload-time = "2025-10-08T19:46:48.384Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505, upload-time = "2025-10-08T19:46:50.055Z" }, + { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242, upload-time = "2025-10-08T19:46:51.815Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474, upload-time = "2025-10-08T19:46:53.208Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575, upload-time = "2025-10-08T19:46:54.511Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736, upload-time = "2025-10-08T19:46:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019, upload-time = "2025-10-08T19:46:57.595Z" }, + { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376, upload-time = "2025-10-08T19:46:59.067Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988, upload-time = "2025-10-08T19:47:00.544Z" }, + { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615, upload-time = "2025-10-08T19:47:01.968Z" }, + { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066, upload-time = "2025-10-08T19:47:03.503Z" }, + { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655, upload-time = "2025-10-08T19:47:04.973Z" }, + { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789, upload-time = "2025-10-08T19:47:06.077Z" }, + { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750, upload-time = "2025-10-08T19:47:07.648Z" }, + { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780, upload-time = "2025-10-08T19:47:08.851Z" }, + { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308, upload-time = "2025-10-08T19:47:09.982Z" }, + { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0c/cd762dd011a9287389a6a3eb43aa30207bde253610cca06824aeabfe9653/propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af", size = 211215, upload-time = "2025-10-08T19:47:13.146Z" }, + { url = "https://files.pythonhosted.org/packages/30/3e/49861e90233ba36890ae0ca4c660e95df565b2cd15d4a68556ab5865974e/propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c", size = 218112, upload-time = "2025-10-08T19:47:14.913Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f", size = 204442, upload-time = "2025-10-08T19:47:16.277Z" }, + { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ec/d8a7cd406ee1ddb705db2139f8a10a8a427100347bd698e7014351c7af09/propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24", size = 196920, upload-time = "2025-10-08T19:47:19.355Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6c/f38ab64af3764f431e359f8baf9e0a21013e24329e8b85d2da32e8ed07ca/propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa", size = 203748, upload-time = "2025-10-08T19:47:21.338Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e3/fa846bd70f6534d647886621388f0a265254d30e3ce47e5c8e6e27dbf153/propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61", size = 205877, upload-time = "2025-10-08T19:47:23.059Z" }, + { url = "https://files.pythonhosted.org/packages/e2/39/8163fc6f3133fea7b5f2827e8eba2029a0277ab2c5beee6c1db7b10fc23d/propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66", size = 199437, upload-time = "2025-10-08T19:47:24.445Z" }, + { url = "https://files.pythonhosted.org/packages/93/89/caa9089970ca49c7c01662bd0eeedfe85494e863e8043565aeb6472ce8fe/propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81", size = 37586, upload-time = "2025-10-08T19:47:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e", size = 40790, upload-time = "2025-10-08T19:47:26.847Z" }, + { url = "https://files.pythonhosted.org/packages/59/1b/e71ae98235f8e2ba5004d8cb19765a74877abf189bc53fc0c80d799e56c3/propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1", size = 37158, upload-time = "2025-10-08T19:47:27.961Z" }, + { url = "https://files.pythonhosted.org/packages/83/ce/a31bbdfc24ee0dcbba458c8175ed26089cf109a55bbe7b7640ed2470cfe9/propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b", size = 81451, upload-time = "2025-10-08T19:47:29.445Z" }, + { url = "https://files.pythonhosted.org/packages/25/9c/442a45a470a68456e710d96cacd3573ef26a1d0a60067e6a7d5e655621ed/propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566", size = 46374, upload-time = "2025-10-08T19:47:30.579Z" }, + { url = "https://files.pythonhosted.org/packages/f4/bf/b1d5e21dbc3b2e889ea4327044fb16312a736d97640fb8b6aa3f9c7b3b65/propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835", size = 48396, upload-time = "2025-10-08T19:47:31.79Z" }, + { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c1/86f846827fb969c4b78b0af79bba1d1ea2156492e1b83dea8b8a6ae27395/propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859", size = 273856, upload-time = "2025-10-08T19:47:34.906Z" }, + { url = "https://files.pythonhosted.org/packages/36/1d/fc272a63c8d3bbad6878c336c7a7dea15e8f2d23a544bda43205dfa83ada/propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b", size = 280420, upload-time = "2025-10-08T19:47:36.338Z" }, + { url = "https://files.pythonhosted.org/packages/07/0c/01f2219d39f7e53d52e5173bcb09c976609ba30209912a0680adfb8c593a/propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0", size = 263254, upload-time = "2025-10-08T19:47:37.692Z" }, + { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" }, + { url = "https://files.pythonhosted.org/packages/7a/71/1f9e22eb8b8316701c2a19fa1f388c8a3185082607da8e406a803c9b954e/propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393", size = 247873, upload-time = "2025-10-08T19:47:41.084Z" }, + { url = "https://files.pythonhosted.org/packages/4a/65/3d4b61f36af2b4eddba9def857959f1016a51066b4f1ce348e0cf7881f58/propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874", size = 262739, upload-time = "2025-10-08T19:47:42.51Z" }, + { url = "https://files.pythonhosted.org/packages/2a/42/26746ab087faa77c1c68079b228810436ccd9a5ce9ac85e2b7307195fd06/propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7", size = 263514, upload-time = "2025-10-08T19:47:43.927Z" }, + { url = "https://files.pythonhosted.org/packages/94/13/630690fe201f5502d2403dd3cfd451ed8858fe3c738ee88d095ad2ff407b/propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1", size = 257781, upload-time = "2025-10-08T19:47:45.448Z" }, + { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" }, + { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" }, + { url = "https://files.pythonhosted.org/packages/8e/5c/bca52d654a896f831b8256683457ceddd490ec18d9ec50e97dfd8fc726a8/propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12", size = 78152, upload-time = "2025-10-08T19:47:51.051Z" }, + { url = "https://files.pythonhosted.org/packages/65/9b/03b04e7d82a5f54fb16113d839f5ea1ede58a61e90edf515f6577c66fa8f/propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c", size = 44869, upload-time = "2025-10-08T19:47:52.594Z" }, + { url = "https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded", size = 46596, upload-time = "2025-10-08T19:47:54.073Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" }, + { url = "https://files.pythonhosted.org/packages/df/f6/c5fa1357cc9748510ee55f37173eb31bfde6d94e98ccd9e6f033f2fc06e1/propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4", size = 211490, upload-time = "2025-10-08T19:47:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/80/1e/e5889652a7c4a3846683401a48f0f2e5083ce0ec1a8a5221d8058fbd1adf/propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44", size = 215371, upload-time = "2025-10-08T19:47:59.317Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d", size = 201424, upload-time = "2025-10-08T19:48:00.67Z" }, + { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" }, + { url = "https://files.pythonhosted.org/packages/dc/89/ce24f3dc182630b4e07aa6d15f0ff4b14ed4b9955fae95a0b54c58d66c05/propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e", size = 193130, upload-time = "2025-10-08T19:48:04.499Z" }, + { url = "https://files.pythonhosted.org/packages/a9/24/ef0d5fd1a811fb5c609278d0209c9f10c35f20581fcc16f818da959fc5b4/propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f", size = 202625, upload-time = "2025-10-08T19:48:06.213Z" }, + { url = "https://files.pythonhosted.org/packages/f5/02/98ec20ff5546f68d673df2f7a69e8c0d076b5abd05ca882dc7ee3a83653d/propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49", size = 204209, upload-time = "2025-10-08T19:48:08.432Z" }, + { url = "https://files.pythonhosted.org/packages/a0/87/492694f76759b15f0467a2a93ab68d32859672b646aa8a04ce4864e7932d/propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144", size = 197797, upload-time = "2025-10-08T19:48:09.968Z" }, + { url = "https://files.pythonhosted.org/packages/ee/36/66367de3575db1d2d3f3d177432bd14ee577a39d3f5d1b3d5df8afe3b6e2/propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f", size = 38140, upload-time = "2025-10-08T19:48:11.232Z" }, + { url = "https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153", size = 41257, upload-time = "2025-10-08T19:48:12.707Z" }, + { url = "https://files.pythonhosted.org/packages/34/5e/63bd5896c3fec12edcbd6f12508d4890d23c265df28c74b175e1ef9f4f3b/propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992", size = 38097, upload-time = "2025-10-08T19:48:13.923Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/9ff785d787ccf9bbb3f3106f79884a130951436f58392000231b4c737c80/propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f", size = 81455, upload-time = "2025-10-08T19:48:15.16Z" }, + { url = "https://files.pythonhosted.org/packages/90/85/2431c10c8e7ddb1445c1f7c4b54d886e8ad20e3c6307e7218f05922cad67/propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393", size = 46372, upload-time = "2025-10-08T19:48:16.424Z" }, + { url = "https://files.pythonhosted.org/packages/01/20/b0972d902472da9bcb683fa595099911f4d2e86e5683bcc45de60dd05dc3/propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0", size = 48411, upload-time = "2025-10-08T19:48:17.577Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" }, + { url = "https://files.pythonhosted.org/packages/20/67/89800c8352489b21a8047c773067644e3897f02ecbbd610f4d46b7f08612/propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be", size = 273557, upload-time = "2025-10-08T19:48:20.762Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a1/b52b055c766a54ce6d9c16d9aca0cad8059acd9637cdf8aa0222f4a026ef/propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc", size = 280015, upload-time = "2025-10-08T19:48:22.592Z" }, + { url = "https://files.pythonhosted.org/packages/48/c8/33cee30bd890672c63743049f3c9e4be087e6780906bfc3ec58528be59c1/propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a", size = 262880, upload-time = "2025-10-08T19:48:23.947Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" }, + { url = "https://files.pythonhosted.org/packages/cf/12/96e4664c82ca2f31e1c8dff86afb867348979eb78d3cb8546a680287a1e9/propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726", size = 247641, upload-time = "2025-10-08T19:48:27.207Z" }, + { url = "https://files.pythonhosted.org/packages/18/ed/e7a9cfca28133386ba52278136d42209d3125db08d0a6395f0cba0c0285c/propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367", size = 262510, upload-time = "2025-10-08T19:48:28.65Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/16d8bf65e8845dd62b4e2b57444ab81f07f40caa5652b8969b87ddcf2ef6/propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36", size = 263161, upload-time = "2025-10-08T19:48:30.133Z" }, + { url = "https://files.pythonhosted.org/packages/e7/70/c99e9edb5d91d5ad8a49fa3c1e8285ba64f1476782fed10ab251ff413ba1/propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455", size = 257393, upload-time = "2025-10-08T19:48:31.567Z" }, + { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" }, + { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" }, + { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, +] + +[[package]] +name = "protobuf" +version = "6.33.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/44/e49ecff446afeec9d1a66d6bbf9adc21e3c7cea7803a920ca3773379d4f6/protobuf-6.33.2.tar.gz", hash = "sha256:56dc370c91fbb8ac85bc13582c9e373569668a290aa2e66a590c2a0d35ddb9e4", size = 444296, upload-time = "2025-12-06T00:17:53.311Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/91/1e3a34881a88697a7354ffd177e8746e97a722e5e8db101544b47e84afb1/protobuf-6.33.2-cp310-abi3-win32.whl", hash = "sha256:87eb388bd2d0f78febd8f4c8779c79247b26a5befad525008e49a6955787ff3d", size = 425603, upload-time = "2025-12-06T00:17:41.114Z" }, + { url = "https://files.pythonhosted.org/packages/64/20/4d50191997e917ae13ad0a235c8b42d8c1ab9c3e6fd455ca16d416944355/protobuf-6.33.2-cp310-abi3-win_amd64.whl", hash = "sha256:fc2a0e8b05b180e5fc0dd1559fe8ebdae21a27e81ac77728fb6c42b12c7419b4", size = 436930, upload-time = "2025-12-06T00:17:43.278Z" }, + { url = "https://files.pythonhosted.org/packages/b2/ca/7e485da88ba45c920fb3f50ae78de29ab925d9e54ef0de678306abfbb497/protobuf-6.33.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d9b19771ca75935b3a4422957bc518b0cecb978b31d1dd12037b088f6bcc0e43", size = 427621, upload-time = "2025-12-06T00:17:44.445Z" }, + { url = "https://files.pythonhosted.org/packages/7d/4f/f743761e41d3b2b2566748eb76bbff2b43e14d5fcab694f494a16458b05f/protobuf-6.33.2-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:b5d3b5625192214066d99b2b605f5783483575656784de223f00a8d00754fc0e", size = 324460, upload-time = "2025-12-06T00:17:45.678Z" }, + { url = "https://files.pythonhosted.org/packages/b1/fa/26468d00a92824020f6f2090d827078c09c9c587e34cbfd2d0c7911221f8/protobuf-6.33.2-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:8cd7640aee0b7828b6d03ae518b5b4806fdfc1afe8de82f79c3454f8aef29872", size = 339168, upload-time = "2025-12-06T00:17:46.813Z" }, + { url = "https://files.pythonhosted.org/packages/56/13/333b8f421738f149d4fe5e49553bc2a2ab75235486259f689b4b91f96cec/protobuf-6.33.2-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:1f8017c48c07ec5859106533b682260ba3d7c5567b1ca1f24297ce03384d1b4f", size = 323270, upload-time = "2025-12-06T00:17:48.253Z" }, + { url = "https://files.pythonhosted.org/packages/0e/15/4f02896cc3df04fc465010a4c6a0cd89810f54617a32a70ef531ed75d61c/protobuf-6.33.2-py3-none-any.whl", hash = "sha256:7636aad9bb01768870266de5dc009de2d1b936771b38a793f73cbbf279c91c5c", size = 170501, upload-time = "2025-12-06T00:17:52.211Z" }, +] + +[[package]] +name = "psutil" +version = "7.1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/88/bdd0a41e5857d5d703287598cbf08dad90aed56774ea52ae071bae9071b6/psutil-7.1.3.tar.gz", hash = "sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74", size = 489059, upload-time = "2025-11-02T12:25:54.619Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/93/0c49e776b8734fef56ec9c5c57f923922f2cf0497d62e0f419465f28f3d0/psutil-7.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc", size = 239751, upload-time = "2025-11-02T12:25:58.161Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8d/b31e39c769e70780f007969815195a55c81a63efebdd4dbe9e7a113adb2f/psutil-7.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0", size = 240368, upload-time = "2025-11-02T12:26:00.491Z" }, + { url = "https://files.pythonhosted.org/packages/62/61/23fd4acc3c9eebbf6b6c78bcd89e5d020cfde4acf0a9233e9d4e3fa698b4/psutil-7.1.3-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7", size = 287134, upload-time = "2025-11-02T12:26:02.613Z" }, + { url = "https://files.pythonhosted.org/packages/30/1c/f921a009ea9ceb51aa355cb0cc118f68d354db36eae18174bab63affb3e6/psutil-7.1.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251", size = 289904, upload-time = "2025-11-02T12:26:05.207Z" }, + { url = "https://files.pythonhosted.org/packages/a6/82/62d68066e13e46a5116df187d319d1724b3f437ddd0f958756fc052677f4/psutil-7.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa", size = 249642, upload-time = "2025-11-02T12:26:07.447Z" }, + { url = "https://files.pythonhosted.org/packages/df/ad/c1cd5fe965c14a0392112f68362cfceb5230819dbb5b1888950d18a11d9f/psutil-7.1.3-cp313-cp313t-win_arm64.whl", hash = "sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee", size = 245518, upload-time = "2025-11-02T12:26:09.719Z" }, + { url = "https://files.pythonhosted.org/packages/2e/bb/6670bded3e3236eb4287c7bcdc167e9fae6e1e9286e437f7111caed2f909/psutil-7.1.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353", size = 239843, upload-time = "2025-11-02T12:26:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/b8/66/853d50e75a38c9a7370ddbeefabdd3d3116b9c31ef94dc92c6729bc36bec/psutil-7.1.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b", size = 240369, upload-time = "2025-11-02T12:26:14.358Z" }, + { url = "https://files.pythonhosted.org/packages/41/bd/313aba97cb5bfb26916dc29cf0646cbe4dd6a89ca69e8c6edce654876d39/psutil-7.1.3-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9", size = 288210, upload-time = "2025-11-02T12:26:16.699Z" }, + { url = "https://files.pythonhosted.org/packages/c2/fa/76e3c06e760927a0cfb5705eb38164254de34e9bd86db656d4dbaa228b04/psutil-7.1.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f", size = 291182, upload-time = "2025-11-02T12:26:18.848Z" }, + { url = "https://files.pythonhosted.org/packages/0f/1d/5774a91607035ee5078b8fd747686ebec28a962f178712de100d00b78a32/psutil-7.1.3-cp314-cp314t-win_amd64.whl", hash = "sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7", size = 250466, upload-time = "2025-11-02T12:26:21.183Z" }, + { url = "https://files.pythonhosted.org/packages/00/ca/e426584bacb43a5cb1ac91fae1937f478cd8fbe5e4ff96574e698a2c77cd/psutil-7.1.3-cp314-cp314t-win_arm64.whl", hash = "sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264", size = 245756, upload-time = "2025-11-02T12:26:23.148Z" }, + { url = "https://files.pythonhosted.org/packages/ef/94/46b9154a800253e7ecff5aaacdf8ebf43db99de4a2dfa18575b02548654e/psutil-7.1.3-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab", size = 238359, upload-time = "2025-11-02T12:26:25.284Z" }, + { url = "https://files.pythonhosted.org/packages/68/3a/9f93cff5c025029a36d9a92fef47220ab4692ee7f2be0fba9f92813d0cb8/psutil-7.1.3-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880", size = 239171, upload-time = "2025-11-02T12:26:27.23Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b1/5f49af514f76431ba4eea935b8ad3725cdeb397e9245ab919dbc1d1dc20f/psutil-7.1.3-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3", size = 263261, upload-time = "2025-11-02T12:26:29.48Z" }, + { url = "https://files.pythonhosted.org/packages/e0/95/992c8816a74016eb095e73585d747e0a8ea21a061ed3689474fabb29a395/psutil-7.1.3-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b", size = 264635, upload-time = "2025-11-02T12:26:31.74Z" }, + { url = "https://files.pythonhosted.org/packages/55/4c/c3ed1a622b6ae2fd3c945a366e64eb35247a31e4db16cf5095e269e8eb3c/psutil-7.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd", size = 247633, upload-time = "2025-11-02T12:26:33.887Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ad/33b2ccec09bf96c2b2ef3f9a6f66baac8253d7565d8839e024a6b905d45d/psutil-7.1.3-cp37-abi3-win_arm64.whl", hash = "sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1", size = 244608, upload-time = "2025-11-02T12:26:36.136Z" }, +] + +[[package]] +name = "pyarrow" +version = "22.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/53/04a7fdc63e6056116c9ddc8b43bc28c12cdd181b85cbeadb79278475f3ae/pyarrow-22.0.0.tar.gz", hash = "sha256:3d600dc583260d845c7d8a6db540339dd883081925da2bd1c5cb808f720b3cd9", size = 1151151, upload-time = "2025-10-24T12:30:00.762Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/9b/cb3f7e0a345353def531ca879053e9ef6b9f38ed91aebcf68b09ba54dec0/pyarrow-22.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:77718810bd3066158db1e95a63c160ad7ce08c6b0710bc656055033e39cdad88", size = 34223968, upload-time = "2025-10-24T10:03:31.21Z" }, + { url = "https://files.pythonhosted.org/packages/6c/41/3184b8192a120306270c5307f105b70320fdaa592c99843c5ef78aaefdcf/pyarrow-22.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:44d2d26cda26d18f7af7db71453b7b783788322d756e81730acb98f24eb90ace", size = 35942085, upload-time = "2025-10-24T10:03:38.146Z" }, + { url = "https://files.pythonhosted.org/packages/d9/3d/a1eab2f6f08001f9fb714b8ed5cfb045e2fe3e3e3c0c221f2c9ed1e6d67d/pyarrow-22.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b9d71701ce97c95480fecb0039ec5bb889e75f110da72005743451339262f4ce", size = 44964613, upload-time = "2025-10-24T10:03:46.516Z" }, + { url = "https://files.pythonhosted.org/packages/46/46/a1d9c24baf21cfd9ce994ac820a24608decf2710521b29223d4334985127/pyarrow-22.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:710624ab925dc2b05a6229d47f6f0dac1c1155e6ed559be7109f684eba048a48", size = 47627059, upload-time = "2025-10-24T10:03:55.353Z" }, + { url = "https://files.pythonhosted.org/packages/3a/4c/f711acb13075c1391fd54bc17e078587672c575f8de2a6e62509af026dcf/pyarrow-22.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f963ba8c3b0199f9d6b794c90ec77545e05eadc83973897a4523c9e8d84e9340", size = 47947043, upload-time = "2025-10-24T10:04:05.408Z" }, + { url = "https://files.pythonhosted.org/packages/4e/70/1f3180dd7c2eab35c2aca2b29ace6c519f827dcd4cfeb8e0dca41612cf7a/pyarrow-22.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bd0d42297ace400d8febe55f13fdf46e86754842b860c978dfec16f081e5c653", size = 50206505, upload-time = "2025-10-24T10:04:15.786Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/fea6578112c8c60ffde55883a571e4c4c6bc7049f119d6b09333b5cc6f73/pyarrow-22.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:00626d9dc0f5ef3a75fe63fd68b9c7c8302d2b5bbc7f74ecaedba83447a24f84", size = 28101641, upload-time = "2025-10-24T10:04:22.57Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b7/18f611a8cdc43417f9394a3ccd3eace2f32183c08b9eddc3d17681819f37/pyarrow-22.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:3e294c5eadfb93d78b0763e859a0c16d4051fc1c5231ae8956d61cb0b5666f5a", size = 34272022, upload-time = "2025-10-24T10:04:28.973Z" }, + { url = "https://files.pythonhosted.org/packages/26/5c/f259e2526c67eb4b9e511741b19870a02363a47a35edbebc55c3178db22d/pyarrow-22.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:69763ab2445f632d90b504a815a2a033f74332997052b721002298ed6de40f2e", size = 35995834, upload-time = "2025-10-24T10:04:35.467Z" }, + { url = "https://files.pythonhosted.org/packages/50/8d/281f0f9b9376d4b7f146913b26fac0aa2829cd1ee7e997f53a27411bbb92/pyarrow-22.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b41f37cabfe2463232684de44bad753d6be08a7a072f6a83447eeaf0e4d2a215", size = 45030348, upload-time = "2025-10-24T10:04:43.366Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e5/53c0a1c428f0976bf22f513d79c73000926cb00b9c138d8e02daf2102e18/pyarrow-22.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:35ad0f0378c9359b3f297299c3309778bb03b8612f987399a0333a560b43862d", size = 47699480, upload-time = "2025-10-24T10:04:51.486Z" }, + { url = "https://files.pythonhosted.org/packages/95/e1/9dbe4c465c3365959d183e6345d0a8d1dc5b02ca3f8db4760b3bc834cf25/pyarrow-22.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8382ad21458075c2e66a82a29d650f963ce51c7708c7c0ff313a8c206c4fd5e8", size = 48011148, upload-time = "2025-10-24T10:04:59.585Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b4/7caf5d21930061444c3cf4fa7535c82faf5263e22ce43af7c2759ceb5b8b/pyarrow-22.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1a812a5b727bc09c3d7ea072c4eebf657c2f7066155506ba31ebf4792f88f016", size = 50276964, upload-time = "2025-10-24T10:05:08.175Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f3/cec89bd99fa3abf826f14d4e53d3d11340ce6f6af4d14bdcd54cd83b6576/pyarrow-22.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ec5d40dd494882704fb876c16fa7261a69791e784ae34e6b5992e977bd2e238c", size = 28106517, upload-time = "2025-10-24T10:05:14.314Z" }, + { url = "https://files.pythonhosted.org/packages/af/63/ba23862d69652f85b615ca14ad14f3bcfc5bf1b99ef3f0cd04ff93fdad5a/pyarrow-22.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bea79263d55c24a32b0d79c00a1c58bb2ee5f0757ed95656b01c0fb310c5af3d", size = 34211578, upload-time = "2025-10-24T10:05:21.583Z" }, + { url = "https://files.pythonhosted.org/packages/b1/d0/f9ad86fe809efd2bcc8be32032fa72e8b0d112b01ae56a053006376c5930/pyarrow-22.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:12fe549c9b10ac98c91cf791d2945e878875d95508e1a5d14091a7aaa66d9cf8", size = 35989906, upload-time = "2025-10-24T10:05:29.485Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a8/f910afcb14630e64d673f15904ec27dd31f1e009b77033c365c84e8c1e1d/pyarrow-22.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:334f900ff08ce0423407af97e6c26ad5d4e3b0763645559ece6fbf3747d6a8f5", size = 45021677, upload-time = "2025-10-24T10:05:38.274Z" }, + { url = "https://files.pythonhosted.org/packages/13/95/aec81f781c75cd10554dc17a25849c720d54feafb6f7847690478dcf5ef8/pyarrow-22.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c6c791b09c57ed76a18b03f2631753a4960eefbbca80f846da8baefc6491fcfe", size = 47726315, upload-time = "2025-10-24T10:05:47.314Z" }, + { url = "https://files.pythonhosted.org/packages/bb/d4/74ac9f7a54cfde12ee42734ea25d5a3c9a45db78f9def949307a92720d37/pyarrow-22.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c3200cb41cdbc65156e5f8c908d739b0dfed57e890329413da2748d1a2cd1a4e", size = 47990906, upload-time = "2025-10-24T10:05:58.254Z" }, + { url = "https://files.pythonhosted.org/packages/2e/71/fedf2499bf7a95062eafc989ace56572f3343432570e1c54e6599d5b88da/pyarrow-22.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ac93252226cf288753d8b46280f4edf3433bf9508b6977f8dd8526b521a1bbb9", size = 50306783, upload-time = "2025-10-24T10:06:08.08Z" }, + { url = "https://files.pythonhosted.org/packages/68/ed/b202abd5a5b78f519722f3d29063dda03c114711093c1995a33b8e2e0f4b/pyarrow-22.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:44729980b6c50a5f2bfcc2668d36c569ce17f8b17bccaf470c4313dcbbf13c9d", size = 27972883, upload-time = "2025-10-24T10:06:14.204Z" }, + { url = "https://files.pythonhosted.org/packages/a6/d6/d0fac16a2963002fc22c8fa75180a838737203d558f0ed3b564c4a54eef5/pyarrow-22.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e6e95176209257803a8b3d0394f21604e796dadb643d2f7ca21b66c9c0b30c9a", size = 34204629, upload-time = "2025-10-24T10:06:20.274Z" }, + { url = "https://files.pythonhosted.org/packages/c6/9c/1d6357347fbae062ad3f17082f9ebc29cc733321e892c0d2085f42a2212b/pyarrow-22.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:001ea83a58024818826a9e3f89bf9310a114f7e26dfe404a4c32686f97bd7901", size = 35985783, upload-time = "2025-10-24T10:06:27.301Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c0/782344c2ce58afbea010150df07e3a2f5fdad299cd631697ae7bd3bac6e3/pyarrow-22.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ce20fe000754f477c8a9125543f1936ea5b8867c5406757c224d745ed033e691", size = 45020999, upload-time = "2025-10-24T10:06:35.387Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8b/5362443737a5307a7b67c1017c42cd104213189b4970bf607e05faf9c525/pyarrow-22.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e0a15757fccb38c410947df156f9749ae4a3c89b2393741a50521f39a8cf202a", size = 47724601, upload-time = "2025-10-24T10:06:43.551Z" }, + { url = "https://files.pythonhosted.org/packages/69/4d/76e567a4fc2e190ee6072967cb4672b7d9249ac59ae65af2d7e3047afa3b/pyarrow-22.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cedb9dd9358e4ea1d9bce3665ce0797f6adf97ff142c8e25b46ba9cdd508e9b6", size = 48001050, upload-time = "2025-10-24T10:06:52.284Z" }, + { url = "https://files.pythonhosted.org/packages/01/5e/5653f0535d2a1aef8223cee9d92944cb6bccfee5cf1cd3f462d7cb022790/pyarrow-22.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:252be4a05f9d9185bb8c18e83764ebcfea7185076c07a7a662253af3a8c07941", size = 50307877, upload-time = "2025-10-24T10:07:02.405Z" }, + { url = "https://files.pythonhosted.org/packages/2d/f8/1d0bd75bf9328a3b826e24a16e5517cd7f9fbf8d34a3184a4566ef5a7f29/pyarrow-22.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:a4893d31e5ef780b6edcaf63122df0f8d321088bb0dee4c8c06eccb1ca28d145", size = 27977099, upload-time = "2025-10-24T10:08:07.259Z" }, + { url = "https://files.pythonhosted.org/packages/90/81/db56870c997805bf2b0f6eeeb2d68458bf4654652dccdcf1bf7a42d80903/pyarrow-22.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:f7fe3dbe871294ba70d789be16b6e7e52b418311e166e0e3cba9522f0f437fb1", size = 34336685, upload-time = "2025-10-24T10:07:11.47Z" }, + { url = "https://files.pythonhosted.org/packages/1c/98/0727947f199aba8a120f47dfc229eeb05df15bcd7a6f1b669e9f882afc58/pyarrow-22.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:ba95112d15fd4f1105fb2402c4eab9068f0554435e9b7085924bcfaac2cc306f", size = 36032158, upload-time = "2025-10-24T10:07:18.626Z" }, + { url = "https://files.pythonhosted.org/packages/96/b4/9babdef9c01720a0785945c7cf550e4acd0ebcd7bdd2e6f0aa7981fa85e2/pyarrow-22.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c064e28361c05d72eed8e744c9605cbd6d2bb7481a511c74071fd9b24bc65d7d", size = 44892060, upload-time = "2025-10-24T10:07:26.002Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ca/2f8804edd6279f78a37062d813de3f16f29183874447ef6d1aadbb4efa0f/pyarrow-22.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:6f9762274496c244d951c819348afbcf212714902742225f649cf02823a6a10f", size = 47504395, upload-time = "2025-10-24T10:07:34.09Z" }, + { url = "https://files.pythonhosted.org/packages/b9/f0/77aa5198fd3943682b2e4faaf179a674f0edea0d55d326d83cb2277d9363/pyarrow-22.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a9d9ffdc2ab696f6b15b4d1f7cec6658e1d788124418cb30030afbae31c64746", size = 48066216, upload-time = "2025-10-24T10:07:43.528Z" }, + { url = "https://files.pythonhosted.org/packages/79/87/a1937b6e78b2aff18b706d738c9e46ade5bfcf11b294e39c87706a0089ac/pyarrow-22.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ec1a15968a9d80da01e1d30349b2b0d7cc91e96588ee324ce1b5228175043e95", size = 50288552, upload-time = "2025-10-24T10:07:53.519Z" }, + { url = "https://files.pythonhosted.org/packages/60/ae/b5a5811e11f25788ccfdaa8f26b6791c9807119dffcf80514505527c384c/pyarrow-22.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:bba208d9c7decf9961998edf5c65e3ea4355d5818dd6cd0f6809bec1afb951cc", size = 28262504, upload-time = "2025-10-24T10:08:00.932Z" }, + { url = "https://files.pythonhosted.org/packages/bd/b0/0fa4d28a8edb42b0a7144edd20befd04173ac79819547216f8a9f36f9e50/pyarrow-22.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:9bddc2cade6561f6820d4cd73f99a0243532ad506bc510a75a5a65a522b2d74d", size = 34224062, upload-time = "2025-10-24T10:08:14.101Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a8/7a719076b3c1be0acef56a07220c586f25cd24de0e3f3102b438d18ae5df/pyarrow-22.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:e70ff90c64419709d38c8932ea9fe1cc98415c4f87ea8da81719e43f02534bc9", size = 35990057, upload-time = "2025-10-24T10:08:21.842Z" }, + { url = "https://files.pythonhosted.org/packages/89/3c/359ed54c93b47fb6fe30ed16cdf50e3f0e8b9ccfb11b86218c3619ae50a8/pyarrow-22.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:92843c305330aa94a36e706c16209cd4df274693e777ca47112617db7d0ef3d7", size = 45068002, upload-time = "2025-10-24T10:08:29.034Z" }, + { url = "https://files.pythonhosted.org/packages/55/fc/4945896cc8638536ee787a3bd6ce7cec8ec9acf452d78ec39ab328efa0a1/pyarrow-22.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:6dda1ddac033d27421c20d7a7943eec60be44e0db4e079f33cc5af3b8280ccde", size = 47737765, upload-time = "2025-10-24T10:08:38.559Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5e/7cb7edeb2abfaa1f79b5d5eb89432356155c8426f75d3753cbcb9592c0fd/pyarrow-22.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:84378110dd9a6c06323b41b56e129c504d157d1a983ce8f5443761eb5256bafc", size = 48048139, upload-time = "2025-10-24T10:08:46.784Z" }, + { url = "https://files.pythonhosted.org/packages/88/c6/546baa7c48185f5e9d6e59277c4b19f30f48c94d9dd938c2a80d4d6b067c/pyarrow-22.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:854794239111d2b88b40b6ef92aa478024d1e5074f364033e73e21e3f76b25e0", size = 50314244, upload-time = "2025-10-24T10:08:55.771Z" }, + { url = "https://files.pythonhosted.org/packages/3c/79/755ff2d145aafec8d347bf18f95e4e81c00127f06d080135dfc86aea417c/pyarrow-22.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:b883fe6fd85adad7932b3271c38ac289c65b7337c2c132e9569f9d3940620730", size = 28757501, upload-time = "2025-10-24T10:09:59.891Z" }, + { url = "https://files.pythonhosted.org/packages/0e/d2/237d75ac28ced3147912954e3c1a174df43a95f4f88e467809118a8165e0/pyarrow-22.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7a820d8ae11facf32585507c11f04e3f38343c1e784c9b5a8b1da5c930547fe2", size = 34355506, upload-time = "2025-10-24T10:09:02.953Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/733dfffe6d3069740f98e57ff81007809067d68626c5faef293434d11bd6/pyarrow-22.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:c6ec3675d98915bf1ec8b3c7986422682f7232ea76cad276f4c8abd5b7319b70", size = 36047312, upload-time = "2025-10-24T10:09:10.334Z" }, + { url = "https://files.pythonhosted.org/packages/7c/2b/29d6e3782dc1f299727462c1543af357a0f2c1d3c160ce199950d9ca51eb/pyarrow-22.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:3e739edd001b04f654b166204fc7a9de896cf6007eaff33409ee9e50ceaff754", size = 45081609, upload-time = "2025-10-24T10:09:18.61Z" }, + { url = "https://files.pythonhosted.org/packages/8d/42/aa9355ecc05997915af1b7b947a7f66c02dcaa927f3203b87871c114ba10/pyarrow-22.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:7388ac685cab5b279a41dfe0a6ccd99e4dbf322edfb63e02fc0443bf24134e91", size = 47703663, upload-time = "2025-10-24T10:09:27.369Z" }, + { url = "https://files.pythonhosted.org/packages/ee/62/45abedde480168e83a1de005b7b7043fd553321c1e8c5a9a114425f64842/pyarrow-22.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f633074f36dbc33d5c05b5dc75371e5660f1dbf9c8b1d95669def05e5425989c", size = 48066543, upload-time = "2025-10-24T10:09:34.908Z" }, + { url = "https://files.pythonhosted.org/packages/84/e9/7878940a5b072e4f3bf998770acafeae13b267f9893af5f6d4ab3904b67e/pyarrow-22.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4c19236ae2402a8663a2c8f21f1870a03cc57f0bef7e4b6eb3238cc82944de80", size = 50288838, upload-time = "2025-10-24T10:09:44.394Z" }, + { url = "https://files.pythonhosted.org/packages/7b/03/f335d6c52b4a4761bcc83499789a1e2e16d9d201a58c327a9b5cc9a41bd9/pyarrow-22.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0c34fe18094686194f204a3b1787a27456897d8a2d62caf84b61e8dfbc0252ae", size = 29185594, upload-time = "2025-10-24T10:09:53.111Z" }, +] + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/90/32c9941e728d564b411d574d8ee0cf09b12ec978cb22b294995bae5549a5/pydantic_core-2.41.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146", size = 2107298, upload-time = "2025-11-04T13:39:04.116Z" }, + { url = "https://files.pythonhosted.org/packages/fb/a8/61c96a77fe28993d9a6fb0f4127e05430a267b235a124545d79fea46dd65/pydantic_core-2.41.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2", size = 1901475, upload-time = "2025-11-04T13:39:06.055Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b6/338abf60225acc18cdc08b4faef592d0310923d19a87fba1faf05af5346e/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97", size = 1918815, upload-time = "2025-11-04T13:39:10.41Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1c/2ed0433e682983d8e8cba9c8d8ef274d4791ec6a6f24c58935b90e780e0a/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9", size = 2065567, upload-time = "2025-11-04T13:39:12.244Z" }, + { url = "https://files.pythonhosted.org/packages/b3/24/cf84974ee7d6eae06b9e63289b7b8f6549d416b5c199ca2d7ce13bbcf619/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52", size = 2230442, upload-time = "2025-11-04T13:39:13.962Z" }, + { url = "https://files.pythonhosted.org/packages/fd/21/4e287865504b3edc0136c89c9c09431be326168b1eb7841911cbc877a995/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941", size = 2350956, upload-time = "2025-11-04T13:39:15.889Z" }, + { url = "https://files.pythonhosted.org/packages/a8/76/7727ef2ffa4b62fcab916686a68a0426b9b790139720e1934e8ba797e238/pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a", size = 2068253, upload-time = "2025-11-04T13:39:17.403Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8c/a4abfc79604bcb4c748e18975c44f94f756f08fb04218d5cb87eb0d3a63e/pydantic_core-2.41.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c", size = 2177050, upload-time = "2025-11-04T13:39:19.351Z" }, + { url = "https://files.pythonhosted.org/packages/67/b1/de2e9a9a79b480f9cb0b6e8b6ba4c50b18d4e89852426364c66aa82bb7b3/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2", size = 2147178, upload-time = "2025-11-04T13:39:21Z" }, + { url = "https://files.pythonhosted.org/packages/16/c1/dfb33f837a47b20417500efaa0378adc6635b3c79e8369ff7a03c494b4ac/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556", size = 2341833, upload-time = "2025-11-04T13:39:22.606Z" }, + { url = "https://files.pythonhosted.org/packages/47/36/00f398642a0f4b815a9a558c4f1dca1b4020a7d49562807d7bc9ff279a6c/pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49", size = 2321156, upload-time = "2025-11-04T13:39:25.843Z" }, + { url = "https://files.pythonhosted.org/packages/7e/70/cad3acd89fde2010807354d978725ae111ddf6d0ea46d1ea1775b5c1bd0c/pydantic_core-2.41.5-cp310-cp310-win32.whl", hash = "sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba", size = 1989378, upload-time = "2025-11-04T13:39:27.92Z" }, + { url = "https://files.pythonhosted.org/packages/76/92/d338652464c6c367e5608e4488201702cd1cbb0f33f7b6a85a60fe5f3720/pydantic_core-2.41.5-cp310-cp310-win_amd64.whl", hash = "sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9", size = 2013622, upload-time = "2025-11-04T13:39:29.848Z" }, + { url = "https://files.pythonhosted.org/packages/e8/72/74a989dd9f2084b3d9530b0915fdda64ac48831c30dbf7c72a41a5232db8/pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6", size = 2105873, upload-time = "2025-11-04T13:39:31.373Z" }, + { url = "https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b", size = 1899826, upload-time = "2025-11-04T13:39:32.897Z" }, + { url = "https://files.pythonhosted.org/packages/33/7f/1d5cab3ccf44c1935a359d51a8a2a9e1a654b744b5e7f80d41b88d501eec/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a", size = 1917869, upload-time = "2025-11-04T13:39:34.469Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6a/30d94a9674a7fe4f4744052ed6c5e083424510be1e93da5bc47569d11810/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8", size = 2063890, upload-time = "2025-11-04T13:39:36.053Z" }, + { url = "https://files.pythonhosted.org/packages/50/be/76e5d46203fcb2750e542f32e6c371ffa9b8ad17364cf94bb0818dbfb50c/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e", size = 2229740, upload-time = "2025-11-04T13:39:37.753Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ee/fed784df0144793489f87db310a6bbf8118d7b630ed07aa180d6067e653a/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1", size = 2350021, upload-time = "2025-11-04T13:39:40.94Z" }, + { url = "https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b", size = 2066378, upload-time = "2025-11-04T13:39:42.523Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3b/698cf8ae1d536a010e05121b4958b1257f0b5522085e335360e53a6b1c8b/pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b", size = 2175761, upload-time = "2025-11-04T13:39:44.553Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ba/15d537423939553116dea94ce02f9c31be0fa9d0b806d427e0308ec17145/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284", size = 2146303, upload-time = "2025-11-04T13:39:46.238Z" }, + { url = "https://files.pythonhosted.org/packages/58/7f/0de669bf37d206723795f9c90c82966726a2ab06c336deba4735b55af431/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594", size = 2340355, upload-time = "2025-11-04T13:39:48.002Z" }, + { url = "https://files.pythonhosted.org/packages/e5/de/e7482c435b83d7e3c3ee5ee4451f6e8973cff0eb6007d2872ce6383f6398/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e", size = 2319875, upload-time = "2025-11-04T13:39:49.705Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e6/8c9e81bb6dd7560e33b9053351c29f30c8194b72f2d6932888581f503482/pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b", size = 1987549, upload-time = "2025-11-04T13:39:51.842Z" }, + { url = "https://files.pythonhosted.org/packages/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe", size = 2011305, upload-time = "2025-11-04T13:39:53.485Z" }, + { url = "https://files.pythonhosted.org/packages/56/d8/0e271434e8efd03186c5386671328154ee349ff0354d83c74f5caaf096ed/pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f", size = 1972902, upload-time = "2025-11-04T13:39:56.488Z" }, + { url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" }, + { url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" }, + { url = "https://files.pythonhosted.org/packages/38/de/8c36b5198a29bdaade07b5985e80a233a5ac27137846f3bc2d3b40a47360/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75", size = 2052578, upload-time = "2025-11-04T13:40:04.401Z" }, + { url = "https://files.pythonhosted.org/packages/00/b5/0e8e4b5b081eac6cb3dbb7e60a65907549a1ce035a724368c330112adfdd/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05", size = 2208504, upload-time = "2025-11-04T13:40:06.072Z" }, + { url = "https://files.pythonhosted.org/packages/77/56/87a61aad59c7c5b9dc8caad5a41a5545cba3810c3e828708b3d7404f6cef/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc", size = 2335816, upload-time = "2025-11-04T13:40:07.835Z" }, + { url = "https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", size = 2075366, upload-time = "2025-11-04T13:40:09.804Z" }, + { url = "https://files.pythonhosted.org/packages/d3/43/ebef01f69baa07a482844faaa0a591bad1ef129253ffd0cdaa9d8a7f72d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5", size = 2171698, upload-time = "2025-11-04T13:40:12.004Z" }, + { url = "https://files.pythonhosted.org/packages/b1/87/41f3202e4193e3bacfc2c065fab7706ebe81af46a83d3e27605029c1f5a6/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", size = 2132603, upload-time = "2025-11-04T13:40:13.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/7d/4c00df99cb12070b6bccdef4a195255e6020a550d572768d92cc54dba91a/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294", size = 2329591, upload-time = "2025-11-04T13:40:15.672Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6a/ebf4b1d65d458f3cda6a7335d141305dfa19bdc61140a884d165a8a1bbc7/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", size = 2319068, upload-time = "2025-11-04T13:40:17.532Z" }, + { url = "https://files.pythonhosted.org/packages/49/3b/774f2b5cd4192d5ab75870ce4381fd89cf218af999515baf07e7206753f0/pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", size = 1985908, upload-time = "2025-11-04T13:40:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", size = 2020145, upload-time = "2025-11-04T13:40:21.548Z" }, + { url = "https://files.pythonhosted.org/packages/f9/22/91fbc821fa6d261b376a3f73809f907cec5ca6025642c463d3488aad22fb/pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", size = 1976179, upload-time = "2025-11-04T13:40:23.393Z" }, + { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, + { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, + { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, + { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, + { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, + { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, + { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, + { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, + { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, + { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, + { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, + { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, + { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, + { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, + { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, + { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, + { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, + { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, + { url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441, upload-time = "2025-11-04T13:42:39.557Z" }, + { url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291, upload-time = "2025-11-04T13:42:42.169Z" }, + { url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632, upload-time = "2025-11-04T13:42:44.564Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1b/687711069de7efa6af934e74f601e2a4307365e8fdc404703afc453eab26/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad", size = 2138905, upload-time = "2025-11-04T13:42:47.156Z" }, + { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, + { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, + { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b0/1a2aa41e3b5a4ba11420aba2d091b2d17959c8d1519ece3627c371951e73/pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8", size = 2103351, upload-time = "2025-11-04T13:43:02.058Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ee/31b1f0020baaf6d091c87900ae05c6aeae101fa4e188e1613c80e4f1ea31/pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a", size = 1925363, upload-time = "2025-11-04T13:43:05.159Z" }, + { url = "https://files.pythonhosted.org/packages/e1/89/ab8e86208467e467a80deaca4e434adac37b10a9d134cd2f99b28a01e483/pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b", size = 2135615, upload-time = "2025-11-04T13:43:08.116Z" }, + { url = "https://files.pythonhosted.org/packages/99/0a/99a53d06dd0348b2008f2f30884b34719c323f16c3be4e6cc1203b74a91d/pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2", size = 2175369, upload-time = "2025-11-04T13:43:12.49Z" }, + { url = "https://files.pythonhosted.org/packages/6d/94/30ca3b73c6d485b9bb0bc66e611cff4a7138ff9736b7e66bcf0852151636/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093", size = 2144218, upload-time = "2025-11-04T13:43:15.431Z" }, + { url = "https://files.pythonhosted.org/packages/87/57/31b4f8e12680b739a91f472b5671294236b82586889ef764b5fbc6669238/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a", size = 2329951, upload-time = "2025-11-04T13:43:18.062Z" }, + { url = "https://files.pythonhosted.org/packages/7d/73/3c2c8edef77b8f7310e6fb012dbc4b8551386ed575b9eb6fb2506e28a7eb/pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963", size = 2318428, upload-time = "2025-11-04T13:43:20.679Z" }, + { url = "https://files.pythonhosted.org/packages/2f/02/8559b1f26ee0d502c74f9cca5c0d2fd97e967e083e006bbbb4e97f3a043a/pydantic_core-2.41.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a", size = 2147009, upload-time = "2025-11-04T13:43:23.286Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9b/1b3f0e9f9305839d7e84912f9e8bfbd191ed1b1ef48083609f0dabde978c/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26", size = 2101980, upload-time = "2025-11-04T13:43:25.97Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ed/d71fefcb4263df0da6a85b5d8a7508360f2f2e9b3bf5814be9c8bccdccc1/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808", size = 1923865, upload-time = "2025-11-04T13:43:28.763Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3a/626b38db460d675f873e4444b4bb030453bbe7b4ba55df821d026a0493c4/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc", size = 2134256, upload-time = "2025-11-04T13:43:31.71Z" }, + { url = "https://files.pythonhosted.org/packages/83/d9/8412d7f06f616bbc053d30cb4e5f76786af3221462ad5eee1f202021eb4e/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1", size = 2174762, upload-time = "2025-11-04T13:43:34.744Z" }, + { url = "https://files.pythonhosted.org/packages/55/4c/162d906b8e3ba3a99354e20faa1b49a85206c47de97a639510a0e673f5da/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84", size = 2143141, upload-time = "2025-11-04T13:43:37.701Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f2/f11dd73284122713f5f89fc940f370d035fa8e1e078d446b3313955157fe/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770", size = 2330317, upload-time = "2025-11-04T13:43:40.406Z" }, + { url = "https://files.pythonhosted.org/packages/88/9d/b06ca6acfe4abb296110fb1273a4d848a0bfb2ff65f3ee92127b3244e16b/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f", size = 2316992, upload-time = "2025-11-04T13:43:43.602Z" }, + { url = "https://files.pythonhosted.org/packages/36/c7/cfc8e811f061c841d7990b0201912c3556bfeb99cdcb7ed24adc8d6f8704/pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51", size = 2145302, upload-time = "2025-11-04T13:43:46.64Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/ac7e0aae12027748076d72a8764ff1c9d82ca75a7a52622e67ed3f765c54/pydantic_settings-2.12.0.tar.gz", hash = "sha256:005538ef951e3c2a68e1c08b292b5f2e71490def8589d4221b95dab00dafcfd0", size = 194184, upload-time = "2025-11-10T14:25:47.013Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl", hash = "sha256:fddb9fd99a5b18da837b29710391e945b1e30c135477f484084ee513adb93809", size = 51880, upload-time = "2025-11-10T14:25:45.546Z" }, +] + +[[package]] +name = "pydra-config" +version = "0.0.17.post1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, + { name = "pydantic" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/33/f85fda915ce9b64d71c7369906006d4e1ce64589b427d92eaa8700ac5a99/pydra_config-0.0.17.post1.tar.gz", hash = "sha256:ebbf5ed51e17e69f791688e3f743b610ce949d8847678558c4dbb775c186efb0", size = 17502, upload-time = "2025-07-01T22:45:43.785Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/9a/8433a88a0a3a4cec9234d1aceebb1e929407c5337cfb30ebde971a8dfbd3/pydra_config-0.0.17.post1-py3-none-any.whl", hash = "sha256:08ddeffc98a127862ea1118a8d60a4811619f295430ffebc840d07362787db12", size = 11254, upload-time = "2025-07-01T22:45:42.692Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pynacl" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/46/aeca065d227e2265125aea590c9c47fbf5786128c9400ee0eb7c88931f06/pynacl-1.6.1.tar.gz", hash = "sha256:8d361dac0309f2b6ad33b349a56cd163c98430d409fa503b10b70b3ad66eaa1d", size = 3506616, upload-time = "2025-11-10T16:02:13.195Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/d6/4b2dca33ed512de8f54e5c6074aa06eaeb225bfbcd9b16f33a414389d6bd/pynacl-1.6.1-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:7d7c09749450c385301a3c20dca967a525152ae4608c0a096fe8464bfc3df93d", size = 389109, upload-time = "2025-11-10T16:01:28.79Z" }, + { url = "https://files.pythonhosted.org/packages/3c/30/e8dbb8ff4fa2559bbbb2187ba0d0d7faf728d17cb8396ecf4a898b22d3da/pynacl-1.6.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fc734c1696ffd49b40f7c1779c89ba908157c57345cf626be2e0719488a076d3", size = 808254, upload-time = "2025-11-10T16:01:37.839Z" }, + { url = "https://files.pythonhosted.org/packages/44/f9/f5449c652f31da00249638dbab065ad4969c635119094b79b17c3a4da2ab/pynacl-1.6.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3cd787ec1f5c155dc8ecf39b1333cfef41415dc96d392f1ce288b4fe970df489", size = 1407365, upload-time = "2025-11-10T16:01:40.454Z" }, + { url = "https://files.pythonhosted.org/packages/eb/2f/9aa5605f473b712065c0a193ebf4ad4725d7a245533f0cd7e5dcdbc78f35/pynacl-1.6.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b35d93ab2df03ecb3aa506be0d3c73609a51449ae0855c2e89c7ed44abde40b", size = 843842, upload-time = "2025-11-10T16:01:30.524Z" }, + { url = "https://files.pythonhosted.org/packages/32/8d/748f0f6956e207453da8f5f21a70885fbbb2e060d5c9d78e0a4a06781451/pynacl-1.6.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dece79aecbb8f4640a1adbb81e4aa3bfb0e98e99834884a80eb3f33c7c30e708", size = 1445559, upload-time = "2025-11-10T16:01:33.663Z" }, + { url = "https://files.pythonhosted.org/packages/78/d0/2387f0dcb0e9816f38373999e48db4728ed724d31accdd4e737473319d35/pynacl-1.6.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:c2228054f04bf32d558fb89bb99f163a8197d5a9bf4efa13069a7fa8d4b93fc3", size = 825791, upload-time = "2025-11-10T16:01:34.823Z" }, + { url = "https://files.pythonhosted.org/packages/18/3d/ef6fb7eb072aaf15f280bc66f26ab97e7fc9efa50fb1927683013ef47473/pynacl-1.6.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:2b12f1b97346f177affcdfdc78875ff42637cb40dcf79484a97dae3448083a78", size = 1410843, upload-time = "2025-11-10T16:01:36.401Z" }, + { url = "https://files.pythonhosted.org/packages/e3/fb/23824a017526850ee7d8a1cc4cd1e3e5082800522c10832edbbca8619537/pynacl-1.6.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e735c3a1bdfde3834503baf1a6d74d4a143920281cb724ba29fb84c9f49b9c48", size = 801140, upload-time = "2025-11-10T16:01:42.013Z" }, + { url = "https://files.pythonhosted.org/packages/5d/d1/ebc6b182cb98603a35635b727d62f094bc201bf610f97a3bb6357fe688d2/pynacl-1.6.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3384a454adf5d716a9fadcb5eb2e3e72cd49302d1374a60edc531c9957a9b014", size = 1371966, upload-time = "2025-11-10T16:01:43.297Z" }, + { url = "https://files.pythonhosted.org/packages/64/f4/c9d7b6f02924b1f31db546c7bd2a83a2421c6b4a8e6a2e53425c9f2802e0/pynacl-1.6.1-cp314-cp314t-win32.whl", hash = "sha256:d8615ee34d01c8e0ab3f302dcdd7b32e2bcf698ba5f4809e7cc407c8cdea7717", size = 230482, upload-time = "2025-11-10T16:01:47.688Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2c/942477957fba22da7bf99131850e5ebdff66623418ab48964e78a7a8293e/pynacl-1.6.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5f5b35c1a266f8a9ad22525049280a600b19edd1f785bccd01ae838437dcf935", size = 243232, upload-time = "2025-11-10T16:01:45.208Z" }, + { url = "https://files.pythonhosted.org/packages/7a/0c/bdbc0d04a53b96a765ab03aa2cf9a76ad8653d70bf1665459b9a0dedaa1c/pynacl-1.6.1-cp314-cp314t-win_arm64.whl", hash = "sha256:d984c91fe3494793b2a1fb1e91429539c6c28e9ec8209d26d25041ec599ccf63", size = 187907, upload-time = "2025-11-10T16:01:46.328Z" }, + { url = "https://files.pythonhosted.org/packages/49/41/3cfb3b4f3519f6ff62bf71bf1722547644bcfb1b05b8fdbdc300249ba113/pynacl-1.6.1-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:a6f9fd6d6639b1e81115c7f8ff16b8dedba1e8098d2756275d63d208b0e32021", size = 387591, upload-time = "2025-11-10T16:01:49.1Z" }, + { url = "https://files.pythonhosted.org/packages/18/21/b8a6563637799f617a3960f659513eccb3fcc655d5fc2be6e9dc6416826f/pynacl-1.6.1-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e49a3f3d0da9f79c1bec2aa013261ab9fa651c7da045d376bd306cf7c1792993", size = 798866, upload-time = "2025-11-10T16:01:55.688Z" }, + { url = "https://files.pythonhosted.org/packages/e8/6c/dc38033bc3ea461e05ae8f15a81e0e67ab9a01861d352ae971c99de23e7c/pynacl-1.6.1-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7713f8977b5d25f54a811ec9efa2738ac592e846dd6e8a4d3f7578346a841078", size = 1398001, upload-time = "2025-11-10T16:01:57.101Z" }, + { url = "https://files.pythonhosted.org/packages/9f/05/3ec0796a9917100a62c5073b20c4bce7bf0fea49e99b7906d1699cc7b61b/pynacl-1.6.1-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a3becafc1ee2e5ea7f9abc642f56b82dcf5be69b961e782a96ea52b55d8a9fc", size = 834024, upload-time = "2025-11-10T16:01:50.228Z" }, + { url = "https://files.pythonhosted.org/packages/f0/b7/ae9982be0f344f58d9c64a1c25d1f0125c79201634efe3c87305ac7cb3e3/pynacl-1.6.1-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ce50d19f1566c391fedc8dc2f2f5be265ae214112ebe55315e41d1f36a7f0a9", size = 1436766, upload-time = "2025-11-10T16:01:51.886Z" }, + { url = "https://files.pythonhosted.org/packages/b4/51/b2ccbf89cf3025a02e044dd68a365cad593ebf70f532299f2c047d2b7714/pynacl-1.6.1-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:543f869140f67d42b9b8d47f922552d7a967e6c116aad028c9bfc5f3f3b3a7b7", size = 817275, upload-time = "2025-11-10T16:01:53.351Z" }, + { url = "https://files.pythonhosted.org/packages/a8/6c/dd9ee8214edf63ac563b08a9b30f98d116942b621d39a751ac3256694536/pynacl-1.6.1-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a2bb472458c7ca959aeeff8401b8efef329b0fc44a89d3775cffe8fad3398ad8", size = 1401891, upload-time = "2025-11-10T16:01:54.587Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c1/97d3e1c83772d78ee1db3053fd674bc6c524afbace2bfe8d419fd55d7ed1/pynacl-1.6.1-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3206fa98737fdc66d59b8782cecc3d37d30aeec4593d1c8c145825a345bba0f0", size = 772291, upload-time = "2025-11-10T16:01:58.111Z" }, + { url = "https://files.pythonhosted.org/packages/4d/ca/691ff2fe12f3bb3e43e8e8df4b806f6384593d427f635104d337b8e00291/pynacl-1.6.1-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:53543b4f3d8acb344f75fd4d49f75e6572fce139f4bfb4815a9282296ff9f4c0", size = 1370839, upload-time = "2025-11-10T16:01:59.252Z" }, + { url = "https://files.pythonhosted.org/packages/30/27/06fe5389d30391fce006442246062cc35773c84fbcad0209fbbf5e173734/pynacl-1.6.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:319de653ef84c4f04e045eb250e6101d23132372b0a61a7acf91bac0fda8e58c", size = 791371, upload-time = "2025-11-10T16:02:01.075Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7a/e2bde8c9d39074a5aa046c7d7953401608d1f16f71e237f4bef3fb9d7e49/pynacl-1.6.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:262a8de6bba4aee8a66f5edf62c214b06647461c9b6b641f8cd0cb1e3b3196fe", size = 1363031, upload-time = "2025-11-10T16:02:02.656Z" }, + { url = "https://files.pythonhosted.org/packages/dd/b6/63fd77264dae1087770a1bb414bc604470f58fbc21d83822fc9c76248076/pynacl-1.6.1-cp38-abi3-win32.whl", hash = "sha256:9fd1a4eb03caf8a2fe27b515a998d26923adb9ddb68db78e35ca2875a3830dde", size = 226585, upload-time = "2025-11-10T16:02:07.116Z" }, + { url = "https://files.pythonhosted.org/packages/12/c8/b419180f3fdb72ab4d45e1d88580761c267c7ca6eda9a20dcbcba254efe6/pynacl-1.6.1-cp38-abi3-win_amd64.whl", hash = "sha256:a569a4069a7855f963940040f35e87d8bc084cb2d6347428d5ad20550a0a1a21", size = 238923, upload-time = "2025-11-10T16:02:04.401Z" }, + { url = "https://files.pythonhosted.org/packages/35/76/c34426d532e4dce7ff36e4d92cb20f4cbbd94b619964b93d24e8f5b5510f/pynacl-1.6.1-cp38-abi3-win_arm64.whl", hash = "sha256:5953e8b8cfadb10889a6e7bd0f53041a745d1b3d30111386a1bb37af171e6daf", size = 183970, upload-time = "2025-11-10T16:02:05.786Z" }, +] + +[[package]] +name = "pytest" +version = "9.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221, upload-time = "2025-10-26T15:12:10.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload-time = "2025-10-26T15:12:09.109Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/86/b6b38677dec2e2e7898fc5b6f7e42c2d011919a92d25339451892f27b89c/python_multipart-0.0.18.tar.gz", hash = "sha256:7a68db60c8bfb82e460637fa4750727b45af1d5e2ed215593f917f64694d34fe", size = 36622, upload-time = "2024-11-28T19:16:02.383Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/6b/b60f47101ba2cac66b4a83246630e68ae9bbe2e614cbae5f4465f46dee13/python_multipart-0.0.18-py3-none-any.whl", hash = "sha256:efe91480f485f6a361427a541db4796f9e1591afc0fb8e7a4ba06bfbc6708996", size = 24389, upload-time = "2024-11-28T19:16:00.947Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432, upload-time = "2025-07-14T20:13:05.9Z" }, + { url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103, upload-time = "2025-07-14T20:13:07.698Z" }, + { url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557, upload-time = "2025-07-14T20:13:11.11Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, + { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, + { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "redis" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-timeout", marker = "python_full_version < '3.11.3'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/c8/983d5c6579a411d8a99bc5823cc5712768859b5ce2c8afe1a65b37832c81/redis-7.1.0.tar.gz", hash = "sha256:b1cc3cfa5a2cb9c2ab3ba700864fb0ad75617b41f01352ce5779dabf6d5f9c3c", size = 4796669, upload-time = "2025-11-19T15:54:39.961Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl", hash = "sha256:23c52b208f92b56103e17c5d06bdc1a6c2c0b3106583985a76a18f83b265de2b", size = 354159, upload-time = "2025-11-19T15:54:38.064Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "regex" +version = "2025.11.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/a9/546676f25e573a4cf00fe8e119b78a37b6a8fe2dc95cda877b30889c9c45/regex-2025.11.3.tar.gz", hash = "sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01", size = 414669, upload-time = "2025-11-03T21:34:22.089Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/d6/d788d52da01280a30a3f6268aef2aa71043bff359c618fea4c5b536654d5/regex-2025.11.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2b441a4ae2c8049106e8b39973bfbddfb25a179dda2bdb99b0eeb60c40a6a3af", size = 488087, upload-time = "2025-11-03T21:30:47.317Z" }, + { url = "https://files.pythonhosted.org/packages/69/39/abec3bd688ec9bbea3562de0fd764ff802976185f5ff22807bf0a2697992/regex-2025.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2fa2eed3f76677777345d2f81ee89f5de2f5745910e805f7af7386a920fa7313", size = 290544, upload-time = "2025-11-03T21:30:49.912Z" }, + { url = "https://files.pythonhosted.org/packages/39/b3/9a231475d5653e60002508f41205c61684bb2ffbf2401351ae2186897fc4/regex-2025.11.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8b4a27eebd684319bdf473d39f1d79eed36bf2cd34bd4465cdb4618d82b3d56", size = 288408, upload-time = "2025-11-03T21:30:51.344Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c5/1929a0491bd5ac2d1539a866768b88965fa8c405f3e16a8cef84313098d6/regex-2025.11.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cf77eac15bd264986c4a2c63353212c095b40f3affb2bc6b4ef80c4776c1a28", size = 781584, upload-time = "2025-11-03T21:30:52.596Z" }, + { url = "https://files.pythonhosted.org/packages/ce/fd/16aa16cf5d497ef727ec966f74164fbe75d6516d3d58ac9aa989bc9cdaad/regex-2025.11.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b7f9ee819f94c6abfa56ec7b1dbab586f41ebbdc0a57e6524bd5e7f487a878c7", size = 850733, upload-time = "2025-11-03T21:30:53.825Z" }, + { url = "https://files.pythonhosted.org/packages/e6/49/3294b988855a221cb6565189edf5dc43239957427df2d81d4a6b15244f64/regex-2025.11.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:838441333bc90b829406d4a03cb4b8bf7656231b84358628b0406d803931ef32", size = 898691, upload-time = "2025-11-03T21:30:55.575Z" }, + { url = "https://files.pythonhosted.org/packages/14/62/b56d29e70b03666193369bdbdedfdc23946dbe9f81dd78ce262c74d988ab/regex-2025.11.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cfe6d3f0c9e3b7e8c0c694b24d25e677776f5ca26dce46fd6b0489f9c8339391", size = 791662, upload-time = "2025-11-03T21:30:57.262Z" }, + { url = "https://files.pythonhosted.org/packages/15/fc/e4c31d061eced63fbf1ce9d853975f912c61a7d406ea14eda2dd355f48e7/regex-2025.11.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2ab815eb8a96379a27c3b6157fcb127c8f59c36f043c1678110cea492868f1d5", size = 782587, upload-time = "2025-11-03T21:30:58.788Z" }, + { url = "https://files.pythonhosted.org/packages/b2/bb/5e30c7394bcf63f0537121c23e796be67b55a8847c3956ae6068f4c70702/regex-2025.11.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:728a9d2d173a65b62bdc380b7932dd8e74ed4295279a8fe1021204ce210803e7", size = 774709, upload-time = "2025-11-03T21:31:00.081Z" }, + { url = "https://files.pythonhosted.org/packages/c5/c4/fce773710af81b0cb37cb4ff0947e75d5d17dee304b93d940b87a67fc2f4/regex-2025.11.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:509dc827f89c15c66a0c216331260d777dd6c81e9a4e4f830e662b0bb296c313", size = 845773, upload-time = "2025-11-03T21:31:01.583Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5e/9466a7ec4b8ec282077095c6eb50a12a389d2e036581134d4919e8ca518c/regex-2025.11.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:849202cd789e5f3cf5dcc7822c34b502181b4824a65ff20ce82da5524e45e8e9", size = 836164, upload-time = "2025-11-03T21:31:03.244Z" }, + { url = "https://files.pythonhosted.org/packages/95/18/82980a60e8ed1594eb3c89eb814fb276ef51b9af7caeab1340bfd8564af6/regex-2025.11.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b6f78f98741dcc89607c16b1e9426ee46ce4bf31ac5e6b0d40e81c89f3481ea5", size = 779832, upload-time = "2025-11-03T21:31:04.876Z" }, + { url = "https://files.pythonhosted.org/packages/03/cc/90ab0fdbe6dce064a42015433f9152710139fb04a8b81b4fb57a1cb63ffa/regex-2025.11.3-cp310-cp310-win32.whl", hash = "sha256:149eb0bba95231fb4f6d37c8f760ec9fa6fabf65bab555e128dde5f2475193ec", size = 265802, upload-time = "2025-11-03T21:31:06.581Z" }, + { url = "https://files.pythonhosted.org/packages/34/9d/e9e8493a85f3b1ddc4a5014465f5c2b78c3ea1cbf238dcfde78956378041/regex-2025.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:ee3a83ce492074c35a74cc76cf8235d49e77b757193a5365ff86e3f2f93db9fd", size = 277722, upload-time = "2025-11-03T21:31:08.144Z" }, + { url = "https://files.pythonhosted.org/packages/15/c4/b54b24f553966564506dbf873a3e080aef47b356a3b39b5d5aba992b50db/regex-2025.11.3-cp310-cp310-win_arm64.whl", hash = "sha256:38af559ad934a7b35147716655d4a2f79fcef2d695ddfe06a06ba40ae631fa7e", size = 270289, upload-time = "2025-11-03T21:31:10.267Z" }, + { url = "https://files.pythonhosted.org/packages/f7/90/4fb5056e5f03a7048abd2b11f598d464f0c167de4f2a51aa868c376b8c70/regex-2025.11.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eadade04221641516fa25139273505a1c19f9bf97589a05bc4cfcd8b4a618031", size = 488081, upload-time = "2025-11-03T21:31:11.946Z" }, + { url = "https://files.pythonhosted.org/packages/85/23/63e481293fac8b069d84fba0299b6666df720d875110efd0338406b5d360/regex-2025.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:feff9e54ec0dd3833d659257f5c3f5322a12eee58ffa360984b716f8b92983f4", size = 290554, upload-time = "2025-11-03T21:31:13.387Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9d/b101d0262ea293a0066b4522dfb722eb6a8785a8c3e084396a5f2c431a46/regex-2025.11.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3b30bc921d50365775c09a7ed446359e5c0179e9e2512beec4a60cbcef6ddd50", size = 288407, upload-time = "2025-11-03T21:31:14.809Z" }, + { url = "https://files.pythonhosted.org/packages/0c/64/79241c8209d5b7e00577ec9dca35cd493cc6be35b7d147eda367d6179f6d/regex-2025.11.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f99be08cfead2020c7ca6e396c13543baea32343b7a9a5780c462e323bd8872f", size = 793418, upload-time = "2025-11-03T21:31:16.556Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e2/23cd5d3573901ce8f9757c92ca4db4d09600b865919b6d3e7f69f03b1afd/regex-2025.11.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6dd329a1b61c0ee95ba95385fb0c07ea0d3fe1a21e1349fa2bec272636217118", size = 860448, upload-time = "2025-11-03T21:31:18.12Z" }, + { url = "https://files.pythonhosted.org/packages/2a/4c/aecf31beeaa416d0ae4ecb852148d38db35391aac19c687b5d56aedf3a8b/regex-2025.11.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c5238d32f3c5269d9e87be0cf096437b7622b6920f5eac4fd202468aaeb34d2", size = 907139, upload-time = "2025-11-03T21:31:20.753Z" }, + { url = "https://files.pythonhosted.org/packages/61/22/b8cb00df7d2b5e0875f60628594d44dba283e951b1ae17c12f99e332cc0a/regex-2025.11.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10483eefbfb0adb18ee9474498c9a32fcf4e594fbca0543bb94c48bac6183e2e", size = 800439, upload-time = "2025-11-03T21:31:22.069Z" }, + { url = "https://files.pythonhosted.org/packages/02/a8/c4b20330a5cdc7a8eb265f9ce593f389a6a88a0c5f280cf4d978f33966bc/regex-2025.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:78c2d02bb6e1da0720eedc0bad578049cad3f71050ef8cd065ecc87691bed2b0", size = 782965, upload-time = "2025-11-03T21:31:23.598Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4c/ae3e52988ae74af4b04d2af32fee4e8077f26e51b62ec2d12d246876bea2/regex-2025.11.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e6b49cd2aad93a1790ce9cffb18964f6d3a4b0b3dbdbd5de094b65296fce6e58", size = 854398, upload-time = "2025-11-03T21:31:25.008Z" }, + { url = "https://files.pythonhosted.org/packages/06/d1/a8b9cf45874eda14b2e275157ce3b304c87e10fb38d9fc26a6e14eb18227/regex-2025.11.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:885b26aa3ee56433b630502dc3d36ba78d186a00cc535d3806e6bfd9ed3c70ab", size = 845897, upload-time = "2025-11-03T21:31:26.427Z" }, + { url = "https://files.pythonhosted.org/packages/ea/fe/1830eb0236be93d9b145e0bd8ab499f31602fe0999b1f19e99955aa8fe20/regex-2025.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd76a9f58e6a00f8772e72cff8ebcff78e022be95edf018766707c730593e1e", size = 788906, upload-time = "2025-11-03T21:31:28.078Z" }, + { url = "https://files.pythonhosted.org/packages/66/47/dc2577c1f95f188c1e13e2e69d8825a5ac582ac709942f8a03af42ed6e93/regex-2025.11.3-cp311-cp311-win32.whl", hash = "sha256:3e816cc9aac1cd3cc9a4ec4d860f06d40f994b5c7b4d03b93345f44e08cc68bf", size = 265812, upload-time = "2025-11-03T21:31:29.72Z" }, + { url = "https://files.pythonhosted.org/packages/50/1e/15f08b2f82a9bbb510621ec9042547b54d11e83cb620643ebb54e4eb7d71/regex-2025.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:087511f5c8b7dfbe3a03f5d5ad0c2a33861b1fc387f21f6f60825a44865a385a", size = 277737, upload-time = "2025-11-03T21:31:31.422Z" }, + { url = "https://files.pythonhosted.org/packages/f4/fc/6500eb39f5f76c5e47a398df82e6b535a5e345f839581012a418b16f9cc3/regex-2025.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:1ff0d190c7f68ae7769cd0313fe45820ba07ffebfddfaa89cc1eb70827ba0ddc", size = 270290, upload-time = "2025-11-03T21:31:33.041Z" }, + { url = "https://files.pythonhosted.org/packages/e8/74/18f04cb53e58e3fb107439699bd8375cf5a835eec81084e0bddbd122e4c2/regex-2025.11.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41", size = 489312, upload-time = "2025-11-03T21:31:34.343Z" }, + { url = "https://files.pythonhosted.org/packages/78/3f/37fcdd0d2b1e78909108a876580485ea37c91e1acf66d3bb8e736348f441/regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:22b29dda7e1f7062a52359fca6e58e548e28c6686f205e780b02ad8ef710de36", size = 291256, upload-time = "2025-11-03T21:31:35.675Z" }, + { url = "https://files.pythonhosted.org/packages/bf/26/0a575f58eb23b7ebd67a45fccbc02ac030b737b896b7e7a909ffe43ffd6a/regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a91e4a29938bc1a082cc28fdea44be420bf2bebe2665343029723892eb073e1", size = 288921, upload-time = "2025-11-03T21:31:37.07Z" }, + { url = "https://files.pythonhosted.org/packages/ea/98/6a8dff667d1af907150432cf5abc05a17ccd32c72a3615410d5365ac167a/regex-2025.11.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08b884f4226602ad40c5d55f52bf91a9df30f513864e0054bad40c0e9cf1afb7", size = 798568, upload-time = "2025-11-03T21:31:38.784Z" }, + { url = "https://files.pythonhosted.org/packages/64/15/92c1db4fa4e12733dd5a526c2dd2b6edcbfe13257e135fc0f6c57f34c173/regex-2025.11.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e0b11b2b2433d1c39c7c7a30e3f3d0aeeea44c2a8d0bae28f6b95f639927a69", size = 864165, upload-time = "2025-11-03T21:31:40.559Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e7/3ad7da8cdee1ce66c7cd37ab5ab05c463a86ffeb52b1a25fe7bd9293b36c/regex-2025.11.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87eb52a81ef58c7ba4d45c3ca74e12aa4b4e77816f72ca25258a85b3ea96cb48", size = 912182, upload-time = "2025-11-03T21:31:42.002Z" }, + { url = "https://files.pythonhosted.org/packages/84/bd/9ce9f629fcb714ffc2c3faf62b6766ecb7a585e1e885eb699bcf130a5209/regex-2025.11.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a12ab1f5c29b4e93db518f5e3872116b7e9b1646c9f9f426f777b50d44a09e8c", size = 803501, upload-time = "2025-11-03T21:31:43.815Z" }, + { url = "https://files.pythonhosted.org/packages/7c/0f/8dc2e4349d8e877283e6edd6c12bdcebc20f03744e86f197ab6e4492bf08/regex-2025.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7521684c8c7c4f6e88e35ec89680ee1aa8358d3f09d27dfbdf62c446f5d4c695", size = 787842, upload-time = "2025-11-03T21:31:45.353Z" }, + { url = "https://files.pythonhosted.org/packages/f9/73/cff02702960bc185164d5619c0c62a2f598a6abff6695d391b096237d4ab/regex-2025.11.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7fe6e5440584e94cc4b3f5f4d98a25e29ca12dccf8873679a635638349831b98", size = 858519, upload-time = "2025-11-03T21:31:46.814Z" }, + { url = "https://files.pythonhosted.org/packages/61/83/0e8d1ae71e15bc1dc36231c90b46ee35f9d52fab2e226b0e039e7ea9c10a/regex-2025.11.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8e026094aa12b43f4fd74576714e987803a315c76edb6b098b9809db5de58f74", size = 850611, upload-time = "2025-11-03T21:31:48.289Z" }, + { url = "https://files.pythonhosted.org/packages/c8/f5/70a5cdd781dcfaa12556f2955bf170cd603cb1c96a1827479f8faea2df97/regex-2025.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:435bbad13e57eb5606a68443af62bed3556de2f46deb9f7d4237bc2f1c9fb3a0", size = 789759, upload-time = "2025-11-03T21:31:49.759Z" }, + { url = "https://files.pythonhosted.org/packages/59/9b/7c29be7903c318488983e7d97abcf8ebd3830e4c956c4c540005fcfb0462/regex-2025.11.3-cp312-cp312-win32.whl", hash = "sha256:3839967cf4dc4b985e1570fd8d91078f0c519f30491c60f9ac42a8db039be204", size = 266194, upload-time = "2025-11-03T21:31:51.53Z" }, + { url = "https://files.pythonhosted.org/packages/1a/67/3b92df89f179d7c367be654ab5626ae311cb28f7d5c237b6bb976cd5fbbb/regex-2025.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:e721d1b46e25c481dc5ded6f4b3f66c897c58d2e8cfdf77bbced84339108b0b9", size = 277069, upload-time = "2025-11-03T21:31:53.151Z" }, + { url = "https://files.pythonhosted.org/packages/d7/55/85ba4c066fe5094d35b249c3ce8df0ba623cfd35afb22d6764f23a52a1c5/regex-2025.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:64350685ff08b1d3a6fff33f45a9ca183dc1d58bbfe4981604e70ec9801bbc26", size = 270330, upload-time = "2025-11-03T21:31:54.514Z" }, + { url = "https://files.pythonhosted.org/packages/e1/a7/dda24ebd49da46a197436ad96378f17df30ceb40e52e859fc42cac45b850/regex-2025.11.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c1e448051717a334891f2b9a620fe36776ebf3dd8ec46a0b877c8ae69575feb4", size = 489081, upload-time = "2025-11-03T21:31:55.9Z" }, + { url = "https://files.pythonhosted.org/packages/19/22/af2dc751aacf88089836aa088a1a11c4f21a04707eb1b0478e8e8fb32847/regex-2025.11.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9b5aca4d5dfd7fbfbfbdaf44850fcc7709a01146a797536a8f84952e940cca76", size = 291123, upload-time = "2025-11-03T21:31:57.758Z" }, + { url = "https://files.pythonhosted.org/packages/a3/88/1a3ea5672f4b0a84802ee9891b86743438e7c04eb0b8f8c4e16a42375327/regex-2025.11.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:04d2765516395cf7dda331a244a3282c0f5ae96075f728629287dfa6f76ba70a", size = 288814, upload-time = "2025-11-03T21:32:01.12Z" }, + { url = "https://files.pythonhosted.org/packages/fb/8c/f5987895bf42b8ddeea1b315c9fedcfe07cadee28b9c98cf50d00adcb14d/regex-2025.11.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d9903ca42bfeec4cebedba8022a7c97ad2aab22e09573ce9976ba01b65e4361", size = 798592, upload-time = "2025-11-03T21:32:03.006Z" }, + { url = "https://files.pythonhosted.org/packages/99/2a/6591ebeede78203fa77ee46a1c36649e02df9eaa77a033d1ccdf2fcd5d4e/regex-2025.11.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:639431bdc89d6429f6721625e8129413980ccd62e9d3f496be618a41d205f160", size = 864122, upload-time = "2025-11-03T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/94/d6/be32a87cf28cf8ed064ff281cfbd49aefd90242a83e4b08b5a86b38e8eb4/regex-2025.11.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f117efad42068f9715677c8523ed2be1518116d1c49b1dd17987716695181efe", size = 912272, upload-time = "2025-11-03T21:32:06.148Z" }, + { url = "https://files.pythonhosted.org/packages/62/11/9bcef2d1445665b180ac7f230406ad80671f0fc2a6ffb93493b5dd8cd64c/regex-2025.11.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4aecb6f461316adf9f1f0f6a4a1a3d79e045f9b71ec76055a791affa3b285850", size = 803497, upload-time = "2025-11-03T21:32:08.162Z" }, + { url = "https://files.pythonhosted.org/packages/e5/a7/da0dc273d57f560399aa16d8a68ae7f9b57679476fc7ace46501d455fe84/regex-2025.11.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3b3a5f320136873cc5561098dfab677eea139521cb9a9e8db98b7e64aef44cbc", size = 787892, upload-time = "2025-11-03T21:32:09.769Z" }, + { url = "https://files.pythonhosted.org/packages/da/4b/732a0c5a9736a0b8d6d720d4945a2f1e6f38f87f48f3173559f53e8d5d82/regex-2025.11.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:75fa6f0056e7efb1f42a1c34e58be24072cb9e61a601340cc1196ae92326a4f9", size = 858462, upload-time = "2025-11-03T21:32:11.769Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f5/a2a03df27dc4c2d0c769220f5110ba8c4084b0bfa9ab0f9b4fcfa3d2b0fc/regex-2025.11.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:dbe6095001465294f13f1adcd3311e50dd84e5a71525f20a10bd16689c61ce0b", size = 850528, upload-time = "2025-11-03T21:32:13.906Z" }, + { url = "https://files.pythonhosted.org/packages/d6/09/e1cd5bee3841c7f6eb37d95ca91cdee7100b8f88b81e41c2ef426910891a/regex-2025.11.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:454d9b4ae7881afbc25015b8627c16d88a597479b9dea82b8c6e7e2e07240dc7", size = 789866, upload-time = "2025-11-03T21:32:15.748Z" }, + { url = "https://files.pythonhosted.org/packages/eb/51/702f5ea74e2a9c13d855a6a85b7f80c30f9e72a95493260193c07f3f8d74/regex-2025.11.3-cp313-cp313-win32.whl", hash = "sha256:28ba4d69171fc6e9896337d4fc63a43660002b7da53fc15ac992abcf3410917c", size = 266189, upload-time = "2025-11-03T21:32:17.493Z" }, + { url = "https://files.pythonhosted.org/packages/8b/00/6e29bb314e271a743170e53649db0fdb8e8ff0b64b4f425f5602f4eb9014/regex-2025.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:bac4200befe50c670c405dc33af26dad5a3b6b255dd6c000d92fe4629f9ed6a5", size = 277054, upload-time = "2025-11-03T21:32:19.042Z" }, + { url = "https://files.pythonhosted.org/packages/25/f1/b156ff9f2ec9ac441710764dda95e4edaf5f36aca48246d1eea3f1fd96ec/regex-2025.11.3-cp313-cp313-win_arm64.whl", hash = "sha256:2292cd5a90dab247f9abe892ac584cb24f0f54680c73fcb4a7493c66c2bf2467", size = 270325, upload-time = "2025-11-03T21:32:21.338Z" }, + { url = "https://files.pythonhosted.org/packages/20/28/fd0c63357caefe5680b8ea052131acbd7f456893b69cc2a90cc3e0dc90d4/regex-2025.11.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:1eb1ebf6822b756c723e09f5186473d93236c06c579d2cc0671a722d2ab14281", size = 491984, upload-time = "2025-11-03T21:32:23.466Z" }, + { url = "https://files.pythonhosted.org/packages/df/ec/7014c15626ab46b902b3bcc4b28a7bae46d8f281fc7ea9c95e22fcaaa917/regex-2025.11.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1e00ec2970aab10dc5db34af535f21fcf32b4a31d99e34963419636e2f85ae39", size = 292673, upload-time = "2025-11-03T21:32:25.034Z" }, + { url = "https://files.pythonhosted.org/packages/23/ab/3b952ff7239f20d05f1f99e9e20188513905f218c81d52fb5e78d2bf7634/regex-2025.11.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a4cb042b615245d5ff9b3794f56be4138b5adc35a4166014d31d1814744148c7", size = 291029, upload-time = "2025-11-03T21:32:26.528Z" }, + { url = "https://files.pythonhosted.org/packages/21/7e/3dc2749fc684f455f162dcafb8a187b559e2614f3826877d3844a131f37b/regex-2025.11.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44f264d4bf02f3176467d90b294d59bf1db9fe53c141ff772f27a8b456b2a9ed", size = 807437, upload-time = "2025-11-03T21:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/1b/0b/d529a85ab349c6a25d1ca783235b6e3eedf187247eab536797021f7126c6/regex-2025.11.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7be0277469bf3bd7a34a9c57c1b6a724532a0d235cd0dc4e7f4316f982c28b19", size = 873368, upload-time = "2025-11-03T21:32:30.4Z" }, + { url = "https://files.pythonhosted.org/packages/7d/18/2d868155f8c9e3e9d8f9e10c64e9a9f496bb8f7e037a88a8bed26b435af6/regex-2025.11.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0d31e08426ff4b5b650f68839f5af51a92a5b51abd8554a60c2fbc7c71f25d0b", size = 914921, upload-time = "2025-11-03T21:32:32.123Z" }, + { url = "https://files.pythonhosted.org/packages/2d/71/9d72ff0f354fa783fe2ba913c8734c3b433b86406117a8db4ea2bf1c7a2f/regex-2025.11.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e43586ce5bd28f9f285a6e729466841368c4a0353f6fd08d4ce4630843d3648a", size = 812708, upload-time = "2025-11-03T21:32:34.305Z" }, + { url = "https://files.pythonhosted.org/packages/e7/19/ce4bf7f5575c97f82b6e804ffb5c4e940c62609ab2a0d9538d47a7fdf7d4/regex-2025.11.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0f9397d561a4c16829d4e6ff75202c1c08b68a3bdbfe29dbfcdb31c9830907c6", size = 795472, upload-time = "2025-11-03T21:32:36.364Z" }, + { url = "https://files.pythonhosted.org/packages/03/86/fd1063a176ffb7b2315f9a1b08d17b18118b28d9df163132615b835a26ee/regex-2025.11.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:dd16e78eb18ffdb25ee33a0682d17912e8cc8a770e885aeee95020046128f1ce", size = 868341, upload-time = "2025-11-03T21:32:38.042Z" }, + { url = "https://files.pythonhosted.org/packages/12/43/103fb2e9811205e7386366501bc866a164a0430c79dd59eac886a2822950/regex-2025.11.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:ffcca5b9efe948ba0661e9df0fa50d2bc4b097c70b9810212d6b62f05d83b2dd", size = 854666, upload-time = "2025-11-03T21:32:40.079Z" }, + { url = "https://files.pythonhosted.org/packages/7d/22/e392e53f3869b75804762c7c848bd2dd2abf2b70fb0e526f58724638bd35/regex-2025.11.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c56b4d162ca2b43318ac671c65bd4d563e841a694ac70e1a976ac38fcf4ca1d2", size = 799473, upload-time = "2025-11-03T21:32:42.148Z" }, + { url = "https://files.pythonhosted.org/packages/4f/f9/8bd6b656592f925b6845fcbb4d57603a3ac2fb2373344ffa1ed70aa6820a/regex-2025.11.3-cp313-cp313t-win32.whl", hash = "sha256:9ddc42e68114e161e51e272f667d640f97e84a2b9ef14b7477c53aac20c2d59a", size = 268792, upload-time = "2025-11-03T21:32:44.13Z" }, + { url = "https://files.pythonhosted.org/packages/e5/87/0e7d603467775ff65cd2aeabf1b5b50cc1c3708556a8b849a2fa4dd1542b/regex-2025.11.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7a7c7fdf755032ffdd72c77e3d8096bdcb0eb92e89e17571a196f03d88b11b3c", size = 280214, upload-time = "2025-11-03T21:32:45.853Z" }, + { url = "https://files.pythonhosted.org/packages/8d/d0/2afc6f8e94e2b64bfb738a7c2b6387ac1699f09f032d363ed9447fd2bb57/regex-2025.11.3-cp313-cp313t-win_arm64.whl", hash = "sha256:df9eb838c44f570283712e7cff14c16329a9f0fb19ca492d21d4b7528ee6821e", size = 271469, upload-time = "2025-11-03T21:32:48.026Z" }, + { url = "https://files.pythonhosted.org/packages/31/e9/f6e13de7e0983837f7b6d238ad9458800a874bf37c264f7923e63409944c/regex-2025.11.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9697a52e57576c83139d7c6f213d64485d3df5bf84807c35fa409e6c970801c6", size = 489089, upload-time = "2025-11-03T21:32:50.027Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5c/261f4a262f1fa65141c1b74b255988bd2fa020cc599e53b080667d591cfc/regex-2025.11.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e18bc3f73bd41243c9b38a6d9f2366cd0e0137a9aebe2d8ff76c5b67d4c0a3f4", size = 291059, upload-time = "2025-11-03T21:32:51.682Z" }, + { url = "https://files.pythonhosted.org/packages/8e/57/f14eeb7f072b0e9a5a090d1712741fd8f214ec193dba773cf5410108bb7d/regex-2025.11.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:61a08bcb0ec14ff4e0ed2044aad948d0659604f824cbd50b55e30b0ec6f09c73", size = 288900, upload-time = "2025-11-03T21:32:53.569Z" }, + { url = "https://files.pythonhosted.org/packages/3c/6b/1d650c45e99a9b327586739d926a1cd4e94666b1bd4af90428b36af66dc7/regex-2025.11.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9c30003b9347c24bcc210958c5d167b9e4f9be786cb380a7d32f14f9b84674f", size = 799010, upload-time = "2025-11-03T21:32:55.222Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/d66dcbc6b628ce4e3f7f0cbbb84603aa2fc0ffc878babc857726b8aab2e9/regex-2025.11.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4e1e592789704459900728d88d41a46fe3969b82ab62945560a31732ffc19a6d", size = 864893, upload-time = "2025-11-03T21:32:57.239Z" }, + { url = "https://files.pythonhosted.org/packages/bf/2d/f238229f1caba7ac87a6c4153d79947fb0261415827ae0f77c304260c7d3/regex-2025.11.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6538241f45eb5a25aa575dbba1069ad786f68a4f2773a29a2bd3dd1f9de787be", size = 911522, upload-time = "2025-11-03T21:32:59.274Z" }, + { url = "https://files.pythonhosted.org/packages/bd/3d/22a4eaba214a917c80e04f6025d26143690f0419511e0116508e24b11c9b/regex-2025.11.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce22519c989bb72a7e6b36a199384c53db7722fe669ba891da75907fe3587db", size = 803272, upload-time = "2025-11-03T21:33:01.393Z" }, + { url = "https://files.pythonhosted.org/packages/84/b1/03188f634a409353a84b5ef49754b97dbcc0c0f6fd6c8ede505a8960a0a4/regex-2025.11.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:66d559b21d3640203ab9075797a55165d79017520685fb407b9234d72ab63c62", size = 787958, upload-time = "2025-11-03T21:33:03.379Z" }, + { url = "https://files.pythonhosted.org/packages/99/6a/27d072f7fbf6fadd59c64d210305e1ff865cc3b78b526fd147db768c553b/regex-2025.11.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:669dcfb2e38f9e8c69507bace46f4889e3abbfd9b0c29719202883c0a603598f", size = 859289, upload-time = "2025-11-03T21:33:05.374Z" }, + { url = "https://files.pythonhosted.org/packages/9a/70/1b3878f648e0b6abe023172dacb02157e685564853cc363d9961bcccde4e/regex-2025.11.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:32f74f35ff0f25a5021373ac61442edcb150731fbaa28286bbc8bb1582c89d02", size = 850026, upload-time = "2025-11-03T21:33:07.131Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d5/68e25559b526b8baab8e66839304ede68ff6727237a47727d240006bd0ff/regex-2025.11.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e6c7a21dffba883234baefe91bc3388e629779582038f75d2a5be918e250f0ed", size = 789499, upload-time = "2025-11-03T21:33:09.141Z" }, + { url = "https://files.pythonhosted.org/packages/fc/df/43971264857140a350910d4e33df725e8c94dd9dee8d2e4729fa0d63d49e/regex-2025.11.3-cp314-cp314-win32.whl", hash = "sha256:795ea137b1d809eb6836b43748b12634291c0ed55ad50a7d72d21edf1cd565c4", size = 271604, upload-time = "2025-11-03T21:33:10.9Z" }, + { url = "https://files.pythonhosted.org/packages/01/6f/9711b57dc6894a55faf80a4c1b5aa4f8649805cb9c7aef46f7d27e2b9206/regex-2025.11.3-cp314-cp314-win_amd64.whl", hash = "sha256:9f95fbaa0ee1610ec0fc6b26668e9917a582ba80c52cc6d9ada15e30aa9ab9ad", size = 280320, upload-time = "2025-11-03T21:33:12.572Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7e/f6eaa207d4377481f5e1775cdeb5a443b5a59b392d0065f3417d31d80f87/regex-2025.11.3-cp314-cp314-win_arm64.whl", hash = "sha256:dfec44d532be4c07088c3de2876130ff0fbeeacaa89a137decbbb5f665855a0f", size = 273372, upload-time = "2025-11-03T21:33:14.219Z" }, + { url = "https://files.pythonhosted.org/packages/c3/06/49b198550ee0f5e4184271cee87ba4dfd9692c91ec55289e6282f0f86ccf/regex-2025.11.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:ba0d8a5d7f04f73ee7d01d974d47c5834f8a1b0224390e4fe7c12a3a92a78ecc", size = 491985, upload-time = "2025-11-03T21:33:16.555Z" }, + { url = "https://files.pythonhosted.org/packages/ce/bf/abdafade008f0b1c9da10d934034cb670432d6cf6cbe38bbb53a1cfd6cf8/regex-2025.11.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:442d86cf1cfe4faabf97db7d901ef58347efd004934da045c745e7b5bd57ac49", size = 292669, upload-time = "2025-11-03T21:33:18.32Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ef/0c357bb8edbd2ad8e273fcb9e1761bc37b8acbc6e1be050bebd6475f19c1/regex-2025.11.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fd0a5e563c756de210bb964789b5abe4f114dacae9104a47e1a649b910361536", size = 291030, upload-time = "2025-11-03T21:33:20.048Z" }, + { url = "https://files.pythonhosted.org/packages/79/06/edbb67257596649b8fb088d6aeacbcb248ac195714b18a65e018bf4c0b50/regex-2025.11.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf3490bcbb985a1ae97b2ce9ad1c0f06a852d5b19dde9b07bdf25bf224248c95", size = 807674, upload-time = "2025-11-03T21:33:21.797Z" }, + { url = "https://files.pythonhosted.org/packages/f4/d9/ad4deccfce0ea336296bd087f1a191543bb99ee1c53093dcd4c64d951d00/regex-2025.11.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3809988f0a8b8c9dcc0f92478d6501fac7200b9ec56aecf0ec21f4a2ec4b6009", size = 873451, upload-time = "2025-11-03T21:33:23.741Z" }, + { url = "https://files.pythonhosted.org/packages/13/75/a55a4724c56ef13e3e04acaab29df26582f6978c000ac9cd6810ad1f341f/regex-2025.11.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f4ff94e58e84aedb9c9fce66d4ef9f27a190285b451420f297c9a09f2b9abee9", size = 914980, upload-time = "2025-11-03T21:33:25.999Z" }, + { url = "https://files.pythonhosted.org/packages/67/1e/a1657ee15bd9116f70d4a530c736983eed997b361e20ecd8f5ca3759d5c5/regex-2025.11.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eb542fd347ce61e1321b0a6b945d5701528dca0cd9759c2e3bb8bd57e47964d", size = 812852, upload-time = "2025-11-03T21:33:27.852Z" }, + { url = "https://files.pythonhosted.org/packages/b8/6f/f7516dde5506a588a561d296b2d0044839de06035bb486b326065b4c101e/regex-2025.11.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d6c2d5919075a1f2e413c00b056ea0c2f065b3f5fe83c3d07d325ab92dce51d6", size = 795566, upload-time = "2025-11-03T21:33:32.364Z" }, + { url = "https://files.pythonhosted.org/packages/d9/dd/3d10b9e170cc16fb34cb2cef91513cf3df65f440b3366030631b2984a264/regex-2025.11.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:3f8bf11a4827cc7ce5a53d4ef6cddd5ad25595d3c1435ef08f76825851343154", size = 868463, upload-time = "2025-11-03T21:33:34.459Z" }, + { url = "https://files.pythonhosted.org/packages/f5/8e/935e6beff1695aa9085ff83195daccd72acc82c81793df480f34569330de/regex-2025.11.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:22c12d837298651e5550ac1d964e4ff57c3f56965fc1812c90c9fb2028eaf267", size = 854694, upload-time = "2025-11-03T21:33:36.793Z" }, + { url = "https://files.pythonhosted.org/packages/92/12/10650181a040978b2f5720a6a74d44f841371a3d984c2083fc1752e4acf6/regex-2025.11.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ba394a3dda9ad41c7c780f60f6e4a70988741415ae96f6d1bf6c239cf01379", size = 799691, upload-time = "2025-11-03T21:33:39.079Z" }, + { url = "https://files.pythonhosted.org/packages/67/90/8f37138181c9a7690e7e4cb388debbd389342db3c7381d636d2875940752/regex-2025.11.3-cp314-cp314t-win32.whl", hash = "sha256:4bf146dca15cdd53224a1bf46d628bd7590e4a07fbb69e720d561aea43a32b38", size = 274583, upload-time = "2025-11-03T21:33:41.302Z" }, + { url = "https://files.pythonhosted.org/packages/8f/cd/867f5ec442d56beb56f5f854f40abcfc75e11d10b11fdb1869dd39c63aaf/regex-2025.11.3-cp314-cp314t-win_amd64.whl", hash = "sha256:adad1a1bcf1c9e76346e091d22d23ac54ef28e1365117d99521631078dfec9de", size = 284286, upload-time = "2025-11-03T21:33:43.324Z" }, + { url = "https://files.pythonhosted.org/packages/20/31/32c0c4610cbc070362bf1d2e4ea86d1ea29014d400a6d6c2486fcfd57766/regex-2025.11.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c54f768482cef41e219720013cd05933b6f971d9562544d691c68699bf2b6801", size = 274741, upload-time = "2025-11-03T21:33:45.557Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "rich" +version = "13.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/01/c954e134dc440ab5f96952fe52b4fdc64225530320a910473c1fe270d9aa/rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432", size = 221248, upload-time = "2024-02-28T14:51:19.472Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/67/a37f6214d0e9fe57f6ae54b2956d550ca8365857f42a1ce0392bb21d9410/rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222", size = 240681, upload-time = "2024-02-28T14:51:14.353Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, + { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, +] + +[[package]] +name = "rq" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "croniter" }, + { name = "redis" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/6f/a2848f5ba0ca7f1f879c7ad44a2e7b06b98197a7da39be39eda775807f33/rq-2.6.1.tar.gz", hash = "sha256:db5c0d125ac9dbd4438f9a5225ea3e64050542b416fd791d424e2ab5b2853289", size = 675386, upload-time = "2025-11-22T06:45:16.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/cc/919ccbf0c9b4f8b0f68c3f53e6d8e1e94af4d74cee4e6d3cb2e81f7d0da9/rq-2.6.1-py3-none-any.whl", hash = "sha256:5cc88d3bb5263a407fb2ba2dc6fe8dc710dae94b6f74396cdfe1b32beded9408", size = 112578, upload-time = "2025-11-22T06:45:13.529Z" }, +] + +[[package]] +name = "s3transfer" +version = "0.11.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/24/1390172471d569e281fcfd29b92f2f73774e95972c965d14b6c802ff2352/s3transfer-0.11.3.tar.gz", hash = "sha256:edae4977e3a122445660c7c114bba949f9d191bae3b34a096f18a1c8c354527a", size = 148042, upload-time = "2025-02-26T20:44:57.459Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/81/48c41b554a54d75d4407740abb60e3a102ae416284df04d1dbdcbe3dbf24/s3transfer-0.11.3-py3-none-any.whl", hash = "sha256:ca855bdeb885174b5ffa95b9913622459d4ad8e331fc98eb01e6d5eb6a30655d", size = 84246, upload-time = "2025-02-26T20:44:55.509Z" }, +] + +[[package]] +name = "safetensors" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/29/9c/6e74567782559a63bd040a236edca26fd71bc7ba88de2ef35d75df3bca5e/safetensors-0.7.0.tar.gz", hash = "sha256:07663963b67e8bd9f0b8ad15bb9163606cd27cc5a1b96235a50d8369803b96b0", size = 200878, upload-time = "2025-11-19T15:18:43.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/47/aef6c06649039accf914afef490268e1067ed82be62bcfa5b7e886ad15e8/safetensors-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c82f4d474cf725255d9e6acf17252991c3c8aac038d6ef363a4bf8be2f6db517", size = 467781, upload-time = "2025-11-19T15:18:35.84Z" }, + { url = "https://files.pythonhosted.org/packages/e8/00/374c0c068e30cd31f1e1b46b4b5738168ec79e7689ca82ee93ddfea05109/safetensors-0.7.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:94fd4858284736bb67a897a41608b5b0c2496c9bdb3bf2af1fa3409127f20d57", size = 447058, upload-time = "2025-11-19T15:18:34.416Z" }, + { url = "https://files.pythonhosted.org/packages/f1/06/578ffed52c2296f93d7fd2d844cabfa92be51a587c38c8afbb8ae449ca89/safetensors-0.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e07d91d0c92a31200f25351f4acb2bc6aff7f48094e13ebb1d0fb995b54b6542", size = 491748, upload-time = "2025-11-19T15:18:09.79Z" }, + { url = "https://files.pythonhosted.org/packages/ae/33/1debbbb70e4791dde185edb9413d1fe01619255abb64b300157d7f15dddd/safetensors-0.7.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8469155f4cb518bafb4acf4865e8bb9d6804110d2d9bdcaa78564b9fd841e104", size = 503881, upload-time = "2025-11-19T15:18:16.145Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1c/40c2ca924d60792c3be509833df711b553c60effbd91da6f5284a83f7122/safetensors-0.7.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54bef08bf00a2bff599982f6b08e8770e09cc012d7bba00783fc7ea38f1fb37d", size = 623463, upload-time = "2025-11-19T15:18:21.11Z" }, + { url = "https://files.pythonhosted.org/packages/9b/3a/13784a9364bd43b0d61eef4bea2845039bc2030458b16594a1bd787ae26e/safetensors-0.7.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42cb091236206bb2016d245c377ed383aa7f78691748f3bb6ee1bfa51ae2ce6a", size = 532855, upload-time = "2025-11-19T15:18:25.719Z" }, + { url = "https://files.pythonhosted.org/packages/a0/60/429e9b1cb3fc651937727befe258ea24122d9663e4d5709a48c9cbfceecb/safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac7252938f0696ddea46f5e855dd3138444e82236e3be475f54929f0c510d48", size = 507152, upload-time = "2025-11-19T15:18:33.023Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a8/4b45e4e059270d17af60359713ffd83f97900d45a6afa73aaa0d737d48b6/safetensors-0.7.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1d060c70284127fa805085d8f10fbd0962792aed71879d00864acda69dbab981", size = 541856, upload-time = "2025-11-19T15:18:31.075Z" }, + { url = "https://files.pythonhosted.org/packages/06/87/d26d8407c44175d8ae164a95b5a62707fcc445f3c0c56108e37d98070a3d/safetensors-0.7.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cdab83a366799fa730f90a4ebb563e494f28e9e92c4819e556152ad55e43591b", size = 674060, upload-time = "2025-11-19T15:18:37.211Z" }, + { url = "https://files.pythonhosted.org/packages/11/f5/57644a2ff08dc6325816ba7217e5095f17269dada2554b658442c66aed51/safetensors-0.7.0-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:672132907fcad9f2aedcb705b2d7b3b93354a2aec1b2f706c4db852abe338f85", size = 771715, upload-time = "2025-11-19T15:18:38.689Z" }, + { url = "https://files.pythonhosted.org/packages/86/31/17883e13a814bd278ae6e266b13282a01049b0c81341da7fd0e3e71a80a3/safetensors-0.7.0-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:5d72abdb8a4d56d4020713724ba81dac065fedb7f3667151c4a637f1d3fb26c0", size = 714377, upload-time = "2025-11-19T15:18:40.162Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d8/0c8a7dc9b41dcac53c4cbf9df2b9c83e0e0097203de8b37a712b345c0be5/safetensors-0.7.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0f6d66c1c538d5a94a73aa9ddca8ccc4227e6c9ff555322ea40bdd142391dd4", size = 677368, upload-time = "2025-11-19T15:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/05/e5/cb4b713c8a93469e3c5be7c3f8d77d307e65fe89673e731f5c2bfd0a9237/safetensors-0.7.0-cp38-abi3-win32.whl", hash = "sha256:c74af94bf3ac15ac4d0f2a7c7b4663a15f8c2ab15ed0fc7531ca61d0835eccba", size = 326423, upload-time = "2025-11-19T15:18:45.74Z" }, + { url = "https://files.pythonhosted.org/packages/5d/e6/ec8471c8072382cb91233ba7267fd931219753bb43814cbc71757bfd4dab/safetensors-0.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:d1239932053f56f3456f32eb9625590cc7582e905021f94636202a864d470755", size = 341380, upload-time = "2025-11-19T15:18:44.427Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6a/4d08d89a6fcbe905c5ae68b8b34f0791850882fc19782d0d02c65abbdf3b/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4729811a6640d019a4b7ba8638ee2fd21fa5ca8c7e7bdf0fed62068fcaac737", size = 492430, upload-time = "2025-11-19T15:18:11.884Z" }, + { url = "https://files.pythonhosted.org/packages/dd/29/59ed8152b30f72c42d00d241e58eaca558ae9dbfa5695206e2e0f54c7063/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12f49080303fa6bb424b362149a12949dfbbf1e06811a88f2307276b0c131afd", size = 503977, upload-time = "2025-11-19T15:18:17.523Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/4811bfec67fa260e791369b16dab105e4bae82686120554cc484064e22b4/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0071bffba4150c2f46cae1432d31995d77acfd9f8db598b5d1a2ce67e8440ad2", size = 623890, upload-time = "2025-11-19T15:18:22.666Z" }, + { url = "https://files.pythonhosted.org/packages/58/5b/632a58724221ef03d78ab65062e82a1010e1bef8e8e0b9d7c6d7b8044841/safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:473b32699f4200e69801bf5abf93f1a4ecd432a70984df164fc22ccf39c4a6f3", size = 531885, upload-time = "2025-11-19T15:18:27.146Z" }, +] + +[[package]] +name = "setuptools" +version = "80.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "soundfile" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/96/5ff33900998bad58d5381fd1acfcdac11cbea4f08fc72ac1dc25ffb13f6a/soundfile-0.12.1.tar.gz", hash = "sha256:e8e1017b2cf1dda767aef19d2fd9ee5ebe07e050d430f77a0a7c66ba08b8cdae", size = 43184, upload-time = "2023-02-15T15:37:32.011Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/bc/cd845c2dbb4d257c744cd58a5bcdd9f6d235ca317e7e22e49564ec88dcd9/soundfile-0.12.1-py2.py3-none-any.whl", hash = "sha256:828a79c2e75abab5359f780c81dccd4953c45a2c4cd4f05ba3e233ddf984b882", size = 24030, upload-time = "2023-02-15T15:37:16.077Z" }, + { url = "https://files.pythonhosted.org/packages/c8/73/059c84343be6509b480013bf1eeb11b96c5f9eb48deff8f83638011f6b2c/soundfile-0.12.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:d922be1563ce17a69582a352a86f28ed8c9f6a8bc951df63476ffc310c064bfa", size = 1213305, upload-time = "2023-02-15T15:37:18.875Z" }, + { url = "https://files.pythonhosted.org/packages/71/87/31d2b9ed58975cec081858c01afaa3c43718eb0f62b5698a876d94739ad0/soundfile-0.12.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:bceaab5c4febb11ea0554566784bcf4bc2e3977b53946dda2b12804b4fe524a8", size = 1075977, upload-time = "2023-02-15T15:37:21.938Z" }, + { url = "https://files.pythonhosted.org/packages/ad/bd/0602167a213d9184fc688b1086dc6d374b7ae8c33eccf169f9b50ce6568c/soundfile-0.12.1-py2.py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:2dc3685bed7187c072a46ab4ffddd38cef7de9ae5eb05c03df2ad569cf4dacbc", size = 1257765, upload-time = "2023-03-24T08:21:58.716Z" }, + { url = "https://files.pythonhosted.org/packages/c1/07/7591f4efd29e65071c3a61b53725036ea8f73366a4920a481ebddaf8d0ca/soundfile-0.12.1-py2.py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:074247b771a181859d2bc1f98b5ebf6d5153d2c397b86ee9e29ba602a8dfe2a6", size = 1174746, upload-time = "2023-02-15T15:37:24.771Z" }, + { url = "https://files.pythonhosted.org/packages/03/0f/49941ed8a2d94e5b36ea94346fb1d2b22e847fede902e05be4c96f26be7d/soundfile-0.12.1-py2.py3-none-win32.whl", hash = "sha256:59dfd88c79b48f441bbf6994142a19ab1de3b9bb7c12863402c2bc621e49091a", size = 888234, upload-time = "2023-02-15T15:37:27.078Z" }, + { url = "https://files.pythonhosted.org/packages/50/ff/26a4ee48d0b66625a4e4028a055b9f25bc9d7c7b2d17d21a45137621a50d/soundfile-0.12.1-py2.py3-none-win_amd64.whl", hash = "sha256:0d86924c00b62552b650ddd28af426e3ff2d4dc2e9047dae5b3d8452e0a49a77", size = 1009109, upload-time = "2023-02-15T15:37:29.41Z" }, +] + +[[package]] +name = "sse-starlette" +version = "3.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "starlette" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/17/8b/54651ad49bce99a50fd61a7f19c2b6a79fbb072e693101fbb1194c362054/sse_starlette-3.0.4.tar.gz", hash = "sha256:5e34286862e96ead0eb70f5ddd0bd21ab1f6473a8f44419dd267f431611383dd", size = 22576, upload-time = "2025-12-14T16:22:52.493Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/22/8ab1066358601163e1ac732837adba3672f703818f693e179b24e0d3b65c/sse_starlette-3.0.4-py3-none-any.whl", hash = "sha256:32c80ef0d04506ced4b0b6ab8fe300925edc37d26f666afb1874c754895f5dc3", size = 11764, upload-time = "2025-12-14T16:22:51.453Z" }, +] + +[[package]] +name = "starlette" +version = "0.50.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/b8/73a0e6a6e079a9d9cfa64113d771e421640b6f679a52eeb9b32f72d871a1/starlette-0.50.0.tar.gz", hash = "sha256:a2a17b22203254bcbc2e1f926d2d55f3f9497f769416b3190768befe598fa3ca", size = 2646985, upload-time = "2025-11-01T15:25:27.516Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl", hash = "sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca", size = 74033, upload-time = "2025-11-01T15:25:25.461Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "synchronicity" +version = "0.10.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/b3/3294353e7bac72de154805017512e5ffc925fc7a6079d41e95e7bb65abbb/synchronicity-0.10.6.tar.gz", hash = "sha256:703cce89752f8fc7a2a7b734a3a53f47ec29cbf89a3d20f69c63bab08ca9696e", size = 57728, upload-time = "2025-12-17T20:31:59.576Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/da/7e323d92dc7075f5b552be1012b35a7dd388d00223822baa6354dc42c656/synchronicity-0.10.6-py3-none-any.whl", hash = "sha256:f313d23d8e5b55279972baceaef9edcec93f1e4532a797c68d9f530a5eea6335", size = 39974, upload-time = "2025-12-17T20:31:57.881Z" }, +] + +[[package]] +name = "tiktoken" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806, upload-time = "2025-10-06T20:22:45.419Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/b3/2cb7c17b6c4cf8ca983204255d3f1d95eda7213e247e6947a0ee2c747a2c/tiktoken-0.12.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3de02f5a491cfd179aec916eddb70331814bd6bf764075d39e21d5862e533970", size = 1051991, upload-time = "2025-10-06T20:21:34.098Z" }, + { url = "https://files.pythonhosted.org/packages/27/0f/df139f1df5f6167194ee5ab24634582ba9a1b62c6b996472b0277ec80f66/tiktoken-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6cfb6d9b7b54d20af21a912bfe63a2727d9cfa8fbda642fd8322c70340aad16", size = 995798, upload-time = "2025-10-06T20:21:35.579Z" }, + { url = "https://files.pythonhosted.org/packages/ef/5d/26a691f28ab220d5edc09b9b787399b130f24327ef824de15e5d85ef21aa/tiktoken-0.12.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:cde24cdb1b8a08368f709124f15b36ab5524aac5fa830cc3fdce9c03d4fb8030", size = 1129865, upload-time = "2025-10-06T20:21:36.675Z" }, + { url = "https://files.pythonhosted.org/packages/b2/94/443fab3d4e5ebecac895712abd3849b8da93b7b7dec61c7db5c9c7ebe40c/tiktoken-0.12.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6de0da39f605992649b9cfa6f84071e3f9ef2cec458d08c5feb1b6f0ff62e134", size = 1152856, upload-time = "2025-10-06T20:21:37.873Z" }, + { url = "https://files.pythonhosted.org/packages/54/35/388f941251b2521c70dd4c5958e598ea6d2c88e28445d2fb8189eecc1dfc/tiktoken-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6faa0534e0eefbcafaccb75927a4a380463a2eaa7e26000f0173b920e98b720a", size = 1195308, upload-time = "2025-10-06T20:21:39.577Z" }, + { url = "https://files.pythonhosted.org/packages/f8/00/c6681c7f833dd410576183715a530437a9873fa910265817081f65f9105f/tiktoken-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:82991e04fc860afb933efb63957affc7ad54f83e2216fe7d319007dab1ba5892", size = 1255697, upload-time = "2025-10-06T20:21:41.154Z" }, + { url = "https://files.pythonhosted.org/packages/5f/d2/82e795a6a9bafa034bf26a58e68fe9a89eeaaa610d51dbeb22106ba04f0a/tiktoken-0.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:6fb2995b487c2e31acf0a9e17647e3b242235a20832642bb7a9d1a181c0c1bb1", size = 879375, upload-time = "2025-10-06T20:21:43.201Z" }, + { url = "https://files.pythonhosted.org/packages/de/46/21ea696b21f1d6d1efec8639c204bdf20fde8bafb351e1355c72c5d7de52/tiktoken-0.12.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb", size = 1051565, upload-time = "2025-10-06T20:21:44.566Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d9/35c5d2d9e22bb2a5f74ba48266fb56c63d76ae6f66e02feb628671c0283e/tiktoken-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa", size = 995284, upload-time = "2025-10-06T20:21:45.622Z" }, + { url = "https://files.pythonhosted.org/packages/01/84/961106c37b8e49b9fdcf33fe007bb3a8fdcc380c528b20cc7fbba80578b8/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc", size = 1129201, upload-time = "2025-10-06T20:21:47.074Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d0/3d9275198e067f8b65076a68894bb52fd253875f3644f0a321a720277b8a/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded", size = 1152444, upload-time = "2025-10-06T20:21:48.139Z" }, + { url = "https://files.pythonhosted.org/packages/78/db/a58e09687c1698a7c592e1038e01c206569b86a0377828d51635561f8ebf/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd", size = 1195080, upload-time = "2025-10-06T20:21:49.246Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/a9e4d2bf91d515c0f74afc526fd773a812232dd6cda33ebea7f531202325/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967", size = 1255240, upload-time = "2025-10-06T20:21:50.274Z" }, + { url = "https://files.pythonhosted.org/packages/9d/15/963819345f1b1fb0809070a79e9dd96938d4ca41297367d471733e79c76c/tiktoken-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def", size = 879422, upload-time = "2025-10-06T20:21:51.734Z" }, + { url = "https://files.pythonhosted.org/packages/a4/85/be65d39d6b647c79800fd9d29241d081d4eeb06271f383bb87200d74cf76/tiktoken-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8", size = 1050728, upload-time = "2025-10-06T20:21:52.756Z" }, + { url = "https://files.pythonhosted.org/packages/4a/42/6573e9129bc55c9bf7300b3a35bef2c6b9117018acca0dc760ac2d93dffe/tiktoken-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b", size = 994049, upload-time = "2025-10-06T20:21:53.782Z" }, + { url = "https://files.pythonhosted.org/packages/66/c5/ed88504d2f4a5fd6856990b230b56d85a777feab84e6129af0822f5d0f70/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37", size = 1129008, upload-time = "2025-10-06T20:21:54.832Z" }, + { url = "https://files.pythonhosted.org/packages/f4/90/3dae6cc5436137ebd38944d396b5849e167896fc2073da643a49f372dc4f/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad", size = 1152665, upload-time = "2025-10-06T20:21:56.129Z" }, + { url = "https://files.pythonhosted.org/packages/a3/fe/26df24ce53ffde419a42f5f53d755b995c9318908288c17ec3f3448313a3/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5", size = 1194230, upload-time = "2025-10-06T20:21:57.546Z" }, + { url = "https://files.pythonhosted.org/packages/20/cc/b064cae1a0e9fac84b0d2c46b89f4e57051a5f41324e385d10225a984c24/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3", size = 1254688, upload-time = "2025-10-06T20:21:58.619Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/b8523105c590c5b8349f2587e2fdfe51a69544bd5a76295fc20f2374f470/tiktoken-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd", size = 878694, upload-time = "2025-10-06T20:21:59.876Z" }, + { url = "https://files.pythonhosted.org/packages/00/61/441588ee21e6b5cdf59d6870f86beb9789e532ee9718c251b391b70c68d6/tiktoken-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3", size = 1050802, upload-time = "2025-10-06T20:22:00.96Z" }, + { url = "https://files.pythonhosted.org/packages/1f/05/dcf94486d5c5c8d34496abe271ac76c5b785507c8eae71b3708f1ad9b45a/tiktoken-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160", size = 993995, upload-time = "2025-10-06T20:22:02.788Z" }, + { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948, upload-time = "2025-10-06T20:22:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/0c/da/c028aa0babf77315e1cef357d4d768800c5f8a6de04d0eac0f377cb619fa/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be", size = 1151986, upload-time = "2025-10-06T20:22:05.173Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5a/886b108b766aa53e295f7216b509be95eb7d60b166049ce2c58416b25f2a/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a", size = 1194222, upload-time = "2025-10-06T20:22:06.265Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f8/4db272048397636ac7a078d22773dd2795b1becee7bc4922fe6207288d57/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3", size = 1255097, upload-time = "2025-10-06T20:22:07.403Z" }, + { url = "https://files.pythonhosted.org/packages/8e/32/45d02e2e0ea2be3a9ed22afc47d93741247e75018aac967b713b2941f8ea/tiktoken-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697", size = 879117, upload-time = "2025-10-06T20:22:08.418Z" }, + { url = "https://files.pythonhosted.org/packages/ce/76/994fc868f88e016e6d05b0da5ac24582a14c47893f4474c3e9744283f1d5/tiktoken-0.12.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16", size = 1050309, upload-time = "2025-10-06T20:22:10.939Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b8/57ef1456504c43a849821920d582a738a461b76a047f352f18c0b26c6516/tiktoken-0.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a", size = 993712, upload-time = "2025-10-06T20:22:12.115Z" }, + { url = "https://files.pythonhosted.org/packages/72/90/13da56f664286ffbae9dbcfadcc625439142675845baa62715e49b87b68b/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27", size = 1128725, upload-time = "2025-10-06T20:22:13.541Z" }, + { url = "https://files.pythonhosted.org/packages/05/df/4f80030d44682235bdaecd7346c90f67ae87ec8f3df4a3442cb53834f7e4/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb", size = 1151875, upload-time = "2025-10-06T20:22:14.559Z" }, + { url = "https://files.pythonhosted.org/packages/22/1f/ae535223a8c4ef4c0c1192e3f9b82da660be9eb66b9279e95c99288e9dab/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e", size = 1194451, upload-time = "2025-10-06T20:22:15.545Z" }, + { url = "https://files.pythonhosted.org/packages/78/a7/f8ead382fce0243cb625c4f266e66c27f65ae65ee9e77f59ea1653b6d730/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25", size = 1253794, upload-time = "2025-10-06T20:22:16.624Z" }, + { url = "https://files.pythonhosted.org/packages/93/e0/6cc82a562bc6365785a3ff0af27a2a092d57c47d7a81d9e2295d8c36f011/tiktoken-0.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f", size = 878777, upload-time = "2025-10-06T20:22:18.036Z" }, + { url = "https://files.pythonhosted.org/packages/72/05/3abc1db5d2c9aadc4d2c76fa5640134e475e58d9fbb82b5c535dc0de9b01/tiktoken-0.12.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646", size = 1050188, upload-time = "2025-10-06T20:22:19.563Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7b/50c2f060412202d6c95f32b20755c7a6273543b125c0985d6fa9465105af/tiktoken-0.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88", size = 993978, upload-time = "2025-10-06T20:22:20.702Z" }, + { url = "https://files.pythonhosted.org/packages/14/27/bf795595a2b897e271771cd31cb847d479073497344c637966bdf2853da1/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff", size = 1129271, upload-time = "2025-10-06T20:22:22.06Z" }, + { url = "https://files.pythonhosted.org/packages/f5/de/9341a6d7a8f1b448573bbf3425fa57669ac58258a667eb48a25dfe916d70/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830", size = 1151216, upload-time = "2025-10-06T20:22:23.085Z" }, + { url = "https://files.pythonhosted.org/packages/75/0d/881866647b8d1be4d67cb24e50d0c26f9f807f994aa1510cb9ba2fe5f612/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b", size = 1194860, upload-time = "2025-10-06T20:22:24.602Z" }, + { url = "https://files.pythonhosted.org/packages/b3/1e/b651ec3059474dab649b8d5b69f5c65cd8fcd8918568c1935bd4136c9392/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b", size = 1254567, upload-time = "2025-10-06T20:22:25.671Z" }, + { url = "https://files.pythonhosted.org/packages/80/57/ce64fd16ac390fafde001268c364d559447ba09b509181b2808622420eec/tiktoken-0.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3", size = 921067, upload-time = "2025-10-06T20:22:26.753Z" }, + { url = "https://files.pythonhosted.org/packages/ac/a4/72eed53e8976a099539cdd5eb36f241987212c29629d0a52c305173e0a68/tiktoken-0.12.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365", size = 1050473, upload-time = "2025-10-06T20:22:27.775Z" }, + { url = "https://files.pythonhosted.org/packages/e6/d7/0110b8f54c008466b19672c615f2168896b83706a6611ba6e47313dbc6e9/tiktoken-0.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e", size = 993855, upload-time = "2025-10-06T20:22:28.799Z" }, + { url = "https://files.pythonhosted.org/packages/5f/77/4f268c41a3957c418b084dd576ea2fad2e95da0d8e1ab705372892c2ca22/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63", size = 1129022, upload-time = "2025-10-06T20:22:29.981Z" }, + { url = "https://files.pythonhosted.org/packages/4e/2b/fc46c90fe5028bd094cd6ee25a7db321cb91d45dc87531e2bdbb26b4867a/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0", size = 1150736, upload-time = "2025-10-06T20:22:30.996Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/3c7a39ff68022ddfd7d93f3337ad90389a342f761c4d71de99a3ccc57857/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a", size = 1194908, upload-time = "2025-10-06T20:22:32.073Z" }, + { url = "https://files.pythonhosted.org/packages/ab/0d/c1ad6f4016a3968c048545f5d9b8ffebf577774b2ede3e2e352553b685fe/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0", size = 1253706, upload-time = "2025-10-06T20:22:33.385Z" }, + { url = "https://files.pythonhosted.org/packages/af/df/c7891ef9d2712ad774777271d39fdef63941ffba0a9d59b7ad1fd2765e57/tiktoken-0.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71", size = 920667, upload-time = "2025-10-06T20:22:34.444Z" }, +] + +[[package]] +name = "tilelang" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "apache-tvm-ffi" }, + { name = "cloudpickle" }, + { name = "ml-dtypes" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "psutil" }, + { name = "torch" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/ee/008b0d89a9a756a5984bba319041ec3683c5e7a6df196eaac3f6dc0c70c3/tilelang-0.1.7.tar.gz", hash = "sha256:cb487cead81959b3c257b3eed5f4bce43f32b9bbc107560b1ae7bb905cf2b542", size = 92831886, upload-time = "2025-12-07T03:04:00.122Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/b6/96f4e0f5c0ea74ca18fde8f297049307d3900813c72ccaf331a5377c00c5/tilelang-0.1.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:3d3b4ce85f6adbb10e8dc8f7b0b42bc8e4a835e6f729774c7040c320e159806d", size = 38327175, upload-time = "2025-12-07T02:56:02.214Z" }, + { url = "https://files.pythonhosted.org/packages/d1/4f/6b558e3ca33ea08fc1556afe22ed094d5391fad104722ea4d2399730e733/tilelang-0.1.7-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c60e9daea981a4f9f202dd2bc79ac69fbc028203bb34c88d073773a267616300", size = 46362225, upload-time = "2025-12-07T02:58:07.589Z" }, + { url = "https://files.pythonhosted.org/packages/9c/66/295d704133f521b5efa9bfd8aa7dadc7334684496219e52c600f8aba7e99/tilelang-0.1.7-cp38-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88e61cde48574aa3f6d8d009866f3909b3849a30b6e94f8e208abe1f789efbb6", size = 43449298, upload-time = "2025-12-07T03:00:02.298Z" }, +] + +[[package]] +name = "tokenizers" +version = "0.22.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/46/fb6854cec3278fbfa4a75b50232c77622bc517ac886156e6afbfa4d8fc6e/tokenizers-0.22.1.tar.gz", hash = "sha256:61de6522785310a309b3407bac22d99c4db5dba349935e99e4d15ea2226af2d9", size = 363123, upload-time = "2025-09-19T09:49:23.424Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/33/f4b2d94ada7ab297328fc671fed209368ddb82f965ec2224eb1892674c3a/tokenizers-0.22.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:59fdb013df17455e5f950b4b834a7b3ee2e0271e6378ccb33aa74d178b513c73", size = 3069318, upload-time = "2025-09-19T09:49:11.848Z" }, + { url = "https://files.pythonhosted.org/packages/1c/58/2aa8c874d02b974990e89ff95826a4852a8b2a273c7d1b4411cdd45a4565/tokenizers-0.22.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8d4e484f7b0827021ac5f9f71d4794aaef62b979ab7608593da22b1d2e3c4edc", size = 2926478, upload-time = "2025-09-19T09:49:09.759Z" }, + { url = "https://files.pythonhosted.org/packages/1e/3b/55e64befa1e7bfea963cf4b787b2cea1011362c4193f5477047532ce127e/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d2962dd28bc67c1f205ab180578a78eef89ac60ca7ef7cbe9635a46a56422a", size = 3256994, upload-time = "2025-09-19T09:48:56.701Z" }, + { url = "https://files.pythonhosted.org/packages/71/0b/fbfecf42f67d9b7b80fde4aabb2b3110a97fac6585c9470b5bff103a80cb/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38201f15cdb1f8a6843e6563e6e79f4abd053394992b9bbdf5213ea3469b4ae7", size = 3153141, upload-time = "2025-09-19T09:48:59.749Z" }, + { url = "https://files.pythonhosted.org/packages/17/a9/b38f4e74e0817af8f8ef925507c63c6ae8171e3c4cb2d5d4624bf58fca69/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1cbe5454c9a15df1b3443c726063d930c16f047a3cc724b9e6e1a91140e5a21", size = 3508049, upload-time = "2025-09-19T09:49:05.868Z" }, + { url = "https://files.pythonhosted.org/packages/d2/48/dd2b3dac46bb9134a88e35d72e1aa4869579eacc1a27238f1577270773ff/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7d094ae6312d69cc2a872b54b91b309f4f6fbce871ef28eb27b52a98e4d0214", size = 3710730, upload-time = "2025-09-19T09:49:01.832Z" }, + { url = "https://files.pythonhosted.org/packages/93/0e/ccabc8d16ae4ba84a55d41345207c1e2ea88784651a5a487547d80851398/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afd7594a56656ace95cdd6df4cca2e4059d294c5cfb1679c57824b605556cb2f", size = 3412560, upload-time = "2025-09-19T09:49:03.867Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c6/dc3a0db5a6766416c32c034286d7c2d406da1f498e4de04ab1b8959edd00/tokenizers-0.22.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ef6063d7a84994129732b47e7915e8710f27f99f3a3260b8a38fc7ccd083f4", size = 3250221, upload-time = "2025-09-19T09:49:07.664Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a6/2c8486eef79671601ff57b093889a345dd3d576713ef047776015dc66de7/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ba0a64f450b9ef412c98f6bcd2a50c6df6e2443b560024a09fa6a03189726879", size = 9345569, upload-time = "2025-09-19T09:49:14.214Z" }, + { url = "https://files.pythonhosted.org/packages/6b/16/32ce667f14c35537f5f605fe9bea3e415ea1b0a646389d2295ec348d5657/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:331d6d149fa9c7d632cde4490fb8bbb12337fa3a0232e77892be656464f4b446", size = 9271599, upload-time = "2025-09-19T09:49:16.639Z" }, + { url = "https://files.pythonhosted.org/packages/51/7c/a5f7898a3f6baa3fc2685c705e04c98c1094c523051c805cdd9306b8f87e/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:607989f2ea68a46cb1dfbaf3e3aabdf3f21d8748312dbeb6263d1b3b66c5010a", size = 9533862, upload-time = "2025-09-19T09:49:19.146Z" }, + { url = "https://files.pythonhosted.org/packages/36/65/7e75caea90bc73c1dd8d40438adf1a7bc26af3b8d0a6705ea190462506e1/tokenizers-0.22.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a0f307d490295717726598ef6fa4f24af9d484809223bbc253b201c740a06390", size = 9681250, upload-time = "2025-09-19T09:49:21.501Z" }, + { url = "https://files.pythonhosted.org/packages/30/2c/959dddef581b46e6209da82df3b78471e96260e2bc463f89d23b1bf0e52a/tokenizers-0.22.1-cp39-abi3-win32.whl", hash = "sha256:b5120eed1442765cd90b903bb6cfef781fd8fe64e34ccaecbae4c619b7b12a82", size = 2472003, upload-time = "2025-09-19T09:49:27.089Z" }, + { url = "https://files.pythonhosted.org/packages/b3/46/e33a8c93907b631a99377ef4c5f817ab453d0b34f93529421f42ff559671/tokenizers-0.22.1-cp39-abi3-win_amd64.whl", hash = "sha256:65fd6e3fb11ca1e78a6a93602490f134d1fdeb13bcef99389d5102ea318ed138", size = 2674684, upload-time = "2025-09-19T09:49:24.953Z" }, +] + +[[package]] +name = "toml" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, +] + +[[package]] +name = "tomli" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" }, + { url = "https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba", size = 148084, upload-time = "2025-10-08T22:01:01.63Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/24935fb6a2ee63e86d80e4d3b58b222dafaf438c416752c8b58537c8b89a/tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf", size = 234832, upload-time = "2025-10-08T22:01:02.543Z" }, + { url = "https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441", size = 242052, upload-time = "2025-10-08T22:01:03.836Z" }, + { url = "https://files.pythonhosted.org/packages/70/8c/f48ac899f7b3ca7eb13af73bacbc93aec37f9c954df3c08ad96991c8c373/tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845", size = 239555, upload-time = "2025-10-08T22:01:04.834Z" }, + { url = "https://files.pythonhosted.org/packages/ba/28/72f8afd73f1d0e7829bfc093f4cb98ce0a40ffc0cc997009ee1ed94ba705/tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c", size = 245128, upload-time = "2025-10-08T22:01:05.84Z" }, + { url = "https://files.pythonhosted.org/packages/b6/eb/a7679c8ac85208706d27436e8d421dfa39d4c914dcf5fa8083a9305f58d9/tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456", size = 96445, upload-time = "2025-10-08T22:01:06.896Z" }, + { url = "https://files.pythonhosted.org/packages/0a/fe/3d3420c4cb1ad9cb462fb52967080575f15898da97e21cb6f1361d505383/tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be", size = 107165, upload-time = "2025-10-08T22:01:08.107Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b7/40f36368fcabc518bb11c8f06379a0fd631985046c038aca08c6d6a43c6e/tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac", size = 154891, upload-time = "2025-10-08T22:01:09.082Z" }, + { url = "https://files.pythonhosted.org/packages/f9/3f/d9dd692199e3b3aab2e4e4dd948abd0f790d9ded8cd10cbaae276a898434/tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22", size = 148796, upload-time = "2025-10-08T22:01:10.266Z" }, + { url = "https://files.pythonhosted.org/packages/60/83/59bff4996c2cf9f9387a0f5a3394629c7efa5ef16142076a23a90f1955fa/tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f", size = 242121, upload-time = "2025-10-08T22:01:11.332Z" }, + { url = "https://files.pythonhosted.org/packages/45/e5/7c5119ff39de8693d6baab6c0b6dcb556d192c165596e9fc231ea1052041/tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52", size = 250070, upload-time = "2025-10-08T22:01:12.498Z" }, + { url = "https://files.pythonhosted.org/packages/45/12/ad5126d3a278f27e6701abde51d342aa78d06e27ce2bb596a01f7709a5a2/tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8", size = 245859, upload-time = "2025-10-08T22:01:13.551Z" }, + { url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" }, + { url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" }, + { url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" }, + { url = "https://files.pythonhosted.org/packages/89/48/06ee6eabe4fdd9ecd48bf488f4ac783844fd777f547b8d1b61c11939974e/tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b", size = 154819, upload-time = "2025-10-08T22:01:17.964Z" }, + { url = "https://files.pythonhosted.org/packages/f1/01/88793757d54d8937015c75dcdfb673c65471945f6be98e6a0410fba167ed/tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae", size = 148766, upload-time = "2025-10-08T22:01:18.959Z" }, + { url = "https://files.pythonhosted.org/packages/42/17/5e2c956f0144b812e7e107f94f1cc54af734eb17b5191c0bbfb72de5e93e/tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b", size = 240771, upload-time = "2025-10-08T22:01:20.106Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f4/0fbd014909748706c01d16824eadb0307115f9562a15cbb012cd9b3512c5/tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf", size = 248586, upload-time = "2025-10-08T22:01:21.164Z" }, + { url = "https://files.pythonhosted.org/packages/30/77/fed85e114bde5e81ecf9bc5da0cc69f2914b38f4708c80ae67d0c10180c5/tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f", size = 244792, upload-time = "2025-10-08T22:01:22.417Z" }, + { url = "https://files.pythonhosted.org/packages/55/92/afed3d497f7c186dc71e6ee6d4fcb0acfa5f7d0a1a2878f8beae379ae0cc/tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05", size = 248909, upload-time = "2025-10-08T22:01:23.859Z" }, + { url = "https://files.pythonhosted.org/packages/f8/84/ef50c51b5a9472e7265ce1ffc7f24cd4023d289e109f669bdb1553f6a7c2/tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606", size = 96946, upload-time = "2025-10-08T22:01:24.893Z" }, + { url = "https://files.pythonhosted.org/packages/b2/b7/718cd1da0884f281f95ccfa3a6cc572d30053cba64603f79d431d3c9b61b/tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999", size = 107705, upload-time = "2025-10-08T22:01:26.153Z" }, + { url = "https://files.pythonhosted.org/packages/19/94/aeafa14a52e16163008060506fcb6aa1949d13548d13752171a755c65611/tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e", size = 154244, upload-time = "2025-10-08T22:01:27.06Z" }, + { url = "https://files.pythonhosted.org/packages/db/e4/1e58409aa78eefa47ccd19779fc6f36787edbe7d4cd330eeeedb33a4515b/tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3", size = 148637, upload-time = "2025-10-08T22:01:28.059Z" }, + { url = "https://files.pythonhosted.org/packages/26/b6/d1eccb62f665e44359226811064596dd6a366ea1f985839c566cd61525ae/tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc", size = 241925, upload-time = "2025-10-08T22:01:29.066Z" }, + { url = "https://files.pythonhosted.org/packages/70/91/7cdab9a03e6d3d2bb11beae108da5bdc1c34bdeb06e21163482544ddcc90/tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0", size = 249045, upload-time = "2025-10-08T22:01:31.98Z" }, + { url = "https://files.pythonhosted.org/packages/15/1b/8c26874ed1f6e4f1fcfeb868db8a794cbe9f227299402db58cfcc858766c/tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879", size = 245835, upload-time = "2025-10-08T22:01:32.989Z" }, + { url = "https://files.pythonhosted.org/packages/fd/42/8e3c6a9a4b1a1360c1a2a39f0b972cef2cc9ebd56025168c4137192a9321/tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005", size = 253109, upload-time = "2025-10-08T22:01:34.052Z" }, + { url = "https://files.pythonhosted.org/packages/22/0c/b4da635000a71b5f80130937eeac12e686eefb376b8dee113b4a582bba42/tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463", size = 97930, upload-time = "2025-10-08T22:01:35.082Z" }, + { url = "https://files.pythonhosted.org/packages/b9/74/cb1abc870a418ae99cd5c9547d6bce30701a954e0e721821df483ef7223c/tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8", size = 107964, upload-time = "2025-10-08T22:01:36.057Z" }, + { url = "https://files.pythonhosted.org/packages/54/78/5c46fff6432a712af9f792944f4fcd7067d8823157949f4e40c56b8b3c83/tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77", size = 163065, upload-time = "2025-10-08T22:01:37.27Z" }, + { url = "https://files.pythonhosted.org/packages/39/67/f85d9bd23182f45eca8939cd2bc7050e1f90c41f4a2ecbbd5963a1d1c486/tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf", size = 159088, upload-time = "2025-10-08T22:01:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/26/5a/4b546a0405b9cc0659b399f12b6adb750757baf04250b148d3c5059fc4eb/tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530", size = 268193, upload-time = "2025-10-08T22:01:39.712Z" }, + { url = "https://files.pythonhosted.org/packages/42/4f/2c12a72ae22cf7b59a7fe75b3465b7aba40ea9145d026ba41cb382075b0e/tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b", size = 275488, upload-time = "2025-10-08T22:01:40.773Z" }, + { url = "https://files.pythonhosted.org/packages/92/04/a038d65dbe160c3aa5a624e93ad98111090f6804027d474ba9c37c8ae186/tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67", size = 272669, upload-time = "2025-10-08T22:01:41.824Z" }, + { url = "https://files.pythonhosted.org/packages/be/2f/8b7c60a9d1612a7cbc39ffcca4f21a73bf368a80fc25bccf8253e2563267/tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f", size = 279709, upload-time = "2025-10-08T22:01:43.177Z" }, + { url = "https://files.pythonhosted.org/packages/7e/46/cc36c679f09f27ded940281c38607716c86cf8ba4a518d524e349c8b4874/tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0", size = 107563, upload-time = "2025-10-08T22:01:44.233Z" }, + { url = "https://files.pythonhosted.org/packages/84/ff/426ca8683cf7b753614480484f6437f568fd2fda2edbdf57a2d3d8b27a0b/tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba", size = 119756, upload-time = "2025-10-08T22:01:45.234Z" }, + { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, +] + +[[package]] +name = "torch" +version = "2.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setuptools", marker = "python_full_version >= '3.12'" }, + { name = "sympy" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/86/245c240d2138c17ed572c943c289056c2721abab70810d772c6bf5495b28/torch-2.9.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:030bbfe367379ae6a4ae4042b6c44da25383343b8b3c68abaa9c7231efbaf2dd", size = 104213554, upload-time = "2025-10-15T15:45:59.798Z" }, + { url = "https://files.pythonhosted.org/packages/58/1d/fd1e88ae0948825efcab7dd66d12bec23f05d4d38ed81573c8d453c14c06/torch-2.9.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:51cb63902182a78e90886e8068befd8ea102af4b00e420263591a3d70c7d3c6c", size = 899795167, upload-time = "2025-10-15T15:47:12.695Z" }, + { url = "https://files.pythonhosted.org/packages/63/5a/496197b45c14982bef4e079b24c61dc108e3ab0d0cc9718dba9f54f45a46/torch-2.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:3f6aad4d2f0ee2248bac25339d74858ff846c3969b27d14ac235821f055af83d", size = 109310314, upload-time = "2025-10-15T15:46:16.633Z" }, + { url = "https://files.pythonhosted.org/packages/58/b0/2b4e647b0fc706e88eb6c253d05511865578f5f67b55fad639bf3272a4a1/torch-2.9.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:413e1654c9203733138858780e184d9fc59442f0b3b209e16f39354eb893db9b", size = 74452019, upload-time = "2025-10-15T15:46:04.296Z" }, + { url = "https://files.pythonhosted.org/packages/58/fe/334225e6330e672b36aef23d77451fa906ea12881570c08638a91331a212/torch-2.9.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c596708b5105d0b199215acf0c9be7c1db5f1680d88eddadf4b75a299259a677", size = 104230578, upload-time = "2025-10-15T15:46:08.182Z" }, + { url = "https://files.pythonhosted.org/packages/05/cc/49566caaa218872ec9a2912456f470ff92649894a4bc2e5274aa9ef87c4a/torch-2.9.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:51de31219c97c51cf4bf2be94d622e3deb5dcc526c6dc00e97c17eaec0fc1d67", size = 899815990, upload-time = "2025-10-15T15:48:03.336Z" }, + { url = "https://files.pythonhosted.org/packages/74/25/e9ab21d5925b642d008f139d4a3c9664fc9ee1faafca22913c080cc4c0a5/torch-2.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:dd515c70059afd95f48b8192733764c08ca37a1d19803af6401b5ecad7c8676e", size = 109313698, upload-time = "2025-10-15T15:46:12.425Z" }, + { url = "https://files.pythonhosted.org/packages/b3/b7/205ef3e94de636feffd64b28bb59a0dfac0771221201b9871acf9236f5ca/torch-2.9.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:614a185e4986326d526a91210c8fc1397e76e8cfafa78baf6296a790e53a9eec", size = 74463678, upload-time = "2025-10-15T15:46:29.779Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d3/3985739f3b8e88675127bf70f82b3a48ae083e39cda56305dbd90398fec0/torch-2.9.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e5f7af1dc4c0a7c4a260c2534f41ddaf209714f7c89145e644c44712fbd6b642", size = 104107898, upload-time = "2025-10-15T15:46:20.883Z" }, + { url = "https://files.pythonhosted.org/packages/a5/4b/f4bb2e6c25d0272f798cd6d7a04ed315da76cec68c602d87040c7847287f/torch-2.9.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:01cff95ecd9a212ea2f141db28acccdceb6a4c54f64e6c51091146f5e2a772c6", size = 899738273, upload-time = "2025-10-15T15:50:04.188Z" }, + { url = "https://files.pythonhosted.org/packages/66/11/c1c5ba6691cda6279087c35bd626536e4fd29521fe740abf5008377a9a02/torch-2.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4582b162f541651f0cb184d3e291c05c2f556c7117c64a9873e2ee158d40062b", size = 109280887, upload-time = "2025-10-15T15:46:26.228Z" }, + { url = "https://files.pythonhosted.org/packages/dd/5f/b85bd8c05312d71de9402bf5868d217c38827cfd09d8f8514e5be128a52b/torch-2.9.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:33f58e9a102a91259af289d50525c30323b5c9ae1d31322b6447c0814da68695", size = 74478983, upload-time = "2025-10-15T15:46:39.406Z" }, + { url = "https://files.pythonhosted.org/packages/c2/1c/90eb13833cdf4969ea9707586d7b57095c3b6e2b223a7256bf111689bcb8/torch-2.9.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c30a17fc83eeab346913e237c64b15b5ba6407fff812f6c541e322e19bc9ea0e", size = 104111330, upload-time = "2025-10-15T15:46:35.238Z" }, + { url = "https://files.pythonhosted.org/packages/0e/21/2254c54b8d523592c25ef4434769aa23e29b1e6bf5f4c0ad9e27bf442927/torch-2.9.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8f25033b8667b57857dfd01458fbf2a9e6a6df1f8def23aef0dc46292f6aa642", size = 899750243, upload-time = "2025-10-15T15:48:57.459Z" }, + { url = "https://files.pythonhosted.org/packages/b7/a5/5cb94fa4fd1e78223455c23c200f30f6dc10c6d4a2bcc8f6e7f2a2588370/torch-2.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:d037f1b4ffd25013be4a7bf3651a0a910c68554956c7b2c92ebe87c76475dece", size = 109284513, upload-time = "2025-10-15T15:46:45.061Z" }, + { url = "https://files.pythonhosted.org/packages/66/e8/fc414d8656250ee46120b44836ffbb3266343db424b3e18ca79ebbf69d4f/torch-2.9.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e4e5b5cba837a2a8d1a497ba9a58dae46fa392593eaa13b871c42f71847503a5", size = 74830362, upload-time = "2025-10-15T15:46:48.983Z" }, + { url = "https://files.pythonhosted.org/packages/ed/5f/9474c98fc5ae0cd04b9466035428cd360e6611a86b8352a0fc2fa504acdc/torch-2.9.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:64693568f5dc4dbd5f880a478b1cea0201cc6b510d91d1bc54fea86ac5d1a637", size = 104144940, upload-time = "2025-10-15T15:47:29.076Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5a/8e0c1cf57830172c109d4bd6be2708cabeaf550983eee7029291322447a0/torch-2.9.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:f8ed31ddd7d10bfb3fbe0b9fe01b1243577f13d75e6f4a0839a283915ce3791e", size = 899744054, upload-time = "2025-10-15T15:48:29.864Z" }, + { url = "https://files.pythonhosted.org/packages/6d/28/82c28b30fcb4b7c9cdd995763d18bbb830d6521356712faebbad92ffa61d/torch-2.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:eff527d4e4846e6f70d2afd8058b73825761203d66576a7e04ea2ecfebcb4ab8", size = 109517546, upload-time = "2025-10-15T15:47:33.395Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c3/a91f96ec74347fa5fd24453fa514bc61c61ecc79196fa760b012a1873d96/torch-2.9.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:f8877779cf56d1ce431a7636703bdb13307f5960bb1af49716d8b179225e0e6a", size = 74480732, upload-time = "2025-10-15T15:47:38.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/73/9f70af34b334a7e0ef496ceec96b7ec767bd778ea35385ce6f77557534d1/torch-2.9.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7e614fae699838038d888729f82b687c03413c5989ce2a9481f9a7e7a396e0bb", size = 74433037, upload-time = "2025-10-15T15:47:41.894Z" }, + { url = "https://files.pythonhosted.org/packages/b7/84/37cf88625901934c97109e583ecc21777d21c6f54cda97a7e5bbad1ee2f2/torch-2.9.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:dfb5b8cd310ba3436c7e14e8b7833ef658cf3045e50d2bdaed23c8fc517065eb", size = 104116482, upload-time = "2025-10-15T15:47:46.266Z" }, + { url = "https://files.pythonhosted.org/packages/56/8e/ca8b17866943a8d4f4664d402ea84210aa274588b4c5d89918f5caa24eec/torch-2.9.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:b3d29524993a478e46f5d598b249cd824b7ed98d7fba538bd9c4cde6c803948f", size = 899746916, upload-time = "2025-10-15T15:50:40.294Z" }, + { url = "https://files.pythonhosted.org/packages/43/65/3b17c0fbbdab6501c5b320a52a648628d0d44e7379f64e27d9eef701b6bf/torch-2.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:71c7578984f5ec0eb645eb4816ac8435fcf3e3e2ae1901bcd2f519a9cafb5125", size = 109275151, upload-time = "2025-10-15T15:49:20.715Z" }, + { url = "https://files.pythonhosted.org/packages/83/36/74f8c051f785500396e42f93542422422dfd874a174f21f8d955d36e5d64/torch-2.9.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:71d9309aee457bbe0b164bce2111cd911c4ed4e847e65d5077dbbcd3aba6befc", size = 74823353, upload-time = "2025-10-15T15:49:16.59Z" }, + { url = "https://files.pythonhosted.org/packages/62/51/dc3b4e2f9ba98ae27238f0153ca098bf9340b2dafcc67fde645d496dfc2a/torch-2.9.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c08fb654d783899e204a32cca758a7ce8a45b2d78eeb89517cc937088316f78e", size = 104140340, upload-time = "2025-10-15T15:50:19.67Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8d/b00657f8141ac16af7bb6cda2e67de18499a3263b78d516b9a93fcbc98e3/torch-2.9.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:ec8feb0099b2daa5728fbc7abb0b05730fd97e0f359ff8bda09865aaa7bd7d4b", size = 899731750, upload-time = "2025-10-15T15:49:36.673Z" }, + { url = "https://files.pythonhosted.org/packages/fc/29/bd361e0cbb2c79ce6450f42643aaf6919956f89923a50571b0ebfe92d142/torch-2.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:695ba920f234ad4170c9c50e28d56c848432f8f530e6bc7f88fcb15ddf338e75", size = 109503850, upload-time = "2025-10-15T15:50:24.118Z" }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, +] + +[[package]] +name = "transformers" +version = "4.57.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "huggingface-hub" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "regex" }, + { name = "requests" }, + { name = "safetensors" }, + { name = "tokenizers" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/70/d42a739e8dfde3d92bb2fff5819cbf331fe9657323221e79415cd5eb65ee/transformers-4.57.3.tar.gz", hash = "sha256:df4945029aaddd7c09eec5cad851f30662f8bd1746721b34cc031d70c65afebc", size = 10139680, upload-time = "2025-11-25T15:51:30.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/6b/2f416568b3c4c91c96e5a365d164f8a4a4a88030aa8ab4644181fdadce97/transformers-4.57.3-py3-none-any.whl", hash = "sha256:c77d353a4851b1880191603d36acb313411d3577f6e2897814f333841f7003f4", size = 11993463, upload-time = "2025-11-25T15:51:26.493Z" }, +] + +[[package]] +name = "triton" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/22/507b6f58a35e05e84381630b2dc2a3cee1a7a2a7eaf4cba857c638a18a24/triton-3.5.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6f90de6a6566bb619b4c0adc9855729e1b1b5e26533fca1bf6206e96b6d277a3", size = 159827599, upload-time = "2025-10-15T19:15:43.87Z" }, + { url = "https://files.pythonhosted.org/packages/0b/eb/09e31d107a5d00eb281aa7e6635ca463e9bca86515944e399480eadb71f8/triton-3.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5d3b3d480debf24eaa739623c9a42446b0b77f95593d30eb1f64cd2278cc1f0", size = 170333110, upload-time = "2025-10-13T16:37:49.588Z" }, + { url = "https://files.pythonhosted.org/packages/79/f9/b6f60f978397c616fd8dacca2305759fe4f80d397b20ef72534803244bd5/triton-3.5.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8457b22148defefdcb7fa8144b05ce211b9faefad650a1ce85b23df488d5549c", size = 159926731, upload-time = "2025-10-15T19:15:49.682Z" }, + { url = "https://files.pythonhosted.org/packages/3d/78/949a04391c21956c816523678f0e5fa308eb5b1e7622d88c4e4ef5fceca0/triton-3.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f34bfa21c5b3a203c0f0eab28dcc1e49bd1f67d22724e77fb6665a659200a4ec", size = 170433488, upload-time = "2025-10-13T16:37:57.132Z" }, + { url = "https://files.pythonhosted.org/packages/87/9b/30988039e1e84df7554fba24e6a734d2d0e847af33cabdf9b532b3c51456/triton-3.5.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7da21fccceafc163e3a5e857abe34351ef76345af06cabf9637a914742671f0b", size = 159946647, upload-time = "2025-10-15T19:15:56.325Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3a/e991574f3102147b642e49637e0281e9bb7c4ba254edb2bab78247c85e01/triton-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9e71db82261c4ffa3921cd050cd5faa18322d2d405c30eb56084afaff3b0833", size = 170476535, upload-time = "2025-10-13T16:38:05.18Z" }, + { url = "https://files.pythonhosted.org/packages/cd/85/e37f1197acb04c8f3d83851d23d5d6ed5060ef74580668b112e23fdfa203/triton-3.5.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:188da5b81fa2f8322c27fec1627703eac24cb9bb7ab0dfbe9925973bc1b070d3", size = 159958970, upload-time = "2025-10-15T19:16:01.717Z" }, + { url = "https://files.pythonhosted.org/packages/6c/29/10728de8a6e932e517c10773486b8e99f85d1b1d9dd87d9a9616e1fef4a1/triton-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e6bb9aa5519c084a333acdba443789e50012a4b851cd486c54f0b8dc2a8d3a12", size = 170487289, upload-time = "2025-10-13T16:38:11.662Z" }, + { url = "https://files.pythonhosted.org/packages/b8/1d/38258f05010ac17a7b058c022911c9cae6526e149b7397134a048cf5a6c2/triton-3.5.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:03127d9b33aaf979c856676b394bc059ec1d68cb6da68ae03f62dd8ad77a04ae", size = 160073012, upload-time = "2025-10-15T19:16:07.477Z" }, + { url = "https://files.pythonhosted.org/packages/5c/38/db80e48b9220c9bce872b0f616ad0446cdf554a40b85c7865cbca99ab3c2/triton-3.5.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c83f2343e1a220a716c7b3ab9fccfcbe3ad4020d189549200e2d2e8d5868bed9", size = 170577179, upload-time = "2025-10-13T16:38:17.865Z" }, + { url = "https://files.pythonhosted.org/packages/91/fe/8f5771d00227f4eb1ee034f218ed427102b989366d2275fe3b3c105a3921/triton-3.5.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:468936651d383f4a6d10068d34a627505e13af55be5d002b9f27b987e7a5f0ac", size = 159957460, upload-time = "2025-10-15T19:16:12.626Z" }, + { url = "https://files.pythonhosted.org/packages/ff/60/1810655d1d856c9a4fcc90ee8966d85f552d98c53a6589f95ab2cbe27bb8/triton-3.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da0fa67ccd76c3dcfb0bffe1b1c57c685136a6bd33d141c24d9655d4185b1289", size = 170487949, upload-time = "2025-10-13T16:38:24.881Z" }, + { url = "https://files.pythonhosted.org/packages/78/59/99edd103958fe6e42b50b9ad8ce4f223ddf4ccf475259cf7d2b53381dc6c/triton-3.5.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7ceef21410229ac23173a28eee5cfc0e37c1dfdb8b4bc11ecda2e3ecec7c686", size = 160075629, upload-time = "2025-10-15T19:16:18.746Z" }, + { url = "https://files.pythonhosted.org/packages/fb/b7/1dec8433ac604c061173d0589d99217fe7bf90a70bdc375e745d044b8aad/triton-3.5.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:317fe477ea8fd4524a6a8c499fb0a36984a56d0b75bf9c9cb6133a1c56d5a6e7", size = 170580176, upload-time = "2025-10-13T16:38:31.14Z" }, +] + +[[package]] +name = "typer" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/28/7c85c8032b91dbe79725b6f17d2fffc595dff06a35c7a30a37bef73a1ab4/typer-0.20.0.tar.gz", hash = "sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37", size = 106492, upload-time = "2025-10-20T17:03:49.445Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/64/7713ffe4b5983314e9d436a90d5bd4f63b6054e2aca783a3cfc44cb95bbf/typer-0.20.0-py3-none-any.whl", hash = "sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a", size = 47028, upload-time = "2025-10-20T17:03:47.617Z" }, +] + +[[package]] +name = "types-certifi" +version = "2021.10.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/68/943c3aeaf14624712a0357c4a67814dba5cea36d194f5c764dad7959a00c/types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f", size = 2095, upload-time = "2022-06-09T15:19:05.244Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/63/2463d89481e811f007b0e1cd0a91e52e141b47f9de724d20db7b861dcfec/types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a", size = 2136, upload-time = "2022-06-09T15:19:03.127Z" }, +] + +[[package]] +name = "types-toml" +version = "0.10.8.20240310" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/47/3e4c75042792bff8e90d7991aa5c51812cc668828cc6cce711e97f63a607/types-toml-0.10.8.20240310.tar.gz", hash = "sha256:3d41501302972436a6b8b239c850b26689657e25281b48ff0ec06345b8830331", size = 4392, upload-time = "2024-03-10T02:18:37.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/a2/d32ab58c0b216912638b140ab2170ee4b8644067c293b170e19fba340ccc/types_toml-0.10.8.20240310-py3-none-any.whl", hash = "sha256:627b47775d25fa29977d9c70dc0cbab3f314f32c8d8d0c012f2ef5de7aaec05d", size = 4777, upload-time = "2024-03-10T02:18:36.568Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, +] + +[[package]] +name = "tzlocal" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tzdata", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/2e/c14812d3d4d9cd1773c6be938f89e5735a1f11a9f184ac3639b93cef35d5/tzlocal-5.3.1.tar.gz", hash = "sha256:cceffc7edecefea1f595541dbd6e990cb1ea3d19bf01b2809f362a03dd7921fd", size = 30761, upload-time = "2025-03-05T21:17:41.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl", hash = "sha256:eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d", size = 18026, upload-time = "2025-03-05T21:17:39.857Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/24/a2a2ed9addd907787d7aa0355ba36a6cadf1768b934c652ea78acbd59dcd/urllib3-2.6.2.tar.gz", hash = "sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797", size = 432930, upload-time = "2025-12-11T15:56:40.252Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/b9/4095b668ea3678bf6a0af005527f39de12fb026516fb3df17495a733b7f8/urllib3-2.6.2-py3-none-any.whl", hash = "sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd", size = 131182, upload-time = "2025-12-11T15:56:38.584Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.31.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/87/a886eda9ed495a3a4506d5a125cd07c54524280718c4969bde88f075fe98/uvicorn-0.31.1.tar.gz", hash = "sha256:f5167919867b161b7bcaf32646c6a94cdbd4c3aa2eb5c17d36bb9aa5cfd8c493", size = 77368, upload-time = "2024-10-09T19:44:20.152Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/55/37407280931038a3f21fa0245d60edeaa76f18419581aa3f4397761c78df/uvicorn-0.31.1-py3-none-any.whl", hash = "sha256:adc42d9cac80cf3e51af97c1851648066841e7cfb6993a4ca8de29ac1548ed41", size = 63666, upload-time = "2024-10-09T19:44:18.734Z" }, +] + +[[package]] +name = "uvloop" +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/c0/854216d09d33c543f12a44b393c402e89a920b1a0a7dc634c42de91b9cf6/uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", size = 2492741, upload-time = "2024-10-14T23:38:35.489Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/76/44a55515e8c9505aa1420aebacf4dd82552e5e15691654894e90d0bd051a/uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f", size = 1442019, upload-time = "2024-10-14T23:37:20.068Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/62d5800358a78cc25c8a6c72ef8b10851bdb8cca22e14d9c74167b7f86da/uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d", size = 801898, upload-time = "2024-10-14T23:37:22.663Z" }, + { url = "https://files.pythonhosted.org/packages/f3/96/63695e0ebd7da6c741ccd4489b5947394435e198a1382349c17b1146bb97/uvloop-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26", size = 3827735, upload-time = "2024-10-14T23:37:25.129Z" }, + { url = "https://files.pythonhosted.org/packages/61/e0/f0f8ec84979068ffae132c58c79af1de9cceeb664076beea86d941af1a30/uvloop-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb", size = 3825126, upload-time = "2024-10-14T23:37:27.59Z" }, + { url = "https://files.pythonhosted.org/packages/bf/fe/5e94a977d058a54a19df95f12f7161ab6e323ad49f4dabc28822eb2df7ea/uvloop-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f", size = 3705789, upload-time = "2024-10-14T23:37:29.385Z" }, + { url = "https://files.pythonhosted.org/packages/26/dd/c7179618e46092a77e036650c1f056041a028a35c4d76945089fcfc38af8/uvloop-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c", size = 3800523, upload-time = "2024-10-14T23:37:32.048Z" }, + { url = "https://files.pythonhosted.org/packages/57/a7/4cf0334105c1160dd6819f3297f8700fda7fc30ab4f61fbf3e725acbc7cc/uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8", size = 1447410, upload-time = "2024-10-14T23:37:33.612Z" }, + { url = "https://files.pythonhosted.org/packages/8c/7c/1517b0bbc2dbe784b563d6ab54f2ef88c890fdad77232c98ed490aa07132/uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0", size = 805476, upload-time = "2024-10-14T23:37:36.11Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ea/0bfae1aceb82a503f358d8d2fa126ca9dbdb2ba9c7866974faec1cb5875c/uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e", size = 3960855, upload-time = "2024-10-14T23:37:37.683Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ca/0864176a649838b838f36d44bf31c451597ab363b60dc9e09c9630619d41/uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb", size = 3973185, upload-time = "2024-10-14T23:37:40.226Z" }, + { url = "https://files.pythonhosted.org/packages/30/bf/08ad29979a936d63787ba47a540de2132169f140d54aa25bc8c3df3e67f4/uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6", size = 3820256, upload-time = "2024-10-14T23:37:42.839Z" }, + { url = "https://files.pythonhosted.org/packages/da/e2/5cf6ef37e3daf2f06e651aae5ea108ad30df3cb269102678b61ebf1fdf42/uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d", size = 3937323, upload-time = "2024-10-14T23:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/8c/4c/03f93178830dc7ce8b4cdee1d36770d2f5ebb6f3d37d354e061eefc73545/uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c", size = 1471284, upload-time = "2024-10-14T23:37:47.833Z" }, + { url = "https://files.pythonhosted.org/packages/43/3e/92c03f4d05e50f09251bd8b2b2b584a2a7f8fe600008bcc4523337abe676/uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2", size = 821349, upload-time = "2024-10-14T23:37:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/a6/ef/a02ec5da49909dbbfb1fd205a9a1ac4e88ea92dcae885e7c961847cd51e2/uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d", size = 4580089, upload-time = "2024-10-14T23:37:51.703Z" }, + { url = "https://files.pythonhosted.org/packages/06/a7/b4e6a19925c900be9f98bec0a75e6e8f79bb53bdeb891916609ab3958967/uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc", size = 4693770, upload-time = "2024-10-14T23:37:54.122Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0c/f07435a18a4b94ce6bd0677d8319cd3de61f3a9eeb1e5f8ab4e8b5edfcb3/uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb", size = 4451321, upload-time = "2024-10-14T23:37:55.766Z" }, + { url = "https://files.pythonhosted.org/packages/8f/eb/f7032be105877bcf924709c97b1bf3b90255b4ec251f9340cef912559f28/uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f", size = 4659022, upload-time = "2024-10-14T23:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8d/2cbef610ca21539f0f36e2b34da49302029e7c9f09acef0b1c3b5839412b/uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281", size = 1468123, upload-time = "2024-10-14T23:38:00.688Z" }, + { url = "https://files.pythonhosted.org/packages/93/0d/b0038d5a469f94ed8f2b2fce2434a18396d8fbfb5da85a0a9781ebbdec14/uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af", size = 819325, upload-time = "2024-10-14T23:38:02.309Z" }, + { url = "https://files.pythonhosted.org/packages/50/94/0a687f39e78c4c1e02e3272c6b2ccdb4e0085fda3b8352fecd0410ccf915/uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6", size = 4582806, upload-time = "2024-10-14T23:38:04.711Z" }, + { url = "https://files.pythonhosted.org/packages/d2/19/f5b78616566ea68edd42aacaf645adbf71fbd83fc52281fba555dc27e3f1/uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", size = 4701068, upload-time = "2024-10-14T23:38:06.385Z" }, + { url = "https://files.pythonhosted.org/packages/47/57/66f061ee118f413cd22a656de622925097170b9380b30091b78ea0c6ea75/uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc", size = 4454428, upload-time = "2024-10-14T23:38:08.416Z" }, + { url = "https://files.pythonhosted.org/packages/63/9a/0962b05b308494e3202d3f794a6e85abe471fe3cafdbcf95c2e8c713aabd/uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553", size = 4660018, upload-time = "2024-10-14T23:38:10.888Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c2/c9/8869df9b2a2d6c59d79220a4db37679e74f807c559ffe5265e08b227a210/watchfiles-1.1.1.tar.gz", hash = "sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2", size = 94440, upload-time = "2025-10-14T15:06:21.08Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/1a/206e8cf2dd86fddf939165a57b4df61607a1e0add2785f170a3f616b7d9f/watchfiles-1.1.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c", size = 407318, upload-time = "2025-10-14T15:04:18.753Z" }, + { url = "https://files.pythonhosted.org/packages/b3/0f/abaf5262b9c496b5dad4ed3c0e799cbecb1f8ea512ecb6ddd46646a9fca3/watchfiles-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43", size = 394478, upload-time = "2025-10-14T15:04:20.297Z" }, + { url = "https://files.pythonhosted.org/packages/b1/04/9cc0ba88697b34b755371f5ace8d3a4d9a15719c07bdc7bd13d7d8c6a341/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31", size = 449894, upload-time = "2025-10-14T15:04:21.527Z" }, + { url = "https://files.pythonhosted.org/packages/d2/9c/eda4615863cd8621e89aed4df680d8c3ec3da6a4cf1da113c17decd87c7f/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac", size = 459065, upload-time = "2025-10-14T15:04:22.795Z" }, + { url = "https://files.pythonhosted.org/packages/84/13/f28b3f340157d03cbc8197629bc109d1098764abe1e60874622a0be5c112/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d", size = 488377, upload-time = "2025-10-14T15:04:24.138Z" }, + { url = "https://files.pythonhosted.org/packages/86/93/cfa597fa9389e122488f7ffdbd6db505b3b915ca7435ecd7542e855898c2/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d", size = 595837, upload-time = "2025-10-14T15:04:25.057Z" }, + { url = "https://files.pythonhosted.org/packages/57/1e/68c1ed5652b48d89fc24d6af905d88ee4f82fa8bc491e2666004e307ded1/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863", size = 473456, upload-time = "2025-10-14T15:04:26.497Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dc/1a680b7458ffa3b14bb64878112aefc8f2e4f73c5af763cbf0bd43100658/watchfiles-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab", size = 455614, upload-time = "2025-10-14T15:04:27.539Z" }, + { url = "https://files.pythonhosted.org/packages/61/a5/3d782a666512e01eaa6541a72ebac1d3aae191ff4a31274a66b8dd85760c/watchfiles-1.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82", size = 630690, upload-time = "2025-10-14T15:04:28.495Z" }, + { url = "https://files.pythonhosted.org/packages/9b/73/bb5f38590e34687b2a9c47a244aa4dd50c56a825969c92c9c5fc7387cea1/watchfiles-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4", size = 622459, upload-time = "2025-10-14T15:04:29.491Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ac/c9bb0ec696e07a20bd58af5399aeadaef195fb2c73d26baf55180fe4a942/watchfiles-1.1.1-cp310-cp310-win32.whl", hash = "sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844", size = 272663, upload-time = "2025-10-14T15:04:30.435Z" }, + { url = "https://files.pythonhosted.org/packages/11/a0/a60c5a7c2ec59fa062d9a9c61d02e3b6abd94d32aac2d8344c4bdd033326/watchfiles-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e", size = 287453, upload-time = "2025-10-14T15:04:31.53Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/2c5f479fb531ce2f0564eda479faecf253d886b1ab3630a39b7bf7362d46/watchfiles-1.1.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5", size = 406529, upload-time = "2025-10-14T15:04:32.899Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cd/f515660b1f32f65df671ddf6f85bfaca621aee177712874dc30a97397977/watchfiles-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741", size = 394384, upload-time = "2025-10-14T15:04:33.761Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c3/28b7dc99733eab43fca2d10f55c86e03bd6ab11ca31b802abac26b23d161/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6", size = 448789, upload-time = "2025-10-14T15:04:34.679Z" }, + { url = "https://files.pythonhosted.org/packages/4a/24/33e71113b320030011c8e4316ccca04194bf0cbbaeee207f00cbc7d6b9f5/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b", size = 460521, upload-time = "2025-10-14T15:04:35.963Z" }, + { url = "https://files.pythonhosted.org/packages/f4/c3/3c9a55f255aa57b91579ae9e98c88704955fa9dac3e5614fb378291155df/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14", size = 488722, upload-time = "2025-10-14T15:04:37.091Z" }, + { url = "https://files.pythonhosted.org/packages/49/36/506447b73eb46c120169dc1717fe2eff07c234bb3232a7200b5f5bd816e9/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d", size = 596088, upload-time = "2025-10-14T15:04:38.39Z" }, + { url = "https://files.pythonhosted.org/packages/82/ab/5f39e752a9838ec4d52e9b87c1e80f1ee3ccdbe92e183c15b6577ab9de16/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff", size = 472923, upload-time = "2025-10-14T15:04:39.666Z" }, + { url = "https://files.pythonhosted.org/packages/af/b9/a419292f05e302dea372fa7e6fda5178a92998411f8581b9830d28fb9edb/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606", size = 456080, upload-time = "2025-10-14T15:04:40.643Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c3/d5932fd62bde1a30c36e10c409dc5d54506726f08cb3e1d8d0ba5e2bc8db/watchfiles-1.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701", size = 629432, upload-time = "2025-10-14T15:04:41.789Z" }, + { url = "https://files.pythonhosted.org/packages/f7/77/16bddd9779fafb795f1a94319dc965209c5641db5bf1edbbccace6d1b3c0/watchfiles-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10", size = 623046, upload-time = "2025-10-14T15:04:42.718Z" }, + { url = "https://files.pythonhosted.org/packages/46/ef/f2ecb9a0f342b4bfad13a2787155c6ee7ce792140eac63a34676a2feeef2/watchfiles-1.1.1-cp311-cp311-win32.whl", hash = "sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849", size = 271473, upload-time = "2025-10-14T15:04:43.624Z" }, + { url = "https://files.pythonhosted.org/packages/94/bc/f42d71125f19731ea435c3948cad148d31a64fccde3867e5ba4edee901f9/watchfiles-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4", size = 287598, upload-time = "2025-10-14T15:04:44.516Z" }, + { url = "https://files.pythonhosted.org/packages/57/c9/a30f897351f95bbbfb6abcadafbaca711ce1162f4db95fc908c98a9165f3/watchfiles-1.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e", size = 277210, upload-time = "2025-10-14T15:04:45.883Z" }, + { url = "https://files.pythonhosted.org/packages/74/d5/f039e7e3c639d9b1d09b07ea412a6806d38123f0508e5f9b48a87b0a76cc/watchfiles-1.1.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d", size = 404745, upload-time = "2025-10-14T15:04:46.731Z" }, + { url = "https://files.pythonhosted.org/packages/a5/96/a881a13aa1349827490dab2d363c8039527060cfcc2c92cc6d13d1b1049e/watchfiles-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610", size = 391769, upload-time = "2025-10-14T15:04:48.003Z" }, + { url = "https://files.pythonhosted.org/packages/4b/5b/d3b460364aeb8da471c1989238ea0e56bec24b6042a68046adf3d9ddb01c/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af", size = 449374, upload-time = "2025-10-14T15:04:49.179Z" }, + { url = "https://files.pythonhosted.org/packages/b9/44/5769cb62d4ed055cb17417c0a109a92f007114a4e07f30812a73a4efdb11/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6", size = 459485, upload-time = "2025-10-14T15:04:50.155Z" }, + { url = "https://files.pythonhosted.org/packages/19/0c/286b6301ded2eccd4ffd0041a1b726afda999926cf720aab63adb68a1e36/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce", size = 488813, upload-time = "2025-10-14T15:04:51.059Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2b/8530ed41112dd4a22f4dcfdb5ccf6a1baad1ff6eed8dc5a5f09e7e8c41c7/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa", size = 594816, upload-time = "2025-10-14T15:04:52.031Z" }, + { url = "https://files.pythonhosted.org/packages/ce/d2/f5f9fb49489f184f18470d4f99f4e862a4b3e9ac2865688eb2099e3d837a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb", size = 475186, upload-time = "2025-10-14T15:04:53.064Z" }, + { url = "https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803", size = 456812, upload-time = "2025-10-14T15:04:55.174Z" }, + { url = "https://files.pythonhosted.org/packages/66/ab/3cbb8756323e8f9b6f9acb9ef4ec26d42b2109bce830cc1f3468df20511d/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94", size = 630196, upload-time = "2025-10-14T15:04:56.22Z" }, + { url = "https://files.pythonhosted.org/packages/78/46/7152ec29b8335f80167928944a94955015a345440f524d2dfe63fc2f437b/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43", size = 622657, upload-time = "2025-10-14T15:04:57.521Z" }, + { url = "https://files.pythonhosted.org/packages/0a/bf/95895e78dd75efe9a7f31733607f384b42eb5feb54bd2eb6ed57cc2e94f4/watchfiles-1.1.1-cp312-cp312-win32.whl", hash = "sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9", size = 272042, upload-time = "2025-10-14T15:04:59.046Z" }, + { url = "https://files.pythonhosted.org/packages/87/0a/90eb755f568de2688cb220171c4191df932232c20946966c27a59c400850/watchfiles-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9", size = 288410, upload-time = "2025-10-14T15:05:00.081Z" }, + { url = "https://files.pythonhosted.org/packages/36/76/f322701530586922fbd6723c4f91ace21364924822a8772c549483abed13/watchfiles-1.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404", size = 278209, upload-time = "2025-10-14T15:05:01.168Z" }, + { url = "https://files.pythonhosted.org/packages/bb/f4/f750b29225fe77139f7ae5de89d4949f5a99f934c65a1f1c0b248f26f747/watchfiles-1.1.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18", size = 404321, upload-time = "2025-10-14T15:05:02.063Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f9/f07a295cde762644aa4c4bb0f88921d2d141af45e735b965fb2e87858328/watchfiles-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a", size = 391783, upload-time = "2025-10-14T15:05:03.052Z" }, + { url = "https://files.pythonhosted.org/packages/bc/11/fc2502457e0bea39a5c958d86d2cb69e407a4d00b85735ca724bfa6e0d1a/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219", size = 449279, upload-time = "2025-10-14T15:05:04.004Z" }, + { url = "https://files.pythonhosted.org/packages/e3/1f/d66bc15ea0b728df3ed96a539c777acfcad0eb78555ad9efcaa1274688f0/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428", size = 459405, upload-time = "2025-10-14T15:05:04.942Z" }, + { url = "https://files.pythonhosted.org/packages/be/90/9f4a65c0aec3ccf032703e6db02d89a157462fbb2cf20dd415128251cac0/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0", size = 488976, upload-time = "2025-10-14T15:05:05.905Z" }, + { url = "https://files.pythonhosted.org/packages/37/57/ee347af605d867f712be7029bb94c8c071732a4b44792e3176fa3c612d39/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150", size = 595506, upload-time = "2025-10-14T15:05:06.906Z" }, + { url = "https://files.pythonhosted.org/packages/a8/78/cc5ab0b86c122047f75e8fc471c67a04dee395daf847d3e59381996c8707/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae", size = 474936, upload-time = "2025-10-14T15:05:07.906Z" }, + { url = "https://files.pythonhosted.org/packages/62/da/def65b170a3815af7bd40a3e7010bf6ab53089ef1b75d05dd5385b87cf08/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d", size = 456147, upload-time = "2025-10-14T15:05:09.138Z" }, + { url = "https://files.pythonhosted.org/packages/57/99/da6573ba71166e82d288d4df0839128004c67d2778d3b566c138695f5c0b/watchfiles-1.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b", size = 630007, upload-time = "2025-10-14T15:05:10.117Z" }, + { url = "https://files.pythonhosted.org/packages/a8/51/7439c4dd39511368849eb1e53279cd3454b4a4dbace80bab88feeb83c6b5/watchfiles-1.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374", size = 622280, upload-time = "2025-10-14T15:05:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/95/9c/8ed97d4bba5db6fdcdb2b298d3898f2dd5c20f6b73aee04eabe56c59677e/watchfiles-1.1.1-cp313-cp313-win32.whl", hash = "sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0", size = 272056, upload-time = "2025-10-14T15:05:12.156Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/c14e28429f744a260d8ceae18bf58c1d5fa56b50d006a7a9f80e1882cb0d/watchfiles-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42", size = 288162, upload-time = "2025-10-14T15:05:13.208Z" }, + { url = "https://files.pythonhosted.org/packages/dc/61/fe0e56c40d5cd29523e398d31153218718c5786b5e636d9ae8ae79453d27/watchfiles-1.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18", size = 277909, upload-time = "2025-10-14T15:05:14.49Z" }, + { url = "https://files.pythonhosted.org/packages/79/42/e0a7d749626f1e28c7108a99fb9bf524b501bbbeb9b261ceecde644d5a07/watchfiles-1.1.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da", size = 403389, upload-time = "2025-10-14T15:05:15.777Z" }, + { url = "https://files.pythonhosted.org/packages/15/49/08732f90ce0fbbc13913f9f215c689cfc9ced345fb1bcd8829a50007cc8d/watchfiles-1.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051", size = 389964, upload-time = "2025-10-14T15:05:16.85Z" }, + { url = "https://files.pythonhosted.org/packages/27/0d/7c315d4bd5f2538910491a0393c56bf70d333d51bc5b34bee8e68e8cea19/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e", size = 448114, upload-time = "2025-10-14T15:05:17.876Z" }, + { url = "https://files.pythonhosted.org/packages/c3/24/9e096de47a4d11bc4df41e9d1e61776393eac4cb6eb11b3e23315b78b2cc/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70", size = 460264, upload-time = "2025-10-14T15:05:18.962Z" }, + { url = "https://files.pythonhosted.org/packages/cc/0f/e8dea6375f1d3ba5fcb0b3583e2b493e77379834c74fd5a22d66d85d6540/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261", size = 487877, upload-time = "2025-10-14T15:05:20.094Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/df24cfc6424a12deb41503b64d42fbea6b8cb357ec62ca84a5a3476f654a/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620", size = 595176, upload-time = "2025-10-14T15:05:21.134Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b5/853b6757f7347de4e9b37e8cc3289283fb983cba1ab4d2d7144694871d9c/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04", size = 473577, upload-time = "2025-10-14T15:05:22.306Z" }, + { url = "https://files.pythonhosted.org/packages/e1/f7/0a4467be0a56e80447c8529c9fce5b38eab4f513cb3d9bf82e7392a5696b/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77", size = 455425, upload-time = "2025-10-14T15:05:23.348Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e0/82583485ea00137ddf69bc84a2db88bd92ab4a6e3c405e5fb878ead8d0e7/watchfiles-1.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef", size = 628826, upload-time = "2025-10-14T15:05:24.398Z" }, + { url = "https://files.pythonhosted.org/packages/28/9a/a785356fccf9fae84c0cc90570f11702ae9571036fb25932f1242c82191c/watchfiles-1.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf", size = 622208, upload-time = "2025-10-14T15:05:25.45Z" }, + { url = "https://files.pythonhosted.org/packages/c3/f4/0872229324ef69b2c3edec35e84bd57a1289e7d3fe74588048ed8947a323/watchfiles-1.1.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5", size = 404315, upload-time = "2025-10-14T15:05:26.501Z" }, + { url = "https://files.pythonhosted.org/packages/7b/22/16d5331eaed1cb107b873f6ae1b69e9ced582fcf0c59a50cd84f403b1c32/watchfiles-1.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd", size = 390869, upload-time = "2025-10-14T15:05:27.649Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7e/5643bfff5acb6539b18483128fdc0ef2cccc94a5b8fbda130c823e8ed636/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb", size = 449919, upload-time = "2025-10-14T15:05:28.701Z" }, + { url = "https://files.pythonhosted.org/packages/51/2e/c410993ba5025a9f9357c376f48976ef0e1b1aefb73b97a5ae01a5972755/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5", size = 460845, upload-time = "2025-10-14T15:05:30.064Z" }, + { url = "https://files.pythonhosted.org/packages/8e/a4/2df3b404469122e8680f0fcd06079317e48db58a2da2950fb45020947734/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3", size = 489027, upload-time = "2025-10-14T15:05:31.064Z" }, + { url = "https://files.pythonhosted.org/packages/ea/84/4587ba5b1f267167ee715b7f66e6382cca6938e0a4b870adad93e44747e6/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33", size = 595615, upload-time = "2025-10-14T15:05:32.074Z" }, + { url = "https://files.pythonhosted.org/packages/6a/0f/c6988c91d06e93cd0bb3d4a808bcf32375ca1904609835c3031799e3ecae/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510", size = 474836, upload-time = "2025-10-14T15:05:33.209Z" }, + { url = "https://files.pythonhosted.org/packages/b4/36/ded8aebea91919485b7bbabbd14f5f359326cb5ec218cd67074d1e426d74/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05", size = 455099, upload-time = "2025-10-14T15:05:34.189Z" }, + { url = "https://files.pythonhosted.org/packages/98/e0/8c9bdba88af756a2fce230dd365fab2baf927ba42cd47521ee7498fd5211/watchfiles-1.1.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6", size = 630626, upload-time = "2025-10-14T15:05:35.216Z" }, + { url = "https://files.pythonhosted.org/packages/2a/84/a95db05354bf2d19e438520d92a8ca475e578c647f78f53197f5a2f17aaf/watchfiles-1.1.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81", size = 622519, upload-time = "2025-10-14T15:05:36.259Z" }, + { url = "https://files.pythonhosted.org/packages/1d/ce/d8acdc8de545de995c339be67711e474c77d643555a9bb74a9334252bd55/watchfiles-1.1.1-cp314-cp314-win32.whl", hash = "sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b", size = 272078, upload-time = "2025-10-14T15:05:37.63Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c9/a74487f72d0451524be827e8edec251da0cc1fcf111646a511ae752e1a3d/watchfiles-1.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a", size = 287664, upload-time = "2025-10-14T15:05:38.95Z" }, + { url = "https://files.pythonhosted.org/packages/df/b8/8ac000702cdd496cdce998c6f4ee0ca1f15977bba51bdf07d872ebdfc34c/watchfiles-1.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02", size = 277154, upload-time = "2025-10-14T15:05:39.954Z" }, + { url = "https://files.pythonhosted.org/packages/47/a8/e3af2184707c29f0f14b1963c0aace6529f9d1b8582d5b99f31bbf42f59e/watchfiles-1.1.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21", size = 403820, upload-time = "2025-10-14T15:05:40.932Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ec/e47e307c2f4bd75f9f9e8afbe3876679b18e1bcec449beca132a1c5ffb2d/watchfiles-1.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5", size = 390510, upload-time = "2025-10-14T15:05:41.945Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a0/ad235642118090f66e7b2f18fd5c42082418404a79205cdfca50b6309c13/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7", size = 448408, upload-time = "2025-10-14T15:05:43.385Z" }, + { url = "https://files.pythonhosted.org/packages/df/85/97fa10fd5ff3332ae17e7e40e20784e419e28521549780869f1413742e9d/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101", size = 458968, upload-time = "2025-10-14T15:05:44.404Z" }, + { url = "https://files.pythonhosted.org/packages/47/c2/9059c2e8966ea5ce678166617a7f75ecba6164375f3b288e50a40dc6d489/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44", size = 488096, upload-time = "2025-10-14T15:05:45.398Z" }, + { url = "https://files.pythonhosted.org/packages/94/44/d90a9ec8ac309bc26db808a13e7bfc0e4e78b6fc051078a554e132e80160/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c", size = 596040, upload-time = "2025-10-14T15:05:46.502Z" }, + { url = "https://files.pythonhosted.org/packages/95/68/4e3479b20ca305cfc561db3ed207a8a1c745ee32bf24f2026a129d0ddb6e/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc", size = 473847, upload-time = "2025-10-14T15:05:47.484Z" }, + { url = "https://files.pythonhosted.org/packages/4f/55/2af26693fd15165c4ff7857e38330e1b61ab8c37d15dc79118cdba115b7a/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c", size = 455072, upload-time = "2025-10-14T15:05:48.928Z" }, + { url = "https://files.pythonhosted.org/packages/66/1d/d0d200b10c9311ec25d2273f8aad8c3ef7cc7ea11808022501811208a750/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099", size = 629104, upload-time = "2025-10-14T15:05:49.908Z" }, + { url = "https://files.pythonhosted.org/packages/e3/bd/fa9bb053192491b3867ba07d2343d9f2252e00811567d30ae8d0f78136fe/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01", size = 622112, upload-time = "2025-10-14T15:05:50.941Z" }, + { url = "https://files.pythonhosted.org/packages/ba/4c/a888c91e2e326872fa4705095d64acd8aa2fb9c1f7b9bd0588f33850516c/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3", size = 409611, upload-time = "2025-10-14T15:06:05.809Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c7/5420d1943c8e3ce1a21c0a9330bcf7edafb6aa65d26b21dbb3267c9e8112/watchfiles-1.1.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2", size = 396889, upload-time = "2025-10-14T15:06:07.035Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e5/0072cef3804ce8d3aaddbfe7788aadff6b3d3f98a286fdbee9fd74ca59a7/watchfiles-1.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d", size = 451616, upload-time = "2025-10-14T15:06:08.072Z" }, + { url = "https://files.pythonhosted.org/packages/83/4e/b87b71cbdfad81ad7e83358b3e447fedd281b880a03d64a760fe0a11fc2e/watchfiles-1.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b", size = 458413, upload-time = "2025-10-14T15:06:09.209Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8e/e500f8b0b77be4ff753ac94dc06b33d8f0d839377fee1b78e8c8d8f031bf/watchfiles-1.1.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88", size = 408250, upload-time = "2025-10-14T15:06:10.264Z" }, + { url = "https://files.pythonhosted.org/packages/bd/95/615e72cd27b85b61eec764a5ca51bd94d40b5adea5ff47567d9ebc4d275a/watchfiles-1.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336", size = 396117, upload-time = "2025-10-14T15:06:11.28Z" }, + { url = "https://files.pythonhosted.org/packages/c9/81/e7fe958ce8a7fb5c73cc9fb07f5aeaf755e6aa72498c57d760af760c91f8/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24", size = 450493, upload-time = "2025-10-14T15:06:12.321Z" }, + { url = "https://files.pythonhosted.org/packages/6e/d4/ed38dd3b1767193de971e694aa544356e63353c33a85d948166b5ff58b9e/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49", size = 457546, upload-time = "2025-10-14T15:06:13.372Z" }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/da/6462a9f510c0c49837bbc9345aca92d767a56c1fb2939e1579df1e1cdcf7/websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b", size = 175423, upload-time = "2025-03-05T20:01:35.363Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9f/9d11c1a4eb046a9e106483b9ff69bce7ac880443f00e5ce64261b47b07e7/websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205", size = 173080, upload-time = "2025-03-05T20:01:37.304Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4f/b462242432d93ea45f297b6179c7333dd0402b855a912a04e7fc61c0d71f/websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a", size = 173329, upload-time = "2025-03-05T20:01:39.668Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0c/6afa1f4644d7ed50284ac59cc70ef8abd44ccf7d45850d989ea7310538d0/websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", size = 182312, upload-time = "2025-03-05T20:01:41.815Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d4/ffc8bd1350b229ca7a4db2a3e1c482cf87cea1baccd0ef3e72bc720caeec/websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", size = 181319, upload-time = "2025-03-05T20:01:43.967Z" }, + { url = "https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", size = 181631, upload-time = "2025-03-05T20:01:46.104Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cc/1aeb0f7cee59ef065724041bb7ed667b6ab1eeffe5141696cccec2687b66/websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", size = 182016, upload-time = "2025-03-05T20:01:47.603Z" }, + { url = "https://files.pythonhosted.org/packages/79/f9/c86f8f7af208e4161a7f7e02774e9d0a81c632ae76db2ff22549e1718a51/websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", size = 181426, upload-time = "2025-03-05T20:01:48.949Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b9/828b0bc6753db905b91df6ae477c0b14a141090df64fb17f8a9d7e3516cf/websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", size = 181360, upload-time = "2025-03-05T20:01:50.938Z" }, + { url = "https://files.pythonhosted.org/packages/89/fb/250f5533ec468ba6327055b7d98b9df056fb1ce623b8b6aaafb30b55d02e/websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", size = 176388, upload-time = "2025-03-05T20:01:52.213Z" }, + { url = "https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", size = 176830, upload-time = "2025-03-05T20:01:53.922Z" }, + { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, + { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/d40f779fa16f74d3468357197af8d6ad07e7c5a27ea1ca74ceb38986f77a/websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", size = 173109, upload-time = "2025-03-05T20:03:17.769Z" }, + { url = "https://files.pythonhosted.org/packages/bc/cd/5b887b8585a593073fd92f7c23ecd3985cd2c3175025a91b0d69b0551372/websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", size = 173343, upload-time = "2025-03-05T20:03:19.094Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/d34f7556890341e900a95acf4886833646306269f899d58ad62f588bf410/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", size = 174599, upload-time = "2025-03-05T20:03:21.1Z" }, + { url = "https://files.pythonhosted.org/packages/71/e6/5fd43993a87db364ec60fc1d608273a1a465c0caba69176dd160e197ce42/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", size = 174207, upload-time = "2025-03-05T20:03:23.221Z" }, + { url = "https://files.pythonhosted.org/packages/2b/fb/c492d6daa5ec067c2988ac80c61359ace5c4c674c532985ac5a123436cec/websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", size = 174155, upload-time = "2025-03-05T20:03:25.321Z" }, + { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +] + +[[package]] +name = "xxhash" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz", hash = "sha256:f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6", size = 85160, upload-time = "2025-10-02T14:37:08.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/ee/f9f1d656ad168681bb0f6b092372c1e533c4416b8069b1896a175c46e484/xxhash-3.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:87ff03d7e35c61435976554477a7f4cd1704c3596a89a8300d5ce7fc83874a71", size = 32845, upload-time = "2025-10-02T14:33:51.573Z" }, + { url = "https://files.pythonhosted.org/packages/a3/b1/93508d9460b292c74a09b83d16750c52a0ead89c51eea9951cb97a60d959/xxhash-3.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f572dfd3d0e2eb1a57511831cf6341242f5a9f8298a45862d085f5b93394a27d", size = 30807, upload-time = "2025-10-02T14:33:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/07/55/28c93a3662f2d200c70704efe74aab9640e824f8ce330d8d3943bf7c9b3c/xxhash-3.6.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:89952ea539566b9fed2bbd94e589672794b4286f342254fad28b149f9615fef8", size = 193786, upload-time = "2025-10-02T14:33:54.272Z" }, + { url = "https://files.pythonhosted.org/packages/c1/96/fec0be9bb4b8f5d9c57d76380a366f31a1781fb802f76fc7cda6c84893c7/xxhash-3.6.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e6f2ffb07a50b52465a1032c3cf1f4a5683f944acaca8a134a2f23674c2058", size = 212830, upload-time = "2025-10-02T14:33:55.706Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a0/c706845ba77b9611f81fd2e93fad9859346b026e8445e76f8c6fd057cc6d/xxhash-3.6.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b5b848ad6c16d308c3ac7ad4ba6bede80ed5df2ba8ed382f8932df63158dd4b2", size = 211606, upload-time = "2025-10-02T14:33:57.133Z" }, + { url = "https://files.pythonhosted.org/packages/67/1e/164126a2999e5045f04a69257eea946c0dc3e86541b400d4385d646b53d7/xxhash-3.6.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a034590a727b44dd8ac5914236a7b8504144447a9682586c3327e935f33ec8cc", size = 444872, upload-time = "2025-10-02T14:33:58.446Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4b/55ab404c56cd70a2cf5ecfe484838865d0fea5627365c6c8ca156bd09c8f/xxhash-3.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a8f1972e75ebdd161d7896743122834fe87378160c20e97f8b09166213bf8cc", size = 193217, upload-time = "2025-10-02T14:33:59.724Z" }, + { url = "https://files.pythonhosted.org/packages/45/e6/52abf06bac316db33aa269091ae7311bd53cfc6f4b120ae77bac1b348091/xxhash-3.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ee34327b187f002a596d7b167ebc59a1b729e963ce645964bbc050d2f1b73d07", size = 210139, upload-time = "2025-10-02T14:34:02.041Z" }, + { url = "https://files.pythonhosted.org/packages/34/37/db94d490b8691236d356bc249c08819cbcef9273a1a30acf1254ff9ce157/xxhash-3.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:339f518c3c7a850dd033ab416ea25a692759dc7478a71131fe8869010d2b75e4", size = 197669, upload-time = "2025-10-02T14:34:03.664Z" }, + { url = "https://files.pythonhosted.org/packages/b7/36/c4f219ef4a17a4f7a64ed3569bc2b5a9c8311abdb22249ac96093625b1a4/xxhash-3.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:bf48889c9630542d4709192578aebbd836177c9f7a4a2778a7d6340107c65f06", size = 210018, upload-time = "2025-10-02T14:34:05.325Z" }, + { url = "https://files.pythonhosted.org/packages/fd/06/bfac889a374fc2fc439a69223d1750eed2e18a7db8514737ab630534fa08/xxhash-3.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:5576b002a56207f640636056b4160a378fe36a58db73ae5c27a7ec8db35f71d4", size = 413058, upload-time = "2025-10-02T14:34:06.925Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d1/555d8447e0dd32ad0930a249a522bb2e289f0d08b6b16204cfa42c1f5a0c/xxhash-3.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af1f3278bd02814d6dedc5dec397993b549d6f16c19379721e5a1d31e132c49b", size = 190628, upload-time = "2025-10-02T14:34:08.669Z" }, + { url = "https://files.pythonhosted.org/packages/d1/15/8751330b5186cedc4ed4b597989882ea05e0408b53fa47bcb46a6125bfc6/xxhash-3.6.0-cp310-cp310-win32.whl", hash = "sha256:aed058764db109dc9052720da65fafe84873b05eb8b07e5e653597951af57c3b", size = 30577, upload-time = "2025-10-02T14:34:10.234Z" }, + { url = "https://files.pythonhosted.org/packages/bb/cc/53f87e8b5871a6eb2ff7e89c48c66093bda2be52315a8161ddc54ea550c4/xxhash-3.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:e82da5670f2d0d98950317f82a0e4a0197150ff19a6df2ba40399c2a3b9ae5fb", size = 31487, upload-time = "2025-10-02T14:34:11.618Z" }, + { url = "https://files.pythonhosted.org/packages/9f/00/60f9ea3bb697667a14314d7269956f58bf56bb73864f8f8d52a3c2535e9a/xxhash-3.6.0-cp310-cp310-win_arm64.whl", hash = "sha256:4a082ffff8c6ac07707fb6b671caf7c6e020c75226c561830b73d862060f281d", size = 27863, upload-time = "2025-10-02T14:34:12.619Z" }, + { url = "https://files.pythonhosted.org/packages/17/d4/cc2f0400e9154df4b9964249da78ebd72f318e35ccc425e9f403c392f22a/xxhash-3.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b47bbd8cf2d72797f3c2772eaaac0ded3d3af26481a26d7d7d41dc2d3c46b04a", size = 32844, upload-time = "2025-10-02T14:34:14.037Z" }, + { url = "https://files.pythonhosted.org/packages/5e/ec/1cc11cd13e26ea8bc3cb4af4eaadd8d46d5014aebb67be3f71fb0b68802a/xxhash-3.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2b6821e94346f96db75abaa6e255706fb06ebd530899ed76d32cd99f20dc52fa", size = 30809, upload-time = "2025-10-02T14:34:15.484Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/19fe357ea348d98ca22f456f75a30ac0916b51c753e1f8b2e0e6fb884cce/xxhash-3.6.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d0a9751f71a1a65ce3584e9cae4467651c7e70c9d31017fa57574583a4540248", size = 194665, upload-time = "2025-10-02T14:34:16.541Z" }, + { url = "https://files.pythonhosted.org/packages/90/3b/d1f1a8f5442a5fd8beedae110c5af7604dc37349a8e16519c13c19a9a2de/xxhash-3.6.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b29ee68625ab37b04c0b40c3fafdf24d2f75ccd778333cfb698f65f6c463f62", size = 213550, upload-time = "2025-10-02T14:34:17.878Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ef/3a9b05eb527457d5db13a135a2ae1a26c80fecd624d20f3e8dcc4cb170f3/xxhash-3.6.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6812c25fe0d6c36a46ccb002f40f27ac903bf18af9f6dd8f9669cb4d176ab18f", size = 212384, upload-time = "2025-10-02T14:34:19.182Z" }, + { url = "https://files.pythonhosted.org/packages/0f/18/ccc194ee698c6c623acbf0f8c2969811a8a4b6185af5e824cd27b9e4fd3e/xxhash-3.6.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4ccbff013972390b51a18ef1255ef5ac125c92dc9143b2d1909f59abc765540e", size = 445749, upload-time = "2025-10-02T14:34:20.659Z" }, + { url = "https://files.pythonhosted.org/packages/a5/86/cf2c0321dc3940a7aa73076f4fd677a0fb3e405cb297ead7d864fd90847e/xxhash-3.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:297b7fbf86c82c550e12e8fb71968b3f033d27b874276ba3624ea868c11165a8", size = 193880, upload-time = "2025-10-02T14:34:22.431Z" }, + { url = "https://files.pythonhosted.org/packages/82/fb/96213c8560e6f948a1ecc9a7613f8032b19ee45f747f4fca4eb31bb6d6ed/xxhash-3.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dea26ae1eb293db089798d3973a5fc928a18fdd97cc8801226fae705b02b14b0", size = 210912, upload-time = "2025-10-02T14:34:23.937Z" }, + { url = "https://files.pythonhosted.org/packages/40/aa/4395e669b0606a096d6788f40dbdf2b819d6773aa290c19e6e83cbfc312f/xxhash-3.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7a0b169aafb98f4284f73635a8e93f0735f9cbde17bd5ec332480484241aaa77", size = 198654, upload-time = "2025-10-02T14:34:25.644Z" }, + { url = "https://files.pythonhosted.org/packages/67/74/b044fcd6b3d89e9b1b665924d85d3f400636c23590226feb1eb09e1176ce/xxhash-3.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:08d45aef063a4531b785cd72de4887766d01dc8f362a515693df349fdb825e0c", size = 210867, upload-time = "2025-10-02T14:34:27.203Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fd/3ce73bf753b08cb19daee1eb14aa0d7fe331f8da9c02dd95316ddfe5275e/xxhash-3.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:929142361a48ee07f09121fe9e96a84950e8d4df3bb298ca5d88061969f34d7b", size = 414012, upload-time = "2025-10-02T14:34:28.409Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b3/5a4241309217c5c876f156b10778f3ab3af7ba7e3259e6d5f5c7d0129eb2/xxhash-3.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:51312c768403d8540487dbbfb557454cfc55589bbde6424456951f7fcd4facb3", size = 191409, upload-time = "2025-10-02T14:34:29.696Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/99bfbc15fb9abb9a72b088c1d95219fc4782b7d01fc835bd5744d66dd0b8/xxhash-3.6.0-cp311-cp311-win32.whl", hash = "sha256:d1927a69feddc24c987b337ce81ac15c4720955b667fe9b588e02254b80446fd", size = 30574, upload-time = "2025-10-02T14:34:31.028Z" }, + { url = "https://files.pythonhosted.org/packages/65/79/9d24d7f53819fe301b231044ea362ce64e86c74f6e8c8e51320de248b3e5/xxhash-3.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:26734cdc2d4ffe449b41d186bbeac416f704a482ed835d375a5c0cb02bc63fef", size = 31481, upload-time = "2025-10-02T14:34:32.062Z" }, + { url = "https://files.pythonhosted.org/packages/30/4e/15cd0e3e8772071344eab2961ce83f6e485111fed8beb491a3f1ce100270/xxhash-3.6.0-cp311-cp311-win_arm64.whl", hash = "sha256:d72f67ef8bf36e05f5b6c65e8524f265bd61071471cd4cf1d36743ebeeeb06b7", size = 27861, upload-time = "2025-10-02T14:34:33.555Z" }, + { url = "https://files.pythonhosted.org/packages/9a/07/d9412f3d7d462347e4511181dea65e47e0d0e16e26fbee2ea86a2aefb657/xxhash-3.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:01362c4331775398e7bb34e3ab403bc9ee9f7c497bc7dee6272114055277dd3c", size = 32744, upload-time = "2025-10-02T14:34:34.622Z" }, + { url = "https://files.pythonhosted.org/packages/79/35/0429ee11d035fc33abe32dca1b2b69e8c18d236547b9a9b72c1929189b9a/xxhash-3.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b7b2df81a23f8cb99656378e72501b2cb41b1827c0f5a86f87d6b06b69f9f204", size = 30816, upload-time = "2025-10-02T14:34:36.043Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f2/57eb99aa0f7d98624c0932c5b9a170e1806406cdbcdb510546634a1359e0/xxhash-3.6.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:dc94790144e66b14f67b10ac8ed75b39ca47536bf8800eb7c24b50271ea0c490", size = 194035, upload-time = "2025-10-02T14:34:37.354Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ed/6224ba353690d73af7a3f1c7cdb1fc1b002e38f783cb991ae338e1eb3d79/xxhash-3.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93f107c673bccf0d592cdba077dedaf52fe7f42dcd7676eba1f6d6f0c3efffd2", size = 212914, upload-time = "2025-10-02T14:34:38.6Z" }, + { url = "https://files.pythonhosted.org/packages/38/86/fb6b6130d8dd6b8942cc17ab4d90e223653a89aa32ad2776f8af7064ed13/xxhash-3.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aa5ee3444c25b69813663c9f8067dcfaa2e126dc55e8dddf40f4d1c25d7effa", size = 212163, upload-time = "2025-10-02T14:34:39.872Z" }, + { url = "https://files.pythonhosted.org/packages/ee/dc/e84875682b0593e884ad73b2d40767b5790d417bde603cceb6878901d647/xxhash-3.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7f99123f0e1194fa59cc69ad46dbae2e07becec5df50a0509a808f90a0f03f0", size = 445411, upload-time = "2025-10-02T14:34:41.569Z" }, + { url = "https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49e03e6fe2cac4a1bc64952dd250cf0dbc5ef4ebb7b8d96bce82e2de163c82a2", size = 193883, upload-time = "2025-10-02T14:34:43.249Z" }, + { url = "https://files.pythonhosted.org/packages/53/5a/ddbb83eee8e28b778eacfc5a85c969673e4023cdeedcfcef61f36731610b/xxhash-3.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bd17fede52a17a4f9a7bc4472a5867cb0b160deeb431795c0e4abe158bc784e9", size = 210392, upload-time = "2025-10-02T14:34:45.042Z" }, + { url = "https://files.pythonhosted.org/packages/1e/c2/ff69efd07c8c074ccdf0a4f36fcdd3d27363665bcdf4ba399abebe643465/xxhash-3.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6fb5f5476bef678f69db04f2bd1efbed3030d2aba305b0fc1773645f187d6a4e", size = 197898, upload-time = "2025-10-02T14:34:46.302Z" }, + { url = "https://files.pythonhosted.org/packages/58/ca/faa05ac19b3b622c7c9317ac3e23954187516298a091eb02c976d0d3dd45/xxhash-3.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:843b52f6d88071f87eba1631b684fcb4b2068cd2180a0224122fe4ef011a9374", size = 210655, upload-time = "2025-10-02T14:34:47.571Z" }, + { url = "https://files.pythonhosted.org/packages/d4/7a/06aa7482345480cc0cb597f5c875b11a82c3953f534394f620b0be2f700c/xxhash-3.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7d14a6cfaf03b1b6f5f9790f76880601ccc7896aff7ab9cd8978a939c1eb7e0d", size = 414001, upload-time = "2025-10-02T14:34:49.273Z" }, + { url = "https://files.pythonhosted.org/packages/23/07/63ffb386cd47029aa2916b3d2f454e6cc5b9f5c5ada3790377d5430084e7/xxhash-3.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:418daf3db71e1413cfe211c2f9a528456936645c17f46b5204705581a45390ae", size = 191431, upload-time = "2025-10-02T14:34:50.798Z" }, + { url = "https://files.pythonhosted.org/packages/0f/93/14fde614cadb4ddf5e7cebf8918b7e8fac5ae7861c1875964f17e678205c/xxhash-3.6.0-cp312-cp312-win32.whl", hash = "sha256:50fc255f39428a27299c20e280d6193d8b63b8ef8028995323bf834a026b4fbb", size = 30617, upload-time = "2025-10-02T14:34:51.954Z" }, + { url = "https://files.pythonhosted.org/packages/13/5d/0d125536cbe7565a83d06e43783389ecae0c0f2ed037b48ede185de477c0/xxhash-3.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:c0f2ab8c715630565ab8991b536ecded9416d615538be8ecddce43ccf26cbc7c", size = 31534, upload-time = "2025-10-02T14:34:53.276Z" }, + { url = "https://files.pythonhosted.org/packages/54/85/6ec269b0952ec7e36ba019125982cf11d91256a778c7c3f98a4c5043d283/xxhash-3.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:eae5c13f3bc455a3bbb68bdc513912dc7356de7e2280363ea235f71f54064829", size = 27876, upload-time = "2025-10-02T14:34:54.371Z" }, + { url = "https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:599e64ba7f67472481ceb6ee80fa3bd828fd61ba59fb11475572cc5ee52b89ec", size = 32738, upload-time = "2025-10-02T14:34:55.839Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/3fbce1cd96534a95e35d5120637bf29b0d7f5d8fa2f6374e31b4156dd419/xxhash-3.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d8b8aaa30fca4f16f0c84a5c8d7ddee0e25250ec2796c973775373257dde8f1", size = 30821, upload-time = "2025-10-02T14:34:57.219Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ea/d387530ca7ecfa183cb358027f1833297c6ac6098223fd14f9782cd0015c/xxhash-3.6.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d597acf8506d6e7101a4a44a5e428977a51c0fadbbfd3c39650cca9253f6e5a6", size = 194127, upload-time = "2025-10-02T14:34:59.21Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0c/71435dcb99874b09a43b8d7c54071e600a7481e42b3e3ce1eb5226a5711a/xxhash-3.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:858dc935963a33bc33490128edc1c12b0c14d9c7ebaa4e387a7869ecc4f3e263", size = 212975, upload-time = "2025-10-02T14:35:00.816Z" }, + { url = "https://files.pythonhosted.org/packages/84/7a/c2b3d071e4bb4a90b7057228a99b10d51744878f4a8a6dd643c8bd897620/xxhash-3.6.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba284920194615cb8edf73bf52236ce2e1664ccd4a38fdb543506413529cc546", size = 212241, upload-time = "2025-10-02T14:35:02.207Z" }, + { url = "https://files.pythonhosted.org/packages/81/5f/640b6eac0128e215f177df99eadcd0f1b7c42c274ab6a394a05059694c5a/xxhash-3.6.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b54219177f6c6674d5378bd862c6aedf64725f70dd29c472eaae154df1a2e89", size = 445471, upload-time = "2025-10-02T14:35:03.61Z" }, + { url = "https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42c36dd7dbad2f5238950c377fcbf6811b1cdb1c444fab447960030cea60504d", size = 193936, upload-time = "2025-10-02T14:35:05.013Z" }, + { url = "https://files.pythonhosted.org/packages/2c/bd/4a5f68381939219abfe1c22a9e3a5854a4f6f6f3c4983a87d255f21f2e5d/xxhash-3.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f22927652cba98c44639ffdc7aaf35828dccf679b10b31c4ad72a5b530a18eb7", size = 210440, upload-time = "2025-10-02T14:35:06.239Z" }, + { url = "https://files.pythonhosted.org/packages/eb/37/b80fe3d5cfb9faff01a02121a0f4d565eb7237e9e5fc66e73017e74dcd36/xxhash-3.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b45fad44d9c5c119e9c6fbf2e1c656a46dc68e280275007bbfd3d572b21426db", size = 197990, upload-time = "2025-10-02T14:35:07.735Z" }, + { url = "https://files.pythonhosted.org/packages/d7/fd/2c0a00c97b9e18f72e1f240ad4e8f8a90fd9d408289ba9c7c495ed7dc05c/xxhash-3.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6f2580ffab1a8b68ef2b901cde7e55fa8da5e4be0977c68f78fc80f3c143de42", size = 210689, upload-time = "2025-10-02T14:35:09.438Z" }, + { url = "https://files.pythonhosted.org/packages/93/86/5dd8076a926b9a95db3206aba20d89a7fc14dd5aac16e5c4de4b56033140/xxhash-3.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40c391dd3cd041ebc3ffe6f2c862f402e306eb571422e0aa918d8070ba31da11", size = 414068, upload-time = "2025-10-02T14:35:11.162Z" }, + { url = "https://files.pythonhosted.org/packages/af/3c/0bb129170ee8f3650f08e993baee550a09593462a5cddd8e44d0011102b1/xxhash-3.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f205badabde7aafd1a31e8ca2a3e5a763107a71c397c4481d6a804eb5063d8bd", size = 191495, upload-time = "2025-10-02T14:35:12.971Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3a/6797e0114c21d1725e2577508e24006fd7ff1d8c0c502d3b52e45c1771d8/xxhash-3.6.0-cp313-cp313-win32.whl", hash = "sha256:2577b276e060b73b73a53042ea5bd5203d3e6347ce0d09f98500f418a9fcf799", size = 30620, upload-time = "2025-10-02T14:35:14.129Z" }, + { url = "https://files.pythonhosted.org/packages/86/15/9bc32671e9a38b413a76d24722a2bf8784a132c043063a8f5152d390b0f9/xxhash-3.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:757320d45d2fbcce8f30c42a6b2f47862967aea7bf458b9625b4bbe7ee390392", size = 31542, upload-time = "2025-10-02T14:35:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/39/c5/cc01e4f6188656e56112d6a8e0dfe298a16934b8c47a247236549a3f7695/xxhash-3.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:457b8f85dec5825eed7b69c11ae86834a018b8e3df5e77783c999663da2f96d6", size = 27880, upload-time = "2025-10-02T14:35:16.315Z" }, + { url = "https://files.pythonhosted.org/packages/f3/30/25e5321c8732759e930c555176d37e24ab84365482d257c3b16362235212/xxhash-3.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a42e633d75cdad6d625434e3468126c73f13f7584545a9cf34e883aa1710e702", size = 32956, upload-time = "2025-10-02T14:35:17.413Z" }, + { url = "https://files.pythonhosted.org/packages/9f/3c/0573299560d7d9f8ab1838f1efc021a280b5ae5ae2e849034ef3dee18810/xxhash-3.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:568a6d743219e717b07b4e03b0a828ce593833e498c3b64752e0f5df6bfe84db", size = 31072, upload-time = "2025-10-02T14:35:18.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1c/52d83a06e417cd9d4137722693424885cc9878249beb3a7c829e74bf7ce9/xxhash-3.6.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bec91b562d8012dae276af8025a55811b875baace6af510412a5e58e3121bc54", size = 196409, upload-time = "2025-10-02T14:35:20.31Z" }, + { url = "https://files.pythonhosted.org/packages/e3/8e/c6d158d12a79bbd0b878f8355432075fc82759e356ab5a111463422a239b/xxhash-3.6.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78e7f2f4c521c30ad5e786fdd6bae89d47a32672a80195467b5de0480aa97b1f", size = 215736, upload-time = "2025-10-02T14:35:21.616Z" }, + { url = "https://files.pythonhosted.org/packages/bc/68/c4c80614716345d55071a396cf03d06e34b5f4917a467faf43083c995155/xxhash-3.6.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3ed0df1b11a79856df5ffcab572cbd6b9627034c1c748c5566fa79df9048a7c5", size = 214833, upload-time = "2025-10-02T14:35:23.32Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e9/ae27c8ffec8b953efa84c7c4a6c6802c263d587b9fc0d6e7cea64e08c3af/xxhash-3.6.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0e4edbfc7d420925b0dd5e792478ed393d6e75ff8fc219a6546fb446b6a417b1", size = 448348, upload-time = "2025-10-02T14:35:25.111Z" }, + { url = "https://files.pythonhosted.org/packages/d7/6b/33e21afb1b5b3f46b74b6bd1913639066af218d704cc0941404ca717fc57/xxhash-3.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fba27a198363a7ef87f8c0f6b171ec36b674fe9053742c58dd7e3201c1ab30ee", size = 196070, upload-time = "2025-10-02T14:35:26.586Z" }, + { url = "https://files.pythonhosted.org/packages/96/b6/fcabd337bc5fa624e7203aa0fa7d0c49eed22f72e93229431752bddc83d9/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:794fe9145fe60191c6532fa95063765529770edcdd67b3d537793e8004cabbfd", size = 212907, upload-time = "2025-10-02T14:35:28.087Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d3/9ee6160e644d660fcf176c5825e61411c7f62648728f69c79ba237250143/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6105ef7e62b5ac73a837778efc331a591d8442f8ef5c7e102376506cb4ae2729", size = 200839, upload-time = "2025-10-02T14:35:29.857Z" }, + { url = "https://files.pythonhosted.org/packages/0d/98/e8de5baa5109394baf5118f5e72ab21a86387c4f89b0e77ef3e2f6b0327b/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f01375c0e55395b814a679b3eea205db7919ac2af213f4a6682e01220e5fe292", size = 213304, upload-time = "2025-10-02T14:35:31.222Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1d/71056535dec5c3177eeb53e38e3d367dd1d16e024e63b1cee208d572a033/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d706dca2d24d834a4661619dcacf51a75c16d65985718d6a7d73c1eeeb903ddf", size = 416930, upload-time = "2025-10-02T14:35:32.517Z" }, + { url = "https://files.pythonhosted.org/packages/dc/6c/5cbde9de2cd967c322e651c65c543700b19e7ae3e0aae8ece3469bf9683d/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f059d9faeacd49c0215d66f4056e1326c80503f51a1532ca336a385edadd033", size = 193787, upload-time = "2025-10-02T14:35:33.827Z" }, + { url = "https://files.pythonhosted.org/packages/19/fa/0172e350361d61febcea941b0cc541d6e6c8d65d153e85f850a7b256ff8a/xxhash-3.6.0-cp313-cp313t-win32.whl", hash = "sha256:1244460adc3a9be84731d72b8e80625788e5815b68da3da8b83f78115a40a7ec", size = 30916, upload-time = "2025-10-02T14:35:35.107Z" }, + { url = "https://files.pythonhosted.org/packages/ad/e6/e8cf858a2b19d6d45820f072eff1bea413910592ff17157cabc5f1227a16/xxhash-3.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b1e420ef35c503869c4064f4a2f2b08ad6431ab7b229a05cce39d74268bca6b8", size = 31799, upload-time = "2025-10-02T14:35:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/56/15/064b197e855bfb7b343210e82490ae672f8bc7cdf3ddb02e92f64304ee8a/xxhash-3.6.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ec44b73a4220623235f67a996c862049f375df3b1052d9899f40a6382c32d746", size = 28044, upload-time = "2025-10-02T14:35:37.195Z" }, + { url = "https://files.pythonhosted.org/packages/7e/5e/0138bc4484ea9b897864d59fce9be9086030825bc778b76cb5a33a906d37/xxhash-3.6.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a40a3d35b204b7cc7643cbcf8c9976d818cb47befcfac8bbefec8038ac363f3e", size = 32754, upload-time = "2025-10-02T14:35:38.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/d7/5dac2eb2ec75fd771957a13e5dda560efb2176d5203f39502a5fc571f899/xxhash-3.6.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a54844be970d3fc22630b32d515e79a90d0a3ddb2644d8d7402e3c4c8da61405", size = 30846, upload-time = "2025-10-02T14:35:39.6Z" }, + { url = "https://files.pythonhosted.org/packages/fe/71/8bc5be2bb00deb5682e92e8da955ebe5fa982da13a69da5a40a4c8db12fb/xxhash-3.6.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:016e9190af8f0a4e3741343777710e3d5717427f175adfdc3e72508f59e2a7f3", size = 194343, upload-time = "2025-10-02T14:35:40.69Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/52badfb2aecec2c377ddf1ae75f55db3ba2d321c5e164f14461c90837ef3/xxhash-3.6.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f6f72232f849eb9d0141e2ebe2677ece15adfd0fa599bc058aad83c714bb2c6", size = 213074, upload-time = "2025-10-02T14:35:42.29Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2b/ae46b4e9b92e537fa30d03dbc19cdae57ed407e9c26d163895e968e3de85/xxhash-3.6.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:63275a8aba7865e44b1813d2177e0f5ea7eadad3dd063a21f7cf9afdc7054063", size = 212388, upload-time = "2025-10-02T14:35:43.929Z" }, + { url = "https://files.pythonhosted.org/packages/f5/80/49f88d3afc724b4ac7fbd664c8452d6db51b49915be48c6982659e0e7942/xxhash-3.6.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cd01fa2aa00d8b017c97eb46b9a794fbdca53fc14f845f5a328c71254b0abb7", size = 445614, upload-time = "2025-10-02T14:35:45.216Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ba/603ce3961e339413543d8cd44f21f2c80e2a7c5cfe692a7b1f2cccf58f3c/xxhash-3.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0226aa89035b62b6a86d3c68df4d7c1f47a342b8683da2b60cedcddb46c4d95b", size = 194024, upload-time = "2025-10-02T14:35:46.959Z" }, + { url = "https://files.pythonhosted.org/packages/78/d1/8e225ff7113bf81545cfdcd79eef124a7b7064a0bba53605ff39590b95c2/xxhash-3.6.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c6e193e9f56e4ca4923c61238cdaced324f0feac782544eb4c6d55ad5cc99ddd", size = 210541, upload-time = "2025-10-02T14:35:48.301Z" }, + { url = "https://files.pythonhosted.org/packages/6f/58/0f89d149f0bad89def1a8dd38feb50ccdeb643d9797ec84707091d4cb494/xxhash-3.6.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9176dcaddf4ca963d4deb93866d739a343c01c969231dbe21680e13a5d1a5bf0", size = 198305, upload-time = "2025-10-02T14:35:49.584Z" }, + { url = "https://files.pythonhosted.org/packages/11/38/5eab81580703c4df93feb5f32ff8fa7fe1e2c51c1f183ee4e48d4bb9d3d7/xxhash-3.6.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c1ce4009c97a752e682b897aa99aef84191077a9433eb237774689f14f8ec152", size = 210848, upload-time = "2025-10-02T14:35:50.877Z" }, + { url = "https://files.pythonhosted.org/packages/5e/6b/953dc4b05c3ce678abca756416e4c130d2382f877a9c30a20d08ee6a77c0/xxhash-3.6.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:8cb2f4f679b01513b7adbb9b1b2f0f9cdc31b70007eaf9d59d0878809f385b11", size = 414142, upload-time = "2025-10-02T14:35:52.15Z" }, + { url = "https://files.pythonhosted.org/packages/08/a9/238ec0d4e81a10eb5026d4a6972677cbc898ba6c8b9dbaec12ae001b1b35/xxhash-3.6.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:653a91d7c2ab54a92c19ccf43508b6a555440b9be1bc8be553376778be7f20b5", size = 191547, upload-time = "2025-10-02T14:35:53.547Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ee/3cf8589e06c2164ac77c3bf0aa127012801128f1feebf2a079272da5737c/xxhash-3.6.0-cp314-cp314-win32.whl", hash = "sha256:a756fe893389483ee8c394d06b5ab765d96e68fbbfe6fde7aa17e11f5720559f", size = 31214, upload-time = "2025-10-02T14:35:54.746Z" }, + { url = "https://files.pythonhosted.org/packages/02/5d/a19552fbc6ad4cb54ff953c3908bbc095f4a921bc569433d791f755186f1/xxhash-3.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:39be8e4e142550ef69629c9cd71b88c90e9a5db703fecbcf265546d9536ca4ad", size = 32290, upload-time = "2025-10-02T14:35:55.791Z" }, + { url = "https://files.pythonhosted.org/packages/b1/11/dafa0643bc30442c887b55baf8e73353a344ee89c1901b5a5c54a6c17d39/xxhash-3.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:25915e6000338999236f1eb68a02a32c3275ac338628a7eaa5a269c401995679", size = 28795, upload-time = "2025-10-02T14:35:57.162Z" }, + { url = "https://files.pythonhosted.org/packages/2c/db/0e99732ed7f64182aef4a6fb145e1a295558deec2a746265dcdec12d191e/xxhash-3.6.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c5294f596a9017ca5a3e3f8884c00b91ab2ad2933cf288f4923c3fd4346cf3d4", size = 32955, upload-time = "2025-10-02T14:35:58.267Z" }, + { url = "https://files.pythonhosted.org/packages/55/f4/2a7c3c68e564a099becfa44bb3d398810cc0ff6749b0d3cb8ccb93f23c14/xxhash-3.6.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1cf9dcc4ab9cff01dfbba78544297a3a01dafd60f3bde4e2bfd016cf7e4ddc67", size = 31072, upload-time = "2025-10-02T14:35:59.382Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d9/72a29cddc7250e8a5819dad5d466facb5dc4c802ce120645630149127e73/xxhash-3.6.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:01262da8798422d0685f7cef03b2bd3f4f46511b02830861df548d7def4402ad", size = 196579, upload-time = "2025-10-02T14:36:00.838Z" }, + { url = "https://files.pythonhosted.org/packages/63/93/b21590e1e381040e2ca305a884d89e1c345b347404f7780f07f2cdd47ef4/xxhash-3.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51a73fb7cb3a3ead9f7a8b583ffd9b8038e277cdb8cb87cf890e88b3456afa0b", size = 215854, upload-time = "2025-10-02T14:36:02.207Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b8/edab8a7d4fa14e924b29be877d54155dcbd8b80be85ea00d2be3413a9ed4/xxhash-3.6.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b9c6df83594f7df8f7f708ce5ebeacfc69f72c9fbaaababf6cf4758eaada0c9b", size = 214965, upload-time = "2025-10-02T14:36:03.507Z" }, + { url = "https://files.pythonhosted.org/packages/27/67/dfa980ac7f0d509d54ea0d5a486d2bb4b80c3f1bb22b66e6a05d3efaf6c0/xxhash-3.6.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:627f0af069b0ea56f312fd5189001c24578868643203bca1abbc2c52d3a6f3ca", size = 448484, upload-time = "2025-10-02T14:36:04.828Z" }, + { url = "https://files.pythonhosted.org/packages/8c/63/8ffc2cc97e811c0ca5d00ab36604b3ea6f4254f20b7bc658ca825ce6c954/xxhash-3.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa912c62f842dfd013c5f21a642c9c10cd9f4c4e943e0af83618b4a404d9091a", size = 196162, upload-time = "2025-10-02T14:36:06.182Z" }, + { url = "https://files.pythonhosted.org/packages/4b/77/07f0e7a3edd11a6097e990f6e5b815b6592459cb16dae990d967693e6ea9/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b465afd7909db30168ab62afe40b2fcf79eedc0b89a6c0ab3123515dc0df8b99", size = 213007, upload-time = "2025-10-02T14:36:07.733Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d8/bc5fa0d152837117eb0bef6f83f956c509332ce133c91c63ce07ee7c4873/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a881851cf38b0a70e7c4d3ce81fc7afd86fbc2a024f4cfb2a97cf49ce04b75d3", size = 200956, upload-time = "2025-10-02T14:36:09.106Z" }, + { url = "https://files.pythonhosted.org/packages/26/a5/d749334130de9411783873e9b98ecc46688dad5db64ca6e04b02acc8b473/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9b3222c686a919a0f3253cfc12bb118b8b103506612253b5baeaac10d8027cf6", size = 213401, upload-time = "2025-10-02T14:36:10.585Z" }, + { url = "https://files.pythonhosted.org/packages/89/72/abed959c956a4bfc72b58c0384bb7940663c678127538634d896b1195c10/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:c5aa639bc113e9286137cec8fadc20e9cd732b2cc385c0b7fa673b84fc1f2a93", size = 417083, upload-time = "2025-10-02T14:36:12.276Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b3/62fd2b586283b7d7d665fb98e266decadf31f058f1cf6c478741f68af0cb/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5c1343d49ac102799905e115aee590183c3921d475356cb24b4de29a4bc56518", size = 193913, upload-time = "2025-10-02T14:36:14.025Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/c19c42c5b3f5a4aad748a6d5b4f23df3bed7ee5445accc65a0fb3ff03953/xxhash-3.6.0-cp314-cp314t-win32.whl", hash = "sha256:5851f033c3030dd95c086b4a36a2683c2ff4a799b23af60977188b057e467119", size = 31586, upload-time = "2025-10-02T14:36:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/4cc450345be9924fd5dc8c590ceda1db5b43a0a889587b0ae81a95511360/xxhash-3.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0444e7967dac37569052d2409b00a8860c2135cff05502df4da80267d384849f", size = 32526, upload-time = "2025-10-02T14:36:16.708Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c9/7243eb3f9eaabd1a88a5a5acadf06df2d83b100c62684b7425c6a11bcaa8/xxhash-3.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:bb79b1e63f6fd84ec778a4b1916dfe0a7c3fdb986c06addd5db3a0d413819d95", size = 28898, upload-time = "2025-10-02T14:36:17.843Z" }, + { url = "https://files.pythonhosted.org/packages/93/1e/8aec23647a34a249f62e2398c42955acd9b4c6ed5cf08cbea94dc46f78d2/xxhash-3.6.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0f7b7e2ec26c1666ad5fc9dbfa426a6a3367ceaf79db5dd76264659d509d73b0", size = 30662, upload-time = "2025-10-02T14:37:01.743Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/b14510b38ba91caf43006209db846a696ceea6a847a0c9ba0a5b1adc53d6/xxhash-3.6.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5dc1e14d14fa0f5789ec29a7062004b5933964bb9b02aae6622b8f530dc40296", size = 41056, upload-time = "2025-10-02T14:37:02.879Z" }, + { url = "https://files.pythonhosted.org/packages/50/55/15a7b8a56590e66ccd374bbfa3f9ffc45b810886c8c3b614e3f90bd2367c/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:881b47fc47e051b37d94d13e7455131054b56749b91b508b0907eb07900d1c13", size = 36251, upload-time = "2025-10-02T14:37:04.44Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/5ac99a041a29e58e95f907876b04f7067a0242cb85b5f39e726153981503/xxhash-3.6.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6dc31591899f5e5666f04cc2e529e69b4072827085c1ef15294d91a004bc1bd", size = 32481, upload-time = "2025-10-02T14:37:05.869Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d9/8d95e906764a386a3d3b596f3c68bb63687dfca806373509f51ce8eea81f/xxhash-3.6.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:15e0dac10eb9309508bfc41f7f9deaa7755c69e35af835db9cb10751adebc35d", size = 31565, upload-time = "2025-10-02T14:37:06.966Z" }, +] + +[[package]] +name = "yarl" +version = "1.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71", size = 187169, upload-time = "2025-10-06T14:12:55.963Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/43/a2204825342f37c337f5edb6637040fa14e365b2fcc2346960201d457579/yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e", size = 140517, upload-time = "2025-10-06T14:08:42.494Z" }, + { url = "https://files.pythonhosted.org/packages/44/6f/674f3e6f02266428c56f704cd2501c22f78e8b2eeb23f153117cc86fb28a/yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f", size = 93495, upload-time = "2025-10-06T14:08:46.2Z" }, + { url = "https://files.pythonhosted.org/packages/b8/12/5b274d8a0f30c07b91b2f02cba69152600b47830fcfb465c108880fcee9c/yarl-1.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf", size = 94400, upload-time = "2025-10-06T14:08:47.855Z" }, + { url = "https://files.pythonhosted.org/packages/e2/7f/df1b6949b1fa1aa9ff6de6e2631876ad4b73c4437822026e85d8acb56bb1/yarl-1.22.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a", size = 347545, upload-time = "2025-10-06T14:08:49.683Z" }, + { url = "https://files.pythonhosted.org/packages/84/09/f92ed93bd6cd77872ab6c3462df45ca45cd058d8f1d0c9b4f54c1704429f/yarl-1.22.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c", size = 319598, upload-time = "2025-10-06T14:08:51.215Z" }, + { url = "https://files.pythonhosted.org/packages/c3/97/ac3f3feae7d522cf7ccec3d340bb0b2b61c56cb9767923df62a135092c6b/yarl-1.22.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147", size = 363893, upload-time = "2025-10-06T14:08:53.144Z" }, + { url = "https://files.pythonhosted.org/packages/06/49/f3219097403b9c84a4d079b1d7bda62dd9b86d0d6e4428c02d46ab2c77fc/yarl-1.22.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb", size = 371240, upload-time = "2025-10-06T14:08:55.036Z" }, + { url = "https://files.pythonhosted.org/packages/35/9f/06b765d45c0e44e8ecf0fe15c9eacbbde342bb5b7561c46944f107bfb6c3/yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6", size = 346965, upload-time = "2025-10-06T14:08:56.722Z" }, + { url = "https://files.pythonhosted.org/packages/c5/69/599e7cea8d0fcb1694323b0db0dda317fa3162f7b90166faddecf532166f/yarl-1.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0", size = 342026, upload-time = "2025-10-06T14:08:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/95/6f/9dfd12c8bc90fea9eab39832ee32ea48f8e53d1256252a77b710c065c89f/yarl-1.22.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda", size = 335637, upload-time = "2025-10-06T14:09:00.506Z" }, + { url = "https://files.pythonhosted.org/packages/57/2e/34c5b4eb9b07e16e873db5b182c71e5f06f9b5af388cdaa97736d79dd9a6/yarl-1.22.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc", size = 359082, upload-time = "2025-10-06T14:09:01.936Z" }, + { url = "https://files.pythonhosted.org/packages/31/71/fa7e10fb772d273aa1f096ecb8ab8594117822f683bab7d2c5a89914c92a/yarl-1.22.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737", size = 357811, upload-time = "2025-10-06T14:09:03.445Z" }, + { url = "https://files.pythonhosted.org/packages/26/da/11374c04e8e1184a6a03cf9c8f5688d3e5cec83ed6f31ad3481b3207f709/yarl-1.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467", size = 351223, upload-time = "2025-10-06T14:09:05.401Z" }, + { url = "https://files.pythonhosted.org/packages/82/8f/e2d01f161b0c034a30410e375e191a5d27608c1f8693bab1a08b089ca096/yarl-1.22.0-cp310-cp310-win32.whl", hash = "sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea", size = 82118, upload-time = "2025-10-06T14:09:11.148Z" }, + { url = "https://files.pythonhosted.org/packages/62/46/94c76196642dbeae634c7a61ba3da88cd77bed875bf6e4a8bed037505aa6/yarl-1.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca", size = 86852, upload-time = "2025-10-06T14:09:12.958Z" }, + { url = "https://files.pythonhosted.org/packages/af/af/7df4f179d3b1a6dcb9a4bd2ffbc67642746fcafdb62580e66876ce83fff4/yarl-1.22.0-cp310-cp310-win_arm64.whl", hash = "sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b", size = 82012, upload-time = "2025-10-06T14:09:14.664Z" }, + { url = "https://files.pythonhosted.org/packages/4d/27/5ab13fc84c76a0250afd3d26d5936349a35be56ce5785447d6c423b26d92/yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511", size = 141607, upload-time = "2025-10-06T14:09:16.298Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a1/d065d51d02dc02ce81501d476b9ed2229d9a990818332242a882d5d60340/yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6", size = 94027, upload-time = "2025-10-06T14:09:17.786Z" }, + { url = "https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028", size = 94963, upload-time = "2025-10-06T14:09:19.662Z" }, + { url = "https://files.pythonhosted.org/packages/68/fe/2c1f674960c376e29cb0bec1249b117d11738db92a6ccc4a530b972648db/yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d", size = 368406, upload-time = "2025-10-06T14:09:21.402Z" }, + { url = "https://files.pythonhosted.org/packages/95/26/812a540e1c3c6418fec60e9bbd38e871eaba9545e94fa5eff8f4a8e28e1e/yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503", size = 336581, upload-time = "2025-10-06T14:09:22.98Z" }, + { url = "https://files.pythonhosted.org/packages/0b/f5/5777b19e26fdf98563985e481f8be3d8a39f8734147a6ebf459d0dab5a6b/yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65", size = 388924, upload-time = "2025-10-06T14:09:24.655Z" }, + { url = "https://files.pythonhosted.org/packages/86/08/24bd2477bd59c0bbd994fe1d93b126e0472e4e3df5a96a277b0a55309e89/yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e", size = 392890, upload-time = "2025-10-06T14:09:26.617Z" }, + { url = "https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d", size = 365819, upload-time = "2025-10-06T14:09:28.544Z" }, + { url = "https://files.pythonhosted.org/packages/30/2d/f715501cae832651d3282387c6a9236cd26bd00d0ff1e404b3dc52447884/yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7", size = 363601, upload-time = "2025-10-06T14:09:30.568Z" }, + { url = "https://files.pythonhosted.org/packages/f8/f9/a678c992d78e394e7126ee0b0e4e71bd2775e4334d00a9278c06a6cce96a/yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967", size = 358072, upload-time = "2025-10-06T14:09:32.528Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d1/b49454411a60edb6fefdcad4f8e6dbba7d8019e3a508a1c5836cba6d0781/yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed", size = 385311, upload-time = "2025-10-06T14:09:34.634Z" }, + { url = "https://files.pythonhosted.org/packages/87/e5/40d7a94debb8448c7771a916d1861d6609dddf7958dc381117e7ba36d9e8/yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6", size = 381094, upload-time = "2025-10-06T14:09:36.268Z" }, + { url = "https://files.pythonhosted.org/packages/35/d8/611cc282502381ad855448643e1ad0538957fc82ae83dfe7762c14069e14/yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e", size = 370944, upload-time = "2025-10-06T14:09:37.872Z" }, + { url = "https://files.pythonhosted.org/packages/2d/df/fadd00fb1c90e1a5a8bd731fa3d3de2e165e5a3666a095b04e31b04d9cb6/yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca", size = 81804, upload-time = "2025-10-06T14:09:39.359Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f7/149bb6f45f267cb5c074ac40c01c6b3ea6d8a620d34b337f6321928a1b4d/yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b", size = 86858, upload-time = "2025-10-06T14:09:41.068Z" }, + { url = "https://files.pythonhosted.org/packages/2b/13/88b78b93ad3f2f0b78e13bfaaa24d11cbc746e93fe76d8c06bf139615646/yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376", size = 81637, upload-time = "2025-10-06T14:09:42.712Z" }, + { url = "https://files.pythonhosted.org/packages/75/ff/46736024fee3429b80a165a732e38e5d5a238721e634ab41b040d49f8738/yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f", size = 142000, upload-time = "2025-10-06T14:09:44.631Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9a/b312ed670df903145598914770eb12de1bac44599549b3360acc96878df8/yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2", size = 94338, upload-time = "2025-10-06T14:09:46.372Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f5/0601483296f09c3c65e303d60c070a5c19fcdbc72daa061e96170785bc7d/yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74", size = 94909, upload-time = "2025-10-06T14:09:48.648Z" }, + { url = "https://files.pythonhosted.org/packages/60/41/9a1fe0b73dbcefce72e46cf149b0e0a67612d60bfc90fb59c2b2efdfbd86/yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df", size = 372940, upload-time = "2025-10-06T14:09:50.089Z" }, + { url = "https://files.pythonhosted.org/packages/17/7a/795cb6dfee561961c30b800f0ed616b923a2ec6258b5def2a00bf8231334/yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb", size = 345825, upload-time = "2025-10-06T14:09:52.142Z" }, + { url = "https://files.pythonhosted.org/packages/d7/93/a58f4d596d2be2ae7bab1a5846c4d270b894958845753b2c606d666744d3/yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2", size = 386705, upload-time = "2025-10-06T14:09:54.128Z" }, + { url = "https://files.pythonhosted.org/packages/61/92/682279d0e099d0e14d7fd2e176bd04f48de1484f56546a3e1313cd6c8e7c/yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82", size = 396518, upload-time = "2025-10-06T14:09:55.762Z" }, + { url = "https://files.pythonhosted.org/packages/db/0f/0d52c98b8a885aeda831224b78f3be7ec2e1aa4a62091f9f9188c3c65b56/yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a", size = 377267, upload-time = "2025-10-06T14:09:57.958Z" }, + { url = "https://files.pythonhosted.org/packages/22/42/d2685e35908cbeaa6532c1fc73e89e7f2efb5d8a7df3959ea8e37177c5a3/yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124", size = 365797, upload-time = "2025-10-06T14:09:59.527Z" }, + { url = "https://files.pythonhosted.org/packages/a2/83/cf8c7bcc6355631762f7d8bdab920ad09b82efa6b722999dfb05afa6cfac/yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa", size = 365535, upload-time = "2025-10-06T14:10:01.139Z" }, + { url = "https://files.pythonhosted.org/packages/25/e1/5302ff9b28f0c59cac913b91fe3f16c59a033887e57ce9ca5d41a3a94737/yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7", size = 382324, upload-time = "2025-10-06T14:10:02.756Z" }, + { url = "https://files.pythonhosted.org/packages/bf/cd/4617eb60f032f19ae3a688dc990d8f0d89ee0ea378b61cac81ede3e52fae/yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d", size = 383803, upload-time = "2025-10-06T14:10:04.552Z" }, + { url = "https://files.pythonhosted.org/packages/59/65/afc6e62bb506a319ea67b694551dab4a7e6fb7bf604e9bd9f3e11d575fec/yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520", size = 374220, upload-time = "2025-10-06T14:10:06.489Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3d/68bf18d50dc674b942daec86a9ba922d3113d8399b0e52b9897530442da2/yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8", size = 81589, upload-time = "2025-10-06T14:10:09.254Z" }, + { url = "https://files.pythonhosted.org/packages/c8/9a/6ad1a9b37c2f72874f93e691b2e7ecb6137fb2b899983125db4204e47575/yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c", size = 87213, upload-time = "2025-10-06T14:10:11.369Z" }, + { url = "https://files.pythonhosted.org/packages/44/c5/c21b562d1680a77634d748e30c653c3ca918beb35555cff24986fff54598/yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74", size = 81330, upload-time = "2025-10-06T14:10:13.112Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f3/d67de7260456ee105dc1d162d43a019ecad6b91e2f51809d6cddaa56690e/yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53", size = 139980, upload-time = "2025-10-06T14:10:14.601Z" }, + { url = "https://files.pythonhosted.org/packages/01/88/04d98af0b47e0ef42597b9b28863b9060bb515524da0a65d5f4db160b2d5/yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a", size = 93424, upload-time = "2025-10-06T14:10:16.115Z" }, + { url = "https://files.pythonhosted.org/packages/18/91/3274b215fd8442a03975ce6bee5fe6aa57a8326b29b9d3d56234a1dca244/yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c", size = 93821, upload-time = "2025-10-06T14:10:17.993Z" }, + { url = "https://files.pythonhosted.org/packages/61/3a/caf4e25036db0f2da4ca22a353dfeb3c9d3c95d2761ebe9b14df8fc16eb0/yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601", size = 373243, upload-time = "2025-10-06T14:10:19.44Z" }, + { url = "https://files.pythonhosted.org/packages/6e/9e/51a77ac7516e8e7803b06e01f74e78649c24ee1021eca3d6a739cb6ea49c/yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a", size = 342361, upload-time = "2025-10-06T14:10:21.124Z" }, + { url = "https://files.pythonhosted.org/packages/d4/f8/33b92454789dde8407f156c00303e9a891f1f51a0330b0fad7c909f87692/yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df", size = 387036, upload-time = "2025-10-06T14:10:22.902Z" }, + { url = "https://files.pythonhosted.org/packages/d9/9a/c5db84ea024f76838220280f732970aa4ee154015d7f5c1bfb60a267af6f/yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2", size = 397671, upload-time = "2025-10-06T14:10:24.523Z" }, + { url = "https://files.pythonhosted.org/packages/11/c9/cd8538dc2e7727095e0c1d867bad1e40c98f37763e6d995c1939f5fdc7b1/yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b", size = 377059, upload-time = "2025-10-06T14:10:26.406Z" }, + { url = "https://files.pythonhosted.org/packages/a1/b9/ab437b261702ced75122ed78a876a6dec0a1b0f5e17a4ac7a9a2482d8abe/yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273", size = 365356, upload-time = "2025-10-06T14:10:28.461Z" }, + { url = "https://files.pythonhosted.org/packages/b2/9d/8e1ae6d1d008a9567877b08f0ce4077a29974c04c062dabdb923ed98e6fe/yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a", size = 361331, upload-time = "2025-10-06T14:10:30.541Z" }, + { url = "https://files.pythonhosted.org/packages/ca/5a/09b7be3905962f145b73beb468cdd53db8aa171cf18c80400a54c5b82846/yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d", size = 382590, upload-time = "2025-10-06T14:10:33.352Z" }, + { url = "https://files.pythonhosted.org/packages/aa/7f/59ec509abf90eda5048b0bc3e2d7b5099dffdb3e6b127019895ab9d5ef44/yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02", size = 385316, upload-time = "2025-10-06T14:10:35.034Z" }, + { url = "https://files.pythonhosted.org/packages/e5/84/891158426bc8036bfdfd862fabd0e0fa25df4176ec793e447f4b85cf1be4/yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67", size = 374431, upload-time = "2025-10-06T14:10:37.76Z" }, + { url = "https://files.pythonhosted.org/packages/bb/49/03da1580665baa8bef5e8ed34c6df2c2aca0a2f28bf397ed238cc1bbc6f2/yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95", size = 81555, upload-time = "2025-10-06T14:10:39.649Z" }, + { url = "https://files.pythonhosted.org/packages/9a/ee/450914ae11b419eadd067c6183ae08381cfdfcb9798b90b2b713bbebddda/yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d", size = 86965, upload-time = "2025-10-06T14:10:41.313Z" }, + { url = "https://files.pythonhosted.org/packages/98/4d/264a01eae03b6cf629ad69bae94e3b0e5344741e929073678e84bf7a3e3b/yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b", size = 81205, upload-time = "2025-10-06T14:10:43.167Z" }, + { url = "https://files.pythonhosted.org/packages/88/fc/6908f062a2f77b5f9f6d69cecb1747260831ff206adcbc5b510aff88df91/yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10", size = 146209, upload-time = "2025-10-06T14:10:44.643Z" }, + { url = "https://files.pythonhosted.org/packages/65/47/76594ae8eab26210b4867be6f49129861ad33da1f1ebdf7051e98492bf62/yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3", size = 95966, upload-time = "2025-10-06T14:10:46.554Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ce/05e9828a49271ba6b5b038b15b3934e996980dd78abdfeb52a04cfb9467e/yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9", size = 97312, upload-time = "2025-10-06T14:10:48.007Z" }, + { url = "https://files.pythonhosted.org/packages/d1/c5/7dffad5e4f2265b29c9d7ec869c369e4223166e4f9206fc2243ee9eea727/yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f", size = 361967, upload-time = "2025-10-06T14:10:49.997Z" }, + { url = "https://files.pythonhosted.org/packages/50/b2/375b933c93a54bff7fc041e1a6ad2c0f6f733ffb0c6e642ce56ee3b39970/yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0", size = 323949, upload-time = "2025-10-06T14:10:52.004Z" }, + { url = "https://files.pythonhosted.org/packages/66/50/bfc2a29a1d78644c5a7220ce2f304f38248dc94124a326794e677634b6cf/yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e", size = 361818, upload-time = "2025-10-06T14:10:54.078Z" }, + { url = "https://files.pythonhosted.org/packages/46/96/f3941a46af7d5d0f0498f86d71275696800ddcdd20426298e572b19b91ff/yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708", size = 372626, upload-time = "2025-10-06T14:10:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/c1/42/8b27c83bb875cd89448e42cd627e0fb971fa1675c9ec546393d18826cb50/yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f", size = 341129, upload-time = "2025-10-06T14:10:57.985Z" }, + { url = "https://files.pythonhosted.org/packages/49/36/99ca3122201b382a3cf7cc937b95235b0ac944f7e9f2d5331d50821ed352/yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d", size = 346776, upload-time = "2025-10-06T14:10:59.633Z" }, + { url = "https://files.pythonhosted.org/packages/85/b4/47328bf996acd01a4c16ef9dcd2f59c969f495073616586f78cd5f2efb99/yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8", size = 334879, upload-time = "2025-10-06T14:11:01.454Z" }, + { url = "https://files.pythonhosted.org/packages/c2/ad/b77d7b3f14a4283bffb8e92c6026496f6de49751c2f97d4352242bba3990/yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5", size = 350996, upload-time = "2025-10-06T14:11:03.452Z" }, + { url = "https://files.pythonhosted.org/packages/81/c8/06e1d69295792ba54d556f06686cbd6a7ce39c22307100e3fb4a2c0b0a1d/yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f", size = 356047, upload-time = "2025-10-06T14:11:05.115Z" }, + { url = "https://files.pythonhosted.org/packages/4b/b8/4c0e9e9f597074b208d18cef227d83aac36184bfbc6eab204ea55783dbc5/yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62", size = 342947, upload-time = "2025-10-06T14:11:08.137Z" }, + { url = "https://files.pythonhosted.org/packages/e0/e5/11f140a58bf4c6ad7aca69a892bff0ee638c31bea4206748fc0df4ebcb3a/yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03", size = 86943, upload-time = "2025-10-06T14:11:10.284Z" }, + { url = "https://files.pythonhosted.org/packages/31/74/8b74bae38ed7fe6793d0c15a0c8207bbb819cf287788459e5ed230996cdd/yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249", size = 93715, upload-time = "2025-10-06T14:11:11.739Z" }, + { url = "https://files.pythonhosted.org/packages/69/66/991858aa4b5892d57aef7ee1ba6b4d01ec3b7eb3060795d34090a3ca3278/yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b", size = 83857, upload-time = "2025-10-06T14:11:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/46/b3/e20ef504049f1a1c54a814b4b9bed96d1ac0e0610c3b4da178f87209db05/yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4", size = 140520, upload-time = "2025-10-06T14:11:15.465Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/3532d990fdbab02e5ede063676b5c4260e7f3abea2151099c2aa745acc4c/yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683", size = 93504, upload-time = "2025-10-06T14:11:17.106Z" }, + { url = "https://files.pythonhosted.org/packages/11/63/ff458113c5c2dac9a9719ac68ee7c947cb621432bcf28c9972b1c0e83938/yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b", size = 94282, upload-time = "2025-10-06T14:11:19.064Z" }, + { url = "https://files.pythonhosted.org/packages/a7/bc/315a56aca762d44a6aaaf7ad253f04d996cb6b27bad34410f82d76ea8038/yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e", size = 372080, upload-time = "2025-10-06T14:11:20.996Z" }, + { url = "https://files.pythonhosted.org/packages/3f/3f/08e9b826ec2e099ea6e7c69a61272f4f6da62cb5b1b63590bb80ca2e4a40/yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590", size = 338696, upload-time = "2025-10-06T14:11:22.847Z" }, + { url = "https://files.pythonhosted.org/packages/e3/9f/90360108e3b32bd76789088e99538febfea24a102380ae73827f62073543/yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2", size = 387121, upload-time = "2025-10-06T14:11:24.889Z" }, + { url = "https://files.pythonhosted.org/packages/98/92/ab8d4657bd5b46a38094cfaea498f18bb70ce6b63508fd7e909bd1f93066/yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da", size = 394080, upload-time = "2025-10-06T14:11:27.307Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e7/d8c5a7752fef68205296201f8ec2bf718f5c805a7a7e9880576c67600658/yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784", size = 372661, upload-time = "2025-10-06T14:11:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/b6/2e/f4d26183c8db0bb82d491b072f3127fb8c381a6206a3a56332714b79b751/yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b", size = 364645, upload-time = "2025-10-06T14:11:31.423Z" }, + { url = "https://files.pythonhosted.org/packages/80/7c/428e5812e6b87cd00ee8e898328a62c95825bf37c7fa87f0b6bb2ad31304/yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694", size = 355361, upload-time = "2025-10-06T14:11:33.055Z" }, + { url = "https://files.pythonhosted.org/packages/ec/2a/249405fd26776f8b13c067378ef4d7dd49c9098d1b6457cdd152a99e96a9/yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d", size = 381451, upload-time = "2025-10-06T14:11:35.136Z" }, + { url = "https://files.pythonhosted.org/packages/67/a8/fb6b1adbe98cf1e2dd9fad71003d3a63a1bc22459c6e15f5714eb9323b93/yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd", size = 383814, upload-time = "2025-10-06T14:11:37.094Z" }, + { url = "https://files.pythonhosted.org/packages/d9/f9/3aa2c0e480fb73e872ae2814c43bc1e734740bb0d54e8cb2a95925f98131/yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da", size = 370799, upload-time = "2025-10-06T14:11:38.83Z" }, + { url = "https://files.pythonhosted.org/packages/50/3c/af9dba3b8b5eeb302f36f16f92791f3ea62e3f47763406abf6d5a4a3333b/yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2", size = 82990, upload-time = "2025-10-06T14:11:40.624Z" }, + { url = "https://files.pythonhosted.org/packages/ac/30/ac3a0c5bdc1d6efd1b41fa24d4897a4329b3b1e98de9449679dd327af4f0/yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79", size = 88292, upload-time = "2025-10-06T14:11:42.578Z" }, + { url = "https://files.pythonhosted.org/packages/df/0a/227ab4ff5b998a1b7410abc7b46c9b7a26b0ca9e86c34ba4b8d8bc7c63d5/yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33", size = 82888, upload-time = "2025-10-06T14:11:44.863Z" }, + { url = "https://files.pythonhosted.org/packages/06/5e/a15eb13db90abd87dfbefb9760c0f3f257ac42a5cac7e75dbc23bed97a9f/yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1", size = 146223, upload-time = "2025-10-06T14:11:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/18/82/9665c61910d4d84f41a5bf6837597c89e665fa88aa4941080704645932a9/yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca", size = 95981, upload-time = "2025-10-06T14:11:48.845Z" }, + { url = "https://files.pythonhosted.org/packages/5d/9a/2f65743589809af4d0a6d3aa749343c4b5f4c380cc24a8e94a3c6625a808/yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53", size = 97303, upload-time = "2025-10-06T14:11:50.897Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ab/5b13d3e157505c43c3b43b5a776cbf7b24a02bc4cccc40314771197e3508/yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c", size = 361820, upload-time = "2025-10-06T14:11:52.549Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/242a5ef4677615cf95330cfc1b4610e78184400699bdda0acb897ef5e49a/yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf", size = 323203, upload-time = "2025-10-06T14:11:54.225Z" }, + { url = "https://files.pythonhosted.org/packages/8c/96/475509110d3f0153b43d06164cf4195c64d16999e0c7e2d8a099adcd6907/yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face", size = 363173, upload-time = "2025-10-06T14:11:56.069Z" }, + { url = "https://files.pythonhosted.org/packages/c9/66/59db471aecfbd559a1fd48aedd954435558cd98c7d0da8b03cc6c140a32c/yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b", size = 373562, upload-time = "2025-10-06T14:11:58.783Z" }, + { url = "https://files.pythonhosted.org/packages/03/1f/c5d94abc91557384719da10ff166b916107c1b45e4d0423a88457071dd88/yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486", size = 339828, upload-time = "2025-10-06T14:12:00.686Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/aa6a143d3afba17b6465733681c70cf175af89f76ec8d9286e08437a7454/yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138", size = 347551, upload-time = "2025-10-06T14:12:02.628Z" }, + { url = "https://files.pythonhosted.org/packages/43/3c/45a2b6d80195959239a7b2a8810506d4eea5487dce61c2a3393e7fc3c52e/yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a", size = 334512, upload-time = "2025-10-06T14:12:04.871Z" }, + { url = "https://files.pythonhosted.org/packages/86/a0/c2ab48d74599c7c84cb104ebd799c5813de252bea0f360ffc29d270c2caa/yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529", size = 352400, upload-time = "2025-10-06T14:12:06.624Z" }, + { url = "https://files.pythonhosted.org/packages/32/75/f8919b2eafc929567d3d8411f72bdb1a2109c01caaab4ebfa5f8ffadc15b/yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093", size = 357140, upload-time = "2025-10-06T14:12:08.362Z" }, + { url = "https://files.pythonhosted.org/packages/cf/72/6a85bba382f22cf78add705d8c3731748397d986e197e53ecc7835e76de7/yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c", size = 341473, upload-time = "2025-10-06T14:12:10.994Z" }, + { url = "https://files.pythonhosted.org/packages/35/18/55e6011f7c044dc80b98893060773cefcfdbf60dfefb8cb2f58b9bacbd83/yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e", size = 89056, upload-time = "2025-10-06T14:12:13.317Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/0f0dccb6e59a9e7f122c5afd43568b1d31b8ab7dda5f1b01fb5c7025c9a9/yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27", size = 96292, upload-time = "2025-10-06T14:12:15.398Z" }, + { url = "https://files.pythonhosted.org/packages/48/b7/503c98092fb3b344a179579f55814b613c1fbb1c23b3ec14a7b008a66a6e/yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1", size = 85171, upload-time = "2025-10-06T14:12:16.935Z" }, + { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, +] + +[[package]] +name = "zipp" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, +] From 3eb39014453aad7f71c5e5bd7ab69cda73756929 Mon Sep 17 00:00:00 2001 From: Sahan Date: Wed, 17 Dec 2025 22:12:03 +0000 Subject: [PATCH 21/25] uv support --- CLAUDE.md | 129 ++++++++++++++++++ README.md | 10 +- pyproject.toml | 53 +++++++ requirements.txt | 31 ----- .../generate_and_eval_single_sample_modal.py | 2 +- scripts/generate_baseline_time_modal.py | 2 +- setup.py | 8 -- 7 files changed, 192 insertions(+), 43 deletions(-) create mode 100644 CLAUDE.md create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 setup.py diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..a5a69a91 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,129 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +KernelBench is a benchmark for evaluating LLMs' ability to generate efficient GPU kernels. It tests whether models can transpile PyTorch operators into custom CUDA/Triton/CuTe/TileLang kernels that are both correct and performant. + +The benchmark has 4 levels: +- **Level 1**: Single-kernel operators (100 problems) - matmul, conv, layer norm +- **Level 2**: Simple fusion patterns (100 problems) - conv+bias+relu, matmul+scale+sigmoid +- **Level 3**: Full model architectures (50 problems) - MobileNet, VGG, MiniGPT, Mamba +- **Level 4**: HuggingFace model architectures + +## Setup + +### Using uv (recommended) +```bash +uv sync +``` + +### Using pip +```bash +conda create --name kernel-bench python=3.10 +conda activate kernel-bench +pip install -e . +``` + +Configure API keys by copying `.env.example` to `.env` and filling in keys for LLM providers (OpenAI, Anthropic, Google, DeepSeek, Together AI, etc.). + +## Common Commands + +### Single Problem Generation + Evaluation +```bash +python3 scripts/generate_and_eval_single_sample.py dataset_src=huggingface level=1 problem_id=1 +``` + +### Batch Generation +```bash +python3 scripts/generate_samples.py run_name=my_run dataset_src=huggingface level=1 num_workers=50 server_type=deepseek model_name=deepseek-chat temperature=0 +``` + +### Batch Evaluation +```bash +python3 scripts/eval_from_generations.py run_name=my_run dataset_src=local level=1 num_gpu_devices=8 timeout=300 +``` + +### Compute Benchmark Metrics +```bash +python3 scripts/benchmark_eval_analysis.py run_name=my_run level=1 hardware=L40S baseline=baseline_time_torch +``` + +### Generate Baseline Times (for new hardware) +```bash +python3 scripts/generate_baseline_time.py +python3 scripts/generate_baseline_time_modal.py # for Modal cloud +``` + +### Quick Check Single Kernel +```bash +python3 scripts/run_and_check.py +``` + +### Run Tests +```bash +pytest src/unit_tests/ +``` + +## Key Configuration Parameters + +Scripts use `pydra` for configuration (CLI args override defaults): + +- `dataset_src`: "huggingface" or "local" +- `level`: 1-4 (benchmark level) +- `problem_id`: problem number within level +- `gpu_arch`: GPU architecture - "Ada", "Hopper", "Ampere", "Turing", or SM version +- `backend`: "cuda", "triton", "cute", "tilelang" +- `precision`: "fp32", "fp16", "bf16" +- `server_type`: LLM provider - "openai", "anthropic", "google", "deepseek", "together", "local", etc. +- `model_name`: model identifier (e.g., "gpt-4", "claude-3-opus", "deepseek-chat") +- `eval_mode`: "local" (requires GPU) or "modal" (cloud GPU) +- `timing_method`: "cuda_event", "do_bench", "do_bench_impl", "host_time" +- `prompt_option`: "zero_shot", "one_shot", "few_shot" + +## Architecture + +### Core Library (`src/`) +- `eval.py` - Correctness checking and timing evaluation +- `dataset.py` - Dataset loading (local files or HuggingFace) +- `utils.py` - LLM querying via LiteLLM, code extraction, GPU arch setting +- `compile.py` - CUDA kernel compilation and caching +- `timing.py` - Multiple timing methods (CUDA events, Triton do_bench, host timing) +- `score.py` - Metric calculation including `fast_p` (fraction correct AND faster than threshold) +- `prompt_constructor_toml.py` - TOML-based prompt composition system + +### Scripts (`scripts/`) +- `generate_and_eval_single_sample.py` / `*_modal.py` - Single problem workflow +- `generate_samples.py` - Batch LLM generation +- `eval_from_generations.py` - Evaluate pre-generated kernels +- `benchmark_eval_analysis.py` - Compute benchmark metrics + +### Benchmark Dataset (`KernelBench/`) +Contains problem files organized by level. Each problem is a Python file with a `Model` class and `get_inputs()`/`get_init_inputs()` functions. + +### Prompts (`src/prompts/`) +- `prompts.toml` - TOML configuration defining prompt templates, backends, precision modes +- Example files (`model_*.py`) - Few-shot examples for different backends +- `hardware/gpu_specs.py` - GPU hardware specifications for prompts + +### Results (`results/timing/`) +Pre-computed PyTorch baseline times for various GPUs (H100, L40S, A100, T4, etc.) and configurations (eager, torch.compile variants). + +## Evaluation Flow + +1. Load problem from dataset (local or HuggingFace) +2. Construct prompt using TOML templates + optional hardware info +3. Query LLM via LiteLLM +4. Extract code from response +5. Compile kernel with specified GPU architecture +6. Check correctness (n_correctness times with random inputs) +7. Measure timing (reference PyTorch vs generated kernel) +8. Compute metrics: correctness rate, speedup, `fast_p` score + +## Key Metric: `fast_p` + +The `fast_p` metric measures fraction of tasks that are both correct AND have speedup > p: +- `fast_0` = correctness rate +- `fast_1` = fraction correct and faster than PyTorch +- `fast_2` = fraction correct and at least 2x faster diff --git a/README.md b/README.md index 91e24d8d..ccba0154 100644 --- a/README.md +++ b/README.md @@ -76,11 +76,17 @@ KernelBench/ ``` ## 🔧 Set up + +### Using uv (recommended) +```bash +uv sync ``` + +### Using pip +```bash conda create --name kernel-bench python=3.10 conda activate kernel-bench -pip install -r requirements.txt -pip install -e . +pip install -e . ``` We use `litellm` for API calls. Please set your keys by creating a `.env` following our `.env.example`. diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..e45a3055 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,53 @@ +[project] +name = "kernelbench" +version = "0.1.0" +description = "A benchmark for evaluating LLMs' ability to generate efficient GPU kernels" +readme = "README.md" +license = "MIT" +requires-python = ">=3.10" +dependencies = [ + # Frameworks + "torch==2.9.0", + "transformers", + "datasets", + "modal", + + # DSLs + "nvidia-cutlass-dsl", + "tilelang", + "triton", + + # Helper + "tqdm", + "packaging", + "pydra_config", + "pytest", + "ninja", + "cupy-cuda12x", + + # Numerics + "einops", + "python-dotenv", + "numpy", + + # LLM API access + "openai", + "litellm[proxy]", +] + +[project.optional-dependencies] +dev = [ + "pytest", +] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["src"] + +[dependency-groups] +dev = [ + "pytest", +] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 253e57da..00000000 --- a/requirements.txt +++ /dev/null @@ -1,31 +0,0 @@ -# Frameworks -# we use latest PyTorch stable release -torch==2.9.0 - -# we shall upgrade torch for blackwell when it is stable -transformers -datasets -modal - -# DSLs -nvidia-cutlass-dsl -tilelang -triton - -# helper -tqdm -packaging -pydra_config -pytest -ninja -cupy-cuda12x - -# Numerics -einops -dotenv -numpy - -# use litellm for cloud providers and openai for local -openai -litellm[proxy] - diff --git a/scripts/generate_and_eval_single_sample_modal.py b/scripts/generate_and_eval_single_sample_modal.py index f41ba95f..3dd4759d 100644 --- a/scripts/generate_and_eval_single_sample_modal.py +++ b/scripts/generate_and_eval_single_sample_modal.py @@ -102,7 +102,7 @@ def __repr__(self): "g++-10", "clang" # note i skip a step ) - .pip_install_from_requirements(os.path.join(REPO_TOP_DIR, "requirements.txt")) + .uv_sync(uv_project_dir=REPO_TOP_DIR) .add_local_python_source("src") ) diff --git a/scripts/generate_baseline_time_modal.py b/scripts/generate_baseline_time_modal.py index a0039193..08f9ab91 100644 --- a/scripts/generate_baseline_time_modal.py +++ b/scripts/generate_baseline_time_modal.py @@ -91,7 +91,7 @@ def __init__(self): "g++-10", "clang" # note i skip a step ) - .pip_install_from_requirements(os.path.join(REPO_TOP_PATH, "requirements.txt")) + .uv_sync(uv_project_dir=REPO_TOP_PATH) .add_local_dir( KERNEL_BENCH_PATH, remote_path="/root/KernelBench" diff --git a/setup.py b/setup.py deleted file mode 100644 index 220b79d1..00000000 --- a/setup.py +++ /dev/null @@ -1,8 +0,0 @@ -from setuptools import setup - -if __name__ == "__main__": - setup( - name="src", - version="0.0.1", - packages=["src"], - ) From 3ac6148154b3867cc87da3b6e989586f217c2cae Mon Sep 17 00:00:00 2001 From: Sahan Date: Tue, 23 Dec 2025 07:25:09 +0000 Subject: [PATCH 22/25] uv support From bdb7abbe4bab72cafff23be2c7570eed53143db8 Mon Sep 17 00:00:00 2001 From: Sahan Date: Tue, 23 Dec 2025 07:26:02 +0000 Subject: [PATCH 23/25] uv support From c7c32075757b9aa3a5b7c5c0873b69884bb5509a Mon Sep 17 00:00:00 2001 From: Sahan Paliskara Date: Tue, 23 Dec 2025 02:26:53 -0500 Subject: [PATCH 24/25] Delete CLAUDE.md --- CLAUDE.md | 129 ------------------------------------------------------ 1 file changed, 129 deletions(-) delete mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index a5a69a91..00000000 --- a/CLAUDE.md +++ /dev/null @@ -1,129 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -KernelBench is a benchmark for evaluating LLMs' ability to generate efficient GPU kernels. It tests whether models can transpile PyTorch operators into custom CUDA/Triton/CuTe/TileLang kernels that are both correct and performant. - -The benchmark has 4 levels: -- **Level 1**: Single-kernel operators (100 problems) - matmul, conv, layer norm -- **Level 2**: Simple fusion patterns (100 problems) - conv+bias+relu, matmul+scale+sigmoid -- **Level 3**: Full model architectures (50 problems) - MobileNet, VGG, MiniGPT, Mamba -- **Level 4**: HuggingFace model architectures - -## Setup - -### Using uv (recommended) -```bash -uv sync -``` - -### Using pip -```bash -conda create --name kernel-bench python=3.10 -conda activate kernel-bench -pip install -e . -``` - -Configure API keys by copying `.env.example` to `.env` and filling in keys for LLM providers (OpenAI, Anthropic, Google, DeepSeek, Together AI, etc.). - -## Common Commands - -### Single Problem Generation + Evaluation -```bash -python3 scripts/generate_and_eval_single_sample.py dataset_src=huggingface level=1 problem_id=1 -``` - -### Batch Generation -```bash -python3 scripts/generate_samples.py run_name=my_run dataset_src=huggingface level=1 num_workers=50 server_type=deepseek model_name=deepseek-chat temperature=0 -``` - -### Batch Evaluation -```bash -python3 scripts/eval_from_generations.py run_name=my_run dataset_src=local level=1 num_gpu_devices=8 timeout=300 -``` - -### Compute Benchmark Metrics -```bash -python3 scripts/benchmark_eval_analysis.py run_name=my_run level=1 hardware=L40S baseline=baseline_time_torch -``` - -### Generate Baseline Times (for new hardware) -```bash -python3 scripts/generate_baseline_time.py -python3 scripts/generate_baseline_time_modal.py # for Modal cloud -``` - -### Quick Check Single Kernel -```bash -python3 scripts/run_and_check.py -``` - -### Run Tests -```bash -pytest src/unit_tests/ -``` - -## Key Configuration Parameters - -Scripts use `pydra` for configuration (CLI args override defaults): - -- `dataset_src`: "huggingface" or "local" -- `level`: 1-4 (benchmark level) -- `problem_id`: problem number within level -- `gpu_arch`: GPU architecture - "Ada", "Hopper", "Ampere", "Turing", or SM version -- `backend`: "cuda", "triton", "cute", "tilelang" -- `precision`: "fp32", "fp16", "bf16" -- `server_type`: LLM provider - "openai", "anthropic", "google", "deepseek", "together", "local", etc. -- `model_name`: model identifier (e.g., "gpt-4", "claude-3-opus", "deepseek-chat") -- `eval_mode`: "local" (requires GPU) or "modal" (cloud GPU) -- `timing_method`: "cuda_event", "do_bench", "do_bench_impl", "host_time" -- `prompt_option`: "zero_shot", "one_shot", "few_shot" - -## Architecture - -### Core Library (`src/`) -- `eval.py` - Correctness checking and timing evaluation -- `dataset.py` - Dataset loading (local files or HuggingFace) -- `utils.py` - LLM querying via LiteLLM, code extraction, GPU arch setting -- `compile.py` - CUDA kernel compilation and caching -- `timing.py` - Multiple timing methods (CUDA events, Triton do_bench, host timing) -- `score.py` - Metric calculation including `fast_p` (fraction correct AND faster than threshold) -- `prompt_constructor_toml.py` - TOML-based prompt composition system - -### Scripts (`scripts/`) -- `generate_and_eval_single_sample.py` / `*_modal.py` - Single problem workflow -- `generate_samples.py` - Batch LLM generation -- `eval_from_generations.py` - Evaluate pre-generated kernels -- `benchmark_eval_analysis.py` - Compute benchmark metrics - -### Benchmark Dataset (`KernelBench/`) -Contains problem files organized by level. Each problem is a Python file with a `Model` class and `get_inputs()`/`get_init_inputs()` functions. - -### Prompts (`src/prompts/`) -- `prompts.toml` - TOML configuration defining prompt templates, backends, precision modes -- Example files (`model_*.py`) - Few-shot examples for different backends -- `hardware/gpu_specs.py` - GPU hardware specifications for prompts - -### Results (`results/timing/`) -Pre-computed PyTorch baseline times for various GPUs (H100, L40S, A100, T4, etc.) and configurations (eager, torch.compile variants). - -## Evaluation Flow - -1. Load problem from dataset (local or HuggingFace) -2. Construct prompt using TOML templates + optional hardware info -3. Query LLM via LiteLLM -4. Extract code from response -5. Compile kernel with specified GPU architecture -6. Check correctness (n_correctness times with random inputs) -7. Measure timing (reference PyTorch vs generated kernel) -8. Compute metrics: correctness rate, speedup, `fast_p` score - -## Key Metric: `fast_p` - -The `fast_p` metric measures fraction of tasks that are both correct AND have speedup > p: -- `fast_0` = correctness rate -- `fast_1` = fraction correct and faster than PyTorch -- `fast_2` = fraction correct and at least 2x faster From 64996a31ad0f2d55d4628f2d87bd7e3c4c9c289d Mon Sep 17 00:00:00 2001 From: Sahan Paliskara Date: Tue, 23 Dec 2025 02:27:29 -0500 Subject: [PATCH 25/25] Delete notebooks/benchmarking.ipynb --- notebooks/benchmarking.ipynb | 1708 ---------------------------------- 1 file changed, 1708 deletions(-) delete mode 100644 notebooks/benchmarking.ipynb diff --git a/notebooks/benchmarking.ipynb b/notebooks/benchmarking.ipynb deleted file mode 100644 index 5bb7470d..00000000 --- a/notebooks/benchmarking.ipynb +++ /dev/null @@ -1,1708 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "view-in-github" - }, - "source": [ - "\"Open" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "_PCU0gUyzX2c" - }, - "source": [ - "# A Practical Guide to GPU Benchmarking\n", - "\n", - "> **Note on outputs:** The outputs in this notebook were generated on an **NVIDIA H200 GPU** (90MB L2 cache, 4.8 TB/s memory bandwidth). Your results may vary depending on your hardware. The H200's large cache means cache effects are less dramatic than on older GPUs like A100 (40MB L2) or consumer cards.\n", - "\n", - "## TL;DR — How to Benchmark Correctly\n", - "\n", - "Benchmarking on GPUs requires a strict protocol to avoid measuring Python overhead or caching artifacts. To get reliable numbers, you must:\n", - "\n", - "1. **Warmup:** Run the kernel ~10-50 times first to settle compilation and memory allocators.\n", - "2. **Sample Extensively:** Don't trust one run. Collect 100+ samples to build a statistical distribution.\n", - "3. **Flush the L2 Cache:** Between *every* sample, flush the cache to force a cold cache state (simulating real-world inference).\n", - "4. **Use Device Timers:** Use `torch.cuda.Event` instead of `time.time()` to measure execution on the GPU, not the CPU driver.\n", - "5. **Aggregate Robustly:** Aggregate over many samples to filter out jitter/outliers.\n", - "6. **Wait for sidestreams to finish:** Ensure no side-streams are running or wait for all of them to finish before reporting a time.\n", - "\n", - "*Pro-Tip:* **KernelBench's timing module** (`src/timing.py`) implements all these best practices. Use `get_timing_function(\"cuda_event\")` for trusted code or `get_timing_function(\"host_time\")` for evaluating untrusted/agent-generated code.\n", - "\n", - "-----\n", - "\n", - "If are using an LLM agent to write GPU kernels (and evaluating against something like say [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), or just trying to optimize a custom GPU kernel, you are eventually going to ask: **\"How fast is this thing?\"**\n", - "\n", - "This notebook is heavily inspired by [this great guide](https://www.youtube.com/watch?v=1i7dxoAfKOU) from the **GPU MODE** community and the practical \"footguns\" (traps) encountered while building benchmarking harnesses for LLM-generated code. Our goal here is simplicity and keeping things Pythonic—for more advanced techniques, see the footnotes.\n", - "\n", - "We won't just list best practices. Instead, we are going to build a benchmarking harness from scratch, make every common mistake, debug why the numbers are wrong, and iterate our way to a robust solution. So let's start things out by doing the most naive thing by using `time.time()`!" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:36.427802Z", - "iopub.status.busy": "2025-12-17T21:24:36.427684Z", - "iopub.status.idle": "2025-12-17T21:24:40.995279Z", - "shell.execute_reply": "2025-12-17T21:24:40.994328Z" - }, - "id": "PKWz_W7uzX2f", - "outputId": "8751fd78-569b-4080-f21a-60bbb5ee8caf" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/simon/miniconda3/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using GPU: NVIDIA H200\n" - ] - } - ], - "source": [ - "# @title Environment Setup\n", - "# Ensure we have the necessary libraries and a GPU available\n", - "# !pip install -q triton matplotlib numpy torch\n", - "# !pip install -e .. # Install KernelBench locally for timing utilities\n", - "\n", - "import sys\n", - "sys.path.insert(0, '..') # Add parent directory to path for imports\n", - "\n", - "import torch\n", - "import time\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import triton\n", - "\n", - "# Import KernelBench's timing module\n", - "from src import timing\n", - "from src.timing import clear_l2_cache, get_timing_stats, get_timing_function\n", - "\n", - "if not torch.cuda.is_available():\n", - " raise RuntimeError(\"This notebook requires a GPU. Please enable GPU in your runtime settings.\")\n", - "\n", - "# Device configuration\n", - "# For multi-GPU systems, set CUDA_VISIBLE_DEVICES=X before running to select a specific GPU\n", - "# The selected GPU will appear as cuda:0\n", - "DEVICE = \"cuda:0\"\n", - "print(f\"Using GPU: {torch.cuda.get_device_name(DEVICE)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "kjWByrwvzX2f" - }, - "source": [ - "## The Journey: Benchmarking a Matrix Multiplication\n", - "\n", - "Let's define a simple workload to test. We want to measure the performance of a standard Matrix Multiplication." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:40.997969Z", - "iopub.status.busy": "2025-12-17T21:24:40.997722Z", - "iopub.status.idle": "2025-12-17T21:24:41.252072Z", - "shell.execute_reply": "2025-12-17T21:24:41.250967Z" - }, - "id": "gxtKes5lzX2g", - "outputId": "5890bae4-5b9a-4366-8947-367146593158" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Output shape: torch.Size([8192, 8192])\n", - "Op ran successfully\n" - ] - } - ], - "source": [ - "# A standard size for testing\n", - "N = 8192\n", - "\n", - "def get_data(n=N, device=DEVICE):\n", - " \"\"\"Generate random float32 matrices for benchmarking.\"\"\"\n", - " return torch.randn(n, n, device=device), torch.randn(n, n, device=device)\n", - "\n", - "def simple_mm(a, b):\n", - " \"\"\"Our kernel under test: standard matrix multiplication.\"\"\"\n", - " return torch.matmul(a, b)\n", - "\n", - "# Let's verify it runs\n", - "a, b = get_data()\n", - "res = simple_mm(a, b)\n", - "print(f\"Output shape: {res.shape}\")\n", - "print(\"Op ran successfully\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "GWlsBEVyzX2g" - }, - "source": [ - "### Attempt 1: The Naive Timer (The Asynchronous Illusion)\n", - "\n", - "The most intuitive way to time code in Python is using `time.time()`. Let's try that first." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:41.254622Z", - "iopub.status.busy": "2025-12-17T21:24:41.254499Z", - "iopub.status.idle": "2025-12-17T21:24:41.258106Z", - "shell.execute_reply": "2025-12-17T21:24:41.257414Z" - }, - "id": "LynIxLaRzX2g", - "outputId": "72548dad-6570-4eaa-ce07-923556fe70b4" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Naive time: 0.5236 ms\n" - ] - } - ], - "source": [ - "def benchmark_naive(func, *args):\n", - " \"\"\"WRONG: Measures kernel launch time, not execution time.\"\"\"\n", - " start = time.time()\n", - " func(*args)\n", - " end = time.time()\n", - " return (end - start) * 1000 # to ms\n", - "\n", - "t = benchmark_naive(simple_mm, a, b)\n", - "print(f\"Naive time: {t:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gw4NGYRmzX2h" - }, - "source": [ - "**The Problem:**\n", - "Wait, ~0.5ms? That seems impossibly fast for a 4096² matrix multiplication involving 137 billion floating-point operations.\n", - "\n", - "**What happened?**\n", - "GPUs are **asynchronous**. When you call `torch.matmul`, the CPU doesn't actually do the math. It simply queues a \"launch kernel\" command to the GPU and moves on immediately. Our timer didn't measure the matrix multiplication; it measured how long it took Python to place an order in the queue.\n", - "\n", - "To fix this, we need to:\n", - "1. **Synchronize** - Force the CPU to wait for the GPU with `torch.cuda.synchronize()`\n", - "2. **Use CUDA Events** - Record timestamps directly on the GPU to avoid CPU overhead\n", - "\n", - "Let's compare these approaches to see the difference." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T21:24:41.260592Z", - "iopub.status.busy": "2025-12-17T21:24:41.260479Z", - "iopub.status.idle": "2025-12-17T21:24:41.460207Z", - "shell.execute_reply": "2025-12-17T21:24:41.459267Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Comparing Synchronized time.time() vs CUDA Events:\n", - "------------------------------------------------------------\n", - "N= 512: sync= 0.0699ms, events= 0.0374ms, overhead=+0.0325ms\n", - "N=1024: sync= 0.0725ms, events= 0.0718ms, overhead=+0.0007ms\n", - "N=2048: sync= 0.3567ms, events= 0.3543ms, overhead=+0.0024ms\n", - "N=4096: sync= 2.7008ms, events= 2.6914ms, overhead=+0.0094ms\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHpCAYAAABTH4/7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA5SdJREFUeJzs3XdYU9cbB/BvmGGLCgIOVERFRLFuceBA3FIXbq2zddXtz1V33VXr3taq1br3Fvfe2ypuEcHBkk3O74/IhZiEoWAQvp/n8Wnvueee++YkISdvzj1XJoQQICIiIiIiIiIi+ob0dB0AERERERERERHlPExKERERERERERHRN8ekFBERERERERERfXNMShERERERERER0TfHpBQREREREREREX1zTEoREREREREREdE3x6QUERERERERERF9c0xKERERERERERHRN8ekFBERERERERERfXNMShEREREREWUjXbt2hbm5ua7DUOHp6QlPT09dh0FEWQyTUkRERERElGX5+/ujd+/eKFq0KORyOSwtLeHh4YF58+YhKipKqle4cGHIZDLpn62tLWrUqIHt27ertFe4cGE0adJE47kuX74MmUyGNWvWpCm258+f4+eff0bhwoVhbGwMW1tb+Pj44MyZM1/8eCltFi1alObnCYD0upg9e7bavjVr1kAmk+Hy5csZGKGSl5cXZDIZ+vXrp3H/ypUr4eLiArlcDmdnZ8yfP19jvY0bN+KHH36AXC6HjY0Nunfvjrdv32qs++bNG/Tu3Rv58+eHXC5H4cKF0b179wx7TEQZyUDXARAREREREWmyd+9etG7dGsbGxujcuTNKly6N2NhYnD59GsOGDcOdO3ewbNkyqb67uzuGDBkCAAgICMDSpUvRokULLF68GD///HOGxnbmzBk0atQIANCjRw+UKlUKgYGBWLNmDWrUqIF58+ahf//+GXpOSrJo0SLkzZsXXbt2TddxM2fOxC+//AJTU9PMCSyZbdu24dy5c1r3L126FD///DNatmyJwYMH49SpUxgwYAAiIyMxYsQIqd7ixYvRp08f1K1bF3/88QdevnyJefPm4fLly7hw4QLkcrlU98WLF/Dw8AAA/Pzzz8ifPz8CAgJw8eLFzHugRF+BSSkiIiIiIspynjx5grZt28LR0RHHjh2Dvb29tK9v37549OgR9u7dq3JM/vz5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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Key insight: Synchronized timing includes 0.009ms of CPU overhead.\n", - "CUDA Events (2.6914ms) measure pure GPU execution time.\n" - ] - } - ], - "source": [ - "# Compare: Synchronized time.time() vs CUDA Events\n", - "# This shows why GPU-side timestamps are more accurate\n", - "\n", - "def benchmark_sync(func, *args):\n", - " \"\"\"Attempt 2: Synchronized - waits for GPU but uses CPU clock.\"\"\"\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " start = time.time()\n", - " func(*args)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " end = time.time()\n", - " return (end - start) * 1000\n", - "\n", - "def benchmark_events(func, *args):\n", - " \"\"\"Attempt 3: CUDA Events - GPU-side timestamps, most accurate.\"\"\"\n", - " start_event = torch.cuda.Event(enable_timing=True)\n", - " end_event = torch.cuda.Event(enable_timing=True)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " start_event.record()\n", - " func(*args)\n", - " end_event.record()\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " return start_event.elapsed_time(end_event)\n", - "\n", - "# Test across different matrix sizes\n", - "sizes = [512, 1024, 2048, 4096]\n", - "sync_times = []\n", - "event_times = []\n", - "\n", - "print(\"Comparing Synchronized time.time() vs CUDA Events:\")\n", - "print(\"-\" * 60)\n", - "for s in sizes:\n", - " a_test, b_test = get_data(s)\n", - " # Warmup\n", - " for _ in range(3):\n", - " simple_mm(a_test, b_test)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " \n", - " sync_t = benchmark_sync(simple_mm, a_test, b_test)\n", - " event_t = benchmark_events(simple_mm, a_test, b_test)\n", - " \n", - " sync_times.append(sync_t)\n", - " event_times.append(event_t)\n", - " overhead = sync_t - event_t\n", - " print(f\"N={s:4d}: sync={sync_t:7.4f}ms, events={event_t:7.4f}ms, overhead={overhead:+.4f}ms\")\n", - "\n", - "# Create visualization\n", - "fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", - "\n", - "# Left plot: Both methods across sizes\n", - "axes[0].plot(sizes, sync_times, 's-', label='Synchronized (CPU clock)', linewidth=2, markersize=8, color='orange')\n", - "axes[0].plot(sizes, event_times, '^-', label='CUDA Events (GPU clock)', linewidth=2, markersize=8, color='green')\n", - "axes[0].set_xlabel('Matrix Size (N)')\n", - "axes[0].set_ylabel('Time (ms)')\n", - "axes[0].set_title('CPU Clock vs GPU Clock Timing')\n", - "axes[0].legend()\n", - "axes[0].grid(True, alpha=0.3)\n", - "\n", - "# Right plot: Bar chart showing overhead at largest size\n", - "overhead_ms = sync_times[-1] - event_times[-1]\n", - "axes[1].bar(['Synchronized\\n(time.time + sync)', 'CUDA Events\\n(GPU timestamps)'], \n", - " [sync_times[-1], event_times[-1]], \n", - " color=['orange', 'green'], alpha=0.8)\n", - "axes[1].set_ylabel('Time (ms)')\n", - "axes[1].set_title(f'CPU Overhead at N={sizes[-1]}\\n(Sync includes ~{overhead_ms:.3f}ms CPU overhead)')\n", - "axes[1].axhline(y=event_times[-1], color='green', linestyle='--', alpha=0.5, label='True GPU time')\n", - "\n", - "plt.tight_layout()\n", - "plt.show()\n", - "\n", - "print(f\"\\nKey insight: Synchronized timing includes {overhead_ms:.3f}ms of CPU overhead.\")\n", - "print(f\"CUDA Events ({event_times[-1]:.4f}ms) measure pure GPU execution time.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dV8AmQi-zX2i" - }, - "source": [ - "### Attempt 3: Removing CPU Overhead (CUDA Events)\n", - "\n", - "To get a precise measurement, we need to bypass the CPU clock entirely. We can ask the GPU driver to record timestamps directly on the device using `torch.cuda.Event`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:41.463315Z", - "iopub.status.busy": "2025-12-17T21:24:41.463177Z", - "iopub.status.idle": "2025-12-17T21:24:41.532922Z", - "shell.execute_reply": "2025-12-17T21:24:41.531966Z" - }, - "id": "i6PfSdkTzX2i", - "outputId": "8b3e29d1-1789-4bfb-9a44-599016516dd7" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Run 0: 21.9622 ms\n", - "Run 1: 21.6770 ms\n", - "Run 2: 21.4259 ms\n" - ] - } - ], - "source": [ - "def benchmark_events(func, *args):\n", - " \"\"\"Better: Uses GPU timestamps, avoiding CPU overhead.\"\"\"\n", - " start_event = torch.cuda.Event(enable_timing=True)\n", - " end_event = torch.cuda.Event(enable_timing=True)\n", - "\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " start_event.record()\n", - " func(*args)\n", - " end_event.record()\n", - " torch.cuda.synchronize(device=DEVICE)\n", - "\n", - " return start_event.elapsed_time(end_event) # Returns ms directly\n", - "\n", - "# Run it a few times\n", - "for i in range(3):\n", - " print(f\"Run {i}: {benchmark_events(simple_mm, a, b):.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BkfaaDawzX2i" - }, - "source": [ - "### Attempt 4: Handling the \"Cold Start\"\n", - "\n", - "Notice Run 0 is noticably slower than the rest. The first time you run a PyTorch function (and similarly launching a cuda kernel), the framework does a lot of heavy lifting which could include: allocating memory, initializing cuBLAS/cuDNN workspaces, lazy kernel loading, and compiling kernels (especially if using `torch.compile` or Triton). This \"Cold Start\" penalty is a one-time cost that shouldn't be included in your performance metrics.\n", - "\n", - "**The Fix:**\n", - "We need to perform **Warmup Runs**—running the kernel a few times to settle the system state before we start measuring." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:41.535509Z", - "iopub.status.busy": "2025-12-17T21:24:41.535387Z", - "iopub.status.idle": "2025-12-17T21:24:42.246476Z", - "shell.execute_reply": "2025-12-17T21:24:42.245382Z" - }, - "id": "j_PsAuJkzX2i", - "outputId": "d6983401-72d3-468c-ffd8-c0833e8d5556" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Run 0: 21.4824 ms\n", - "Run 1: 21.4355 ms\n", - "Run 2: 21.4300 ms\n" - ] - } - ], - "source": [ - "def benchmark_warmup(func, *args, warmup_iters=30, benchmark_iters=3):\n", - " \"\"\"Better: Includes warmup to avoid cold-start penalty.\"\"\"\n", - " # Warmup phase\n", - " for _ in range(warmup_iters):\n", - " func(*args)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - "\n", - " # Measurement phase\n", - " measurements = []\n", - " for _ in range(benchmark_iters):\n", - " measurements.append(benchmark_events(func, *args))\n", - " torch.cuda.synchronize(device=DEVICE)\n", - " return measurements\n", - "\n", - "# print(f\"Warmed up time: {benchmark_warmup(simple_mm, a, b):.4f} ms\")\n", - "\n", - "for i, measurement in enumerate(benchmark_warmup(simple_mm, a, b)):\n", - " print(f\"Run {i}: {measurement:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "OR3uOh7kzX2i" - }, - "source": [ - "### Attempt 5: The Single Sample Fallacy (Variance)\n", - "\n", - "Relying on a single sample after warmup is bad science. Operating systems are noisy; background processes interrupt the CPU, and GPU clocks fluctuate thermally. A single measurement is anecdotal, not statistical.\n", - "\n", - "#### Visualizing the Jitter\n", - "\n", - "Let's run the benchmark 100 times and plot every single run. You will clearly see the \"Cold Start\" spike and the noise floor of the OS." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 653 - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:42.248937Z", - "iopub.status.busy": "2025-12-17T21:24:42.248818Z", - "iopub.status.idle": "2025-12-17T21:24:44.484746Z", - "shell.execute_reply": "2025-12-17T21:24:44.483759Z" - }, - "id": "T-7QH4cHzX2i", - "outputId": "c758effd-a810-422d-d3ca-66c128cdb716" - }, - "outputs": [ - { - "data": { - "image/png": "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5zB37lxoNBosXrwYANC1a1cAjb0lo0aNQmlpKe644w707NkT33//PRYuXIiysjI899xzLudZuXIlrFYr/vznP0OpVCIpKcljnuLi4nDjjTciPz8fs2fPxtChQ32+ru3bt6OyshLz58+HXC5vM/3JkycxYsQI1NbWYt68eUhOTsYbb7yBa6+9Fh9++CGuv/56j6/96quvMHnyZPTv3x95eXmoqKjAjBkzWg3SHXr16gWgMcC+4YYbPPZAtfY5AY3BmUajwYIFC6DRaPDNN9/goYceQnV1dYu5chUVFbjqqqtw8803Y+rUqejatStGjx7t8bMmInKSiIjIKytXrpQAtPinVCql/Px8l7TffvutBEB65513XLZ/8cUXLbb36tVLAiBt27bNuc1gMEhKpVL629/+5tz20EMPSQCktWvXtsibKIqSJEnS5s2bJQDSOeecI9XV1Tn3P//88xIAqbCw0Llt1KhREgBp1apVzm2//vqrBECSyWTSzp07ndu//PJLCYC0cuVK57ba2toW+dixY4cEQHrzzTdbvG+XXHKJ1NDQ4JL+4YcflgBIp06dkvbt2yd1795dGj58uFRZWemSbtq0aVKvXr2cfx8+fFgCICUnJ7uk/fjjjyUA0ieffOLcNnDgQCkjI0OqqalxbtuyZYsEwOWYnowaNUoaMGCAy7ZevXpJ06ZNc/79wQcfSACkzZs3t3j9gAEDpFGjRrXY/uijj0rx8fHS//73P5ftDzzwgCSXy6WjR4+6XGtCQoJkMBjazK8kSVJNTY00duxYKTY2VuratWuLc3jDUWbWrVvnVfr58+dLAKRvv/3WJR+9e/eWMjMzJbvd7nI9TcvSkCFDpLS0NKmqqsq57auvvvL6M7r99tslAFKXLl2k66+/XnrmmWekffv2tUjX2ufkrjzfcccdUlxcnGS1Wp3bHN+bFStWtEjv6bMmInLgsEMiIh+99NJL2LhxIzZu3Ii3334bl112Gf70pz9h7dq1zjQffPABdDodrrjiCpSXlzv/nXvuudBoNNi8ebPLMfv3749LL73U+Xdqair69u2LQ4cOObetWbMGgwcPdtuD0HxI2IwZM1zmAzmO3fR4AKDRaHDzzTc7/+7bty8SExNxzjnn4IILLnBud/x/09er1Wrn/9fX16OiogLZ2dlITExEQUFBizzOnj3bYw9KUVERRo0ahczM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unXrBoPBgHfffRe//PIL5s+f73wfPX1OI0aMQJcuXTBt2jTMmzcPgiDgrbfe8vmmhqfPmojIqdPWWSQiCjPulppXqVTSkCFDpOXLlzuXe2/q1Vdflc4991xJrVZLWq1WGjhwoHTfffdJx48fd6bp1auXNHHixBavHTVqVItlqysqKqQ5c+ZI6enpUmxsrJSRkSFNmzZNKi8vlyTpzFLzH3zwgcvr3C3v7W4J9dbyA0DKzc11/n369GlpxowZUkpKiqTRaKQrr7xS+vXXX1ssw+5433bt2tXimE2Xmneora2VRo0aJWk0Gudy956Wmn/66afd5vPhhx922bZ69WqpX79+klKplHJycqT169dLkydPlvr169fi9c2NHDlSGjRokMu25tcoSZL02muvSWeddZYkl8tdljM/ceKENHHiREmr1UoAXD7TmpoaaeHChVJ2drYUGxsrpaSkSCNGjJCeeeYZyWaztXmtrfn3v/8tnXvuuZJKpZI0Go106aWXSqtXr5YkSZIWLVokAZCWLl3q1bE+/PBDady4cVJSUpKkUCiktLQ06aabbpK2bNniku7gwYPSlClTpMTEREmlUknnn3++tGHDBpc07sqiJEnSmjVrpHPOOUdSKpVS//79pbVr17b43N2prq6Wnn/+eenKK6+UMjIypJiYGEmr1UoXXXSR9Nprr7X4Xnr6nL777jvpwgsvlNRqtdS9e3fpvvvucz5ioenS9J6+N5LU+mdNRCRJkiRIUhjMSiYiIgqwIUOGIDU1FRs3bmw13bBhwxAfH49vv/02SDkjIqJIxTlfREQU0err61vMn9qyZQt++eUXjB49utXXmkwm/Prrr14/b4qIiKg1nPNFREQRrbS0FGPHjsXUqVPRvXt3/Prrr1ixYgW6deuGO++80+1rTp48iXXr1uGtt96CxWLB7bffHuRcExFRJGLwRUREEa1Lly4499xz8X//9384deoU4uPjMXHiRDzxxBMeFwfZt28f5syZg+zsbLz55pu4+OKLg5xrIiKKRJzzRUREREREFASc80VERERERBQEDL6IiIiIiIiCgHO+/CSKIo4fPw6tVgtBEDo7O0RERERE1EkkSUJNTQ26d+/e6kPlGXz56fjx4+jRo0dnZ4OIiIiIiELEb7/9hoyMDI/7GXz5SavVAmh8gxMSEjo1L6Io4tSpU0hNTW010iZqiuWG/MWyQ/5guSF/sNyQv4Jddqqrq9GjRw9njOAJgy8/OYYaJiQkhETwZbVakZCQwIqJvMZyQ/5i2SF/sNyQP1huyF+dVXbamo7EUkxERERERBQEDL6IiIiIiIiCgMEXERERERFREHDOFxERERH5RJIkNDQ0wG63d+h5RFFEfX09rFYr53yRTwJdduRyORQKRbsfMcXgi4iIiIi8ZrPZUFZWhtra2g4/lyRJEEURNTU1fK4q+aQjyk5cXBzS0tIQGxvr9zEYfBERERGRV0RRxOHDhyGXy9G9e3fExsZ2aFDk6GELRI8DRZdAlh1JkmCz2XDq1CkcPnwYffr08bs3jcEXEREREXnFZrNBFEX06NEDcXFxHX4+Bl/kr0CXHbVajZiYGBw5cgQ2mw0qlcqv43DwLBERERH5hPOvKBoFotzzm0NERERERBQEDL6IiIiIiIiCgMEXEREREVEAbNmyBYIgoKqqCgCQn5+PxMTETs0ThRYGX0REREQU8aZPnw5BEHDnnXe22JebmwtBEDB9+vSAnvOmm27C//73v4Ae0xslJSWYNWsWevfuDbVajaysLDz88MOw2WzONFarFdOnT8fAgQOhUChw3XXX+XSOuro6DBkyBIIg4Oeff3abpri4GFqttkUAmp+fD0EQXP61toDFnXfeCUEQ8Nxzz/mUx1DE4IuIiIiIokKPHj2wevVqWCwW5zar1YpVq1ahZ8+eAT+fWq2GXq8P+HHb8uuvv0IURbzyyivYs2cP/vWvf2HFihVYtGiRM43dbodarca8efMwduxYn89x3333oXv37h7319fX45ZbbsGll17qdn9CQgLKysqc/44cOeI23bp167Bz585WzxVOGHyFOVGUcLjchMOnTDhcboIoSp2dJSIiIopGZrPnf1ar92mbBEatpvXDsGHD0KNHD6xdu9a5be3atejZsyeGDh3qklYUReTl5Tl7jwYPHowPP/zQJc1nn32Gs88+G2q1GpdddhlKSkpc9jcfdnjw4EH84Q9/QNeuXaHRaDB8+HB8/fXXLq/JzMzE448/jpkzZ0Kr1aJnz5549dVXfbrO8ePHY+XKlRg3bhzOOussXHvttbjnnntcrjs+Ph7Lly/H7Nmz0a1bN5+O//nnn+Orr77CM8884zHNgw8+iH79+uHGG290u18QBHTr1s35r2vXri3SlJaWYu7cuXjnnXcQExPTZr5Gjx6NuXPnYv78+UhKSkJGRgZee+01mM1mzJgxA1qtFtnZ2fj888+drzl9+jRuvfVWpKamQq1Wo0+fPli5cqUX74J/OjX4ysvLw/Dhw6HVaqHX63Hddddh//79LmleffVVjB49GgkJCS5jaFuzZMmSFl2Z/fr1c+6vrKzE3Llz0bdvX6jVavTs2RPz5s2D0WgM9CV2qKJSIx79dC+WfrIX7//nGJZ+shePfroXRaXhdR1EREQUATQaz/8mT3ZNq9d7TnvVVS5JFX36QNBqW6bz08yZM10a16+//jpmzJjRIl1eXh7efPNNrFixAnv27MHdd9+NqVOnYuvWrQCA3377DZMmTcI111yDn3/+GX/605/wwAMPtHpuk8mECRMmYNOmTfjpp58wfvx4XHPNNTh69KhLumeffRbnnXcefvrpJ9x11134y1/+4tJGHj16tM9DJI1GI5KSknx6jTsnT57E7Nmz8dZbb3l81ts333yDDz74AC+99JLH45hMJvTq1Qs9evTAH/7wB+zZs8dlvyiKuO2223DvvfdiwIABXufvjTfeQEpKCn744QfcdddduOuuu3DDDTdgxIgRKCgowLhx43DbbbehtrYWAPD3v/8de/fuxeeff459+/Zh+fLlSElJ8fp8vurU4Gvr1q3Izc3Fzp07sXHjRtTX12PcuHEwN7mbUVtbi/Hjx7t0k3pjwIABLl2Z27dvd+47fvw4jh8/jmeeeQZFRUXIz8/HF198gVmzZgXs2jpaUakRL2w6gMJjRiSqY6FPUCFRHYvCY43bGYARERERtTR16lRs374dR44cwZEjR/Ddd99h6tSpLmnq6urw+OOP4/XXX8eVV16Js846C9OnT8fUqVPxyiuvAACWL1+OrKwsPPvss+jbty9uvfXWNgOiwYMH44477kBOTg769OmDRx99FFlZWVi/fr1LugkTJuCuu+5CdnY27r//fqSkpGDz5s3O/T179kRaWprX11xcXIwXX3wRd9xxh9evcUeSJEyfPh133nknzjvvPLdpKioqMH36dOTn5yMhIcFtmr59++L111/Hxx9/jLfffhuiKGLEiBE4duyYM82TTz4JhUKBefPm+ZTHwYMH48EHH0SfPn1w//33Q6VSISUlBbNnz0afPn3w0EMPoaKiAv/9738BAEePHsXQoUNx3nnnITMzE2PHjsU1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LMaMGYPFixcjNTUV33zzDSZNmhTwc/mDwRcRERERRRW5XI59+/Y5/785rVaLe+65B3fffTdEUcQll1wCo9GI7777DgkJCZg2bRr69OmDN998E19++SV69+6Nt956C7t27ULv3r19ysuyZcuwbt06bNq0ye3++vp6TJkyBQUFBdiwYQPsdjtOnDgBAEhKSkJsbCwA4OjRo6isrMTRo0dht9udz+LKzs52DtPr168f8vLycP311yM5OblFEBcTE4Nu3bqhb9++ANBi+X3HcbKyspCRkQEAOOecc1zS/Oc//4FMJkNOTo5z2w8//IDS0lIMGTIEpaWlWLJkCURRxH333efTe9WWDRs24NChQxg5cqRzpURRFJ3XEwoYfBERERFR1Glr2N6jjz6K1NRU5OXl4dChQ0hMTMSwYcOwaNEiAMAdd9yBn376CTfddBMEQcAtt9yCu+66C59//rlP+SgvL2+1x6y0tBTr168HgBbzyTZv3ozRo0cDAB566CG88cYbzn2OuWlN0+zfvx9Go9Gn/AWC1WrFgw8+iEOHDkGj0WDChAl466232r1aY3OJiYlYu3YtlixZAqvViuzsbKxatcrjSo6dQZCaPoyBvFZdXQ2dTgej0djuMbftJYoiDAYD9Ho9ZDJO4yPvsNyQv1h2yB8sN5HBarXi8OHD6N27d4ulwzuCJEloaGiAQqHwuCgEkTsdUXZaK//exgas/YiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIh8wvXaKBoFotwz+CIiIiIir8TExAAAamtrOzknRMHnKPeO74E/+JwvIiIiIvKKXC5HYmIiDAYDACAuLq5Dl4DnUvPkr0CWHUmSUFtbC4PBgMTERLcP5vYWgy8iIiIi8lq3bt0AwBmAdSRJkiCKImQyGYMv8klHlJ3ExERn+fcXgy8iIiIi8pogCEhLS4Ner0d9fX2HnksURVRUVCA5OZkP5yafBLrsxMTEtKvHy4HBFxERERH5TC6XB6Qx2hpRFBETEwOVSsXgi3wSqmUndHJCREREREQUwRh8ERERERERBQGDLyIiIiIioiBg8EVERERERBQEDL6IiIiIiIiCgMEXERERERFREDD4IiIiIiIiCgIGX0REREREREHA4IuIiIiIiCgIGHwREREREREFAYMvIiIiIiKiIGDwRUREREREFAQMvoiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAgYfBEREREREQWBorMzQERERETRSRQllFSYUWNtgFalQGZyPGQyobOzRdRhGHwRERERUdAVlRqxpuAYig0m1NWLUMbIkK3XYPKwDOSk6zo7e0QdgsEXEREREQVVUakRL2w6gEqzDWk6NdQ6OSw2OwqPGVF62oJ5Y/owAKOIxDlfRERERBQ0oihhTcExVJptyNZroFEpIJcJ0KgUyNZrUGm2YW1BKURR6uysEgUcgy8iIiIiCpqSCjOKDSak6dQQBNf5XYIgIE2nxgFDDUoqzJ2UQ6KOw+CLiIiIiIKmxtqAunoR6li52/3qWDnq6kXUWBuCnDOijsfgi4iIiIiCRqtSQBkjg8Vmd7vfYrNDGSODVsWlCSjyMPgiIiIioqDJTI5Htl6DMqMFkuQ6r0uSJJQZLeij1yIzOb6TckjUcRh8EREREVHQyGQCJg/LQFJ8LIoNJpisDbCLEkzWBhQbTEiKj8WkYel83hdFJAZfRERERBRUOek6zBvTBwMzdKiy2FBSbkaVxYZBGYlcZp4iGgfTEhEREVHQ5aTr0D8tASUVZtRYG6BVKZCZHM8eL4poDL6IiIiIqFPIZALOStV0djaIgobDDomIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAg6NfjKy8vD8OHDodVqodfrcd1112H//v0uaV599VWMHj0aCQkJEAQBVVVVbR53yZIlEATB5V+/fv1c0litVuTm5iI5ORkajQaTJ0/GyZMnA3l5RERERERETp0afG3duhW5ubnYuXMnNm7ciPr6eowbNw5ms9mZpra2FuPHj8eiRYt8OvaAAQNQVlbm/Ld9+3aX/XfffTc++eQTfPDBB9i6dSuOHz+OSZMmBeS6iIiIiIiImuvU53x98cUXLn/n5+dDr9dj9+7dGDlyJABg/vz5AIAtW7b4dGyFQoFu3bq53Wc0GvHvf/8bq1atwuWXXw4AWLlyJc455xzs3LkTF154oW8XQkRERERE1IaQesiy0WgEACQlJbX7WAcOHED37t2hUqlw0UUXIS8vDz179gQA7N69G/X19Rg7dqwzfb9+/dCzZ0/s2LHDbfBVV1eHuro659/V1dUAAFEUIYpiu/PbHqIoQpKkTs8HhReWG/IXyw75g+WG/MFyQ/4Kdtnx9jwhE3yJooj58+fj4osvRk5OTruOdcEFFyA/Px99+/ZFWVkZli5diksvvRRFRUXQarU4ceIEYmNjkZiY6PK6rl274sSJE26PmZeXh6VLl7bYfurUKVit1nblt71EUYTRaIQkSZDJuIYKeYflhvzFskP+YLkhf7DckL+CXXZqamq8ShcywVdubi6KiopazM3yx1VXXeX8/0GDBuGCCy5Ar1698P7772PWrFl+HXPhwoVYsGCB8+/q6mr06NEDqampSEhIaHee20MURQiCgNTUVFZM5DWWG/IXyw75g+WG/MFyQ/4KdtlRqVRepQuJ4GvOnDnYsGEDtm3bhoyMjIAfPzExEWeffTaKi4sBAN26dYPNZkNVVZVL79fJkyc9zhNTKpVQKpUttstkspCoDARBCJm8UPhguSF/seyQP1huyB8sN+SvYJYdb8/RqaVYkiTMmTMH69atwzfffIPevXt3yHlMJhMOHjyItLQ0AMC5556LmJgYbNq0yZlm//79OHr0KC666KIOyQMREREREUW3Tu35ys3NxapVq/Dxxx8752IBgE6ng1qtBgCcOHECJ06ccPZaFRYWQqvVomfPns6FOcaMGYPrr78ec+bMAQDcc889uOaaa9CrVy8cP34cDz/8MORyOW655Rbn8WfNmoUFCxYgKSkJCQkJmDt3Li666CKudEhERERERB2iU4Ov5cuXAwBGjx7tsn3lypWYPn06AGDFihUuC104lqBvmubgwYMoLy93pjl27BhuueUWVFRUIDU1FZdccgl27tyJ1NRUZ5p//etfkMlkmDx5Murq6nDllVfi5Zdf7oCrJCIiIiIiAgRJkqTOzkQ4qq6uhk6ng9FoDIkFNwwGA/R6PcdDk9dYbshfLDvkD5Yb8gfLDfkr2GXH29iApZiIiIiIiCgIGHwREREREREFAYMvIiIiIiKiIGDwRUREREREFAQMvoiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAgYfBEREREREQUBgy8iIiIiIqIgYPBFREREREQUBAy+iIiIiIiIgoDBFxERERERURAw+CIiIiIiIgoCBl9ERERERERBwOCLiIiIiIgoCBh8ERERERERBQGDLyIiIiIioiBg8EVERERERBQEDL6IiIiIiIiCgMEXERERERFREDD4IiIiIiIiCgIGX0REREREREHA4IuIiIiIiCgIGHwREREREREFAYMvIiIiIiKiIGDwRUREREREFAQMvoiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAgYfBEREREREQUBgy8iIiIiIqIgYPBFREREREQUBAy+iIiIiIiIgoDBFxERERERURAw+CIiIiIiIgoCBl9ERERERERBwOCLiIiIiIgoCBh8ERERERERBQGDLyIiIiIioiBg8EVERERERBQEDL6IiIiIiIiCgMEXERERERFREDD4IiIiIiIiCgIGX0REREREREHA4IuIiIiIiCgIGHwREREREREFAYMvIiIiIiKiIGDwRUREREREFAQMvoiIiIiIiIKAwRcREREREVEQMPgiIiIiIiIKAgZfREREREREQcDgi4iIiIiIKAgYfBEREREREQUBgy8iIiIiIqIgYPBFREREREQUBAy+iIiIiIiIgoDBFxERERERURAw+CIiIiIiIgoCBl9ERERERERB0KnBV15eHoYPHw6tVgu9Xo/rrrsO+/fvd0nz6quvYvTo0UhISIAgCKiqqvLpHE888QQEQcD8+fNdtp84cQK33XYbunXrhvj4eAwbNgxr1qxp5xURERERERG516nB19atW5Gbm4udO3di48aNqK+vx7hx42A2m51pamtrMX78eCxatMjn4+/atQuvvPIKBg0a1GLf7bffjv3792P9+vUoLCzEpEmTcOONN+Knn35q1zURERERERG5o+jMk3/xxRcuf+fn50Ov12P37t0YOXIkADh7rLZs2eLTsU0mE2699Va89tpr+Mc//tFi//fff4/ly5fj/PPPBwA8+OCD+Ne//oXdu3dj6NChvl8MERERERFRKzo1+GrOaDQCAJKSktp9rNzcXEycOBFjx451G3yNGDEC7733HiZOnIjExES8//77sFqtGD16tNvj1dXVoa6uzvl3dXU1AEAURYii2O78tocoipAkqdPzQeGF5Yb8xbJD/mC5IX+w3JC/gl12vD1PyARfoihi/vz5uPjii5GTk9OuY61evRoFBQXYtWuXxzTvv/8+brrpJiQnJ0OhUCAuLg7r1q1Ddna22/R5eXlYunRpi+2nTp2C1WptV37bSxRFGI1GSJIEmYxr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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Mean: 21.4449 ms\n", - "Median: 21.4454 ms\n", - "Std: 0.0213 ms\n", - "Min: 21.4074 ms\n", - "Max: 21.5199 ms\n" - ] - } - ], - "source": [ - "# Collect 100 samples\n", - "timings = []\n", - "for i in range(100):\n", - " timings.append(benchmark_events(simple_mm, a, b))\n", - "\n", - "plt.figure(figsize=(10, 6))\n", - "plt.scatter(range(100), timings, alpha=0.6)\n", - "plt.axhline(y=np.median(timings), color='r', linestyle='--', label=f'Median: {np.median(timings):.4f} ms')\n", - "plt.axhline(y=np.mean(timings), color='g', linestyle=':', label=f'Mean: {np.mean(timings):.4f} ms')\n", - "plt.title(\"Benchmarking Jitter & Cold Start\")\n", - "plt.ylabel(\"Time (ms)\")\n", - "plt.xlabel(\"Run Index\")\n", - "plt.legend()\n", - "plt.grid(True, alpha=0.3)\n", - "plt.show()\n", - "\n", - "print(f\"Mean: {np.mean(timings):.4f} ms\")\n", - "print(f\"Median: {np.median(timings):.4f} ms\")\n", - "print(f\"Std: {np.std(timings):.4f} ms\")\n", - "print(f\"Min: {np.min(timings):.4f} ms\")\n", - "print(f\"Max: {np.max(timings):.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hX_-OpftzX2i" - }, - "source": [ - "You will see a massive dot at $x=0$ (the cold start), followed by a cloud of dots hovering around the \"true\" time. This visualizes why we need **Warmup** (to skip $x=0$) and **Statistics** (to handle the cloud).\n", - "\n", - "Notice how the **Mean** is pulled upward by the outliers, while the **Median** represents the typical case more accurately. When possible, we should use the **Median** as our final metric.\n", - "\n", - "### Attempt 6: The \"Robust\" Harness (Flushing Cache)\n", - "\n", - "Modern GPUs have large L2 caches (40MB-192MB depending on architecture). If your data fits in the cache, subsequent iterations in your loop will skip the slow VRAM access, artificially inflating your speed. In production, data usually streams in from VRAM, so this \"hot cache\" benchmark is misleading.\n", - "\n", - "**The Fix:**\n", - "We must **flush the L2 cache** between *every single sample*. We do this by writing to a tensor large enough to completely evict the cache contents. KernelBench uses a ~256MB tensor to safely cover all GPU architectures, including the largest caches (e.g., Blackwell at ~192MB)." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T21:24:44.487140Z", - "iopub.status.busy": "2025-12-17T21:24:44.487016Z", - "iopub.status.idle": "2025-12-17T21:24:44.489937Z", - "shell.execute_reply": "2025-12-17T21:24:44.489208Z" - }, - "id": "Kj5azcpxzX2j" - }, - "outputs": [], - "source": [ - "# KernelBench provides utilities to flush the L2 cache\n", - "# This is important for cold cache measurements that simulate real-world inference\n", - "\n", - "def clear_l2_cache(device=DEVICE):\n", - " \"\"\"Flush L2 cache by writing to a large tensor.\n", - " \n", - " L2 cache sizes vary by GPU, so we use 256MB to cover all cases.\n", - " \"\"\"\n", - " dummy = torch.empty((32, 1024, 1024), dtype=torch.int64, device=device) # 256MB\n", - " dummy.fill_(1901) # Force write to thrash cache\n", - " del dummy\n", - "\n", - "# KernelBench also provides clear_l2_cache_triton() for cross-platform support\n", - "# (works on both NVIDIA and AMD GPUs via Triton's device abstraction)\n", - "from src.timing import clear_l2_cache_triton" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Why does flushing the cache matter?\n", - "\n", - "Let's see the cache effect in action. We'll benchmark the same operation twice:\n", - "1. **Without** cache flushing between runs (data stays in L2 cache)\n", - "2. **With** cache flushing between runs (data must be fetched from VRAM each time)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T21:24:44.492322Z", - "iopub.status.busy": "2025-12-17T21:24:44.492090Z", - "iopub.status.idle": "2025-12-17T21:24:44.507209Z", - "shell.execute_reply": "2025-12-17T21:24:44.506066Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Without cache flushing (warm cache):\n", - "\n", - "With cache flushing (cold cache):\n", - "\n", - "Warm cache median: 0.0283 ms\n", - "Cold cache median: 0.0323 ms\n", - "Difference: 0.0040 ms (14.3% slower with cold cache)\n", - "\n", - "Without cache flushing, you measure artificially fast times!\n" - ] - } - ], - "source": [ - "# Demonstrate why L2 cache flushing matters\n", - "# Use a smaller matrix so the effect is visible (data fits in cache)\n", - "N_SMALL = 512\n", - "a_small, b_small = get_data(N_SMALL)\n", - "\n", - "# do warmup runs\n", - "for _ in range(10):\n", - " clear_l2_cache(device=DEVICE)\n", - " benchmark_events(simple_mm, a_small, b_small)\n", - " torch.cuda.synchronize(device=DEVICE)\n", - "\n", - "# Benchmark WITHOUT cache flushing (warm cache - unrealistic)\n", - "print(\"Without cache flushing (warm cache):\")\n", - "times_warm = []\n", - "for i in range(10):\n", - " t = benchmark_events(simple_mm, a_small, b_small)\n", - " times_warm.append(t)\n", - "\n", - "# Benchmark WITH cache flushing (cold cache - realistic)\n", - "print(\"\\nWith cache flushing (cold cache):\")\n", - "times_cold = []\n", - "for i in range(10):\n", - " clear_l2_cache(device=DEVICE) # Flush cache before each measurement\n", - " t = benchmark_events(simple_mm, a_small, b_small)\n", - " times_cold.append(t)\n", - "\n", - "print(f\"\\nWarm cache median: {np.median(times_warm):.4f} ms\")\n", - "print(f\"Cold cache median: {np.median(times_cold):.4f} ms\")\n", - "print(f\"Difference: {np.median(times_cold) - np.median(times_warm):.4f} ms ({(np.median(times_cold)/np.median(times_warm) - 1)*100:.1f}% slower with cold cache)\")\n", - "print(\"\\nWithout cache flushing, you measure artificially fast times!\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T21:24:44.509465Z", - "iopub.status.busy": "2025-12-17T21:24:44.509344Z", - "iopub.status.idle": "2025-12-17T21:24:44.597419Z", - "shell.execute_reply": "2025-12-17T21:24:44.596500Z" - } - }, - "outputs": [ - { - "data": { - "image/png": "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Tx+4ubnh6NGjiI+PR0hICMzMzPDhhx8afN+IESMQHx+PPXv2oLCwEGPGjMH48eMREREBADAzM0NISAjatm0LBwcHnDt3DuPGjYMkSZrlHjhwAMOGDUPHjh1haWmJjz76CD179kR0dDTq1q0LAAgNDcW+ffvwzTffwNvbG3/88QcmTJgADw8P9O3bt8r2y+jRo/Hpp59i5MiRVbYOowmqkPT0dAFApKenV3dRRHFxsYiPjxfFxcXVXRR6QrDOkZxY36iy5ObmigsXLojc3NxS4yRJEgUFBUKSJM20O3eE6N9fiMaNhejYUYjevYV4/nnV344dVdP791fFVbbnnntO1K1bV2RlZenMu3fvnub5zZs3Rd++fYW1tbWwtbUVgwcPFgkJCZr5YWFhonXr1prXRUVFYurUqcLe3l44OTmJGTNmiJCQENGvXz+DZdm6dasAILZv364zT5IkkZaWJoQQ4sSJEyIoKEjUrl1b2NnZia5du4rTp0/rlH38+PHCxcVFWFhYiBYtWohffvlFCCHEhg0bhL29vdi9e7do2rSpsLa2FsHBweLOAzt43bp1omnTpsLCwkI89dRTYtWqVQbLLoQQ27ZtE87OzlrT9u/fLwCI3bt3C19fX2FpaSm6d+8uEhMTxa5du0TTpk2Fra2tGDZsmMjOzta8r7i4WHz44YfC29tbWFpailatWolt27Zp7d9XXnlFM79JkyZixYoVWuseNWqU6Nevn1i0aJFwc3MTTk5OYsKECaKgoKDU7TBk165dQqlUan3ua9asEXZ2diI/P1/vey5cuCAAiJMnT2qm/fbbb0KhUIjbt28bXNfUqVNF586dDc4vKioStra2YtOmTZppLVq0EAsWLNCKa9u2rZg9e7bmNQCxdu1a0adPH1GrVi3RtGlTcfToUXH16lURGBgorKysREBAgLh27ZrmPWfPnhXdunUTNjY2wtbWVrRt21Zre27evCkAaL2nIkr7DjE2N2C3QyIiIqIyLF0KREcDPj6Ak5Oq1QtQ/XVyUk2PjgaWL6/c9aampmL37t2YOHEirK2tdearr4uSJAn9+vVDamoqDh48iD179uD69esYOnSowWUvW7YMGzduxPr163H48GGkpqbip59+KrU83377LZ566in069dPZ55CoYC9vT0AIDMzE6NGjcLhw4dx7NgxNG7cGL1790ZmZqamvM899xyOHDmCb775BhcuXMCiRYtgYmKiWV5OTg6WLl2Kr7/+Gn/++Sfi4uIwffp0rbLMnTsXH3zwAS5evIgPP/wQ7733HjZt2mSw/IcOHUK7du30zps3bx5WrlyJo0eP4t9//8WQIUOwYsUKREREYOfOnfjjjz/wv//9TxMfHh6Or776CmvXrkV0dDSmTp2Kl19+GQcPHtRsY7169bBt2zZcuHABc+fOxbvvvovvvvtOa7379+/H9evXsW/fPmzatAkbN27Exo0bNfNff/112NjYlPpQi4qKQsuWLeHq6qqZFhwcjIyMDERHR+vd7qioKE3XUbWgoCAolUocP35c73uuXbuG3bt3IzAw0MCeVn1+hYWFcHJy0kzr2LEjduzYgdu3b0MIgf379+PKlSvo2bOn1nsXLlyIkJAQnD17Fk2bNsXw4cPx2muvYdasWTh16hSEEJg0aZImfsSIEahXrx5OnjyJ06dPY+bMmTAzM9PMr1+/PlxdXXHo0CGD5ZXNQ6V/TzC2fNGTjHWO5MT6RpWloi1fN24I4eenauF6/nnDj44dVXE3blRemY8fPy4AiB9//LHUuD/++EOYmJiIuLg4zbTo6GgBQJw4cUIIodvy5e7uLhYvXqx5XVhYKOrVq1dqy1ezZs1E3759y70dxcXFwtbWVtOy9fvvvwulUikuX76sN37Dhg06LRWrVq0Srq6umtcNGzYUERERWu9buHChCAgIMFiOfv36iVdeeUVrmrrla+/evZpp4eHhAoCIiYnRTHvttddEcHCwEEKIvLw8YWVlJY4ePaq1rLFjx4phw4YZXP/EiRPFoEGDNK9HjRolvLy8RG5urqa+DR48WAwdOlQTk5iYKK5evVrqQ23cuHGiZ8+eWuvMzs4WAMSuXbv0lumDDz4QTZo00Znu7OwsVq9erTUtICBAWFhYCABi/PjxpX4vv/HGG8LHx0freMvLyxMhISECgDA1NRXm5uZaLWNCqFq+5syZo3kdFRUlAIgvv/xSM23z5s3C0tJS89rW1lZs3LjRYFmEEKJNmzZi3rx5pcaUpTJavnjNFxEREVEpoqJU13g1bFh6nIMDEBMDHDsGVNZYDkIIo+IuXrwIT09PeHp6aqY1b94cDg4OuHjxIvz8/LTi09PTER8fD39/f800U1NTtG/fvtR1GluexMREzJkzBwcOHEBSUhKKi4uRk5ODuLg4AMDZs2dRr149NGnSxOAyrKys0LDETnd3d0dSUhIAIDs7GzExMRg7dizGjRuniSkqKtK0vumTm5sLS0tLvfNatWqlee7q6gorKyv4+PhoTVMPIHHt2jXk5OTg//7v/7SWUVBQgDZt2mher1q1CuvXr0dcXBxyc3NRUFCgM+JkixYttFr83N3d8c8//2heu7i4wMXFxeA2yWnr1q3IzMzEuXPnMGPGDCxduhRvv/22TtyiRYuwZcsWHDhwQGt//+9//8OxY8ewY8cOeHl54c8//8TEiRPh4eGBoKAgTdyDnwUAtGzZUmtaXl4eMjIyYGdnh9DQULz66qv4+uuvERQUhMGDB2vVHQCoVatWjRgQhskXERERUSmys1XdC5VlXKyhjikxSNxDa9y4MRQKheyDahjSpEkTo8oyatQo3L17F5988gm8vLxgYWGBgIAAFBQUAFCdCJelZLcxQNWtUZ38qUfiW7dunVYCCUArkXlQnTp1cO/evTLXp1Ao9K5fPVy5ev07d+7UDCahZmFhAQDYsmULpk+fjmXLliEgIAC2trZYsmSJTle+0tYDqLodfvPNNwa3qWR53NzcdEYYTExM1MzTx83NTZPUqhUVFSE1NVXnPerkvnnz5iguLsb48eMxbdo0rX2+dOlSLFq0CHv37tVKonJzc/Huu+/ip59+Qp8+fQCokqyzZ89i6dKlWsnXg5+FoWnq/TRv3jwMHz4cO3fuxG+//YawsDBs2bIFAwYM0LwnNTUVzs7OeveBnHjNFxEREVEprK1VoxqWdZsgdUyJS3AempOTE4KDg7Fq1SpkZ2frzE9LSwMANGvWDP/++y/+/fdfzbwLFy4gLS0NzZs313mfvb093N3dtRKBoqIinD59utTyDB8+HFeuXMHPP/+sM08IgfT0dADAkSNH8Oabb6J3795o0aIFLCwskJKSoolt1aoVbt26hStXrpS+AwxwdXWFh4cHrl+/jkaNGmk9GjRoYPB9bdq0wYULFyq0zpKaN28OCwsLxMXF6axfnaAcOXIEHTt2xIQJE9CmTRs0atQIMTEx5V7XggULcPbs2VIfagEBAfjnn3+0kqk9e/bAzs5Obz1QvyctLU3rs9+3bx8kSdJJbEuSJAmFhYVaieLixYuxcOFC7N69W+saMgAoLCxEYWEhlA/8imFiYlIp9+Bq0qQJpk6dij/++AMDBw7Ehg0bNPPy8vIQExOj1SpZXdjyRURERFSKgADVcPJpaarBNQxJS1PFBQRU7vpXrVqFTp06oUOHDliwYAFatWqFoqIi7NmzB2vWrMHFixcRFBSEli1bYsSIEVixYgWKioowYcIEBAYG6pwEq7311ltYtGgRGjdujKZNm2L58uWaZM6QIUOG4KeffsKwYcMwZ84c9OzZE87Ozvjnn3/w8ccfY/Lkyejfvz8aN26Mr7/+Gu3bt0dGRgZmzJih1doVGBiIrl27YtCgQVi+fDkaNWqES5cuQaFQoFevXkbtl/nz5+PNN9+Evb09evXqhfz8fJw6dQr37t1DaGio3vcEBwdj1qxZuHfvHhwdHY1ajz62traYPn06pk6dCkmS0LlzZ6Snp+PIkSOws7PDqFGj0LhxY3z11Vf4/fff0aBBA3z99dc4efJkqcmhPuXpdtizZ080b94cI0eOxOLFi5GQkIA5c+Zg4sSJmha5EydOICQkBJGRkahbty6aNWuGXr16Ydy4cVi7di0KCwsxadIkvPTSS/Dw8ACgGtzEzMwMLVu2hIWFBU6dOoVZs2Zh6NChmhapjz76CHPnzkVERAS8vb2RkJAAAJpBQezs7BAYGKipC15eXjh48CC++uorLH+IkWpyc3MxY8YMvPjii2jQoAFu3bqFkydPYtCgQZqYY8eOaVpfqxtbvoiIiIhK4e0NdOkCJCcDJe4pq6WwEEhJAQIDAS+vyl2/j48Pzpw5g+7du2PatGl4+umn8X//93+IjIzEmjVrAKi6Yf38889wdHRE165dERQUBB8fH2zdutXgcqdNm4aRI0di1KhRmm5xJbtp6aNQKBAREYHly5dj+/btCAwMRKtWrTBv3jz069cPwcHBAIAvv/wS9+7dQ9u2bTFy5Ei8+eabOgnEDz/8AD8/PwwbNgzNmzfH22+/jeLiYqP3y6uvvoovvvgCGzZsQMuWLREYGIiNGzeWmty0bNkSbdu21RlxsCIWLlyI9957D+Hh4ZoEZufOnZr1v/baaxg4cCCGDh0Kf39/3L17FxMmTHjo9ZbGxMQEv/76K0xMTBAQEICXX34ZISEhWLBggSYmJycHly9f1rpB8rfffoumTZuiR48e6N27Nzp37ozPP/9cM9/U1BQfffQROnTogFatWmH+/PmYNGkSvvjiC03MmjVrUFBQgBdffBHu7u6ax9KlSzUxW7ZsgZ+fH0aMGIHmzZtj0aJF+OCDD/D6668/1DbfvXsXISEhaNKkCYYMGYLnnnsO8+fP18Rs3rwZI0aMgJWVVYXXU1kUwtgrJ0lLRkYG7O3tkZ6eDjs7u2otiyRJSEpKgouLi05TLlFVYJ0jObG+UWXJy8vDjRs30KBBA4ODLgCq7nNFRUUwNTXVXFsSHw9MmKAaTt7ZWTW4hvomy2lpqsSreXNg9eqqudEyVZ6dO3dixowZOH/+fI34TtFX36jypKSk4KmnnsKpU6fK3er4oNK+Q4zNDdjtkIiIiKgM7u6qxGr5cuDgQdWohurky84O6NsXCA1l4vUo6NOnD65evYrbt29rjQ5Jj6fY2FisXr36oROvysLki4iIiMgI7u7AkiVAbKxqOPmsLNXgGgEBld/VkKrWlClTqrsIJJP27dsbvO6xOjD5IiIiIioHb+/Ku48XET1Zqr+jKxERERER0ROAyRcRERE9UTjWGBFVRGV8dzD5IiIioieCiYkJAKCgoKCaS0JEj6KcnBwA0NzbrCJ4zRcRERE9EUxNTWFlZYXk5GSYmZkZHGacQ3+TnFjfaj4hBHJycpCUlAQHBwfNDzkVweSLiIiInggKhQLu7u64ceMGbt68aTBOCAFJkqBUKnkyTFWO9e3R4eDgADc3t4daBpMvIiIiemKYm5ujcePGpXY9lCQJd+/eRe3atWvETXjp8cb69mgwMzN7qBYvNSZfRERE9ERRKpWwtLQ0OF+SJJiZmcHS0pInw1TlWN+eLPyEiYiIiIiIZMDki4iIiIiISAZMvoiIiIiIiGRQ7cnXqlWr4O3tDUtLS/j7++PEiRMGY6OjozFo0CB4e3tDoVBgxYoVOjHqeQ8+Jk6cqInp1q2bzvzXX3+9KjaPiIiIiIgIQDUnX1u3bkVoaCjCwsJw5swZtG7dGsHBwUhKStIbn5OTAx8fHyxatMjgMI8nT55EfHy85rFnzx4AwODBg7Xixo0bpxW3ePHiyt04IiIiIiKiEqo1+Vq+fDnGjRuHMWPGoHnz5li7di2srKywfv16vfF+fn5YsmQJXnrpJVhYWOiNcXZ2hpubm+bx66+/omHDhggMDNSKs7Ky0oqzs7Or9O0jIiIiIiJSq7ah5gsKCnD69GnMmjVLM02pVCIoKAhRUVGVto5vvvkGoaGhOjet+/bbb/HNN9/Azc0NL7zwAt577z1YWVkZXFZ+fj7y8/M1rzMyMgCohgeVJKlSyltRkiRpbtBHJAfWOZIT6xvJjXWO5MT69ngw9vOrtuQrJSUFxcXFcHV11Zru6uqKS5cuVco6tm/fjrS0NIwePVpr+vDhw+Hl5QUPDw/8/fffeOedd3D58mX8+OOPBpcVHh6O+fPn60xPTk5GXl5epZS3oiRJQnp6OoQQvD8EyYJ1juTE+kZyY50jObG+PR4yMzONinusb7L85Zdf4rnnnoOHh4fW9PHjx2uet2zZEu7u7ujRowdiYmLQsGFDvcuaNWsWQkNDNa8zMjLg6ekJZ2fnau+yKEkSFAoFnJ2dedCSLFjnSE6sbyQ31jmSE+vb46G0G7eXVG3JV506dWBiYoLExESt6YmJiQYH0yiPmzdvYu/evaW2Zqn5+/sDAK5du2Yw+bKwsNB7nZlSqawRB4pCoagxZaEnA+scyYn1jeTGOkdyYn179Bn72VXbJ2xubo527dohMjJSM02SJERGRiIgIOChl79hwwa4uLigT58+ZcaePXsWAODu7v7Q6yUiIiIiItKnWrsdhoaGYtSoUWjfvj06dOiAFStWIDs7G2PGjAEAhISEoG7duggPDwegGkDjwoULmue3b9/G2bNnYWNjg0aNGmmWK0kSNmzYgFGjRsHUVHsTY2JiEBERgd69e6N27dr4+++/MXXqVHTt2hWtWrWSacuJiIiIiOhJU63J19ChQ5GcnIy5c+ciISEBvr6+2L17t2YQjri4OK0mvDt37qBNmzaa10uXLsXSpUsRGBiIAwcOaKbv3bsXcXFxeOWVV3TWaW5ujr1792oSPU9PTwwaNAhz5sypug0lIiIiIqInnkIIIaq7EI+ijIwM2NvbIz09vUYMuJGUlAQXFxf2FSZZsM6RnFjfSG6scyQn1rfHg7G5AT9hIiIiIiIiGTD5IiIiIiIikgGTLyIiIiIiIhkw+SIiIiIiIpIBky8iIiIiIiIZMPkiIiIiIiKSAZMvIiIiIiIiGTD5IiIiIiIikgGTLyIiIiIiIhkw+SIiIiIiIpIBky8iIiIiIiIZMPkiIiIiIiKSAZMvIiIiIiIiGTD5IiIiIiIikgGTLyIiIiIiIhkw+SIiIiIiIpIBky8iIiIiIiIZMPkiIiIiIiKSAZMvIiIiIiIiGTD5IiIiIiIikgGTLyIiIiIiIhkw+SIiIiIiIpIBky8iIiIiIiIZMPkiIiIiIiKSAZMvIiIiIiIiGTD5IiIiIiIikgGTLyIiIiIiIhkw+SIiIiIiIpIBky8iIiIiIiIZMPkiIiIiIiKSAZMvIiIiIiIiGTD5IiIiIiIikgGTLyIiIiIiIhkw+SIiIiIiIpIBky8iIiIiIiIZMPkiIiIiIiKSAZMvIiIiIiIiGTD5IiIiIiIikgGTLyIiIiIiIhkw+SIiIiIiIpIBky8iIiIiIiIZVHvytWrVKnh7e8PS0hL+/v44ceKEwdjo6GgMGjQI3t7eUCgUWLFihU7MvHnzoFAotB5NmzbVisnLy8PEiRNRu3Zt2NjYYNCgQUhMTKzsTSMiIiIiItKo1uRr69atCA0NRVhYGM6cOYPWrVsjODgYSUlJeuNzcnLg4+ODRYsWwc3NzeByW7Rogfj4eM3j8OHDWvOnTp2KX375Bdu2bcPBgwdx584dDBw4sFK3jYiIiIiIqCTT6lz58uXLMW7cOIwZMwYAsHbtWuzcuRPr16/HzJkzdeL9/Pzg5+cHAHrnq5mamhpMztLT0/Hll18iIiICzz77LABgw4YNaNasGY4dO4ZnnnlG7/vy8/ORn5+veZ2RkQEAkCQJkiQZsbVVR5IkCCGqvRz05GCdIzmxvpHcWOdITqxvjwdjP79qS74KCgpw+vRpzJo1SzNNqVQiKCgIUVFRD7Xsq1evwsPDA5aWlggICEB4eDjq168PADh9+jQKCwsRFBSkiW/atCnq16+PqKgog8lXeHg45s+frzM9OTkZeXl5D1XehyVJEtLT0yGEgFJZ7T1J6QnAOkdyYn0jubHOkZxY3x4PmZmZRsVVW/KVkpKC4uJiuLq6ak13dXXFpUuXKrxcf39/bNy4EU899RTi4+Mxf/58dOnSBefPn4etrS0SEhJgbm4OBwcHnfUmJCQYXO6sWbMQGhqqeZ2RkQFPT084OzvDzs6uwuWtDJIkQaFQwNnZmQctyYJ1juTE+kZyY50jObG+PR4sLS2NiqvWbodV4bnnntM8b9WqFfz9/eHl5YXvvvsOY8eOrfByLSwsYGFhoTNdqVTWiANFoVDUmLLQk4F1juTE+kZyY50jObG+PfqM/eyq7ROuU6cOTExMdEYZTExMLHUwjfJycHBAkyZNcO3aNQCAm5sbCgoKkJaWVqXrJSIiIiIiKqnaki9zc3O0a9cOkZGRmmmSJCEyMhIBAQGVtp6srCzExMTA3d0dANCuXTuYmZlprffy5cuIi4ur1PUSERERERGVVK3dDkNDQzFq1Ci0b98eHTp0wIoVK5Cdna0Z/TAkJAR169ZFeHg4ANUgHRcuXNA8v337Ns6ePQsbGxs0atQIADB9+nS88MIL8PLywp07dxAWFgYTExMMGzYMAGBvb4+xY8ciNDQUTk5OsLOzw+TJkxEQEGBwsA0iIiIiIqKHVa3J19ChQ5GcnIy5c+ciISEBvr6+2L17t2YQjri4OK3+k3fu3EGbNm00r5cuXYqlS5ciMDAQBw4cAADcunULw4YNw927d+Hs7IzOnTvj2LFjcHZ21rzv448/hlKpxKBBg5Cfn4/g4GCsXr1ano0mIiIiIqInkkIIIaq7EI+ijIwM2NvbIz09vUaMdpiUlAQXFxdeqEmyYJ0jObG+kdxY50hOrG+PB2NzA37CREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAPT8gRLkoSDBw/i0KFDuHnzJnJycuDs7Iw2bdogKCgInp6eVVVOIiIiIiKiR5pRLV+5ubl4//334enpid69e+O3335DWloaTExMcO3aNYSFhaFBgwbo3bs3jh07VtVlJiIiIiIieuQYlXw1adIEf//9N9atW4eMjAxERUXhhx9+wDfffINdu3YhLi4OMTEx6NKlC1566SWsW7fO6AKsWrUK3t7esLS0hL+/P06cOGEwNjo6GoMGDYK3tzcUCgVWrFih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RDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDJg8kVERERERCQDJl9EREREREQyYPJFREREREQkAyZfREREREREMmDyRUREREREJAMmX0RERERERDKoEcnXqlWr4O3tDUtLS/j7++PEiROlxm/btg1NmzaFpaUlWrZsiV27dmnNVygUeh9LlizRxHh7e+vMX7RoUZVsHxERERERUbUnX1u3bkVoaCjCwsJw5swZtG7dGsHBwUhKStIbf/ToUQwbNgxjx47FX3/9hf79+6N///44f/68JiY+Pl7rsX79eigUCgwaNEhrWQsWLNCKmzx5cpVuKxERERERPbkUQghRnQXw9/eHn58fVq5cCQCQJAmenp6YPHkyZs6cqRM/dOhQZGdn49dff9VMe+aZZ+Dr64u1a9fqXUf//v2RmZmJyMhIzTRvb29MmTIFU6ZMMaqc+fn5yM/P17zOyMiAp6cn7t27Bzs7O6OWUVUkSUJycjKcnZ2hVFZ7Pk1PANY5khPrG8mNdY7kxPr2eMjIyICjoyPS09NLzQ1MZSyTjoKCApw+fRqzZs3STFMqlQgKCkJUVJTe90RFRSE0NFRrWnBwMLZv3643PjExETt37sSmTZt05i1atAgLFy5E/fr1MXz4cEydOhWmpvp3SXh4OObPn68zPTk5GXl5eYY2URaSJCE9PR1CCB60JAvWOZIT6xvJjXWO5MT69njIzMw0Kq5ak6+UlBQUFxfD1dVVa7qrqysuXbqk9z0JCQl64xMSEvTGb9q0Cba2thg4cKDW9DfffBNt27aFk5MTjh49ilmzZiE+Ph7Lly/Xu5xZs2ZpJX3qli9nZ+ca0fKlUCj4iwnJhnWO5MT6RnJjnSM5sb49HiwtLY2Kq9bkSw7r16/HiBEjdHZIyUSqVatWMDc3x2uvvYbw8HBYWFjoLMfC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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Visualize the cache effect\n", - "plt.figure(figsize=(10, 5))\n", - "plt.scatter(range(len(times_warm)), times_warm, alpha=0.7, label=f'Warm Cache (mean={np.mean(times_warm):.4f}ms)', color='orange', s=60)\n", - "plt.scatter(range(len(times_cold)), times_cold, alpha=0.7, label=f'Cold Cache (mean={np.mean(times_cold):.4f}ms)', color='blue', s=60)\n", - "plt.axhline(y=np.mean(times_warm), color='orange', linestyle='--', alpha=0.5)\n", - "plt.axhline(y=np.mean(times_cold), color='blue', linestyle='--', alpha=0.5)\n", - "plt.xlabel('Run Index')\n", - "plt.ylabel('Time (ms)')\n", - "plt.title(f'Cache Effect on {N_SMALL}x{N_SMALL} Matrix Multiplication')\n", - "plt.legend()\n", - "plt.grid(True, alpha=0.3)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "FAaH1cdBzX2j" - }, - "source": [ - "### Putting it all together\n", - "\n", - "We have now discovered that a robust benchmark requires:\n", - "\n", - "1. Device Synchronization\n", - "2. CUDA Events (to avoid CPU overhead)\n", - "3. Warmup Runs (to avoid initialization costs)\n", - "4. Multiple Samples (to handle variance)\n", - "5. Cache Flushing (to simulate VRAM access)\n", - "6. Median/Mean Aggregation (to ignore jitter)\n", - "\n", - "Writing this boilerplate every time is painful. We've packaged all these lessons into **KernelBench's timing module**, which provides multiple timing methods for different use cases. There are also other robust implementations available, such as Triton's `do_bench` [function](https://triton-lang.org/main/python-api/generated/triton.testing.do_bench.html).\n", - "\n", - "The default `cuda_event` method in KernelBench implements all of the above automatically, plus an additional insight: **`discard_first`** - discarding the first few trials after warmup, which often still have some initialization overhead." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:44.600123Z", - "iopub.status.busy": "2025-12-17T21:24:44.600004Z", - "iopub.status.idle": "2025-12-17T21:24:47.005899Z", - "shell.execute_reply": "2025-12-17T21:24:47.004654Z" - }, - "id": "3aVFtWt_zX2j", - "outputId": "6cf1e493-86ca-419e-a8e1-e19486814e09" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using timing method: cuda_event\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "KernelBench cuda_event time: 21.4000 ms\n" - ] - } - ], - "source": [ - "# Get the timing function - cuda_event is the default for trusted code\n", - "timing_fn = get_timing_function(\"cuda_event\")\n", - "\n", - "def final_benchmark(func, *args, num_trials=100):\n", - " \"\"\"Production-ready benchmarking using KernelBench's timing module.\"\"\"\n", - " elapsed_times = timing_fn(\n", - " kernel_fn=func,\n", - " args=list(args),\n", - " num_warmup=10,\n", - " num_trials=num_trials,\n", - " discard_first=1, # Discard first trial for consistency\n", - " verbose=False,\n", - " device=DEVICE\n", - " )\n", - " stats = get_timing_stats(elapsed_times, device=DEVICE)\n", - " return stats[\"mean\"]\n", - "\n", - "t = final_benchmark(simple_mm, a, b)\n", - "print(f\"KernelBench cuda_event time: {t:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "MsZrCYQRzX2j" - }, - "source": [ - "*Note: KernelBench also wraps Triton's `do_bench` if you prefer adaptive trial counts. See the timing methods comparison below for details.*\n", - "\n", - "---\n", - "\n", - "## KernelBench's Timing Methods Explained\n", - "\n", - "Now that we've built up a robust benchmarking harness from first principles, let's explore KernelBench's timing module in depth. We'll examine:\n", - "- **All 4 timing methods** and when to use each\n", - "- **The `discard_first` parameter** and why it improves measurement consistency\n", - "- **How `host_time` detects side-stream exploits** in untrusted code\n", - "\n", - "KernelBench's timing module provides **4 timing methods**, each designed for different use cases:\n", - "\n", - "| Method | Use Case | Catches Side-Streams | Cold Cache | Trial Control |\n", - "|--------|----------|---------------------|------------|---------------|\n", - "| `cuda_event` | Default, trusted code | No | Yes | Explicit |\n", - "| `host_time` | Untrusted code, agent evals | **Yes** | Yes | Explicit |\n", - "| `do_bench` | Triton-style / robust adaptive | No | Yes | Adaptive (time-budget) |\n", - "| `do_bench_impl` | do_bench implementation for inference and trial control | No | Yes | Explicit |\n", - "\n", - "### Method Details\n", - "\n", - "**`cuda_event`** (Default)\n", - "- Uses `torch.cuda.Event` for GPU-side timing\n", - "- Most accurate for pure kernel time measurement\n", - "- Clears L2 cache before each trial for cold-cache performance\n", - "- Use for trusted code where you control the kernel implementation\n", - "\n", - "**`host_time`** (For Untrusted Code)\n", - "- Uses **both** `time.perf_counter()` (host) and `torch.cuda.Event` (device) timing\n", - "- Compares the two: if they differ significantly, the CUDA event time is likely invalid (e.g., side-stream exploit)\n", - "- Falls back to host time when discrepancy detected, ensuring correctness\n", - "- Waits for ALL streams via `torch.cuda.synchronize()`\n", - "- **Essential for evaluating untrusted/agent-generated code**\n", - "\n", - "**`do_bench`** (Triton's Adaptive Benchmarking)\n", - "- Wraps Triton's `triton.testing.do_bench`\n", - "- Uses fixed time budgets: 25ms warmup, 100ms for repetitions\n", - "- Trial count is automatic based on kernel runtime\n", - "- **Note:** `num_warmup`, `num_trials`, `discard_first` parameters are ignored\n", - "\n", - "**`do_bench_impl`** (Transparent Implementation)\n", - "- Custom implementation mirroring Triton's do_bench\n", - "- Gives you explicit control over `num_warmup` and `num_trials`\n", - "- Useful when you need do_bench's approach but with specific trial counts\n", - "\n", - "### Key Parameters\n", - "\n", - "All timing functions share a common interface:\n", - "\n", - "```python\n", - "timing_fn(\n", - " kernel_fn, # Function to time\n", - " args, # List of arguments to pass\n", - " num_warmup=3, # Warmup iterations before timing\n", - " num_trials=10, # Number of timing samples to collect\n", - " discard_first=1, # Drop first N trials after warmup\n", - " device=\"cuda:0\", # Explicit GPU device selection\n", - " verbose=True # Print per-trial timing info\n", - ") -> list[float] # Returns list of elapsed times in ms\n", - "```\n", - "\n", - "### Why `discard_first`?\n", - "\n", - "Even after warmup, the first few timing trials can be affected by:\n", - "- PyTorch's lazy tensor allocation finalizing\n", - "- cuDNN autotuning (still settling optimal algorithms)\n", - "- Driver state initialization\n", - "- First access to data structures\n", - "\n", - "Setting `discard_first=1` (the default) improves measurement consistency. Let's visualize this effect:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Experiment 2: Comparing All 4 Timing Methods\n", - "\n", - "Let's see how the different timing methods compare on the same kernel. Each method has trade-offs between precision, features, and overhead." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T21:24:47.008751Z", - "iopub.status.busy": "2025-12-17T21:24:47.008456Z", - "iopub.status.idle": "2025-12-17T21:24:50.238519Z", - "shell.execute_reply": "2025-12-17T21:24:50.237366Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Comparing all KernelBench timing methods on 4096x4096 matmul:\n", - "======================================================================\n", - "\n", - "Testing cuda_event...\n", - "[Profiling] Using timing method: cuda_event\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " cuda_event: 21.4000 ms (std=0.0169)\n", - "\n", - "Testing host_time...\n", - "[Profiling] Using timing method: host_time\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 50\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " host_time: 21.6000 ms (std=0.0159)\n", - "\n", - "Testing do_bench...\n", - "[Profiling] Using timing method: do_bench\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " do_bench: 21.4000 ms (std=0.0150)\n", - "\n", - "Testing do_bench_impl...\n", - "[Profiling] Using timing method: do_bench_impl\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " do_bench_impl: Skipped due to AttributeError (Triton version compatibility)\n" - ] - }, - { - "data": { - "image/png": "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QbVt2zbV0S32vM8HDx5U+/bt5evrKzc3Nz3++OP66quvbOpcv35d4eHhKlWqlNzc3JQ3b17VqVNH69atu+P5sGe71OaUSkhI0CuvvCI/Pz95eXnpmWee0V9//ZXqPu7nPbtbfD169NDUqVMlyfpeJMd669xdkyZNsp7nAwcO2H1eL1y4oCFDhqhixYry9PSUt7e3mjZtqj179tjUS77eFy9erPDwcD3yyCPy8vJS+/btFRsbq4SEBIWGhsrf31+enp7q2bOnEhISbNpYt26d6tSpo9y5c8vT01OPPvqo3njjDZs6Li4uCgoK0ooVK+w6f3j45MjqAAAAAABkbz/++KMk6bHHHkt1/YIFC3Tx4kX169dPFotF48aNU9u2bXXs2DG5uLhIktavX6+mTZuqePHiCgsL05UrV/TBBx+odu3a2rVrlzVJ8uKLL2rp0qUaMGCAypUrp/Pnz+v777/X77//rscee0xvvvmmYmNj9ddff2nixImSJE9PT7uOY9KkSRo4cKA8PT315ptvSpLy589/x23+/fdftWjRQp07d1aHDh00ffp0de7cWfPnz1doaKhefPFFde3aVePHj1f79u118uRJeXl5SZJOnz6tJ598UhaLRQMGDJCfn59WrVqlF154QXFxcQoNDb3jvsPDwxUWFqZatWopIiJCOXPm1Pbt27Vx40Y1btxYkjR79mx5enpq8ODB8vT01MaNGzVy5EjFxcVp/PjxknTHc5aYmKgWLVpow4YN6ty5s15++WVdvHhR69at0759+1SiRIl0vc/79+9X7dq19cgjj+j111+Xh4eHFi9erNatW+uLL75QmzZtJN1MHEVGRqp379564oknFBcXp19++UW7du3S008/neY5udftevfurc8++0xdu3ZVrVq1tHHjRjVv3jxFvft9z+4WX79+/fTPP/9o3bp1mjdvXqptzJo1S1evXlXfvn3l6uoqX19fu8/rsWPHtHz5cnXo0EGBgYE6ffq0ZsyYofr16+vAgQMKCAiw2VdkZKTc3d31+uuv68iRI/rggw/k4uIiJycn/fvvvwoLC9O2bds0e/ZsBQYGWueH2r9/v1q0aKFKlSopIiJCrq6uOnLkiH744YcUx1OtWjWtWLFCcXFx8vb2vuP5w0PIAAAAAMAdvPXWW0aSuXjxok15VFSUkWTy5s1rLly4YC1fsWKFkWS+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3b1fZk/fNCgoSN98841OnDhhPaZb/yBnbz8xISFBr7zyivz8/OTl5aVnnnlGf/311x3PafJ5tVgsMsZo6tSp1hiSHTt2TB06dJCvr69y5cqlJ598Ut98841NG8nzM33++ed666239MgjjyhXrlyKi4tLdZ+39hknTZpkvQ4OHDggSTp48KDat28vX19fubm56fHHH9dXX31l08aFCxc0ZMgQVaxYUZ6envL29lbTpk21Z8+eFPv766+/1Lp1a3l4eMjf31+vvPJKqv1se6/3W8/N3a53e+b0urXvvXnzZlWvXl2S1LNnT5spLNLbl3z66ad14sSJ+7oNEA+Xh/fP/nioFCtWTDVr1tTChQvVtGlTSdKqVasUGxurzp07a/LkySm26devn2bPnq2ePXtq0KBBioqK0pQpU/Trr7/qhx9+kIuLi6SbH6qenp4aPHiwPD09tXHjRo0cOVJxcXEaP368TZv//vuvmjRporZt26pjx45aunSphg0bpooVK1rjupPr16+nOqrLw8ND7u7u8vf31/Tp09WhQwd98MEHGjRokJKSktSjRw95eXlp2rRpkm4m3J555hl9//336tu3r8qWLau9e/dq4sSJ+uOPP2zm9wkPD1dYWJhq1aqliIgI5cyZU9u3b9fGjRvVuHFju9+DevXqadCgQZo8ebLeeOMNlS1bVpKs/97uypUrCgoK0pEjRzRgwAAFBgZqyZIl6tGjh2JiYvTyyy/b1F+wYIEuXryofv36yWKxaNy4cWrbtq2OHTtmfa8yw3fffaevvvpKISEhkqTIyEi1aNFCQ4cO1bRp0/TSSy/p33//1bhx49SrVy9t3LjRuu3GjRvVtGlTVatWTaNGjZKTk5NmzZqlp556St99952eeOKJu+7/nXfekcVi0bBhw3TmzBlNmjRJjRo10u7du+Xu7q7nn39eERERWrRokc2cT8lJ2Xbt2tn117R69eqpUKFCWrBggXU49qJFi+Tp6anmzZunqG/vNTZv3jz17t1bTzzxhPr27StJKlGihE1bHTt2VGBgoCIjI7Vr1y59/PHH8vf319ixY611evfurTlz5qh9+/Z69dVXtX37dkVGRur333/XsmXLrPVGjhypt99+W82aNVOzZs20a9cuNW7cWNeuXbvrOQAA3PTjjz9Kkh577DGb8qSkJLVs2VI///yz+vfvrzJlymjFihXq3r17qu3cuHFDwcHBqlOnjt59913lypVLkrRkyRJdvnxZ/fv3V968efXzzz/rgw8+0F9//aUlS5bYtJGYmKgmTZroySef1Lhx47R69WqNGjVKN27cSHH70L30Fezpvxw6dEhdunRRv3791KdPHz366KPpOJv/x57PO3v6Zfb0Td98803Fxsbqr7/+0sSJEyXJOol2evqJvXv31meffaauXbuqVq1a2rhxY6r9gtTO67x58/T888/r6aefVrdu3azrTp8+rVq1auny5csaNGiQ8ubNqzlz5uiZZ57R0qVL1aZNG5u2Ro8erZw5c2rIkCFKSEi46wigWbNm6erVq+rbt69cXV3l6+ur/fv3q3bt2nrkkUf0+uuvy8PDQ4sXL1br1q31xRdfWPd57NgxLV++XB06dFBgYKBOnz6tGTNmqH79+jpw4IB1So0rV66oYcOG+vPPPzVo0CAFBARo3rx5Nv3AZJl1vadH2bJlFRERoZEjR6pv376qW7eupJtTWNSpUyddfclq1apJkn744QdVrVr1nmPCQ8QA/2GzZs0yksyOHTvMlClTjJeXl7l8+bIxxpgOHTqYBg0aGGOMKVq0qGnevLl1u++++85IMvPnz7dpb/Xq1SnKk9u7Vb9+/UyuXLnM1atXrWX169c3kszcuXOtZQkJCaZAgQKmXbt2dz2WokWLGkmpviIjI23qdunSxeTKlcv88ccfZvz48UaSWb58uXX9vHnzjJOTk/nuu+9stvvwww+NJPPDDz8YY4w5fPiwcXJyMm3atDGJiYk2dZOSkqz/l2RGjRqVaszdu3e3Li9ZssRIMps2bUpRt379+qZ+/frW5UmTJhlJ5rPPPrOWXbt2zdSsWdN4enqauLg4Y4wxUVFRRpLJmzevuXDhgrXuihUrjCTz9ddfp9hXWpLPVVRUVIp1o0aNMrf/ypRkXF1dberPmDHDSDIFChSwxmiMMcOHD7dpOykpyZQqVcoEBwfbnMvLly+bwMBA8/TTT98x1k2bNhlJ5pFHHrHZz+LFi40k8/7771vLatasaWrUqGGz/Zdffpnme5HacZ89e9YMGTLElCxZ0rquevXqpmfPntZzERISYl1n7zVmjDEeHh4218nt++7Vq5dNeZs2bUzevHmty7t37zaSTO/evW3qDRkyxEgyGzduNMYYc+bMGZMzZ07TvHlzm3P+xhtvGEmpxgAASOmtt94ykszFixdtyr/44gsjyUyaNMlalpiYaJ566ikjycyaNcta3r17dyPJvP766ynaT61vFRkZaSwWizlx4kSKNgYOHGgtS0pKMs2bNzc5c+Y0Z8+eNcbcf1/hTv2X5P7Z6tWrbcqT93nrMSe7vd9k7+edvf0ye/umzZs3N0WLFk1R197P8OTP35deesmmXteuXdPsG97u9v6DMcaEhoYaSTb7v3jxogkMDDTFihWzHntyX6h48eKpHvPtkt8Tb29vc+bMGZt1DRs2NBUrVrQ5P0lJSaZWrVqmVKlS1rKrV6+mOPdRUVHG1dXVREREWMuS+7GLFy+2lsXHx5uSJUumuJYy+no3JuU1lvyd6NY+6+197x07dqR5zaa3L5kzZ07Tv3//FOVAarh9Dw+Njh076sqVK1q5cqUuXryolStXpnnb0ZIlS+Tj46Onn35a586ds76qVasmT09Pbdq0yVr31jkDLl68qHPnzqlu3bq6fPmyza1O0s2/QN06J1TOnDn1xBNP6NixY3YdQ40aNbRu3boUr9snGZ0yZYp8fHzUvn17jRgxQs8//7xatWplc3xly5ZVmTJlbI7vqaeekiTr8S1fvlxJSUkaOXJkinvzM/se8W+//VYFChSwOTYXFxcNGjRIly5d0pYtW2zqd+rUSXny5LEuJ/+Fx95ze68aNmxoM9y9Ro0akqR27drJy8srRXlyPLt379bhw4fVtWtXnT9/3voexMfHq2HDhtq6datdj9ju1q2bzX7at2+vggUL6ttvv7Wps337dh09etRaNn/+fBUuXFj169e3+1i7du2qI0eOaMeOHdZ/7/QzZM81Zo8XX3zRZrlu3bo6f/68dXh+8rEOHjzYpl7yQwGSh/uvX79e165d08CBA22u36yc4BUAHkTnz59Xjhw5UjyefvXq1XJxcVGfPn2sZU5OTtbRxKnp379/irJb+1bx8fE6d+6catWqJWOMfv311xT1bx29kXxr/bVr17R+/XqbepnVVwgMDFRwcPB9tSHd/fPO3n5ZevqmqbH3Mzz583fQoEE229/v5+q3336rJ554wuYBRZ6enurbt6+OHz9uvd0uWffu3dM1h1e7du3k5+dnXb5w4YI2btyojh07Ws/XuXPndP78eQUHB+vw4cP6+++/Jd188EvyuU9MTNT58+fl6empRx99VLt27bI5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7PLly5o5c6ZNvex0vd/tOre3L7lz505JN5/cB9iDkVJ46NxpDp9k9evXV79+/RQZGandu3ercePGcnFx0eHDh7VkyRK9//77at++vWrVqqU8efKoe/fuGjRokCwWi+bNm5dpt4z9/fff+uyzz1KUe3p6qnXr1pKkl19+WefPn9f69evl7OysJk2aqHfv3nr77bfVqlUrVa5cWc8//7wWL16sF198UZs2bVLt2rWVmJiogwcPavHixVqzZo0ef/xxlSxZUm+++aZGjx6tunXrqm3btnJ1ddWOHTsUEBCgyMhISTcfB/ziiy+qXbt2evrpp7Vnzx6tWbMmxbDdKlWqyNnZWWPHjlVsbKxcXV311FNPpTp3V9++fTVjxgz16NFDO3fuVLFixbR06VL98MMPmjRp0n3dLpAdODk56eOPP1bTpk1Vvnx59ezZU4888oj+/vtvbdq0Sd7e3vr666/v2o6vr6/q1Kmjnj176vTp05o0aZJKlixpM8msdPOvf507d9aUKVPk7OycYnL89Hj55ZfvWsfea0y6maBbv369JkyYoICAAAUGBqY6l0RaKleurO7du2vmzJnW2xZ+/vlnzZkzR61bt1aDBg0k3bztdsiQIYqMjFSLFi3UrFkz/frrr1q1ahVDzAEgHYoXL64KFSpo/fr16tWrl7W8devWeuKJJ/Tqq6/qyJEjKlOmjL766itduHBBkn0jjsqUKaMSJUpoyJAh+vvvv+Xt7a0vvvgizRGtbm5uWr16tbp3764aNWpo1apV+uabb/TGG2+kOSdSeqWn/3Kr3r1763//+5969+6txx9/XFu3brWOarkX9vTL0tM3rVatmhYtWqTBgwerevXq8vT0VMuWLe3+DK9SpYq6dOmiadOmKTY2VrVq1dKGDRvSNTIuNa+//roWLlyopk2batCgQfL19dWcOXMUFRWlL774Is2pA+7H1KlTVadOHVWsWFF9+vRR8eLFdfr0af3000/666+/tGfPHklSixYtFBERoZ49e6pWrVrau3ev5s+fn2Kepz59+mjKlCnq1q2bdu7cqYIFC2revHkp5lvLTtd7iRIllDt3bn344Yfy8vKSh4eHatSoYZ2Dy96+5Lp161SkSBFVrVr1vuLBQ8RRj/kDskLy40937Nhxx3pFixY1zZs3T1E+c+ZMU61aNePu7m68vLxMxYoVzdChQ80/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p5/0+eef67ffflOHDh3UpEkTHT58WN7e3mrRooUWLFhgs838+fPVunVr5cqVS9evX1dwcLC8vLz03Xff6YcffpCnp6eaNGmia9euWbfZtGmTjh49qk2bNmnOnDmaPXu2Zs+eLUn68ssvVahQIUVEROjUqVM6deqUXbED/2Vz5syRh4eHtm/frnHjxikiIkLr1q1TUlKSWrVqpQsXLmjLli1at26djh07pk6dOlm3ffbZZ1WoUCHt2LFDO3fu1Ouvvy4XFxfVqlVLkyZNkre3t/VnbciQIXeMIz0/n0ePHtWqVau0evVqLVy4UJ988omaN2+uv/76S1u2bNHYsWP11ltvafv27dZtOnTooDNnzmjVqlXauXOnHnvsMTVs2FAXLly4/5MIxzBANvf++++bvHnzmho1aph8+fKZ/fv3G2OMSUpKyuLI8LBKTEy0/n/58uXm448/Nh988IE5efJkFkYF3BQeHm7WrFljXX7ttddMsWLFTJ48eUyHDh3MypUrszA6AOkRFxdnXF1dzUcffZRi3aZNm4wk8++//1rLfv31VyPJREVFGWOM6dKli2nWrJnNdp06dTI+Pj533G/58uXNBx98cNf4Tpw4YZydnc3ff/9tU96wYUMzfPhwY4wxy5YtM56eniY+Pt4YY0xsbKxxc3Mzq1atMsYYM2/ePPPoo4/a9OsSEhKMu7u79XdZ9+7dTdGiRc2NGzesdTp06GA6depkXS5atKiZOHHiXWMGHgb169c3derUsSmrXr26GTZsmFm7dq1xdnY2f/75p3Xd/v37jSTz888/G2OM8fLyMrNnz0617VmzZt31d8jtUvv5vL2dUaNGmVy5cpm4uDhrWXBwsClWrJhN3/vRRx81kZGRxhhjvvvuO+Pt7W2uXr1q03aJEiXMjBkz0hUjsg5zSiHbGzRokNauXatvv/1WvXr1UoECBSSJodnIMsmjT4YOHar58+erevXqOnDggObOnauXX35Zzz77bBZHiIfV7t279c033+jHH3+Up6enLBaLli5dqk8//VTHjh3T6tWrFRERoatXr6pdu3ZZHS6Au/j999+VkJCghg0b3vP2bdq0sSmrWbOmVq9ebV2+dOmSwsLC9M033+jUqVO6ceOGrly5YtdIqb179yoxMVGlS5e2KU9ISFDevHklSc2aNZOLi4u++uorde7cWV988YW8vb3VqFEjSTdHch45ckReXl42bVy9elVHjx61LpcvX17Ozs7W5YIFC2rv3r12ngng4VOpUiWb5YIFC+rMmTP6/fffVbhwYRUuXNi6rly5csqdO7d+//13Va9eXYMHD1bv3r01b948NWrUSB06dFCJEiUyPeZixYrZ/C7Inz+/nJ2drX3v5LIzZ85Iuvn749KlS9bfN8muXLli8/sD2RtJKWRL5v9PZn7t2jW5uLioUqVKqlSpkubNmyc/Pz+9+OKLKlq0qM2k54YJ0OFA8+bN0/z587Vy5UpVrVpVn3/+ubp27ao8efJkdWh4iFWpUkURERH64IMPNHbsWBUrVkz9+vVTgwYN1KBBA1WqVEmTJ0/W2LFjZbFY1LZt26wOGcAd3GkS4OQvaeaWW8aT51hKjyFDhmjdunV69913VbJkSbm7u6t9+/Y2t86l5dKlS3J2dtbOnTttEkaS5OnpKUnKmTOn2rdvrwULFqhz585asGCBOnXqpBw5cljbqFatmubPn5+ifT8/P+v/XVxcbNZZLBbmzQPu4H5+ZsLCwtS1a1d98803WrVqlUaNGqXPP/88RZI7o6UW852O49KlSypYsKB1HrtbpfcJgcg6JKWQ7SQ/ZU+6+Ze2nDlzasyYMZIkf39/vfvuu5Kk/v37q0iRIpJujg6oUqVKlsSLh1NUVJSaNGliTUi9+OKLmjp1qpo1a6bLly/r33//1SOPPJLVYeIhkpiYKGdnZwUHByspKUlTp07V/Pnz9cILL1jrVK9eXS+//LImT56scePG6fLly3ruueeyMGoAd1KqVCm5u7trw4YN6t27t8265ITNqVOnrH8Q2b17t02dsmXL2sy9Iknbtm2zWf7hhx/Uo0cP65fNS5cu2UwyfidVq1ZVYmKizpw5o7p166ZZ79lnn9XTTz+t/fv3a+PGjTbzWj322GNatGiR/P395e3tbdd+U5MzZ04lJibe8/bAw6Js2bI6efKkTp48aR0tdeDAAcXExKhcuXLWeqVLl1bp0qX1yiuvqEuXLpo1a5batGlzTz9rmfXz+dhjjyk6Olo5cuRQsWLFMrx9OAYTnSPbSU5Ivfvuu2rbtq2ee+45zZkzR5IUGhqq1157TfPnz9f777+vLVu2qGnTpurQoYMkJphG5kv+QP3zzz+VP39+/frrr+rTp48iIyPVv39/GWM0a9YsLVu2TDdu3MjiaPGwSEpKso5SuHr1qpo2baohQ4aoYsWK+vLLL7Vx40Zr3ccff1wvv/yy8uXLl+pfFgFkH25ubho2bJiGDh2quXPn6ujRo9q2bZs++eQTlSxZUoULF1ZYWJgOHz6sb775Ru+9957N9oMGDdLq1av17rvv6vDhw5oyZYrNrXvSzcTXl19+qd27d2vPnj3q2rWr3aMpSpcurWeffVbdunXTl19+qaioKP3888+KjIzUN998Y61Xr149FShQQM8++6wCAwNVo0YN67pnn31W+fLlU6tWrfTdd98pKipKmzdv1qBBg/TXX3/Zfa6KFSumrVu36u+//9a5c+fs3g542DRq1EgVK1bUs88+q127dunnn39Wt27dVL9+fT3++OPWh0tt3rxZJ06c0A8//KAdO3aobNmykm7+rF26dEkbNmzQuXPnrE/RvJPM+vls1KiRatasqdatW2vt2rU6fvy4fvzxR7355pv65ZdfMmw/yFwkpZBt3JpQmjRpkt555x098cQTOn78uKZPn67hw4dLkl5++WUNGzZMa9asUb9+/XTx4kUdOHBAEvNMIePd3jFP/uLftm1bTZo0SdWqVdPMmTPVv39/STfvYf/66691/Phx660JQGa6dXTp2LFjNXToUEVFRSkoKEhvvfWWSpUqpbFjx9okoKpVq6b33ntPM2fOzKKoAdhrxIgRevXVVzVy5EiVLVtWnTp10pkzZ+Ti4qKFCxfq4MGDqlSpksaOHZviyXpPPvmkPvroI73//vuqXLmy1q5dq7feesumzoQJE5QnTx7VqlVLLVu2VHBwsB577DG745s1a5a6deumV199VY8++qhat26tHTt2WEezSzf7Z126dNGePXtSzLuYK1cubd26VUWKFFHbtm1VtmxZvfDCC7p69Wq6Rk5FRETo+PHjKlGihM1tfwBsWSwWrVixQnny5FG9evXUqFEjFS9eXIsWLZJ0s697/vx5devWTaVLl1bHjh3VtGlThYeHS5Jq1aqlF198UZ06dZKfn5/GjRt3131m1s+nxWLRt99+q3r16qlnz54qXbq0OnfurBMnTtj9lFJkPYthaAmymR9//FErVqzQU089peDgYJ0/f14TJ07UqlWr9PTTT+t///ufJGnfvn26ceOGKlWqJCcnJ924cYMkADLUrfOUrVq1SmfOnFGdOnUUEBAgFxcXvf7661qwYIHG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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Key insight: host_time is slightly slower due to CPU overhead,\n", - "but it catches ALL work on ALL streams - essential for untrusted code!\n" - ] - } - ], - "source": [ - "# Experiment 2: Compare all 4 timing methods\n", - "print(\"Comparing all KernelBench timing methods on 4096x4096 matmul:\")\n", - "print(\"=\" * 70)\n", - "\n", - "methods = [\"cuda_event\", \"host_time\", \"do_bench\", \"do_bench_impl\"]\n", - "results = {}\n", - "\n", - "for method in methods:\n", - " print(f\"\\nTesting {method}...\")\n", - " try:\n", - " method_fn = get_timing_function(method)\n", - " times = method_fn(\n", - " simple_mm, \n", - " [a, b], \n", - " num_warmup=10, \n", - " num_trials=50, \n", - " verbose=False,\n", - " device=DEVICE\n", - " )\n", - " results[method] = get_timing_stats(times, device=DEVICE)\n", - " print(f\" {method}: {results[method]['mean']:.4f} ms (std={results[method]['std']:.4f})\")\n", - " except Exception as e:\n", - " print(f\" {method}: Skipped due to {type(e).__name__} (Triton version compatibility)\")\n", - " # Remove from list if it failed\n", - " methods = [m for m in methods if m in results]\n", - "\n", - "# Only plot if we have results\n", - "if results:\n", - " # Visualize the comparison\n", - " fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", - "\n", - " # Bar chart of mean times\n", - " available_methods = [m for m in methods if m in results]\n", - " means = [results[m]['mean'] for m in available_methods]\n", - " stds = [results[m]['std'] for m in available_methods]\n", - " colors = ['#2ecc71', '#e74c3c', '#3498db', '#9b59b6'][:len(available_methods)]\n", - "\n", - " axes[0].bar(available_methods, means, yerr=stds, capsize=5, color=colors, alpha=0.8)\n", - " axes[0].set_ylabel('Time (ms)')\n", - " axes[0].set_title('Mean Execution Time by Method')\n", - " axes[0].tick_params(axis='x', rotation=45)\n", - "\n", - " # Highlight cuda_event vs host_time with truncated y-axis for readability\n", - " if 'cuda_event' in results and 'host_time' in results:\n", - " cuda_mean = results['cuda_event']['mean']\n", - " host_mean = results['host_time']['mean']\n", - " \n", - " axes[1].bar(['cuda_event', 'host_time'], \n", - " [cuda_mean, host_mean], \n", - " color=['#2ecc71', '#e74c3c'], alpha=0.8)\n", - " axes[1].set_ylabel('Time (ms)')\n", - " axes[1].set_title('cuda_event vs host_time\\n(host_time catches side-streams)\\n(graph truncated for readability)')\n", - " \n", - " # Truncate y-axis to make the difference easier to see\n", - " min_val = min(cuda_mean, host_mean)\n", - " max_val = max(cuda_mean, host_mean)\n", - " margin = (max_val - min_val) * 2 # Add margin around the data\n", - " axes[1].set_ylim(min_val - margin, max_val + margin)\n", - " else:\n", - " axes[1].text(0.5, 0.5, 'Comparison unavailable', ha='center', va='center')\n", - " axes[1].set_axis_off()\n", - "\n", - " plt.tight_layout()\n", - " plt.show()\n", - "\n", - "print(\"\\nKey insight: host_time is slightly slower due to CPU overhead,\")\n", - "print(\"but it catches ALL work on ALL streams - essential for untrusted code!\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The `discard_first` Effect\n", - "\n", - "Even after warmup, the first timing trial can be affected by lazy initialization. Let's see this in action." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T21:24:50.241069Z", - "iopub.status.busy": "2025-12-17T21:24:50.240945Z", - "iopub.status.idle": "2025-12-17T21:24:50.348421Z", - "shell.execute_reply": "2025-12-17T21:24:50.347364Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Demonstrating the discard_first effect:\n", - "============================================================\n", - "[Profiling] Using timing method: cuda_event\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 15\n", - "\n", - "First trial: 0.3454 ms\n", - "Mean of all trials: 0.3444 ms\n", - "Mean without first: 0.3443 ms\n", - "First trial overhead: 0.3%\n" - ] - }, - { - "data": { - "image/png": "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I/tRUlKCX3/9Fe7u7hXuOxERERERkb4MOpwyMjISAwcORGBgINq1a4eYmBjk5eXJs1WGh4fDw8MD0dHRAKRrygIDA+Hv74/CwkJs374dsbGxWLp0KQDA0dERjo6OGvswMTGBm5sbGjVqBAAaZ+kAwMrKCgDg7+8vX8u2f/9+9OzZE6NHj8Zrr72GtLQ0AFLh6eDgAACYMWMGnn32WdSvXx+3b9/GnDlzkJKSgnfffbc63ioiIiIiIiIABi7iwsLCkJmZiSlTpiAtLQ0BAQHYuXOnPNnJtWvXNE4r5uXlYfjw4bh+/TosLCzQuHFjfPfddwgLC6vSfq1evRr5+fmIjo6WC0gA6NKlCw4cOAAAuHXrFoYMGYK0tDTY29ujbdu2OHLkCJo2bVqlfSEiIiIiInqQShRF0dCdeFrl5OTA1tYW2dnZipjYJCMjAy4uLgYfD0wS5kR5mBNlYT6UhzlRHuZEWZgP5VFSTvSpDfjpISIiIiIiqkVYxBEREREREdUiLOKIiIiIiIhqERZxREREREREtQiLOCIiIiIiolqERRwREREREVEtwiKOiIiIiIioFmERR0REREREVIuwiCMiIiIiIqpFWMQRERERERHVIiziiIiIiIiIahEWcURERERERLUIizgiIiIiIqJahEUcERERERFRLcIijoiIiIiIqBZhEUdERERERFSLsIgjIiIiIiKqRVjEERERERER1SIs4oiIiIiIiGoRFnFERERERES1CIs4IiIiIiKiWoRFHBERERERUS3CIo6IiIiIiKgWYRFHRERERERUi7CIIyIiIiIiqkVYxBEREREREdUiLOKIiIiIiIhqERZxREREREREtQiLOCIiIiIiolqERRwREREREVEtwiKOiIiIiIioFmERR0REREREVIuwiCMiIiIiIqpFWMQRERERERHVIiziiIiIiIiIahEWcURERERERLWIwYu4xYsXw8fHB+bm5mjfvj2OHz+uM3bz5s0IDAyEnZ0dLC0tERAQgNjYWJ3xw4YNg0qlQkxMjNblhYWFCAgIgEqlQlJSksays2fPolOnTjA3N4enpyc+//zzMutv3LgRjRs3hrm5OVq0aIHt27dX6DUTERERERFVlkGLuPXr1yMyMhJTp05FYmIiWrVqhZCQEGRkZGiNd3BwwOTJk5GQkICzZ88iIiICERER2LVrV5nYH3/8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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "The first trial often shows initialization overhead even after warmup.\n", - "Using discard_first=1 (default) gives more consistent measurements.\n" - ] - } - ], - "source": [ - "# Demonstrate the discard_first effect\n", - "# Even after warmup, the first timing trial can have higher overhead\n", - "\n", - "print(\"Demonstrating the discard_first effect:\")\n", - "print(\"=\" * 60)\n", - "\n", - "# Create fresh data and clear caches to make initialization overhead more visible\n", - "torch.cuda.empty_cache()\n", - "a_fresh, b_fresh = get_data(2048)\n", - "\n", - "# Collect trials with discard_first=0 to see ALL trials including the first one\n", - "timing_fn = get_timing_function(\"cuda_event\")\n", - "times_all = timing_fn(\n", - " simple_mm, [a_fresh, b_fresh],\n", - " num_warmup=3,\n", - " num_trials=15,\n", - " discard_first=0, # Keep ALL trials including first\n", - " verbose=False,\n", - " device=DEVICE\n", - ")\n", - "\n", - "# Calculate statistics\n", - "first_trial = times_all[0]\n", - "remaining_trials = times_all[1:]\n", - "mean_all = np.mean(times_all)\n", - "mean_remaining = np.mean(remaining_trials)\n", - "\n", - "print(f\"\\nFirst trial: {first_trial:.4f} ms\")\n", - "print(f\"Mean of all trials: {mean_all:.4f} ms\")\n", - "print(f\"Mean without first: {mean_remaining:.4f} ms\")\n", - "print(f\"First trial overhead: {((first_trial / mean_remaining) - 1) * 100:.1f}%\")\n", - "\n", - "# Visualize the effect with a scatter plot\n", - "plt.figure(figsize=(10, 5))\n", - "plt.scatter(range(len(times_all)), times_all, alpha=0.7, color='blue', s=60)\n", - "plt.scatter([0], [first_trial], color='red', s=100, zorder=5, label=f'First trial: {first_trial:.3f}ms')\n", - "plt.axhline(y=mean_remaining, color='green', linestyle='--', alpha=0.7, \n", - " label=f'Mean (without first): {mean_remaining:.3f}ms')\n", - "plt.axhline(y=mean_all, color='orange', linestyle=':', alpha=0.7,\n", - " label=f'Mean (all): {mean_all:.3f}ms')\n", - "plt.xlabel('Trial Index')\n", - "plt.ylabel('Time (ms)')\n", - "plt.title('First Trial Overhead Effect (after warmup)')\n", - "plt.legend(loc='upper right')\n", - "plt.grid(True, alpha=0.3)\n", - "plt.show()\n", - "\n", - "print(\"\\nThe first trial often shows initialization overhead even after warmup.\")\n", - "print(\"Using discard_first=1 (default) gives more consistent measurements.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "HwsjlhAazX2j" - }, - "source": [ - "## The \"Agent\" Trap: Reward Hacking via Hidden Streams\n", - "\n", - "When evaluating LLM-generated kernels (like with [Kernel Bench](https://github.com/ScalingIntelligence/KernelBench)), you're not just fighting measurement noise—you're fighting an optimizer that may inadvertently discover exploits in your harness.\n", - "\n", - "One such exploit: launching work on a **side stream** to make the kernel appear instantaneous." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:50.351000Z", - "iopub.status.busy": "2025-12-17T21:24:50.350876Z", - "iopub.status.idle": "2025-12-17T21:24:52.778917Z", - "shell.execute_reply": "2025-12-17T21:24:52.777685Z" - }, - "id": "UuwtML39zX2j", - "outputId": "95ebbb26-e415-491a-da30-6a78ce387906" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Standard benchmark on tricky kernel: 0.0978 ms\n" - ] - } - ], - "source": [ - "def tricky_agent_kernel(a, b):\n", - " \"\"\"A 'clever' kernel that games the benchmarking harness.\"\"\"\n", - " # The agent creates a new stream to \"optimize\"\n", - " s = torch.cuda.Stream()\n", - " with torch.cuda.stream(s):\n", - " # This work happens on a side channel!\n", - " result = torch.matmul(a, b)\n", - " return result\n", - "\n", - "print(f\"Standard benchmark on tricky kernel: {final_benchmark(tricky_agent_kernel, a, b):.4f} ms\")\n", - "# Likely reports ~0.00ms or very close to it!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3HXns_XizX2j" - }, - "source": [ - "**The Issue:**\n", - "Standard benchmarking tools (including `do_bench`) record events on the *current default stream*.\n", - "\n", - "1. Benchmark starts timer on Stream A (the default stream).\n", - "2. Agent launches work on Stream B and returns immediately.\n", - "3. Benchmark stops timer on Stream A.\n", - "\n", - "Since Stream A had no work, the timer reports `~0.00ms`, while Stream B is still churning away in the background.\n", - "\n", - "**Why this matters for evals:**\n", - "If your reward signal is \"lower time = better score,\" an agent that discovers this pattern will be rewarded for producing *broken* code. The kernel \"runs\" instantly because you never measured it at all.\n", - "\n", - "**Mitigations:**\n", - "- **Wall-clock + full device sync:** Trade precision for correctness (catches all streams, but includes CPU overhead)\n", - "- **Static analysis:** Reject submissions that create `torch.cuda.Stream()` objects\n", - "- **Manual inspection:** For high-stakes evals, benchmark kernels in isolation outside the automated harness\n", - "\n", - "### How KernelBench Addresses This\n", - "\n", - "KernelBench's timing module provides the **`host_time`** method specifically designed for evaluating untrusted code:\n", - "\n", - "**Use `torch.cuda.synchronize()`** before AND after timing - this waits for ALL streams on the device, not just the default stream\n", - "\n", - "```python\n", - "# For trusted code (faster, but can be fooled)\n", - "timing_fn = get_timing_function(\"cuda_event\")\n", - "\n", - "# For untrusted/agent code (catches side-streams)\n", - "timing_fn = get_timing_function(\"host_time\")\n", - "```\n", - "\n", - "The trade-off: `host_time` includes some CPU overhead in the measurement. However, note that host_time should be pretty similar to sync_time. Therefore, if both times are within a some percent of each other, you can be pretty sure that the kernel is running correctly and score using sync_time." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:52.782281Z", - "iopub.status.busy": "2025-12-17T21:24:52.782061Z", - "iopub.status.idle": "2025-12-17T21:24:52.830292Z", - "shell.execute_reply": "2025-12-17T21:24:52.829161Z" - }, - "id": "KbAFqiyizX2j", - "outputId": "6bc91db4-935c-4af9-bdc9-be3c50e890c4" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Robust benchmark on tricky kernel: 21.5401 ms\n", - "Robust benchmark on normal kernel: 21.4700 ms\n" - ] - } - ], - "source": [ - "def benchmark_untrusted(func, *args):\n", - " \"\"\"Benchmark untrusted code by using wall-clock time with full device sync.\n", - "\n", - " This trades some precision (includes CPU overhead) for correctness\n", - " (catches work on any stream).\n", - " \"\"\"\n", - " torch.cuda.synchronize() # Clear any pending work\n", - " start = time.perf_counter()\n", - " func(*args)\n", - " torch.cuda.synchronize() # Wait for ALL streams\n", - " end = time.perf_counter()\n", - " return (end - start) * 1000\n", - "\n", - "print(f\"Robust benchmark on tricky kernel: {benchmark_untrusted(tricky_agent_kernel, a, b):.4f} ms\")\n", - "print(f\"Robust benchmark on normal kernel: {benchmark_untrusted(simple_mm, a, b):.4f} ms\")" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T21:24:52.832854Z", - "iopub.status.busy": "2025-12-17T21:24:52.832734Z", - "iopub.status.idle": "2025-12-17T21:24:53.846639Z", - "shell.execute_reply": "2025-12-17T21:24:53.845578Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Side-Stream Detection Experiment:\n", - "============================================================\n", - "[Profiling] Using timing method: cuda_event\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using timing method: host_time\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 3, trials 10\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Tricky kernel with cuda_event: 0.3070 ms (FOOLED!)\n", - "Tricky kernel with host_time: 21.8000 ms (CORRECT)\n", - "Normal kernel with host_time: 21.6000 ms (reference)\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAajRJREFUeJzt3Xd8VFX+//H3pE16I40SEjoJ0kFBBSxAgJWlKc1Cs+wqsIiKi7pCVBbBAmtDRQXUVVERO0X9AiJNQAHpEOkEUiAJ6ZA5vz/4ZZYhARLIMAm8no8Hjwdz7rl3PvdO5mTeOXfutRhjjAAAAAAAQIVzc3UBAAAAAABcqQjdAAAAAAA4CaEbAAAAAAAnIXQDAAAAAOAkhG4AAAAAAJyE0A0AAAAAgJMQugEAAAAAcBJCNwAAAAAATkLoBgAAAADASQjdAHAOsbGxGjp06AX7zZ49WxaLRXv37nV6Tbhy3HTTTbrppptcXcZlZ7FYNHHiRFeXAUkTJ06UxWJRWlqaq0u5ZEOHDlVsbKyrywCAUhG6AVx1/vjjD91+++2KiYmRt7e3atasqS5duujVV191dWkOvvnmG3Xq1EkRERHy9fVV3bp11b9/fy1cuNDe5/Dhw5o4caI2bNjgukKdZOnSpbJYLPZ/VqtVkZGRuummm/Tvf/9bqampF73ty3Xctm7dqokTJ/IHGUiScnNzNXHiRC1dutTVpbjMpRyDK3m8A3Bl83B1AQBwOa1cuVI333yzateurfvuu09RUVE6cOCAVq9erf/85z8aNWqUve+OHTvk5uaav02++OKLeuyxx9SpUyeNHz9evr6+2r17t3788Ud98skn6tatm6TTH0ITExMVGxurFi1auKRWZxs9erTatm2roqIipaamauXKlZowYYJefvllffrpp7rlllvKvc3Lddy2bt2qxMRE3XTTTSVm4RYvXuy050XllJubq8TEREm6Ks9ykC7tGJzvfTtz5kzZbLYKqhIAKhahG8BVZdKkSQoKCtLatWsVHBzssCwlJcXhsdVqvYyV/c+pU6f07LPPqkuXLqUGs7PrLI/c3Fz5+vpeSnmXXYcOHXT77bc7tG3cuFFdu3ZVv379tHXrVlWvXt1F1V08Ly8vV5cAXDE8PT1dXQIAnBOnlwO4qiQlJalJkyYlArckRUREODwu7TvdW7Zs0S233CIfHx/VqlVLzz333DlnVxYsWKAOHTrIz89PAQEB+stf/qItW7ZcsMa0tDRlZWXphhtuKHV5cZ1Lly5V27ZtJUnDhg2zn4Y9e/ZsSadnka655hqtX79eHTt2lK+vr5544glJUkFBgSZMmKD69evLarUqOjpa48aNU0FBgcNzzZo1S7fccosiIiJktVoVHx+vGTNmlKgpNjZWt912m5YuXao2bdrIx8dHTZs2tZ9C+sUXX6hp06by9vZW69at9fvvv1/wOJxP8+bNNX36dGVkZOi1115zWHbo0CENHz5ckZGRslqtatKkid577z378gsdN0las2aNunXrpqCgIPn6+qpTp05asWJFiToOHTqkESNGqEaNGrJarapTp47+/ve/q7CwULNnz9Ydd9whSbr55pvtz1N8TEr7TndKSopGjBihyMhIeXt7q3nz5pozZ45Dn71798pisejFF1/U22+/rXr16slqtapt27Zau3atQ9+TJ09q+/btSk5OLtNx3b59u/r376/w8HD5+PioUaNGevLJJ+3Lz/W92eLvBp+poKBADz/8sMLDwxUQEKC//vWvOnjwYIl19+3bpwcffFCNGjWSj4+PqlWrpjvuuOOiT8n/8MMP1bp1a/n4+Cg0NFQDBw7UgQMH7MtHjhwpf39/5ebmllh30KBBioqKUlFRkb2tLO/joUOHyt/fX4cOHVLv3r3l7++v8PBwPfroo/Zt7d27V+Hh4ZKkxMRE+8/Dub7fvm7dOlkslhKvvyQtWrRIFotF3377rSTpxIkTGjNmjGJjY2W1WhUREaEuXbrot99+K9Mxy8jI0NChQxUcHKygoCANGzasxPEp/mNg8c9bbGysnnjiiRJjxrp165SQkKCwsDD5+PioTp06Gj58+EUdgzNd6H179s/mme+T119/XXXr1pWvr6+6du2qAwcOyBijZ599VrVq1ZKPj4969eqlY8eOlXjeix3HAcCBAYCrSNeuXU1AQID5448/Ltg3JibGDBkyxP44OTnZhIeHm5CQEDNx4kTzwgsvmAYNGphmzZoZSWbPnj32vu+//76xWCymW7du5tVXXzVTpkwxsbGxJjg42KFfaYqKioyPj49p3bq1SU9PP2e/I0eOmGeeecZIMvfff7/54IMPzAcffGCSkpKMMcZ06tTJREVFmfDwcDNq1Cjz1ltvmS+//NIUFRWZrl27Gl9fXzNmzBjz1ltvmZEjRxoPDw/Tq1cvh+do27atGTp0qJk2bZp59dVXTdeuXY0k89prr5U4Vo0aNTLVq1c3EydONNOmTTM1a9Y0/v7+5sMPPzS1a9c2zz//vHn++edNUFCQqV+/vikqKjrvcViyZImRZD777LNSlxcWFhofHx/Tpk0bh2NSq1YtEx0dbZ555hkzY8YM89e//tVIMtOmTSvTcfvpp5+Ml5eXad++vXnppZfMtGnTTLNmzYyXl5dZs2aN/bkOHTpkatSoYT+Ob775pvnXv/5l4uLizPHjx01SUpIZPXq0kWSeeOIJ+/McOXLE/vp06tTJvr3c3FwTFxdnPD09zcMPP2xeeeUV06FDByPJTJ8+3d5vz549RpJp2bKlqV+/vpkyZYqZOnWqCQsLM7Vq1TKFhYUl+p75c3wuGzduNIGBgaZatWpm/Pjx5q233jLjxo0zTZs2tfcZMmSIiYmJKbHuhAkTzNkfKe666y4jyQwePNi89tprpm/fvvb3yoQJE+z9PvvsM9O8eXPz9NNPm7fffts88cQTJiQkxMTExJicnJwL1n2m5557zlgsFjNgwADzxhtvmMTERBMWFmZiY2PN8ePHjTHG/Pzzz0aS+fTTTx3WzcnJMX5+fuahhx6yt5X1fTxkyBDj7e1tmjRpYoYPH25mzJhh+vXrZySZN954wxhjTHZ2tpkxY4aRZPr06WP/edi4ceM596du3bqmR48eJdqHDRtmQkJC7K/14MGDjZeXlxk7dqx55513zJQpU0zPnj3Nhx9+eN7jVfy6tWzZ0vTt29e88cYb5t577zWSzLhx4xz6DhkyxEgyt99+u3n99dfNPffcYySZ3r172/scPXrUhISEmIYNG5oXXnjBzJw50zz55JMmLi7uoo9BsQu9b8/+2Sz+2W/RooWJj483L7/8snnqqaeMl5eXadeunXniiSfM9ddfb1555RUzevRoY7FYzLBhwxye81LGcQA4E6EbwFVl8eLFxt3d3bi7u5v27dubcePGmUWLFjkElWJnh+4xY8YYSQ7BKyUlxQQFBTmE7hMnTpjg4GBz3333OWzvyJEjJigoqER7aZ5++mkjyfj5+Znu3bubSZMmmfXr15fot3btWiPJzJo1q8SyTp06GUnmzTffdGj/4IMPjJubm1m+fLlD+5tvvmkkmRUrVtjbcnNzS2w3ISHB1K1b16EtJibGSDIrV660ty1atMhIMj4+Pmbfvn329rfeestIMkuWLDnvMbhQ6DbGmObNm5uQkBD74xEjRpjq1aubtLQ0h34DBw40QUFB9v0513Gz2WymQYMGJiEhwdhsNnt7bm6uqVOnjunSpYu97Z577jFubm5m7dq1JeoqXvezzz47576eHbqnT59uJDkEpcLCQtO+fXvj7+9vsrKyjDH/CxPVqlUzx44ds/f96quvjCTzzTff2NvKE7o7duxoAgICHF6rM/fFmLKH7g0bNhhJ5sEHH3ToN3jw4BKhu7SfsVWrVhlJ5v33379g3cX27t1r3N3dzaRJkxza//jjD+Ph4WFvt9lspmbNmqZfv34O/T799FMjyfz888/GmPK9j4sD6TPPPOPQt2XLlqZ169b2x6mpqSX2/3zGjx9vPD09HV7ngoICExwcbIYPH25vCwoKcvhjQVkVv25nbssYY/r06WOqVatmf1z8et57770O/R599FEjyfzf//2fMcaY+fPnG0mlvieKlfcYnOl84925Qnd4eLjJyMiwt48fP95IMs2bNzcnT560tw8aNMh4eXmZ/Px8Y0zFjOMAUIzTywFcVbp06aJVq1bpr3/9qzZu3KipU6cqISFBNWvW1Ndff33edb///nu1a9dO1157rb0tPDxcd955p0O/H374QRkZGRo0aJDS0tLs/9zd3XXddddpyZIlF6wzMTFRH330kVq2bKlFixbpySefVOvWrdWqVStt27atzPtrtVo1bNgwh7bPPvtMcXFxaty4sUN9xRckO7M+Hx8f+/8zMzOVlpamTp066c8//1RmZqbDduPj49W+fXv74+uuu06SdMstt6h27dol2v/8888y78e5+Pv768SJE5IkY4zmzZunnj17yhjjsG8JCQnKzMy84Om2GzZs0K5duzR48GClp6fb18/JydGtt96qn3/+WTabTTabTV9++aV69uypNm3alNjO2adal8X333+vqKgoDRo0yN7m6emp0aNHKzs7W8uWLXPoP2DAAIWEhNgfd+jQQZLjcY2NjZUxxuHU+dKkpqbq559/1vDhwx1eq0vZF+n0RfDONGbMmBJ9z/wZO3nypNLT01W/fn0FBweX+fRo6fRXGGw2m/r37+/w2kdFRalBgwb2n2uLxaI77rhD33//vbKzs+3rz507VzVr1tSNN94o6eLex3/7298cHnfo0OGSfs4HDBigkydP6osvvrC3LV68WBkZGRowYIC9LTg4WGvWrNHhw4cv6nlKqzs9PV1ZWVmS/vd6jh071qHfI488Ikn67rvv7HVI0rfffquTJ09eVC0V7Y477lBQUJD9cfH4c9ddd8nDw8OhvbCwUIcOHZJUMeM4ABTjQmoArjpt27bVF198ocLCQm3cuFHz58/XtGnTdPvtt2vDhg2Kj48vdb19+/bZP7CdqVGjRg6Pd+3aJUnnvKp2YGCgJCkvL69EcI2KirL/f9CgQRo0aJCysrK0Zs0azZ49Wx999JF69uypzZs3y9vb+4L7WrNmzRIX7Nq1a5e2bdtm/27l2c68UNuKFSs0YcIErVq1qsR3PDMzMx0+zJ4d1oqXRUdHl9p+/PjxC9Z/IdnZ2QoICJB0OjhmZGTo7bff1ttvv11q/wtdhK74tRsyZMg5+2RmZqqwsFBZWVm65pprLrLykvbt26cGDRqUuGJ+XFycffmZzj7exQH8Yo5rcTCsqP3Zt2+f3NzcVK9ePYf2s98r0un3weTJkzVr1iwdOnRIxhj7srPfH+eza9cuGWPUoEGDUpefeaGtAQMGaPr06fr66681ePBgZWdn6/vvv9cDDzxg/yNDWd/Hxby9vUu8p0JCQi7p57x58+Zq3Lix5s6dqxEjRkg6/ceBsLAwh7qmTp2qIUOGKDo6Wq1bt1aPHj10zz33qG7dumV6nvP9LAUGBtpfz/r16zv0i4qKUnBwsP1ns1OnTurXr58SExM1bdo03XTTTerdu7cGDx7ssgtTXuy4VN7XHwDOh9AN4Krl5eWltm3bqm3btmrYsKGGDRumzz77TBMmTLik7RZfWO2DDz5wCNHFimdX5s6dW2IW+szAUSwwMFBdunRRly5d5OnpqTlz5mjNmjXq1KnTBWs5cxbxzPqaNm2ql19+udR1ij+MJiUl6dZbb1Xjxo318ssvKzo6Wl5eXvr+++81bdq0EheQc3d3L3V752ovbV/L4+TJk9q5c6c9KBbXc9ddd50zNDdr1uy82yzexgsvvHDOW4n5+/uXesGly81Zx/V8zjXrfeaFx8pr1KhRmjVrlsaMGaP27dsrKChIFotFAwcOLNctoGw2mywWixYsWFDqsfH397f/v127doqNjdWnn36qwYMH65tvvlFeXp7D7HFZ38fFzvV6XKoBAwZo0qRJSktLU0BAgL7++msNGjTI4fn79++vDh06aP78+Vq8eLFeeOEFTZkyRV988YW6d+9+weco68/Shc56sFgs+vzzz7V69Wp98803WrRokYYPH66XXnpJq1evdngNLpeLHZfK+/oDwPkwYgCAZD9F+HxXeY6JibHPfpxpx44dDo+LZ/ciIiLUuXPnc24vISFBP/zwQ7nrnDNnjr3Oizn1t169etq4caNuvfXW867/zTffqKCgQF9//bXDbFFlOa3y888/V15enhISEiTJfpXsoqKi8x536dzHrfi1CwwMPO82wsPDFRgYqM2bN1/U85QmJiZGmzZtks1mc5jt3r59u325sxTPiF5of0JCQpSRkVGi/exZ+JiYGNlsNiUlJTnMbp/9XpFOv45DhgzRSy+9ZG/Lz88v9XnOp169ejLGqE6dOmrYsOEF+/fv31//+c9/lJWVpblz5yo2Nlbt2rVz2J504fdxeVzM+3XAgAFKTEzUvHnzFBkZqaysLA0cOLBEv+rVq+vBBx/Ugw8+qJSUFLVq1UqTJk0qU+i+kOLXc9euXfYzLyTp6NGjysjIKPGz2a5dO7Vr106TJk3SRx99pDvvvFOffPKJ7r333os6BsUuZd3ycsbrD+DqxXe6AVxVlixZUupMYPF3Fks7/bVYjx49tHr1av3666/2ttTUVP33v/916JeQkKDAwED9+9//LvV7jampqZJOf0ju3Lmzwz/p9L20V61aVWoNCxYscKjTz89PksoVUPr3769Dhw5p5syZJZbl5eUpJydH0v9mgs4+3XfWrFllfi5n2bhxo8aMGaOQkBA99NBDkk7X269fP82bN6/U8Fh83KVzH7fWrVurXr16evHFFx2+73v2Ntzc3NS7d2998803WrduXYl+xcesPK9Pjx49dOTIEc2dO9fedurUKb366qvy9/cv05kNZyvrLcPCw8PVsWNHvffee9q/f7/DsjNf/3r16ikzM1ObNm2ytyUnJ2v+/PkO6xQHvVdeecWhffr06SWe293dvcR78tVXXy337Hnfvn3l7u6uxMTEEtszxig9Pd2hbcCAASooKNCcOXO0cOFC9e/f32F5Wd/H5eHr6yupfO/XuLg4NW3aVHPnztXcuXNVvXp1dezY0b68qKioxGn4ERERqlGjRonbeV2sHj16SCr5+hWfLfOXv/xF0ulTs88+9sVnjBTXcjHHoNjFjHcXyxmvP4CrFzPdAK4qo0aNUm5urvr06aPGjRursLBQK1eutM90nX2695nGjRunDz74QN26ddM//vEP+fn56e2337bPUBYLDAzUjBkzdPfdd6tVq1YaOHCgwsPDtX//fn333Xe64YYbStxb+ky5ubm6/vrr1a5dO3Xr1k3R0dHKyMjQl19+qeXLl6t3795q2bKlpNMhKDg4WG+++aYCAgLk5+en6667TnXq1Dnn9u+++259+umn+tvf/qYlS5bohhtuUFFRkbZv365PP/1UixYtUps2bdS1a1d5eXmpZ8+eeuCBB5Sdna2ZM2cqIiKizPd9rgjLly9Xfn6+ioqKlJ6erhUrVujrr79WUFCQ5s+f73Dq5/PPP68lS5bouuuu03333af4+HgdO3ZMv/32m3788Uf7aeHnO27vvPOOunfvriZNmmjYsGGqWbOmDh06pCVLligwMFDffPONJOnf//63Fi9erE6dOun+++9XXFyckpOT9dlnn+mXX35RcHCwWrRoIXd3d02ZMkWZmZmyWq32+56f7f7779dbb72loUOHav369YqNjdXnn3+uFStWaPr06fbvrpfHoUOHFBcXpyFDhlzwYmqvvPKKbrzxRrVq1Ur333+/6tSpo7179+q7777Thg0bJEkDBw7U448/rj59+mj06NHKzc3VjBkz1LBhQ4eLnrVo0UKDBg3SG2+8oczMTF1//fX66aeftHv37hLPe9ttt+mDDz5QUFCQ4uPjtWrVKv3444+qVq1aufa1Xr16eu655zR+/Hjt3btXvXv3VkBAgPbs2aP58+fr/vvv16OPPmrv36pVK9WvX19PPvmkCgoKHE4tly79fVwaHx8fxcfHa+7cuWrYsKFCQ0N1zTXXXPC79AMGDNDTTz8tb29vjRgxwuFMiBMnTqhWrVq6/fbb1bx5c/n7++vHH3/U2rVrHc4euBTNmzfXkCFD9PbbbysjI0OdOnXSr7/+qjlz5qh37966+eabJUlz5szRG2+8oT59+qhevXo6ceKEZs6cqcDAQHtwv9hjIF3ceHexnPH6A7iKXearpQOASy1YsMAMHz7cNG7c2Pj7+xsvLy9Tv359M2rUKHP06FGHvmffMswYYzZt2mQ6depkvL29Tc2aNc2zzz5r3n333RL36Tbm9C2vEhISTFBQkPH29jb16tUzQ4cONevWrTtvjSdPnjQzZ840vXv3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EbPzadmypYqKipSSkqIOHTqcs9+dd96pLl26aMuWLfq///s/Pffcc/ZlrVq10ty5cxUREaHAwMAyPW9pvLy8HP4yDaBqiIuL04EDB3TgwAH7bPfWrVuVkZGh+Ph4e7+GDRuqYcOGevjhhzVo0CDNmjVLffr0uaj3vrPGi1atWunIkSPy8PBQbGxshW8fQPk9//zzatGihRo1auTQHhcXpxUrVji0rVixQg0bNqzwMLl9+3alp6fr+eeft49z69atu6ht/fWvf1XPnj01ePBgubu7a+DAgZJOjz9bt25V/fr1K6xu6fSMfY0aNfTnn386hHyA08txxfD29tbjjz+ucePG6f3331dSUpJWr16td999V/Xr11d0dLQmTpyoXbt26bvvvitx1c3Ro0dr4cKFevHFF7Vr1y699tprWrhwoUOfBg0a6IsvvtCGDRu0ceNGDR48uMyzTw0bNtSdd96pe+65R1988YX27NmjX3/9VZMnT9Z3331n79exY0dFRUXpzjvvVJ06dRz+UnrnnXcqLCxMvXr10vLly7Vnzx4tXbpUo0eP1sGDB8t8rGJjY/Xzzz/r0KFDSktLK/N6AFyrc+fOatq0qe6880799ttv+vXXX3XPPfeoU6dOatOmjfLy8jRy5EgtXbpU+/bt04oVK7R27VrFxcVJOv3ez87O1k8//aS0tDT7XRHOx1njRefOndW+fXv17t1bixcv1t69e7Vy5Uo9+eSTF/0BG8ClKR5fXnnlFYf2Rx55RD/99JOeffZZ7dy5U3PmzNFrr72mRx99tMJrqF27try8vPTqq6/qzz//1Ndff61nn332orfXp08fffDBBxo2bJg+//xzSdLjjz+ulStXauTIkdqwYYN27dqlr776SiNHjrzk+hMTEzV58mS98sor2rlzp/744w/NmjVLL7/88iVvG1UXoRtXlH/961965JFH9PTTTysuLk4DBgxQSkqKPD099fHHH2v79u1q1qyZpkyZ4jCDLEnt2rXTzJkz9Z///EfNmzfX4sWL9dRTTzn0efnllxUSEqLrr79ePXv2VEJCglq1alXm+mbNmqV77rlHjzzyiBo1aqTevXtr7dq1DqcyWSwWDRo0SBs3bizxV1JfX1/9/PPPql27tvr27au4uDiNGDFC+fn55Zr5fuaZZ7R3717Vq1fP4bR0AJWbxWLRV199pZCQEHXs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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Key insight: host_time correctly measures the tricky kernel!\n", - "Use host_time for evaluating untrusted/agent-generated code.\n" - ] - } - ], - "source": [ - "# Side-Stream Detection with KernelBench's host_time\n", - "# Let's demonstrate how host_time catches the tricky kernel\n", - "\n", - "print(\"Side-Stream Detection Experiment:\")\n", - "print(\"=\" * 60)\n", - "\n", - "# cuda_event (can be fooled by side-streams)\n", - "cuda_timing = get_timing_function(\"cuda_event\")\n", - "cuda_times = cuda_timing(tricky_agent_kernel, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", - "cuda_stats = get_timing_stats(cuda_times, device=DEVICE)\n", - "\n", - "# host_time (catches all streams)\n", - "host_timing = get_timing_function(\"host_time\")\n", - "host_times = host_timing(tricky_agent_kernel, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", - "host_stats = get_timing_stats(host_times, device=DEVICE)\n", - "\n", - "# Normal kernel for reference\n", - "normal_times = host_timing(simple_mm, [a, b], num_trials=10, verbose=False, device=DEVICE)\n", - "normal_stats = get_timing_stats(normal_times, device=DEVICE)\n", - "\n", - "print(f\"\\nTricky kernel with cuda_event: {cuda_stats['mean']:.4f} ms (FOOLED!)\")\n", - "print(f\"Tricky kernel with host_time: {host_stats['mean']:.4f} ms (CORRECT)\")\n", - "print(f\"Normal kernel with host_time: {normal_stats['mean']:.4f} ms (reference)\")\n", - "\n", - "# Visualize the dramatic difference\n", - "plt.figure(figsize=(10, 5))\n", - "methods = ['cuda_event\\n(fooled)', 'host_time\\n(correct)', 'Normal kernel\\n(reference)']\n", - "times = [cuda_stats['mean'], host_stats['mean'], normal_stats['mean']]\n", - "colors = ['red', 'green', 'blue']\n", - "\n", - "plt.bar(methods, times, color=colors, alpha=0.8)\n", - "plt.ylabel('Time (ms)')\n", - "plt.title('Side-Stream Detection: cuda_event vs host_time')\n", - "plt.grid(True, alpha=0.3, axis='y')\n", - "\n", - "# Add annotation\n", - "plt.annotate('Agent trick detected!', xy=(1, host_stats['mean']), \n", - " xytext=(1.3, host_stats['mean'] * 0.7),\n", - " arrowprops=dict(arrowstyle='->', color='green'),\n", - " fontsize=10, color='green')\n", - "plt.tight_layout()\n", - "plt.show()\n", - "\n", - "print(\"\\nKey insight: host_time correctly measures the tricky kernel!\")\n", - "print(\"Use host_time for evaluating untrusted/agent-generated code.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Uq4qvl8FzX2j" - }, - "source": [ - "## Correctness Before Speed\n", - "\n", - "A kernel that runs in 0.1ms but produces garbage is worthless. Before you start optimizing, **always verify correctness** against a reference implementation." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "execution": { - "iopub.execute_input": "2025-12-17T21:24:53.849299Z", - "iopub.status.busy": "2025-12-17T21:24:53.849171Z", - "iopub.status.idle": "2025-12-17T21:24:53.929702Z", - "shell.execute_reply": "2025-12-17T21:24:53.928700Z" - }, - "id": "J9W63Q5czX2k", - "outputId": "312076ee-f089-4276-8b8f-bb7a23575d3d" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "✓ Correctness verified!\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", - "Kernel time: 0.0648 ms\n" - ] - } - ], - "source": [ - "def my_experimental_kernel(a, b):\n", - " \"\"\"Pretend this is our custom optimized kernel.\"\"\"\n", - " return torch.matmul(a, b) # In reality, this would be your Triton/CUDA code\n", - "\n", - "def verify_correctness(kernel_fn, ref_fn, *args, atol=1e-2, rtol=1e-2):\n", - " \"\"\"Verify kernel produces correct output before benchmarking.\"\"\"\n", - " ref_output = ref_fn(*args)\n", - " kernel_output = kernel_fn(*args)\n", - "\n", - " if not torch.allclose(ref_output, kernel_output, atol=atol, rtol=rtol):\n", - " max_diff = (ref_output - kernel_output).abs().max().item()\n", - " raise AssertionError(\n", - " f\"Kernel output doesn't match reference! \"\n", - " f\"Max difference: {max_diff:.6f}\"\n", - " )\n", - " print(\"✓ Correctness verified!\")\n", - " return True\n", - "\n", - "# Always verify before benchmarking\n", - "a_test, b_test = get_data(1024)\n", - "verify_correctness(my_experimental_kernel, simple_mm, a_test, b_test)\n", - "\n", - "# Only benchmark if correct\n", - "time_ms = final_benchmark(my_experimental_kernel, a_test, b_test)\n", - "print(f\"Kernel time: {time_ms:.4f} ms\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Computing TFLOPS: Are We Hitting the Speed of Light?\n", - "\n", - "Now that we have correct, well-measured timings, the natural question is: **\"Is this kernel actually fast?\"** A kernel that runs in 2ms might sound good, but if the hardware could theoretically do it in 0.5ms, you're leaving 75% of performance on the table.\n", - "\n", - "To answer this, we convert our millisecond timings into **TFLOPS** (Tera Floating-Point Operations Per Second) and compare against the hardware's theoretical maximum—often called the **\"speed of light\"** or **roofline**.\n", - "\n", - "### Understanding Roofline Analysis\n", - "\n", - "The Roofline Model helps you understand whether your kernel is:\n", - "- **Compute-bound**: Limited by the GPU's arithmetic throughput (FLOPS)\n", - "- **Memory-bound**: Limited by memory bandwidth (GB/s)\n", - "\n", - "**Key formulas:**\n", - "- **Arithmetic Intensity** = FLOPs / Bytes accessed\n", - "- **Theoretical Peak FLOPS** = Clock speed × Cores × FLOPs/cycle\n", - "- **Theoretical Peak Bandwidth** = Memory clock × Bus width × 2 (for DDR)\n", - "\n", - "For matrix multiplication of two $N \\times N$ matrices:\n", - "- **FLOPs** = $2N^3$ (one multiply + one add per output element, summed $N$ times)\n", - "- **Bytes** = $3N^2 \\times \\text{sizeof(dtype)}$ (read A, read B, write C)\n", - "- **Arithmetic Intensity** = $\\frac{2N^3}{3N^2 \\times 4} = \\frac{N}{6}$ for float32\n", - "\n", - "Large matrix multiplications are highly compute-bound (high arithmetic intensity), so we expect to approach the compute roofline. For a deeper dive into roofline analysis and speed-of-light calculations, see the excellent [JAX Scaling Book chapter on Roofline](https://jax-ml.github.io/scaling-book/roofline/)." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "execution": { - "iopub.execute_input": "2025-12-17T21:24:53.932346Z", - "iopub.status.busy": "2025-12-17T21:24:53.932227Z", - "iopub.status.idle": "2025-12-17T21:24:56.741833Z", - "shell.execute_reply": "2025-12-17T21:24:56.740706Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Matrix Multiplication Performance\n", - "=================================================================\n", - "Size Time (ms) TFLOPS % of TF32 Peak \n", - "-----------------------------------------------------------------\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n", - "1024 0.0647 33.19 3.4 %\n", - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2048 0.3440 49.94 5.0 %\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4096 2.6700 51.48 5.2 %\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Profiling] Using device: cuda:0 NVIDIA H200, warm up 10, trials 100\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8192 21.4000 51.38 5.2 %\n", - "\n", - "Note: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\n", - "H200 TF32 theoretical peak: 989.0 TFLOPS\n", - "\n", - "For roofline analysis details, see: https://jax-ml.github.io/scaling-book/roofline/\n" - ] - } - ], - "source": [ - "def get_tflops(n, time_ms):\n", - " \"\"\"Calculate achieved TFLOPS for matrix multiplication.\"\"\"\n", - " flops = 2 * n ** 3 # Multiply-add for each of N^2 output elements\n", - " tflops = flops / (time_ms * 1e-3) / 1e12\n", - " return tflops\n", - "\n", - "# Theoretical peaks vary by GPU and precision\n", - "# PyTorch uses TF32 by default on Ampere+ GPUs for matmul\n", - "GPU_PEAK_TFLOPS = {\n", - " 'A100': {'fp32': 19.5, 'tf32': 156.0, 'fp16': 312.0},\n", - " 'H100': {'fp32': 67.0, 'tf32': 989.0, 'fp16': 1979.0},\n", - " 'H200': {'fp32': 67.0, 'tf32': 989.0, 'fp16': 1979.0},\n", - "}\n", - "\n", - "# Use TF32 peak since PyTorch defaults to TF32 on Ampere+\n", - "PEAK_TFLOPS = 989.0 # H200 TF32 peak\n", - "\n", - "# Benchmark at different sizes\n", - "print(\"Matrix Multiplication Performance\")\n", - "print(\"=\" * 65)\n", - "print(f\"{'Size':<8} {'Time (ms)':<12} {'TFLOPS':<12} {'% of TF32 Peak':<15}\")\n", - "print(\"-\" * 65)\n", - "\n", - "for size in [1024, 2048, 4096, 8192]:\n", - " a_test, b_test = get_data(size)\n", - " time_ms = final_benchmark(simple_mm, a_test, b_test)\n", - " tflops = get_tflops(size, time_ms)\n", - " efficiency = (tflops / PEAK_TFLOPS) * 100\n", - " print(f\"{size:<8} {time_ms:<12.4f} {tflops:<12.2f} {efficiency:<15.1f}%\")\n", - "\n", - "print(f\"\\nNote: PyTorch uses TF32 tensor cores by default on Ampere+ GPUs.\")\n", - "print(f\"H200 TF32 theoretical peak: {PEAK_TFLOPS} TFLOPS\")\n", - "print(f\"\\nFor roofline analysis details, see: https://jax-ml.github.io/scaling-book/roofline/\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zcYVXCkUzX2k" - }, - "source": [ - "## Conclusion\n", - "\n", - "Benchmarking on GPUs is fundamentally different from CPUs. The asynchronous nature of kernel launches, the hidden state of the L2 cache, and the noise of the OS scheduler all conspire to give you the wrong numbers.\n", - "\n", - "### What We Learned\n", - "\n", - "Through our journey, we discovered that robust GPU benchmarking requires:\n", - "1. **Device Synchronization** - Wait for GPU work to complete\n", - "2. **CUDA Events** - Use GPU-side timestamps, not CPU clocks\n", - "3. **Warmup Runs** - Settle compilation and memory allocators\n", - "4. **Multiple Samples** - Build statistical distributions\n", - "5. **L2 Cache Flushing** - Measure cold cache (realistic) performance\n", - "6. **Median Aggregation** - Filter out OS jitter and outliers\n", - "7. **Side-Stream Detection** - Catch work on non-default streams\n", - "\n", - "### What KernelBench Provides\n", - "\n", - "We've implemented all these best practices in **KernelBench's timing module** (`src/timing.py`):\n", - "\n", - "| Function | Purpose |\n", - "|----------|---------|\n", - "| `get_timing_function(method)` | Factory returning timing function by name |\n", - "| `clear_l2_cache(device)` | L2 cache flushing utility |\n", - "| `get_timing_stats(times)` | Statistical aggregation (mean, std, min, max) |\n", - "\n", - "**Four timing methods for different use cases:**\n", - "- **`cuda_event`** - Default for trusted code (fastest, GPU-side timing)\n", - "- **`host_time`** - For untrusted/agent code (catches all streams)\n", - "- **`do_bench`** - Triton-style adaptive trial counts\n", - "- **`do_bench_impl`** - Transparent do_bench with explicit control\n", - "\n", - "**Key parameters:**\n", - "- `num_warmup`, `num_trials`, `discard_first`, `device`, `verbose`\n", - "\n", - "### Recommended Usage\n", - "\n", - "```python\n", - "from src.timing import get_timing_function, get_timing_stats\n", - "\n", - "# For trusted code\n", - "timing_fn = get_timing_function(\"cuda_event\")\n", - "\n", - "# For agent evaluations (catches side-streams)\n", - "timing_fn = get_timing_function(\"host_time\")\n", - "\n", - "# Run benchmark\n", - "times = timing_fn(kernel, args, num_warmup=10, num_trials=100, device=\"cuda:0\")\n", - "stats = get_timing_stats(times, device=\"cuda:0\")\n", - "print(f\"Mean: {stats['mean']:.4f}ms, Std: {stats['std']:.4f}ms\")\n", - "```\n", - "\n", - "Happy optimizing!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "7Ah151CHzX2k" - }, - "source": [ - "---\n", - "\n", - "### Footnotes\n", - "\n", - "**On GPU Clock States:** For highly reproducible benchmarks (e.g., publishing papers), consider locking GPU clocks with `nvidia-smi -lgc `. GPUs dynamically adjust clock speeds based on thermals and power, which can introduce variance between runs. For most development work, median-based benchmarking handles this adequately.\n", - "\n", - "**On Warmup Iterations:** We use fixed warmup counts (10-50 iterations) for simplicity, but this can be insufficient or wasteful depending on the kernel. In extremely sensitive environments, you can implement an adaptive stopping criterion: run warmup iterations until the variance of recent samples falls below a threshold, indicating the system has stabilized. This is covered in more detail in the [GPU MODE lecture](https://www.youtube.com/watch?v=1i7dxoAfKOU).\n", - "\n", - "**On Bare Metal vs. Virtualized Environments:** Cloud VMs and containers add layers of abstraction that can introduce variance and overhead. GPU passthrough in virtualized environments adds latency, and shared cloud instances suffer from \"noisy neighbor\" effects where other tenants' workloads impact your measurements. For publishable results or when chasing small performance deltas, prefer bare metal. For day-to-day development, cloud instances are fine as long as you're aware your numbers may not match others exactly." - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "gpuType": "A100", - "include_colab_link": true, - "provenance": [] - }, - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.9" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -}