From 83ea97b05f68fea26dd59b4802bf65260f99c15d Mon Sep 17 00:00:00 2001 From: Mukesh Garg Date: Wed, 13 May 2026 15:00:41 -0700 Subject: [PATCH] Composite GEMM: K-loop accumulator residency, pinned operands, sweep + deck Co-Authored-By: Claude Opus 4.7 (1M context) --- benches/matmul_composite.py | 69 + docs/diagrams/gemm_sweep.json | 1612 ++++++++++++ docs/diagrams/kernbench2_overview.pptx | Bin 582751 -> 628239 bytes scripts/build_overview_slides.py | 2181 ++++++++++++++++- scripts/gemm_sweep.py | 232 ++ src/kernbench/common/pe_commands.py | 1 + .../components/builtin/pe_scheduler.py | 2 + src/kernbench/components/builtin/tiling.py | 69 +- src/kernbench/sim_engine/op_log.py | 26 +- src/kernbench/triton_emu/tl_context.py | 11 +- tests/test_pe_pipeline.py | 67 +- 11 files changed, 4219 insertions(+), 51 deletions(-) create mode 100644 benches/matmul_composite.py create mode 100644 docs/diagrams/gemm_sweep.json create mode 100644 scripts/gemm_sweep.py diff --git a/benches/matmul_composite.py b/benches/matmul_composite.py new file mode 100644 index 0000000..0365d6e --- /dev/null +++ b/benches/matmul_composite.py @@ -0,0 +1,69 @@ +"""Single-PE composite GEMM for PE_accelerator perf characterization. + +Three operand-staging variants are selectable via MATMUL_VARIANT: + + - "ref_ref" (default): a = tl.ref, b = tl.ref + Both operands HBM-resident; scheduler streams per-tile DMA. + - "load_ref": a = tl.load, b = tl.ref + A eagerly DMA'd into TCM up-front; B streamed per-tile. + - "load_load": a = tl.load, b = tl.load + Both eagerly DMA'd into TCM up-front. + +Other env vars: MATMUL_M, MATMUL_K, MATMUL_N, MATMUL_DTYPE. + +Run: + MATMUL_M=256 MATMUL_K=256 MATMUL_N=256 MATMUL_VARIANT=load_ref \ + kernbench run --topology topology.yaml --bench matmul_composite +""" +import os + +from kernbench.policy.placement.dp import DPPolicy + +M = int(os.environ.get("MATMUL_M", "256")) +K = int(os.environ.get("MATMUL_K", "256")) +N = int(os.environ.get("MATMUL_N", "256")) +DTYPE = os.environ.get("MATMUL_DTYPE", "f16") +VARIANT = os.environ.get("MATMUL_VARIANT", "ref_ref") + + +def _kernel_ref_ref(a_ptr, b_ptr, out_ptr, M, K, N, tl, DTYPE="f16"): + M, K, N = int(M), int(K), int(N) + a = tl.ref(int(a_ptr), shape=(M, K), dtype=DTYPE) + b = tl.ref(int(b_ptr), shape=(K, N), dtype=DTYPE) + h = tl.composite(op="gemm", a=a, b=b, out_ptr=int(out_ptr)) + tl.wait(h) + + +def _kernel_load_ref(a_ptr, b_ptr, out_ptr, M, K, N, tl, DTYPE="f16"): + M, K, N = int(M), int(K), int(N) + a = tl.load(int(a_ptr), shape=(M, K), dtype=DTYPE) + b = tl.ref(int(b_ptr), shape=(K, N), dtype=DTYPE) + h = tl.composite(op="gemm", a=a, b=b, out_ptr=int(out_ptr)) + tl.wait(h) + + +def _kernel_load_load(a_ptr, b_ptr, out_ptr, M, K, N, tl, DTYPE="f16"): + M, K, N = int(M), int(K), int(N) + a = tl.load(int(a_ptr), shape=(M, K), dtype=DTYPE) + b = tl.load(int(b_ptr), shape=(K, N), dtype=DTYPE) + h = tl.composite(op="gemm", a=a, b=b, out_ptr=int(out_ptr)) + tl.wait(h) + + +_KERNELS = { + "ref_ref": _kernel_ref_ref, + "load_ref": _kernel_load_ref, + "load_load": _kernel_load_load, +} + + +def run(torch): + if VARIANT not in _KERNELS: + raise ValueError(f"unknown MATMUL_VARIANT={VARIANT!r}; " + f"expected one of {list(_KERNELS)}") + kernel_fn = _KERNELS[VARIANT] + dp = DPPolicy(cube="replicate", pe="replicate", num_cubes=1, num_pes=1) + a = torch.empty((M, K), dtype=DTYPE, dp=dp, name="a") + b = torch.empty((K, N), dtype=DTYPE, dp=dp, name="b") + out = torch.empty((M, N), dtype=DTYPE, dp=dp, name="out") + torch.launch(f"matmul_composite_{VARIANT}", kernel_fn, a, b, out, M, K, N) diff --git a/docs/diagrams/gemm_sweep.json b/docs/diagrams/gemm_sweep.json new file mode 100644 index 0000000..9ab6fbd --- /dev/null +++ b/docs/diagrams/gemm_sweep.json @@ -0,0 +1,1612 @@ +{ + "tile_sizes": { + "M": 32, + "K": 64, + "N": 32 + }, + "engines": [ + "pe_dma", + "pe_fetch_store", + "pe_gemm", + "pe_math" + ], + "stages": [ + "DMA_READ", + "DMA_WRITE", + "FETCH", + "STORE", + "GEMM", + "MATH" + ], + "variants": [ + "ref_ref", + "load_ref", + "load_load" + ], + "rows": [ + { + "M": 32, + "K": 32, + "N": 32, + "variant": "ref_ref", + "flops": 65536, + "bytes_hbm": 6144, + "arith_intensity": 10.666666666666666, + "tile_count_expected": 1, + "sim_wall_clock_s": 0.569, + "engines": { + "pe_dma": { + "occupancy_ns": 52.0, + "wall_ns": 52.0, + "record_count": 3 + }, + "pe_fetch_store": { + "occupancy_ns": 20.0, + "wall_ns": 20.0, + "record_count": 2 + }, + "pe_gemm": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 40.0, + "wall_ns": 40.0, + "record_count": 2 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 16.0, + "wall_ns": 16.0, + "record_count": 1 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 88.38400000000001 + }, + { + "M": 32, + "K": 32, + "N": 32, + "variant": "load_ref", + "flops": 65536, + "bytes_hbm": 6144, + "arith_intensity": 10.666666666666666, + "tile_count_expected": 1, + "sim_wall_clock_s": 0.409, + "engines": { + "pe_dma": { + "occupancy_ns": 44.5, + "wall_ns": 44.5, + "record_count": 3 + }, + "pe_fetch_store": { + "occupancy_ns": 20.0, + "wall_ns": 20.0, + "record_count": 2 + }, + "pe_gemm": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 20.0, + "wall_ns": 20.0, + "record_count": 1 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 16.0, + "wall_ns": 16.0, + "record_count": 1 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 81.894 + }, + { + "M": 32, + "K": 32, + "N": 32, + "variant": "load_load", + "flops": 65536, + "bytes_hbm": 6144, + "arith_intensity": 10.666666666666666, + "tile_count_expected": 1, + "sim_wall_clock_s": 0.567, + "engines": { + "pe_dma": { + "occupancy_ns": 37.0, + "wall_ns": 37.0, + "record_count": 3 + }, + "pe_fetch_store": { + "occupancy_ns": 20.0, + "wall_ns": 20.0, + "record_count": 2 + }, + "pe_gemm": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 16.0, + "wall_ns": 16.0, + "record_count": 1 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 75.404 + }, + { + "M": 32, + "K": 64, + "N": 32, + "variant": "ref_ref", + "flops": 131072, + "bytes_hbm": 10240, + "arith_intensity": 12.8, + "tile_count_expected": 1, + "sim_wall_clock_s": 0.838, + "engines": { + "pe_dma": { + "occupancy_ns": 52.0, + "wall_ns": 52.0, + "record_count": 3 + }, + "pe_fetch_store": { + "occupancy_ns": 20.0, + "wall_ns": 20.0, + "record_count": 2 + }, + "pe_gemm": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 40.0, + "wall_ns": 40.0, + "record_count": 2 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 16.0, + "wall_ns": 16.0, + "record_count": 1 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 88.38400000000001 + }, + { + "M": 32, + "K": 64, + "N": 32, + "variant": "load_ref", + "flops": 131072, + "bytes_hbm": 10240, + "arith_intensity": 12.8, + "tile_count_expected": 1, + "sim_wall_clock_s": 1.097, + "engines": { + "pe_dma": { + "occupancy_ns": 52.5, + "wall_ns": 52.5, + "record_count": 3 + }, + "pe_fetch_store": { + "occupancy_ns": 20.0, + "wall_ns": 20.0, + "record_count": 2 + }, + "pe_gemm": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 20.0, + "wall_ns": 20.0, + "record_count": 1 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 16.0, + "wall_ns": 16.0, + "record_count": 1 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 89.894 + }, + { + "M": 32, + "K": 64, + "N": 32, + "variant": "load_load", + "flops": 131072, + "bytes_hbm": 10240, + "arith_intensity": 12.8, + "tile_count_expected": 1, + "sim_wall_clock_s": 1.264, + "engines": { + "pe_dma": { + "occupancy_ns": 53.0, + "wall_ns": 53.0, + "record_count": 3 + }, + "pe_fetch_store": { + "occupancy_ns": 20.0, + "wall_ns": 20.0, + "record_count": 2 + }, + "pe_gemm": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 16.0, + "wall_ns": 16.0, + "record_count": 1 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 16.384000000000015, + "wall_ns": 16.384000000000015, + "record_count": 1 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 91.404 + }, + { + "M": 32, + "K": 128, + "N": 32, + "variant": "ref_ref", + "flops": 262144, + "bytes_hbm": 18432, + "arith_intensity": 14.222222222222221, + "tile_count_expected": 2, + "sim_wall_clock_s": 1.187, + "engines": { + "pe_dma": { + "occupancy_ns": 131.995, + "wall_ns": 80.0, + "record_count": 5 + }, + "pe_fetch_store": { + "occupancy_ns": 36.0, + "wall_ns": 36.0, + "record_count": 3 + }, + "pe_gemm": { + "occupancy_ns": 33.152000000000044, + "wall_ns": 32.76800000000003, + "record_count": 2 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 119.995, + "wall_ns": 68.0, + "record_count": 4 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 32.0, + "wall_ns": 32.0, + "record_count": 2 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 33.152000000000044, + "wall_ns": 32.76800000000003, + "record_count": 2 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 100.76800000000003 + }, + { + "M": 32, + "K": 128, + "N": 32, + "variant": "load_ref", + "flops": 262144, + "bytes_hbm": 18432, + "arith_intensity": 14.222222222222221, + "tile_count_expected": 2, + "sim_wall_clock_s": 1.13, + "engines": { + "pe_dma": { + "occupancy_ns": 104.495, + "wall_ns": 84.5, + "record_count": 4 + }, + "pe_fetch_store": { + "occupancy_ns": 36.0, + "wall_ns": 36.0, + "record_count": 3 + }, + "pe_gemm": { + "occupancy_ns": 33.152000000000044, + "wall_ns": 32.76800000000003, + "record_count": 2 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 55.995000000000005, + "wall_ns": 36.0, + "record_count": 2 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 32.0, + "wall_ns": 32.0, + "record_count": 2 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 33.152000000000044, + "wall_ns": 32.76800000000003, + "record_count": 2 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 106.27300000000002 + }, + { + "M": 32, + "K": 128, + "N": 32, + "variant": "load_load", + "flops": 262144, + "bytes_hbm": 18432, + "arith_intensity": 14.222222222222221, + "tile_count_expected": 2, + "sim_wall_clock_s": 1.113, + "engines": { + "pe_dma": { + "occupancy_ns": 85.0, + "wall_ns": 85.0, + "record_count": 3 + }, + "pe_fetch_store": { + "occupancy_ns": 51.995000000000005, + "wall_ns": 36.0, + "record_count": 3 + }, + "pe_gemm": { + "occupancy_ns": 33.152000000000044, + "wall_ns": 32.76800000000003, + "record_count": 2 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 47.995000000000005, + "wall_ns": 32.0, + "record_count": 2 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 33.152000000000044, + "wall_ns": 32.76800000000003, + "record_count": 2 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 123.78300000000002 + }, + { + "M": 32, + "K": 128, + "N": 128, + "variant": "ref_ref", + "flops": 1048576, + "bytes_hbm": 49152, + "arith_intensity": 21.333333333333332, + "tile_count_expected": 8, + "sim_wall_clock_s": 1.451, + "engines": { + "pe_dma": { + "occupancy_ns": 1687.995, + "wall_ns": 272.0, + "record_count": 20 + }, + "pe_fetch_store": { + "occupancy_ns": 201.6959999999999, + "wall_ns": 132.0, + "record_count": 12 + }, + "pe_gemm": { + "occupancy_ns": 136.0640000000003, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 1631.995, + "wall_ns": 260.0, + "record_count": 16 + }, + "DMA_WRITE": { + "occupancy_ns": 56.0, + "wall_ns": 40.0, + "record_count": 4 + }, + "FETCH": { + "occupancy_ns": 148.0, + "wall_ns": 132.0, + "record_count": 8 + }, + "STORE": { + "occupancy_ns": 53.69599999999991, + "wall_ns": 47.23199999999997, + "record_count": 4 + }, + "GEMM": { + "occupancy_ns": 136.0640000000003, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 297.9200000000001 + }, + { + "M": 32, + "K": 128, + "N": 128, + "variant": "load_ref", + "flops": 1048576, + "bytes_hbm": 49152, + "arith_intensity": 21.333333333333332, + "tile_count_expected": 8, + "sim_wall_clock_s": 1.269, + "engines": { + "pe_dma": { + "occupancy_ns": 700.495, + "wall_ns": 180.5, + "record_count": 13 + }, + "pe_fetch_store": { + "occupancy_ns": 201.6959999999999, + "wall_ns": 132.0, + "record_count": 12 + }, + "pe_gemm": { + "occupancy_ns": 136.0640000000003, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 607.995, + "wall_ns": 132.0, + "record_count": 8 + }, + "DMA_WRITE": { + "occupancy_ns": 56.0, + "wall_ns": 40.0, + "record_count": 4 + }, + "FETCH": { + "occupancy_ns": 148.0, + "wall_ns": 132.0, + "record_count": 8 + }, + "STORE": { + "occupancy_ns": 53.69599999999991, + "wall_ns": 47.23199999999997, + "record_count": 4 + }, + "GEMM": { + "occupancy_ns": 136.0640000000003, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 207.42500000000007 + }, + { + "M": 32, + "K": 128, + "N": 128, + "variant": "load_load", + "flops": 1048576, + "bytes_hbm": 49152, + "arith_intensity": 21.333333333333332, + "tile_count_expected": 8, + "sim_wall_clock_s": 1.225, + "engines": { + "pe_dma": { + "occupancy_ns": 217.0, + "wall_ns": 217.0, + "record_count": 6 + }, + "pe_fetch_store": { + "occupancy_ns": 591.995, + "wall_ns": 128.0, + "record_count": 12 + }, + "pe_gemm": { + "occupancy_ns": 141.82400000000052, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + }, + "DMA_WRITE": { + "occupancy_ns": 48.0, + "wall_ns": 48.0, + "record_count": 4 + }, + "FETCH": { + "occupancy_ns": 575.995, + "wall_ns": 128.0, + "record_count": 8 + }, + "STORE": { + "occupancy_ns": 16.0, + "wall_ns": 16.0, + "record_count": 4 + }, + "GEMM": { + "occupancy_ns": 141.82400000000052, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 318.0870000000001 + }, + { + "M": 32, + "K": 3072, + "N": 32, + "variant": "ref_ref", + "flops": 6291456, + "bytes_hbm": 395264, + "arith_intensity": 15.917098445595855, + "tile_count_expected": 48, + "sim_wall_clock_s": 2.724, + "engines": { + "pe_dma": { + "occupancy_ns": 55883.995, + "wall_ns": 1552.0, + "record_count": 97 + }, + "pe_fetch_store": { + "occupancy_ns": 791.1039999999994, + "wall_ns": 772.0, + "record_count": 49 + }, + "pe_gemm": { + "occupancy_ns": 1215.584000000017, + "wall_ns": 786.4320000000007, + "record_count": 48 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 55871.995, + "wall_ns": 1540.0, + "record_count": 96 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 772.0, + "wall_ns": 772.0, + "record_count": 48 + }, + "STORE": { + "occupancy_ns": 19.10399999999936, + "wall_ns": 19.10399999999936, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 1215.584000000017, + "wall_ns": 786.4320000000007, + "record_count": 48 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 1590.4320000000007 + }, + { + "M": 32, + "K": 3072, + "N": 32, + "variant": "load_ref", + "flops": 6291456, + "bytes_hbm": 395264, + "arith_intensity": 15.917098445595855, + "tile_count_expected": 48, + "sim_wall_clock_s": 2.137, + "engines": { + "pe_dma": { + "occupancy_ns": 19792.495, + "wall_ns": 1556.5, + "record_count": 50 + }, + "pe_fetch_store": { + "occupancy_ns": 791.1039999999994, + "wall_ns": 772.0, + "record_count": 49 + }, + "pe_gemm": { + "occupancy_ns": 1215.584000000017, + "wall_ns": 786.4320000000007, + "record_count": 48 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 19007.995, + "wall_ns": 772.0, + "record_count": 48 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 772.0, + "wall_ns": 772.0, + "record_count": 48 + }, + "STORE": { + "occupancy_ns": 19.10399999999936, + "wall_ns": 19.10399999999936, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 1215.584000000017, + "wall_ns": 786.4320000000007, + "record_count": 48 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 1595.9370000000008 + }, + { + "M": 32, + "K": 3072, + "N": 32, + "variant": "load_load", + "flops": 6291456, + "bytes_hbm": 395264, + "arith_intensity": 15.917098445595855, + "tile_count_expected": 48, + "sim_wall_clock_s": 1.245, + "engines": { + "pe_dma": { + "occupancy_ns": 1557.0, + "wall_ns": 1557.0, + "record_count": 3 + }, + "pe_fetch_store": { + "occupancy_ns": 18819.99500000001, + "wall_ns": 772.0000000000002, + "record_count": 49 + }, + "pe_gemm": { + "occupancy_ns": 1219.5839999999987, + "wall_ns": 786.4320000000005, + "record_count": 48 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + }, + "DMA_WRITE": { + "occupancy_ns": 12.0, + "wall_ns": 12.0, + "record_count": 1 + }, + "FETCH": { + "occupancy_ns": 18815.99500000001, + "wall_ns": 768.0000000000002, + "record_count": 48 + }, + "STORE": { + "occupancy_ns": 4.0, + "wall_ns": 4.0, + "record_count": 1 + }, + "GEMM": { + "occupancy_ns": 1219.5839999999987, + "wall_ns": 786.4320000000005, + "record_count": 48 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 2349.447000000001 + }, + { + "M": 8, + "K": 128, + "N": 128, + "variant": "ref_ref", + "flops": 262144, + "bytes_hbm": 36864, + "arith_intensity": 7.111111111111111, + "tile_count_expected": 8, + "sim_wall_clock_s": 1.477, + "engines": { + "pe_dma": { + "occupancy_ns": 1687.995, + "wall_ns": 272.0, + "record_count": 20 + }, + "pe_fetch_store": { + "occupancy_ns": 201.6959999999999, + "wall_ns": 132.0, + "record_count": 12 + }, + "pe_gemm": { + "occupancy_ns": 136.0640000000003, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 1631.995, + "wall_ns": 260.0, + "record_count": 16 + }, + "DMA_WRITE": { + "occupancy_ns": 56.0, + "wall_ns": 40.0, + "record_count": 4 + }, + "FETCH": { + "occupancy_ns": 148.0, + "wall_ns": 132.0, + "record_count": 8 + }, + "STORE": { + "occupancy_ns": 53.69599999999991, + "wall_ns": 47.23199999999997, + "record_count": 4 + }, + "GEMM": { + "occupancy_ns": 136.0640000000003, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 297.9200000000001 + }, + { + "M": 8, + "K": 128, + "N": 128, + "variant": "load_ref", + "flops": 262144, + "bytes_hbm": 36864, + "arith_intensity": 7.111111111111111, + "tile_count_expected": 8, + "sim_wall_clock_s": 1.443, + "engines": { + "pe_dma": { + "occupancy_ns": 676.495, + "wall_ns": 156.5, + "record_count": 13 + }, + "pe_fetch_store": { + "occupancy_ns": 201.6959999999999, + "wall_ns": 132.0, + "record_count": 12 + }, + "pe_gemm": { + "occupancy_ns": 136.0640000000003, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 607.995, + "wall_ns": 132.0, + "record_count": 8 + }, + "DMA_WRITE": { + "occupancy_ns": 56.0, + "wall_ns": 40.0, + "record_count": 4 + }, + "FETCH": { + "occupancy_ns": 148.0, + "wall_ns": 132.0, + "record_count": 8 + }, + "STORE": { + "occupancy_ns": 53.69599999999991, + "wall_ns": 47.23199999999997, + "record_count": 4 + }, + "GEMM": { + "occupancy_ns": 136.0640000000003, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 183.42500000000007 + }, + { + "M": 8, + "K": 128, + "N": 128, + "variant": "load_load", + "flops": 262144, + "bytes_hbm": 36864, + "arith_intensity": 7.111111111111111, + "tile_count_expected": 8, + "sim_wall_clock_s": 1.198, + "engines": { + "pe_dma": { + "occupancy_ns": 193.0, + "wall_ns": 193.0, + "record_count": 6 + }, + "pe_fetch_store": { + "occupancy_ns": 591.995, + "wall_ns": 128.0, + "record_count": 12 + }, + "pe_gemm": { + "occupancy_ns": 141.82400000000052, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + }, + "DMA_WRITE": { + "occupancy_ns": 48.0, + "wall_ns": 48.0, + "record_count": 4 + }, + "FETCH": { + "occupancy_ns": 575.995, + "wall_ns": 128.0, + "record_count": 8 + }, + "STORE": { + "occupancy_ns": 16.0, + "wall_ns": 16.0, + "record_count": 4 + }, + "GEMM": { + "occupancy_ns": 141.82400000000052, + "wall_ns": 131.07200000000012, + "record_count": 8 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 294.0870000000001 + }, + { + "M": 128, + "K": 8, + "N": 128, + "variant": "ref_ref", + "flops": 262144, + "bytes_hbm": 36864, + "arith_intensity": 7.111111111111111, + "tile_count_expected": 16, + "sim_wall_clock_s": 1.983, + "engines": { + "pe_dma": { + "occupancy_ns": 6547.771, + "wall_ns": 560.0, + "record_count": 48 + }, + "pe_fetch_store": { + "occupancy_ns": 481.72799999999916, + "wall_ns": 268.0, + "record_count": 32 + }, + "pe_gemm": { + "occupancy_ns": 293.2480000000014, + "wall_ns": 262.14400000000023, + "record_count": 16 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 6335.995, + "wall_ns": 516.0, + "record_count": 32 + }, + "DMA_WRITE": { + "occupancy_ns": 211.77599999999984, + "wall_ns": 169.15200000000004, + "record_count": 16 + }, + "FETCH": { + "occupancy_ns": 308.0, + "wall_ns": 260.0, + "record_count": 16 + }, + "STORE": { + "occupancy_ns": 173.72799999999916, + "wall_ns": 164.2559999999994, + "record_count": 16 + }, + "GEMM": { + "occupancy_ns": 293.2480000000014, + "wall_ns": 262.14400000000023, + "record_count": 16 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 572.9920000000002 + }, + { + "M": 128, + "K": 8, + "N": 128, + "variant": "load_ref", + "flops": 262144, + "bytes_hbm": 36864, + "arith_intensity": 7.111111111111111, + "tile_count_expected": 16, + "sim_wall_clock_s": 1.699, + "engines": { + "pe_dma": { + "occupancy_ns": 2464.2709999999997, + "wall_ns": 316.5, + "record_count": 33 + }, + "pe_fetch_store": { + "occupancy_ns": 481.72799999999916, + "wall_ns": 268.0, + "record_count": 32 + }, + "pe_gemm": { + "occupancy_ns": 293.2480000000014, + "wall_ns": 262.14400000000023, + "record_count": 16 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 2239.995, + "wall_ns": 260.0, + "record_count": 16 + }, + "DMA_WRITE": { + "occupancy_ns": 211.77599999999984, + "wall_ns": 169.15200000000004, + "record_count": 16 + }, + "FETCH": { + "occupancy_ns": 308.0, + "wall_ns": 260.0, + "record_count": 16 + }, + "STORE": { + "occupancy_ns": 173.72799999999916, + "wall_ns": 164.2559999999994, + "record_count": 16 + }, + "GEMM": { + "occupancy_ns": 293.2480000000014, + "wall_ns": 262.14400000000023, + "record_count": 16 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 330.4970000000002 + }, + { + "M": 128, + "K": 8, + "N": 128, + "variant": "load_load", + "flops": 262144, + "bytes_hbm": 36864, + "arith_intensity": 7.111111111111111, + "tile_count_expected": 16, + "sim_wall_clock_s": 1.402, + "engines": { + "pe_dma": { + "occupancy_ns": 217.0, + "wall_ns": 217.0, + "record_count": 18 + }, + "pe_fetch_store": { + "occupancy_ns": 2239.995, + "wall_ns": 264.0, + "record_count": 32 + }, + "pe_gemm": { + "occupancy_ns": 308.224000000002, + "wall_ns": 262.14400000000023, + "record_count": 16 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + }, + "DMA_WRITE": { + "occupancy_ns": 192.0, + "wall_ns": 192.0, + "record_count": 16 + }, + "FETCH": { + "occupancy_ns": 2175.995, + "wall_ns": 256.0, + "record_count": 16 + }, + "STORE": { + "occupancy_ns": 64.0, + "wall_ns": 64.0, + "record_count": 16 + }, + "GEMM": { + "occupancy_ns": 308.224000000002, + "wall_ns": 262.14400000000023, + "record_count": 16 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 321.1590000000002 + }, + { + "M": 512, + "K": 512, + "N": 512, + "variant": "ref_ref", + "flops": 268435456, + "bytes_hbm": 1572864, + "arith_intensity": 170.66666666666666, + "tile_count_expected": 2048, + "sim_wall_clock_s": 89.111, + "engines": { + "pe_dma": { + "occupancy_ns": 100690943.995, + "wall_ns": 65612.00000000001, + "record_count": 4352 + }, + "pe_fetch_store": { + "occupancy_ns": 43566.52800034459, + "wall_ns": 32796.00000000001, + "record_count": 2304 + }, + "pe_gemm": { + "occupancy_ns": 833762.8159962555, + "wall_ns": 33554.431999996836, + "record_count": 2048 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 100687871.995, + "wall_ns": 65540.00000000001, + "record_count": 4096 + }, + "DMA_WRITE": { + "occupancy_ns": 3072.0, + "wall_ns": 3072.0, + "record_count": 256 + }, + "FETCH": { + "occupancy_ns": 40936.00000000001, + "wall_ns": 32772.00000000001, + "record_count": 2048 + }, + "STORE": { + "occupancy_ns": 2630.5280003445805, + "wall_ns": 2630.5280003445805, + "record_count": 256 + }, + "GEMM": { + "occupancy_ns": 833762.8159962555, + "wall_ns": 33554.431999996836, + "record_count": 2048 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 66360.12799999685 + }, + { + "M": 512, + "K": 512, + "N": 512, + "variant": "load_ref", + "flops": 268435456, + "bytes_hbm": 1572864, + "arith_intensity": 170.66666666666666, + "tile_count_expected": 2048, + "sim_wall_clock_s": 48.616, + "engines": { + "pe_dma": { + "occupancy_ns": 33584132.495, + "wall_ns": 34896.5, + "record_count": 2305 + }, + "pe_fetch_store": { + "occupancy_ns": 43562.81600011295, + "wall_ns": 32796.0, + "record_count": 2304 + }, + "pe_gemm": { + "occupancy_ns": 833762.8159987241, + "wall_ns": 33554.43199999785, + "record_count": 2048 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 33579007.995, + "wall_ns": 32772.0, + "record_count": 2048 + }, + "DMA_WRITE": { + "occupancy_ns": 3072.0, + "wall_ns": 3072.0, + "record_count": 256 + }, + "FETCH": { + "occupancy_ns": 40936.0, + "wall_ns": 32772.0, + "record_count": 2048 + }, + "STORE": { + "occupancy_ns": 2626.816000112947, + "wall_ns": 2626.816000112947, + "record_count": 256 + }, + "GEMM": { + "occupancy_ns": 833762.8159987241, + "wall_ns": 33554.43199999785, + "record_count": 2048 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 35645.632999997855 + }, + { + "M": 512, + "K": 512, + "N": 512, + "variant": "load_load", + "flops": 268435456, + "bytes_hbm": 1572864, + "arith_intensity": 170.66666666666666, + "tile_count_expected": 2048, + "sim_wall_clock_s": 7.072, + "engines": { + "pe_dma": { + "occupancy_ns": 7177.0, + "wall_ns": 7177.0, + "record_count": 258 + }, + "pe_fetch_store": { + "occupancy_ns": 33571839.995, + "wall_ns": 32792.0, + "record_count": 2304 + }, + "pe_gemm": { + "occupancy_ns": 838467.5839984363, + "wall_ns": 33554.43199999763, + "record_count": 2048 + }, + "pe_math": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "stages": { + "DMA_READ": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + }, + "DMA_WRITE": { + "occupancy_ns": 3072.0, + "wall_ns": 3072.0, + "record_count": 256 + }, + "FETCH": { + "occupancy_ns": 33570815.995, + "wall_ns": 32767.999999999996, + "record_count": 2048 + }, + "STORE": { + "occupancy_ns": 1024.0, + "wall_ns": 1024.0, + "record_count": 256 + }, + "GEMM": { + "occupancy_ns": 838467.5839984363, + "wall_ns": 33554.43199999763, + "record_count": 2048 + }, + "MATH": { + "occupancy_ns": 0, + "wall_ns": 0.0, + "record_count": 0 + } + }, + "pe_window_ns": 37677.44699999763 + } + ] +} \ No newline at end of file diff --git a/docs/diagrams/kernbench2_overview.pptx b/docs/diagrams/kernbench2_overview.pptx index 0941ab1a47a6e759e2ca94fd6769d92de1bde557..dde76aa2a83a7330db3a9a8e62f4c79bdca66f89 100644 GIT binary patch delta 147984 zcmZ6xb95(B(=GhV#I~JGFqzo4J+YICZL4EVY;%%{ZQC{`wrzd$KF_-MUHAL%tbM9_ zS9RCg-CcDyhsk5gDFHxonug4KbMbq7#$T!@kA0-_;+#>2p3LPqkM~J(IG*kmv?d{nq$G% z>@v35?JYEM=TY68SI9s3v3LF>tSuVL3waTVmJ^y%g!Bn%<$93EB{N}3iY1OT(-cck zv>zM?0lTq4USbR6p}i41g?1pnB~DkwsHogJt@Y!KW19?L*LokQ$=6Gpl0jl>a8N$A z(aZcwKFD+b9VF8QJWV5(k+kFuz88L}fGN5hq_%-wJtQux7x+@_PgCrPN72IxWp#jT zlrriET&YG|UJ{a9o=d)Gv;ORAU+1vc2^=^h* zvq9TeWH57c?I>i!!l@zq!6-!n9;87Q5_&K{TVt?=Q%!gOK~3)eAPRn%^(Es+iWMI* z30M8t^(CXn{be7v5U#-nRL+;~?ZpW$?^mCZ5a;g$5D>J!UA}4-#;atLIK0p;6k70A zFp^GH+;7PLPvz91f1v~e|5rkFyx@iZUF<>NeL?!4qDoEayGi<2RC7oP2+#z8oNWOk zj^Lvc+@2g(0oIux=?}@m(B-uA3j8%r5VW9_9>fQG-h;7pY+CzhE}!0zx&7JYbh~vWRt3k>v0pniMB^OzcSvc)7nXkrd84 zn>W?po$pDDS>IqGp87jO7Be@zzkIm7-+$P@ubiWxOZ3X?>ala%zdwIi$$Pd|P|0_8 zTA&VOUB{!aYkn zE<$c5ex@lsUG-S2?rnb6{Dog>^ECtf6~Zq|Fpu9~7?C@>Jo;*pHfRRpS_PfYDnZC?3Hw{&(wFSFth*vQ^KKvL+nT}5J(RZ1R@5d z_$m;LCfgNfdbVE~je>jk860JZHk~ zcf|q%NH6}k`|8RP(9`17X;iEe@i4}D(xhd)9&5bo3JJp+^fG$iVLcon5@@mAZqM0#bXZNl*Rv-LPl+W_EDOKqtIqH;Kf$c>^7cnip_FFiZv0A2?^+)`!I^{QUZ8ftmI}^YWk3Rac7rn@RV(poJPPvMu%)v5z~PU3LqHL|0A*86szSLM z{4tVFU_<5kLBL|h5yS6ewc#!pXkXZ#cJl?jnk;FJj1YcOq%ZtlD2HfJOgFGU*Y%n~ zz#9Va>&OS!%VcW}Z}CAxe>21|4m;r>sD;kAyP231n*{ot73u+Ig`E1ri z{%WB(B`F!iHfHsByoGJHauI9Z(^wfBD=|JkJQtir%0@Y44Dk5esO&i^_uFpVMp zj{+);1`xnNfI#L6vEt-))6CfaYeLBJU(!%P3_{INTxK!r9pu23t{{cV#lOB`O=>N(2^FI-*dxQTc%8ws$Z@2$a zluiL7fxxcI)tUw8{BbFkB1sgXbEEipkkpxb;&^^t9WTxm^&acES}aE_8}|9#{)YJf zc@jGKz_C`!k9KIX6zi>jAus6t{U4gZdi~IPeXyo_{V&eK|Ka;hj}w>skB`5JE&odr zIO}NkJ?inXp@f1PAN@Gn9PtShvRw?)c&+BFyTv)ua00ANWmifL*#AS;^zZeH2!{MW zH(8uNg+V6)3{+name8$_0Wj0s+nSBHo2e-OXcGuSgby$TD=a0^5c&=MB}}PMGA=up zghGWhTu>NY1q0&u(sY?%EWJMpYN4cExHHDrAP}lBBE$#PM$2V~)kLV~t;JwNqKM-t z{nSU&;mVL(3_?Ap!c~@mkuEn761*C_tT&8+FA68 z_ukcD4v28SI0&~7T+#L1-a-uZ@RXF1T#r+1b{WC-cSnMjl5YJxM1WPWqZ%=_GDfyf z*_~>j+qSkgLn-fqrX&pZSwX6Y3W%%4~=LytX-C z0b&K2_o)H>Gcks@M+f_ihpf-P)Z7OnpS+rTp9Rp~PdUnzz?w!Kt~Kpp)63b@^)8dY zY{=417dkk(Mg?c?h`w4KbL&K3A36KmwL>Nf&cervm8ol|fI7H|Q`JS2Y~0C9?1*KC z{j~Oo#}ZV%eQ(rIO(2x?%h;3Lkz@feuXt)ZEq483S3Cnj^Fq6ZUgruKEj<1cdt%m) zW%5IQZtY(az{JRi*Xqrn*FKM(8JqRAUrkwSQ<4>WzYcM+v-{J$#z%$hj0) zu!JJU{)wbAh?|F7dG(v+n+N=%U^J9OjhI-p#Y}-$$xSxe*D&Ow@49hB0)==w7Lv^Z zMBO|(mKMxfi0DkABbg>}AM8Qki-uR@ zw$CL4zIQ*_8#_*Szfu@*;$7aBU5~Z$u8qk`wM;S`K9GL?R61EkirN}U5h0{!%E_5Q zOu)!3<8d}5zsuDfFJgqqILznRkbPE{EwztHDCYdnNL;7+ zj3KgOc2(&A1Ptqg3_m{JS9{0D&>PBKqcyd0E_4i;yH%%v5(&F$E%_3)%S&+NOMAK@ z9`>1)<@us2P|qK%NNtP#CA*QTo3D)FR@C5p9qt7>6VZ8w31JOWmU;-%q-if@ypQ5+ zz{<#G*Y)q}(Pr5n?Z40U^zPmd*AOgQd?iyJt$7}|LVMi?ZW21_F4+X84n@mHBgrii zVxtO~s5(U&KfdEdWb9s1%q)SYKi(;9xvBH05AnhR&KEG$9YLusyxz~g?o6Ajj)^db}4#z zvD;Q|^XJJQFc0`i)6Q|IEunE@fBue{|17UDEivjmXjrarXEIs&MZu%l5?>y@7W}KW zCb(W-uC@iOqV>_kYf~{P9EX}8`-Zvn2tDWYSK&;Vs(c6jDcZ!JgQarb>(lTBpz?S2 zdI!?=cuoeAynNQPlwyho5&{hF>mQbH6&&Cf>*H=-=YM>hBjON}=ZKH2SkGo-DJR*( zxM)YCQR#`>A%z$gIQd_1w34YFda`98HM418gsLJ55F75HFrB7R{BGi71mpyB9GUL50sl!);W zg?Wx^av}{bd&jNG-JU!?nD(B35e9Rc=umVWGMgYKPGMa%6~@yWcHHQ6c)sBSmLZUi zVG#ShX&=%p_{gb`CLh5@yt}%Zq^L=D@nWH6zA@qYBSbi^O?jf}1>#k+1Dlt{Q;HuJo##l|%IXEz%b3 z3%-gQ@&}3ROm0;|esSXxMCns^Hk;pQjMitXcKEJS8RvM85?(pdMO~2EfLqVB^EJ8$ z(?fRa?Z7s6aY35x^!wSG56aj3|q$bhfMDB>+keKEv>7& z+zy)|Nu&e4IH{kBQI}Oq(Hyq!a0GCEaEpfsu2#J6u{ykdTWucr7l5rl0`)65#}0Wh z(@-@igKu^t_=@W7eBWxiyT_roY*8IzVWL4}J#LCKMwrhMU+XH6KiL&AZG-E_#U zGBV^Q7c@i`%e@ffYA23^eIn_o!t<0hS77kP?&Wxm6;%y z6{nh-EZ_cR4VrIOk!VwQ#2SXKlv1O1O81X8p{tWkU^V0*alnp5wuYU2l;762a1FgV zygREfYBe!2u{bpTDQ|?^Rh}ObM1;NB=|v?5+bhMetW1~WOWOo-<~*w*9@V0LcE)8YSJXn<6--xPwH3H1-ub~#UfIIl(_9}DZd27 zttOpN0d88a58&;NwXd_@#{BC?Yq(!rT-+{>-*!X+Tcxp?p+!Vk{t30ker-6 z3uP10So7{>TBIGFk-=k`-$PXqA7Rt|A<7N23gu4J19&mRO1EguIA*w1_o%@ZW)0B1 zql!7cjI+^S&D-v4dh_r`Qr$@=t!@<$)ouFS$_q&Gt^*x zl6lxiYRPMCXvBRzQ;P_T@O5G-aqzHKYVKszp`f*UJWpNxh278s2l-+VEtGw`CQ2}? zS~d-u1NIN=Ra9rIBTo^Wp_eLD)AlSK*=g14Vb{-^K6%26qO6syAcevX7qXQTz7RCY zSi|}=j1lJ)(R3NWb-?IAGLqohCL|a0JO%BWuRYNftPj*$}U^6r1LWWfN7Vhyq>+4ZW3Z%VyLuurZ&MdEw zj(mqp9h421w8^PR8(3!!)9aNX+?Ep ze^RKC95By)dnd}8vDWWyA5TA|;9u_3-Qqg97#I||JfEW4z4S5l#qRy{Pz~ZCLF_jZ z%`*S~gx!f-3TkDSk%Q2;$~N6&>H=5Rhb&DvY`~m7e+YO>44giK(=lM#PgKOR0MkTF zy$|XpOEk=T={j1Yd-9-M-6J>3Y3q9-0toySSgObQeg_-$qjj3X@P5ZnXJ+~zJKZXk7WC!Rbli8u7; z(HD(|J8hjnb7_(u<~p!xdUb1U*Pp?uqUp}tZI%YpzA7LTk6^420)4Bq0;!`zP1z(S zD2e_13Y`lUL(zJ*q&yXT;e+)2@lgh-ji_U!^7f5|C)pgSE^IFLj;ECsz>J4xi?VL> zBHiQfrxNE*9P%k%rj!C|a<37n}VnAKmqldU{fGj|&fuz!a2=&Zff&7dUun)szT1zDj|Ht9yVj;9%Ti|wnFdJ| zKioxhso$OZckP~eFH6$-4HA$Q^ox_D30Kpcf{9i^9X^#TDh zREU{ZT0fG5&po)J)1AXJmHx79^(Chd%0f@VKG{(3WwyEh-zj7jSZKm=uqz9Bn)^E^ z$I|a=mU9hm9BTfAdll=NbYj%A9kXx6Q)Z3oE}J$HA#4WWtrM&7Y38cyns-%ZnY+1F z`lN$4YvUd{!lbWZ0QDxnosa0-&ztc<`i>O0p{jXbc9&K)bb$+nOW!!M6p3|Q_r(PK zik(_nvMuzcR)#{C8j#E&V0cca9;(^&aivvD|81yd9`7`C;QV^4QnR4bp3k zN6xT`S^4k}^L}?ptGA6j;+I)vWzOE|Ci{ZK_!#M>BSR<6_Ttadv3+UBax!6GVONbB zW2le|1h{_*kcC4;OH3AMN|fGL!lz?y>hkfb-hFO7=_Y;1nZLy{)xg(4hVFC=kP_7; zgOXi^4AYhkCvKrOd9>sqglhafIaTo0SHtDQGsGao&E;72y1l?o%}`;#9?|-Ht>638 z0e7zUvboPDLnXFKRq?gkyuJ1n5#C~bpzI?&&??}G z{{)VjHpTQf$b%O!xq==ZI^Z=V_+}zy*)i}{QX`Sf5X%v2Lqo)MX;G?C>W@le=dim5 zkYvd`$7?^Z8rPxD_QYkkdmyuap$Pu71rX053%$7i%X_)nl&H0jy5Gk4brad{MAp&PhQ=!USN!RL3Af9vPvx3?P znj=^_YA*qDf6Xk8rN2833_m%rhxiWyfK0d_pH^xh7^lZL#eXmz*Mu_K$bvAfVPpgE z7%3%dCq)bHS#gBD%f@hr6iQ{2@BdXRhonfg=o)WCfvmV_1JCd=P(ve=j;+nG@+5rh z4e8;?!YT*m*#%BC8_#30M@w0 za6;PMWqn%b5JFu&L!}-cbQe{H69q%mbv-wT)pG3Ucu%yyz&{{e&;#InfbrlrSrPrc zb^Lhu+iZE+H@bt8aX|t(8Y$8N$Ztd!=N-$VUCv(Hgp33uX_41NS^X%<=gyC9L(g;L z*^J&{8ssrCvmdV&<+ii?<5GeS^L^RK13Hk-UVG^CBUdw}tGtIIT!#9+MvyO}A{p#l z&-;@zZ5bmN8duz^zHMb=dP83NPT~A zjd58`MI7ti^6%L?cXB7hl`_q=5~2vykDqnGBPJnTSBtcN(bE|&F4j&6QEEP;Eiw#l=cXkc4Sv?+kPr_!$(QMg&M zp@?jtq&{54UW0y%XYo&vCBbI zay>W=pI(r5rgx*xF#HzW5c?BHsHo4YB|9=+XkV>Q*a>mgk&8U$D5m@STJhm;oP^Vl zoF@z}$KlB3GUTLSpb~!#Wh6x9zBe9U3>peoHi<~#1J_x2M z5~;&!nijH?^mt84rxRVmiqrcR?j%Bo9gBD5Kv(r%j2eV4Kt;^me-eCj)#tUbcnuRw z1fp6CaZ(K?*Fq~&Njr!16 zy5^|~vK;0@U?x-McJR@Q!VU! z1KL#D7J?pLV#bZCKBW(@mZO39^wHiICnsrs#~^BQlI#cj02M6-@m3vs6ByjdsT}=L z`aU;#=e1eq(-&=Gi1wk?4@YRia3Z7z(h=UJ)u31oU_v56_oaoHwk#1HS6%$F+0|_s zsYe^v%V&VUkPX{96@+W2f`50GilZL7fLCn$(X5$`KxW~|GWQeQhppY62^zfRR=heX zYN87EKoLh@YMOs;XwUp)+aH<%+~%}IX3SFy^R~cDDdE-As9+Lz`wKDOg48>qq&BBn z3&B_%kbaTnP{01$r7Py5mxx`gs7x&C>Z(Fh5sW$W0 zxVgcehV3dMy4km1IkC%J_Vb4?(q9)LY5Hdp{IweG@_Advk$90zb*NAA%Hf8ko{qcp zTe$so&FgvDSof^VfjCtLyS&;z?`O3*mv2)x09LSqqP{cC*9?tF6fWHv$k;m>R#}x{qz0RuMD7<;8`@ax-G>7w#X45Mr2CPOg5F5=*pY z!1`Lv&~(LDp}oP@x=O$Kl+CJN9ffTc{R%pv3SPhUz#o$_c}~RVQQga4sc@s<4==!3 zAKmXbaNUUle#94F-|2S8323Lgo(a&Nfi-MJ zF3wxtM; zF!U}mOdzUU?jtBbq=&CRt^#(k*A?Og!SV85>)-iCHqz3mf5Q=+1#KaR-KAT|;fNvM zn~qT^g&O028;)c(->w-AQ1HE70e(W|UOG_7 z4xt1RT5W{3lgP}7X}&S2QmJ%=A;>h z!Mc4jsy893xm&EK}dUT>Us4w89w2$ZlKC!kA4mNVXBgVH+q@>W1@S_i(o1DV6 zEww=5OhdhCTYV2px}*tUwLUVom4`fEnkN+S{aZGl%-C`l;Qy*;E%3H7mTmhZ8G~6< zLN^X(Y7CtXmaI1`4JZ$CS?quL$#WskbUJt@2 z2P74pSH?H>>4fV`#05N;5N02OvT|Fd5}!03z;TTyi=MmYY3B69lM|VqbVq$uOrhHq z1ypmVrbaPgL6hP)9tSUz9Em*5NT~H{_g}%rQ>Qv!c7AJe0T{|Kgk`sPLCGT5#n@{S z?l%0>AiXKdMZO|U6Xv&O2d#OdjS`osv;&v$!zkv4q|>^`HW>)g?#RfSp--0yg~y0$X^EbZ{r%ukx{?2h0p2L?n5r4YimsCR);uiYJAMe zlQrE^)_WST!^nGMU@46eDJKpM1Vh*=_Zww^h@K2KfWHN*y~O}y7LR4HmD|CrB~Sfw ziUA3wwjuD3wB%sRB{!*MpN+=Rl6f)P3q^wi5!Hj|?nL$U#ZliXZI}EWHG};=I~U9G zn_S(VOJ@W84bd)~vX#N#V+B5WjcCr8oSgJ~PRA<>HWxOi$D3_JDGxrJLiz5n6>MrG z^VDoUz^hTa#y~N4$1|JSM(pD257{z!0eo5GjIBnpgVwoOd!LNLt@?X$G$nLWJhc58 zXcpf-ilg2+M(aujJoHwv7B z;)Zkwst|FR$F+Y5#`#i=%(&7~vX(a^!oZEPbJD<5>l-H;LCSe~m{;kX~O6 zP&D0mjmGwc=gC3-$bpW`uB{EbPgOGa%&TqUWhoMRFnsD0UK;(<1oj%=IO>&m2EOtb zBOP-hx`Z-!LVdDZ@*B(+JA`*v)8f+3X$=G|m-H+M3hK<9tTApXB!nv7pHc89{HvBG zTFa*2ADktU3dwBHYy21p+I^&&Sv4{NbOThC`HDWO%wLD&^4od1jVe{SKG~%anb&ju zG~npQ5eRgDQH<1faZ$9(27|c$&hP5>z7P55APv&f6DO&!i5)yRv5{BJEBsAD&Sz99-7hWVhL<_#2=A^aE9C z!&H?wq_K9ll@_{2fFTM zBG!G%L9Rw1to67R1$XH$lxFFRVp}HB* zL8s^Ya~#R<*6X@n-;3|wc5e9GWL;t)=hsK)xHo}s^0-X19ix=RQDURqBc(ShZ4JTO zp#t$=DZnt%3q-A0nb_Ic4ZN{bJmajVN>i+~7kfsaXcs5pS2tPc**m3y&^N6jcn2r_ zjZD!LVlxB;geUc6aHFNG->DMrRyT3E`qXt2*?974%$*a=++E_XBL2srl+qNLU;V+c6TkqMKb@fJ; z2W#AG|1*Bk)C>d@eA-9VDw5_e!AzZ2N{~2W9G?7G{Wt3GF{fDqf7EkR3^`h0o1JdB zEl4<*Or8psgL~8~%JF_?rux#FR9Dx17kfD=aIRYXWjLbdLX`SzC5E2%JEu9mlky@;~TQ8`>>g7Fw? zYpOQUEQy< zx4o@2gxqaM^kn<^4U@`pPlHiEmJlfuYUt_gIESu26AZGUB}I+Oqjt9X1Xz206|y?J z0HgPm7*msy`?;~*d)2o3-1oYW$&d`%r_Ic9VAx9Y=bxE9{-wZ{5hWj1AKw@}M;-%c zN>4JJZaQB8bd%ebf62|A1%;f+j9#82%h1lEwU5CUjWhpmX16WB2~K*DV@||HRd@N2 zSoG5hjom#^wlqCQsA@tV3M0Tf0};Ud=@tFi+CO{VE)?fkS@^RRZzT#gwbPbnKy}e) z-kI6nY@~~Wl3b)$(S)aJwdJ!cqW$cU|8i2F?k5t^uOx$2NTonS<@n2-GT{MBdQ>6O z>ey<^OEurMVy$xl{~Qcnzf#VpPMRg&4yi@Wgb897#<((LsS3TKts^8YPk~)@!hlnTwDgzPvcPbXe4qZ=Ut;s6;dhCOew%K)#>ePjxP+>8;g~$Y+=t0?*EG zn92lTN_^gVYfs^?yvD`6LBbFqu5fXyAas4dzjyP2xt7WSOI3X#^4_mq(>G5op*>PF z@N?+d_>GjpDb#SL4}L2hi5BiB0jJ*%6WCZd50N)((o`quj)9J-5#;$E`7CHPt1$1i z7pM+}Sm*ih*S(IL7B+XFw(>zhzvesa7^)#q!OTEYaC1y@Id2s)KU-QUm{M83an7Xh z#Wbp99;$;zH24VpGKelEz! z%EEc$+fGQFeR?~3EA-xnPACS^#HGcqUIty;iS(pDemsYZB|$>^nhse05aYoz?)t6( zr4(hHbs$MO#!c<4*rS7A?DjKgb&`;k5?!)_U#6Pii`}w#TfpPl+BLS(g%fF!!y$4_ z&YR$}k@M*MhVvtFrP-JGO(*)CyFs)~j<2h#9GFLV3$sjJl#qg8+TZM+WUYQXXMlP5 z4BIgY4P$ogi_^-L0P=5Gq+bcDArOXvoKWJ-?*n^#VN^V}*lAr>>Eo@~t$4_{qD~u- zSREoH;q#lVkmlQUJ(FZn{ftMDKTS4ylrgtZox31I=;pTlP>X2*$1!6X8kO)tf^}zv)vVX1^+=QzH z{B=I!n-av}h<*O#IYT*p2haYz!0B`uULep1m4{Gk4{}nw;-oN*N23_~s_3fs*dY-6 zn)zjRL=Pd|7iT0*o+QsLN)V?QS*Ab2ypG?zAkL~OAl+lS+gT0H;IROfTITHSh4@1v zi4~Y%pd8&8BUlKFDpB2{?1r9;{ig8xXy#gNQ?J7mM$!r3){V~vm5c<-z)d)ys7IKc z@bRLkbJs1F>P!%9|9Ym0tj;#XK%yk4H9774N(Qaf!&p(NRW!zHmJG~&P3EA{fZ%K_ zu!JRP*az;AH?X~8E+u;U zr>3SxcYcr$%Eb%th^-WtQN9}W|7vRN4#NW}xX9DblAvkvt7>#c$j|sFdpjwp74m|m zcz>PMfT@)|&i+?Y))znSmgs8TDw;6Lds9U>$#LITg%}DYqMI+-|s(FE=}7oqZ@2w zWF&!wPpfrk(?dTpKHIb1_ojwn>A&+xCWjcH@wUk^!ki8p=I2&M995sJ`odj)t@WOX zK9)mxZ)rDR4FV*6Z6z}n&#|!Mbea+@`8>jtvAMSD?yyfw*rPwR8i>BIQMnHF2()jtG4Qd}+tpohLM}y+9h>Eak`b zJTerj4q0DS&f-;P=*1O^TlqIx!ML$4yS3bH#5aAQLQX>FqTmPC!k!y`{yW|_EYup8 z`;?_pe~2IeVyYObCisLrhG(HEF8(C+tvij=?YBRIfPp8&aP$w2Lb^{y;KtWOm37gK zNM_$lqF6P$K7dh8de?n&Ktehe=swx^^4s_)_s4@zvc2vP(3B=DcnLf0D)OpS_u!11 zkU2otpoKZEzv^!>8TiWNu)oc0+(r1Jt=Ul;C=*jj6_ivC!He{%UeVH4;Jh~Ty^U^GO4pmdz?(`57r{m{yu9HJc^U9fKXCra|ugdZ8 zc1>B|G$E>szdQN1KaRUI6*lpKy>m=BF$RDDKI!Y(#(70aP^04F>CG=m4WdXU!5+uW znumbDD^I$=WhE8q5eX(d)c=6QOGARfrWECOx{AVP9AUPeQjs zQN#R_$VWZ&jv7^Gbom~pKJ&xhr;}1kY!N1n65Ks}m>fbFeo^a-@Ct?=`9mxIJrM)I z6Qt{*iR;0aOs9uBa6Y{*bj|UyPg;Y!lX(i$KW7mKMzg`_J`s2;4-@dR<#Q8@Y7_f0Y7obLQ!@r;>(B$L^Ny@LU9E)iiAi*TS`mcZS z0j)dgtF>BlI(Z!!Fh>7AaGBJ>ZMOtaOkp&LlJ(h%vM#_8Qb2CjQ9R29v*bdh2cLlB zZJN{q-|^|Oeud;ncI3+-iI;MwGgTawFckOO;zKOV`eQ6Z}<)V*<579&u42WR8cKk5t=il!xx zEwO6fx{Mx~AR`5(R?}e>=XS1s1ST506X%!W zV@wh}iitYd!AFz#M?Ks6(e;C;-dX6&{+P{cp_iCmIAvDP!B@7U>oE$TwqO$t?WdcQ zo$5WOLI1>#o`Hgf0t4UotZzdMbu}e?U3(5TueW^hCOKq*6o@}G)Z<3gd@>~@Nntad zUd4t-%Zit`Q&|cW*d!-?D*Rt86OEAK#+6=i;cBHa>w}{*O@C`))+5T!1O4s;60mWN zmbE(X#8k<1tee1zXk&`ZZk5Moh)C6s&v5rcICX`@n30#ms45pMcY+W!b4;e6 z3x=9~>rdejz6b_&nKZNTmPn&@u{za4p9gZW+POsESYyWzn^*h**U-251lI1%4h8SM zBksai?Ogo=)dMr)$ARo*yzhA;v!=Ay#I{)W#?hJ*X{mK8e{tlwm5 zxPU-y?movfLhPw&T{v`vE8C%F7RE9kij=Yd%JaUeGqHP6e;+ z*Dt?rg5g84=IM555dG+kqtIg^)Kyroa_E)WtqUU{+p7=G+i8CB=(_*u#7!g<%FsR; z=$r4&807~gBa9EwLn=l0&)Gz1@ZfqFWibx-hr=7~HI6lZD zPh6cL#wq~Y)ek%O|4#YPk!AE6n@*1Ve#qw6g`*u?4K z>GuI_Cr1aDFj6g9Z$04mKNk8+YSXXXNnf5bOzSQy$0SV%r@{iqH4++A05hG=&my1V zWnI5|s9DN^Z54%tGRD0z0-UfV#xI;DkXWz&y zIz{OBY?@ep&ys%w_n$x7YiPHz?A?z|^-3Kt-r3NK96HDwZ=dEyBZ0;@`y=4AAbAg)i#HY z4H%FSGi!r~y(eDADyif%{k`~44l2fOoYo_27S(m={mOyy ze`%U(9y$A>Niy=6qwPrYuBS@Hk)xrx$|PGQg$8|d9ybaZm!C@RXL9II1&0R63-n-;dh(nmjA-0*Fj|)dqLpH z+I{6Bu%7&g7jBE8JMIhlCz*0F5JgXcDn67ge#s5mbS|ulqBAXP_Z5mIaTj7l4-ba@ zs9~`GM2Y6bOMrFdC|- z$4}EgIQS67QV_**|6?=QLa<`AJg8;19ib*Rlxvy|<#&5X5?85XWjy{LO97`(K}X#$ zHPQyCz2DE^dzt{}D$`GW__=s6nb@(?NK8!KxqP{uHr0~~ z7=QOyJG+(w!C}bY@9ID$Ou4cY|MAiO3pL3Z+)L`PpwMl0<3-yMB1gprLiJV-F|7S! zqji;(faB;mftrbt#}__7ZJe_2o7t&H8)FflQ8(NlL&6Z+dGgD3&plm=*3#z>hfiG|svC4vBh z`PHlqVY~|0ad7(FozJTLWL{L4_y&ldn?X+pNWsi$Y_VKlLi{54|A))%V+E;{@tx(F@#R16e1?tr+VO7ai+ z&A><2i_3HK>YF2dm_Pfwh=V!K&d!oaW+`?teO{+jaG<;~6u~4qoWI&qcDbHa;2<{X zmtn!Y(eBEAZ62>pa`z;A${MgS;FS9;s`%%Di+pYVs-A?S^xk6dyi`I)V z^PNQ~qLVd@^KP&sHD-3Eyuh`SqAw-4eH2oc5KHiCy+J#mf->F%et&$mNo${gR^1R; zS^36cqt2M<2h9S6Mz$B(;RFWGFN8V&8hGV~Hewq_7r$4a*Czz@C!M0V_V#|)3(^+6 z(5ux4lgk6OHn{EU8Q;<%Umlcn$AAq=WR7QP@-qmV^2$eJ+@(5B2ay(?ZOe@~B$aUe zBk@VUSjZ$5`m|h!ClLOc1z3NJo!?KFc>?`u-*|>uKLSkDact`tPBFS26yEGC9zCqS zgsK7xj?V{Hk_Tm^ngJ1M&9y%W+GFTHJL4-sLu z1?{I3K6QEQ-}Qr`OFo-0BlU4hL-oJEd`uV?mOk(Ot;EH}h5h@bGh!)Ekvd7T6t|4T zM#~y_%bK@;xLYId=J>NtvmD*Ur96F&w>7Wek;YpN9Rv?;yPojG>%%y@`$VxwWtr1S zjM0&sL11!wES@J0F{L`_E-fAL=)GyO*k)(9*~y2#g^Emc^PCZk$QOZ8|1DqclSaaD zXE(=Ri%xPMZrBbw#%6l*ReZZSC?s~OE<+e-fMb4arQoIwK;9J4Q_W>!EaO)@{jh&b z>hu@d>9rr3yt)qC?6&BhNc>eicLFA%0GZT=Rld2}xYUCAW=!l^wHY=~5V0E%B3kVf zr;60sKX{s_fB)naFPw<+t#%cN{RKL`&}t z9Q@qYAk&nF&Ho2YK(fCOvOC}#VgVd&ahy4sudOBF?9E!MV$F}zp|?gxM$Yi?v>tnN z=@H*LCL!S}5Tf#Av472`UFHcE|F360$-o#le`ybWQ}>GH2$r`X+j|u(0{%&@pPM7A z^fGI1uD(2c|GGU&BwjW>4*1o^=duDfOVXNXn4?tVQZOPn<%Hu~V3uc0B#c4w#W%R0 z&c0*SxYV>*kr7<^=5VO+k+YsX4`U4zJrV=7q!(9H&*#pLE=M|;66QqtSSPVP_^)%r zf3dW{GmqZy`sO#@RWgdj#B#XU>f#!eT`}W~4w_>_><}O>{eV@vIF%*?yVBp^Z(L!g zQEZ$aj-U)^6c}Jq$xM)u&?VL zDkbR?X?NQ8)+Gb{ntoph4+Po2chq*Z=$$BRb7|1C%^AfY$_2dk6mp*vq z+u6Aa)!o0L-@bp>v9L(4b{jEnf7;(eSAF?uVhDab|2Di~8TatbDPajIDXD=^Pw)Ey z!?@~3r}wIMUUW)-x=bQt?mP{dojn(*SL;3|W^Nl$b5X~r-rIrlvm&?Ds^-UdQevW* zee3&}0{t{y0E+Vg)~s|Jxw})r!qaFp8ROG+>{P%+r$mDum#~W4vX6qme;k-92g-d=BzlPrq0?Y6;@bNV5 z?jaeTC!FlUXhvJm?37@Ae`No%fI)YBfP{Fu5-9emr!FpipK+zwMk1%reQc=YmSG0T z%s>N$!ojME&tA&4Q?-w{uL()nJ;;t8j5!HN{@e$ense8q!^2})^*)vD*|UB#k@6?} z8|CI*@7n!{zdlC>xLG3f=qWi9sWOWSbqU=36?kS8w$JDs2x0;Nf5CXb=7dM4q^#^? z_LCPbfzccBs(V}aKRzxITUl8#&Q?DH-#>Ip`3WD>sXO&*B%f?7t3CmUDN$DvR<`4y ztLYmR%}y>MW#=;o&x#ww15s(^*qd=10O4#!6~-2GXY--DdWcq=)mgsO>YtSk5hHCv zU{tb^aCzfuIO`?Zf7OMO@*kY?<4?|9{nMG0#Cq52U(w7L|kJHHm z0(XBtGO+E-Pva@ocnQ0gHs1~&5dm=I((}giSru#|7yR|&I6CE)CI8mGAaO@$7}iNH zZm*eHsLwoGZloJj?S(`M^+8uh+ou}+;ArOIl79Rp(2-bKe_V5d%8SkAiPtK7u@5Dr zj=${ddqfY?KeoHKLz`;?ypU~=B3U2~(U%tz^{nr3^Oz?AGEJwv4V#^PRuzfm&+Z*7 z(C3GZf3CQ=4LBCzc6cw?>CA=HbM>^Qojl7bN3nNL`$>HA9_f~b>RK0B8PZDsZEtv{ zil)}RT_DWGe^Rn{#_(vLl~-b7h}kz{aKuE!i>1+&&4S$Ph@kR@Wl-FBMZw2`Z=qP2 z)bnXIIKg8-bAMM$g)uJ@4F!n&u$Cuci>uQ2EUDWPpm>yD zASs3&M+_Z63d$%>>zzF`N}sY4QRhvnb?)7ZDy%F6af)MEOu-GNOOlN>vF6X?vP=4pHJw2#_Vk8$&1J)M6* zh*sH#$GLX#yR<0i8E!MiArr)?5Qb)3s4##$bRtLOWYg~I!>WQ{x{S`nix&(0=lin1 zPaYL~ToD*B`5L?KQ}Ps2c+?wnMLUiI#}m@je?+a;PgVFQinDXs(lbr8&YVjyIG!($ zG1Dy!8i1uCM8mKhSqSEd&L}~pS<~TS6D=%m;RgKu0XDS}uWPa`C1Wl7r#WV?@U&~( zVj(-|+?NVA6VU{()LR$&@jBTZNAfqL=O=%PcN{6<#bXWc1n&C!{d&#&jNF6SxW*>9 zf1X7>d<~MMrgda~O_NG2lO8+`i$*iSSFdUap%*LcXrXeysqtF4jo^)+ws=&{NM?+P z7SC2P5N#w;P0eT__l?KA4#XJFG{>!0hpU^ zG!ZaY=MmgakZ~*0gTC*%NEdO)kfrT?f8KnR#~@5B@q4-=yoyz zG6xDGmsz=64nEiDAa^|)u`JCpNDaMYZ6W~6ZQxoTKJpg%O06^TcK7f02wq7!e^=pi zq!g!&>r?*pNM*o9i@~xuM5w9Us2Ip;i2OZXJ>qODtPmpx(8XN9yj_8*o0Jhyq0J!Wo;g)dRsl|(=AK-j0yZ#7*b4iJi8ypMhA_h zJ2gpwe<5Z=#CZK>QNK(n*ABV2limc9?0LEnh_I+{ef?aZ)UVbCe;OZjf3$aX$wWj_ zi+ITE%BOw*OGWxXgge_~qj@}I>v&6(L|~R1wcReJA2@dm^r9_3?6B9xE3xx5ViW4h zt&LXO;w`>_|E-^pqa=?1s7+B8{{&@sgpM7p{*Z>2O;oKFOaug$W6^uZs$JQNC;#3i z`rX69bL&oo4E3Bk(8oP(f2G&{^>!tVa^glCLOOMw4Kl?y?BCSHa&eZlmu2osz-Km- zCv|$j0i{!&U)xRNZ+~NLuyU|<{Lp&v*6LzdvqqicFn%<5f>-nXgC*2Bf3r??{G_PlBq4bIVQ&~F;SL3sa0MAf3ceBt;sN-bSr^O4zXkQv_r!H zd}+@fdLMi-h4o*q9OeMn+JonMGY6lpU2=u&`aeIBvXPe;WQ_cJ}O`=)YZWCjou& z?=20s=OVHq)+$z&Mw1!;hp@K}t8&}kh8GAH2nY(&U9t!fr3IuB5Gm;nXj10pE_&*EU-v98`>;Uo7_q55F9?1QvTYX7Tf@S5L-sb4g8x1>igMpznB z3x6ze&D@TFhTls~*jcv$zr>`#3)1|oNn$@!x|OFpe^c%(>1O|ejr2!t-0NGz1DCch zqa~{R7MrPCKH_aFCe^h)YX_`o@3UiB6O$~}LXBsj{K{ssD%NGjEq7SY2esHiNJeI< z*QA^+r(C4Qr_Ue*s0NS}~uW_NIN(usyMkP0`8I&rX)FFMK6mSMUzkQYC2-)BieH;??gO&2k** z9lLyM74q#dF)_D>>@OChpLPO#|HU6W+j)2ul%ZSz2yWbl2Tb~6-Bx2X1kIP8F!9(- zsGfsD^QYt5b`7S4^qXKtigJUy(~f7I%hvwte+f{Qp|nZ7&IenZ(N>Q%n0#zROgcZR z1;;S=+R!^}ZL!5C4~Tw!Oj_wXhbA+aq-CNVG+%r_q_AXUAdZmnNzbs@)C)_y(p-OD zvluVWCN=DbV06twxZonFr)vb|A#Z&9vHS*GUx(ju-KZQ}Z>zSQ)`AdYG~I@{qvI#g ze<0+2yuut!;0ir&XUYeH;7g>2zfZQBx<-q%k^VRw?FTx7E}JocU+ejtIqjrE_EoqS z3ryn(Y+yx9<`&35&6bosk=HzG=c;iqD1^JFr%nAR$d?ERI&$ariCJdMV(WnwoZ)r+G1TbaXJW8ic%k8#`WM zjxKRJ-d*9gnc#8TA2;vu%1v=j-?mhVdYYnxVbk{Iad=w==2Pd4k8P5}=?9AKS0*R;kN*%KzWRKxu)cFKX0*YGP=0*^(M@O8uW zA7uy#%lc1zi_(yVbZovAxA!ejUthCf;@(o}(XETfwP^12P+-@CGvR&QxOl$Ra0w~v#vL3fsBE1^ISTK$J9{(Xp zuxe;Oy0!>$oz_Ml3{Aesf86biWm9nL75ea$}1xU z@vc3ZoVUF%$jw97-*Qeks97)|TKaz8sQvzx+^*g*M|v>LW!fp8|Dgc4L^PiJ8%LgI zFu;NEVVu~j%Lz9b1dK$sf7g};98w?2N^1Z-hFW+h zQVaP;Le;IAh7E4Yj0`Jj21Z8NFk*J08D_}pSDBbDw~sa1ML#z$iJlG`+CVA3{n-BA zuxPQ{>`3r#`Z_%^3sxBn7+9`gY`OT^qAyCfYN?u0$gZAWfzniN5=KTwSw`PN2Maat z-!K1?pqP*qe{yBn2|I>~x$xvAUHXt@ij%}wP>7)*?E#P5HirZ zYlkI2I0**{Zq*OPtUVlED7vtk*4)c&TJtD9FUcg?<#%)peUy7&LF1RBQtkI3j_Z2F zd|P$A`r>xQ%WQJ*6ghLOUj2HC^>9_-v(jv~f89!;NdnjXXXjJiKR61=iP&9kyx<^l zE@U>$pw&An-W#jM8*Vyl#bgZ9Xol3;|5elZ4ZmeHh>d?_gfaUKlNN97<2QUwD=y%m z&A#Y$eGS0bNd4V(wx49tuRdYiXfc#SNJ3&h3R41&(6WI(7iYYE4py&<_j||kef7Nd zf7Gf=E{0W}b__ig+1P)i>#3#RHhz9~qVURn;rrXLQ>vE6TCK-;*4!7ox3foX6aIX- zGM6_YQOPK7>dv*su3fv9li5D&bHNU> z9zNpm2$C{U16ty%ROiRMSgDzRALBwD%S&R%OuTIfCy4NAD4bbNlrN3Kk@Kjx+B#rW z$$5`od;WXW#%Y!EIVguq?V{AZBue7vO!>tgLKKNNiHgGrto+5vLxr_?jz4lDe~56} zG*5Ju)Z4?lp0!BVdqw6iXE8NSu_wMA%t*5;x}tz0Q2i^inQGRfym|qThSSpnj=Dlm zllN2onPpSM6(Opj94Sw9eTu9a^lnJBVqRrv#q{gbzX)u0K*zeDFcZ6)I!B$N4s7e* zXf*SdiHe@@eSBV$dX%q1U89Yqe-Y#hD#a;eQsm5M>fLgJf*m+tQjW}>>TLdUSm~kE zjTW`*Eo61m$z5W-YZaQU;)ZwlZt$a>*Nujn)DjlmMAu7z`NJr|%dK)fa?g|}PRokVEcAuN;J%`wZ~~pv-*#6+e}e$Gsdgd2 ziFp%snnYB3?Xs?p>&gDc(dH2US!QNt&$c)y8?BhzhLkT`A?e}1Gek8jwjglsyG1G2 z6XQZ$7>`e47xSr`XpKm>zbti%mrs#QjdN@0Onh7v04@U8VC>Ff-;K*Y-)=u|hwu=n znRXs;^g1zF9nR-AXol5Ee;VrPd7@5*f^AMRX$(k*$fUC8lvJ=gbQ1jR^Ge;!*6Ir7n$1%wB2 zIO`2Wo7TWwZIed|pywr>>pIF^E7?9(89raNHhTN1Bb zmCptAmTm=Ihn@#ae+lVpoN%pAGGG9X8#4B}JSyGeVAITR88n)?HOA|?%YIZZy1P}s z6E2@Bq-kVq+~eF5gwHu}HX7jQ^!tVGMaJWR>x{=!qA!2dIvf4o&?HAub>}QLI^E z=KM2*OF%a&+_gW67tAVDR#rBFP5{&RoP|LlHJ8;rOaIm8<&ERf<=*youH~lGBp56P z`^o55blDJ*NzdpjXU&H9FKRp>R+*)8=^74W8NoV0Z~hpN1EaZf6X%e*NuKMFP2uiv zk@j;u3O<_gfAR5ewgeoC2+Z@g$-Sb!e8@}hhBrbauW|QaU!2=k%Kx<1wnSGw+w=9* zOjCf)P*ItLbj;MJSYJ*8oMs}h4ui+=xmg*mm~sdJC27C>#q$(`wSYEMa6P~z-@5_3 zdO2yIGB%`QwBwx>Vr*0yN%wUzM^C}jWY$cXKhcT`e+$nD9Q1H*tF6Zi&W{~4wOi%D#;NI-4+-#~r& z@HQ&Z&8V||M{qdW<4Sc5(}TN8gGnE`#`QI)>l}x<#qks=VA`u}*Cg89TmavYf$FS1;ajm)lGudH03ht4w@A z7HEw8=0wr#ma%uGwsoztU)d-Zh|NT%eknu9=3XYGelvz8bTzbU%$-4`1}3!=${@_#;J6 ze-`%cJ4+Lwc$q_FW=fuNep znon?eb=ANABLdRtf07!V zu}riGKB14$?pAmUq(k-H%*4J|(CZehVxW$WH)m`gejwO7-!4oua5DoT-j{<)d(^|2 zUoxeoEE#N{S<6$t@O zIs($57gOD@=$dP9OyI5krVJe>oUNYv;yhZv(b2esJJP+iI%1=1uiigf=aJypno`;%yTj&W^Z}xc z;QQ)*HDHbCZpP-P*;(ct9_anIjmRV&cdp@>@|=y}v(T&f@bmzfe-mF93fZn0=>KLQ z_U%KrMsD9<(Huvu*lC*#)-#Oz@U(Dj4b;~HeG%X({6{>L(2iN5kJ(|!Iz^EDnQ>i$ zw$r2^BoN)RPNuSc!K$3UFE}vrqgG%3jyZ`>h?Blf15Uu4c)~b;IbsNdKPHj(9+EEG zA^IcXP2xmz@}L%4e}@GiuWN)&Yr(oRS?+E%J};7!r;CeU2L>J*Y=NDLk%DvCy8AP% zGZBl9i=!7R{iRiVXRNF332#SZ4ABt9NZ}pEF=sn?=J5mGFW)+WOm|&1%T|0F6pG}Y zA;!`*DuOGlU_kmb_C|j3Ip4ZEd!RMd{aF)D`kkZSatZOJf6sN=DA%9J^0uUsFm6PL zJ~QOz^)B(!&;Dh9^mKL!VceGkN&1cZr9ZJy80HQ1u~5!wh~=qCr{FlyY~q~#Jj)Sw z9Y1!>gXf-b!pE3*@NdGvwkbsgV-vhMwUzghlM4k?U%9P+aOJBPCBA zV%?yi$Xd|wf9q?{gXP6VFbWyW;3cG_WZ#&qj_(t>mM2jNM&cdwN+acEarvu>YD zQ+ug?e?v+SQlpa(Er(@5`WXzny|&2@E$Y4Glw+#ee^?|Ac1@njrF?RgaPceX@Pvpo z1U(mBt_4E8v9mWt5Tw<)y-yFLZJW&dsG=kKvHS%mtL@@Lh?qOUWZ|vGlj12v7dxQL zau8ca`dy)lSYNm1tOr@TLcDA)Rf6xgdpTXn4`=U-hSDEaAWsLP?l|mect`^-1WJJ^NN=v&s(inA?Enym<%PY>` zXu$m1w+L}lH5xr@PG>L9(&~>_3z#hCdRIpZvLTo?2rWYhsaxk<3E(iF8eWk2()X>n zT%XfinaQ=-Cq1Fh25V&1@E$4Qg1t>Iq#+iif5C}|ozKm@Y@z#*3LKxQh1#P1r-KsxCH(z|L*ON@PijG_txU zs7D5S89S|L*5l#Z$S0Gk9KYAD#R&PFe_5~XS*Ftw`!?;2{ijd}@IOuOW8OLjV~h*8 zF)BXK!%{F(#Vm3u@CG??txXLA$sjB&tna3!mFVRo<~SYL#Zd>Jy&4E%cO?-2aNk>1 z9%L>I|C9$QihfEd3)QNis}j0&h-wl)r?X&(&~!CX*BM2_Eu>m3T#+#~k(;l|e@@K` z864E+R|RgTP;t;(hXt_8A2RI(WKy1@4{m^tfGwXCQO{L`sH?IpFe;r+SQC2`eKtl8gdEeXepntaa(&Tw2De8MY!;#5~ zSx0;CJ<|+Yy7<%q(M_shdyH?CEOx^ewX7P)SmreW)e*wae?60z! z^gL+T{))4d6UOVZ{$pTj#^=IIv(C8)7@HZ}@p99p+!@GrE4|NL(F7nDwOK;Wzq+Y24WP&)ypS=_10wo8q><|su7Y-UCT#%PY$Z2;HThg{`P%Caa zcdwcA#{q^bN9V$)Px#>df8H%7g+!B1N1m2RyC(L%wXt|AVfVvDVUWt=q-T?Uq~9p1 zmzMP2JTcR@=VOQ0D=nE8)Hnq7Ay`3AV2zG3SpBA0#4k#=A){z0w2HdAN8k;U8*_RtOI56W_#-#y0z{2BBwNZ=Och8 z2Ddj$c0St9)Q_K^fmv3(PCXCCThI%P%BUesTygfr>XF=vNCSd&RZZV9kL|| zd0Tyf&X?!44cw4Je=D4J`@vzST2w#9o0XkB)|mQw^#cy9J`i1V1}B#J!3JUXC#S{q z&irLC{}hO977koZeKD97aztm(%)_Hf<$Y-A0Qn+&^O3kqs6hzDG`?)oRnIg6C?-H> zAUjebFbFZ{tBhvwa+6z0`0raW%U}dFXty;O_4yHW<}9k5Lb?-L;L^5<^fzcW4$QP(@E&eciuCtE&R%uLe@V0N?Y#iE|O30 zFNcB&q4Rj6e-h!QCLKW#O~%Y__53Fv00kIiIG&~Une``Z zWw1F`0JCWFR#*Z!pIb+cEipi-z_G60YRD4eQf&O0FV+5{(=F%>DN=&f6T~186sUzX zL6e`|PUWT-_v-4MraMt{rF<)6@vqo7h=2Jzd6-V^Vja0G z8`jkuRw57=5q$h5Uc%Q#BtbPP4C@y7do;2VGls+h3A+BY$`CDcy)QGITBC zUbQ}G@b*drwvC7W{5i%AemVdgA&NI?dOP#0sY#j{LZu`}nKtwZ9oSd`$Vbjd@<5Ib zb2R)_e?DqrUE=8YpeSmgojnW}C)TQt7ZOC`lfBSqjWd$q>3X5qdMOQxjYnSO&@M>= z$Sc~+Z_gt>qgATM#5vADs>z=tAFuZLv&y9!52Zq$Jgu3rx~l-j;y}_HlmybidSgtg zi5mE+fZF%pLol#+aZnG}RtfRJ6}3i-7ykl8f24-NxjTQ9A{-V&3|7;;WoowEPQq5z z379s-G@RYWm_|&xHD4m67Azl4gETB`Mhp%+BnHx$s|M28(HAuR*^M})Y<=2WSLirB+ArTJj5gG{|QbG_Chv=Z=GwE;C!G4Rg+pCYr#YS3o zf22R&9-}G=$h5-DLHuIK znMy8p%#67c#Q!0<%nGDaQ1>8e@}xRqfAw~z=U?D{2gkD#Q9yx@4ed2|Ai(@A(Rfr{ z5g<*{@#Nv3toL3br$9sF)cw3{or56%^=Y&{wUjc7h4^*@5v)_wLJMt|6yWXx3!T?4$v!n{w!Tpe=%I# z`^Y0#KDkEm;ijNveA`Gdx>5n7$Wk`A_br%ELz52e?D;#ei0y=ckUvUdbwXQL=pBnd z%tpi^#M+JtiRFyYDSHWMUk%XQKyDhOeSfU{F6Uz%=O|F8Rkq!leO$ab3aStCKmwfx zRy6Le^t}gCT}*V0LdkM;OCd7ke?HM-e3LU;7>i3YJ&SRVdO+;~)8E*K}M`{Z34m$YQwhCUm{{2T7^ZAPC9*Pg$rI_Sv1jY^F*?sRNe3KJNO z_qbdg6FAc8u#1j?yv3f;iC~B(u>)^Hmn$p%RK8zsii%P|jh-^_C&!t_f8)PUdqQ=G zjJaq{eJStKU!(QOB(q-FM;NlgSb%)^5=O_S80Ux$u0%LfD^_>)y?`WwYsILWq`vS1 z{Tr71g3^sl#4vw6@D}?{3cMis6OVZL_mMQ@`;?Vk+M~rR_;@yqm$b*C2vW!a%@=L{ zhS_vl`Gl#rn;HilAp&1Xe}?|O95M4oblK1Xvd<=Hz5H0MGvNU-2Xw+-2SfqK1H-&o z_UD?KbdB=~=XM5SV#bY%E|7|!Jg$zgs(lcZx6Kuf4hb`qiH@LdB2IiYj4){0(KeE5 zyp&gxsaK0xS$iTA*kse0G;ZtMqoz7OEr(!XQgAM5Dze}VL+9c^H4b!@g+ zpeB+fju79}J9=NfFApvys5$QbZZ`b5NA4MgEcy^Yf6gM4cNiHHbIT3Y!EE}Y)DRRu zRA?+hI2DqsOqCCuC>{eEGc8%8z{-Z-tt!i8Lfq?-+a&op3 z2&1qzKqjTLQ9M7vf9%j<_V>cvD8>N!NE?%ZS}N@fduAC36gZ#TmAQ- zvx~v=Kcq?~Q|fINM5?%b&QCojDFmJ6Z9mUnUKuS)I$ajIh}5dI>=?{`qF`jyo6OJc zvZ)jOzO;U)SJ15P2}g|txV=X6vwg;t+j7d18$`oYI=2WQe=tPPeqS3HX1gAJyC~ea z^Op~hei=ns3JsmWW`Yne33AlPu)4(e{<*Lp_`NQhjjr@qh0-6DK(SsQgwt`#VYzMLcl@Uf-oRKzY2q-q-4V4 zV?&-VbICfTI*tR9OUuyKZc z(D?+bxZar>)$t~$U=4wG!H0T}4N}xb9u>6hhqz$de`mm2S){mkpf=16Y#fP8rNsD85=_35M7qC~~~+ z)hq0=f8RdS;IR|K$jF$GmXMIJq#jjXUd|vWIC&~Dm-(m5q0>nBqGF*`{(US*J`UBs;m-yK3tQf8AGN(bqO5q@|Nia5DQ2c88wUHEi`~ zh?^Z}M`bauM$$`nmsW0Xr{~qCOL+lu;2M)%JLAr!Fr!&6ZdM{_5FZ-{p%mHp8kLweExqEyiEA;UMh%B&bUJmXCo?h zfy;D0gBD>Le;J|OWTp&Z+^73&1hE0fe^M*kW3_{q+CMb(8<*869L(rWcIf3t?N8b**EQKr*P2}oQ*>GsQix)rbleqdaNoP` z;E*$1eL5FD_Q2$R~R&Ses;~wGF|$CBylWce?Gvo zWqn)loMq(f8nI{9t00llN|6n#mjpP?vquXD*Fmn13gT%2ea_ogcUqdp8EZ-~k_@>tM`ob9UksZidy z!_|zdkM1&HxU+kJLUtuBL%4$4)O5MMx}d6~pn}L0osTeXxr^%8EXvZZh)Vg659_=R zJyNuk4NiRLeqpSm9R&Djf{Ad!{Hy9+Ep05H>;f-Iu% z0r&uraqIly{xeS7_8vrrP6uWu@gZz_4YdZcDY1~Z)NUe1*c^N(f26z#5SMS%V^BV< z2Q9<1XA8{(#&W!*O@9_Tp%xOSEH0_l1asBoKUX0guTD@651&)Q_?y5G)kNbzk&0!R z#QI0fvVcODBM{OX|4Cj#m+aqOND8?+_<%NdicigaOsvfI< z{W;7BEXkMqJH)fPeO$T@N&n`#)GPc+%eX$-{40pRtqA8@e@L6=He`Z+cY!W5;$E!2 z(ZTKPUSBwa=;tU<;n&(ErC^J9w4|9g%=j1OXr>1AEFJgIyp5KWS6Ga=aMCLNTTEEQ zvlple?5SNc}fEI$_K&QlT&IojG&IVs;V|onf&B8I}k>3$0AdJs<@v8b}I$!C+gnX&|uhNUvOT z=6yUv(4Zm%v3uKS#Fe0`s3EdeCH#LlH9C_re;g_h3GXw>P7PdE${dHRI>5BON{@OPAUF1h)$^LlKoKTSep`sm=M1$ zI3^LTn3Z=WJEmVj;HVj`;mNIA0`LXM1STH}J8L3;*^`cx1b{Nmm@wQ0*MDr#-+0Z< z@!E^`3D5UVM5@ACB0V7HCXNhDRWMbZe+AO;U%>k3+_F4^ESzt86(^%EQ;$N_(|DV> z?)9ne$3QD)YS3D-+A4AKCm|MN3GZ)~e=7&c16|%t5TiU;u?UjECpf(A18=PBbVzI) z?PQX9N;C)llM96XiPm7n?iN}f?N+mMTj)itizFJxAH2}h1nfSuuy0a4_4^M0E2_Wg|i;$b}Jphu%DvV9q?*b&(Xb7XOP(7Qa#!9JBvz4C? zKK$p)(|3*h63K9I-^8-jLN-TKe-^Oyt9;k$!a*{V+hc>Ou29+W^PAN%9ot_6s-2R7 zM}O>Qj4gaSt+5B}ca|rEf+0*P>QEgUhV{ngN;t&q8uc4=fr8|1E7deg6GiLfDL)$g zR}i6@7aa9dJ%n7Xd}2I9+If{Ece#Un0!Kmm5Y39CjFWNa(ck{n3R1_T;y@*Tx zP#$#G(bCd#yP-^~CyRCKMy;Qh8A(=bRF3Jfc^qu^RO>1#hQA@_RZM(na~I-lgNZhqju=6*>>1Wh}CmuXs7$UE+m%KgPs#)sEcg#I&vwTEh<2K5!}VYv9QR(;ki)%zBA)w9>5mU; zf>6KrJ7VlI7^dG}9(ArU*VJb0M`46-V0_RIjz)LdN%eY;24kUTx-m|fh;%}o8anS z?&)w7e}|@jdmQh-l65T4i<6yCiWA=;2p}{7iymEE6skPzq2OrpY#&Ti8A*( z3M8079rmu28Y2O=vF?@o5am2H);$?&bobYQ`F*8sdafk&g$&2D%qZ;CMKNmq3ID*# ze@=G}2wxXv5kVpqE^IgsV)cc^y8|+1Up>{NR>h%h3o{a zURQ-O2-7)g77345a??!KMvI)slldJ?e;{pe%Xt8%P04?k8dE9#^&+r()_W3*S=fD- zWzXx1uV~h6(GKB$JAVmhR9)j?iy{ZlM|C~Dy7J6ZM`_L#lILNIn6SARv_%38#IK7} znoB;BM;4Dthy_vzuBMCsDzogS-D{_R*FL82!w$NVLAN@nAv`_&jhL{=?Eu}&fB#c! z`S4(6bzHaBF%tC2fC=Df-pBc*KQUo^4+^R%B0%v4>g~x!Ioa*Z#bQ79#ZZp74BSEn zJJS#lguoH(oCN1h3NdFFu$eSRrvF=3M~Dl?ZDZpQw>KQju;B~uMu5N<2y78CD}EZ& zF9i)z%9WOCZp$eyCZJ=AoSaQ1e@8wNvfS~<9+!MY|1Zg}rqlaaux(mkJn$hHML=;{ zZfgFgmeOXjire`6n`m1SGP1k)BB!M_kgb^prePIgY#SeKKr&|NzmsBSFwrvL)5oh8 z3_jNXB*S?f&>6f59vpni4Y_%iBs_|q2!Kr6nr!0U6jG=VlhJ`PJwQ8^f1Bj^^|wI! z2gdmg)2{bv)P**HL|O^M7K^8j9fgfVnjr^FyTJcOND9 z%O!#F@{9MnGqtv+ZuT0Ck?Q9+>qGLkt0Ss+C4T2({Y^5!e50>%_GCEje=PMx@9sK+_7K&N zs`;Pv$Y4sif_OQdRux3Zwb^R9aQbREH(a%NV@5;jz=~spP3ol%Ml(^GE-S*oc%Z6i zLe=Du1jE4-T48e&5azWLxV{N zMTW!^fx!(gv05Owku4cUyuUT;b&&GOVn_<)nRiYgZ@*YnJ%jrG+V*eX{(Ie{iA`rSCPXjL@|pr@wKiG&{(G9WbseKIj#WH_e~ zTKTa^h=aD4Z6gr7g&lHy=`Yq51osSsu}k1a^Ct*IISB6UpC$3y#X*42bs-xA#+(r{ z8xV40vcBtjWZq_2S1&g5H!&4-{O3rbD}0ppjs0HUfB%Wx+Bh=y+Yua&098P$zXw4y z-x4BRaQ|pBxUG{g!@Mtbu*t{g`L5^+x|Xn(cATR?k5+l}PXFU# zfr?0pfS{MBux4^R8zNa@f?I8Iz`8R5^AaiUM~UOg_=U@L+d#9@GPXOJUj>wgKi7E~ z;5F-a=}Okqw0}p4^P^=CumW3#4cU7wX}M<&T^t1jq)hZDJn>2Hys@Fr^o|@LmF=1* z7_X6HFie#B%1Kvu9%BIDmTA{<11qs(4m1I@v>lKMSJshI`wv(d^?5Ub6&d^l!rqLHUFU4Ik_O0`u>?tJ@==^GUl%TaD2 zW=l|JTiZUrA?9HX&gpt9rv62vLixKZm!Qp@`=(*A zg`_d5oqwm^ou4EQF`?*bQb-w+_}NQ*wDTnLQWEBQGjxW1?SNNfr6u0h^Ecf6H2_FP z&94t(S>VpgLf;PU4JqMSgE37_W@j=*5Kcip@;S+F+} zKAGmf7DS-*RD+~~c{Wm#RA2C`X31qvp?q>Le}5}uh7RBCH%w~waTdEiea;|VBfpcN z@1WB-pA5$GRwG@uWJ-g^Rzs;3Q%{!5^I+Nq(ZycfF1S^{@HY1f>~ni}?>&fP5&ROC z9^63nzAfl{U!f%%&oshk22;}EAE%pCPrk~qU)0qkYhoH1C(iI`grAQ6a)?BoMQi@V zr+;51D;-s)AW0GffC9^tvS!i9U+>dHvFoD@u3ozq36Tr8g?z|8fz*1}EJ&?8mA{+~ zvEct{`8?`M(6^~!D+ZdkLpz{tR{8}q0N-;&ux-$w;#M#MI^@TLc|0UA@8Z zu$!dg(LFl&^I(}*9CRg{uU7Op3*C_b9e0U<<%>pa*ynls;PrE6-i&nm+s=iZO$x63kxOS!3v-pqh=WiJ zK%rd0{}g`5G!JRTyPdC^boXu%mVY?7XS~LJ&+=&Q75?=p4v0>WbK=9i$(5!anpSo{ z`BC6yvhyQ83LSJvJFU{(7bq%IqUDyi-JF)UT^W+UE9Hh{ql95TQ4efi`qp+S#DXrU zYH>E_anTg^I8T26rxF8+ECn+#-sQc&!jLLm^?0+rO-`Z5| zj)1?JRm6!ev2v!-tu`{)^=Nld28(c+(>^-c3duqI<=GtdBq9~+ku?UwM3=kQZ-Mlu zYdDZO!=8aHZhGb|!Ux2B_j*1-M|_>}POAGVtDO)#46CrvI>@uux`4E1E>Xw+_HC-W zLtCrt3Rddy?1oD)kxxDgzkl~`dEXqbmtbIK+d88)q*HLGN;`h>UZygqabn09wAG|S za`h#2HW&)Ye;15hAAZCGOUKoypqJdI6fRqOY&ckfFd3V7B*cZy!I_y|W>jy`@x1@B zV|Ttlq^8N>Y;UWa@l7-mp~fEwgQd|!&r%M>*23+4i*0n}CQb|u^nW|0%M^+(E1DjJ zLCRrqZ(zQ@aWCaf7W^0dS{)-ZJy3Q;L%$A(rOiWlHdzU&R>FiKse&M%5^h319r+Rw zP7DUa9awW41zu3$Z2angu~FxM=w%w2>~;P}djmX?dpi>4Q=UGnWY;I|%SKq^HPUfGt<|IL zu_|#81Bc5^n1hB4IW05AjCVs!l{cr!pGauDU|nZ~9m+VzwSUKDGZUK$mfpK~h_qT{ zB7#m+eUpp{w*ERR4E8M)`+HAtd_V|TdA&yZafn8`rcY#ED1{6)cuV$+mYG`#d{!x^ zr^|}yW;z`wcXrZo5k;!=dHn?PrnWb#_M2%|XOGg=*a0;kCiQKOcGh69aJHq1%b$Ur;rUJ28Jv|W6nDAvM!{~1VCQbov9V0$Cem6hy4G;g2$QxM)Y6XSUDTYx<(T&I5#Gm`{{_2!i} zg2a3@RW^w@WYJ`)L4-jy>)FAA3Uvyja%Mou{wTx;0S=$pElXdRV3s6`zldGD&1a*LZ6Kd3S}7zryND` zvd!LOr#SUsL*@+A2yZ0CC;851{aVTCq=fn{i+fzv=E~~?k*E>RvRoJ}nHyTL{bM*m zDFlLjNq<0V+#+MrV$so>f`Q=*^>Y=fI}>sf!v#9O79J$@H@G>iUiQ7{g5>>ayY;KJ zw4(e?^8%fVL;K|liNsyvYwu9sQXzrSfw-P7oJ)7HJ^VB%N4Wvg<_C<#+tL_G1~T&U zF>Ta7I>hW+3=p4+mwHRqu|3~{JU`irM4CGVrrPs`)Xr6@Rbi z216n~K?sMZJ6}2j#64IPAhq;YPSr3-ltCDs+XQ3#ONlbw0aM+)M@}RoJGjOA%AQhuf|SITfJvTJLYHwAGm2q zAqMl4B+1ej;pGk1;MHYt@;SHp_WIJk4>_zl}+_Nwg5xSG_B?#77+z5th%e3 zM-xWE8CO^cUzw_LNNux3Wk7#k4tdP94H4gRo1w-`ZbLKw)7|Be0J$#dz<&-fW2VO| zQ5N~@DyZm;$!ifryt>+8qeBywGG8thEYnilmitIRI!g-fkoPqgQiK?1xDp2)@TjV` zkaHmjF7tJU4{8{^`i{90(28juHvB>sPVgE!gY5Dw_NEhoA9rBT zW$Mx9gpjaqIf5bwF2o~Iygn#uyEZ0osrrW7G}U`Qe{D`o_XX_aKaeTiWg4#=XZJtxO{TJEgUr@4GQs}|Z*F*4B#d*Lj;p&tzzV^&Ct+4? zXMLl_#U95(rGMIlm@WHHYeuK1S1wgV#9oDi2Xj#xJuT@GxfDg^gq-3!*UL{7cf)Hb z8R-~Q9SJ{&J{q4dFX$d~!q|0xKmhu74%ZIkxLPs2j0(EEUKxjA&)s`8_9eS}%w<*V znx+UFFYynq=Z^>9El##RD^Re7r&qhTVtQ+jWfR~W_J7sw`-a2$&US}37X8r^JHS28 zd$$YoBMbARk}WhF-1iiZ1^!Ph3j1$?b$9-gBVHHE(sgifveuBK5-5muv{Enc5SK)^ z8+?wbIi6{nZ*{+(6d%l2zB5Bj#xeNWeDkX{dyuTm$oH>^J#Vcs$+@Q|tJjP$u&(=@ z>RsE_Fn{PSRUd5NFN1}?>vOVaO)B#(&fR`85B)2fAh%4E$OyxyXpN4g!|MiQX*Z|q zvLSPd-OHYxkPXHFhU(WKvUR+VkoylwNlC%=c8jc+2q+x+Cg1otcN~&lEBD@dR#z`s z6bcbJKGMOQst&nJzO(HeH^&>fd4v12zRny%E`Ru2a4TM~?)#!|G!RIHT(D>eWD}H5 zH4LgXoB1vJLY{en+`S<2;WR6;Mv@P?5k`!!uRIqR*J;+9Y>^`~c%hBHBIU-7*!_*k zBtx24mv2OYf|Z4LA{?=I)wm};Q60=t&_8yo^e{i0m17f9L1De~AMX7e1tdi5F8H>r zB!6jo`d?cfgG8B<32B?e!|tvd45K{+{I$Fn57o#*T2rDSsyQXj(Cy1FJq=yRb2b(s;j-!$-fv zD3&|AT2rKtQ&Z((91?DTAb@$#wcAEI2~4?Z*&=AyT4V64j#C_nt_v*Is9W8XGNBa( z<(YRuf}RK`dHxp8Ct70Bkn8PO;%Se(Ogf?%(KjgaYeYv!XIl*AFlB5*jA&xgX@7NC z)~qkphS<9i%t>Vl1dc+_^S5N$rU-0nGTBp=sauCxqYuizQtc!_F_`q<}UYX*eMc1%&C>kfr4v1GR0prB@_4hZZK#8GPXQ?K)DUV5up%R zPOecrhdh0=zA;A1@o*@1l?8mxo_`2u7hs{EEjnM(T#SIaN&-bD z!TT=v9#+WgaME4jg*cVxjS8Bim4vL0fOZsPd6#b!bnxb6|6Pe=DoFgJe1BI0Zf`Io zYvkum7kOLGB;GGw0YZiq|J8w>U=yDwo97crNlCB&Y)>;#p7|3T|DGzamJ?ssaU{+x3cJ!P0#- z4F2h~_SJy-ihReMoqAslhXD4#Zw*nqR!o*l5VE~0qdCrxnqJ)iLGtp2{t)bN0iHrS z9ZgFeB<}N@42pXop=7zVV=GB+H2qIUh7$VEwT9<;X;#v z7oQ~@Y(?3jf^?9I4~A?Lsf)tBz6txFdCi`_X`_8&pzqP7Qv=V`@|_xKsQR=zBb-XF z_KVny;5h~GWb1qjPMC0|5XjD+PH6^)GrBq42C?pQ@;$4xpr^dW$U88Y3>pgN_4qEHxn?3c zUb7jzi2staTC9Y=jm!<(8M>6}@n$F7{>xJ?d4A3MSC4@e!uaU-p*>prUZ*yOVa7kY zsu$rQ47vVIrGHb*VG0DF=U?R3DVebktZz>FjeAsUzP9oyJOpgL0Vq&%R}1>a%5p0p zdkX6pO@`joJEY@~AOs;nJdcQB-Z`&+Iip)DA7b=%_1x`0c}qUBM+68$?$YUfsmI>U znSONRcU^V}aHGFo(`L-@uwowFH3-NaY(4H7n9+p6&VQ(&m671(#mA82nV&uLgwxR8 zCw;EbP$BG8D@?b}(}GUhjE?gHc;QhlkSSiO=!W9l+}2R31t{r;0$5oy!iB+e3_?tb zo8j7?%hztjsf|_LzvR3{BCK(ved`M`uW&KF;i8&taa67j-;SelJn6Xu-#F>t^q+46 z2Htyg-G8BN=xiV3)PBCTEfyxiqrnN&gUJ~itvrY7H7pK~2mH<0N%<#Zr!;#G8u4fG zfSu@r&j^FK_PMR&3Z#-M!*<>jB30Zf94Cu;;;}4)@b5bpen*FQ!B|i(+7aqo>Oxvf zRuIKZjAwkHgG@8J^eG`8&D(G=-12jZn_mugEPw9`(7(KWls>iuRlCIg(ArVt=)mBs z?+2@$8}kTn{!-=bTaX)OGtb+ua#}it5L}VZpA6UUfx)7z;Sb%msKD=aMz(s$@umcx z%Jk3yB9#3n&2en4t66C36kzj`NpETxJsQsYL~Ie#S#=8Od;7LwuJ;0A~d)*|DBi2+NRsJ{FR zRWd*O)#g}Y84(zQ6HV^Q8GX5L!v1K9KARSn#lDc;e&SN~vblPVuI+GXHq(?SywVPU zrpUB#)1M18*tdAdU(kRT>3diz=uh7WPjmZirI>*dV`U{>m4U;Yy`X`{{tuV(|9_K3 z#>*CU9oAyw{KoR}%gF2ZxWZ8#gUCfNp|IK#4Skyv3|m@UUpG=TNA_ z>ox+21<3;)Bep4~9gZoQw#PDE7S8`wV8IjetFxG8ucT7B%9`lARw|tHkY23mX^XD_R3CgFd$JJFw(`>OLYPaQt39KQ#69_ z15Bm4i(#-oI6!G4La{QbLw~VIlNd*-HZ ziQ*e8fv*$Pa$7RZnA8-hhb>u~_DumO9IO32NtAwVKT8U%;`NwfF0LPl(`!5u7BFRtfm9h^fqh_&}d))M1P{9_Tes`bJtvU zM)7T*(oeFF`o-^%-+s_-rm~og{+yOq^7V!l-R?cHGdf#6!+(o3#d_DP)6{(uB)rRq z4nwE|kWN-Zc>&xa9c!S4!Xyd)SaAf<1>qY&2Vcbi-A-bgqyy(ve6RmTO|9tfb?7GO zT3^w1Q6fY^>36z~mBnkffi0V8JQK|n`LSS^oyazj93;lHQ3`{}sX$h`UoF{nGe9j_ zU)2EZ8`MYKT7O}j`{tLEHb)ni5uS0!pUq$W|D7es9S9S?Y01a`aUF^u1}?r{=3}8v zp$o32PC8kIhu>p+4kZ8QCHz;zvq__QsUsAkkn|aY??E_>n344D*j6)L_cH@-V}uvr zW621p2m#|}xXmCDgU9Htnp*LLJ=@E^=iD{g+Q9Xg!+$|;FHp>0m4N;d10`NMJUrN z!^Fk#zkhQUU*?LT5Yr2&Z`{r3h%ks&hWctlujrk>)H#M~t1$CuT?|%KK@2A<=yixa z%_@a7src6~Q$cIJ3c>sI^}yOrm_I`nIVJd0`EKh^E4Ywy$F~<%qjqhuLq_WzU)Ca zmV4^n_8F1b-(yI)iL{i0@-e&y!Xnv<9gYJKbli_FIs27uN9Fs{1%G?f^+zMg0gVBe z0Dl97zFd&u;te48Q0sY2By_+2qA7T9rU^eHBGD+8z)Z6Z{&Ol-1*)For4W`#SFE2X zcE&*$@I*L-5qJ%zis33Ni}y+HITGP644}bao{;Mjf>mnQU%iF}sDkaNLZ4c4cq{rX zis!K7J_#7+mrr>V$M23wp|tZ&$&R8QHGf>W?1nw2jFjY8d9S~Uzw^Etkp?a&C!DZD z#%Y{JI9-2~DCp_v+YSoAP%&|!%X}n2Df^a$;c`zxpv2<`cU1B<7-jhmqM*8F0|Nt# zm*X`A53_RiLl+v>o|L8>&E#T{(+s>KlpiWX#WVyfqmFcn$n5j8YYOV}st>XQMJ3Bks$96NPi38ORX2JKKNvP_$WO&B! zG+gRHJsu{@MS}0~obL}Fe8V8f)_CS>MPIzQ?7H8vWA@as2|a(RxJ`E^!v=r)X?j|S ziK^-&c;|ItDorJ$a|$a${Xy#dtr5>_4GDs&ndpcF~d-k{?u0|dp|gYT+a|i&M&B>)r;f_LX!%QHylrXXnzhNQ#Y&o532-d!w*XuYkUh5A&yJM)x8^!3gtF z-}c|3z6GXEf-{Db>M!+ha||T}+~tA~_~e;TX9g4s)ne(ikzbJm<`(zZD3H8PPovx% z8N^XPhQ;_Eo1ow)J+{wA?0=G`w!vIhhUS^kLC%AGL)CCVC4 z`zN26>q%U10}I%(>-qdHKJ){ za(;49eR*-JZL2?8pe-RT&K&l(=$m1aFK+d6oY`3imSF%ctJ~4ElYjU_8gn*{2F1{K zWeB1RtsRcsMB+lpld}F}(F&#LX8*HwjQ%%225RSeel*0s;Krg34UW~I*pgeW~@F zpmM&3^2%4ckVNNsTz|#~56liX$2)s^M&>?J>-?+=2ngU=3=`U)v});+#8$G+t=Q@( zA|hRXudB*Dy1*v+DRlVqz!WKYS}vcT6Oh6$48x}5Qq?#Q;_@%jGgzoion*+6*a|r~ zlriNMlhB`Yg!TKW!TNL3)qd6{ve~OQlmi6=O7`rq6}?T;0)JbAxeU^~R4L*6cg*pz zB&ojI4~SR)YQj7C`JSNKBn%3XTTGTqTQ!`Qj}&Nclv@mC%ZIOMj+dGY9-i`$bDH!wuwvkJZ6<^Pym=IRI z`8G`i*--!=OMeo_#Gc(+mCvm1naKZ~G0WmO7aOSl;^m_nPU7+A$O)~gt&i=4mi{lg z-NbB;BLd#-2z}Ub+{YQM4jFO;td$N8g#iC*pv{&-A)YLiQ%k_*I(|)uP>t)KxV`v{ zLV$GvY$$a*vedTiV02waW@(KxXMIiW>XL#AklcG>{C^2-z(QwaL`2|=S&`>|sAglK z?4_eAJ6Tky#caKHJeQTq!*Ohfm7WC4l!8Bh{PTE-6=&7QtKw>CwRs;GE7LRUU~?5@ z{&~KW+Ew$!ZokKhe1Dl^qm=c@=;c(sh3R@k8hNhr7BRD1ET`2>OI3dJA4}2Dff0wz zZD|P&et&iG9}k#KhK~X}WH^eYjnCgl^&5CS*0?F>xOJ$|HPbRtvBb6<(l=j2$=6g? zkY9H%0J!S7{#dD^l^6Ig{SCccr?n`424nFM;wcHft4I@d{Cq)0U<@bZ-{FCk&-id} zv4V7z18^*Mz_Ij6Gt)2B~#y|S{hM}Iqpx=^}yg5!kAE0Kp|rBX;FGDk5h z#OK^QI3PfNYohG?Iz~|Ocw{(I)kCL{U?p#0S^LYyUiI*8hvhkGnZ=~u*c%(Bm=*CVvKt&J;}sP z6@RIN55*|)nO*VhPtb3y^Ucf(Md%FBgwYMWS8o+~3duF15Lyv0@=usXMc@@BYRR`y z2*x%iUf0(j*LHUGTG8iz7hv>N+8A~x@T%h9d&(rI)8OHLWVbPrZ#tM6eA-}@lYW-h zb%+uu7ntS8lN1xPuFwk#3bLaf*&E|x34hJ|s-?ZVO(CsaDeiX4aH=ji_l4P$glS_c z`-3ILz)SbZQM-mALJu%GeeE_0jYsrW`sMjQ0xh*N3Y=_~Z?>^!Ita8ds6_MO&%K9K zv#t7OmLWbS3f4pkbQ8A?=w`CoH_|uT50xHSoDkvp($-J*)3e|348{JfM*q0cdVfs+ zqX|GJ%W$X|=bs;=dFl%uBe|-w+BJ?2Bm#EJQVAX>YZn&g_cGK=j7gX1F-hFFTJ7wQOVkehNE%xEFX*td99ft+ltL6op{jqF=9 zbFveQUWe%e>OKdosQ)iDy$Pp*+kZh=fnO4RfmOW|*pB(05u3_&m9}nwK=R&0J+Fo{ zsD+Xw%l^h_FFwZIr*Fe%oEPw?ZQ3Yvbn2=nmk&mDoqm^-CZ6DAw^KD`_;uzyz}!a(NLX+C+~q|tfw3A4wzQ_dI7x3n3b)sQZQb>e<03Y0rIynisnI3XU* zS3q$4@8IosZRkO_zHYpF?K9UWL@kowjy9jl~?b6YT6ma?7CBTWdDP$;!l6DS1_ZeHjU(6%st>B+M{opVZLP_H##VnV%+F_|(i`dtrpd zv*st1IaU6S9XJ`k`1o$&(|?NqWs<=|H7mmYZ8fBXg$y?g6BlgYT>$KCsBg)2sBe0J zG3j&A5#3lmUP)5@z1)2O%<9H>0s*BUQnvkOBH7jT+`>bv!8$i5>95b_xu)$Sq55E4 zfzY+$q4xy*cLoea?KP{J*^;*^c9^vvqa(OGC1PVdHWCCJ=A2F5^nV|?E2SZACn&SF z@ZFHEqqGuYNRen5f}55UQ3>cE-80g+5gep)C^J25eN-78W(=!=t6};uf%EUGH%bs4^nRL8nHdF1lxJS9U_2sot zA~{w1)TX(SG1Al5Q=TipV1y$6SY9}RSQC`7WOxjtI4xidG2l3{s96?>CUxuNqI5a> z_PT4%mlEy`_kRTo@nq|sx_0&)yq!Meiz~K{Bu9od==$zlc!eA|h&ON!Q4^Zq<;`G> zgqG+wQrShT3{z3`~__`_OwBs6UrP;G$VO>lT^$Jk1iu-qPj zO-3;+rhiI3s@_m2GkD1N#q#AFO*`*qbZf5{R3_8rfVK)Hj`pxrOAC_hJbZ&kH$nYC zIsbb$8?#Q@N$H4R zohH(B;G)4NMrw6D^X362MfRqY$#`jG?GhUxhHk<>1wsp&EXV|fOI zaEAAwpAe~nw~h&eQ9Lw2OTIl;%U~5HD2_q|rDcSChf?3g#2&(47V$pOOIGxQ}|yV(6vVk-sxIn{xJU?BMMrpYHA=mE=o8I_ppP)$dC6in`mp?~+X z!pAx=f9OiMTnL!FQCR#&|4PZI>EJ7{-8DNbib_u1{ zwH0q7u!zUkUR9X53eV7WAMm)YKn+WAfPGJnXhoO4*&Bql?gY+<*L6W3G#szCh5pi4 z@%!znzn{H1xasLKsKH!qY3-KaY=2GE(qj9P2x8M|tR0Nkh)hPOSN1>@YGe z`v-REaC=%DD>HwH9WF)oSGdXXksF!uso+F;?JB48hD#*w$P=W40CRZDAb%PRaSZ0k z@|g6Gffc+c6@0%gLHQ1a@C1e-8>*Xgih6ArM|EoIUH`QNX#2BAGGs?4`9UEj`KIFU zg1s<`-^7Q*@qc$V;;ENwp%lm8G0JGunyarO-qqD>G5OE`rkKc4Gk zlJjwx96aa^z&n`X$c>8JuzxYawRyx-BZ{Xz(~!TeBso8YW>n_jGQ;GzG?+29=@Z)4 z>_TQ(Leu2RG;G;jbqxk1`Je`464i_q$7_wHBOT+#H%;JF!iFgs0R0ezRJ;-?x!<{O z)Y;zSU{o%%+3}IH|JnPATy={~Lp1alU?|VKDWf_m!1~P~9y(V|E*#p;gkvW$@E+2InO2luPzdY6WppJ2$ihC;<3T z?Pno!MollJ1$`sPQhzbcLlo4y)cEmA)3o;){_HqBg}Fq|}NPLU=ilMFRY7Umuw=%oIQ9>69UXc?(6NsdsX={NR@QVJ%z z4ui2^8KC_{7=L=40V*)O2dUlOyl zY~$pB14u~Bs@TU*Sfq!v?F3^%rp${8998+b!eA3imVfl#H-!hW%Hp2}U$vEvw6v8f z94z{VQBlh=Tj-WmycvicC^k`$F>Y)#G{`XK+aop3on%)61QaGm2Q9+Dn7`Lm+ZBm)~5>(B|L5Z^L2jv3&mABkj4!c++G*LWcj#xV`mj}R?Lqw7pPlZ|4gFz z_w<;$4Bth_y1@`g05oXL=$t%_73C8>&sy5h%YPFEMT4+Hpe%6WMx1NHQG8#xU6)Rc z?r|BR9Mj*N{y25Y&LaP4uaqV7OwjcmBBRJHsC3oLibj8f<#i^>bf!L+RWE}i{3%a! zd}D{3g|RYj4pOzp$UkbyFDq(IZav9Tx$i zx_^S8R^v4pN11||genOD`*IsjumAk0;VMMNf3P2t&;QbjC2#pVqBc>S)mV&br=6-{ z3==v0XeQm~KrUw-ezi3}fjLx?gX_^pYh%*~Va3@^paEV1hU58shs!8HCmtmgKd?s{ zo3F|yzOrwgB6(US|IYjqKs}jI_cDa1#ec-oY^L_PsbzChvdjUAP_LPA+7yM!a91tD zV9+OZl3_Gzf_i1^%aCz$R2L55gL2$JnArF5&c1@Bs@cacDj}z5)V__Vm7M-H#!3@j z218~~p1CxNkR*OKQq=fBl~g1bxojmTV_9HaI5X#&XJcAiz+GM^vo@n-gOXbF`F|z< z`-dcPgPHVNCSA_3#Jyvg{=F{kfryS78Uw(#k22?zHsVjRU1XU<1c0!UZ2`+J#g%}E zh2KAq79btd>ax>x9aXkNAqbe+X`fqxvpif`>?_eB!mei9=zN`TxkkWjiPKX(p9S~c zbVGj6cE4Z;t__KEI>NenOAYxsKYs|rb3UYO2G)cg(2yy{?V{-G(jq1uI>!5PeOICG zW*$_{lI0ojbK^0BuyMJ~Y)m>4VxQO(~*uvH%lm`N-k zJii1QhP$b|Motp$W=v$U!Q3r-NhSP);zA$My&RzeUhY~XYepNd#3faBuFh1PC+iI! z}iF^SW3 z;@4zvFIGHa6MqUNi@T0Aj>d#2%s;2*WKv)HpjJ`_?lgHiRw~A6+ZciONe7X!xGP3Z zCWcr4>)P#H5B8}0k;IUBT_H98Vag}xdj7h_Qkx=&{u+$N;1-^*Ec{`$uI4CifEsL$ z8n3ID46h4LOS-xdjHQ7eF#~0I`xg4kK74n&RpEMhet&c@Y1Ob6$XdYkYb=D4_o;pp zCe$b8V$p~DXv$7|yk@6f(q|4f){ce8q*ThSi~tD7zBMWWQM!8_xEHpPRAXY-BpJH2 z%9SUNURPr!SU~yp+4i=@86;1DbBINx8B02yDWQ!#CnOWgmiA<}*~!ky%eyWB)H4+g zg>Y_0kAK~_NRxLDz#?2jArflUk{vvmk#QAYq2s?y$J3}sPYOp`_rD@TYF1djqDta( zD=#i7ariU$k&H=JN@|GqBgK5gZ6>!+#&}ZXuYHjgacS|sXpG6|&rgf?5-rx{NV4Az zIEe*4aK#9Cr7O8M8EC0k@t(_n)w*^F3I!F6X@4&bz0Len`Mg4<%VXG-#P>ZmjHdWX zme#{G257!1`&$F^R)<7*r9hk%(A7PEv0Djx&KJikW$%t{rN2H$jkS#yXm5CMnhs^R z8>#@ED0ScV1Se^tvVW4b?ai*i4)FtZb@gphsTe?RJ3Lez1=yz*^t%1r$7@*?1=z>4 z(|Ln%4w!!7*m#ua9boSz9BH`J*FBw$AJ7Yo?7|ldmyOi069~h1kE)32>fN zWpSJX1oC*_y$yXUByzp9+bv9uW_`CVgnxa=X}|sEV8eLhCoDS7#v+&B#?vk<3DpZB zyh?>Sbp{pVC2ci*rV0uQ;cXF-k>{bYi&ZO$gM3F*ikpU$6;@7dgi?nur>pF;UQo%d zaR`2B*EOraEIseU*BmNuy*S}|6>FWd<8Qp;IjF_R5ucuJ6d6_Iq7yD{OO(S@GJpO^ z!ipPlxBIj+Qp;?|Zki+QydKkmk}rE>RnYxk@lX~6?>-F)IAK|XDqTpzWw2dT?G#XO zj$(1kcO*uf0wQZ{*O<~?)vJ9Y#G|3EAMN)$xe9@E@qR`j{?u;3raex#3b?H29LV-0 z#l>v|o;=e5IYT}649R**Ae!E!}2;)$f9 ztnB>a<*968yo<&@Rd-H4- zT2J34oE&V_XxiMqeS3;+Y<_-z>SNi9!@33+rK7UGVxzVCxEh&Ik1~WL=QhiMhlS1v zWLK2pUExz&0qeXhTN7}$lYh<{rpbA61(ioh3m>q>DL+=ZC>h?PO0OKqi`_(mXljxJ4mj+)cciNF@Gz`qxy2Ut4pdo z?pZEEy|h@*U@D5yGQ9lEjAbY{Cf&}pyf5Q?qEc^RZuj>yGozVQm0*R);e7F&`U|^r z{v)d=?O!KLusX1OTQgf`XqrfkHILsfGMDlTn)?jp^v?K=e~>^*BLS^t;WqI837C-Z zWGRy_{MSOgA)2OUzJGCv93}WNT0{8$oodIe9H_>?SjqtBgONyCek3^Zl_^lp@c_A1 z?c9iIHWU@!J{Z+i)zHugUkgorlziu4LP}bvsQ-Yy)9N4cR`{+#O4D(Pk;+s>yl>UR zLVJ&vom1q}`J7BTuAz}n;PN_N{V4{|$SC9a9-9wdR2E>6OMkL1-p$LeUR8)A8OMFh zNySR<(lCxD%fMhb^v&pvFX3M8pRhc-$nfCo)%Z}QPPCwQOrhy&hiM)hzws#X`tA@50&?{>5u_uMAcvU=@4WSA_8p$h=n*wpXj`hU}Z)#hMxNjePDkx;qFeO>fb zbGNggepaBI(QX*?qS8Q*H&$$Hv^F0hx23j#Pq$fapA!|y)!EA08ZTz8NKMHxZ1Dig z2Fm*)r1HnA^~WM~M|}%FHt;@#iXTvTWlKDi`tmqqY;UH{&Fo}v44pR>f7IFA&pfOI<(zOA25Z8Cr4{@ zyo*gjy=*Ihf90GCoY2&Of5rW{!tSs<<53DUVu7+}o4}L8QHXPP7jeH?lwlov*usC()d-y6*l&~ zVU<%HsZe8BR|iE*6igMM+RBVHqzLC0^e1&`#E^h+@EGo-+Rv5W>%dkys1GOjdn6_> z=frLeKX#Jzl-|8|8?Q~WrdH93M6RT2NPqt`7qTxkmN=F$kRJLuc{4grlA7M$jM`6D zsLplM4cre*+RZMau8xRP3BVT)`CRY>CjTK_xHerjp^wL^X5yua62(d7UT2X_XLiiF z*kzCGFtiX~FhH)-bMVMZwVy@rPzWfE1jfRA`^GK!9lVO;5w*{*h63mHwl$uCjDJ_5 zWAu4I;g*;1oyt>s{aPMK=AQx`IcyUjCbxyUadmnDvUV45f07*U2IM$H0VDrD7i9v= zn0ryLzPg*imBc@(_HsJ-I5+!W=T;vGy!$skSDgpN-(1OFmn4eEXo=VcX9pUAU zKC-GT!FLY{UhoAA#q?K$MTe9DL>dFmS=eJ}JN$uLMrW@xjEKZ5U$wh%xT|J}hBjXP zZigaASL{c9q%B_l?k%Df?a$*}Q&l(d-h;LGI#XS2YTp!_Iqfi13VYUc=kjlG|rYN@6ub$n07~0L;0En5|{BTOlB1?a< zTG62X6*0THdni?$F8JM2L23@S2CCyC1;kyc_AQhD=ZX52ZxML#`A-He zF9tGSxw+kUXU;!Et={=kDU4K}tvw)Ch_`+WsSP0tCPb#KuuFwzPlR96~-h8hGkkc;CJlbBHAHfRmj|Z#PBdf3ddgjd6X~ z)TEG)l4E?N1Aq@%v>?P->Rwj*OVWx)AFp(YIL?^${s;ispr_OTWXW;;Q{ zk!EEPBK3-U6ge9gzpmXPmC8G>gR+J)$}wtj{T$zCfA?lA~`VeA$R)1{Y4TU`-dD zlt}#QvxLG`_%Sn+C{Fo7>{F@@@T5{CTy`)n!4g2+R2 z*7HM$2{9omcrQIvVo2`R)gRn}-aJOM(Odi(tU>(t;m88)FHmogiY;+fnh74qWMs}!EnO!wQ%1aeCOc97 z)fK8&NQZXyw|d}j_lh0Vp|Jg|WYstpb!b4O#(o431&6~Ox?#&Lwu&w2&wV){xFBQ{ zdkAZc0EXk3&5F+t-!8~9Qc1{^w>@6zEti-CQrSLUBY%I2Aha!Q^D9M5TMP63`tTfUa2whpm_#rp#?Q!lA&tFYrzjt3 z@2L9x)hguVOuSstT4)>S~=4z8DYceh;BgSI8!#MU{Hov8k^ESY$RVZ3##!r zUE_Z=3cgD&(5|W80t`Qc-~EK?*)wJ6lH9<+z&@0$cepuzvX+&k)r5BI`N#DMb+A7% zN@`p+{~UQh37}W5NXjdNhPVrGMfhsqmt^6%AIu8tRIKU_RJ<`8@4oq(VmV#CmhzG6 zij;T4kws>s?B{zwI80}1t5|vW+UXrOQEh+g(W*NA+45H{5Zd5LCSN7M3bH&ta9JhutB+0lKBYH0{jsy~{n{Y1{ zeV_!9c#*Yfr&-2ELKdq8^|RE@7UVw>Snc?XSGsPI*Cp?Ze=&JgVd5Odm7*8mCxU-1 z`REb0$0mdn%m&^MuXc}6h3;{q90kzpgN@M|hWF}qu4SC&W69qM1ZvyMIRoc_3y9Mw z--KFhYCZN&`Xn9nTZB39?B(7f>AM%4FHMKv?6_VRN{{P)J_j8EFEyG^S1a(1&K7@I zd%PUaj(lj`b;rqbYocuXO`1q>pt*mUk!HEMyokt$h=>S@sVqh&PRl8^Wb@tmmhCqx zDls)!ijI!uwzjrYy<((0yV<3NxG%ocMDt#7wy@tT{M;QB#Gk08m{{J%QgKe`qCpTA zk+Z^gXYmBL{4LT-ZnWQb$H6|OK25Z8#Gz<1C;Be%%xOq*c4k>|DE{N`Z$5uKkEiTX zqhYyyvuP-@IB_6&wnzE~2NpuTzH$Oex zny7Ut@#)~t=5^Y(=PR0Dps!em3`t7VWUIMuN+oq7vs{dJTGeBXn@X-f&^k@Wv;(Kz z3I-l$l>QtMcL|I+x#mDA{hxmTil*DMd%$HOGw}X(QRnkbezgC6_5TQ!G_7dI_E$S> zJT)JCn30*eettBos-^XnRThdbSVRfxudS_Nl{0r3#cF4Q(~#ee^Whe~Nabj*VwOyw zK+&T|k8-qY95XJzwbq?FwU}$G7PGyd}gF-q|6+4EfJ@j-M~O|Aq~!KYjU} zBJ|O8vfLt$(<1I3m*u8s*T13#UHrtS_v-Z4M+Tg0yt#7Zy&+|_;<&b}?n}hYnij9J1oEL)8LzCPO$G2DVD`s+z zX53`YPme~GRkeRJN=u*eovfyPhLG^YQn-si_g z63B|JfsCN~ll5F%zQm%}9e%|+i@j6YMGpophD;uuZ)FtMK_)Vc0EHmD!Uvi-q8m8g z2^$%H3w1$HFQ2J*%5a?985#tJ_%r1r%C8v3yQ@XW2Vn}8PRtgquz5y%=xWA_8&0ym zz4^KtGFX4GQ>fY;%!`J$kud+}>oGh1V^LNmBx@Pyg(`E}b;OMtd7zfjh~q2jf?#~7TcZG=-v6ltLLbui%PUE7y{q?k%{HJ#2|xF6mk zu4aEo!*kVmGnpb>4@b33Bf7WzYQ9`oeVUYR1AaT)?j-1bHK3sP)xx8N&9e#qy%=BW zs~)#k9~!;?Uf5M{)vJ$}*HuHbzaO-#uE76H|ElHE-w)%niPX7)YmKC^fDeIn+U;{eT zf8mDZomP;B?LeuWy|WrllIdCU{w`ja9!_yIt7>%;y~rn=!vd%xysb%tX^j1ZR1Z@qOx+Jk5NDA+)Cb2(va0?X3jshixqll6oVIG? zMM3LZcr;^8yGPeM{|l!lnL@DC7VrLlk*$8ZPMvEtl-(#R%>O^0pIp$ma^p+~%~J^B zhE__DrpQ+?%F?>9>nx~!>)$(4`|yANW($FL=Kbl@jcNNqY164nl!AhS{gAvUl%bo# z4<}w&N%9<7iq$P(*RIYs9nOIWm5ji-J)2f#QG5CCzKqu4TU8Q3=D?K%tq-#-7n9N)~A1KDsq&N zsUPsk*E?AYl{7Ra(A;MwYh*Fo3L7qRh-6>%yH{*})#MWZ06%1hsZshiyywMlsb>}w zL&FYjA(YPmwb`1ftNG^muJC)%xkoJ|%vteMs>z)V=pxIQh0rktFcX$~|j<-ns&#umOG)ywdR?X@AP|@;p(a z%+%#3{~tYB5fKq@_nCLUyQxldbl&Z@B$DaA>wg0HgwrJ?og!_TQ{jJKWwr=prps`LrHb0~tRE{n zl>a2V0itW{h%&s;Y%Smr=qw60Hu>RA`^`37p6^@~OLEi=MMgx-tJlA)YA^@NRZy^H z5YwBZocjV77dNp#P4x7Kt(_fT8-?AcEFiwb&CN}(qkuig!aILoyK(2|+GK@QIOg}h z6d}Igd(ZaFXX~eRjd7WB$<6X&mQHmh+~>cIbC(Ox0jY0xbaXJ=@UC+|9`n;ZrRx6j zBnxp|wUW5eSz$gtzpXes_kfRYy2NoyaW#|z65{l9^;!j!-e_z>srE3ArA&mf~_X7v(W8mdwW^2!Na}RBr8GXb95G2nxo2Hx#JwY9-EVW1GdP}hVQk0z}ekO1&<nf~`{lpcTPUX_=*mhl{+E+;i^Ch$10 z6esNLBEWy-J3Bi1NmR8`g4nCYrmG!T_x@~-mqaHdXs27=CL(fZr~OEb+!=WHS0|eT zh_n;Nj`D;)-n6{1ukl>Vh-Km9OK=T&cz$wVC%{qrOYkT`v&uH(;&k>B0FRAj0?}zg z*Ab7c--(qykk#r-IN=4@2y&oq^rZgm&FKA5xkG=khf20)qXo*42NQMLIg+PN`M`VZvIrw=yRcJ(0gTJesE}jI!*gyb+TW;5`(T6 zz3HW5WMm{^mX(n?6bR`wyEr?($LCt=dbo-F-NRdmNZ2aW+1ec#f#&+le5O_%YU~T$ zd>hVHEgZ8rROLEu_}-Xf<-vies-Y1FtYUvY)XNUK7RbuG6r~vT!*}N zdZ`~VY{OZy)CsQZSC?F%x;cEmzF`2bKLx5Px6bPWg#C1jpZMqt11XMfGkSQi8V!I* zVd|^nF6RiH@u;XM1GmJ}%%!3>dG3783YqU8@D)u>bD$o^EiEl1*(C!*W+oc~09}8b zEgQ}qfhCwcFlX<$SikRChnZWC-1xbd&|A{OlZ!ZR52x4m(Fcq@M)Z^?A`oVu<{Bm--YZ=~1eWGc3KGp+HC$qV&PgV`!~1I+v-3@1GPiOG4%X8m9*0`Pm=oqT9TR{)yG8t%=&U#|E+(p-WzLu4A zeF%9z%l@`Ip35rffEp+)MR~!8gSX|FLb)pWXI#1Dxo)RWHQq8a)t0t4G9-DtP8(?$ zo7U_<3#j~llebHE<@k76uws9Q>VSfKq)>N<)EwS*`(x|KLh}FA;E#XxfZ*R6eA5d% zdV)aUOiz34#TDMe0fr8iTWI#mi&Byd7z)XckB=upmYRr~dgrQB$ctC8TDAcX7#Uki z3|g*xjzf^39ZJsCqg!sfBq1v(=<{ZOwf~|R?04^@Hi`w4f%E{kItYJh#wu;nR=yJm zz->2xH7uFTWtM}}JN1e82O!$+^kv=?VX zb{w2tPu8;dfKywzG9by};NaTHoK<=12w1ab#-IN(`)EK5?*A1BF#eqcxE~%uDAs#0 zs=EX6p_*jp=39TF&aI);)a%~`aq%T;aO4Kq8o2G2D}x%9bCh<6^3(@^A2nP~mjF9M zciPp_VM9g-2;7|O@I=c7bhmiyx9)^{s=@o~Pb?;$#=?sj5OuBxT028$X#|~n?i^eE zHa{OfdBW#3>t1n6rLki`uDl11n_Ta$b-;D(#j(JDx>tW#&Cb{XCh1mOTzuWU?TF`W z%&9WHpn{!~8jy}#6B05q&;{NCsF~2W3n22T z-;-r#E9EG|HNfQWOMOOcLDE`+LKCSNKw5|@)S`b6BQaFgloA|d=w9km(;=p#G47SG zX#y92gaFDh|N06Qa|d={2q^Ma1l~exu-(#wq<6*OKsh);=1psSs>*ISO_TtDpe)zy zyAmjy0dPpuX8&6!zrGWkpO*UiGTu2k+9`yB(9m%KcDg{<^E`S2dUpajk4D76eR^T! z{uqA-YuVNA6WDDgIskm^^oM9DRX%hT7OHm&^fLuGBh~WwP-6>E@|sIPC?)PUC zr6y@(V`>%US6O~#0EDIEIlHHmp4+67SLqEt*y^2c3DP#058>Umrl;7OH7|XS>c@XK z?)v;_qTC{WqQa^W3afu0x3nI70x2pJHPkYLa$d+CDD|p7-qV#g^!WFlzD)+FSjhck z-$uYv`C_ndQo zXMBI&ZwwhjM#wH}%{Axq%*r9@o(WEgl->Q^vNN9%<+<9%Ui&AOo;3|yWKw^d2GEEs zwMRoB4NXHf)MjO6RcF5LVOBppVkhLl#XkeOZElM9$SxfHepUTzsYy7Guw2l60jJAh*^1OqVWQ zI=&A2;^@vt9ZEYNaO!6576yN^qyWhhv-!c&^Wjd5MxYHJ8^{39F7fg6E2l{Nc!$dqI8H&%HlZ=e48ryBO>eRw?#FS?VM`|ooKul;r5Y%lgg3Ip zSk^aO-XGxm-5>8!_h~ESKV70Z8{nIQ!$B|IIb1{`f#~@7OwhXsvYda~bWnybjP|m@ zA^gJ2P^atn9R`%ZSWvGNSt#l9Z~ikvMqme4@t%SC{*3XOQ|RdR6rYI&`gX;E0>a2vEmm3iW@%bgmEQ>8Qrt(8`8@pWXy>EhnSIfTg>FavBjq{OPzMl6M=v z0Y&Vtwhw`>FBS%{l*}D;b+DX;a6JPsk8Zi0hMD)MEm#zr2M*olJq0Su8Q%X(!?JO1 z>HN1AtoVQC_xk_KvBpbx=gys)-9KG?b6(xIO6sP}T}I1nPx*g9#8aT>gww>pDrQU4;k~L1U z1~9<|ckfjHKaYR)O3cjw#cGEe{tgiOOwAN20ZBGZdLiIF@SJC-LVv7%JIXu{I_hj8h#gN*G1M$%C!cpN zESjkGanZ|rrVJ?7AyD+Blqr3m#GFhykpSC!XU8^ec>I5^6B#%OGzRW+G}6v4+x+EZ zNHiA@O9!woxwjK7s{lO?5XHNoLuzAbG=ojpIJoWsEG_C?)mBPE!tB}8>}H-ZQ&Ust zH4C3Y+sCui*^>OHnG3Rt*yGx$LpyM-s0jar;#DI}oc z#>M5jHBF!Wch+3xz0xZ(KF+e-S|L1~EDK;mMR=_@6>D6+ui2ycZ6B96+OpGjU1j zia8Fsk|z8bfLk(W$+?7(o>1#orkuBP5>RxM8gj8txn0lL>gaZdY1`ni3`aN} zowigfQ&R+IA#A)6d2n^My1LpCU_;?Wf0Fjr(hfXnXmmn7R(^jq>MECRVZC?r$s6+p zB@OPYA1cYvV?~u2h4tWgK(@C`YQ}%Bo20zgDTEOXbw^YutLo)1mnc@7HN1qp$_6C)EDX1}lUA$*Sv~l+< zu%*==HWa61QsZqWb)wgZnX^*JiYyo+W5DC2y_bFlpFHQeF=}7CHe=mxzdCC~@X_8D_?cGIo>A>%fs6u~8pH7f)si;XL**78CRF!H-OpWWZV zCmtNY2hR<==CJb!ld+=3{JW^s1#Vxzb zK0+}p3PenXu-E*P*|XLlkA1xZ0BF~hVUAgl>uJhTb&Cv94*_ntnkIh^M`Bqj|4FLX zVx)r}5ti<44j)dOt1}uu&;1M*h;h>>{SQ;B-0J5srrMN%3WUkqn9(pCI)S!)cT*dj8rf?wiSix$w>9=bOGLn^=@( ziL13F1cH@yKBDLbh#`OMBAVenTbS|GJiwU1?hLsArCtCC_819XxI_}x&dbYN_DSlQ zbUJbYuu$Anp}#8adnKk%j~H2x*LXR9YTt#qBtvc-7+WVkDGhJ(X2s(T0BYqWJ5#jx z0>W_V37r)7F0_wvW#_wGiFAg!7Hc zv*E&IoBQrFj}Agyk_Wz9DTSY0s>7X62duh#R6qFRsYi5~k-gg1=*Q*^>Q7 z(Y@sQ#1ga1C)B%fRs-0k@4X3a#T#;G&z&20x)`n}6oA?(^{{iw?Mam-RJIkFEhjs7 zb_(5jRs~$GOrn2_{pk7j4N1H1i|oWvr!A3E0)zi_frt7-L&Aid3q-GQxSBGum~|~- zuWlP>-?lgr>49X7AizsE&+z_`p<{WKWDzi0lLHUf-?m4N`jS#eo!{SI(y=5cGRqEm z;GVzPUU3<#>WBG&%wTloTi{VyVCB{_b8`MVwgF1}r^0_}r1%FJu&{)4>^Ct8lKehksm}WrbJVuJz=}lfY>a3LLa? z>N1g2y(4bzTqJN1XkZ!Wpdd8Z*xFWG*DcqOo0r$_`mMjvGBq_ttrP(I!kLB;Shx(> z?XCn1&wgcwPCz334CEXJG7-y|vNTLH7&VEsxA=dDnR{trC~r^>a|EOS&NmOLo;L+C zDC39b%DP0>z_#xPW5C;1Qzj0*BN06E4UeiTM+&>SZ^1b8U1d-(0%QatvzVJ91K(H@ zKp_mr;BWw{nwiKVYs;!OtlWgK9X!aLF<{S@w|M{t8q@CIuJi24ecwMe2F~&bp^4Hm zly!gmPS@SLcV*sOb`Q%5*xO0%?tWshu|qC_TUlF=Z}+WilhS zfCh`1mZnq;$^d3`j6_4@#!_8YuEL|(%!)I0G-MLS%Nek{m3)KHeAU)Er)h7Igj=GZ4xC^E9aOY z63Wc8yuSjM_b%ToN6@_YfR~{mxH$32jRw&X8>KO)8ay0JY}efIH=_UoMZ-7^<;H)I zFWAV+6^`hnlZ55rOk^V~s#QG>X7hG?DqM6dpm0+s0J}CmQBJKnHB-M7#gs-xt=W?X zLQM#3lmOnPHM{l~9-l)Aq_)s-laI8uxF zI)GP?vAZd{;_p!i7$4a&*icRsWdwh_Sccfa|HQTsR9!q)fR)u!V-rZ&3%lhY@I zBl6L#+;UhI3=MrIIAVVz#fOX_0vk?G8qW?8Ygk)$YGKD{;sPsH?R!5jM7Dpc1dvLO zoAmWWI#|GVT_s%RzP#anrmvrvjIX@EwDz1-p4pauB%Vp<+L05doJzN{jXMt7Yww5m zikR2o#ICMXO`q|(6)7eG-O1dIFi!*I$fsXIUYd>A=0yBGZRs#lY=(+}J7wb9^po?y z&*l3AGf27yqdy10K=|{HwiL`j)!qid>`yyK+V;6) zXbJu4?-Apksv#C5n=g4+Y?0851wBoY*5BV>jd;LVCuDg_ce3(o^W>Vztu2}S}=Ou zVRglVRIm%vvmRW>RTy|r!0@TfZtiX{f1R-%`s4WT;%#l=-m4Q*nG|(fc^C8^fdBLD z(-2txPWo;CpS{O}!jFF)eU*M9)4>0^_mwf+*Pr~nITN9}s*gPa#>V_& zBL0lJNz^@@=@u!)#~el2!lvHrk`ylPH#H8tuL*PRdczZd6W(?5Ao7GA^%cdIR)!Q5 zvF>h7N7XVk6y}6eYcReN2vThY^touk+Q4;j!9h}+N)C=}m?3|KeD&h-aWcx5Y2)bA zR3=L2j_j?s2)WL?B>+Xmi364qZ7&pK>2%q!#KokfX|4j(E51!w*^t6|1Nuokd|Y*s zvD&sio$G|tQGD1b@=fnS4e@GpgV{^8(pzC}t{0p{+zumX;+AAR$=IH@+ij?-?<3#E z0ox#47Lfq_L8E_6$e%hR_s&>H^nSVvg~24M)sVigvoIr>|BwID+S4qxgj3t^kM;)x zYZWan=RZipHCsUvG}EEDY^E0Bu{He2J*(c&k~IGYY9=OCF(hHgiQuPu-Y#6jNU?21 z0+YIj%@ypT2?)c5;Tk5vMWx^*?$G#>)eAS_@@zA>b@hKXCh^LULFg41&YjQ5^RMfR zS5_?%a?mf9EVbh%9?1(|eZNt%hD|BbT1oYVZp3rDyjU|6iGFxYo_K(Ks%F5NXc4@kx*J2mx zbT8K4HZ+}X@f$QOdChMA@(a$K6HBv1MsU=A`*1MF={KIE#j{6}KX8kPiuLO?Ir=^H z7Z~o{zbk#l#3Nk-qM@~4tqtS&8YRDP`1&}rw`|#xo#NvnHxtv>P~=KZ#gf;O7^M;+ z3-Nzv4dh4+&HwH9{wy{^Xt=r`uiRgF- z78NpdBI-joDv5xu3oM(ih`9$jew&Ui_ho-8Q(&b%^gI9)cYoonAqI&3g_!qd>1cFq z#1j!AY3W*=CNF;_zj}EQV2=5I0I+gCdrP1gVQ9)p+&=&?{h|VX%lkp~Zz&h7T?Hey ztx_6MvZDSDhqsdR?p6C#)7hKcR2M+5)_i}O zLZOK12yxTnB55NQ$niEiux|4sehWC?RpFIs$o*~lLD5k^UkF40zSSFG_m*o{^*1Vf6`lQx`p+FOQG_$miG3K>Z4|G2M4kko)t4&laCkA0>aVJ6P0c$?myU{!gaZ7_46+IdOjxO>p)g z4f^>Jf(Fs`Og+7g=86v69Pwzaf^(exRwdR)-f6tGIlwS{D~y3fXgCS6Cq)Y~nF!%H zmarz@#Yy%O{^m>4HW73E8LG7kEgRA>{C)QKU~0;;v|geIlxokXFT_&%t(EQPKA4Xk z)ZzE-LTXT9DX^aYe9!$GRiS@ZB-A}|o9&-pPQ7Kw<|!o^|FlUv2e8)FFi!e#&ZVG2 z4RI%NCuTP8aR->RlPZA$>6C0l!{Y-XRzunPW#Ky@>))VBVG}E?%QSC7U{RIZgFtkDsD04tRNo6P1sZwXBe4nC$8cU?o~#%F)mAky9@kw_x1^nI4} zkO6r?j$O~E)R`F@tv6@5WB|IX8VCbB=V}2^W87_Y+NEw)1=a4dsT##i;dU7*PWi8h zqTh9`RMQ!+krIm)Gz?q#5foD}f5jJoB%AQ=h7o~6<#4uTf6^woq|q-@dRaoN(s5V@ zjOwkg5Q!k`Ji92gu_uOtF;yFsl+ zuP6lAe|8Ja@mZP3@*{$!O|489&WUebMy&T2n|bsrvnNzVQ2MM;@$u)isEfmggl+8Q zbVRC{6ZZUz3}#M9A&%6SCQlp$l=|lGF6zPL%jS0cZ-C3W6Gn2Mws_3MsQOI+OyFP| zP(?ZRKhu97h(w~$+imO?OWVLMg;(^wa}rIQ0kZ>0#ic#T;&3qUV&n`O4MzCJS6%QG zc?vR)?bcqy=?{+f6=5b8Ki+;G1gGp$?N(KiM9gGB3b?*BI#`LI)X4&TPuX1j-o3## z5p+ETqhDlPe5P=`9zolnCuk-^dQwCQ7Qn-e*;{`Bq6@q;4{{fk<3Z|8-P+o^N&+No zuY|TVN(SVD@HZsuIGq2CA`W2kfDONmnw9!Z^O$z923HGUh3Z`5M{d?%q~*w*Wv8Rl zwS%1fmTgp)YI3{`$9pwg__Td}eIe;WeKH*#U2}NEa^-?g5eD>QK14|5UV{cVM&PTq z=aPTDhV=|Wc3fYDwQ!uKdzEXW7zC@~uZ=#vg_AlD(c|o3prd>B+oStVdzC{-r<9q{ z)i^Jqa)A#}JU`u`&i-#txyt_|mwV~fx3nO{C>oZWt(lS!oE!lGfwytsW2g!6@hRRi zDApx5AoR-ZdbD{omHs9aSG3VzyBO3R%Xoj7lj?k!le*fk%CnFer#ZFs&taVt-B)2Y z-X<0sheCkvQ`Iz#_6zqP*jBldsZ z7Af{`Qfrp#|77Xk>OQbL&c|jMWB>mhe0UP0+vL53`%+|r5xjBZ#xK&`+??ROdpZsd z4(}rP#m_GYer=eZngaN^@Nn+a3{x}I4eRWBIDBQe`LACW zyng+9I*G7h>&xA&<2!;uoB@tu(fWV7C;yEbwIlR@leHCi4@=Ric$>5XA;!3YRgb{BsT#-M!( z%)WkgR5|EKn0w&@C_hTzd@nlJbi>zIx@~4>7D=;&3O-qrJb|}Tb+*F%tuZ&iMDD9x zfAh*Y&z^pM{)vpZFUmX(Wt!|g+mmEbVjSDMF#0fQ!%6Wgc*QVqpvh zN9-2gz74OCv~X{Ns&)OGKF5Ey$WwAKg=WkS*xOmyAh>K2T}I2YV&mfUz|`78BOTSt zZozW4@h;u))iK43V84H>>!P^%eT$a@ z=ES|nYvS|U0_vT6hN-@Dm$I_5901lSH5;$9j%nQMNt1aA@Ex(2zb(0ZXJU2$ZCB|* z(mc%O9m0Y9MojhT5x}?X@{5elE zU=q#T+Ae_2!~s3`#jMu5ng)QxdN5s1%weDv28M3IW&+E0VCZFY44@Q`xTHL_O-(<8 zv26g>{uI9Ly*ci);-SqvUteXq~r8 zsz_k>ZRg-O^~(-9DcM}o-c{|g+)?m8bVS5_X&Pq2uK*4mEwf#g6*aHJH8u+9WLMpl zE&)UFi-S2)1l4~Gm58y`alkg=YrG0T&+I0kuR~O0LGOXoVs6IR9gNe6rj{&KSHKBS zS-MIto}7U-l0{Q0*;i#)8E3Ar9rjunvsHc}^o`^674N zhKf1OIe6D|YLJ+xqSh>jp^R09E^|yMAHT}S*J4(Iwh4bUi^jy9^6saNdGw8w)}Yr~ zz-Gm*t*!L4j~_pl0<05thg?D)wNDdX-S&P!jAaF&M<~sAXCa4-vySr8xwE&s)+e<+ z6E|)RscBYuiu2T1y{4(;NJm$3{;|>n-PP5aoyCIiabl`0{J!NkIxfIce-d*_bQ~!z z0yt^`V6K0bS2>-ln#|VI05b{ZcI2c57=zt7>U`Hs%f5*Vwxn9y63{S@lYuDf_Qh2A za)0aFbJVnh-S!k7_&$I&DlD6VUiDV;-xqQ~S+$+=c@J9i3^}kpef{1BVF%!Dd24<0 zM1D0eBfTT;M(wq3Fd3A(LbL#leCQdjd?~NRDy4r@fMJQ6m^U~LHJEIF^G;dlm$H!d z-NTai_No&R3>TYNtP)MP+!hkgx~yR-r(Yn^dkq`*7zF?Q4H6&|o@C&t9U=3(ux}G8 z9HuSgn|%7~uR$1MT|5<^Z;VmNBP(m$IjMg6>L*&if3G<(dH4(9bZ$|5G~xla^m&Wv zKvRG0DM)P7*<&CWeM>86Wlk1%@h0GESkc7Z6zKv$B{KVy@f@vOc16JNQGybsRfq6U(F6FFGxYSsYE;`Vhy-ui+ws&zyCxTp}yG z==_NX%OQ;G{k%|7qaK|1UzGNZxB$#GkOmp}hV{FRE`H5_{7-r7E9&lM5$p4Cb(()+ z-+q>QQjI`p;fU_@WC+at@e%d(_zErSwg>!+)i1zw1ow8^njGc$=t$Uv>f}6(WcuRHM=LZSu`O7e+vtE0Fg$K?rzyVjG&DaG_$IdAUft60SreNZx~&MNam+*ppY2_yoI(+UK3zO&J1Age z2D;ar8@-e7*+)vB0p5m#?2}1OSV>}7|2z~Ql)}S;2xCx-GW-?}SdM>Jo%V>}b^x?B zf6Lm#zfe$JIj@26JjFnL7bB8#zE*X)FPLi2O{@=QbwynmI=KQC{buO*ZPz zo@A^B7)V3lth&F8Y%zax%iy>QG>+PKFq-@xRZ))*rEKDzO1%0iD{p}lHZjg2!r!6h zaEcfvtU}g%W7M8qdQUeU%5;MBvDI5vxLNIJfN&rnZi4#Wn#JZj&UybtrsVVN|3Qmx zwBvoK`TPsN6DvFSwzRid8RO5Oz*!}9bP1~7@vZcCxXEP^>8OA31#h=;zxO^1&s=x- z$X}eHF~1Z>bstY(7sWcs3yI#gNJ9LA&IIwZKNRzuR2aQ^v^Ls>eTOlv{DobHH1t|% zgm-EG`Po?oxug@3g@r;GTvdc)M`P;otIU5(rJg=BJ1FxHcc!^U&XG*C3J|XyjjQBf zjkLOD+(wO+We0!RIKij(LX&(>D}5Uus0$R<)9YFOtN2&Q>Il~I1bd=PmA`_C*-&kW zT@n5Z*TSfC?t9zvW--(+j}|8Js2~8x0#v@XMm*6RJMUD_`fl>YPNk4Zm3q@)-TT?J=qk zBgS32!>4}(l86`Oyq(rZ4q>>$CCa0|fsAPqxrfK#rq9Yn(seN%&ynA~QfQCY2+h40 zN0j;?UJ{#hhpijfeqTMLJ;#1bug*^!Ie8LEYZVSFKj*e^7tO|UDvK}v)Ym)fUyx<`yaL`ap<}rl zDl6-N+Lxt>+Rnb*4M&aN&8+tmd#pWPGyH!L5yo0{AN6f{yw+=fn^XWcRG5iX*9G8Z z&xbpTp#KJhxEi1C=Y6Zt0}}-a%R@R^hqb)`5MKaoJ*|2nJNe;G0LVIgSs0Zb1vPQ( z{b&Dz>T6B^t9wDQeVpXKy$fo%H2?_cZVL|9!J(|h{MKKvfBpbg;s7dYm`Qx>S5SXa zmBh*^BFHu-uKct(s5ZBj+tVq)P~2=$cLu6uO%^{{6AIMoDuA8V=CNzNr6FV)Wpwtd zL5cZ3tdQ?%SEBIV91eNp9(p-aw0J^WVYVH21kI8^^RcNCY+Dgo=rAK{;46$Q{0-k<6L#Z$9(0LwbEM7i(e0zXI~B2op+5rQl=`1_yMcas-E%>2JH1AGh8`K;A|~c$HWH zm<5xl(w8c0#w^D9WvU!HdN=7}{^R}iDYJ9n{U#oS!hv*Z^tp_nxYgQL#6oRkkS?=jjm(h+>~m_P1IrQpD@i< zdRCdBFA~_=AF-#bzrT0e{GYy*XnnM87n`k(%}oJ;4zL31HT_!Y9C8@|2^-sg_{1MK z>s;5T+QRo_M^A0ql}}v^IvHA39;0<~IGkx;4xNxh+du zDnBed+WK|$!2ZkKe|oM*_dPLxGH-ESZ#bQ@v;+m=R$3VJ(BIKA;u9`TPVJj>7@Zs6 zFKhI2`AR;H(MidF+u4C45+*H1Vt!*9U4^t`Rk?jzy*^x$^2}}Q#v>tI`9*`#Xr<6mnS^mEO4SaUM2t2-!Jf(Mta`(ei^lvVpT1T95COUXeL4&HsLX_CyH(jTdUVtM_W|R;lAS0-%_c9hh0_hj zetTHF#&7PNJbBW2bs129X4=Pj{7VT@^$ja-Ch{#RhB*7?U0`XA0rpIT8s5EnP>p&u zko{w)54k@bdsDPw>#H-MJM^w^>?7JuB~G#}jiCCjd#JuaPl9RU2JEY=&-a`z(f)Q} z*o8jo8j8~~SV&ej*|UX_v*$yP^mw^WJ3iadglR^7u0d}&X139Px1rDrV2KW49A6-Z z#r8F(Do(z9W%$aFH~zn-Fa0_++;4cS0?QZ)jpp7D2y8a$8X8`*WJLI#oXpIsG>F=l z+vFo@NKTs3CyJWYS|$GB&k)ty?=RkI=1QXacZv!N_n6&0^I~#dK}6_y&C1@g$af}Y z3<58zqJ9mhJP+`H7Mex7%DpEaZa)BdI9LNYhpAk6FBC036RkKVS=tJ=kubBgUz@@A z6_hj>7w8uaG>0&Hjk&d7fR8nVFNW}xvtCck{Qzdon@z&U{4!;!LpnRlwJT#M7}YsU z!J@tx{jE9^tEO0f&;ZVLf6PcS_v_%lC^-FfVs`vTg~v31Iq%KS(v_s)*NE#U1+Q`* z!kynSDRBiONYgxUP>b2eiJ5@mRtYn)(xP6;{Et)9R(xgPxGD#f!t;Z@6{Hu9f+06E zih7a@XYFAKvdz=W;m5-m!WaaPS_S@KFGeb|NF4g+CSM!=`W7;4AxehXvd6(15af@} zgY)N8Cw_>3>pct5w?kGSGT5Ld$!~~$r)E~JEW@4m_t@G)b=bL|QLO7Jl*BZ%!oGvS z?LT%7<4ds?HpxDI=>uV-=!bVo&JYhmnQ9*^@(2#g!Qx+O@Y{5-uKjLduC)o&+Mlq3 za5VYF)UST$bWSQ8#e1fP%UZxIU-UOeXqUG8 zN10f6v;9W5KHOX$r-G?4GlBf){;agCFzkZF^k9#8P~8_KOX^qU8D_WepNuRo`>m0u zHz0X}4bD`1VZZLH)o2JS?X(VaOw?hK`>eRfDBJjc|K%PF%%FvL^MeRaT4}H2hefVo zjyx}aF3omhydkf=6CB|3)gr8`yK8;yzGGHLoY?UdIopKwhM1IA`d0ccN}2y0}%;YC!VVgLGjw7j*uIFXv-dokdo>-j>A0V4ZPEy>@BF;)mmYT zhA~@vVYleU8@s=nUXR~A$~eF#Y&?^#y@*3)aN1fvNRu^ZLyIW7$u1Z97z5lC%ptB` zi2o$+Vs68k%+WD7R4I_~9!6|LBE_K%clj@ZZp+cniC^9{d@k7xFq##0GQ;G5|2(9B zS5Kh8n=ExF40)082^B1!z87)|Q)S-NfNp4GYUe@LHI6M4+RUtu96Dq_hA{-)Dm;4{ z+cN+DUau?T9$wih*`-nft^W-;HH&jZOdh;joajGI&szIv*_u6$(qLv7F!#~k^kalw zDYs@~?)-3p!FHnnr$(u$Qvmh)88yCtFYkt`Xn~D(cc6Ga&W@jXIyW}gz|O5y*X`M) z+RWEQ9hUXNpd&?mv8g@#Zds}|Slc$nfJ}bZo~;C?C7Wr#U|eJ9^!sS!-khB)*zK2Q zBw7h}C{GL6aX|H9b|7E@cw@K9i=~Nrf`%Jd!ucxdB*4etjG0DF?E8jrUusl;AZ)&5 zm(+Y0HGJVHesM~!DB--tcDA~bCF+$IciDy|fMlqn_Gt+c!~L(0937jV1MJa-N4IeZ z6Rqxzr^{gs^m4W!jZZHOW9U>hB?+xvz+cRouFaoJKOl%jpPz&KkS6AI2B?QNJ1APu7#^`Wi%P#o}K^4$)VyB9etE%`1% z_ZZcs;uB#903xYU{z4I3yAl4U{8&2}PFifdt$ueD&s0+PM=h}b99F%5hb
MkBsLo_!s5?1B5A1`-6F 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 str: + if r["M"] == r["K"] == r["N"]: + return f"M=K=N={r['M']}" + return f"M={r['M']}\nK={r['K']}\nN={r['N']}" + + +def _draw_native_bar_chart(slide, *, plot_x, plot_y, plot_w, plot_h, + shape_labels, flagged, tile_counts, + series, colors_map, display_map, + wall_clocks=None, + y_label="ns", + legend_x, legend_w, + foot_note=None, + threshold_line=None, + flagged_bar_color=None, + flagged_series_only=None): + """Render a grouped bar chart natively in PPTX. Linear Y scale. + + series: dict[str -> list[float]] — series_name → value per shape. + threshold_line: if set, draws a dashed horizontal reference line at this y-value. + flagged_bar_color: if set, overrides colors_map[sname] for flagged shapes. + flagged_series_only: if set, the flag override applies only to this series. + """ + n_shapes = len(shape_labels) + if n_shapes == 0: + return + series_names = list(series.keys()) + n_series = len(series_names) + + # Y-axis range: linear, top = max value * 1.10 (include wall-clock). + all_vals = [v for vals in series.values() for v in vals if v > 0] + if wall_clocks: + all_vals.extend([w for w in wall_clocks if w > 0]) + if threshold_line is not None: + all_vals.append(threshold_line) + y_max = max(all_vals) * 1.10 if all_vals else 1.0 + + def y_of(v): + v = max(v, 0.0) + return plot_y + plot_h * (1 - v / y_max) + + # Plot box background + _rect_band(slide, plot_x, plot_y, plot_w, plot_h, + RGBColor(0xFF, 0xFF, 0xFF), RGBColor(0xCB, 0xD5, 0xE1)) + + # Y-axis ticks (6 levels) + for i in range(6): + v = y_max * i / 5 + y = y_of(v) + # gridline + s = slide.shapes.add_connector(1, Inches(plot_x), Inches(y), + Inches(plot_x + plot_w), Inches(y)) + s.line.color.rgb = RGBColor(0xE2, 0xE8, 0xF0) + s.line.width = Pt(0.5) + # label + _textbox(slide, plot_x - 0.85, y - 0.12, 0.75, 0.25, + f"{v:>8.0f}", size=9, color=COL_MUTED, align=PP_ALIGN.RIGHT) + + # Y-axis title + _textbox(slide, plot_x - 0.85, plot_y + plot_h / 2 - 0.15, 0.75, 0.3, + y_label, size=10, color=COL_TEXT_DARK) + + # Threshold reference line (dashed) + if threshold_line is not None: + ty = y_of(threshold_line) + line = slide.shapes.add_connector( + 1, Inches(plot_x), Inches(ty), + Inches(plot_x + plot_w), Inches(ty), + ) + line.line.color.rgb = COL_TEXT_DARK + line.line.width = Pt(1.5) + from pptx.oxml.ns import qn + from lxml import etree + ln = line.line._get_or_add_ln() + pr = ln.find(qn("a:prstDash")) + if pr is None: + pr = etree.SubElement(ln, qn("a:prstDash")) + pr.set("val", "dash") + _textbox(slide, plot_x + plot_w - 0.7, ty - 0.30, 0.7, 0.25, + f"{threshold_line:.0f}% peak", + size=9, bold=True, color=COL_TEXT_DARK, align=PP_ALIGN.RIGHT) + + # Geometry per shape group + group_w = plot_w / (n_shapes * 1.4) + bar_w = group_w / max(n_series, 1) + gap = (plot_w - n_shapes * group_w) / (n_shapes + 1) + + y_base = plot_y + plot_h + for i in range(n_shapes): + x_group = plot_x + gap + i * (group_w + gap) + cx = x_group + group_w / 2 + + for j, sname in enumerate(series_names): + v = series[sname][i] + if v <= 0: + continue + bx = x_group + j * bar_w + y_top = y_of(v) + s = slide.shapes.add_shape( + MSO_SHAPE.RECTANGLE, + Inches(bx), Inches(y_top), + Inches(bar_w * 0.85), Inches(y_base - y_top), + ) + s.fill.solid() + apply_flag = (flagged_bar_color is not None and flagged[i] + and (flagged_series_only is None + or sname == flagged_series_only)) + fill_color = flagged_bar_color if apply_flag else colors_map[sname] + s.fill.fore_color.rgb = fill_color + s.line.color.rgb = COL_TEXT_DARK + s.line.width = Pt(0.4) + + # Wall-clock dot + if wall_clocks and wall_clocks[i] > 0: + wy = y_of(wall_clocks[i]) + r = 0.05 + d = slide.shapes.add_shape( + MSO_SHAPE.OVAL, + Inches(cx - r), Inches(wy - r), + Inches(r * 2), Inches(r * 2), + ) + d.fill.solid() + d.fill.fore_color.rgb = COL_TEXT_DARK + d.line.color.rgb = COL_TEXT_DARK + + # Shape label below the group + lab_color = COL_RED if flagged[i] else COL_TEXT_DARK + _textbox(slide, x_group, y_base + 0.05, group_w, 0.7, + shape_labels[i], size=9, bold=flagged[i], color=lab_color) + if tile_counts: + _textbox(slide, x_group, y_base + 0.65, group_w, 0.3, + f"{tile_counts[i]} tiles", + size=8, color=COL_MUTED) + if flagged[i]: + _textbox(slide, x_group, y_base + 0.92, group_w, 0.3, + "↑ under-tile", + size=8, bold=True, color=COL_RED) + + # Legend on the right + _textbox(slide, legend_x, plot_y, legend_w, 0.3, + "Stages (per bar):" if "DMA_READ" in series_names + else "Variants (per bar):", + size=11, bold=True, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + ly = plot_y + 0.4 + for sname in series_names: + # color swatch + sw = slide.shapes.add_shape( + MSO_SHAPE.RECTANGLE, + Inches(legend_x), Inches(ly), Inches(0.2), Inches(0.2), + ) + sw.fill.solid() + sw.fill.fore_color.rgb = colors_map[sname] + sw.line.color.rgb = COL_TEXT_DARK + sw.line.width = Pt(0.5) + _textbox(slide, legend_x + 0.28, ly - 0.05, legend_w - 0.3, 0.3, + display_map.get(sname, sname), + size=10, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + ly += 0.28 + + if wall_clocks: + ly += 0.08 + d = slide.shapes.add_shape( + MSO_SHAPE.OVAL, + Inches(legend_x + 0.05), Inches(ly + 0.04), + Inches(0.12), Inches(0.12), + ) + d.fill.solid() + d.fill.fore_color.rgb = COL_TEXT_DARK + d.line.color.rgb = COL_TEXT_DARK + _textbox(slide, legend_x + 0.28, ly - 0.05, legend_w - 0.3, 0.3, + "kernel wall-clock", + size=10, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + + # Extra legend entry for flagged (under-tile) bars + if flagged_bar_color is not None and any(flagged): + ly += 0.30 + sw = slide.shapes.add_shape( + MSO_SHAPE.RECTANGLE, + Inches(legend_x), Inches(ly), Inches(0.2), Inches(0.2), + ) + sw.fill.solid() + sw.fill.fore_color.rgb = flagged_bar_color + sw.line.color.rgb = COL_TEXT_DARK + sw.line.width = Pt(0.5) + flagged_label_target = flagged_series_only or ( + list(display_map.keys())[0] if display_map else "value" + ) + flagged_label = ( + display_map.get(flagged_label_target, flagged_label_target) + + " (under-tile)" + ) + _textbox(slide, legend_x + 0.28, ly - 0.05, legend_w - 0.3, 0.3, + flagged_label, + size=10, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + + if foot_note: + _textbox(slide, plot_x, y_base + 1.3, plot_w, 0.4, + foot_note, size=10, color=COL_MUTED, align=PP_ALIGN.LEFT) + + +EXCLUDED_SHAPES = {(512, 512, 512)} + + +def _load_sweep_data() -> dict: + if not GEMM_SWEEP_JSON.exists(): + return {"rows": []} + data = json.loads(GEMM_SWEEP_JSON.read_text()) + data["rows"] = [ + r for r in data.get("rows", []) + if (r["M"], r["K"], r["N"]) not in EXCLUDED_SHAPES + ] + return data + + +def _render_stage_breakdown(slide, variant: str, *, per_tile: bool = False): + """Stage breakdown for one variant. Linear Y. If per_tile, divide by tile count. + + Uses wall_ns (interval-union of records on each engine) — the honest + engine-active time. Avoids the double-counting that occupancy_ns has + when multiple ops overlap on a contended resource (HBM_CTRL queue). + """ + data = _load_sweep_data() + rows = [r for r in data["rows"] if r.get("variant") == variant] + if not rows: + _textbox(slide, 0.4, 3.0, 12.6, 1.0, + f"No sweep data found for variant '{variant}'. " + f"Run scripts/gemm_sweep.py first.", + size=14, color=COL_RED, align=PP_ALIGN.LEFT) + return + tile = data["tile_sizes"] + subtitle_unit = "Per-tile" if per_tile else "Per-stage" + _textbox(slide, 0.4, 1.0, 12.6, 0.45, + f"Variant: {variant} | {subtitle_unit} engine wall-clock " + f"(linear) — DMA in / Fetch / GEMM / DMA out per shape. " + f"Tile size {tile['M']}×{tile['K']}×{tile['N']}.", + size=12, color=COL_MUTED, align=PP_ALIGN.LEFT) + + shape_labels = [_shape_label(r) for r in rows] + flagged = [_under_tile(r["M"], r["K"], r["N"], + tile["M"], tile["K"], tile["N"]) for r in rows] + tile_counts = [r["tile_count_expected"] for r in rows] + + def _val(r, s): + v = r.get("stages", {}).get(s, {}).get("wall_ns", 0.0) + if per_tile: + tc = r.get("tile_count_expected", 0) or 1 + return v / tc + return v + + series = {s: [_val(r, s) for r in rows] for s in STAGE_KEYS} + foot_note = ( + "Bars = engine wall-clock ÷ tile count (amortized per-tile cost). " + "Falls with tile count as the pipeline fills." + if per_tile else + "Bars = engine wall-clock interval (max t_end − min t_start, " + "merged overlaps). Strips queue-wait double-counting." + ) + _draw_native_bar_chart( + slide, + plot_x=1.0, plot_y=1.65, plot_w=10.0, plot_h=4.45, + shape_labels=shape_labels, flagged=flagged, + tile_counts=tile_counts, + series=series, colors_map=STAGE_COLORS_PPTX, + display_map=STAGE_DISPLAY, + wall_clocks=None, + y_label="ns/tile" if per_tile else "ns", + legend_x=11.4, legend_w=1.85, + foot_note=foot_note, + ) + + +def _render_stage_breakdown_ref_ref(slide): + _render_stage_breakdown(slide, "ref_ref") + + +def _render_stage_breakdown_load_ref(slide): + _render_stage_breakdown(slide, "load_ref") + + +def _render_stage_breakdown_load_load(slide): + _render_stage_breakdown(slide, "load_load") + + +def _render_variant_comparison(slide): + """Wall-clock per shape per variant (3 bars per shape).""" + data = _load_sweep_data() + rows = data["rows"] + if not rows: + _textbox(slide, 0.4, 3.0, 12.6, 1.0, + "No sweep data. Run scripts/gemm_sweep.py first.", + size=14, color=COL_RED, align=PP_ALIGN.LEFT) + return + tile = data["tile_sizes"] + variants = data.get("variants", ["ref_ref", "load_ref", "load_load"]) + + # Group by shape (preserve first-seen order). + by_shape: dict = {} + for r in rows: + key = (r["M"], r["K"], r["N"]) + by_shape.setdefault(key, {})[r["variant"]] = r + shapes = list(by_shape.keys()) + + sample = next(iter(by_shape.values()))[next(iter(by_shape[shapes[0]]))] + sample_label = _shape_label(sample) + _ = sample_label # silence unused warning + + shape_labels = [_shape_label(by_shape[k][next(iter(by_shape[k]))]) + for k in shapes] + flagged = [_under_tile(k[0], k[1], k[2], tile["M"], tile["K"], tile["N"]) + for k in shapes] + tile_counts = [by_shape[k][next(iter(by_shape[k]))]["tile_count_expected"] + for k in shapes] + series = { + v: [(by_shape[k].get(v) or {}).get("pe_window_ns", 0.0) for k in shapes] + for v in variants + } + display_map = {v: v for v in variants} + + _textbox(slide, 0.4, 1.0, 12.6, 0.4, + "Kernel wall-clock per variant per shape (linear). " + "ref_ref baseline, load_ref pins A, load_load pins both A and B.", + size=12, color=COL_MUTED, align=PP_ALIGN.LEFT) + + _draw_native_bar_chart( + slide, + plot_x=1.0, plot_y=1.6, plot_w=10.0, plot_h=4.5, + shape_labels=shape_labels, flagged=flagged, + tile_counts=tile_counts, + series=series, colors_map=VARIANT_COLORS_PPTX, + display_map=display_map, + wall_clocks=None, + y_label="wall ns", + legend_x=11.4, legend_w=1.85, + foot_note=("After Phase 2 fix (gated STORE/DMA_WRITE + pinned operand " + "skip): load_ref / load_load are faster than ref_ref."), + ) + + +def _render_hbm_topology(slide): + """Show cube-shared HBM_CTRL path: PE → router → HBM_CTRL → HBM.""" + _textbox(slide, 0.4, 1.0, 12.6, 0.55, + "DMA reads cross the cube fabric — HBM_CTRL is one per cube " + "(NOT per PE). All 8 PEs serialize at the controller's single " + "channel resource. Even one active PE pays the round-trip on " + "every K-tile miss.", + size=13, color=COL_MUTED, align=PP_ALIGN.LEFT) + + # Cube outline (encloses 8 PEs + their TCMs + the router mesh) + cube_x, cube_y, cube_w, cube_h = 0.4, 1.75, 6.4, 4.45 + s = slide.shapes.add_shape( + MSO_SHAPE.RECTANGLE, + Inches(cube_x), Inches(cube_y), Inches(cube_w), Inches(cube_h), + ) + s.fill.background() + s.line.color.rgb = COL_MUTED + s.line.width = Pt(1.5) + _textbox(slide, cube_x + 0.1, cube_y + 0.04, 2.5, 0.3, + "CUBE (8 PEs share HBM)", size=11, bold=True, color=COL_MUTED, + align=PP_ALIGN.LEFT) + + # 8 PEs in a 4-cols × 2-rows grid, each with TCM beneath + pe_w = 1.05 + pe_h = 0.62 + tcm_h = 0.42 + col_gap = 0.18 + row_gap = 0.30 + grid_x0 = cube_x + 0.25 + grid_y0 = cube_y + 0.50 + row_h = pe_h + tcm_h + row_gap + pe_right_y = [] # y-center of each PE for the link arrows + for i in range(8): + row = i // 4 + col = i % 4 + px = grid_x0 + col * (pe_w + col_gap) + py = grid_y0 + row * row_h + _rrect(slide, px, py, pe_w, pe_h, + RGBColor(0xFE, 0xF3, 0xC7), COL_REG_BORDER, + f"PE{i}", size=11, bold=True, color=COL_TEXT_DARK) + _rrect(slide, px, py + pe_h + 0.05, pe_w, tcm_h, + COL_TCM_BG, COL_TCM_BORDER, + "TCM (local)\n512 GB/s", + size=8, color=COL_TCM_BORDER) + if col == 3: + pe_right_y.append((px + pe_w, py + pe_h / 2)) + + # Router mesh strip on the right edge of the cube + router_x = cube_x + cube_w - 0.85 + router_y = cube_y + 0.50 + router_w = 0.65 + router_h = cube_h - 0.65 + _rrect(slide, router_x, router_y, router_w, router_h, + RGBColor(0xDB, 0xEA, 0xFE), COL_DMA, + "ROUTER\nMESH\n\n256 GB/s\nper link", + size=10, bold=True, color=COL_DMA) + + # Arrows from each row's last PE → router strip + for (rx, ry) in pe_right_y: + _arrow(slide, rx + 0.02, ry, router_x, ry, + color=COL_DMA, width_pt=1.4) + + # HBM_CTRL just outside the cube on the right + ctrl_x = cube_x + cube_w + 0.45 + ctrl_w = 1.85 + ctrl_h = 1.55 + ctrl_y = cube_y + cube_h / 2 - ctrl_h / 2 + _rrect(slide, ctrl_x, ctrl_y, ctrl_w, ctrl_h, + RGBColor(0xFE, 0xE2, 0xE2), COL_RED, + "HBM_CTRL\n(1 per cube)\n\nread channel\ncap = 1\n", + size=11, bold=True, color=COL_RED) + + # Bottleneck label + _textbox(slide, ctrl_x - 0.1, ctrl_y + ctrl_h + 0.05, ctrl_w + 0.2, 0.35, + "BOTTLENECK", size=12, bold=True, color=COL_RED, + align=PP_ALIGN.CENTER) + + # Router strip → HBM_CTRL arrow + link_y = cube_y + cube_h / 2 + _arrow(slide, router_x + router_w, link_y, + ctrl_x, link_y, color=COL_DMA, width_pt=3.0) + _textbox(slide, router_x + router_w + 0.02, + link_y - 0.36, ctrl_x - (router_x + router_w) - 0.05, 0.3, + "256 GB/s", size=10, bold=True, color=COL_DMA, + align=PP_ALIGN.CENTER) + + # HBM banks on the far right + hbm_x = ctrl_x + ctrl_w + 0.45 + hbm_w = 1.85 + hbm_h = ctrl_h + 0.35 + hbm_y = ctrl_y - 0.175 + _rrect(slide, hbm_x, hbm_y, hbm_w, hbm_h, + COL_HBM_BG, COL_HBM_BORDER, + "HBM BANKS\n(per-cube)\n\n256 GB/s\naggregated", + size=11, bold=True, color=COL_HBM_BORDER) + _arrow(slide, ctrl_x + ctrl_w, link_y, + hbm_x, link_y, color=COL_DMA, width_pt=3.0) + + # Side-by-side key takeaways at the bottom + _textbox(slide, 0.4, 6.40, 6.3, 0.55, + "TCM is per-PE local → fetch/store don't contend.\n" + "HBM_CTRL is cube-shared → every DMA serializes on cap=1 channel.", + size=11, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + _textbox(slide, 6.9, 6.40, 6.2, 0.55, + "Per-op DMA cost grows with #in-flight ops even on 1 PE.\n" + "load_ref/load_load pin operands → 1 HBM trip instead of per K-tile.", + size=11, color=COL_RED, align=PP_ALIGN.LEFT) + + +def _render_per_op_dma(slide): + """Per-op DMA_READ cost = wall_ns / record_count. + + wall_ns is interval-union of all DMA_READ records ≈ (max t_end - min t_start) + when ops overlap. Dividing by count gives the amortized per-op cost in the + DMA window — converges to the bandwidth-bound floor. + + load_load is excluded — its eager up-front DMAs sit outside the composite + plan so their stage_type isn't DMA_READ and they don't appear here. + """ + data = _load_sweep_data() + rows = data["rows"] + if not rows: + _textbox(slide, 0.4, 3.0, 12.6, 1.0, + "No sweep data. Run scripts/gemm_sweep.py first.", + size=14, color=COL_RED, align=PP_ALIGN.LEFT) + return + tile = data["tile_sizes"] + variants = ["ref_ref", "load_ref"] + + by_shape: dict = {} + for r in rows: + key = (r["M"], r["K"], r["N"]) + by_shape.setdefault(key, {})[r["variant"]] = r + shapes = list(by_shape.keys()) + + shape_labels = [_shape_label(by_shape[k][next(iter(by_shape[k]))]) + for k in shapes] + flagged = [_under_tile(k[0], k[1], k[2], tile["M"], tile["K"], tile["N"]) + for k in shapes] + tile_counts = [by_shape[k][next(iter(by_shape[k]))]["tile_count_expected"] + for k in shapes] + + def _ns_per_op(r): + s = r.get("stages", {}).get("DMA_READ", {}) + cnt = s.get("record_count", 0) + wall = s.get("wall_ns", 0.0) + return (wall / cnt) if cnt else 0.0 + + series = { + v: [_ns_per_op(by_shape[k].get(v) or {"stages": {}}) for k in shapes] + for v in variants + } + display_map = {v: v for v in variants} + + _textbox(slide, 0.4, 1.0, 12.6, 0.55, + "Amortized per-op cost = (DMA window wall-clock) ÷ (#DMA ops). " + "Strips out queue-wait double-counting: when N ops overlap, the " + "window is N·drain_ns, so the average per op = drain_ns ≈ 16 ns " + "(bandwidth-bound floor at 4 KB ÷ 256 GB/s).", + size=12, color=COL_MUTED, align=PP_ALIGN.LEFT) + + _draw_native_bar_chart( + slide, + plot_x=1.0, plot_y=1.7, plot_w=10.0, plot_h=4.4, + shape_labels=shape_labels, flagged=flagged, + tile_counts=tile_counts, + series=series, colors_map=VARIANT_COLORS_PPTX, + display_map=display_map, + wall_clocks=None, + y_label="ns / op", + legend_x=11.4, legend_w=1.85, + foot_note=("Flat ~16-20 ns across shapes confirms the per-op " + "transfer is constant — what looked like growing per-op " + "cost on slide before was queue wait being absorbed."), + ) + + +def _render_mac_utilization(slide): + """GEMM util (shape fill) AND Useful pipeline eff (computed from formula). + + Useful eff = pipe_eff × GEMM_util, where + pipe_eff = (N_tiles × T_stage) / (head + N_tiles × T_stage + inter DMA_W) + """ + data = _load_sweep_data() + rows = data["rows"] + if not rows: + _textbox(slide, 0.4, 3.0, 12.6, 1.0, + "No sweep data. Run scripts/gemm_sweep.py first.", + size=14, color=COL_RED, align=PP_ALIGN.LEFT) + return + tile = data["tile_sizes"] + TILE_M, TILE_K, TILE_N = tile["M"], tile["K"], tile["N"] + tile_flops = 2 * TILE_M * TILE_K * TILE_N + + HBM_GBS = 256.0 + bpe = 2 + T_STAGE = 16.0 + D_STAGES = 3 + head_ns = (D_STAGES - 1) * T_STAGE + dma_w_per_pair_ns = (TILE_M * TILE_N * bpe) / HBM_GBS + + by_shape: dict = {} + for r in rows: + if r["variant"] != "load_ref": + continue + by_shape[(r["M"], r["K"], r["N"])] = r + shapes = list(by_shape.keys()) + + shape_labels = [_shape_label(by_shape[k]) for k in shapes] + flagged = [_under_tile(k[0], k[1], k[2], TILE_M, TILE_K, TILE_N) + for k in shapes] + tile_counts = [by_shape[k]["tile_count_expected"] for k in shapes] + + gemm_util = [] + useful_eff = [] + for k in shapes: + r = by_shape[k] + M, K, N = r["M"], r["K"], r["N"] + useful = 2 * M * K * N + tiles = r["tile_count_expected"] + gu = useful / (tile_flops * tiles) * 100 + gemm_util.append(gu) + + m_tiles = (M + TILE_M - 1) // TILE_M + n_tiles = (N + TILE_N - 1) // TILE_N + n_mn = m_tiles * n_tiles + gemm_total = tiles * T_STAGE + inter_dma_w = max(0, n_mn - 1) * dma_w_per_pair_ns + wall = head_ns + gemm_total + inter_dma_w + ueff = (gemm_total * (gu / 100.0) / wall) * 100 if wall > 0 else 0.0 + useful_eff.append(ueff) + + series = { + "GEMM util": gemm_util, + "Useful eff": useful_eff, + } + colors_map = { + "GEMM util": COL_FS, # emerald + "Useful eff": RGBColor(0xF5, 0x9E, 0x0B), # amber + } + display_map = { + "GEMM util": "GEMM util %", + "Useful eff": "Useful eff %", + } + + _textbox(slide, 0.4, 1.0, 12.6, 0.70, + f"GEMM util = useful FLOPs ÷ (tile FLOPs × tile count) — pure " + f"shape-vs-tile metric. " + f"Useful eff = (N_tiles × T_stage × GEMM_util) ÷ wall — " + f"useful FLOPs delivered as a fraction of peak over the " + f"ideal-pipelined wall (head + K-loop + inter-(m,n) DMA_W).", + size=11, color=COL_MUTED, align=PP_ALIGN.LEFT) + + _draw_native_bar_chart( + slide, + plot_x=1.0, plot_y=1.75, plot_w=10.0, plot_h=4.35, + shape_labels=shape_labels, flagged=flagged, + tile_counts=tile_counts, + series=series, colors_map=colors_map, + display_map=display_map, + wall_clocks=None, + y_label="%", + legend_x=11.4, legend_w=1.85, + foot_note=("GEMM util < 100% → shape mismatch (padded zeros). " + "Useful eff < GEMM util → pipeline overhead " + "(head + inter-(m,n) DMA_W) eats more of the wall."), + threshold_line=100.0, + flagged_bar_color=COL_RED, + flagged_series_only="GEMM util", + ) + + +def _render_mac_utilization_ref_ref(slide): + """Same metric as slide 14 but for the ref_ref variant. + + In ref_ref both A and B are loaded from HBM by the scheduler — that's + TWO back-to-back DMA_R per tile, so the DMA stage takes 2 × T_stage = + 32 ns/tile while FETCH/GEMM are still 16 ns/tile. The pipeline is + DMA-bound — steady-state cycle = 32 ns/tile — so useful pipeline + efficiency caps near 50 % × GEMM_util. + """ + data = _load_sweep_data() + rows = data["rows"] + if not rows: + _textbox(slide, 0.4, 3.0, 12.6, 1.0, + "No sweep data. Run scripts/gemm_sweep.py first.", + size=14, color=COL_RED, align=PP_ALIGN.LEFT) + return + tile = data["tile_sizes"] + TILE_M, TILE_K, TILE_N = tile["M"], tile["K"], tile["N"] + tile_flops = 2 * TILE_M * TILE_K * TILE_N + + HBM_GBS = 256.0 + bpe = 2 + T_STAGE_COMPUTE = 16.0 # FETCH = GEMM = 16 ns/tile + T_STAGE_DMA_REF_REF = 2 * 16.0 # 2 DMA_R per tile (A + B) + T_STAGE = T_STAGE_DMA_REF_REF # DMA-bound steady-state cycle + D_STAGES = 3 # DMA, FETCH, GEMM + head_ns = (D_STAGES - 1) * T_STAGE_COMPUTE # pipeline fill = 32 ns + dma_w_per_pair_ns = (TILE_M * TILE_N * bpe) / HBM_GBS + + by_shape: dict = {} + for r in rows: + if r["variant"] != "ref_ref": + continue + by_shape[(r["M"], r["K"], r["N"])] = r + shapes = list(by_shape.keys()) + + shape_labels = [_shape_label(by_shape[k]) for k in shapes] + flagged = [_under_tile(k[0], k[1], k[2], TILE_M, TILE_K, TILE_N) + for k in shapes] + tile_counts = [by_shape[k]["tile_count_expected"] for k in shapes] + + gemm_util = [] + useful_eff = [] + for k in shapes: + r = by_shape[k] + M, K, N = r["M"], r["K"], r["N"] + useful = 2 * M * K * N + tiles = r["tile_count_expected"] + gu = useful / (tile_flops * tiles) * 100 + gemm_util.append(gu) + + m_tiles = (M + TILE_M - 1) // TILE_M + n_tiles = (N + TILE_N - 1) // TILE_N + n_mn = m_tiles * n_tiles + # Useful compute time: each tile delivers T_STAGE_COMPUTE worth + # of MAC. Steady-state pipeline cycle is DMA-bound (32 ns/tile). + compute_total = tiles * T_STAGE_COMPUTE + wall_steady = tiles * T_STAGE + inter_dma_w = max(0, n_mn - 1) * dma_w_per_pair_ns + wall = head_ns + wall_steady + inter_dma_w + ueff = (compute_total * (gu / 100.0) / wall) * 100 \ + if wall > 0 else 0.0 + useful_eff.append(ueff) + + series = { + "GEMM util": gemm_util, + "Useful eff": useful_eff, + } + colors_map = { + "GEMM util": COL_FS, + "Useful eff": RGBColor(0xF5, 0x9E, 0x0B), + } + display_map = { + "GEMM util": "GEMM util %", + "Useful eff": "Useful eff % (ref_ref)", + } + + _textbox(slide, 0.4, 1.0, 12.6, 0.75, + "ref_ref: scheduler issues DMA_R for BOTH A and B every tile. " + "Per-tile DMA cost = 2 × T_stage = 32 ns; FETCH and GEMM stay " + "at 16 ns. Pipeline cycle is DMA-bound → useful eff caps near " + "50 % × GEMM_util, regardless of K-loop length.", + size=11, color=COL_MUTED, align=PP_ALIGN.LEFT) + + _draw_native_bar_chart( + slide, + plot_x=1.0, plot_y=1.85, plot_w=10.0, plot_h=4.25, + shape_labels=shape_labels, flagged=flagged, + tile_counts=tile_counts, + series=series, colors_map=colors_map, + display_map=display_map, + wall_clocks=None, + y_label="%", + legend_x=11.4, legend_w=1.85, + foot_note=("Compare to load_ref (prev slide): tl.load pins A in " + "TCM once, eliminating the per-tile A DMA_R → DMA stage " + "halves to 16 ns/tile → useful eff roughly doubles at " + "the same GEMM util."), + threshold_line=100.0, + flagged_bar_color=COL_RED, + flagged_series_only="GEMM util", + ) + + +def _render_tflops_table(slide): + """Ideal pipelined pipe_eff: assumes non-blocking tl.load + multi-channel HBM. + + Three-stage pipeline (DMA_R → FETCH → GEMM), all stages bandwidth-balanced + at T_stage = 16 ns/tile. Wall = pipeline fill + steady-state K-loop + + inter-(m,n) DMA_W (final flush excluded — tail, not in pipeline). + """ + data = _load_sweep_data() + rows = data["rows"] + if not rows: + _textbox(slide, 0.4, 3.0, 12.6, 1.0, + "No sweep data. Run scripts/gemm_sweep.py first.", + size=14, color=COL_RED, align=PP_ALIGN.LEFT) + return + tile = data["tile_sizes"] + TILE_M, TILE_K, TILE_N = tile["M"], tile["K"], tile["N"] + + HBM_GBS = 256.0 # bytes/ns + bpe = 2 # f16 + T_STAGE = 16.0 # ns per pipeline stage (all stages BW-balanced) + D_STAGES = 3 # DMA_R, FETCH, GEMM + head_ns = (D_STAGES - 1) * T_STAGE # pipeline fill: (D-1) × T_stage = 32 ns + dma_w_per_pair_ns = (TILE_M * TILE_N * bpe) / HBM_GBS # = 8 ns + + by_shape: dict = {} + for r in rows: + by_shape.setdefault((r["M"], r["K"], r["N"]), {})[r["variant"]] = r + shapes = list(by_shape.keys()) + + _textbox(slide, 0.4, 1.0, 12.6, 0.85, + f"Ideal pipelined model — assumes non-blocking tl.load + " + f"multi-channel HBM so DMA, FETCH and GEMM all run at " + f"T_stage = {T_STAGE:.0f} ns/tile.\n" + f" wall = head_latency + N_tiles × T_stage + Σ inter-(m,n) DMA_W\n" + f" head_latency = (D−1) × T_stage = {head_ns:.0f} ns " + f"(pipeline fill, D = {D_STAGES} stages).\n" + f" inter DMA_W = (N_mn − 1) × {dma_w_per_pair_ns:.0f} ns " + f"(final flush is tail — excluded).\n" + f" useful eff = (N_tiles × T_stage × GEMM_util) / wall — " + f"MAC time producing real output, not padded zeros.", + size=11, color=COL_MUTED, align=PP_ALIGN.LEFT) + + headers = ["Input shape", "GEMM util %", "Useful eff %"] + n_rows = len(shapes) + 1 + n_cols = len(headers) + table_x = 2.5 + table_y = 2.10 + table_w = 8.4 + table_h = 4.30 + + tbl_shape = slide.shapes.add_table( + n_rows, n_cols, + Inches(table_x), Inches(table_y), Inches(table_w), Inches(table_h), + ) + tbl = tbl_shape.table + + widths_in = [3.0, 2.5, 2.9] + for ci, w in enumerate(widths_in): + tbl.columns[ci].width = Inches(w) + + def _set_cell(ci, ri, text, *, bold=False, color=COL_TEXT_DARK, + fill=None, size=12, align=PP_ALIGN.CENTER): + cell = tbl.cell(ri, ci) + if fill is not None: + cell.fill.solid() + cell.fill.fore_color.rgb = fill + tf = cell.text_frame + tf.margin_left = Emu(36000) + tf.margin_right = Emu(36000) + tf.margin_top = Emu(18000) + tf.margin_bottom = Emu(18000) + tf.word_wrap = True + p = tf.paragraphs[0] + p.alignment = align + p.text = "" + run = p.add_run() + run.text = text + run.font.size = Pt(size) + run.font.bold = bold + run.font.name = "Consolas" + run.font.color.rgb = color + + for ci, h in enumerate(headers): + _set_cell(ci, 0, h, bold=True, color=COL_TEXT_LIGHT, + fill=RGBColor(0x10, 0x2A, 0x55), size=12) + + tile_flops = 2 * TILE_M * TILE_K * TILE_N + for ri, k in enumerate(shapes, start=1): + M, K, N = k + useful = 2 * M * K * N + any_row = next(iter(by_shape[k].values())) + tiles = any_row["tile_count_expected"] + gemm_util = useful / (tile_flops * tiles) * 100 + is_under = _under_tile(M, K, N, TILE_M, TILE_K, TILE_N) + + m_tiles = (M + TILE_M - 1) // TILE_M + n_tiles = (N + TILE_N - 1) // TILE_N + n_mn = m_tiles * n_tiles + + gemm_total_ns = tiles * T_STAGE + inter_dma_w_ns = max(0, n_mn - 1) * dma_w_per_pair_ns + wall_ns = head_ns + gemm_total_ns + inter_dma_w_ns + # Useful eff = pipe_eff × GEMM_util (shape-waste included). + pipe_eff = ((gemm_total_ns * (gemm_util / 100.0)) / wall_ns) * 100 \ + if wall_ns > 0 else 0.0 + + row_fill = (RGBColor(0xFE, 0xF2, 0xF2) if is_under + else RGBColor(0xF8, 0xFA, 0xFC)) + text_color = COL_RED if is_under else COL_TEXT_DARK + + shape_txt = f"{M}×{K}×{N}" + (" (under-tile)" if is_under else "") + _set_cell(0, ri, shape_txt, bold=is_under, color=text_color, + fill=row_fill, align=PP_ALIGN.LEFT) + _set_cell(1, ri, f"{gemm_util:.1f} %", bold=is_under, + color=text_color, fill=row_fill) + _set_cell(2, ri, f"{pipe_eff:.1f} %", fill=row_fill, + color=COL_TEXT_DARK, bold=True) + + _textbox(slide, 0.4, 6.50, 12.6, 0.6, + "What the model could achieve with non-blocking tl.load + " + "multi-channel HBM (A streams tile-by-tile, no upfront serial). " + "Today's simulator caps at ~50 % for tall-skinny K because tl.load " + "is whole-operand blocking and the cube has a single HBM channel.", + size=11, color=COL_MUTED, align=PP_ALIGN.LEFT) + + +def _render_pipeline_eff_walkthrough(slide): + """Visualize how Useful eff is calculated for one example shape. + + Example: 32×128×128 (8 K-tiles in 4 (m,n) groups, head + 3 inter DMA_W). + Shows the 3-stage pipeline structure, the time-line of all GEMM tiles + + overheads, and evaluates the formula numerically. + """ + # Example parameters (kept hardcoded — this slide is illustrative) + M, K, N = 32, 128, 128 + T_STAGE = 16 + D_STAGES = 3 # DMA_R, FETCH, GEMM + K_TILES = 2 # K=128 → K_tiles = 2 + N_MN = 4 # M_tile × N_tile = 1 × 4 + TOTAL_TILES = K_TILES * N_MN # 8 + HEAD_NS = (D_STAGES - 1) * T_STAGE # 32 + DMA_W_NS = 8 # 32×32×2 / 256 = 8 ns + INTER_FLUSH_COUNT = N_MN - 1 # 3 flushes (final excluded) + GEMM_TOTAL = TOTAL_TILES * T_STAGE # 128 + INTER_DMA_W_TOTAL = INTER_FLUSH_COUNT * DMA_W_NS # 24 + WALL = HEAD_NS + GEMM_TOTAL + INTER_DMA_W_TOTAL # 184 + USEFUL_EFF = GEMM_TOTAL / WALL * 100 # 69.6% + + # Colors + C_HEAD = RGBColor(0x94, 0xA3, 0xB8) # slate gray + C_GEMM = RGBColor(0x10, 0xB9, 0x81) # emerald (useful) + C_FLUSH = RGBColor(0xF5, 0x9E, 0x0B) # amber (inter-(m,n)) + C_TAIL = RGBColor(0xFC, 0xA5, 0xA5) # light red (excluded) + C_DMA_R = RGBColor(0x3B, 0x82, 0xF6) # blue + C_FETCH = RGBColor(0x10, 0xB9, 0x81) + C_GEMM_BOX = RGBColor(0xF5, 0x9E, 0x0B) + + _textbox(slide, 0.4, 1.0, 12.6, 0.5, + f"Example: M=N=32, K=128, N-output=128 → {TOTAL_TILES} tiles in " + f"{N_MN} output groups of {K_TILES} K-tiles each. T_stage = " + f"{T_STAGE} ns/tile, pipeline depth D = {D_STAGES}.", + size=12, color=COL_MUTED, align=PP_ALIGN.LEFT) + + # ── Top: 3-stage pipeline structure diagram ───────────────────── + pd_y = 1.7 + pd_h = 0.55 + box_w = 1.4 + box_gap = 0.35 + pd_total_w = 3 * box_w + 2 * box_gap + pd_x0 = (SLIDE_W_IN - pd_total_w) / 2 + stages = [("DMA_R\nHBM → TCM", C_DMA_R, COL_TEXT_LIGHT), + ("FETCH\nTCM → Reg", C_FETCH, COL_TEXT_LIGHT), + ("GEMM\nMAC array", C_GEMM_BOX, COL_TEXT_DARK)] + for i, (lbl, fill, tc) in enumerate(stages): + x = pd_x0 + i * (box_w + box_gap) + _rrect(slide, x, pd_y, box_w, pd_h, fill, COL_TEXT_DARK, + lbl, size=10, bold=True, color=tc) + if i < 2: + ax1 = x + box_w + 0.03 + ax2 = x + box_w + box_gap - 0.03 + _arrow(slide, ax1, pd_y + pd_h / 2, ax2, pd_y + pd_h / 2, + color=COL_MUTED, width_pt=1.8) + _textbox(slide, pd_x0, pd_y + pd_h + 0.05, pd_total_w, 0.28, + f"each stage = {T_STAGE} ns/tile → " + f"head latency = (D−1) × T_stage = {HEAD_NS} ns", + size=10, color=COL_MUTED, align=PP_ALIGN.CENTER) + + # ── Middle: timeline of the full kernel ───────────────────────── + # Layout: head + 4 K-loops separated by 3 DMA_W + 1 tail (excluded) + tl_y = 3.4 + tl_h = 0.85 + tl_label_y = tl_y - 0.3 + tl_legend_y = tl_y + tl_h + 0.18 + + margin = 0.8 + tl_total_ns = WALL + DMA_W_NS # include tail visually + tl_w_total = SLIDE_W_IN - 2 * margin + px_per_ns = tl_w_total / tl_total_ns + + cur_x = margin + # Head + w = HEAD_NS * px_per_ns + _rect_band(slide, cur_x, tl_y, w, tl_h, C_HEAD, COL_TEXT_DARK) + _textbox(slide, cur_x, tl_y + tl_h / 2 - 0.13, w, 0.3, + f"head\n{HEAD_NS} ns", + size=9, bold=True, color=COL_TEXT_LIGHT) + cur_x += w + + # K-loops + inter DMA_W + for g in range(N_MN): + # K-loop: K_TILES GEMM blocks + for t in range(K_TILES): + w = T_STAGE * px_per_ns + _rect_band(slide, cur_x, tl_y, w, tl_h, C_GEMM, COL_TEXT_DARK) + tile_no = g * K_TILES + t + 1 + _textbox(slide, cur_x, tl_y + tl_h / 2 - 0.13, w, 0.3, + f"GEMM\nT{tile_no}", + size=9, bold=True, color=COL_TEXT_LIGHT) + cur_x += w + # Mark (m,n) group label above + group_start_x = cur_x - K_TILES * T_STAGE * px_per_ns + group_w = K_TILES * T_STAGE * px_per_ns + _textbox(slide, group_start_x, tl_label_y, + group_w, 0.25, + f"(m=0,n={g}) K-loop", + size=9, bold=True, color=COL_TEXT_DARK) + if g < N_MN - 1: + w = DMA_W_NS * px_per_ns + _rect_band(slide, cur_x, tl_y, w, tl_h, C_FLUSH, COL_TEXT_DARK) + _textbox(slide, cur_x, tl_y + tl_h / 2 - 0.13, w, 0.3, + "flush", size=8, bold=True, color=COL_TEXT_DARK) + cur_x += w + + # Tail flush (excluded) + w = DMA_W_NS * px_per_ns + _rect_band(slide, cur_x, tl_y, w, tl_h, C_TAIL, COL_RED) + _textbox(slide, cur_x, tl_y + tl_h / 2 - 0.13, w, 0.3, + "tail", size=8, bold=True, color=COL_RED) + _textbox(slide, cur_x - 0.3, tl_y + tl_h + 0.02, w + 0.6, 0.28, + "(excluded\nfrom wall)", + size=8, bold=True, color=COL_RED) + + # Wall span indicator below the timeline + wall_end_x = margin + WALL * px_per_ns + _arrow(slide, margin, tl_y + tl_h + 0.55, + wall_end_x, tl_y + tl_h + 0.55, color=COL_TEXT_DARK, width_pt=1.5) + _arrow(slide, wall_end_x, tl_y + tl_h + 0.55, + margin, tl_y + tl_h + 0.55, color=COL_TEXT_DARK, width_pt=1.5) + _textbox(slide, margin, tl_y + tl_h + 0.6, + wall_end_x - margin, 0.3, + f"wall = {WALL} ns", + size=11, bold=True, color=COL_TEXT_DARK, align=PP_ALIGN.CENTER) + + # ── Bottom: numerical evaluation ─────────────────────────────── + formula_y = 5.7 + _textbox(slide, 0.4, formula_y, 12.6, 0.35, + f"wall = head + N_tiles × T_stage + (N_mn − 1) × T_dma_w = " + f"{HEAD_NS} + {TOTAL_TILES}×{T_STAGE} + {INTER_FLUSH_COUNT}×{DMA_W_NS} " + f"= {WALL} ns", + size=12, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + _textbox(slide, 0.4, formula_y + 0.35, 12.6, 0.35, + f"GEMM useful time = N_tiles × T_stage × GEMM_util = " + f"{TOTAL_TILES}×{T_STAGE}×100 % = {GEMM_TOTAL} ns", + size=12, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + _textbox(slide, 0.4, formula_y + 0.7, 12.6, 0.45, + f"Useful efficiency = {GEMM_TOTAL} / {WALL} = {USEFUL_EFF:.1f} %", + size=14, bold=True, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + _textbox(slide, 0.4, formula_y + 1.15, 12.6, 0.35, + "Overhead = head (pipeline fill) + inter-(m,n) flushes. " + "Bigger K (more amortization) and smaller N (fewer groups) " + "both raise the efficiency.", + size=10, color=COL_MUTED, align=PP_ALIGN.LEFT) + + +def _render_pipeline_eff_walkthrough_largeK(slide): + """Walkthrough for the tall-skinny case: M=N=32, K=3072. + + N_mn = 1 (one output group) → zero inter-(m,n) DMA_W flushes. + K-loop has 48 tiles — compressed visually (show first 4 + ... + last 2). + """ + M, K, N = 32, 3072, 32 + T_STAGE = 16 + D_STAGES = 3 + K_TILES = 48 + N_MN = 1 + TOTAL_TILES = K_TILES + HEAD_NS = (D_STAGES - 1) * T_STAGE + DMA_W_NS = 8 + GEMM_TOTAL = TOTAL_TILES * T_STAGE + INTER_DMA_W_TOTAL = 0 + WALL = HEAD_NS + GEMM_TOTAL + INTER_DMA_W_TOTAL + USEFUL_EFF = GEMM_TOTAL / WALL * 100 + + C_HEAD = RGBColor(0x94, 0xA3, 0xB8) + C_GEMM = RGBColor(0x10, 0xB9, 0x81) + C_TAIL = RGBColor(0xFC, 0xA5, 0xA5) + C_DMA_R = RGBColor(0x3B, 0x82, 0xF6) + C_FETCH = RGBColor(0x10, 0xB9, 0x81) + C_GEMM_BOX = RGBColor(0xF5, 0x9E, 0x0B) + + _textbox(slide, 0.4, 1.0, 12.6, 0.5, + f"Example: M=N=32, K=3072 → {TOTAL_TILES} tiles, " + f"N_mn = M_tiles × N_tiles = 1 × 1 = 1 → " + f"no inter-(m,n) DMA_W flushes. Long K-loop amortizes the head.", + size=12, color=COL_MUTED, align=PP_ALIGN.LEFT) + + # 3-stage pipeline structure (same as before) + pd_y = 1.7 + pd_h = 0.55 + box_w = 1.4 + box_gap = 0.35 + pd_total_w = 3 * box_w + 2 * box_gap + pd_x0 = (SLIDE_W_IN - pd_total_w) / 2 + stages = [("DMA_R\nHBM → TCM", C_DMA_R, COL_TEXT_LIGHT), + ("FETCH\nTCM → Reg", C_FETCH, COL_TEXT_LIGHT), + ("GEMM\nMAC array", C_GEMM_BOX, COL_TEXT_DARK)] + for i, (lbl, fill, tc) in enumerate(stages): + x = pd_x0 + i * (box_w + box_gap) + _rrect(slide, x, pd_y, box_w, pd_h, fill, COL_TEXT_DARK, + lbl, size=10, bold=True, color=tc) + if i < 2: + ax1 = x + box_w + 0.03 + ax2 = x + box_w + box_gap - 0.03 + _arrow(slide, ax1, pd_y + pd_h / 2, ax2, pd_y + pd_h / 2, + color=COL_MUTED, width_pt=1.8) + _textbox(slide, pd_x0, pd_y + pd_h + 0.05, pd_total_w, 0.28, + f"each stage = {T_STAGE} ns/tile → " + f"head latency = (D−1) × T_stage = {HEAD_NS} ns", + size=10, color=COL_MUTED, align=PP_ALIGN.CENTER) + + # Timeline — compressed (show 4 tiles + gap + 2 tiles) + tl_y = 3.4 + tl_h = 0.85 + tl_label_y = tl_y - 0.3 + + margin = 0.8 + visible_first = 4 + visible_last = 2 + skipped = TOTAL_TILES - visible_first - visible_last + # Width budget: head + visible tiles + ellipsis block + tail + ellipsis_ns_equiv = 6 * T_STAGE # rendered width = 6 tiles worth + tl_total_ns = (HEAD_NS + (visible_first + visible_last) * T_STAGE + + ellipsis_ns_equiv + DMA_W_NS) + tl_w_total = SLIDE_W_IN - 2 * margin + px_per_ns = tl_w_total / tl_total_ns + + cur_x = margin + # Head + w = HEAD_NS * px_per_ns + _rect_band(slide, cur_x, tl_y, w, tl_h, C_HEAD, COL_TEXT_DARK) + _textbox(slide, cur_x, tl_y + tl_h / 2 - 0.13, w, 0.3, + f"head\n{HEAD_NS} ns", + size=9, bold=True, color=COL_TEXT_LIGHT) + cur_x += w + + # Group label for the entire K-loop (one (m,n)) + kloop_start_x = cur_x + # First few tiles + for t in range(visible_first): + w = T_STAGE * px_per_ns + _rect_band(slide, cur_x, tl_y, w, tl_h, C_GEMM, COL_TEXT_DARK) + _textbox(slide, cur_x, tl_y + tl_h / 2 - 0.13, w, 0.3, + f"GEMM\nT{t + 1}", + size=9, bold=True, color=COL_TEXT_LIGHT) + cur_x += w + # Ellipsis block + ew = ellipsis_ns_equiv * px_per_ns + _rect_band(slide, cur_x, tl_y, ew, tl_h, + RGBColor(0x86, 0xEF, 0xAC), COL_TEXT_DARK) + _textbox(slide, cur_x, tl_y + tl_h / 2 - 0.2, ew, 0.5, + f". . . {skipped} more GEMM tiles . . .", + size=10, bold=True, color=COL_TEXT_DARK) + cur_x += ew + # Last tiles + for t in range(visible_last): + w = T_STAGE * px_per_ns + _rect_band(slide, cur_x, tl_y, w, tl_h, C_GEMM, COL_TEXT_DARK) + _textbox(slide, cur_x, tl_y + tl_h / 2 - 0.13, w, 0.3, + f"GEMM\nT{TOTAL_TILES - visible_last + t + 1}", + size=9, bold=True, color=COL_TEXT_LIGHT) + cur_x += w + # K-loop group label + kloop_end_x = cur_x + _textbox(slide, kloop_start_x, tl_label_y, + kloop_end_x - kloop_start_x, 0.25, + f"(m=0,n=0) K-loop — all {TOTAL_TILES} tiles in one group, " + f"NO inter flushes", + size=10, bold=True, color=COL_TEXT_DARK, + align=PP_ALIGN.CENTER) + + # Tail + w = DMA_W_NS * px_per_ns + _rect_band(slide, cur_x, tl_y, w, tl_h, C_TAIL, COL_RED) + _textbox(slide, cur_x, tl_y + tl_h / 2 - 0.13, w, 0.3, + "tail", size=8, bold=True, color=COL_RED) + _textbox(slide, cur_x - 0.3, tl_y + tl_h + 0.02, w + 0.6, 0.28, + "(excluded\nfrom wall)", + size=8, bold=True, color=COL_RED) + + # Wall arrow + wall_end_x = margin + (HEAD_NS + (visible_first + visible_last) * T_STAGE + + ellipsis_ns_equiv) * px_per_ns + _arrow(slide, margin, tl_y + tl_h + 0.55, + wall_end_x, tl_y + tl_h + 0.55, color=COL_TEXT_DARK, width_pt=1.5) + _arrow(slide, wall_end_x, tl_y + tl_h + 0.55, + margin, tl_y + tl_h + 0.55, color=COL_TEXT_DARK, width_pt=1.5) + _textbox(slide, margin, tl_y + tl_h + 0.6, + wall_end_x - margin, 0.3, + f"wall = {WALL} ns", + size=11, bold=True, color=COL_TEXT_DARK, align=PP_ALIGN.CENTER) + + # Formula evaluation + formula_y = 5.7 + _textbox(slide, 0.4, formula_y, 12.6, 0.35, + f"wall = head + N_tiles × T_stage + (N_mn − 1) × T_dma_w = " + f"{HEAD_NS} + {TOTAL_TILES}×{T_STAGE} + 0 = {WALL} ns", + size=12, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + _textbox(slide, 0.4, formula_y + 0.35, 12.6, 0.35, + f"GEMM useful time = {TOTAL_TILES}×{T_STAGE}×100 % = {GEMM_TOTAL} ns", + size=12, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + _textbox(slide, 0.4, formula_y + 0.7, 12.6, 0.45, + f"Useful efficiency = {GEMM_TOTAL} / {WALL} = {USEFUL_EFF:.1f} %", + size=14, bold=True, color=COL_TEXT_DARK, align=PP_ALIGN.LEFT) + _textbox(slide, 0.4, formula_y + 1.15, 12.6, 0.35, + "Long K-loop, one output group → head amortized over 48 GEMM " + "tiles, no flush penalty. Approaches 100 % as K grows.", + size=10, color=COL_MUTED, align=PP_ALIGN.LEFT) + + +_RENDERERS.update({ + "stage_breakdown_ref_ref": _render_stage_breakdown_ref_ref, + "stage_breakdown_load_ref": _render_stage_breakdown_load_ref, + "stage_breakdown_load_load": _render_stage_breakdown_load_load, + "variant_comparison": _render_variant_comparison, + "hbm_topology": _render_hbm_topology, + "per_op_dma": _render_per_op_dma, + "mac_utilization": _render_mac_utilization, + "mac_utilization_ref_ref": _render_mac_utilization_ref_ref, + "tflops_table": _render_tflops_table, + "pipeline_eff_walkthrough": _render_pipeline_eff_walkthrough, + "pipeline_eff_walkthrough_largeK": _render_pipeline_eff_walkthrough_largeK, +}) + + def build(): prs = Presentation() prs.slide_width = Inches(SLIDE_W_IN) @@ -149,17 +2300,21 @@ def build(): slide = prs.slides.add_slide(blank) _add_title(slide, cfg["title"]) - # Layout: image on the left (8.4 in wide), bullets on the right (4.4 in). - _add_image_centered( - slide, cfg["image"], - left_in=0.3, top_in=1.05, - max_w_in=8.3, max_h_in=5.9, - ) - _add_bullets( - slide, cfg["bullets"], - left_in=8.8, top_in=1.2, - width_in=4.3, height_in=5.7, - ) + if "render" in cfg: + # Shape-drawn slide (sequence diagram / pipeline structure). + _RENDERERS[cfg["render"]](slide) + else: + # Default: image on the left (8.4 in wide), bullets on the right. + _add_image_centered( + slide, cfg["image"], + left_in=0.3, top_in=1.05, + max_w_in=8.3, max_h_in=5.9, + ) + _add_bullets( + slide, cfg["bullets"], + left_in=8.8, top_in=1.2, + width_in=4.3, height_in=5.7, + ) _add_footer(slide, i, len(SLIDES)) OUT.parent.mkdir(parents=True, exist_ok=True) diff --git a/scripts/gemm_sweep.py b/scripts/gemm_sweep.py new file mode 100644 index 0000000..c991ed6 --- /dev/null +++ b/scripts/gemm_sweep.py @@ -0,0 +1,232 @@ +"""Sweep GEMM shapes through kernbench and dump PE_accelerator engine times. + +For each shape: + - run benches.matmul_composite via the same run_bench path the CLI uses + - read result.engine.op_log + - filter to per-PE engines: pe_dma, pe_fetch_store, pe_gemm, pe_math + - record sum-of-durations (engine occupancy) AND wall-clock active interval + +Output: docs/diagrams/gemm_sweep.json +""" +from __future__ import annotations + +import json +import os +import sys +import time +from pathlib import Path + +# Default sweep covering under-tile, single-tile, multi-tile, and asymmetric regimes. +# Each entry is either a single integer (square M=K=N=S) or "MxKxN". +# Override via env: SWEEP_SHAPES="16,32,16x2048x16,..." +DEFAULT_SHAPES = [ + "32x32x32", # 1 tile, K=32 < TILE_K=64 → under-tile in K + "32x64x32", # 1 tile, exact single-tile fit + "32x128x32", # 2 tiles, aligned + "32x128x128", # 8 tiles, aligned + "32x3072x32", # 48 tiles, all K-axis (tall-skinny) + "8x128x128", # 8 tiles, but M=8 < TILE_M=32 → MAC array under-fed + "128x8x128", # 16 tiles, but K=8 < TILE_K=64 → MAC array under-fed + "512", # 2048 tiles, fully aligned — "well-pipelined" reference +] + +# Operand-staging variants exercised per shape. +VARIANTS = ["ref_ref", "load_ref", "load_load"] + +# Engines whose timings we collect (component_id suffix match). +ENGINES = ["pe_dma", "pe_fetch_store", "pe_gemm", "pe_math"] + +# Per-stage breakdown labels (StageType enum names from pe_types.py). +STAGES = ["DMA_READ", "DMA_WRITE", "FETCH", "STORE", "GEMM", "MATH"] + +# Scheduler tile sizes (mirror of PeSchedulerComponent.TILE_M/K/N). +TILE_M, TILE_K, TILE_N = 32, 64, 32 + +OUT_PATH = Path(__file__).parent.parent / "docs" / "diagrams" / "gemm_sweep.json" + + +def _engine_wall_ns(records, suffix: str) -> float: + """Wall-clock interval the engine was active (union of overlapping ops).""" + intervals = [(r.t_start, r.t_end) for r in records + if r.component_id.endswith("." + suffix)] + if not intervals: + return 0.0 + intervals.sort() + merged_end = intervals[0][1] + merged_start = intervals[0][0] + total = 0.0 + for s, e in intervals[1:]: + if s <= merged_end: + merged_end = max(merged_end, e) + else: + total += merged_end - merged_start + merged_start, merged_end = s, e + total += merged_end - merged_start + return total + + +def _engine_occupancy_ns(records, suffix: str) -> float: + return sum(r.t_end - r.t_start for r in records + if r.component_id.endswith("." + suffix)) + + +def _engine_count(records, suffix: str) -> int: + return sum(1 for r in records if r.component_id.endswith("." + suffix)) + + +def _stage_occupancy_ns(records, stage_type: str) -> float: + """Sum t_end - t_start over op_log records whose params.stage_type matches. + + Requires op_log records produced post the TileToken stage_type capture + (sim_engine/op_log.py). + """ + return sum( + r.t_end - r.t_start + for r in records + if r.params.get("stage_type") == stage_type + ) + + +def _stage_wall_ns(records, stage_type: str) -> float: + """Interval-union wall-clock for records whose stage_type matches.""" + intervals = sorted( + (r.t_start, r.t_end) for r in records + if r.params.get("stage_type") == stage_type + ) + if not intervals: + return 0.0 + total = 0.0 + cs, ce = intervals[0] + for s, e in intervals[1:]: + if s <= ce: + ce = max(ce, e) + else: + total += ce - cs + cs, ce = s, e + total += ce - cs + return total + + +def _stage_count(records, stage_type: str) -> int: + return sum(1 for r in records if r.params.get("stage_type") == stage_type) + + +def _run_one(M: int, K: int, N: int, topology: str, variant: str = "ref_ref") -> dict: + os.environ["MATMUL_M"] = str(M) + os.environ["MATMUL_K"] = str(K) + os.environ["MATMUL_N"] = str(N) + os.environ["MATMUL_VARIANT"] = variant + + # Late imports so env vars are read by benches/matmul_composite at module load. + # Force re-import to pick up new env values. + for mod_name in [m for m in list(sys.modules) if m.startswith("benches.matmul_composite")]: + del sys.modules[mod_name] + + from benches.loader import resolve_bench + from kernbench.runtime_api.bench_runner import run_bench + from kernbench.runtime_api.types import resolve_device + from kernbench.sim_engine.engine import GraphEngine + from kernbench.topology.builder import resolve_topology + + topo = resolve_topology(topology) + bench = resolve_bench("matmul_composite") + device = resolve_device(None) + + t0 = time.time() + result = run_bench( + topology=topo, bench_fn=bench, device=device, + engine_factory=lambda t, d: GraphEngine( + getattr(t, "topology_obj", t), enable_data=True, + ), + ) + wall = time.time() - t0 + + op_log = result.engine.op_log + if not result.completion.ok: + raise RuntimeError(f"bench failed at M={M},K={K},N={N}: {result.completion}") + + # Bytes touched at f16 (2 B): full A + full B + full out (each operand + # streamed once through HBM by the composite plan). + bytes_total = (M * K + K * N + M * N) * 2 + row = { + "M": M, "K": K, "N": N, + "variant": variant, + "flops": 2 * M * K * N, + "bytes_hbm": bytes_total, + "arith_intensity": (2 * M * K * N) / bytes_total, # flops/byte + "tile_count_expected": _ceil(M, TILE_M) * _ceil(N, TILE_N) * _ceil(K, TILE_K), + "sim_wall_clock_s": round(wall, 3), + "engines": {}, + } + for eng in ENGINES: + row["engines"][eng] = { + "occupancy_ns": _engine_occupancy_ns(op_log, eng), + "wall_ns": _engine_wall_ns(op_log, eng), + "record_count": _engine_count(op_log, eng), + } + row["stages"] = {} + for stage in STAGES: + row["stages"][stage] = { + "occupancy_ns": _stage_occupancy_ns(op_log, stage), + "wall_ns": _stage_wall_ns(op_log, stage), + "record_count": _stage_count(op_log, stage), + } + # Kernel-window wall-clock = max t_end - min t_start over PE engine records. + pe_records = [r for r in op_log + if any(r.component_id.endswith("." + e) for e in ENGINES)] + if pe_records: + row["pe_window_ns"] = max(r.t_end for r in pe_records) \ + - min(r.t_start for r in pe_records) + else: + row["pe_window_ns"] = 0.0 + return row + + +def _ceil(a: int, b: int) -> int: + return (a + b - 1) // b + + +def main() -> int: + shapes_env = os.environ.get("SWEEP_SHAPES") + raw = (shapes_env.split(",") if shapes_env else DEFAULT_SHAPES) + shapes: list[tuple[int, int, int]] = [] + for s in raw: + s = s.strip() + if not s: + continue + if "x" in s.lower(): + parts = s.lower().split("x") + shapes.append((int(parts[0]), int(parts[1]), int(parts[2]))) + else: + v = int(s) + shapes.append((v, v, v)) + topology = os.environ.get("SWEEP_TOPOLOGY", "topology.yaml") + + rows = [] + for M, K, N in shapes: + for variant in VARIANTS: + print(f"[sweep] M={M} K={K} N={N} variant={variant} ...", flush=True) + row = _run_one(M, K, N, topology, variant=variant) + rows.append(row) + eng_dma = row["engines"]["pe_dma"] + eng_gem = row["engines"]["pe_gemm"] + print(f" tiles={row['tile_count_expected']:>6} " + f"pe_window={row['pe_window_ns']:8.1f}ns " + f"dma_occ={eng_dma['occupancy_ns']:9.1f} " + f"gemm_occ={eng_gem['occupancy_ns']:8.1f} " + f"(sim {row['sim_wall_clock_s']:.1f}s)") + + OUT_PATH.parent.mkdir(parents=True, exist_ok=True) + OUT_PATH.write_text(json.dumps({ + "tile_sizes": {"M": TILE_M, "K": TILE_K, "N": TILE_N}, + "engines": ENGINES, + "stages": STAGES, + "variants": VARIANTS, + "rows": rows, + }, indent=2)) + print(f"\n[sweep] wrote {OUT_PATH}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/src/kernbench/common/pe_commands.py b/src/kernbench/common/pe_commands.py index e70c367..72c245e 100644 --- a/src/kernbench/common/pe_commands.py +++ b/src/kernbench/common/pe_commands.py @@ -34,6 +34,7 @@ class TensorHandle: nbytes: int # total byte size data: object = None # reserved for validate mode space: str = "tcm" # MemoryStore space ("tcm" | "hbm" | "sram") + pinned: bool = False # operand already DMA-staged in TCM (via tl.load) @dataclass(frozen=True) diff --git a/src/kernbench/components/builtin/pe_scheduler.py b/src/kernbench/components/builtin/pe_scheduler.py index ea07ee2..4f50dd5 100644 --- a/src/kernbench/components/builtin/pe_scheduler.py +++ b/src/kernbench/components/builtin/pe_scheduler.py @@ -163,6 +163,8 @@ class PeSchedulerComponent(ComponentBase): bytes_per_element=bpe, A_addr=a.addr, B_addr=b.addr, C_addr=cmd.out_addr, pe_prefix=pp, + a_pinned=getattr(a, "pinned", False), + b_pinned=getattr(b, "pinned", False), ) else: # Math composite diff --git a/src/kernbench/components/builtin/tiling.py b/src/kernbench/components/builtin/tiling.py index 4ee63ad..321da19 100644 --- a/src/kernbench/components/builtin/tiling.py +++ b/src/kernbench/components/builtin/tiling.py @@ -21,15 +21,22 @@ def generate_gemm_plan( bytes_per_element: int, A_addr: int, B_addr: int, C_addr: int, pe_prefix: str, + a_pinned: bool = False, + b_pinned: bool = False, ) -> PipelinePlan: """Generate GEMM tile plan: M→N→K order. Each tile follows stage sequence: - DMA_READ(A) → DMA_READ(B) → FETCH → GEMM → STORE - On last K-tile per (m,n): → DMA_WRITE + [DMA_READ(A)] → [DMA_READ(B)] → FETCH → GEMM → [STORE → DMA_WRITE] + DMA_READ(A) skipped when a_pinned=True (operand pre-staged in TCM). + DMA_READ(B) skipped when b_pinned=True. + STORE + DMA_WRITE only emitted on last K-tile per (m,n) — accumulator + stays in RegFile across K loop. Args: pe_prefix: e.g. "sip0.cube0.pe0" — used to build component IDs. + a_pinned: A operand already resident in TCM (via prior tl.load). + b_pinned: B operand already resident in TCM. """ M_tiles = max(1, ceil(M / tile_m)) K_tiles = max(1, ceil(K / tile_k)) @@ -58,23 +65,26 @@ def generate_gemm_plan( stages: list[Stage] = [] - # DMA READ: load A and B tiles from HBM → TCM - stages.append(Stage( - stage_type=StageType.DMA_READ, - component=dma_id, - params={ - "src_addr": a_addr, "nbytes": a_bytes, - "operand": "A", "tile_m": tile_m, "tile_k": tile_k, - }, - )) - stages.append(Stage( - stage_type=StageType.DMA_READ, - component=dma_id, - params={ - "src_addr": b_addr, "nbytes": b_bytes, - "operand": "B", "tile_k": tile_k, "tile_n": tile_n, - }, - )) + # DMA READ: load A and B tiles from HBM → TCM. + # Skip if the operand is already pre-staged via tl.load. + if not a_pinned: + stages.append(Stage( + stage_type=StageType.DMA_READ, + component=dma_id, + params={ + "src_addr": a_addr, "nbytes": a_bytes, + "operand": "A", "tile_m": tile_m, "tile_k": tile_k, + }, + )) + if not b_pinned: + stages.append(Stage( + stage_type=StageType.DMA_READ, + component=dma_id, + params={ + "src_addr": b_addr, "nbytes": b_bytes, + "operand": "B", "tile_k": tile_k, "tile_n": tile_n, + }, + )) # FETCH: TCM → Register File stages.append(Stage( @@ -96,18 +106,17 @@ def generate_gemm_plan( }, )) - # STORE: Register File → TCM - stages.append(Stage( - stage_type=StageType.STORE, - component=fetch_id, - params={ - "direction": "write", - "nbytes": out_bytes, - }, - )) - - # DMA WRITE: TCM → HBM (only on last K-tile) + # STORE + DMA_WRITE only on last K-tile per (m,n). The C + # accumulator stays in RegFile across the K loop. if last_k: + stages.append(Stage( + stage_type=StageType.STORE, + component=fetch_id, + params={ + "direction": "write", + "nbytes": out_bytes, + }, + )) stages.append(Stage( stage_type=StageType.DMA_WRITE, component=dma_id, diff --git a/src/kernbench/sim_engine/op_log.py b/src/kernbench/sim_engine/op_log.py index 20f9da1..9e083c5 100644 --- a/src/kernbench/sim_engine/op_log.py +++ b/src/kernbench/sim_engine/op_log.py @@ -44,11 +44,25 @@ class OpLogger: return self._records def record_start(self, t: float, component_id: str, msg: Any) -> None: - """Called by ComponentBase._on_process_start.""" + """Called by ComponentBase._on_process_start. + + Snapshots TileToken stage_type at start time so we can attribute the + record correctly even if the token advances stage_idx before + record_end fires. + """ + snap: dict[str, Any] = {} + # TileToken (ADR-0021 pipeline) — capture which stage this is. + try: + stage = getattr(msg, "current_stage", None) + if stage is not None: + snap["stage_type"] = stage.stage_type.name + except Exception: + pass self._pending[id(msg)] = { "t_start": t, "component_id": component_id, "msg": msg, + "snap": snap, } def record_end(self, t: float, component_id: str, msg: Any) -> None: @@ -57,6 +71,16 @@ class OpLogger: if pending is None: return op_kind, op_name, params = _extract_op_info(msg) + # Merge TileToken stage_type captured at record_start into params, + # and reflect it in op_name so reporting can disambiguate + # DMA_READ vs DMA_WRITE and FETCH vs STORE on the same component. + snap = pending.get("snap", {}) + stage_type = snap.get("stage_type") + if stage_type is not None: + params = dict(params) + params["stage_type"] = stage_type + if op_name == "TileToken": + op_name = f"TileToken/{stage_type}" # Snapshot data at record time so Phase 2 replay sidesteps # downstream mutations of source addrs (e.g. a tl.store that # overwrites HBM after a load handle was sent, or a slot that diff --git a/src/kernbench/triton_emu/tl_context.py b/src/kernbench/triton_emu/tl_context.py index e35ccbe..bc1984d 100644 --- a/src/kernbench/triton_emu/tl_context.py +++ b/src/kernbench/triton_emu/tl_context.py @@ -123,13 +123,14 @@ class TLContext: def _make_handle( self, addr: int, shape: tuple[int, ...], dtype: str, - space: str = "tcm", + space: str = "tcm", pinned: bool = False, ) -> TensorHandle: return TensorHandle( id=self._next_handle_id(), addr=addr, shape=shape, dtype=dtype, nbytes=self._nbytes(shape, dtype), space=space, + pinned=pinned, ) def _make_compute_out( @@ -184,15 +185,17 @@ class TLContext: actually lives in Phase 2 storage. """ self._emit_dispatch_overhead() - handle = self._make_handle(addr=ptr, shape=shape, dtype=dtype, space="hbm") + handle = self._make_handle( + addr=ptr, shape=shape, dtype=dtype, space="hbm", pinned=True, + ) cmd = DmaReadCmd(handle=handle, src_addr=ptr, nbytes=handle.nbytes) data = self._emit(cmd) if data is not None: - # Greenlet mode: attach real data to handle (preserve space) + # Greenlet mode: attach real data to handle (preserve space + pinned) return TensorHandle( id=handle.id, addr=handle.addr, shape=handle.shape, dtype=handle.dtype, nbytes=handle.nbytes, data=data, - space=handle.space, + space=handle.space, pinned=handle.pinned, ) return handle diff --git a/tests/test_pe_pipeline.py b/tests/test_pe_pipeline.py index 4d2dd35..cb7d7a6 100644 --- a/tests/test_pe_pipeline.py +++ b/tests/test_pe_pipeline.py @@ -150,7 +150,11 @@ def test_gemm_plan_stage_sequence(): def test_gemm_plan_intermediate_k_no_dma_write(): - """Intermediate K-tiles don't have DMA_WRITE stage.""" + """Intermediate K-tiles don't have DMA_WRITE or STORE stage. + + The C accumulator stays in RegFile across the K loop; STORE + + DMA_WRITE only fire on the last K-tile per (m,n). + """ from kernbench.components.builtin.tiling import generate_gemm_plan plan = generate_gemm_plan( @@ -162,15 +166,72 @@ def test_gemm_plan_intermediate_k_no_dma_write(): ) assert len(plan.tiles) == 2 - # First tile (k=0): no DMA_WRITE + # First tile (k=0): no STORE, no DMA_WRITE — accumulator stays in RegFile t0_types = [s.stage_type for s in plan.tiles[0].stages] + assert StageType.STORE not in t0_types assert StageType.DMA_WRITE not in t0_types - # Last tile (k=1, last_k=True): has DMA_WRITE + # Last tile (k=1, last_k=True): has both STORE and DMA_WRITE t1_types = [s.stage_type for s in plan.tiles[1].stages] + assert StageType.STORE in t1_types assert StageType.DMA_WRITE in t1_types +def test_gemm_plan_pinned_operand_skips_dma_read(): + """When a_pinned=True, A's per-tile DMA_READ is omitted. + + Same for b_pinned. FETCH is unaffected — it still stages from TCM + into RegFile. + """ + from kernbench.components.builtin.tiling import generate_gemm_plan + + # Baseline: neither pinned — both A and B get DMA_READ per tile. + base = generate_gemm_plan( + M=32, K=128, N=32, # K_tiles=2 + tile_m=32, tile_k=64, tile_n=32, + bytes_per_element=2, + A_addr=0, B_addr=0x1000, C_addr=0x2000, + pe_prefix="sip0.cube0.pe0", + ) + for tile in base.tiles: + operands = [s.params.get("operand") for s in tile.stages + if s.stage_type == StageType.DMA_READ] + assert operands == ["A", "B"], \ + f"baseline tile should DMA_READ A and B, got {operands}" + + # a_pinned: no A DMA_READ. + plan_a = generate_gemm_plan( + M=32, K=128, N=32, + tile_m=32, tile_k=64, tile_n=32, + bytes_per_element=2, + A_addr=0, B_addr=0x1000, C_addr=0x2000, + pe_prefix="sip0.cube0.pe0", + a_pinned=True, + ) + for tile in plan_a.tiles: + operands = [s.params.get("operand") for s in tile.stages + if s.stage_type == StageType.DMA_READ] + assert operands == ["B"], \ + f"a_pinned should leave only B DMA_READ, got {operands}" + # FETCH must still exist + assert any(s.stage_type == StageType.FETCH for s in tile.stages) + + # Both pinned: no DMA_READ at all. + plan_both = generate_gemm_plan( + M=32, K=128, N=32, + tile_m=32, tile_k=64, tile_n=32, + bytes_per_element=2, + A_addr=0, B_addr=0x1000, C_addr=0x2000, + pe_prefix="sip0.cube0.pe0", + a_pinned=True, b_pinned=True, + ) + for tile in plan_both.tiles: + dma_reads = [s for s in tile.stages + if s.stage_type == StageType.DMA_READ] + assert dma_reads == [], \ + f"both pinned should skip all DMA_READ, got {dma_reads}" + + def test_math_plan_stage_sequence(): """Math plan has READ→FETCH→MATH→STORE→WRITE sequence.""" from kernbench.components.builtin.tiling import generate_math_plan