From 5741567910ebc4068e42273b53035f8bbaedfde4 Mon Sep 17 00:00:00 2001 From: Helder Vasconcelos Date: Fri, 12 Jun 2026 16:00:34 +0100 Subject: [PATCH] Static YaRN/linear RoPE scaling + engine-level override (ABI v10) Implements rope_scaling rope_type "yarn" and "linear" on the shared DecoderModel freqs path (Llama, Qwen3 dense/MoE), unlocking Qwen3's documented 32k -> 131k yarn recipe. compute_rope_setup mirrors mlx-lm's YarnRoPE exactly; yarn's attention mscale multiplies the rope input (both Q and K, logits scale by mscale^2) so intermediate tensors stay fixture-exact against the reference. Closes a silent-garbage hole: unknown rope_type values previously fell through to unscaled RoPE; validate_rope_scaling now rejects them at load (caller thread - the worker's factory cannot throw), along with yarn/linear on hybrid (Qwen3.5), M-RoPE vision (Qwen3-VL) and GGUF freq-factor models. Adds a vLLM-style engine override (EngineConfig::rope_scaling, C ABI v10 mlxforge_engine_opts2.rope_scaling - appended, struct_size-gated, no new symbols) so yarn can be enabled on a stock checkpoint, plus --rope-scaling on the server and CLI harnesses. Golden gating: dump_ref.py gains a qwen3_yarn spec injecting the yarn recipe into the existing Qwen3-0.6B via model_config (no Hub checkpoint ships yarn); the C++ test reads the exact JSON back from the manifest and applies it through the engine's override path. New gates cover the yarn freqs schedule, mscale, mscale-scaled q/k, a linear-scaling oracle, full-forward argmax and the greedy stream; pure-logic rejection tests run without a model. MoE note: mlx-lm's qwen3_moe ignores rope_scaling (plain nn.RoPE), so MoE is gated via the shared-path unit fixtures, not end-to-end. 268/268 ctest, check-abi.sh clean (no baseline edits). Co-Authored-By: Claude Fable 5 --- CLAUDE.md | 19 +- apps/mlxforge.cpp | 5 +- apps/mlxforge_cli.cpp | 34 +- doc/supported-models.md | 12 + reference/dump_ref.py | 49 ++- reference/fixtures_qwen3_yarn/argmax.npy | Bin 0 -> 132 bytes reference/fixtures_qwen3_yarn/attn_norm0.npy | Bin 0 -> 10368 bytes reference/fixtures_qwen3_yarn/block0.npy | Bin 0 -> 10368 bytes reference/fixtures_qwen3_yarn/chat_ids.npy | Bin 0 -> 188 bytes .../fixtures_qwen3_yarn/chat_ids_nothink.npy | Bin 0 -> 204 bytes reference/fixtures_qwen3_yarn/embeddings.npy | Bin 0 -> 10368 bytes .../fixtures_qwen3_yarn/greedy_gaps_kvq4.npy | Bin 0 -> 208 bytes .../fixtures_qwen3_yarn/greedy_gaps_kvq8.npy | Bin 0 -> 208 bytes .../fixtures_qwen3_yarn/greedy_tokens.npy | Bin 0 -> 208 bytes .../greedy_tokens_kvq4.npy | Bin 0 -> 208 bytes .../greedy_tokens_kvq8.npy | Bin 0 -> 208 bytes reference/fixtures_qwen3_yarn/k_rope0.npy | Bin 0 -> 10368 bytes .../fixtures_qwen3_yarn/k_rope0_linear.npy | Bin 0 -> 10368 bytes reference/fixtures_qwen3_yarn/logits_last.npy | Bin 0 -> 304000 bytes reference/fixtures_qwen3_yarn/manifest.json | 189 +++++++++ .../fixtures_qwen3_yarn/prompt_0_ids.npy | Bin 0 -> 148 bytes .../fixtures_qwen3_yarn/prompt_1_ids.npy | Bin 0 -> 144 bytes .../fixtures_qwen3_yarn/prompt_2_ids.npy | Bin 0 -> 172 bytes reference/fixtures_qwen3_yarn/q_pre0.npy | Bin 0 -> 20608 bytes reference/fixtures_qwen3_yarn/q_rope0.npy | Bin 0 -> 20608 bytes .../fixtures_qwen3_yarn/q_rope0_linear.npy | Bin 0 -> 20608 bytes reference/fixtures_qwen3_yarn/rope_freqs.npy | Bin 0 -> 384 bytes reference/fixtures_qwen3_yarn/rope_mscale.npy | Bin 0 -> 132 bytes .../fixtures_qwen3_yarn/tokenizer_corpus.json | 392 ++++++++++++++++++ reference/fixtures_qwen3_yarn/v0.npy | Bin 0 -> 10368 bytes src/capi/mlxforge.cpp | 3 + src/capi/mlxforge.h | 22 +- src/core/config.cpp | 93 ++++- src/core/config.h | 27 +- src/model/decoder_model.cpp | 103 ++++- src/model/decoder_model.h | 27 +- src/runtime/engine.cpp | 28 +- src/runtime/engine.h | 16 +- src/server/config.cpp | 14 +- src/server/config.h | 8 +- tests/CMakeLists.txt | 3 + tests/capi/capi_test.cpp | 42 ++ tests/model/qwen3_yarn_test.cpp | 89 ++++ tests/model/rope_scaling_test.cpp | 221 ++++++++++ tests/support/model_fixture.h | 24 ++ tests/support/reference.h | 12 + 46 files changed, 1368 insertions(+), 64 deletions(-) create mode 100644 reference/fixtures_qwen3_yarn/argmax.npy create mode 100644 reference/fixtures_qwen3_yarn/attn_norm0.npy create mode 100644 reference/fixtures_qwen3_yarn/block0.npy create mode 100644 reference/fixtures_qwen3_yarn/chat_ids.npy create mode 100644 reference/fixtures_qwen3_yarn/chat_ids_nothink.npy create mode 100644 reference/fixtures_qwen3_yarn/embeddings.npy create mode 100644 reference/fixtures_qwen3_yarn/greedy_gaps_kvq4.npy create mode 100644 reference/fixtures_qwen3_yarn/greedy_gaps_kvq8.npy create mode 100644 reference/fixtures_qwen3_yarn/greedy_tokens.npy create mode 100644 reference/fixtures_qwen3_yarn/greedy_tokens_kvq4.npy create mode 100644 reference/fixtures_qwen3_yarn/greedy_tokens_kvq8.npy create mode 100644 reference/fixtures_qwen3_yarn/k_rope0.npy create mode 100644 reference/fixtures_qwen3_yarn/k_rope0_linear.npy create mode 100644 reference/fixtures_qwen3_yarn/logits_last.npy create mode 100644 reference/fixtures_qwen3_yarn/manifest.json create mode 100644 reference/fixtures_qwen3_yarn/prompt_0_ids.npy create mode 100644 reference/fixtures_qwen3_yarn/prompt_1_ids.npy create mode 100644 reference/fixtures_qwen3_yarn/prompt_2_ids.npy create mode 100644 reference/fixtures_qwen3_yarn/q_pre0.npy create mode 100644 reference/fixtures_qwen3_yarn/q_rope0.npy create mode 100644 reference/fixtures_qwen3_yarn/q_rope0_linear.npy create mode 100644 reference/fixtures_qwen3_yarn/rope_freqs.npy create mode 100644 reference/fixtures_qwen3_yarn/rope_mscale.npy create mode 100644 reference/fixtures_qwen3_yarn/tokenizer_corpus.json create mode 100644 reference/fixtures_qwen3_yarn/v0.npy create mode 100644 tests/model/qwen3_yarn_test.cpp create mode 100644 tests/model/rope_scaling_test.cpp diff --git a/CLAUDE.md b/CLAUDE.md index 2191a4e..3b178a9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -143,10 +143,21 @@ reference/.venv/bin/python reference/dump_ref.py still-unimplemented families (e.g. Unigram/WordPiece). - **Masks are additive fp16, never boolean** (avoids MLX bug #2894). See `DecoderModel::batch_mask`. -- **RoPE is llama3-scaled** — `compute_rope_freqs` mirrors `mlx_lm`'s - `Llama3RoPE` exactly and feeds `fast::rope` via `freqs` (base disabled). It's - validated against `reference/fixtures/rope_freqs.npy`; don't "simplify" the - math. +- **RoPE scaling is precomputed and validated, never silent** — + `compute_rope_setup` mirrors `mlx_lm` exactly (`Llama3RoPE`, `YarnRoPE`, + `nn.RoPE(scale=1/factor)` for linear) and feeds `fast::rope` via `freqs` + (base disabled); gated against `reference/fixtures/rope_freqs.npy` and + `reference/fixtures_qwen3_yarn/` — don't "simplify" the math. Two conventions + matter: yarn's attention **mscale multiplies the rope *input*** (both Q and + K, so logits scale by mscale² and the KV cache stores scaled K, exactly like + mlx-lm — folding it into the SDPA scale instead would desync the + q_rope0/k_rope0 fixtures), and **unknown `rope_type`s are rejected at load** + (`validate_rope_scaling`, run on the engine's caller thread — the worker + thread can't throw) rather than falling back to unscaled RoPE. The + engine-level override (`EngineConfig::rope_scaling`, ABI v10) fully replaces + the checkpoint's config and is re-applied inside `make_factory` on the + worker thread; keep the two applications identical or the factory can throw + where it must not. - **Decode-with-cache vs full-recompute logits differ by fp16 accumulation order** — compare argmax / exact tokens, not raw logits at tight tolerance. - **Quantized KV (kv_bits 8|4) mirrors mlx-lm's QuantizedKVCache** — triplet diff --git a/apps/mlxforge.cpp b/apps/mlxforge.cpp index 36b8afc..3f330b4 100644 --- a/apps/mlxforge.cpp +++ b/apps/mlxforge.cpp @@ -81,6 +81,8 @@ void print_help() { " --prefill-chunk interleaved-prefill chunk size in tokens, 0 = monolithic\n" " (default 256: decode keeps streaming during prefills)\n" " --skinny-mm <0|1> multi-row GEMV decode kernels for small batches (default 1)\n" + " --rope-scaling RoPE-scaling JSON override (vLLM-style), e.g.\n" + " '{\"rope_type\":\"yarn\",\"factor\":4.0}' (default: checkpoint's)\n" " -h, --help show this help and exit\n" "\n" "The model may be given via -m or the config file's \"model\" key.\n" @@ -88,7 +90,7 @@ void print_help() { "Env vars: MLXFORGE_HOST, MLXFORGE_PORT, MLXFORGE_MAX_CTX, MLXFORGE_MAX_WAITING, " "MLXFORGE_KV_BUDGET, MLXFORGE_KV_BITS, MLXFORGE_PREFIX_CACHE, MLXFORGE_KV_BLOCK, " "MLXFORGE_KV_POOL, MLXFORGE_KV_SPILL_DIR, MLXFORGE_KV_SPILL_BYTES, " - "MLXFORGE_PREFILL_CHUNK, MLXFORGE_SKINNY_MM."); + "MLXFORGE_PREFILL_CHUNK, MLXFORGE_SKINNY_MM, MLXFORGE_ROPE_SCALING."); std::fflush(stdout); } @@ -148,6 +150,7 @@ int main(int argc, char** argv) { ec.kv_spill_bytes = sc.kv_spill_bytes; ec.prefill_chunk = sc.prefill_chunk; ec.skinny_mm = sc.skinny_mm; + ec.rope_scaling = sc.rope_scaling; engine = std::make_unique(std::move(ec)); } catch (const std::exception& e) { mlxforge::log::error("model error: {}", e.what()); diff --git a/apps/mlxforge_cli.cpp b/apps/mlxforge_cli.cpp index 2fbdfca..57e17d5 100644 --- a/apps/mlxforge_cli.cpp +++ b/apps/mlxforge_cli.cpp @@ -7,11 +7,14 @@ // - Loads a model's weights from the supplied directory, prints key/shape/dtype for each tensor, // asserts that all tensors are fp16, and reports the peak resident memory used. // mlxforge-cli generate [max_tokens] [--logprobs [N]] [--kv-bits N] +// [--rope-scaling ] // - Runs greedy single-stream generation: pre-fills the prompt (as raw text using the chat template // or as a pre-tokenized .npy of ids), then streams the detokenized text to stdout until EOS or // max_tokens. With --logprobs [N], each emitted token's log-prob (and its N most-likely // alternatives) is printed to stderr after generation; stdout stays the generated text. // --kv-bits 8|4 stores the KV cache quantized (the manual harness for the quantized path). +// --rope-scaling overrides the checkpoint's RoPE-scaling config with a JSON object +// (vLLM-style), e.g. '{"rope_type":"yarn","factor":4.0}' for long context. // mlxforge-cli bench [max_tokens] [runs] // - Repeatable throughput benchmark over a fixed prompt: one discarded warmup run, then `runs` // timed runs (defaults: max_tokens=128, runs=3) reporting time-to-first-token and decode tok/s. @@ -77,11 +80,15 @@ struct LoadedModel { }; // Resolve a model spec and load it for single-stream inference, dispatching on -// whether it resolves to a GGUF file or a safetensors directory. -LoadedModel load_for_inference(const std::string& spec) { +// whether it resolves to a GGUF file or a safetensors directory. `rope_scaling` +// optionally overrides the checkpoint's RoPE-scaling config (the CLI bypasses +// Engine, so the override is applied here; model construction validates it). +LoadedModel load_for_inference(const std::string& spec, const std::string& rope_scaling = "") { const std::string resolved = mlxforge::resolve_model_dir(spec); LoadedModel lm; if (mlxforge::is_gguf_path(resolved)) { + if (!rope_scaling.empty()) + throw std::runtime_error("rope_scaling override is not supported for GGUF models"); mlxforge::GgufModel g = mlxforge::load_gguf_model(resolved); lm.cfg = g.config; lm.tok = mlxforge::Tokenizer::from_gguf(g.tokens, g.merges, g.token_types, g.pre, g.bos_id, @@ -89,6 +96,8 @@ LoadedModel load_for_inference(const std::string& spec) { lm.model = mlxforge::create_model(std::move(g.config), std::move(g.weights)); } else { lm.cfg = mlxforge::ModelConfig::from_file(resolved + "/config.json"); + if (!rope_scaling.empty()) mlxforge::apply_rope_scaling_override(lm.cfg, rope_scaling); + mlxforge::validate_rope_scaling(lm.cfg); lm.model = mlxforge::create_model(lm.cfg, mlxforge::load_weights(resolved, lm.cfg)); lm.tok = mlxforge::Tokenizer::from_file(resolved + "/tokenizer.json", lm.cfg.bos_token_id, mlxforge::chat_format_from_model_type(lm.cfg.model_type)); @@ -188,9 +197,10 @@ std::string show_token(const std::string& s) { // `top_logprobs` mirrors the engine knob: -1 = off; 0 = each token's own log-prob; // N > 0 = also its N most-likely alternatives (printed to stderr after generation). int run_generate(const std::string& spec, const std::string& prompt_arg, int max_tokens, - int top_logprobs = -1, int kv_bits = 0) { + int top_logprobs = -1, int kv_bits = 0, + const std::string& rope_scaling = "") { // Resolve and load the model (GGUF file or safetensors dir; downloads if needed) - LoadedModel lm = load_for_inference(spec); + LoadedModel lm = load_for_inference(spec, rope_scaling); mlxforge::DecoderModel& model = *lm.model; mlxforge::Tokenizer& tok = lm.tok; const mlxforge::ModelConfig& cfg = lm.cfg; @@ -466,15 +476,17 @@ int main(int argc, char** argv) { if (argc < 4) { std::fprintf(stderr, "usage: mlxforge-cli generate [max_tokens] " - "[--logprobs [N]] [--kv-bits N]\n"); + "[--logprobs [N]] [--kv-bits N] [--rope-scaling ]\n"); return 2; } // Positional [max_tokens] (default 64), an optional --logprobs [N] flag (N - // alternatives, default 0 = the chosen token's own log-prob only), and an - // optional --kv-bits N (0 = fp16 cache, 8 or 4 = quantized). + // alternatives, default 0 = the chosen token's own log-prob only), an + // optional --kv-bits N (0 = fp16 cache, 8 or 4 = quantized), and an optional + // --rope-scaling JSON override (vLLM-style, e.g. yarn for long context). int max_tokens = 64; int top_logprobs = -1; int kv_bits = 0; + std::string rope_scaling; for (int i = 4; i < argc; ++i) { const std::string a = argv[i]; if (a == "--logprobs") { @@ -492,11 +504,17 @@ int main(int argc, char** argv) { std::fprintf(stderr, "error: --kv-bits must be 0, 4, or 8\n"); return 2; } + } else if (a == "--rope-scaling") { + if (i + 1 >= argc) { + std::fprintf(stderr, "error: --rope-scaling needs a JSON value\n"); + return 2; + } + rope_scaling = argv[++i]; } else { max_tokens = std::stoi(a); } } - return run_generate(argv[2], argv[3], max_tokens, top_logprobs, kv_bits); + return run_generate(argv[2], argv[3], max_tokens, top_logprobs, kv_bits, rope_scaling); } if (cmd == "image") { // Vision-language generation: describe / answer about an image. diff --git a/doc/supported-models.md b/doc/supported-models.md index d36b666..812f74b 100644 --- a/doc/supported-models.md +++ b/doc/supported-models.md @@ -33,6 +33,18 @@ the **ChatML** chat template (with an `enable_thinking` toggle for Qwen3's reasoning mode), and single-digit number pre-tokenization in the byte-level BPE. Qwen3 has **no BOS token**. +**RoPE scaling.** Safetensors checkpoints may ship a `rope_scaling` config: +`llama3` (Llama-3.2's rescaling), **`yarn`** and **`linear`** (long context — e.g. +Qwen3's documented yarn recipe takes its native 32k window to 131k) are +implemented and golden-gated against mlx-lm (`reference/fixtures_qwen3_yarn/`); +`default` means unscaled. Yarn/linear can also be *forced onto a stock +checkpoint* via the engine-level override (`mlxforge_engine_opts2.rope_scaling`, +the server/CLI `--rope-scaling` flag), e.g. +`'{"rope_type":"yarn","factor":4.0}'`. Anything else — unknown types +(`dynamic`, `longrope`), yarn/linear on hybrid (Qwen3.5) or vision (Qwen3-VL) +models, or on GGUF checkpoints — **fails at load** with a clear error; there is +never a silent fall-back to unscaled RoPE. + **Qwen3 MoE** models (e.g. 30B-A3B, 235B-A22B) run end-to-end too. They share the dense Qwen3 attention (QK-Norm) and ChatML tokenizer; the only delta is the feed-forward block. On the MoE layers (selected by `config.json`'s `num_experts`, diff --git a/reference/dump_ref.py b/reference/dump_ref.py index 543f9b6..11d8080 100644 --- a/reference/dump_ref.py +++ b/reference/dump_ref.py @@ -22,6 +22,7 @@ import os import mlx.core as mx +import mlx.nn as nn import numpy as np from mlx_lm import load from mlx_lm.models.base import create_attention_mask, create_ssm_mask @@ -49,6 +50,26 @@ "chat_messages": [{"role": "user", "content": "What is the capital of France?"}], "thinking": True, }, + # YaRN long-context gate: the SAME Qwen3 weights with Qwen's documented yarn + # recipe injected via model_config (no checkpoint on the Hub ships yarn in + # config.json, so it is injected on both sides — the C++ test reads the exact + # object back from this manifest and applies it through the engine's override + # path). Gates the yarn freqs schedule, the mscale-on-input convention, and + # the scaled forward end to end against mlx_lm's YarnRoPE. + "qwen3_yarn": { + "repo": "mlx-community/Qwen3-0.6B-bf16", + "fixtures": "fixtures_qwen3_yarn", + "compute_dtype": mx.float16, + "chat_messages": [{"role": "user", "content": "What is the capital of France?"}], + "thinking": True, + "model_config": { + "rope_scaling": { + "rope_type": "yarn", + "factor": 4.0, + "original_max_position_embeddings": 32768, + } + }, + }, # Qwen3 MoE shares the dense Qwen3 attention (QK-Norm) and ChatML tokenizer; # only the feed-forward block differs (sparse expert routing). The smallest # MoE checkpoint is 30B-A3B; the 4bit repo keeps the download manageable. @@ -536,7 +557,10 @@ def main(): os.makedirs(FIXTURES_DIR, exist_ok=True) print(f"loading {MODEL_REPO} ...") - model, tok = load(MODEL_REPO) + # model_config (e.g. an injected yarn rope_scaling) updates config.json before + # the model is built; the manifest records it so the C++ test injects the + # exact same object through the engine's override path. + model, tok = load(MODEL_REPO, model_config=spec.get("model_config")) if COMPUTE_DTYPE is not None: model.set_dtype(COMPUTE_DTYPE) mx.eval(model.parameters()) @@ -549,6 +573,8 @@ def main(): "greedy_max_new": GREEDY_MAX_NEW, "arrays": {}, } + if spec.get("model_config"): + manifest["model_config"] = spec["model_config"] def save(name, arr): """Eval an MLX array (or accept a numpy array) and write it as .npy.""" @@ -627,15 +653,30 @@ def save(name, arr): k = attn.k_norm(k) q = q.transpose(0, 2, 1, 3) # (1, n_heads, T, head_dim) k = k.transpose(0, 2, 1, 3) # (1, n_kv_heads, T, head_dim) - # The precomputed `_freqs` is specific to the llama3-rescaled RoPE; plain-RoPE - # models (Qwen3) lack it. The front-half intermediates are dumped for both. + # The precomputed `_freqs` is specific to rescaled RoPE (llama3, yarn); + # plain-RoPE models (Qwen3) lack it. The front-half intermediates are dumped + # for both. YarnRoPE additionally carries the attention mscale it folds into + # the rope input — dumped so the C++ side gates the same convention. if hasattr(attn.rope, "_freqs"): - save("rope_freqs", attn.rope._freqs) # (head_dim/2,) llama3-rescaled freqs + save("rope_freqs", attn.rope._freqs) # (head_dim/2,) rescaled freqs + if hasattr(attn.rope, "mscale"): + save("rope_mscale", np.float32(attn.rope.mscale)) save("q_pre0", q) # pre-RoPE queries (post q_norm for Qwen3) save("q_rope0", attn.rope(q)) save("k_rope0", attn.rope(k)) save("v0", v) + # Linear-scaling oracle, piggybacked on the yarn dump (no separate fixture + # dir): mlx_lm's rope_type "linear" is nn.RoPE(scale=1/factor); apply it to + # the same committed q_pre0/k_pre0 tensors so the C++ linear freqs path has a + # true fixture-to-fixture gate. + if spec.get("model_config", {}).get("rope_scaling", {}).get("rope_type") == "yarn": + factor = spec["model_config"]["rope_scaling"]["factor"] + lin = nn.RoPE(q.shape[-1], traditional=False, base=model.args.rope_theta, + scale=1.0 / factor) + save("q_rope0_linear", lin(q)) + save("k_rope0_linear", lin(k)) + # Block-0 output: exactly what LlamaModel.__call__ computes for layer 0 # (gates the single decoder block). mask = create_attention_mask(embeddings, cache=None) diff --git a/reference/fixtures_qwen3_yarn/argmax.npy b/reference/fixtures_qwen3_yarn/argmax.npy new file mode 100644 index 0000000000000000000000000000000000000000..2c78aa490c220edb847af559d0e7872f3ebbcdfd GIT binary patch literal 132 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWC%^qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= ZXCxM+0{I$-I+{8PwF(pfE_;0j1^~i^8_56w literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/attn_norm0.npy b/reference/fixtures_qwen3_yarn/attn_norm0.npy new file mode 100644 index 0000000000000000000000000000000000000000..6feb9feff238c1be8c3ad7bf70da2abc8504dbe1 GIT binary patch literal 10368 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 literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/block0.npy b/reference/fixtures_qwen3_yarn/block0.npy new file mode 100644 index 0000000000000000000000000000000000000000..a59a7ab709c391b1e10800c9d971e8d8fa0efe99 GIT binary patch literal 10368 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 PDv~$$nX-h^SP%Yx>5P6; literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/chat_ids.npy b/reference/fixtures_qwen3_yarn/chat_ids.npy new file mode 100644 index 0000000000000000000000000000000000000000..1a84f69cb22065a0a8c034b28fd5e623f8e10db1 GIT binary patch literal 188 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 literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/greedy_gaps_kvq4.npy b/reference/fixtures_qwen3_yarn/greedy_gaps_kvq4.npy new file mode 100644 index 0000000000000000000000000000000000000000..d52d79181c42444e9592d9e8f275d7b0e6532db1 GIT binary patch literal 208 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$720EHL3bhL411<)J8FmZ|6M$I7o`K;K5ElU1K@JQJ%?=CqoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$720EHL3bhL411^RJb_WKA1-1+f-|QI}B!TRAK)S$=fuRq`mH^@yAQo_7 iXqXJdJAmv2I|hecKsp47bAi|Zh{GHh4(tQcH|zjwaV$mv literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/greedy_tokens.npy b/reference/fixtures_qwen3_yarn/greedy_tokens.npy new file mode 100644 index 0000000000000000000000000000000000000000..b60e9cf4b442f4ed1186f9e17012c1cca48069db GIT binary patch literal 208 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWC%^qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$720EHL3bhL411@`g1_oXR1_lQv1_mc71_oUO+y_wx1^`f{Bw7Ff literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/greedy_tokens_kvq4.npy b/reference/fixtures_qwen3_yarn/greedy_tokens_kvq4.npy new file mode 100644 index 0000000000000000000000000000000000000000..86f51a60e451185b881e9c1c02c41666b4cac7e5 GIT binary patch literal 208 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWC%^qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= kXCxM+0{I$720EHL3bhL41Fky^3=9H5%n!xfNNjS%09h~{RsaA1 literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/greedy_tokens_kvq8.npy b/reference/fixtures_qwen3_yarn/greedy_tokens_kvq8.npy new file mode 100644 index 0000000000000000000000000000000000000000..2f62557cdffef872a621245b0a32c066840a12d1 GIT binary patch literal 208 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlWC%^qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$720EHL3bhL411@`g1_oXR1_lQv1_mc71_o@;0{}b-BcuQT literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/k_rope0.npy b/reference/fixtures_qwen3_yarn/k_rope0.npy new file mode 100644 index 0000000000000000000000000000000000000000..2ac3071d31edfa9ddabdef175cbffa116ca8e3d3 GIT binary patch literal 10368 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 literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/logits_last.npy b/reference/fixtures_qwen3_yarn/logits_last.npy new file mode 100644 index 0000000000000000000000000000000000000000..178360ca4c25087fb43c5fa34ca4d1e337d26ae3 GIT binary patch literal 304000 zcmbT7<(Je*xW;jJ7@Waa!Fu1$BE$*g^UP>CXz+xA;~P3_HDrdwHjJv( zaL8}tCywtwrtfd#2Mzw;^K$=D69$LRPZ-vJ?BMWmqnM~#F$pn_xWvX$wPw}&|9p!5 zCOJJL#4PEN%)tHfYB`98$W`kfO8P2o_2i-`>9sUhijYU37pRK-0F_0{(LzrZxstF2 z4HPw}X4B*YQN}s)DdC4uDydeJ zPma>ywqDvSWnM8p;+uih+D*LQ`$L=Nn9g6p4!tuh=B*1B!D7jmb5?|e&?d6kh|Ha5 zl%&cYdtc}6vmP8ZjJ*zl=W^JduGQj+l8U^2I$h)x5SG_gMVO-6Z?EClYA*H=Ru?C>mxo8O{FV z-wL+72g&~u!&vgB5L+m`-h;H&Ek`~9)%^zvIU|&mCF7YA9MR`8kLUOrF z#rL!(dN$%2c&0GK1H$i0HBS`V*MJ=ZM;~C<+Oz-I3(8Qd_o95ce*0+?uwp+TD}9B`Udy*1TXs>t`n2VY}^{xqg8QZ z4;xr=awEEsz`_XBDl~y#B6Yz5^$r^9X{nU4BDNDP(f$l^RtxE}xiaT3Eo2oI_giVq z9$^yrDzRc`W1uzK*v!wDlF=!>oOD*dwzXwKPr1B%4+`LXzWwS|zaf{@YS4eJ-S!VC zA)x@$>;EY<@hp%N;gvwO%%q97>y0WDmfs)7vJ!WHD3GZv68p@0xPHh@10ryl8 z!yc4t*nVj}g^;}XyWX2L+c$LVU4c^=J=t4PX;uLADaHaJ)KhR3Vb?Ss*Dsk3zlCPEpWqU#aeEt;)LIWIukGGlz83?!xva zmh%{y*kv{i%!WnqFH}ZW&?|GYy}B))$?x7IKg`Oueg>~+#=;ceMbJ@6@?TJz2}|PF z2_~8)6!Tl)m}9OKLPf+r#`}!k#&rCbc9y*7LfRlt54MopN@$P2yGMx`>{{Fe7WWhn zDA~i<9nuo0k@nnYPphOQ=$&v8r7E1KXHE-)-W@!#*Yhx>6k=&xN3QiBmyD{bGI+xYwtMavezN&W7vth{Mjc&5cG-65(R8G- zo|~lH;|D1M{?9kh{Kw_bTCH3n`@sNnf6Q8Oi0C1HRLrx+HIjcKF1D33{=ygSue26c zdW$8};qY7dQy69v(v}=Fx`wh{wh(oez#DN1>!8?Qm?-T>CQ|~=<`zj&5PE6Ob33Qz zPqMkQ-~(-~Fxyz{?QGVR%Nj$N`OE@oh_kq7sWcI0i&v!DzV6<`o@7#=_=F@<6xDOD zrE}EEVxp@pIg1X;Ii4*B=Ks#@>R)4Cl;ipO-XEx#kU#6Gv4WeYZ??uVJ@w7tld{76 zXfBc+TEI=smSS7l4P}{*q+W6gH!HXy&R}|Tcl}us53i`7j5ZxY*Sw>_Q~ z@k$x`yO{X_de#=)W%=_}L3^E~^tJQ>)` z(n@}&u=}lEMt+Rqz`xmjne@bGwmoE}Fg|IlPxsGmYMLG0d3`zjRQxUJm+%Mp7yK*j z6Y_YfaARaqU(E0Kw$_rZD?z7l6kU@qG5zFqR3k2pVTVa|L$igR+7t4fZ)Bu+#)!X* zH8?x%hicL^&4p{Y%j)B3j~tCmCR=mclF?dg)Lm)?ryOW#f2~}#wIqDbl%UD<3B05W z`Mt_yknJvsZ-RC9{l+Z>wO{b2C~AaqgCNrAlQBj6lZRt*W6ym0hE|l$5YDvjGWeN@^f0>u|#;p?X(BXBar0_ z((YLmU99$@WQfvdfPH=ws9}Ww>tznkn8F${37rjC?gVs&DKO zy28&PEN+k7C}=fLn@w6UE_B+xnU0{R*o~+S-K8vdM~7;lMJNTXMTv45dfYl@ujpz7 zqV$=;aZwf=q-_%=HjytFDxy!t)dfLprX@EmV?cPo>Gus4S30i8{vtb3Z+V=&qjpL0 zi`ic&?pb7R$~qE!nfaFpSU{rbbrZ3=zfSH`vf44(as!9NNr0F~gGwySD@oX%bsZT- z2ed~2#BL#*$uD^)=;>NZ8#gEsXzX)r;bQ)(_jB+Nn?#f8R8LbbuYAqk+Bqj<7&=b&qN~O#{)qF4 z>|@htG*g1(e6HMy;7_TN`uo9Uj+KJw-o;c8t@SviLbhlU#hr<->-;5i@CbC`kE8?X z&CYd?mCpxfl4F5-q>2>;TG|L{xPA#V#S-X2t|cZ#vGK=g9F33dW=qFMpw5=_>@zNy z&p>N`3tvHvRjDvJcvDCLmfW8GXg-Di`G=5J>?-?a&v!?hIW@FfN#H?3vD6prbzh{^ z)AO@QTj*kTGo!paP&@l?bRS%f^LeV6b7%>KMJM6_G^YjQwA&;`iu5oVXDe)N;37Q} zr4#lj$8B38eHAlLYnbp}jW+v}tsoWG!3%}$U^U4fO!AL4SD*voD!x)^K&J&Zhy@eh zx$nS2_RZ3fW@puI##*fctV>R?wc_)s^-uv8(7XKBQ=Rbc>}Yi@Ucx<2oM|i#G}5-K z>$!mWUJkh5=>4?4uYeKIPDCHc$HWZKPl!-7;SIcFwn2Z8jiezQ?|tcQRqd5AUOI0no@V5@cd_FjJ&B9p z&t#2J3nUAp$dBxK^a$D)*l*qv>Sw)z+euxTf%b&lzA|QYGd3gat|*(cNpU+IYFyn-o*(y6#G=J&6IUNrHb2ndO* zxBlgfC~s^2pR&yxNquf8|7WaD>L=Uf-KkG#L;Q?uqgQpDWTv?_`bgcU-ZRgLTeuPN zHE~;SlF%CU^{y6HX~?rljm$kORiQmulD5Z@+gZ4Cbepn6G(C_)z(R`qyc3*xAIOkVSRoE9CXKuacVU4R1w@R5~?LtF5cYrATMK^mtczt1SvLv`OeBHUu zBB|}9%R*bLCqBU^N)?^O!jAd_cg4End&x~A1Kek%o%BuCHtB-p1365(-xgew)gyDP z@P>{GT?GClJB|TA{0-m+?1e=^3p52>SDpmoG?T8RmyD>SBw7O$0Zqh_=ERuRW*n*O zZe~4^kFrJCx$sv3C8Ok|N5u>5eBW@cN?8DIs zm_gdoPwe)bhVErF1sAX$I|IgupbL!0-I)FyH1~MR0&iv)eIY0z-U?nK2hlw3qOwkX zqGStKNCW*KQ$%{~Tqu2xNmOn(UvzvpdkoeHtrlRgI{(_c8&^zy7PVF>-E6m>8C)bC zVQA&iVoX4~oalviu z4F6VRlV^#s7;Ex2E5BgiMy|rPo2UZ?(kOPfeUIm6`ZVwt?vH0>?Teq5Qw-J0{Y$(H zmZ(p(WzpTGE&64qFPWyOxRB|U(xq$4P@yNKq;h7x#58Mc;y=tGYd^X|hvcM_6XDf9 z1r*)kDh#8{cMbNN>&-j#1$&+=K)0c%&>bDnJ&FU)^X^4JYA=)v$T8K7&4F~Gp5twF zU-w#R6Us~Sd8;U2rCjpG{J~EYMo5ccF*l*Fk3F)|m5$~fP|?wmU&XLsF7}aL@vDg24|1;p;#?XZd(zFX)X1xu)xYrobffT8NahjQY}g^||&mtN=FB z^=N~z$9^DO>8~&!!9%7yj&ZDZ`h~|#eP4ueS)1+JU`Ujrj@&T18ZKiFq3=AZe^KC1 zp3>g<3(@YNxz(R9=sfFKgNlF+zC6Mo#)m)$&nj>XaoSU}J6eWjg_=716WQ?-B@!1J zEPtiHf-j6n^eR9lR{GAiLjT$)`C8dd+n0zj{A`@&IN(9*0I| zmQ&WDRNRp}3ePZi`9h&_C=^&m&kIe>Jm_!2kkPKUWLNwK+7aFbtI;cR&L`@VttRFp z^Q|ut-!f;R+NguH#@m{>g*%i%zXGpf8iA{94a4UsDOAWT0=nSc!Sd!wVcHHj1o18W1W3CQ&w$|JsU@w-GrN5 zKSyc+YkJX}|)pevdGODIBi7f3jUj!R96COkYw!109WH;GOY^5yXDk=LT~N%Ga$6El zF0k45DfnSRd$v4YChrnDV>tAFRPtZ1>J+k#2R9zv6`J~&h!80BlIY3Lc8F} z@@cwENw*Jj=SU@RL#C$L!n+W+HuiEqxHxj#Ttv3VJjLJnVQ7Tj&Fle2Sq+29(lq-* zI>0-}%#Tu}C^D7SX9qGPtU|Q3r=-;0^IAM{vPR-O&dX`mnBZ(jG~OdU6H?Wy{9DHj zE5z9zRX-(G}(h+E6&F>-ah9Am^33B%EWXfx+yX zgbvDWagBadpUF1!%?q#Y)1>EM2^^{IG+WXWLjKG@#71fjbY99v2mC|jZ-Nx;OsB%# z?#J3kXzJzAdQyO0!3ZFt{`6nq)q8PgrE_7I>lQ$u5SSSNun*JOv8nN-ge+n4WCN7ft_R>!5$-+Mct_N_aTu&y!oE zkxZYo-2xG#&?Ru0S$XWZ@W4FHUq-)qHloAkee^}^qJ4>5l`(+dVAeXd7BbS@;8ddx zx(g^QrlnXsm?t+*+v-^zy-zJCa3?wmi*Q10FLK#PL_N?h(9r04suw>;nXdfSe1SBO zX)jL-JDR?7bx#G<0c=jF4Z5IKU=5fP+c@pBu$t}5*p+&i=)a^{fxJm&{4RMrjSIHW z3&0h@bgs8CgA;ABv?r{9>yj$=wKxO4g=^&c}yKIS*C4>Ie1TGHPgx`G>hjWEP#lta;ivN8^q8#1D>gT<|*0QOd)ban*C1 zYE6W@uqHU7AM`Nhk)}5iR!eKt+R9FSxUVKEr}Fe6dK>%FdZzUQy%UQ`EY~mWhd$%k zY)fr#{4_LE$YYeS%7{k-HH@U-5UGIJz;)kP8C^D5Gc^}If)#NrxQZ{+?anTAoOh<- z!lR`=Rv%QrZ3@}if8Z}vk6RCp8-2BELLvMfjg;>5ujwYRQDU>Rg$L*v{Y*Jf$X-fR z*$SRazE|!~+KT?LM)A+|?`j$S4TH1dM-Kwo*-%M^ zr_BVR9bMyDV*g4C20CROc3@Znz9N6awYaBNJ6KW5uoV)2r~?DFYZR1j;Y2CkH^|qB ze)AlHsor0~GAtERwJ*LnXb9IO*60Cu`d?c)X|p&sv!YrVPKznb=dg{KuGVw6pU&6w zsY`_j?a9fXiS5NC)G+u-sLJj4@78}>b@UC|5bN6hvuqpZDRDYzA+9=6ovWfukuN7! z(9@(?v8C{vwWHAyXI1pf`#1N)pJo(NGr$9Olr>teO2=#K-~hTHb8=>JJd%GK&IE>- zm3>{+RO1HSh~p9mgB;X52B2+>D5*Z0Ro7YykMYZeR;Zi(P>>-TgvqG3xz|+Wf@HdW zg{;y?2mqBO(PkySmYx*%FKI&dguPvqSio#d*N{?1F>=hAnP#V>VGH>n(>D;Uq;oao zesUWo&RpW}$<1~(#V5pZ@*r2ftjWRwKF-JpG?jh^d&v3NX3SCTG#P7+b63uI1a|AE za(YTtv;;5!PGJ^^`NN82y}gbxTPcSUQZ8$fCkg(JW}-jwLne-hd}nSWtoOw8~G)2N24a2@CrX`s6my^G?w18g2ga`QN2m(9ktqitQcgoo(p z$>M>K@NrYAP=KHkE!pu-t#|Eou zIC;FPw+y_oyU9Z|-MXjjXTTv1rcb(R{+&zMhUHTVeLb2Mf~F?(>45XA)@kA=?q z8U(=>_8;$dt^rGl#tfs&awmH?2AZMMaFwtd7WC%_>)|V*wDy`QhVuAp<_w4PlLoVs zNRB6#{VF9%jkB+TAFv=f4dzSr@NwhM%t!J>^|;wk7+@rs&?>{EsqPh7Q7WNv@%Z8(p1^ADT8awz_4Xo2#3 zrUKr{-xI6-k>Tv%TPmFnSL=7;cE_>o6y}*&I&{Xh1ETC`l&;3fsi7Z2bFfU?M#hVe zNvbq2`WZcyK9_HcTML80V5^_$A<>>2?4P#5cxc8XcRC!$ObzEPdC@BnYrP~-@I0~{b)51ZiS|Y_Ay!DGn_&v!A(|8F&V7zP6d7F3Mq=IjrZYdxE}wdSw6G4 zi&JZZ=tx5p(P|)pM!2s(3;k06Mn9Ct0;F!{Zq5<*lUhM}XH+9KtrTpavv>yM5^u&c ze3UEFH_nWPql}5RJKh4)2zfKeW=i6YWUVjR-WX2u4yR2#w}TO$UU;&-LT-d~L%V0& zFX!VMqcTDz8$fNzSZedvhmV@|SNa*fg;#tZ$)l`^9~bvcKP(P_bsRksIQN>S5t$_r zb=idB+5^E04)QDT7sbuZm2}x|9|3 zs2x_)FZ5hywxwqNW&WUr*({R>PIaI1-96Q_%2`dGZ%q9d0>U*R!8b6IUciOhnL9ZYXPoaF0~Wr3J)x zcqcB6VsSvqv3?q#xXb<{AQo)YZZX9Hk)w?9=0>~Sw8{O$9g$2`5uWTefd9G$I^;tEo-@ghe>SX8fU#0Z5l8U3;lR2oS~p&w6y z8%bhV;U9-P{P*D;?y~QFxGMj|-Hl4d8&KAoBjj~$HwJin&{Du5kC9u^=H7nv5+^%q zH2E$53HoICqTjMEx`_RNb=02?Iv7&j9*@e3C7JS4Dp91oFb+hi_oQy-mSAZ>1osZQC)AQ7iM4?TEP#&X)dW_J*^9?P*z{Al~jRX|Ka{aqp$$xGVew zZ4MkKjFE4+=SFqG$Fes2zPM^x?S%XKOfZJ7ReFd+LREx-Fo_?-1eB$@*FaTTF?d#) zEi}Ok65U2uv0eHv{;)I>loHFz@90DAy72}L!>ROGTrY8fV)*kZp5V}65Bv^pgj3o1 z&I+atN@y`14iA#Yqyp)0)FM&gWH7(!#a{NB@rT_5zZe%>k284N17@VhFH~qcC%C~= zTln41%Ed#cg?jLgUWZwR>N@J9)@qGLtHM4+BR^?us7dG{84PdnC9M&NhgsI}K(zLb znWT8H(LK2Khh)d7zbQt(1B zRhg4u1H;V^YwoK)H*&oV}+hFqKwhOqw#~qoqH9KoMT^FdGJ%H9X^w4LMpwA@2 z{*N(OYND0bYgwOShN4mO6MyO8XlVpF4jontu?J~p{Gey)Q_vB{fDGY)wo_>Af5UuD z-3sQpzOagYHs2c!pcw4)Q|CC)UTICr;b93I&@m8#X>})}4YV>lCgz-Lsq&2STzSY# zDb_@N7i8oYa5dZ}eo*VX+B%vES3!n9Z*F6&0xYh#2-Z=n!k<=Nc^CUIdMD-WbGY*Y33TCq!Mo-q=BDkme>c5ASv5(IMKhdUM@DKK;VY=eN zebS-ej#wjeAb5|O8aK=%foi@9860;e=L?fxjEr3(oP;es?_wje-iH&)%AN@Nmlvy6 z&TTbb+{ISn{@}mZhg%hM#-i`py%n#pU8#Y(YmnRji^S< zzb=NXM8o()pnt+);S|{$sG3-s?6=Bj5AjzW<08Q^;%ty#ZUDDtRUl)?O6>yKh9jfb z$@N@!i@OBLLG6KanRMsQSZnjR9$?Y65*)_1o}!(LNm>ewhz?ldLlE41>N5j7dfjp z#0?z%xz73_x>ih~{o;$9+$D_@ZMk_JQ;gEW8+DVwso%4XkffuD>Z4#hJR%i39!+)M zXN@PzaSzWo=N>Ih8qc%{)fXx#cTsiUD6ypU!`mjj({#;fZd{A1$VXahk00d>TFo&A zCD8v|x7AYUb@LBU)C6yJzM=I}AM1OFu~uIs+MD=fy{7LsazO=g2SAz znR(3M1UIeeU+J4iyyCL#dbyiHEqDiXB2gDUg4B` z7rgD>KxQ&USi><{DUW)}@$TOhoO?waC3ONdkP2>#^U)i}XFoOW$*j=I-jFV{QkhD4 z5PjsU80=u2RlDm`;T9vG&_q9^%vSq)_b7eiPP3e4122PTq-48jOrR&3t>L>{FeXQR zBu9l+=5)vEjC|T`^EpbT2j%y4sXrguY<^G?87F@8$M`E)&FDPgIV{TX=_92Bc#<`m zGzZbF4{VzzAq@R#z06-P;@)mroh({Dq$@r(@jN{%_^nj)5}PamKUzXesoK( zqtq1Btm`zHt?pU%(55aVw-!|6riHodU5MqkPj-h$8S1?g(MT=)u@Dv45>`O9m ztf-IyWH{><|5RCgQJWIxcgEt1j#t7tJXqy&*YIPKa6&Uj8rsFT%JShz`cK9b+auLT z|2s_kf5Lm=Fs(=2X<=;^C#Ry)sD$gA-ca}{wsDq`+F7dof{`sQDO9`qCpN`$RwK`o1diXQfs+-SKiSq??f7NKfZ5hm>n9wF)Fo3EuTr z&F!k!Ox!EHx6Q>>Kt&;BtP`g-i?i1uSFF;3B&(;r0H}+47`w2F-8Y`bH58k%Lcip(-4y48{w?p1mun$6ln3j~6%FX=T|$2RG^| z;6mzf?*>M;{Q~RBA+MjdgdY*&J_pJQ{|JeEu76lq5mz!ZxgUw|>>YAq^;o7Joub@H z{1fF3=gm*`e2v`!k25bFVzp6zP>JN>&I)IlWoc339_N3gv5!{;@@K-z#1^4p!9Tf& z)*fMoa|L(CyEaTb`$&ED5sGLOl)e}zawEN$oaf}MlpJ$3lkOhNlaoinT={e>if*UR zuoG^DHnS+HDc%d_GEdb`V%3heLJoUa*1_@1!V?y494+*KjC8a2qCR)9?9>E=E zPh=PJ2zEFNzY$nin#fFm`&ZeEck82ZM{|Z%Uw(^#sN;!#O}U&=noJ_UKPp?fd*aPH zp1z27H}cYe`ILW2e70OEQD05U`1@tJ%o(7#m;grL)%bw15vC-#^m%5gJR~4`-g{3g zxlB!0F=L){t$ADg2ePhzz!7*GEatZ{gR}i|f^#LQ!%+K8M+al3UeWjDyVB%VkuJI44BiB ze!v03pHX|LLmy1Vuo4=99_zh@YMh=i(O}hh&ciU~V|j}vWlK0X)!OYoS>K?GyE zR^b)WAIe*)Lv|EAp_QYL$uVS;kx@_B=+4L2^KM~ga5&se8id!mDv2HW{CLvIPcYjY z%MA`~w}-ud_u&MtN^E1Ct%IG7?cm(pcN% z?`*ws<_qsA{d9%QL-U}ZeAF1a0L{ofqZ~xf@no^0wAY;%cR_gr*Zi))O!rFm8I4f- z>r=GiTm!jV@Ex;GSb`4;71RIDDkjXM4TKmnS^6wa0jcB&S;=Oi0$>E(O5NGz@dP?T z+U{S1-0}zIFkd_6U+@f+R+^dl1(q*Ph)_{-2RAl3=Ul3#xDSCSbAH+~X}|Tv8t4xO zB3f)P-i90=!7*DZf)`oG#YJ&dPX0(;Lfezfpp9GcMe3NMIX6_|;}jl%_8JDn{Y->7SneaGY_0ALHx>PKKw7 zI0BXBO>QJK=J$Hr%J)f2=AKtXcB2WK9BL?E0&N@yI?fbPMvy-?Y^6wTiXKW;*arYv zm>CAzB=%2}_`cR#(k*yVEzP|Mj5}Qx92Z=Hh0G*-D^%3zAb4pzGoLdS-9bNLTlH0d zVJl`f_O_On9CNT6y-uT*yjnEL5dJsebf6P;nR#`>?#}w%1KEpgJa^4l7=JZ>v@4xH z@eNciz&UtXx`UPF(sY14k^3B;bD8AcoBbD+<7Y3fYc z!s;KUp(OJb?o9Mhm_Vk}M4oiU+i4+jdPY$xl18}JXDp`wSPp5wz=|6sn_3xNa<(Fc z^-l5S9TJ=yoE`sH(a6G@lY<1wh#NkC;-neZ>S=dS+hh}TD zjZCJHx>LWUNmd{4$?P>?64L-(VTzh_gEO`Ljy7mHT}%En?ui@i4GeEsT^Dn-WmmeU zxEdveq!JFEl%=EeN%rukZ7nwXOs% zg~?R`Ez8{OeJpOlE=I|`4P>+l#)}VkS4MTkJc*0cAN?z-_u-BL`B`PssywuCvM3@+x z753$i!38s~JYO$DqiETbaQ+}a<-@9oY*SMYeg!YA2&J|#%UPYNh-=dtW*wcUCY^>SS|y=oEM#k$Md4!COZ6^( z4E=Psd6RoUbD6!SH>Y9aJnDIAnSPZ`GC#r$p^Z9T8>Js;e37_dS@M9JB;-|wGmVY$ zD3>NWdaA)NYc~`&Bn6L*b{#i125&0WgAMd?Db3Yc{>v2uVoPScT*!D2`xznO>)}&Iv|d{IiYDXQp$SY2 z1DaQTv21zs3BTK-N!c#HIbHh9{gyFYk%IxF0#?y&oU6~I1LA8Z^fpHNnpv+1M`|%+ zgB`4|s2Kmip5NRP+%A+3+#tS84|;${*e9e9f@RQbV)z=RPuIPIGx4c=XqdHeqDD+I zcrA2GP>rs(|M*q8O@s)mQ<&d6f~t5QlcUTLGE6N8UzsivEp7K5rTH5*aip>Ti5=Yz z+}do%dK%yN?(wv;Z*Z5e){~cN@x*I}-8`2y%{3{@D{S?ri}TpM*~7GE3g^6S3_kcMJAE^Q5j>llarhF@r;GP@~bBJ(SA2oKX!a7Q_r7GMbfU&aqQ zo&DPwLLSjpTxQfXX$VRIF1$vo#as*@4C4uqeYjCQxG(1T=*J`iCniYlG!8x+1Y^B%L0p@3=qR~gH;;0J? zBEe|Q&J2(GT!St)*I!eu;>@O%=xn2xxSLtyIFPXhKbLoTzp*{Viu@a4tkF+i1>Eqw zaKgJ=Mp^|k>=<%lKquq1-h^fw+etO%iTRkXuegHq_|D=#e7VF+YO;HR+S#$0tsr$U z`p{3LU{*1vm)TUP6RuNRt(|DBIMa)K8>A#xN9nLt*JvL0t1t8lG)>-MpQ#wOCVsE3mz3%K#>QbQrENRpOo4^I*Eji6T&MD88jv5_E3_TD0YjqV2P)MIa zk^7cW!jr6(pex{VD6(@iR`2y;Y+RG8!?x&b{0^xJ+g`uus?V3w>X@C33(RrU5p|JP z@_oY-3}=LeW(zCHwU3!^#T&_Kg+gVxc&2cAHM2|JO8AA6fcz(&)UaYaz3u%-UVet$ z2)x2HnC6t>0$(JYXI4>yWFN?9&d7*y>)0n2_x4!q8I46j(R zq0Ha{=Ug!v#u%}30~D3x$lSxv#Oq>qi?tmGA%{*`#Y6e^aqx0l)xdp!65rVvLk@wl zs9mrD@zRCH89Xt%qD8c#MjvJffSC)!ceQuGrfkBK@KfK}M#*TJ6((+j3s7f-PcDR; zory>Lhd5YVTW|KrreKKUemcjl1m#eYx{uTmPkJgPK9Sx8r#pXvUe+6H72Tk?9Pi_1 zbLE{%?nngaVEvAlhSkX*0U$O(^ha0~n1{O132;pfC zGYsKM6{WTKZ{HkgKXRzwNoje!^CQMBg08CyukXf@!a6XH%%CZpmuw6Ml?aRQhXh%k z7c~^E5I=>fj|X^-x(>dzJg4Tzy^(b**)bDTmKQk>nILzE8WsCKP)lH}tCA(nNUS8C z3nuf4zCxr;j?DZUs9;{F@4$Dzl`%FvPqhdhWf!8cq$3k;ymwd6YCtn_b^m?WO5Dl3 zjBDc@?r*j}8BPzl2MGsQA1);>H>0J^G5Zq_d8t0m`=43Y$yuWqAAATe=$jMsSTW28 zsRe&EAzrZg*VyO4M%E@WL})11wO-H+*wg$ht&87ngu7qdDYG+t%usOK<)o>wCzDSd z>gwvRPdgd1;~*XtvhYu_j4(caB^*f)#}!pv(oEgV47hIlKGH|om#m2J{8KL79sDaQ z8{M%tup&r?X(tPPQyVpPwad&SbTm8DiFhdPtlY?ma`)m-(t^jTN`2rK+B|)8(@K10 z`7%lNtS3eBMsS%;QmcbMNh^NHNeL)^yZwo9NAPCt(Pg!VUSolQ2^n4h_VVp+A2 znyZh41I5rlGyA`=Bbk~n35{b!+z~Fp^*v6eI(OBPuOK>rLPWQJhQi zodd1CEPW%U0ls85K)t24=5?;P_nz|v9VZVly2lTLaWi8PJ93*Pv6pp~N9Kp2=S~ zM+kkuRjsIefPD-duDdXubxIo%)OV_d953t}#SJ))E$vU^M@lyXpY`S3qrgSGAdeIZ zGG*a$pUu|6o`RClXC(+a8qN4~_P%hLv>~pM@mO|AIYa|=xT^6fuIc&=zeyD|Ho$!( z8QVoVOegZ=K|$95a9tfh6&3$5xAl9n6LgGzy!Vv&8|_fXvOm#&d8BnwMcf?Q9A_<~ zd~_7MQhRS&aijQB=6LsNA1j(PC3b*b$IhdZZTDRpbf0UXeo$Dc?iCVIF_M6pF4c9M zH1G14;>yKTaW23WjSw^|ez?QORnafGuIjUeWQ|3aQx?fhZ~_dWV#Lq#vao!kYR(wC zf-soA?Vpcn`}e&1#z)&~_MH@gW}@dgTZuba!2XSoheJhCmzi&1JI>~3SPSKHaG<{g zQ=a*3UN;7)!>qdSnsf{`G-o+O#Wg66w*@OJtK_=I;#@9W%Yk9iWbu={m@Uu8@+D+QjTEC}4+@t9zfA^Im6zmg%>SfC zqn;!gQxL8{T0nfkR-m@HDj9{@I)RGHPf$ZlquOw{D2LLDnV74Y*c+lhh;MHj7yE=x z(+9cN@^$?+U^l6OaQK9r#N365~y%|A+>?iLe(eq%O}aV%36G4~*uziqhf8$> zm&KXlY}7aIgaU+d(iAh-F*s{1orrpnPMstTHeY3qqMCtoTs5U$-b~9I<1_2qk=LJh zOz(*@o&Dtf@gE?~PdWD4y&IJhzN>4D^D#5o2Y4vD?{5QR%pW9+x(UChelj-iGp-rV za`g~TqB%hxHE??E5$eJ~+=(21bM${GRZYi(Qv%?8=-zza{^mwydJJ<;h>g0>4&;hs zS6Gs=-`+9qvv<63G9f?M&aK$(^Z>fEURIx~^iaRz5Byx%#@OjhV|KT0%w6F>$@k;F zGf6@%P)=OSZ6+BYfuxH|q5nziaEq9M^jyxZK6H(O`+Q6BbpHr{G%Du}5UJg&|jXkF7*iV4t7<{{}a zwe}~=tr*Mwkw4))tnR~JwWIjUUE4K^j+IKX-IT34ePb!(jyoI<&qKl$YFbtfsGXk$ zyIYgEUMLY#8cAdrot#dkJP4HybWSeEjpP&~8cqfM1&{xxub`PNHZ@8qQ;jVxTX2zL zE9xssafVur#7sTgAb%UXNPX`j9&FBKcu*Qe`NZ#@7wmE6QQit^t+EUC=gLvnh%?+V zZY3|Fn#Ozh6Yf#}jw|8Vtu7AyFJ}m9&+lcsi03q3Y)Vz6{-GM840&bF9XQsgsK?@o z_&G`;O`yhNXJ>Co;ULs2<)lMQFHSdLcw?&&M-qC^a2RT02*MnYm_LxT zb!X;vWJ1k6qO}0Aop{BHKe}8w;`_^(>7EG-gEZ6uhnP*^Zr!Qnqk+a=`{CgKnECi& zdgq*G_CLo4CPq6Bz{B8Q*%XGti((zUoHd!=VnpG!dGpOC)J%5|b4z-yU|*)Y%fl7t zc3VC8L^_oT7s`OMOb?^8W07Z6+yn5Ie{Y*Y?(jtsYXZ^e7acIWfX^UWpPjwUe?;xZ zzco7g%Af<%FV`RVR{aPL(XX}7C=E2gRi*iI1++=%=HEm~+(k55JIdeElOtxDHAu%| z6qjdz7A&g$6x_HAU0-g4Lr^}uM*oJ#fC${4w|wQz8-Ba@rFIE7KsCUwyyMndpG_Z| zx7%}_|3WwCJA z+W#keu*vEjv@Ncy!dKgRN{!)_R{Th%EE~!+uq3p%T^5RC*0?M83%=7d_i{!uBG@VyOT|m z&eO?4FFxHA&~y+q^l%TpX8#Vx^NppT_XX$GyC=p8^{LMh`FusOoc_nSs}{lCOyY)` z4%Cx9 zPZYpunkck%G(ujsqi*M-a%7wl}`YQJ$ z|FvFlV2Ei3xDI-^mU~IJYc41zmJd5_JLaqihl2XrI@12AnqJTqErzM9g`RRI<&=tN z55?Vu1x62c9Q>`fp>7Hz@K>>+QjYKHa)`rx4dpO34(tlNhFb#O(2n>_-Wln9bS=G$ zv=EF;Re7IXO2)jkRDs?6<)I!e+ zIvIU~hs59H?e>j*ENx+mFcV12b&mKWur9cfG;l_=ka;?H4f0EGTAxr)8Z+=zPjj)k z$eEE5OLaqT;{ArI%ZzoD-6lq`71@e}B(vX4u#A{8c&rgdU*YOA*ZEP0BAJxvXTB=1 z8YJWtV?A3XXQ~PHT?wu9nrNzh5_ zTtaz_0ZIqW4=YOTq(E?!8lP7cboXt|s7kd%PsJCcQ+63n!=dVx_*Kx%*=+VV{|UUO z6wF!G{H5(5!8yO4wE!T`3}c4UP&t94mG1eCGX7Q1z-v*IzNF1JEh|_G_E2(!Z^vn^ z4Z_MBxW--=f7C)?6)wa6R&@t{>xG%(+zMO-^I4<)=S+okpmw82xRbQU{4S0`$ua-N zt&yf=4I(;3Cto=jE#|>}c%P+xdMxE1C2T^N8(NSJ@2KPx?B5lgf4Cq7G(cl>$~mQCXR*8*%Rsp zGa2;aUceKuJ~LH6O&?aP^X=w+B`xlXJ$pQ2pm!!mu=IE;H zv#^}7v}$o_-p!$F^hSZIMiTp+q`9^DiIN0nO10F!0p525eoS}`SCbiMx^e3$Axhv7 zC*o7NdBRgzfbR6IupjLrJM-eUB?eU-BI{FUoyDO{y>7 z4c_G62wMW9fq?%5+i--r6@TU%N{JvVe;-z4ud7V_BW^gAY5Whgql2)7D@=lc2UY>&!KN}e=yI}7Hs$UwRc%IXEo<$8L2IJ8&64}^@CEVTvSNH36W)C zgf>sy#N&gs~!k8%wZ=W3cijus=D#y(G< z;;*b7agA}Vks2lba?iH^0{756u_3I?SA>nZli8~zO+G=tmV1dhUs#@PKY|OWU(E|K zJl{0n7fE7XZYT{EYw`=gDyE#&gc}dr`h40I#NpB6Z+-;BaQo$>B*!&X{LRc%qB)oN zU95xe5^B(HVLB}0L*^=}vK)p-054HdHtB7ol`)MB4%Bz2c}kl9ss?c_s#2Q>zpSCJ zIII-g6VKwVqxo_$}b|E_?EMc>oKz_@-R3>yN&JKnanBd<-l4{Q><_P0xmAc*-ffy zj^UaJucf!%ZB!@jHC>pz|F3yh^QPj`?MxloW*l+v#gpxarOEP1Wd^8`o6Q#kQ?-%0 zN36&#u_oo-q-}hz`hlINEyWehO}>d}fuHe@Zs^oCi_%=gKMey z#q1;hXZs)h7OX_``Rm#!)HWl^-kAM|nab@p7o*Gec)bXyh-R6$jUQ53uu=&!-xWw) zpITI7eKMM)4-r~<7rN@`FBCuXf?b8n;B%SJj#+Z7)+ zuHsa>h%HH25AD`XRgazP`$aPO(SZ%5t>oZHA|w9{A#fa)P8>ZeUN*{T@3}nbHZ#yV zr9z+MShh7My9{h3HWHUQSaB}p3z6Y=xKY?)xVT67v^2-ro4MxM%J0I&Rl@~B16ixl z3&K)zl9^@-$jyBxt>FLjevE2ty;di}`nFTnEu7?dqc4M>U}szMfeIl7@O5Ds@r(*4 zq%yMtS?DM?*J#Rq%NZ=Sjv9g=nl?Jt|HSqoT2z*y1iDxJLw3GO=2AjmSt`6j6TIQJ z^6-S#(`rgrpuegYtUbVoqG4}gr+kBsLZ8tdV<{X%eODIBtI`|u*WjqkGx&R;o>d3+ zWHuY?%oJg<_iy8)oJTd$rZd-~tKl+wz&vksgOzZH;I31o=vSP9hMWoMIa=+@%1&+!2R6z zuJ1N~`fOJfq)@GNn?3^%Q$|SdnSl}6gh#e1dz)E^jtP{u*6Jc!AvK}KqnNz*<_SD= zUxw{297+}8C(3JV=Y&pFq|^b#*NNHByE4W5K| zlqKPmVR8HY(^#6?;XDi939rFpZW1iXWx%%TEJv}pfzo~4)x>tzJk0Tg!!t`L3Kwac z_#@OF8Bj~PczKwdZhqzKc`zsI(ad;fN0IS2CylsWxFNSosLz_pKSa!W=#SS{+xh@1 zwoiOvvoZVQ@H}BN-^J(}+-Ukt9#ldR(#>sQnS@Y=SWyiY#+EmWTpILLl5 znmKNYp=h~qjSpAq@W1e1=4`bE?SMrM8##B<_?xDJyZm&Jp-rU*dhaR2&5!y#xCtg0 z6{x||O6xl!omy~NOn}Gj`|)|HoIKTzxd_TlpRjMqnT%D2N59P8W=UI&FkU}uhS&-P zPV)~KJ+BKYNm6XA`GrejN*OD~dJ+q(<7aAb`6WkzFuYAqk>i6G#hYRUlxFP48`VRc>$=LVM~~oIks`f`-_}s2mh&1DA$Bp6ad(l2ot-a~6?zJzn5XrV_y#o) z#Y>s$17TuZs^T!0h*jtxu8FocMsc+g+UjYWWfIQB+T7pF8YbRrJ|SCOyK)J>hT4c_GWmX8hKJ)(~n3_ zUu_gZ|4U651{+XYryn*-Ig2@p#&n0_^d|RW@=n+WMuT76H^VK>x6ieEj;`e5$Z4xF z2LtQkyPz!4fpJKy>08tvJSBcVf1jR{{>;6MnQ6vyA?ir9(#-PTrsQa>w9ad%j>cZ^ zOHOf1>DcweX_=gx#*<7g=nGKx}SKbzv03NXEPMm z1Gfi*luI}tlokyskx(3-qt|LD9iu1eBAAMsy0*kpIWB4*Xe%_8dw{aidU=cIxRGLe z)oc&`7?lDKG4*pBfKo6_?T4rFb)2QKlllQi2OD9^f5!Psy2JI6cDfdV>9~Wii2X)X zp_=a1p2D~|K7tQ5AH}^QG_aLq$cB-l{eAR*N!qBjqYJv9^BVtWtHU0PkD_+E)~c(t zys*cSNvN`3OTs)aC!A*%%SM*N?5FxLzW*ILKDS3YyIn$5+d z-BaQZ8xEr@7wTWiWAKwj<{Gt0-d)0N`$q`k8%6?OnO;M4SL(<0A} zM6OXP$-~+{fr9q^86-r7LZJMJEs&A*O5thS_g;Li95bB-IIKGOQ4|Ap%5-LcnIPN$qR?S4q>eJ`crA`8YMiz~DI=65mE>3Pfj5qb}SAiovX` z>gGSOPyN;4LaPUy%{~n@(xtrF+-gy$8mHyTZ*5bVH1r~3F8HaNHd_+-Wjvfii z;D9aMp}@VyZ>mVbXB8MeehjS(2iU*Z6`2#X#rA*Tc)5sKTK=r(!aN7>=+FIDPe!lv zGIFxCzPSXy3Jv^WVhiUlx`Q=VY%eRIF!;*NcWt5Km6mF%7lhR2+wrVW26v?#`T%Jg zniaZVy}>Z?jgLCGJN#5B(^FFjlV;$r7Hfs(ypk63oAg=WsUy!|{kISA7c7UuqmWiWm`(49UnJfz z4`|c4zHE+IonA+6I35sxvu_PV-s&g#Sa)%C98HuDtBbMCTIc%;TH2wQh+mlTBIWBw zc)F9g6sxk*f;}DYWsk&$i!YcjzCQE_8%^^6<)pu24uC1-yLsaim6o<-;VK*l3S`~K znVwE?7@Kdlr%EPNF)N9O%`{Wem-`~wUrO_gR8ZbXW-r*Lp+rllOJsSV_4=2(@wgXXU&1EPvJ8gORO8 z=0WW*y1Y0%P!J#C!l+Wzo!GZ%9v|*sFEQc~e+=xCGhDx9Qn);GF|#HV=x6F4c6EG5 z{ur70R!CK)Y?7esXblC=!8oBm*Olw37v}b6xx}*J=%>O5a*^>AuT*}vMr(+te z2Ad5^>Ug9JTTR$Zcf;ezZ=|kPlQ5z71A~3amT`?nEt_A%)%a`bYV)$Sg@50odQ3;- zY5ZAzwe&|V5zxRPJ>KkOOayhf1CGV`FOT2x5X*5j9H(^5%+v32(_N+MCgv!*pY&Wk zr2gPT_YJny;J$DhP#X6qCIk%ES7r0UjF^esVm>GOl}gL+qIbYIww~q)`m-@Es*r13 zo=uW6x?A^h9#Jxt$sWv~p7l{1Xinl!Wp_q}#FX>_XbZTW{n*^E$0>)6m#J4^4^MCP z<{m+6WG*+3(xJgUc)h=e<9|%2zA2Q4_Llrc7a2RZi6|`>vo1J4a*E=# zT?1+1W3oN;495#k8~>KntENQsmmws5J>S@!lV&?^=(&`&mM&|Yi=V=6^-gv!@z3{r zgyQn8oS5(v;xPJaur%%ldJ;Wspl?>@Sp5L14UnxjyGEUmL)ar^s$Y%7#N%TBA~gAR0;)Xq^;@_f7F_f^EE&nFq=l z)J8bfx;i7feo?i}EnG2i1o+LlBFa;(r2kM+sutVE``NxUud67ymMM(_b@2%EBHcTu zw=^YVGS~s+z!!AYDCz2Et>G3zKoXP(R2_77*JC2kCC&8bfNtuatUN(ems+HyR}}K8O$(&s<=3 z>Er`8s)De?bicFL3?IcR&KGDxyIeNF}VWzX@oFa(36ckdlfi}hy9oa|6mbQ1) zy5XhwG77bew9WaF4iy(sv8JN(;zo`rg!rT;Ynfvf)cDHBo&VpbE&)9tv!5^n6d@hwq!Uy1wS1mYh)$qgdS~erNSBN7 zi}l9TcRfTa7lb1NwuVkz4=`BKp<0%6IP=iQVafHBLLn9qhcGWM;+t94fxad#;WP}*uJIC;wrKe z%nkWdbLv{n9S`MsV7|e~pIv=rNpFQ~!?CRwQD#h7L@~Wmd}sG3jC86i`OgTabW@SVV+~V^4CHwPO!B){a=f5RBH@oO_ zv>tjlnCCBOFY7G8vGNvJ!?R26hpyy=8be{D1lb)RuH0OFz}8p%JI*g=YDc;Es2NV8 zj^I0r&8(=dL5GxGuuY&!ctlK3M{i@NmSjJ!-jw??wY@!^oUlo&Er;{rFem;Z1+442 z8=~^KN5XUX$0(uh2Sbz(o^-Pe*I2w0=?aE`kN^U78QC*BqLPAD=GUYD= z7x``Ucpz|fQ4KP`DCiGUJNFf{MB88vf<@rpxd+7?@!_#cz!l*w(N~}Oa;3@elJ<{x zFuG6Q4DYC)q#NTMXg&MHsEbc)%js!Z5rTyYi`^Jx$UHbQ$H0@yM#5|080XQp8`L>q?)B zebJoN!cYYJgI&jF<`={jsp2rfJS=}?2jNRmof(a8XFt!ym`yxqy|e74tiRYzm{I1E z9*7;7=?~)ODt35>XuQ8tZdl!fy1r!ZTGGL9>0M3I9B%G2_g_M?co3f!Yu4H9`DC)v zDgS%Dtnn{sK%Rzsc!zQ6*azyZ?948}U9k$H-`oT^+TR=U3IAo30B^K;ln3VPMcrG( zpQ=xK&O5Yy={nO zoU|2E_Hy${PiMKmyw0V5G+qf6Nat}iJ%Ky!iX*4LPWl>K5B$J;THcgUocj*hhH20g|7HkCfN2TdcqsGb?GF}43oWd4kzVSO`hD&!#LsNub>YKZs*I#<#9<;ZGNv~3L#i`Au0q-wpMJ7 zMgB;pK;#nhiBewwvj2H(G2M|eRB^Cp0vbH5<#EHMNW7Tk@fbZVEeLPmsxhx|s6H~P z0!)MVqSwXcP!ze}TY4MYw+VN6%2wCW5A4NDluCr|(oLhl11(jXLC!+MVPiOwtw1-+ zTaJl~Eqzy)D_er6#FkcR{wZ5N#TRPHR5L_Jhn(rA^SG@AHVdc6rslIGvaniyg51R6Do`MSSey9^iqoO zpYe~9JDby#9l2@w51_-h5I*3K$V|>gr3(1N7d`wbXeU`2U(O@FH(d-aRF8uJL`R5 zkxf-mS(V}AyfsQK-7t>p%i(pLCayL8G;f9ws(Ut?0SEa=QB|v?RiK;j>4Ap6lA=Qx z4Hh#4#5g7$dGu^Koq3!iP^a`xM~CsXsCL>wW~G-k=IhU$$>gl#j;p~{$jOEmjLl$q z?8or7gl5V`RFTRU?NK>L6Lkc44^9v>r~VvoTVIqeH<>m0lDWN+NwxTKux`uzQEbe zTnI(?ctQvk_!RjB8YcIWhT~!643WSG<4e*mc*n>>ucZQXGPgxO>FSRsyW_Y&@=0{t z_u2Ta?#p`R>8%|XNZMF;XqgSB+S)=pZf8q%9gJDrA{o?mE-@yeH!zx>OeMnexR*Z) z70GHz|D{cGta856HVFUYJ8BVPTb~i=XiRPXmOJfQsdDf%9O&-msl$#Z9!001sBfp= zlN>`Wkbfd-KXkatNYBtk2FaousR4?=w5G(OK*Pl%{Q~2(}c~Ayj zwZ<}M@E7M`=PGZMx=8pSQeibSlck^bUjF9zfL79fABOod4fSB0zD9-4s07^FKXDYl4@9ugW!} z4?9y?NfME*_}%OiT!CrtoP+m(<(7b3`Aebp+=2MMYHMq?yE`6bTwpA^KkN&8QHDGd z>0)<*(Q%wqnhgwsWgUh$^uWorIP`B^)ixil=$S+n=b_MNzVvOVr^KA~vt#LrSw?E88M>LA2CYNRfm(^m~#o z?`llQ9>FgX%V=$w=jJ78op=Iu;d4My+#jY{n_zjwWmblJs9NSe>j^*C*OJ|!tP)zM zR0o7bNU%R1+=50w8V(WgmEcda_l z;X!*v@En(OH1mzYci{tnSG9=PLB0>prYkw4nLFpz8(&|h(52%8BLYI>SR(qQl$^F)5j zUjR)-4yVa!tWyk;-@(7R72vx3R2~jqn}y6Hv?^A|1?W^qgl{p|5J%_*@dUGsC^*`Z zdGCh(r&Sei%bJq8Mu;$J@wFJI4$+(QUGmb^(ENI?&3toeTiOAQ%I>TG%qePai>?lf z(dphySH~Dg-1iRp2c|B5+4z}$jlTqJ=0bO8FkUE$SBtOk>D(RSV#iSAN3#eorU||W z%X2_a;s)f5NQ)-@s_&!~*BJH1r6YH7!^EIJQcS_|X^XA-kOl{A$*2WIFc4PZih1ZJ`&weN0mc6gHWh3!l zAP*(89i<&;HY_bmJm;y1e+9a?`pc{UUK}{%Ib%)4GtC?=M{SRan*WIvysw2c<2ooy zSk-?6%{Z^yu#`U%;5@2MC^K?uIRn>K66g) zAv+e5@lm|j{stW49=Uv=7hNysr%+!!A;*%=TNln}RAe~yx4)L&mXPRLV!ySEU6}FF z|AsrB=pX!L%rgA0 zEZsbc=Q)ytllkpR5*vw{3JdT*o)E_y_M*NSk*x@JiE6|2WR_Zef{%pLaGp@o?nj%+ zwR{Y>t2f0zNFp7yX6Em#({e{J&+_n7aMk?&!hoig^8YYRz>(a3`UvH@7VcaQ+fX@T zi9}lxa(q^Q*vHr{SF>5U{ql0?v)t93Z6t@*jE(_qY;)lsE|eV}RYokE z{mq!IHkD(o9BUYEW1i#)8%50auhEO^W2q`+KCN$$7IgWzH=i&#yTc7cW1pfQVwN}# z!%cFj@XE$3u5^4f_cS#hj0favaVmK$)Kn*{o7En8ch&~Jy7PqanW^Y$ z0bgkAz+<_+QcYjxSwnKXBcim}Ug8zyseL1uDHk;)x{tmHyt))8HXP&`#a5=G2+$MfFK5Z<5SDo|yTacKu2#zLSDwwW)N{}oumJ_Pk!-ptreRV56;k}W?whQ=JW zU013&Q_P0^MQtt;(&AC}(2}cF8)3CTTh6)w!N7wS3 z&{%7QbC$1^?-Be%`t4K9nK9G#0^CV*Vwn^>PTxY#4H`*;mv>HsZ}|4~x}#Z+0dkUg z)z^pn7C1#uRtKXIY<+WsI!HTc?;XDiEmc++K9>){4=+-t zA!wYDUx4Dq7fCd;VR8Ib7^n0G%?Y_}Ley{L8&foJ9p!3e>8o5}+0agUGyT!rVY*^k z32CeA0QyIak10aGF$?h3nGzY(a1*+@)ft}yL&c%`XhH-(Ksw3?$=vZy7^(Dj&T#s& zX;=p?^f{PGXpcZxh?EN34e#H1(IxwV!b=XsoP1Fu&)@O{|h zaHg3DE9CBo)x49){=W0U0$ixF8ehl5@;+wv(yr(i*daI&BnPNEZXkEy&lLnxBF(2O{l%r|8F+1tT+(cdE*3HTg* zX8z$)aID!~{AHa{J_}tCcfLV{DRr|crqkfU@;Uf_QNCy6;y63^?i`L5dgBzis)%qwuQ zVC60VBguU~HhLw~MQ@(7+5Z-_z_(yI+acdUF-Hys|0rYi**QV&AMrMSR2$f8jC7FX zIm~FMXPCa0d*OYRLm*vf5{9Ulv#9nz<18+&#u_!L7Ptmp@bL6bO|+!k__Q?chh=jC*aA(uR499^TwMNnPZq z2EJ09cve^yQ=E_k+U4CfH`+sNU5rYZFXNn`Aba1GK^6E?DXoXOnkFnUC2=&)Fp#Yy zHIaKn=DqXk9YVB3;%rOwe1qTR6F5`}hwH5~>Wawgh9BJrFG+ioV&bVnc{hA_xI(Vq zEj8f4G%Q8#P_*$e$5=rtWuyk}k;|`&{ctZenaJH3_#9*5^lB6`K_` z4|=M_z7?PNc$f+{1P8}Hg`aF+t=>^t?(fPEVTInwzY~+~hT<37ei$mR4arinjmvx^ zTLZ^DX&CVy$1p9$s)5b$knfxr$&?A~r20ud@d%U1tmNK-l~f}%8&~HlP#vri=m8f{ zD}r7*r^&>91*+&xZcNH?op=5#e>YQb9-*A|^G`Qwin*TXutV9hQeK0S9u_ zM0ZjDYhwzJP+aaYYP7n?R?}G`GL%q329Uixk)Wx5s!?wP(WzolGgC1k946y_OC{P?oyCHBPYP|EG1=PQkHtTZ88 zBiznZv=eX8+GFghZ0~{hGmYRf^ABH*u8X(A&t8MsjR(u=TFd;sFp2G_iAqv~hsGh; zBkm3eOG_f#P@crE0iCTP!c8ub`0-)5p0bv3{iCUCTp3u9R#BR^my1Mm#3ZAWIVf$2 zrW#IoNh*vIWeB=}EFm`d6Rm=cJsZt~>C1%{jzc+9^{+aB!$C>kBrY~M2KF&G*}s7i ze$llKwYG8y^T%es_35a#y|cCt|5k776@`n)t<=Va%#kG1(qBmQ)`7*mVZM1*J98E6 zK^JuWgY#{%j!ayExIz{;3ML~VD>nWv*}q-K6-qwUj<~LHy}C!P>spol%2km2rq8mM zl?Iyk#2Fd`>KTkaoe)y@v5(o_;(qWqM>!vAgN4hUfb^4DiAQUGp}+DldSg_z+z5}~ zSZgcqD1}N$*U&k9Ca{Ze2M0RO6F2=37C~p_l`u-^3mR*ljFkvRl?5LaI@nAcFLk$O zqGj|_-OCkZRuPt8Q)XrG81yK6?e$1@)a1{wq0+K_ZP6!v9U)h)q;oRFBRS3%Ew%dxQ*V#%Cx4 zh5vA@jrXpNJVbbEBe5rZq%wuCpiC5M5q{bR_OrYX9nz}vb+u4=pmqeV%G(7uGV$hZ zb&lBuUyI#_n`CVfgzVMo8zv5o@J$3m!5=hE9%uH0HEmn{h0W7yz`FoWw(_{QajWI+ z>N6)Nb!3~0AyzY;i>>F|617)|waQ|gTb8;bOvHyhulQEnSu~4-@tf#*a$oZV+%DcH z8RLtdMaF(;fwwT5UutwBGs8`DN$ez0*8kMF<~*80fn#WzEjHr}SB5m*X6LtKBsNN{ zE&f)M%r$Zux*vK-y(7L)k~qeFnqLcjR;YI&{^c5oiog_qL-a{awr{128xhJ%@o&K{ z^$|<*qwxl|2J8^0;IiBZoJd%i_mm#e2s2)=yH<*$`A^6V`ZBd(J8gxvGjJBaL!WUG z<0Ug2uC*+`E&V@jt~?GbWCMiD`;2?x+6BiaR5!QqMZ)LDw99$wZ_R~Z(RWOb;7ZA_ zTxoiJy@C8l>~0pOpTo{X?HiA$DK|0#hEwtx`;0|aV}~=xre0KT=ifAMJEoDOb$8_DhMrFA#+5Y`nnvET~5oQOowpALnjqQX7D}P*x(lo9$iWj2I8Tbz2eRe0@;W2u? zG%=VD{*407 zTMivjcx64^LGDO}^LGjQzg>7)|08@|eJ0k0TXe&}T6u|{;9@6uSRtb!uIPMD?<0hn z+Tu-pkK>VhW!nDerP>T`MSdxxK-M8NmK_1Z%`?ds!WoLAa>-4d0H`pptmv0;X`(Ww`qPsWr?Q;ch<`H)BEM&gVwLVD)DZsl_myvmE2thJig4QsHD=gvq)!L__(y)rm#SR>ZZs{gqB>LW zO?s~x`hV!P%>wTOo3tkOCczAPt~kcGEi#_uizRr{z8aX>NhRsVjKh3}l zw~}l$k4P1(np4Srkic!TeTgj~bTsxc zley=FQL;IKce(v*i5}m?m`Qc#urbUW6=66lbDzY<#$=|FK8Wyw7`ZT5=o`!|(|hMl zQ4>KwXAvtKhWOLya6B%&wzw3%^oojPFb!GJ0*0XR9jmG9>Nax<=#EO>0sb~WtLt(FAH|GZ-KYM zZ*1wN%C-k^dB!r@g^Gao-m`%*##4QUUeCH?nMN(#0u(v8UyXE~$|`F=6!D7oc@A4+ z5ogmt1vs+_aIVOGW533&$85xZS}6C@b(5SR8fFg0x%^-9LE{AMBmc!Ok`nPju#T@P zP*yS?VQe=C(hs7#z>)k_bzaIL|uyty)MwZ~F|& zb2a!z?B?iPc^p+jAE7mjs|Pk2^Z2bqy(*0dYFV}#R%NqZ zD%J?r<;LMU>@xgY7^t1`m(+756>N4H#wug9xLeIP-fE>_agGvCnBDL?JPX%lQfb;a zmV4IV13j7QU_bmHTrMw0y+Ao<1_QLO@jVh&BjeBt^Chg4Ihs4!Y@GTtughE5p!Gukk9g@-9))c@Xpp$Tp<*D$*ej8jMhOn3HO0X4) z<`PR4?HhFr{jFVPijv;XC+-?`oAi7q$Rz=pGKa>vM_E26W|AAyIQb%)6I+*jB5T-t zA(xp2mMJ1XP5I-^l(9zR@$?=zOW%d+=(s9O$obd*$N5sZ(s-+O11@gd z-;Ry{V!Mj-ss4JVlh`O=Z?T-wSgeKqm97IL+>{V~pTKW?Z~Pc$%X;iyVUV5#Z&`Q3 z7w!`5dHOWiE^n7BvUM$^Ku5xY9ZQ|%ih>PdSK|-21Y5aec-s0F7u9YnSNs;RL0e5p z)*p#mq2j;qB4AXm6&(2#d{R)G#X zj~Z3wN=bHnPSt47(XGng;hOXrd98DR*@v#G1(otN5 zt2ZFzFBfsOu`mv|3{EoY&;z8aQVOV#symfa4#_-WnqrRR)gN< zKS*auhw0~uWtevInxrn$O$PcG2qJqWaX<5dDQnlg6ZK-;3j1_5Rq7UcZF#8u#oX2v zuqdg6(l)y!J}(p(8UrEpOqa8U`2=$$UYc@7pM!tlkPwFRaKF4!(*Ho&#FyEtLMor1 zkj*R>K5wV~l~{<5=dFXa+2+SjGf&mhOyjf~q#vz`C$(W9PaKMf zr5G2+e;KDVQtp9_~X9#N5%zRm&;bK=QbdXucugdi>wSDd7H-X*) z#vQZ=$P}lNZ0Hnm3E#^&&UFGklDeZOa{qY26@xnZemUMqlJVM|m0X*&ls&kkH-cRc z%gf&#qA&=oz;j`JgT=N`Z@h-9#wE#jP(9sd|Ay-0ejr0_8VLGp2Vl~;*tsBw^Eo@4 zan{YsJ!7xYOc)v5#_36tQh*D2)`S94XeVP#Y>o;QXdeBW0TG!nLB_>1r8HS(Iznye$z+6`SKd(1nZYtnX&p8t|e{} zGWhv$mah%BN$m^^2u0*eMt-vGzzN61C&rtj$3Pu%u3VeCAYhHB@2DNnWqv%dtL%l3 zJ)2!S$@{bq;|%A@`&^tfR3B&`4=Ow7c|`UX*;f1!9?|pkUzSL;)}Vun^&9#teyjSN z+d-Q4lZd;{OD|Wh1=fP)$}R9p43e%>1@4=n!{Q1DCNm1vQ;&k}%nq(i>eBdAfU#G} z66uv7H8Cg$W(=}?(5Ikk)MV!XWe_f6`=Or=4zZ8N zbM=!R23$wCnDI#Dk5DRjOlKHpl`4TYIZxDHzgG zaxWh5Zvn^nX87_6=O_lJYVVylQrhW5l`g;wPU4nw8_~}7;tjHcIuFNiX<}JpJX{JD zmzDMj%RnE>1OFCQikZ>_wV1I+TAf-#vRWeG$JoszE4PR zv*^cYzSIMhhI*(7`7S|Yth*@lG+;G4@fYMCQd>M56^kkkvw@2LA!$wp%3?Eqs`MBw zQO5JHU4xtznZGhgThyod7RL31ex){_%X%5jvot89nNAPYIX;qB*|3?$&o!=4aeV&x zwQL6_PpimA=}&Syldj}-M?pE39VxFcZf6?u6nP??3Wn+V(`zS`1as86*p&aHBlkyz zVz_kUfp|r}&$#pk(lCyLm*^F|KYliUI`5jCjG*$G`-&vxxX_FHmbcwZliRW$lz=+B zo8fX&2_Zvz!So-vrXKM;V7}3nMqI1%T?ozuV5rG zd;*2?H`QH^O56(>L98hWoCdngwi?p=nRn!D>{*2VGWoL){ zzKZ;ayo-8*5(W)F)Kp`v`cQcu& zsOkylm~B!`GtSW!E|*pGl$wM)!3X*=^cEZfjq!inZZ^spjf>ekS~?I)&3w4XT_L6a z(RIFGq60TgDM~2)apOxtbiK7NLpKd!fHUC773rY5l}jLDnFM9aryH}z8;WxNM} z=Z)uD>3=I}p4WQs!+*F)zJ>b9(ur7&Tf)B*Ysous8FU{uA^pG!S+W8Ra`NN(=DbrDX^D;Z;=vS@}GkA9(5xUk-t zcpq2j5S3!4fI)Iyeu8Tt`N{h_so<(`Oag`MHhBOi;vI-V?R7YJxho;tLyfi zNx^uwJwFvl;*!Yn(sA@Fv`;;dvyLjt43@@m6ZlcVcBEJKT^GP1Pk&Dprb*4nz#yZg zJ~yr+ZlJGAdTf1b#`rSP1o&2+#npi~{B`BQV42y+=q@IkiwM)6=XJAHm;wLBwoLk8 z=$x}B|CnSV{c?xUOzjNuuPp{CaJgPrjCEE?t!I>gozNP^!NuUqwgI8C(%s+&G#DH( zZ+kOh2C$pZ1K|Mr4yi-a@)ewQkl9wNY+)Wx*zv zwMJ?WT~4i&(JgkNvR?nB954@ij-vO%0li7^I-0>R;F^=C;t$6{zF|^VBfNqHgf!2xDJn@%QW8<>jL{l+Qc%gqQ5 z;F8cxa5kd_|J?gKK$%Wsk2;-8w)UsS(#N^edOERwj8g-|Z&+V?COmMz^XKT3vMRzF zhi0PItc9v=_Vqc)46|&oDHTvlNppl%u$I^sFO;vLk$4R{m2uwLT>BMx>)eX!fN{*; zqd%!5MnC4c&jxR4#S8^~0{2lNYF7Mc)YoxT#qJgy1&iadj$5dfSI}mo2>rEO7-lD~ zQsP3x2vunqD&69UjR8I(tTqQKcSLRmZQu-lNz38dNh{dF!V9?o{n8~+KWz!Q6Tw}% zs~Th6#`TD`3xh^rFub5AiAR_xc?*R`uw*q0=#ga2RZs|Ou zv}pE^VI)?xp7oX|yuLEVZ0$Q}#|a=F*2dRukDP6h3$NGPGe@jdrFV(fSQp?>dxdi76>uF`QG6bjc$0Q9; z#f|6%psH3rP!pD>-w8XM?VKY(MMV`?!3cYl+}u+K%=7Ir*C}XWQ;wcOo~=lpMarT#>^K<7F)(Nmh=krLTxTP7RnS}M3Yc%~>?5wum>B4q3Z>^sl#t$(;ooS>l$T!J znyR<)o`*N{&QlYVFM83OX*#1W60awH=3Am(cofM8e^FXwm6zsgwS3J%7tohGD#vrI zafbNC{^(kK;XIkYj}DquaB_f=I_1QHNvL4*KDi_5*fdT4o8|ZfvpClv&^q@A)sk9d zKQ4bn)i4E#sMhBT`cuj|Z!oiriKMgf3U87p1}hoIm=RQGEIP}myOL&s7SjEs2VAZ# z0U)^2N@ktX5$-J5PmC$sgl6EHs}^dYD8xU2| z2mg`tlyT(u{Ng)`qtF6V0)1f%%>o;^77H5^Gv#A!G)dC0^SFWsVTxr7XBXz`wfH*D zQ*cghBobqP8-vuV)Jc9DVdR{o&$FqIsQRq~5l3EzVYjz_$M?pAu9vZijXv<;4qz2bPn=Wr!qw*3ydVZ5^S z(GztOZW4CpcH@f0H?WR|eV7RRDXuAgMxLOR5;kzH$^Np5yfxvo zagDx_H8baov4<;e=lNCkoMc|=j89O#tuo;g&k!mY`NI`q8)X&hVYDY*S`YV<15&2> z3s1q{$ljtDl}tl(J?LXrra8TC&VS4md4Svw^uU7k2gf-_={~uzFV(jay%Y*Nn^=B; z7g*6W42_RUAB@ol?us;-Kb2th|6{KNXS&wg7TR10%Z>1#=+0=Yw4E`96Y-Y?uaFh0 znEf^7CZRrE;df;Ww)Y6Qh5F21a1?$F`lx@Mi=?vPn{O%mNZq1m89f5U;O*!Q1iw>5 z%OPHoFSwmFEiXdZMr<45th%@(w0g!1dt6(bqd@au7U~DOz330waHWyxO3iGst)(#G-MG=Iy1G0)-}%T$kXVl-oq8I+)3!gj0q%Ix06s~eO-^;goF4C zUdXi-9@_rq4x9fqpdc0VCwLjG!Y7rn@#BnH)Scj7b`hFlFDO%D~1>`VAuUt@1G z%*Hi?^#d^Z8nZh1LcSmX`wz7x*PI%Fwlq7955cDh#eYX@S<|)(O(OHsj*_6~niE4~ ziKFRF)(7r|cZ}nK_6iT>u2?DfhusKQC&j=B<|%G1O;p0nI%g8-*LWtE4o4Cr&kENr z&1=`t5~+`vfuP_s5@PzqwZOZab)4O-KeV5)E?${D!|<7+rA=0fYa??^VU+)Y=>R$2 zK^t2JRtud`M9{}_P;*P}qb+Rn%|!Wu?Lk)19Be$`>xDK6Wqir-KJ40HLEa{+i`ovn zx3}`Y@xM?*po;mLd+zBeRONHIzwDfJ4LwvInHK#b9TX}i&jy9VobA11fV-(YO&9^+ zTiOwhNN4kAo#dOdKykv(Z9iu*F{UjD|NnUKc@bi6uc&W5%LJ# zZi8fyd5`PF(%cwngSuOf5c^AglWto}(XH@RegK&Q9ko|U^&~V!<=8#aQ0}Fg#1G)- zV)8c^x{DR{Lqf8P!*Au*UW5MtCWt{uTlIL8x0o9RP%6Ks#`W1Tbk z#m?*YGH|)nUtVY2HkR&k_sZbbg&Zj`&x~!X{q=U$y>r?SYPxX;wHEWd}XqWR(vt!|<@G0qTPIvZ4|MDMfg0dK7;8V5nt@D1>?+Tne3XRro zk*V!}Ddp8l;5XG2zRL>hYUBwffl3Je13#ilp0AvYFTibF4Z4ziR|vuioR~|@gcjVMdM?dX{v!Q+PpI%wz&?WQz#lxsu^Y$1Mev8Gm%XFrvX=17_BDgD zH3CfMX2R34)c`HU@t2#81;5#op0g;+m1V4ucj^O~)kZ<)v=pTeq!*;+86)k*$UCnK zEP411{6!hmK|IfHhQ2Z{TuHDII>_H(TQl=<1yF`Bfa1iD>O`j@zh--I`=~IX$)|92 zgq!LwNM`lMS^WNR8Tl#ABal`zSTHlz# zxWHgkQU6=|O>$y=jO_S%#$ab3P(*Hk_UNZjJKQJS#b{~hYIB;Gbv516Fjz!r!`+1| zjeoRr!a*l_WAoR8PTyPK6MiO;KFRgxtk-^KxQ>AItZKbXBP=&rt zzBb-pfb&14&Rc(qe^F1ATXYFDS+0+7g+Kf9OHSWsb*QzuoZ+7&=)w6?_0--7NVWf; zw;B9HrYeGd*)|>Zfe22au@in)V z$=$CnqO02!(C@787t-+8!5+~rF_Pz9Wv4A;~G&G7D_mpes zh&Ek~!G4GR0(NStaxrkB6c~W1V+#mGuh-y{Ga5){1;kNmi$|GluBy$pI%F0xmd#I6gZWE?j-y0&3^-Z~}A zYDIuuzznipm&wWjgOB&qdV-g> zRC}z%VF?!sM1?LvOTeSXONXtaf##hpZE!SZ5@D)Cwd-=b&f?F_5jRj1{0gj~_VxXBHYM`p3)*}PSW zRNFY}N@d{%V?J!cpCvY@Bx;6#n;NY&@I~ks<9;wlq+DOe&~f}7dOYv}NR5)HH zS}_k{P~t{`OZosH8n@)x;05x@O9<^#Wd6tUndc~7sfQ@BJ>hY)%Ix4HW&;ze6BVlA z3#Pz6)?xUNB_C`eIc$3*!A=Q~D!^8;o&^6AG4&MChOpQuV=?|kofA436ZFAsduv^# z3j9YXLY>nldi&ypl-6J;h9r0FQ@kmUv+LoNDZK>?UI{uFbYO_mLye=h(G9f~I0AOX zL!>e2ix7z#5)*MbC+iqUywVyNX`H87qhj&^a3GN6#A;M*BgwA!^^JjFFq^vCRUOad z3s8qqO&AI0!Y^V*GT;{*pGo)K?xetPxk$plV5@ya+;!_o`c!Z{fOxPc0@TAUwT$tO z>8@UuoVbOyjQfUSv+ji~`rF_b*E+2yH5M1h%8whF2XH($k~y5{gbkhli>*pJai6vI zs$Wf~e#u8=a`D2wj1p8K!k69z`dTZ21GWTsSbYM4zaeQDy`^qQce(lY+K9CmGMlk7 zIZd$*PX(=Uug}!*p3zTGDQ+?N6;~JH2#N8Y)xjl) zdr{tWFDT}FE+0{rvq`Wi;CPlU%?&!zUCQD@5E!Yrc_`%klNv|v6HoS)XE)-l#!ca} zXQbpuS3`}YSw?yGZ6I5%jZMI1Of?5HJ8)O`ajuCP!?XxZhv#@ncc~+BJ!>1j8k0j8 z5qPp~FNLoSWKZIm~kXbqIJ_UfJ;p=qvyl5D&cs(T~&Kep!1?Q}$7IekQ03o8@X z!zJYyn1~?T6+Uo%)+79P@I}Q%wp=fj6lZy3nRYFa+~mAX)iO#u_+C82ud=pRJPPUL z^V9U}Y$k4fNMwddBZdBWKO5GHgjcg45Hz3qr~5`^EtgWAf8nnDefLvT*KZG=)b#iKYO@-;W4Iu_)x-St! z&8<)YY^>+hMJz3!N1mLzaA;t!{)TyhZ<=nEb8CUVhbq&B*g8qJ z48Jr|7wR{T@IQVTS%LEoh4SN!>nf} zD3tx5-0L6+20LpwE~B^n0sgP-9WbEJb-wby!A-R@LLoRHD;8gtdzv$oH0N*p+xTXb zAxWj_#!LShbqG1})`?xO%*Tz`v7m-99c_(S=4Le}=5j_)>4mbxJcAb4Q^GZfe`sk^ zCb41ClEr*PKMlRHP1A)2PxXh`ZYoAe+%@4kx~W&7E&i!7yI~|Bp(^MHc?SPYc6U8s zO?9Bs+P66X^lf}v@HLs>=8#71AyAj=0|9Ozp7U-}1iH1qvap`mW4qxLKQ#Mk?_gKT zf}@P>Yzp%{@ItO@R#11rxBgjHi+z&380R;b+;Jo?bCg?$_Yz9(4zN;rU|(+6(KKce zw-QH*N#R1mPQ4B&)aadaiS-(arptmF&d%HzG*hV!{aY!K9c8r@D z@y*EAPSX?2#}py#!MbG5%ZbfElkjJKvwvD}Zp#*pRa`c zuSyEMbmO>0JCA!dYa{k*m~+S=7T#Xm>lPJA8#g0sqo2i7;Mm|9Z6sdptI8au3V|f> zI3VNG7~|F63cdx>POvjJBv;BCgC@g@N@L4q6y(k_v*0H~C-=o?9N;{mBt3|h!i3A4OV;y-~OLWMLz*MmAQ%Tr%BB z?xYS^>u{qT<8c!09KWqxQkxPXdSPol5#esL5m8+L|jq7C{p^(RbY5|t%5j(9hogR1C$&L5>3;S!%G zXS@zL&z!-#l_$zvwU_!Xo=t9Iy5i=Ei$aPxovZ`OtG(cJ?4LZhtN;x1(wv~9C zZ6e2mRmO5IS-!!1$|=osg@y>M7B0~y24>4A@IqMIJ{{d)S1RR=nfyLNU>k$l#Emn5 zusM3NwiwUyjATt`P;8i#;$H_=dG68;@iOTvABZ~x$Mbe#gkQuo2@dBE;+J4w{1Lq! zAl+QH8|*CfNh}n;?4D{Cax^CSrKQf#aFO)TQ6AwyUnN(otv6$~adY^tJoeU5*Q#CF zn__*^9lR`zwp`|0F+pQMaGP%eQ`XT+yTBF%r`-~&M66rU;zzASg9gdv!q-uBa*F@2 z#9grczQw-IzFEFbAPcuLUj{(dQ+rdfeRv7|%+XD{#j#w_5|0-Jr!qgxWZ04Po+ksB zF(!$S7r8UJoz0`2e*WhBP(rV@Ol`Qia`H3=8^B`d$5Y9ortg&XR(=}jm_qJ!^~io z2vqukjUGiYqRO${UJ6}28Chc~Jwj5K0FO*J3t0W4SC$xx_+`(kQ ztS`;7wiQY%Q(Z&pfTdaVX-bZ(L9FXgtB3pgmfDBNXA_6QvC_RJca<5$d^}#=X=l(~ zX0>CsW7p9>yvgl`8v-qktqKf$=iowd# z?VOV4OMED>k(sY$TfO=``LeV$X;{=HKBK2T$q*^;OzXI=Q6q++Jx z9>)Lt&sdytPMsp1a_@590(-<>WWqc|ITg$acGL^v-lP@j4z9sV&=|Z_sHl!%R)|+L zL=_kMayfF0CCtx)uETt^lBpH8$ASKi2ozuj5jKKPT^8KVd?wb; zC^9uap-fWxIonDv_!5>CDZsd3>(H#0o`!SqdE+!(iHd1}tpZHjNN^C1mfz*g$_tqb zO*@+qpDGQM_u6S=c3$)JbZ)J6wd1+%6-oCe*KU6B6xk9C!mHWl?tIivJY63tUomIs zH4b#~)esiyLvaURNpUoxPwhr8xq-?kwAMO@s!Trz-SHl%*`9)ld@XQA{?9R79qr#5 z7|zAvu7ut;jmj39!LrY~zHlo2F}y67 zB~z|Wu!id^c*u>-DGBmWQGGIW%5|v8cu3>L#A{FsAHX5dI=QM5FMKhd`+|A(K^I&N zdC4iMH(deWjFZSIrZraq-&5Y{N#-wqc`XV((+A@2#t*rJqkx_*H-W9B_QZ!Yhs}4m z1925SGQSBon8H-LUWsxz$Tk@*=gNli2}g6gnKy*zoJ$;t@|03ssqUX9= z;N@^vZh3yF(A$#e+QdX?RcuAczTrjilW(^%3q2!5r#J4V#!=t0(D;B5uqnU68$!tM z(qg1}D&WOyNXJy=vein)AKMyfFPxb#0ZIKUxj4e84uy{ROlX?s*Ct74fX( z?aEkgQDCZc55CW8$y_1!#kKedK0|TdzCwHdU*Mi|d3c4RnoZ`ugj%5`3D<&CozvB! zx*H7l?@`i~C$KU^wp45j)*-tRJ2y(Y07juSZo0z2i#c13qy8klDZR&N5G;kO8IOD^ z_M%d6b{hDJTe7DV!oz3I25-AccrNPem~8$Z?Nm~<@zw1nor_ySK2*;vtV~D8!H$?b zYYo>tqqorytb?h--{3Uo74GPV?frxpnp1&7Gb`v+su8i=4aI+~T^%!ps^%AW6qqD$ z!!kDm*t!1P18yuJ8!wUtS}7&q>YP(6K{{nE>_z0-Vg!1DXQ3O)XnGho4NXxi@x$oq zZeadIyOi#Zf52EeB-LSuqMvdxaY)Jlp}%dOITUV|OMuBVo!Cv-F78Cnj8(|4CMYYo z_mmLs@7JX83WplQ=kBdpj2v!K^hfgCt_>cY=R1>zy0k%8;Q<+WX z)I&(_hYA+b$B2vh{TL)&;JW!P2nnd3y#TdL@2*Yu2iOL-1-U!ie$~NdF{cm>Iz+p~ zMaeCs5jjm=r$Bjd6TTMj1ZLo)T2&OCoh;qva^tU%PxKRnGm{VQ&5G{^6y;*MH$0M)Wx6n>)?mTcpo{u3OZ%imceqBQ7uAK>-7Tz!uK(d?ZbbDcs~{D>f2V0cvdS zSK*5?&ruq6M1wRZ)x`Yg$W$DrSJV9hJ#l&NfcpU0nDxb#WbD&NXPr-n@T{*0`x2(3 ze8xUlLEmieB5u`(_^;@LrDXjvw-GfJ_PHnH0m5`H71i(^)%}iaUo$0*u&m~jJI6n8 zJ(`2kR6(QtDa2fw8Z1V#eWm2r)Ka5PD4xvbDun$~hFpYNr*uro!e`P>l0Inl#OuMN zEK@%y7tJe`wLy$#=5Wt+755~4g^$g`eAh&O@H*iQ-cC#d%lyZ5h=FaBzdhGJX*V20 zVI{@d!-yxGmD*8_rDWjM=SzzYtxCPm-GWC^g0`Q=?Eh@}^e(78Tb+J~8iw-(Kq$Fo z@J#fWPtdm*C!JsMW8VOun|wmmmA=MwpB>NQ8C+1fh5u*)JV$;C7UtAYJWR5&5Gs0m zl1VA*;qN86&5#K;$`Zq_$AR`Hh!6#hc* zW+m`A91E|SU6!{5U7bGC@FlCe@-puB7`gE7^9>x zQ@?9e2OVO65_(d{WuwV@Uz=O4V>AwyMg=`j zwXlAlWZ?4SebNFvO`oI+ww=M{>}azI-eL61?44){v?r<4=cpDti=Ty`1p?531kCV#)RP=D(N<(>nv?E#m~ zi)?EtMK2(P_03?Z@DmLe^_bq^i`zvS=XTBpp1R9}Z}eGm0y&g8Ht>P@M{mh2^*v_( z@K5j_YFaRfu1tPa5qYXJRosDF2lF|Kq)wr0>DzI4I-1+>EvPk?Yf&q-u4(P8F>s5g znY|v)0X$kC|3sR~^#TGt*tizxrB((qJyacxmvI#gD@(zAga~pt?xsH?=N_nJNO}k9 z58lFW7k^pfVI_96nj_{zt@QEscX+RG!nTFvy;9AvIEL88R!F?PrrE>3k*{pD%5yV) zxKzhOez0$GYC=4on!8S6polAE2*XPv#;#?fi*`u?6*qmb<~#yfr)y)^L_0 zcY20zB0gg`Xs2^JtJU-sO*S!8eUk`s({GL@=_PJL}%at?1jndzA zer|~N(0`9f^W`BNd2edhkG;|CVu#LY$#7u8#VjmiwZYQ9gJC{ zXi9Ohtr=81G0bQhod zPaBuj3F>35X7eK0iR;-ns0WpsfiKNU+C+Y>^=Z-o?|o&0typrp-j;e!J>y3w?)7cP z?X|OVKi;AC_DxcsqH}U_YJ@V~d0A}~0(jXG5zjw1gk6F*s}qgS(5~&$1I7=rLcs0b zCe(qobILi7GNX)Oa3x$ry7T*j88|^Z?Vax$5PKhf7rOf^;7a;1t(sV-X{*p|_)xdO z_Jj}ii{B;(-3^$E=m&34YL559`7jCgZ}}3uFn;C~!!TA3%TQ(Quzl6Xxk<8LGkYVx14$vZ@yfzR`g6Hc)Al(9Jn>~7mH>tN?> zWd`gdTJcIbn%isCplic|V3@f&;=53oe*&&+jCBQ>3iL5+;P}1kv&U=8n1$w9k{ns0 ze^+7yW8`+|vG~RMB+zmn#bi-wh82HDpZr}&_q9^EMDvh#0wCj!ZHfFs>g_Hg)=5g% zu0;LD-Sh?iu^`7N11~^LduJc1tNx*&h4%uil_+Tc>hG9O;-B=DFh5+cJNYe?%d&{> zh3Akv*=OpxV;CN5yf%V#VNZ&@I55KVi5P?_eX=m#aUkimElB5cJphqtA>7Hu+b`z? z_^M!i0+qT{ug(RH2dIJhEVs2jDX|fCL#v#13HjZ|{y{F>X=Iu5Rn>r0$B z%f;iq%G~|n4)BZdTepHtrLD4(A8M^Eoi&=`6S#6{K(H8Wg0r-qxH?J3XNs2y*>*W* zfsZN{$Zs^aALfh0Z_Y=dtMQj$Wwcixq-~&=>+8WeZi(<0D#OPT=WGPfN&aMI>=wL{ zYaA*}CQBmP?eQozoO6VH^d5d9wNJI#>jgfOUCjtxlp7=#0vsMh4G-Q)3d!rKD(IiQ@cCxh%Mq1wjAggRiA=?RRr&(mHh3-A*yEp(r0p+a%6 zT2d{UoariJL>wP0U*akQ(xBv?;B87B^pc$X_856eAGT(Avh5%`WNnWARnG9y^hif3 zcmT(k|1$YV%7CVl`61*P6Jt#^8qsTMk06OD^4@R}y^M3yk?wFAm~Gj?H9XQr-Nt#F zO;OGZl9S@2=;m|+UM}}kP6sBlq^E6b0~PkVQQem0`0g%Eh~+M+EcaAtm=rKJq5s@B zLV#_j&L-Ty-n<3Zr}H#UnM0TcD@|1vrNbNmr}<&df)r(r#U=TH(5Z`uNuP_{Y6-3_x<)q$9&k^S?*&H& zGnGuPk$T$rW4RX?tNcuQfa83H=tJCEZ7o<}l!7~fPh6<~jQMO13rFEz^n|nq&WoVW z@%+S@d*E0$%10dxZQ4=aIoo#Feb^Yw7Q-)KQJ}%T+OecOle~EhBd(4z!+AeAOxvEA$}l*Rpsi&ReSWaI@1^hnZWagmmnLJiqITQAg+JnmlE$Wd zFzN!;qC;Mq>HdSAxs`L9S!cvf^F3tO#1Eu5gAM8Lln;_k*uw6&cahI4(MDr^w)T*i zyFLDapgc7m8qpUB8b-ps-y*4qOkR(0}$k~v&MV0X_H7*-d`2T=kz9Hvxm9u|W zuQ%hR7gCmvz5SZa7e9FlIc>qITy>)_xQ!;s!-GJ2ZGEovH~um%F(NJ#a0Fx3VZqAc zPERkrhk_}Lv&_XH>>Q`=rP{D{Y=7Wi4DT96U=K}6&ZdUuWS|W1H`Y8h!neS= zkS)jjBK`7m+TY@DRnjHyB-q9CW{&h0W*b3NMOm(o3-m-R{>Kvs&vOG&m~^gAa2wep z&e|x1WLrA_hOQ;sbd~+B^+hVHBK5(=7c5xcl$khU_ zOSXhKr3v~#<{8=2FM2wzBY>n;phtLK_FJllh|DTzgRQWyvo_PV1F&)vp$)i{bC>iXXysGlfv6L`r`qm!ucMqU24vn(XE@ z(p`;kT~!Y25zKt)B-Mqm6Z1D{DceHu5gd|N1eEo+u$KmxwEy^8>c!A*bYK3J2anpd+wwjb&DPIUgxh#47^^)o zE-MW&qA&1mnlEy6)mBRi-W8{(od~SrI_In!2jrC}Ge5k9`Df12>#zp!IF&b3yHrDd# z6WQ(*BDAW-cFk`dUW3Q0o78>bP3B&{dJy7au(9owZ#pWe0(cLuwSF;2QT<>`W}5In zp^57Xd?v>`4+W#-qh2LcBDl?1g2zdH)WgAOqq5s&Yj4)(c~qUtN*tT~%v#hD;tB?% znw;lS1nAjjv<9WZqo|=#FY|7KB97hEzo;$lFaE}#(W_uyRt)ukY8jfy6tz1Xm3-B( zhCWDFLxqKf>MCG&1mGKQ73wKhz~9hz*6~Xont0S0t-nb852WH0xP%=Y3(50-0XIvr zqUdJ*xj()|-tl}*;&|IfZ};EBon4zrLi_(HIt%tFt~Lzg?(Xiyv)QbS?`(p*yA!my zL$TsTin|9*h^+6(v6&5CtfjbHk>U>D`F;UhB+NPIeV^yP+dC{IAEquolnkrV`{E>K zE2^Yf1I5rFaT|5v?$^=wAhge4JF-2%<~B-{z^XuV^uhQibjsW<)_0tCv}jd>=456$%4)r_Q`oD~ zG)~0Eb@0%2xjG9kWf6VJA7b;7<#e0BQS~Ms^(5(KVIym8{ExO*Tt}Nb8oSiK)%+FY z2XDz3P|uv9@xcTdP8rMfC0m>=6`vSGo$uSUT>g%-B6L#x+nG%yHQS!y`c>$l7bAai zwSBuG$EGIS0NJ4)+9}v3bQdK+#wY?D<`1}0kj?i#?ZG~|^-L8_N5fC}+5MsMG{IT}7ch<)VeSi<>rl4v06MgvW(h8Xvd7yQkL^+7iR3}v6Zj@= zq+Rfi!!B)*x+|sFcY$eX%7qJCH52bvOd*T*b z2XH1#G6N}3sTrgue^1p7A+pB%SLUpsY&;C_i$5P&>#|bE#42=yPGUYLU{@->gsQ1; z^ctp*92Cb|kLZbFL+ajL8s7u=A_dgZcx6b&idI?338xXm=1KUhZ3Xel*6_lVPPu!e zRzRba52yMn-WnQA?Jx|wW5&8VlMQ*j^dw_~bcOkszoHjl7V!^l!-H;Qn7-KG;wx!w zTVS(*QHySt$GCogVoCK=$Ao>x(fY65ca6K;0X4rmDY%{-P`)r{>2&#b+!Pko&XXo7 zFnl)U09Y*dBW*y&!F)y~ly-2>67P9=lrjbm zHGKij2xX0d4d9dTa!WIz5gduEN=QBJ{AoSYpqubQKOzi5vZYqmcx5#z4r{o!G$Z^4 zwN0=PECKqGgTeqVF|dHYtnENu$X5H)z)B^+(mpG;>?Yp?kR<{quHLhZ!xx8Oo~zwMkb#EjKS z(#`Bj*iVfkwZkK*bFBt$Egfdh6GIx{j`09jJ>vtS?*Qt}d1h3FRUCcvX~uP}fOwR; zH%c0|z~^v`Zx{H< zNZKc@N_-0XEpSE0{0)0Nxe_|;I!X44e>>*;M+KMD49p7Uh%uY5;!ZnWC1Z)Jo4=_3 zGUTKr`%=O;dklLW&oZWipK!Ha*sd8B!qLP;*GU>}rLIjrMa;y-!RpAGlus_3J2TXV zWE%C2v+O)rTKreLXtL2Pa{F=iPf{57$yzZJL**?j2 zR!d8flWr%?OyPxS)Zdj5N)L^s%*V-r9Bvt9I;iGY)C{#1&ZDA%LU^xPD!4MxO#zcj;$B)o6pj`4wy2Ns@g(WWKA8!yU4BD$R6Vcm%5A=VY}Q zEe{}lGj}O$TsFycev%T&9o$4WT=PO5DWA22UR;gH^W>V=tHJu(2hv$MLCPBk#e1|1 zf5P&}?v`GF8>Ff{QEO`*Pcs8;y!(xMj^?RL{Pl(LTW2~G^>hh@T8nRkz}nM%hYpkc z4FlRx-RE>uxAq|SD$=ZZeW9lLx89c8cDf~$k%Rsxuz&1=&@$?196;*n-%^$dRb!mg zQBo{H2wR16XghxHnZ=F@^@y?rGK860VZ6)xJZ`LBK#9xUM4Jd9Qi5$^^pY)l(NHfb z22K_~YiZ^OI+5$i%y3Ujza*}PNuE*0KQ1TUZXJv799{_j5@M7M@SKq;Hs;$3wdJe+ zE~3j-N|w3V(8`C95B>m`$uf0GWSy-gZefT`e^W}hZ=)jCJoX>HcE$>{jpiw5k>UPSkl)@$=V*Ou7}dvG=6A}MrBV>ALU znU3<~@R?w;U`Gwyg{4s7o4^QdDWm0Q~1N+-QD zr-d#D$5Lw&t5lb|lPyWNc!_irNwEOZ7T!=ZTPfq@Z=LOrUpV+~8 z5a}*XgnssR<}qhq9N{~|N3Pmx2XGra(_%w^Xus@>=9{>E$@fEXU?ONkQd0azO-i^H?eBfJ0rf0j1ty&t|#6D9Ov8^=H^tBoaW~Yt^rCj0G$+UyEl-e^8GETYyO}u{ z2egjnQ9fHJ7)ZBIFlGi#{*cF$>mje;z*c|Si-G%6r9irJ%~qd}mAb1xaSVJz_wQX2 zW@}Tn-!o8-a?y|pj#{b+u9JfNqo>#|UfNerZk!`R8OoV}8IG`b(% zK7O&~H!@&f<0W*9GW*GxX6(1L%u1AEjE5}mT&xMP>5lux)rEu0*p*Sl34QhO&rHx9=7n1J+z2qDXCT zws47bA!%SZt{5qYZ-Ire1C3pHhkpwB+uP5yYgzb4AO)R~*HVMS68Kr)DeeG&@k5}M zPNbJAx02(^PqVrf)Y}y=TJa^2fOAlH={#IR28#nhbK#mc9DYL)~3?}T><1A{$aLrU3cYThJo=zXpZ z_r|gFXxaEJC{w*knF4JkTGtOFf`+|(*$J4C0Kw{yzK^Kk&}XV>Aiq1o0s!h*mP&rlz##{&WO36rQ2^_s64Sg7x&DfzvO2d{+<)UK4F_SIS1`BJ=1DLr>GdAQ1X9wiaK zQP~v?+-KsvgMIhp_j$9$XX-He8`#S%YzPd_v{L^2#exB8cN}B`=N?jf}(# z%@A`7H`TwPB#gl3z~IzTmLc9lYJt#NGB@C&w!$s?6tz~uRMoI8RyV7fnjNTZYi?di zNlV>h;TS@#*cEPwZpiplinV?fMV+DW`>fThcgcW_6QM%1sjM z6G>zJD7XRBKrg&VTItB|i3H{-gOsDT$68%&AFSqHWIhkycdgTV+VYF#ZKL2?@tdZC zrYWkBz$cMi2)d5JG)Rr$@?HE%xQ8o}mU+wdU#P)stg;GkVY-|4P&?3ob~Nfsm>CDY z8!0Fj<}?4nci7bE7Lg(n#|^1Jin=Z*k+06dLatheN0f0Efo)q%GdfUPmc!PCd+Q%g zY@kfmu)xIJqQXB~C9w@XM~0FY92WBs3HA!iv2Ig(Bo`pl+$Y(s!Gf-JDFK=`EaWMJ z_J#I3*OsT#470tO2kbnat*yQ68X7sIX@tH%zDf66Nq|gb1vO5T(WkNcH7U} zVub>Frc1#CKo9+sHW?f_dO@fMR7%AyBIPHWm?h+(;d9hfCdB13=M{^C}z<>eNX2{e!$qkUJW2fA@I%NP75(p~N#-Nkbw@uZ?&hdr)zckGrwqjO@c)-^`N z<;}PFiQ_jFm}iZUTUM4UdqD~avx}uSdSdihOLwOYpBGQ*ufze&HaXhdNhi$7T7+y0 z_Vv3`+$5g((I~lDT&|qpnoN%HL2Vo?B&;CMwY$tDekmyK5Intddbyi876s<=o=`s0 zhcqA`r2A?oR7j3M|eb1GCN0EEB{M0 zWp5ZKPv;xr7<&)2DRBBo@4Pi^GyN)Dh2I5Asjk|a;Z0$6>L^=^nE_X*O#m;B1&(wp zUWz&?-{{Nr40(wLIAT!Itb1sybPE;`CyLXl!>|_|qels^jFHS3gF&n%OmN^z;4%qn z1oy+;Ls`jTY$5GE9q?N=&gj9_SHohrm@c$On-C)r0`Tdh6+ct)zaRN;H>z ziCtinWP5;ViZ}euUL6b!%tAL{H`w?g2wCIXv5yw6{Epgzz zV3;YkYN&1(8>Sqz$0TJ^Q`QOf0JjjPCY2x?MFNI5NC7qS(uvM5rrW<#>Ros}F#)|} zt3+y|Ug}nwJU?YbMYu>6+hi*j%oS8{)+mncC`!H(nHT;AZB*7IRn~usKf)=XYDNL= zE_%+CRPOLgEfFqAMqy&8G>kU4qoG%;y+ zI6m?<-xYCf<7h6 zQ0*8j%NGgOgYCg}$7AMEI6wHVjNxW6<+C4aWl0~gprf6Z44h&ot&TDszcJIpV?I#iT$$|xXiW+(v|QQx=L)^P_PlP9s;;9R<6S>-yejb$NuN=oO<5Du&F!|U7u zPNChs=|aTTRR4*qgI3CG7*6()PL$cXAY3lh^c4zk1xwHuDUBOMQt2LcwlN!LqI+eeTW3+ zWS7E7`;^-IXw{>Og@~HtxQdFawTynkXMC7FrKVA@aTWK@@I7+|_{!aMB_~$aiW^)c zlkP^QkPh?~)yVkW=;=BL4Dl~AJZ2B9gZ`#zi04MVcRI$O;r>@iYO;shr(&aIKQ2HL@~Y8_^KeBZF5U*#&WEe|=#UUUslHAa$e zbkFiRzMz^ONLF`*_NyI)(fGP>E7Tmmhc(G?-@Uw}I?beU z#YhJ2ZeGwo(X;iFHP!oGjt_QFzla~TgU~5Gh^$mz$h%z2u-CK-o5ah)ei9=d3XK

h3I{7Tw$U34fYE|hNbDFBJmRj#vCQk>@uFC36Tj^XR`qNLNCSuT6M@A5g4 ziRW4d*=&V+yGbxxbZ8WyhJ6Mt+G3uBXB`nySoS!X%^E<{iQT9L^I~7$tX!&}Gq?AP zF_kS4okN4YZ!q;LLN;3G`68s%O!d#_C3tnv(cPjQ=n4UmB^i%J&bDV4eay-Wk1y0b zDcbU(`Z}3OOjpCC23N&TcPCalx}@qxBg~p)4;V*VJyUGiP36*Ys`)_KT%@;WL9_wra$BD@8>k*iofxzg3jRZhV(EuUaF zDoQgLzm67CWyBH3VcygEDcpU$hIpTnW_xIa`!zVpm-9k$w5(%x;lD^*qY7p|^h7+{ zV2#(>>r>z^ZKU?g^r|`T(3QwGb5hh}HpSnD+(Ob%0@M|0_U(>|yb&KyhtO|z!bHB* zOsrFMHdM&P{pT#`t@TJlk`}HHWiR1m`)nPjq1c_bsFSRDY-j6mOc7)#&g7dx$;mF5 zXQ8ly+u_#dg6C*g$Uyj-U%`u>-&;t&5gQ^8C(k$ExDLD585+1!b)ktYrk88sezLsTr8M-GdoMn8vc^byXqgXRi7udk&n31wxh z{DUOFUGl69&=SBG+iJP#7t(^{@K@3L%HhYq!||wzD#k1t$fsCGv`j3}x)kzOKh4jO zmzW|wS6fs6lFvn6qqrLEo&r_-FKFnRB;_S8c&dBxHu50)(cAfUkxsPJx01@Frnq`& zqJh~XNzuL;Pf{;|VwRq*mUE!X*`iIi)nk`@yVP@VY~sv=Mql!k>8J&xa97%@maCN7 z0a{McOgqOy#Awz8sa|EtcAL*^sqIbvgByJu=}ksz$h07(tU#JsM$_(58hDTgw1?zW z_#;${OC2t906vKwV9w7I>pb~MPW02N`kxwMa1;e$7J7qD;$7wSsCE%I=m?%q3@~z$ zwN8t>cy^;LymH~tR!n69qOTt;X}JpiiVN^4mXrHX2lh95o9}su7^dd)&9P%JFS{bT z=>z30`j7e9nG-urD(P2!lzRn)poq?9bYXncx-lu*vi~U ziU8T0Y$Gk9!3bo5@?wo;Rys0?4ROB3-LDqQA9hI2L!vHWe8C^X14nyJ?H%)ugOd9#%d9(gA?Y5 zd_ePogxcG91r^#XUz{VJpMp-YEGEbc#Agsk8u@JDQ@~WnDB}2o@Y`$?i6a_l*-9A3 z3v0TWgYW>ByIs9#(uwmjlicXr z4sXava*$N!okbQXdJ^bBItn+>o!|_4siV`EQ8b1VCEj}hda^^ZqIR9+=1K&} zhN>J`4E4a(xQQ;(Ntqb>hcqM4Y~6W4D2XU2tFpZEQtUyo$Gl^$B^Svw{h?tH!oz4; zdXjbU6vd6!iW=H*I17;Pk>Fj@=oa15y5>Dg*UMEhOjN`v+{5X!U(jmNhtQnG(L0fe z(Ho$M4hPe^o_8E^d+urj4`pJXT@SS^QfkAZKE+nE{c%P|hc2sytAwrXRxF(jv5Com%pj=oCA$QClA73FKwKKKZZ4w2Op@zF>qmmx=NmW%3&` zavbnj_hVgbeY9+10(7Ne=))z!mGaXcBJ1d}m=MmCi69|7gg52|eWy-=HppUj$S^h< zu7FvzcUUQvTXhDvaePXHsE(wpe99)Nuc{T(wWe|%`$+fDjoNK+@*0pO;yYGBWu7MY znB~bA^Sd^PoHr7TpW-7uihJcrXt&3(URam^K+99|cvDAivtm>>Xzb_FcjhsEh<%U# z&JV+3dX-$3!?A;`C)c$*T2b2$eJ?A7)3lPYxcYwTCS^rgG1<#ebENsFW1`*yT%CQ! z5oo@OlZN7CorSWYr~}{OO>#w#@pdz|M{gAlHp!0}FKZ$$lG>z-ItZ8X6!DzyLCv&B z%ZMzYi=k!M-^?%LoMCbscv=Z^A$gvC~Cy03=OnhT{$Pb>J=Ag{=Ol9S<(dK`>Bz0U}lux0SQav7W!kNV^qh23!&KcpVXo1n|zrb?BO*^a-U zSJ@%ACLgO*(Z$S3{?Jt(8=G!qP!+81zUj$1WjT>Ew34$savOi@(~SVk$MT3WG@I&6 zvG2(GR!!UlQ;eNvdp=#CO(vmR(;Zy(UUEo{QDzQI;^)(McjyX541ZU6{?I?+5Wk9rg zrwXtMm?iJWTxJvGQy7O=Pc(TCRddUt(Q@ory%sd5X%z`^d? zoNK>apV=?-Ihenr$U;m^PNO_$)`M`RNu$gH604zCA|A(jtNzo5LIfOe3c3RpY|deFMDhc?fQQ+tp*vK!0)Ta75-w|`g?h~?r*ciW@9uubYksG4CImPo-Ww+*;-|1-h zEOO|%#gaw^qTeHjAg=Bunv1RR-eze+Ad!A|A$%eum^rRcRU&He7?Frx$3IBD zw9C0PfYn#8nE^*tMJv7kIl868wFcS`9;1J#SlaU~^7s`SNe&m4MOP>@ zKgu(x9||C+_Ae1Y$D3MA44;HaO}J`c2Jo**U1Wrj8x$nQ9*F+xXHcT!BxZQ!MNZ=w zh`-;=A6ipYlQ~3hS2dX_MIfQ`l*nLS7eCoT9&fA^1si-pzh|om@$A#K+FBZgS#WF# zF~(}?ooGHX+me1RFJbhmh$Xp2H{VRJDQ2=Krl3_xCS;WmM|PP(%duxDR{UbpLH3~% zsor7EVWbf|ljNd(p@}|E9yza(PHY|tMxQ1%a*c{+18~dFMaNf_g}VO2>zYgSFJHW=-qH@eivOvzs_q}vwc-q z3GtEip;y?}Iwka%V2l)``9(f5TlBQ$_dZ7t>anrY8p{@_;=)PORHX`Y%*tva^c3p_ z)Mu)5kR}QQ)n#~k$?7i$MqLWCo2l{< z_~JjIL4GHK^m<|yyoP0sFJik&NBfYbAxbNq*2(kBc~mx5Z?%{7Q*1nX%6?W5dbY-? zOOW`pS$^bQ{YdA*9+uNt)Hp>ad#771WzI@IOnL9>qg)xx@~SIuOy97In3%fhY}-Ao z+$?k~yQXDDReM6^Vnw{csu$Ua*>bo!RSS^s$W?bG^I~Ls*`NI*9!rmU9M(scNu9;( zX`A^XGL7eyx6GNi5!OWqC0FDDeVMGEHdFm!1L<>QLtW6m8P z^W8711sZpn<-ey3zR|fLlN_w&o>{-D908OD%QF_fPI%A+@{J%jB|i#*O4A2c~jc( z;n2XAs@*&_y;v#=hR>5NJTvr4Vqc9o_7pS8f)NX}GvP?cP%n8;+}jW91K_*LgU(ug zeI{*Te3RML5d3=|!hcYcWM_fmtoWdchGgdHLFZ92gB)eA3QcJ#>lt6jM&OqEyY4h` z)*dcuxGQ7Qsk2Gm@7gk3peGA*FvCFx`Iol?PicXOklP|(K^HL3{G%cN88!YIRO|Ke zWKOc*;>huA{5u~`catZynLI47%X_>iS;%dCJ7L-lu`F#K>1UoGUdOljqLGSX}uCXN5UMR z*lux0_2T{HPv=;uu$!Vg_jhD|xq*HVCq!j<>HpQIGN0N?v&$x!ZB6zx@E$NPSZ_d= zf9Kum$R*}PEQCrYSbX5cAgM8BxcY?T<3t&STrJG`+K65b?#*qiO!>@?VdC42F_85`)dKR6 zcaRhLXZLXA7=Mf?$ydly`WJf@`XUlzuGck7E|*HOYJ!aSo!BQ1kn7^z>axgNsZ}L{;j^W1K;-iRicCuv^+rdR^9TjhE zlLf5xpjWstVOU9=;#EXA-0ogmW)kYmnR3PbF!W36TWDQ>*kkb|(t$EQC1xa)^%H4O zM0X<_=0^SS-NnhZB8#)KG11(t<~j}@NkNueq0|Mk8!uzMF~f{sn4`Oe(>@%zH`#c2 z+D$%Rc94(Ab)&j5QM^P3&@f&y3d%b%0+gsf@QGTohpg;5CU$}vos|}lZm-At6*S14 zs(~y>GTzRv|a|?x*?>Sh!JHYbHJH5L)4c5|VzBM$`_)TZ3cT9;dVs~0gFzT)*masa3Lf^?pb;(wX6KQektaE{Qp#6a| zqPHr5wDY#|u4qSFuy722y(74x<=If3>6vG%;eL)y8fxMY*gN`*#`XABGTMLKFg)< z?Z_T}t(Jgmc}g_oFVrwG%^DVOr3hX?w1qNey*`&c)2Oi29tg?NA1NsNq1LyDnnwK0_x6!Tmn@FX@ZIYc8AjN48+{br; zB2Y+Fka>Jn_)Vy<>-swT2YS5lx~H=S`$qd7=>^PF7I?d06kd^a>_F-2r*}bm)(jw#ueoHOT zAE{sRvzdvV6q%uIf;Wazx=*2(E}k0W^)#cDeMxvmA>F&=Z2Lss0iL23e4i>}n<(PE zlkI!8>f}mTJ9@>vfR@*1%Ps5@eIT9Epm|6>Ok0+rOShcAvae)0Pc$bDtoIRv-AF0I zGn~!tlX`qRT-Kd%-yJ~~3B`BN*Ty<>N1TCMt01o(UD_xlGV`^3y78H1^RH*I#sjSz zoVKf3V^0@#Ir0nNBxgE*t5-^+T=>l@jjPti-M7frL(~g$1a#j$;PT9&&uWxl=TL7~5S92j^o4Ru6B)|EMqjl@^e~q?m-46Z4uy%o zT>~OJYQy9?0mhoT#JaF=^aUJyv0^GzQB6q{(rJRCsMsZc!4tTcl;y+RIsLQfczB>r z%6u$I+CWcOXGNj{G{B;1<=x~xBu|+q=>3!~JWRcdt*kB?hBXJNk$dcXy@`x4;Wk*5e7#!jO zU<%BTN%5W2yx|Yf<-USy@u>VE>cwPMK|aN%k`Mf+h&8`jTli;Tlf9UeMta5|0U}xk zooJ;_c&6}!v@-gF%Q5}BR{gtpE}p6$RI%%#5P!g%cz)^Ugi0PxI*WSpDUI?&*Wr1n zcMl#Thua$P6XYKd;KIZyQA~emN{~>-*f)Yb^O3HQ_sK=Qg@~t-=#D`vKr+z=c;a(G z0ojN8?r&&!Z?XFJvCsiKl|89S{UW>~$TEMi4fvk=;Ts&o@-*y7bzX=8yPJ1K`E}mr_r3Uxmg8Fms_%+7-4QykIYw=1cjsxDQDEM z`f6YNA2DATW6Wea@4ywv=)n;$^=RSebL1Dcm}G*J;v{&USJCT>rB~!Dv5>rSD#xby z`$l|l+teE*Cu<>#32D7etqe9zK^02Zr#VCktEh#F*?0>YWjd(Oa?$#A$NQ#Rt?46v zj!hEL{v>#ChJ}7G4~y1^@*~e{vEOB0rR#;ko?Gh-DL0``8_znD!PO=qd1}7-1WAE~ zF@gMroW&)mE8iqqc+W9fJp0G$%eJy-ax_?Dw(v3XH+cq+Lk77@T!Qi`hg_^X#ChJ| zpGW4FS>;etf%c4Pul+%G&SvqkVgYDZJLtvG-M&Oef=Ceu-^*qzr?;JT*UacE05;iM z#~t<%C)iunO^j66q4&#WF2GJ6zzuM8mWop{7x~Q#$abnFUqp!-NWa*hkXq=0E%VPd zz9Tt=!YzJ~4T5*@n_7%_-Z%a{{chBE9|wObKN}h4XG(_Zz&qFuspz=4I_q@KLJ^w?n^MLT?7W^AGJleL}KAj}sIY!9(?jEd9x$DHa^f z$d{4V-3OqFd*Qe*_84bH4*oB<8`VV|U4>cb2sR9UD;piIhL}xJ83aR>+lWk1J&>^C z<$JQJr)Uj~oTj-*4gVh6;D4+^pew z$<^ecz7%I=A!a8xz^Yml5zYIv#^ykDg6;GbydR^jfbhXa8fk|etu343e;HpFnuaz= zz+*IAY%|JOYol)91U~C*DYl7?n78z&ujLdKDO>UD?v%C|HW4E}|n(u8U=c%W>x*ALmhnEb>Zq4^h*>C5|pkpk~ z)3f=h3)m05&o<&4y0Vw$4T-EawTAYVpYiv#l#5s;+$kK$+<2IrhP#TNH$eumO)u?z zN!HO5?l+<~CZ_T7vdLLrdrLqAsf7CtU)_xkA8OkC^Hs~!n zh#0Lu+_d5319UADMI%hu;_dxdR@NPCk2Ltp>WS7ozZ`(+RCW32gqu(GzcG`&tISQt zR@#LB0AOZvj~i1&&aE;baX&z4Z!7PK#+(^+qq{+N=inONeCZt+zoH6PIaz z^<4+gjgAucy;WI9{sXD2yXkHHrzi>a%dyn@_9%TDoIk0gsQW0gbe@stRwf}MXUpc2 zh^1-mcwKn}{=H;YLghAdfH&YkpF6u)KsKmA^orMDUTd;-W_Du8-E@L}m_AjM&QWRR zds0VKgs1(KeHWfbWz`D$ms9e#JE!^G$b!mxI8^!XQCEh0%kn~X=Ba<;bEuBAE&8A* z-Q#IVGRE3vPLSzIPdS~8maF9?XcyMt{#qX?*h)zH4*s`1vblF#WNrBgF5N7+=l`QZ zwLQ?0ACKxy)B892oN)9sR2#wjDd_oETu7^jr`b+zMQ+h2d|_wQUfCe+Hzp1F?ej#C zkwEg8yZs|Tbc=PDC9~XcN{BoJ5w%c{mOpeHBof6cSvgc8o}|@47V%Ay!5hyOx*oY- zL5=!>zjS4`-pLh_%~18%kx%vcti7i?s=C~Al*kbKRpysjwT4LdY{@^8QrHn^z_T%z zH{fkO|9}aEw@40h$H$4Os^J+t?rGYe8^UMfR@B8 zY84V;UXkhg7XDs8DchvkNeg>-(IP1~Qk={9J7R^OW>rKntp%N+{=v6;9;(?5Y)!}> z^EExfgVc64S?vxc;UA$w&&vm@arMiSKXSIdi><{iBn2m1WiUzFgAbEezD+(Xr}0*d zKza19_{u}!dHtd)`q34KC!+Ny>ZuR};D{*Z8;oDs)a#tL~@G#_F0 zjEv&PwWe$re$X;?0+og9I?e`hkAMADXIA}`3#i&lC$V=Ked6CJb?>T1ekHe6<*hsD0o zRrIiL8Yv`iMwN~3%mdkFFes~|3hirc6;&`1!sG{@h$j>Y1ah>IgaoH9that4xGioU zjVvN7F&`=BA0g6%q#B5hkwe~;myDax=to6mpwTJ4@c(bh*`ga}DbdE+IyGf8*;j64 z4?UTsPG7RYwj6W@KMmq^LsMBJ(aRh|^IH$RY3hq{+73New3igcs_ZKVr)Ks9iet%- zz0+iYh<2o!{2}LuCz-{JKg3YAq5B`MOf?0roI2$U^r`#uF|Jo|Jrz)^ST^C*9;niy z0+KuOvo(5O=!F)Dp|(}*o!TxRnb8po#53qZjzIf!kMDtVrj?JdFnO9*A|tc{GDTh_ zuzP{TSj9R@z)rAkc-HZj)?j~Ad6rH0Wd!N3GcTs1JdMN#W2Jm5y3+f&N3J6~_*Ks$ zu~z?JXxPODgRqjGuBVG>ym;a{Y^-59?~V8x={An;c7|I}8f|J>rpUZ}cXH>yWT1k%4F4^A8 zY3|K*knf1_!zo-KbQbox2~af5^o(}zVJq=g747`P|7SMx@Zh;_;Hrgct`)i zZ@*PG24$p*^msKjTM;!34CN*uUcZ&AX+1FRuH#8t;v&z0Ovw56T4FqlfG=tSHJx7U zzI$<^mJQCSX9pcb17I0nmaR!= zHk>X=YtC~(Ej}5}!dd=6nNFKQrtofTIx;>MvHjc$w%JlSg>^=6rn`Tc^_~XC=V4AeXlUl zTtg=tXZZJ&hT4BbfF^7@y9PaDN4ktHLSJJKd54{2xGW?ZW3>h1Ka;6})PSYzsOSxX zPf@YJpMhW2hDH>obyyg>aY0biZbK^DRDOf}OBZ31m`y)IQ&j$ES=;!n2)}p4qt!M? zr<4@C1e87C{5SVECzJSIB&W>@zaaPW{G$I!pPoQ&>3@@^WQdua2U`tk)wDdI*w!(t z%Jk5lt`+@R0=m>&L<~B5&G}$;RqiwfAw_Jq?>6QYxAEQr*s-TZENg|8h8ZPFM;<&X8B-BANb5#vaKm| zLANZ1RJ!LZj5}lo^pjSyOf;30VawSNIh4=EZD3ns1g3ren6DYu2znuzt+%{Ey=AC0 z64frFIp1z9ME7|SZj=>O4TkF9j9{Cg{W^{gW*nGU=M*)&h-K`z`wl(s>nz&RKKfbY zO0`D%Sb6rE&7z^UYDNwt64hQ&=MqNZEO}M6sbH$y;EOh9;=2pK}ygPm|fn40`r-8EC|xSqPUm+M8bRl%=N=%_;~gT@a{GOM(kl1vOG4xq=zuOrdL~crO1dmI_zSIaS^MnAp&L ztcyg3q8u74Z8}+nZh1ACphtn`HAkx;f~aserF+N=R*XyoC7_x43V9$cSXpG1)gbNY zDf6l*j4Yr7ycKVAa1nA)L-e9zuu|GA+0VQol8uYJ7M+cG@=I}wMrpP99Q0B;iqi79 zp5J-_#n>v`fAY!uG8^(mGP5rF6|m0!6`NQ~XacYCZfdCh3>4=763GwAR`M3X#Eb7E zMfHhhjM)L-&`Vx|)gqR=418A0K)a|0hFn*?5opYifm}|%K>Nu*tOx6lZ{~*HS@sd% zF*mwGF3slc0wWi9mDbhlPmoC6!y#goZnUIBXg{CE%bSPLX}9Ccp;33WGA zwtc`XY9Mpqj(rew`wOU%%AhwEz_zf)s)_gm2T-WoPs@3?kt;MOv_iQ+Hq1mP_}9{G zeiJm7OCl5L$G^ytq>a{xRx<0WG|y)C6i(-Ms)Cx~&V#>mJ+H>ciFnbLJ+X43Um7GD zi*4pKeu5s2uxMG4SCqAGu$jnVI;{2?r$k}&gT7Lo=73_T0lt)Wwt39n2YP3f+xiPL zBLnXV+JCyuJ)Wid$AI%Nj!u+a;HXSMYRRZF2l!i723o7^$gW;zP7_u6G0{Rf#Rq87 z>mxh*23^4NS}V*x@KkR^RhAvP%A@cqzUP%sHlrRj#ot_1k!k!pv{&DdHrx+82Saaq zF1g|}<$4iM3PQJ<8E5PdxEr>C_uCo-s;rMq>S~!4$5R+6cXBIB z|6e~1H_TpiD$SnOj;5v6K|<17WdA*4eNd}zG(t!}x>H^iW7STaq-zA|p}`N~P+T6m zM)nl~#A)kbU;-*BHg%P8he^YFi>i{fGqh+_$clh2?Yt1IqbxujPQq80o-pzGVk z3!`Q)ENg=ZRZMo~Kg|H#i@W;{lSF2x61?utVy-Nyu7mP)6gtjgXJc*Oie-R z`EbkEpp?8s3Sxip7n_1^`~{WD3-O$`Kj27B4-18=e}$aje@1g)Hqsoav4?0Nw7qkn zx6nb*`Hiaav#8)7D-vl1WJIlo0;wIV4`s-Bc2nM`!^BLQpMM|)g%9;oHtm~vffqpC zUx|JaMO9aF-CXK>YZk)UahG;6GOHcpJu{$S8jbl;D|C$#80{L;F48}Kl)9`U!rhuW{7plnr)?7AxW#zRoMh$izotNvxZ#*FV z;O`kko9JbsGo6i0t!Fe%ZzguY^)v@R$pFk!JMuStHNPX8s%~lbc{^hj6a#ZXYEY9b0BA!6`(S&=X8;Y<8Ok-Oj2Qhc} zXmm;T(kUvZ0tOwB3@&nI}J3`@<#mKYUcl4k>H)^-7K8eF5ZJVztbCK7Mp7vMT@R%fI zjBOV?QctTva)7w(xzuld(sI8B6fKm{Wagq zQo!+0D%Bci&<(!NWeaF!SM;La?;XWKWCe)aRQ6gD9|jCLbqw8M^v#LhNJo?0at+yE`k zjD&mN!OHL!d>E$Er;WYF!lE_C{Jc;b-*ntU3arQ9$8r1$2vHlh;#{~uu9vAE|Dd; zjjpP(jy66KtNBp5riYS#4m&R!63v_pDqk{`YT;qF6U*sxP#O#S9BiR}nMOjD)DJ)V zd0qrs?>(#>E9!5+G6W~Eiu3@^s&1}4MABo)gXwUx176s0n~ibSg)Tl;5^r~sdLaTy zU9+zF9dy7ye5w0`tF-qK-5$&}hl*swjWT9FHq_`AIS4oE2&k8ilI2irjWBzdmq}gR zwfx?*d_1OS`AK^=js39iPkhQ2K>yi=m$(1%UnR56uv8~Mm`Bo0NEiBKmZKy6k?5(9 z=NE)qMSy%Y#H`HQfGU~SeSv}+_42+MZLDlZ@e$gD0bk4>rn*jbam&8*%sDl z?_j&=b2^2kSBoR;>;S9Fo|5n4Ac*k)=$s^rWoB&1e`~0^o?g62{1>}bQ_(3jtIWbD z`|a!#`I{ag)95~yQBDDCXBZ7NzS6i8ci1>HghjG&bQ+_;Y{AV2)!z-?l)Ms|T@$U% zlUc#2Dc0~+UA4COxZrWTvT%MQM9aJ|XO!oGUk>%uSG1mW0bFrLagADe5#hocP zrhT16QsfeI13%7^pw1mA19%;=Ty{oo@Nm`?v-RBEn{311{si}VH+uO=pe9YQ=8B2x z63tA;gnWr!sm9@n?7*H|3%u(>&*X6Z0Mr* zVTE?pMxg3=%enkWdaB~2E8Lm6xSj2g8@1A6YrQD^?H)Y;e-{u=y+=c>Hryu`1#w`1*Jsh%HaeJri+?GMjg5`Kne$n~2i zdYLxXQQiQX;wYG^k9Z??Uv#bIGXI+sKjRtM4*KJ8O<`m2K#uK4f<&r$4;p|sWGYG0 z?Q9?ZNl)IyNW;&64PWaT_g`sVlE5DtEsVj~3;IPmSY~Iq(b^ioE_y%WHwduzb=lc4 z6={t}F2i%#US>K{)3-@}l5?Q0`^7H*S6wPec7qI`s%^(}n;)DE@8ED~-lJK5Klq8h zS(t-W^xcEEr>H!JPLbhT&CBCS%rQFo-jl+#fFt*@jAmZ&CHJGNdO^?O??yVxVRy_fnjT3ox(cE@*m(69sxdd#!0M<-xbpg;H&O}jrv<(5 z&J~eI^N^~p)pjRR%-i{b#Bp`6QnEIY6fiPj@7{|)70KM_xGiRzw3ccFtwp=xsV0cN z)=AyQ9=jWm29Blbr|1ygnN-k+&$cwZ5|Rm5utqc5cPY_OU%HvhI} z>ZMQ_=at6*;tylxTlJCAL_CP zdQP)|ZM@tUdyH(riBIV&F%fSfl3nH$i8T(E9d*sWNn5=CojkS4eoUu+(5d(hcB7Nk z$x(voYAOf|yN!{~j{3jWMi4D0%QI$P=EYf6N?XY8xciyq#3Ovqf3bR`eM)*(lKsP7 zs-gKzr5Ahs@a~y$G+5Py5@I#p*$w|8WTYkHp0-QV;3#|K7wi+LHCst`vdm*=HBisD z7h|0z{aYMh@Dn?CqpqKYf3g=OD?7_Xn#t+dWp>#wIXkFdhF^{$cjyLj(XkG@8&b!t z66P5_0AKJJ)t6;REELpIJkoM_u2lD!hHYt9NpC6FyN3#kf4=f$)a_6p<_`(5}Urtw$&$D{0cZu`k= z^d?);436>eI}}vj3N}{7=*;Wrlkp|pV(+jj79G7FzFV7Xbmtu--&$*BZ~g_dhW>a0 zxkx4D3B7Gz#&5R}RLQ=qxW9pa2;R|KoF@);KBcYbK?nH%<-X5bQ=KV?v z5{3D}(O^52F%EW$zQrA`Owv$N-NL_%t;K!{=drM z4AIi_Q1`q@J5HADWQ+a-9-(ye`eoI>_?##>Jgqoua4>Tms*crAx&&528!j2=bdlt{IJU31!@3Rz1EB7Y#oDo;vcc7N4u z%u0hv6p0K^2Rq0v;tllF&eFq<3aBZ|_}8O18_l|dNY!19vCX5$A{t@s`cv+r!hN76 z@iR<7>ETi%{I__Bw$0qdRGj@$KxA)q)qr_cT;~$0@WEH^kmZmh3GqOE-FOCq-@F7SrM9 zp37o0s*;+RrHmA9wNb<)+t6`dFV>5Lu*Q>(Xf_xi`e#Q{^(yOzgMr(2y9K0}6UK_|lapr$D%c${k zIZlU2HriS5WC#98cGTmd*7)vYPxR6YIHR_RGqM_1`G0#@F+Q0L)b^2H@@NFsmB@|}?TghsEhL?8- zW^9M>`$VC4*bMb2o@V4mT3RKDUt~5-qD!%J=pi1lCuFYn$p4;Q(gvBu)EXhICb->I zfJ$f>wA24Rk)o~$;}dw{i$$m>4*UHxc0*pon!Lsv!>fFg)>N6*DpCOH4x8o z5?P4by5>MG5-N{qHV6A<0c!?WSLL8vOx4SzHrL)j+p}8c5t_G$yEOa)cC6GTJ{vkb zMd&i^25vW%_{6kybd?(A*+IHn#i4_}0&aU{bFj6 zhhj|3vD$~}0Bsvq;DWkgVv<;c>^h`&sJWOP-+(&fyk5ctuL{4_XMSHl%EqSLl<%OE z?SXS3lGS2w`CNFF7D~g^jpxuoj6_XnXBi2FgT5(PH2GBmd@und8q?lQBiQavOA=d+M3?1DfDJv~l75eP3(Y0QI)nL6X+-pegbA$gSA$) zgJ?%;Y1REJK;TnRG1f~7U0JFPtlr~vw6+F`+Uex6sK1@TY?W$~YpoLXMLyC-}A`|G;2a{RN` zM(&G~NMwsmIgK5r0IG#(QY89>xExf&yBob38=Gfe$m@wVDc!tcQZYS8-i9^HnPqZ!h7g>OylwtNj_3!9R9He*nNt_&AF*Uu(KhjvW zF}ff7V2+Kx%l@Esi2G!XDE1a}#|bsR_{+*0=1;LguVl|+%y9o<^Nl04fZE2Uis^iG z+DrlJx;`lUi?=7fy=lSI(bM`Wma4W^TY25wWgc^XOPuD-t6kP#I8URt9|#xeE>H= z$beNHtQN_MDo$Idcats5V6ZuM<3>}+TSC-^Gk3KfhZW!6noYu?LihiVqiYPWBW=TV zYTHgy#5g$$YIEzYZQI(~wvj5%!Qkc0sj)S-TW)RhyYpTBvwO8UIWzOl!y9BEok%C3mKkTU%^b?TmN4H}c28C$LP?C=V>AbL2Je$^Fy?zj@n1HhCFx3gvK7%q zQf*+|cC=A(-gtrPCF?AGFz$9l4#&a6Ef`X{lzeBwPiooQro`YKV&Xo~l%G1vU^1#C2FsaZSl3Ci`48; zY&pfpfaml=(VjRZqA(86YF1FZy`gw0kjIg9sm8M^#WU{2Ur8e-iJJzAe>?2nv@ zle&U6VTF`k!08d(mvwk!ThW0k6*D5Ykt*0~Hza4+3v*n?83{BH9@?VyRCaH%tn_M5|XD(!ZS zFnj8qZp?OWPz%TgE*o*8bsMPu?2Q=4|l4Dv=XF!Pwa$ zyG||UGm$6ic7T%<#VRUFp`xE}(I)JUHyw|o3+Wy4eJg{o>VoPZa|dB*5~-{M#1Xk(k+F!LIl z8{Jf6h(k-PS=qXu@t=B0r_NG%4y&~dA$jqsWAyy&J88-j?HGo`e z&u)nd?qasiz}iO#=eL!>w2(*6fT}@OM9s=mR_qmD;k!LTMmp%!JhPRWGRXW3IuAEP zCIKm5IOc|CcxvGqrqE(|#UGszyyL#szJ)vv$_Rd0(TNrlu_By|M?7nQL7ukEpT7He+k|cYKQNsoU+Fj5=cid{d`8eP$frVEC&|jT<|EgalLtJ^)OMDXfVwr_A=>U!@U5SdEgKwS&=dJ{bY|CZvTf`IFQy0Tp2QFlif4&Q zn6;~#m+TS+@SD#dZ%z~cpnK~AbSH8i8825@{h~dH;pxeZ@fni?+nPtoO8Af#rqQ&y zI^EY*7RT9qY`hXqXifA}7P|+bx_$sff)#RUMAmNeKkTV@Q9!Nn+w1BHzWE6d=w;Z2YOl$jD5Im8t|-uNbq2^UahX_43C zYr7XI890^2ykA6p_iJ{-ST0G%8l2>(;<}j14gu++s(#0ZafVO2Kw8T}(N?C@#;ACA zs71{jA3HH-%;sqKd ziCthVe3@bxe;3pX*s>X5YuNZ)MpSm-?A3U(_th{$P(Q#hZigRE? zuh9M3UZ&|b5{RA5Ea*S2(BMQwKjIF!s6DEw+0mYmewiiXjj4&BN*5aw^0F1~Rnp%Z zOiyp`g!`T>N*n6|3azF3;+(9CvJ&U`3fNei%@Amgm85PSUDp$x#WWm2dd58hlj{{Q zjW+PqcG54vU&ldf_XAKQI&|qD%GPzanr%rtZ!b|d<{|09Iw8+?HlT>f^I*p6qKC*N zbu@p%yTZ4yv{4!Uz%@m*W|GFn4DtbUZA4L2&pDJ#G0o@?)dxRy8{I;3C2nWQ=3Lu; z=+D{NVqdspFEhRQeZ%8z;Dvn94!Rb5XDR3TX(NPfA(^6{xP<;@5^|djoA23{rSdOj zpplD)iX(Czun+$Ui}(!Bg*&8zv5P&9h?VVR9D3Z*s)+cDbXMjvREp+{fQP8WE6eAG zqh5}Tr9oZ8cH_Etk=f#M#PmoTOEJ>5NqjrvdK7&g+*?^;Z?4}Jdr4i??S(L9yv&k9 zb4WLkC6nnjS>Iv@Pw_EjjFWKenXY@jAxmag=4+Z7#Ou&v@I7McMX0H7arbbS_Hk&j zPe$a^SO@ik<-Iw8GSws%`yIowom^<}C^xd-16p1wi>KEY5%4GN zjZK6Bv91pIUpD7>_ci!rM*nRXaa6m_qfYy^lK-hDvq$FZu) zJzyHHi7)DRa$NROo$RyN=KH`}M{0Bfdm&33lQ9h(%ksD)sIE4^j-s)+jC(yy))p&` z2y-URUupChkF~+rfKFt^e9f#~)6OP#6&3Wx`1~&9ZcGc`AzB~X3oELHyZS>T5?C1< zrd$&|Kf|X1d0q?ND*kjmNi>QZMS!G!$6u-I#1V5&%o)*_4rkAgw+BLgt~`YA_FNu{ z%gVq`XlR_{t78VUY36!pQmhcijDJL)41ePcl(F)Q>!|dn%Zd67=<9cf9`Fgh01$D5 z%mr{UoDFaLKj}qep>rAE5o4FKcHYr+m^KbExeyO?Y!t)HwrT5ymt10t-DTWMv6=dt ztYGEMEuL_(0Qw{~;eJ+MS(ls%kF7^+v@ZwdxADG;a=V#qbW{tQk^GgfH_ope%)-K8 zeGTGnTTXX%TAEZblRd{xaJ-`HlW%Z%5paks7Gw9#m3MU;uFA^(R_pLf_UW z)0j7%r%8l}((&iWBvfLJaXnV{JGrU$2fb%35IueUBe4f%anAh90)zA{fNbj@Eg$&nO)_5FqVdf2a75E2&zV>+{2rKOZuOy1zg6C$um$E z%!-~D^@j4MvW?sXm+V=Zoi)PbY;KHdUWY#8tSFOQ%#3zT@;=;GL#yKs7lUxRoNTx* z$wu=$L zRs<(<4ph?b(z)s=I$kNld&hkc)AgR1Q`FS1!s~mTd~Zx(oq?z*tn`f@r#;il@y5VM zju!oBZ>@!|iJVT0I;|`aeA^)+2)l=LXA^#w3^Edd$C%*yB2K4Gf-8Iy-hk`ILa{Tw ztz^a{(v;1iRq8_;hLkk&%3I0pRJUFUY^c0=*Rc!Ko#sPxJio)*`2Haq&|PL-e=V{D zRc)APY6gHc9E7Sgt9x~@r10y=b-B%5<~_A6PgagAaJ4o5!h2G}sL0D|acm-eh}j~g zS9vwIPTT^ns=T_19anF)7|ce?taYn|I?f`6^nFia`drxb@^E?qn~VJ z`G&vAO!LGV>80xCN*rl_q~v8e)Kz+o8+mM=C{~WCw9h^Rgb8eN}_XNj+Xg z-ky8#wVbN|W*4wcbJ0^7nzB_cNgHVI?CmLf!nb}dA3|PfH=|aG{@R`JOxIM;Z`qlZ zvh_s73Xj+jGzW3D3HjF*#ClstWKLDnA`Rn8)EsY7c~kWS*Q1K~H#tnZPwN6{|Jr+& z_D~O*MMb!`B59(o5Qm-X8$_jjuiG-Rlw?qm*pe~VHo@@~*tQ=>YVp>@YP{xySsJPC z`cFHLUb1tVP5kG$Nv#f;4_x!B(sAu64Tt`_Ga2=`KR}h_o~m^;0##`zHDXE zH0(IEzc!MBM`tAL@{zc;wzs?u_BC_qD4)t_iXmpCo;~iqde}?>imWY8xQr?5+pbdFxxsBzqPBZe5TIR5HOt>vzEy$&w zBBHUY3H_`bG|I41N?|g{BH(@{;qEuw97JDa2E_ZB-PN4d|Ma@JS9Vs8EfDp=Lf8P+ zq4?zAz^8Qf);}JV_L|P)W#!1I#@hYk1F47T&?woWO_!VMuOfdMH5ETOkB?Cff@}L- z9VF+FaVcB1bF#4B%e_dq*>A=kGn~Lh1j(x8jS-^kM`dyxyjD94QrhTNPT-OAT=@+a z@4cNNp4_~pV79-E)5;YBj2SCUEcAVPeouDqS;G{gSYH;RRFRj2FUHCPyeCt$Vt-fq zZ$@cqHv-~fUB6{z(m`n=3$oHd)x=Hxt#V6VV6S6-@sF|wxfxa%PY~!feh>AqjrFGM zqWy&em6K@G>6{{`r+>t^8^MC<))?w)MYm!@KaBVplSFw(Z)`QoBErA3-&ef)8lctB z!q0ECcNG6FM?&>5C1Z4Y0KaHd_I9+4ho=wJ)vL0K45w5%1&gfcvUxW?YhLPU#M&GRJ+S^XQrN4wm>^Rnrp7af~rm>H%W^skZ za&Z>EQM+W#ExnuV7yJRc7t2PXJr3`lCRMTo1yBa?thg~V8y_f;!ek@dWUhm0Qx-zK@i#pcejQVXQI=-JA!5W6oZ)OF z9NOd6_2GPgdq3{Ndqj`X$jqm(F}@tm$P`ddzj{@(M*D|g6_kaD~kSj^${V`d}p@0{q@J{sSm9dW(rGB~+5 z*LU!PybQX)a5)S5Hx^nK)1r8OA-+xK_&A@Qhn6r8C>`LtzLI6cq-Zpth%CS!u-$<9F5Rs<$+2KK>L z@SDc)DoQnOiC-K&0(dVj_Tw(S$9-aSThs;7{Qt<94aP4r&;7v}PN%cUwiQX3Akk*g zHQ@16K@>Mv(h`xXsA+7IF+ha+B8ta;Ro?KkdT#6tPN>1=3{u6?jovX65c4+2B*05D zr~Rs9k0a7JhiY>yv=o21{H9}9l$7SepFxu@m@7BCqe5btHS~p2!9`-=LAQ(u@WSI(Xy_a%0r$_l=5_Cjl5OF zFlefj!E~F@F5b)D?3Nu+A1JI9Qby3dWUgR(szW!^waLH-mIpia8heAuUwxyXxS@Z; zhV2sS-RwT#$C0VC$tgUg&RbNEL2=*p?$&AXKloIm1D^z6ur1i%JqF5_$&Px9kaYUi z>;+!$3U-Yr$fia-d<6@rrQ~J&t3lcb=<-ew1b$-3a+sIaV+_eOl^_9oQVYc%bn%7t5G2^f$(z6P4FVy$uJo;KR5^tmJ zvL1Pbs$OMVER)@1pwUtvQ~!$*;xn-;!F&7}k_r!yex2jV9}jzKSY4lH%fu zD4@2XKtvc0GG05Ql!%T6Cp1(TX}hgI4{OFTZ6MuA2b*tPi}l3Vsn~eF;|nmK+Nf0J z4*z3O*NlQ*FwogqC5A`1ZnMF-FH87uZxh+RR%A>&<%6LHz0;e9esEQkXWd8HQ&*a7 z2PMT*ZjINbEoI5Lby{!v&~)1;Y9ExB-b(s;FxiKOUg9H@?(nAsbuKF6th-Ue^$y$b z_T0`_n_7dj_^yMUFXSraKA6-mIAwCyXI(KUbga5v4xeS<)B57LBm-YpsoMEO@O|m={YMJm>WqTiK_0W-O!iN->$gy z8}RC$A`SyZj@Uwu@?b=bb+TY4bk(&QbdVUzb=t)BM09mkiU`%RJM!?-h{+Cig9eH( zEWgdhFYB90G0{_ovQKImIzoS(>96$lbc?dem;4oZpccg&xP{kq!Ar{dNVcc3vN`W+ zU7-(=8-+nX8YL}vcy5m??Y?ND*5DI(7)y6q*&k+!I(F)ZS-4%?cm2t~Qo_2E@}y<- zS~tUNC?D#-*0I6#x$6}6CbhhItP8>H{15DqDaWkf>{&5`i7<0Up(4}1tGmQIM8*@C z#g)`ILSdvO>lxJm`&u7nLp9iC&jLO~pXe&1OycEzCE3iRIeIfo?_+zT#xRvk^yH4Z zCKJ=Iu%@g69V!B$qP1E~qgB|1_tP}f84S2-lH7?Mrtd!j4smU*cXD%>71;confmdyO7yiM=p)fOUCJ ziTAz4wBs=?&lb`MY(?dV)={NnA^s`$hVehJ<<1=0JTBQ4ZqS&+L$ z2h0`bnDN|PG@XFY*=LDZB1>Qq8Hh`9kedG4m!9Str#1AMg-{*Ttbi=Fa zP23-7s>z?D?-_0$$B7sz@?Lvsf-6x%6F_#u6xz6hD+Epr=<#U%1c9d94x zn?d>;pGgN1$id(8vra;hE-f%A@d_SuAfM zhc7u0Axw1*&n@CZRd_?DYR{lRmK!Jh0olRpvBE%l^n|lnB+V^;D}}Y)JXMs@Qd~8) zKcR87ULTYGL~yXUDnf50RQ%F&diob8L?-dR zqz_5t=jklHv#Wj9?9MeVBF?CLJQYftr{oL7oub+>Udnk8xH>D_CwqgPP)BqZEkd1S z2EQW**QZK;+R)aJ{Ls#6xihDN8E0|d^gdH>u;dI(=LP)W*k0u%S!b_fIQ4&xo2;br zH8~0u-uEL@`43voxzilXHi{PdEIw8n=ADYj1FVFefV=S!2#4G*;fZAf`4Sl;25F;t zxY)_OVj`Y?TN0sMHvVpS3g7#Rdr{Q6LYCW|ZDJ!G?!c}AvE!m~NvXq6M zWLZ_h%{L6YFYK84B+p{{G`PFPE_z_oG%|Li`x-4*Z$5NB1E4FIojfN6bmE>Ra#EcS zjCx=hiwbyweI*^ikIJv4Cv+XFIEV6saaCxPyRk)JW0l0~lON8W{0PmA-v%UC7V4vS z@;>M@h_ZU5r)*PQSirCqz$l>6&U{4rRoo+B*in6EyHsee;2F5GSY-Prnd9)l#4^LYl zDiraPwZvJkk-Ag4#;;>y^TlC7#daBvejIai2YZHCeUc6q|B%n3mr^2rENYvaK)LVn zM8Oy8fh8Z?&V!VJW*vG}^Z{06iJ>T$NzN>k3)C>as{abG;9^>v{drZfiY3X1oN68T zPsM|$vkOzDx)8?=XRTRsbf(q^^_qiCv7M0nQPGdp3T0$717$mVF;)*-mJQIG90gVQ z#tQf$-f8lOUW5Oqx3qNPXTZ;d!%D<>Pdc2*7oVx!*3MXotxaKH zBTSj1bf0^GyQ=B-WYv-VkXPGSzu>zpH&4U1JAD`tsiC!y9*TdN-ZF^MEG#9alcyj#;=B3%)`u{=yykYyF=l- zD>Bj+?LHKOU$G+Ueb&-ZKf@zlX)Dq;LhtlS@?{>0sYaYzC-v3o=4_c)TBE`pCS5K3 zTp=v45la2UWEm)T(fcSMuD}WtKKQJ7>@)Yz4sO66BF}yNf&!)du z=CEe64|_s#+4Jz>xN_kLgBDu{nO)_)2j1idS^PW6aqpb&vx(o;{cv@9#fE#}_tHRR zhsidzE?K7&Vn=Omk&Dnx>a3FXG`vCDh8Qj&F5-m zM2D=3G|PLZz0i%d_@4L35MZh*fsOM3Jd1ipVI{B6rL|S>LX&zk@n`?YP9y-=cUI45 zMEEkqS~i1axChHt+6QlEV+gPgs~v^;EzB;i@+(RlKEJ(ao{28P?O@qaaTG>fKa8xh zy_4Oh#%)gKOC3I(pf)eyf?0a;6Uqx{za=WUa zZfSsx>PTg3U;ypG(o*MJ{x-t-e`FyUz#UNNZ{u0a%K(>@waw@v%EP_eMz0z#4JV@C zNRrQ(AZD=zxN1B2Z4t+JYp+q`KF7S&!IRa2=#pbyC-^)X$y@q1Qm#GaQF@3kRZfjx zD0+)0o{Gjn_hcsJSMLrwT2=*4Ef5=qzwIyF4=n#$D`T~)p-;mst&4lkpGx?r2A^pW4GFh9)+ndXI6&dWwB(?Dwb|7G;2%pll5N{ zK3vZxyt2Hh@Ws$0io>4lw~-Mc$Y-d$uTVn7WVcP87nO}_$ZYpXCch3GNJ*T4&dKGW z-E)Av7eieCitywrq%EHeEFBT(Z!$i?+qE_?6R){vsRPI+IESsFN8P>bqgiqC3C!t~ z)Ptf8KaLtV>;Bu>Hs=IifBmVvK>Xz`B7nFnsVu^?sm6C{L!yeQE&LzwL-9BH6>?v! z(R#?|bR2x<2Zyama2Q|l_WBc=euGr@{Ymn&Ks^V|Zlu5|Xdv#SlWnXw&4?uB+*jFh zdfXoEZI|dUQ%DmQg5Mo%*_xglSctTbISuWS>+&V@(O*#9+9DbghPSZ2>_^r>4>kW$ zno*CIu)ikf;9=~^=o-I}S5!wqWu+1wYgA`R*b-D{v2-9=LW6zMbxwYPJ{*a$+s;D| zV;@-dzYz=ix<1f`xY{e&crHiAZ9`s=Z%_i+k1h^xrT7M&s~5%__!HU4KTr-SqwMuI zRyW84dM#A6cWCQaC-f16#cSc8{tlJbQ>XSST#W`A(RFBEz`{+C66ym{L=+2~*M9Xxbxhor0%&ppca2tLkJ;$_Z zp7L9?)e@|!VX-u)_JbbPCTBA4(RQi@ywRcp_zH(oN66zLxnx0Kd(^~EwWE=QnXHq! zv?Q<9oG$tpz0@2f2q)?+dZh}WgsOSV*uu;-EvF&`c8YaTBz zdFO%eoe|WA4&rSQ;cc$|aTRgjmdOvm0p#P8++~!v+7CmEa%jP#`0>6ZJ8jD!u+_#J zkwslGm_R z%LiPmPhISpz^~~^U;*sbcFVWG+ywX*lR|0>ai2Dnf8+aPA-x=IxY(<>WMWiVHK+Ix zlc{;+OCz5VO~UANB8(m4PHZJ|U%JF5wHjhs`ONm}C3`P=mCr=9tHP3v-|#FdP|t}C z?0@8M+D|(T?teu@!xrW#qXD;AHe!2`wdVyZ7uU0#u9m;$Gal@7sFk7)@mum4R1a5+ zUMWA+P~4lLP&PflT4~!O9MfECt`FY8lP+XKAG{ z2Q5QeDVIfmUQ-VDR&`s`@|X?ad>qF!l6#>iD~K~cP@Xq$A(DM{HN|{2?1JhuDupA=u7Zg=QfV!bO411g%`s zZ4wT>%3+@D^0gYEmgm7nTk?pcp*~(tYpUN+7w0ig0AF$nzpo|EN;DNRgS`abVu0F6 zZNn?cM`D+8ANn3uStXvxOTr_nt)~JXVbo?t^xDcctqsoK8}FDn7p?F3#)H#pX+d~q zgW)RXAeC$G;sg05r3AmsCe#m8-auKRw6OymXeaUtc%Gz)?Ha!lc?Ieh56ybCAL@`7 z0=O%&+jy$Cq3cu&9gt|Mb7_06EKbWFMCKH*1}|f`K7jW=@=-1#1$7(cj!a%lJZO}M zl%T8iCcwQ{kc@xQhpWG^*S)A66}`=9Fsufql_1ktx42uLAoD%#WhqtleT)&`$-)QH~W* z>1a)Mx^zo5OqgiaaTpF+Vm7=Tiop^|!(SJ^uw} zvD$MDJ7RSQ^jfKGp}w5Qz!7J;6vjdMj7?^4pb!UxWnmTf#Rd6-ZZyi_6odCA#+*39 zXS>%b4HKKX%kw3^DYS#$h3~T5(i_NJMowA_>=4GA0pr<~_Sc_)V~bpd?0o@|l%gkOE%>weL?o}Gh3?xU;`pxA09u@8lI}p2G;u8^6ZWq%kF#xY*sZcw z-nXu?yuSECYhW@MNH?g(kg3W7TXdcLBTCrcscv3Ey>2uTD`PTc4VlY2nUB<>WTcTu z_8IZ0k!{#lIan0YlXkIe%0Ds!Dn1UjT+}ByMNd&yJOrbZvKB^blEYx4xpjguS(cUm zfRB4a&v3V5l?+wyl+o2_Azq3bP)vBHU&fAHRZ^9o=m_G(BwrDD>p7wQs>>+UcJGXb zd?DF{b7F_;&30(iETtU%ZdEZ_=;AJ(L_en+N<0quK=flXvA@fpC0PYs@Q9=ya3fyb zC`xb11K>e7jxGX|;&WI7cQi7jl^uktfZ}?l<#I*%t~l?}-%w*2NIHq>#t3F5KT*jQ zJe~^0gaiMNY2QO$21Oa2jj61l(%*Xl>N;iVVrb<%vGMNYI_UYKoYG>UFyl`**h7FB zZs7@mn$FjZ(Mn$BKe!-mWlLyz+9u$VoXuXsA$o-z56|M-@PgVUU-Nk}JIFhGR*xM> zpVCNLLq8gFJuQF~#A)dXeb>|SK+62UvHE?oj4fpn=#E_Cuu?;&bAz4N>nR(MiPW&H zIB#Ru@D}`O#`B$=y6!4t@qY#NpJX@qDhI?K7Kv>wu8bcbWpGCa=`}FJe35_{hzhC= zO_u9Kva7bRgsnsdneY0nm*qo3Wp<;}HADX?1@2itvo0$Y zaX8SAT@tr>aP(t%4@R8?gIPY}Erka$s|Z_U?4W%eHC@w5Pmbv-vv7YU)SZ)@hNAH^ z@&|80s?weA)9B>B;)*(my7~n$&1SN1v{GzEVNX54;({c$)C-7{&37#U19`V=h?r!K zl9ljz$3-u(CS(bnYUF~pfntm^SMl=XHryx{%SrZ5U;#qC1f9+xc1d3?R;CqTE96W1 zLv$6#p@&+AjZo)`qO>z#t<+(b@bBzIiW@&ukYu>dBW9=Ys7y+_U^sp%2re)GF9B>EfxH9dXXeT0{lI zF(rqqpV~-#kj0Gd>9drb^osgWzJtp{e>~Is^cJleeZZ(Gn)yB(eSJCfvuw5;CUg0U z@zS(_19;hlj{Gm-j~!kgWU-nKFnjH{_(i&uH*=2HTGJbRmGZ<0GwMK}t3T^U%aTOQ zG!BV2;-TK0uI8Pkhkm6iWk}==?X{8}4AE=J4a_x~E~n@_0w<#L5AfQdk+mBvr;_ws zjAS0S8P!ANbr+J0wEVtn@T2~SGZ<=o6r;VH=pHEj9l+#s57=W}uyZd0o@f#cm5S~Z z*NyzXBj6cM)Q+=aGJ!7;Z_UoAIkIY#Au=ktqfEz42rwWA!%G^56CuPuyfLjdT?gQ}Nc(0WLH+q_DDenpV>te%{`Q&6_N+<4G zUkObY(<9%b{##E6^FpK*jlr&Uylb0k8jUf*kTgHA+VQfzR`S?r9^_s|e?hUXp#pB0 zHxWFfC22E^E37>^#FIp--dcqML_!H8S`&1*1`dG$^iy1a` zxc874MFz-E*c$!AUG+52Cf_fik|5|AW=%xPaZ|~!Wa?Goxi(1Isc&Ijd}qaG@zql+ z<)YRBE`JenIbVW$F9cKPS)>_z6|+<%@xtjF^b_elMVj75TO!s{>Q2B;JHf zcKMR7st=8mIDN%EcU_G`e_Br%NvwkQ@bCk8(>D>7@R`5Z1jC^%biKh2M#Ag1n{=^B z{5$^cC2EANP``8Peu^#KkLR(@kzbU2Kx`c*bGbnZv6bddumy^XU!q6q2=dCypyF~i zHQZQ23eaYl6n4}P@e!I8`e~h@6}e6yL5I7|hyrXB>leLMc+p+`R-Taj_>ARgo%l%7 zhqh#bY@>?t+*=3Ap{1Z;_?4_uinyZXVk07}A7lm0KKh@iAFgT@p*s-IYRge_EGDu+ zypz=eHgjQY8nU{xEDpjIbjSai6};Do)pCTrK$jFEOm;hHHYvvLD*M|cDcf)8JI?6)`YQ^=_rSYo5~rKmV2D!Gh8LKU}MB|P8t#{}#%aYit{grCbe zLw>RvN(Q)<(|D+v>77ppK|8QaW;$k&{X`G31+l86yaXMtE~w*P$$rWTHWZ3&$K*QR z1Gw}L{3AO9p^QMKn$%q`)`%=*#mwINOJ)a7aW8t+a=bPw$hzuPPeov6D~W7)qNj{Q zazNz&XMJpzvcO&nJn;bZLzkesS4eLwo!Za(Q%G6kIa^KoHW+WT7ssG@+)ONsJE=|r z3i==X+pO7i6;X-bH%h=GWvJSU%%)v&M|0|Z#3!Q=zpln>7eobo`yf%ndH8nR49u=$E6$6K`dfJryO>yV&v;1RIY-K=$oD0@EtN0u$abSoI*JQCc|a)DMIr#udNrx)2BpfxT<)xc!Fs>@Hm7^ks?iOY_uz(|}XoF2q}#7#H3 zhwy7qde*eeSbJ0<-Z1JPdDZoY7%wkN8-1V!@Qq|B>bgqoHe!^Wg=U7j5_t=w0A{ED zd<-hyf#A$90kSJPBN?ZEzq}-WYQJKJ(5S}v5xgSngtHk)FNwVHwk?x!HGLkq zNDcUQWuQGT$pCZjlpMtt0{3_Tdfih*Q%u91#wj=*KGx?Tw!4i-VmotrYqK$|IBl+)hz~suBxq&fZ?i1h19pyQ6k#6ZVn4(=EZmkEY zYdU0mQ7b;{L8~7!;GX#L9(htrr;VVn`HFYNSqn4*3@;IB>4p5z0a|71=3~9M;b|>H`O3jSf)CK}Yh7b`SOWb@u?UX`X1V zLr08>@C95i>qvN0iE%icejLwDX+$T-sVY);9`~TTH#m-FsU zM3`&Ecl{Rch5K3yZ%jp_t@wZ}QA!C{=hH6OZDZ4+ttPkA+e3jdSjL*GY@czi(_{X{ zx7h_X3nwj#jms1P2Q$o*i}P|gQ(1N06FJummwUZ?_(Ji)`-(PZ@p3&GY8UWjf;t3S z>F9yVYmE3}dRP<8maF14)u#1Nr0Uy|S6sy|Bci~9 zzY9KCf_*;eqf9m6J#|b;I2l)tjL`Ff40|&?ATgV5_y%@>={pHb$Ka%(5!{u zh=}LDPS-;-Vm0)|lTshXexM3$sUDfRRJ^)R8!OIptbjfsR$rW7<$0HDD?_t?xKb z+er>JoWJ2U!7={DiEnav0^@vodQb*R)#REg}bc`_pt43Gn<* zKaRYxkKNWi|JIR_+w_`6*+y^1#qoQ}YyRm%K-u;CTTdK##;`)qfYXtNQJ)USyGF$b==WBYqv3zsA#IO+p7d9yko*m| zffdu2^%GCr(DIVyale+*w9H_3NZrks>J7A`-hpBh9SmK}7&?fJgihEsb+`V@=$g3? zP7n?TKQ9s{e$o~Z^4&(d84Y5qTr?;&;utCvzeObnHmF@%D zp$qlLH2H^qSIgj)%5z zjY`?5EYboc`Y5?Hvj^NcqQOl5r5{lHihpERBV1W3;^jczLES+YW0TxiEhNX8HNjfE zq|_$WjG06?ZX<_;@x8P#d?VVUa&1fc!wcLG*Pj)M7LyyErP%7XI9bZD$6ZYM%Z!G~ ze@*%k>ctzt9)2zAvhA67pe~)jH^T?wG@RWEV_z3aYmn_)9b*ny?a6SO1X>Pik%ClB zH^?tBO55bRV~jNOx~*KoFVUaPFg_rYHUZjUx~xF!W$w}1i|T1ZG2d%0>Uq1teFY91 zyoP9-*_Ax??xOd#_HYrc&aTVH;s|Lc4&cvfl1&{9%`zn&^D?av@6CEZjc5>ihI%FI zYKEmg(}Tb~nM!J-TkWI8%NE4L8}kNYmv~EWo5z4Wjn&JZe1=XX0$ZnlSrOk`GK~3Q zuYbd+=}I(WY*{<<(P|h}!GQJ?vs0#uX}(A75azpWTz`85N?XLwrP$D?`$bobJImfk9kZ$^dJJ#DlJwZr zh2pNrLz2v&ERpOs!hpLfM=j8dva{*l6Nrh=BX!RckxWC=nyClV3gRh$(Y^FxdKFBn z{nLihv-Fm@37me`bF>1(pU&cpT;`;dl~9CA1X}c__ETSqJJVDDW`>GpWTZI(r?hixYDXdKk8N5$#}_(N)RIxkJ6?c}bZbgKGf?sK4f46Q(Ugke zn2B}w5E6;J6^RYjV~$yX_}jf6XU)!pEJW{;&g7-{v{qF@@d3SlRwnmlp3Rs|u96_J zgm{4EOjfSCOF^N|FTIa`0V+3<$~j;$PNMVpqWvf5iI2*kS|r}|A+A&!K&#+=aD(lf zgd88}TYw2+Avk7Kf~$N9r8mo&I+_%c7Viyr1^NlzZD*A?v|&sWa|at6x6-=V=*TC; zowT&pV~lhWC$FBcu?XBP2RmX}Y`Wk@k&U~U1@-zwnSuVmryr(3kjL-Qk4F_TT7liW z!ksH#ld)`o3KTT|moLONz|Np5se7=mPS+xg)hYcVPhjhC;OKqC*jHdzy!EUw0z7wR zBDu_Zk=N{3+E;zCX+#`gyUb!_j5~)>Oa>aO;i&ml9Rq&BYPmY?C*Fl(=xvs&5t_eg z^6d!{*$T40JQ`UdARC{Z95>HUe(oo=L zQ6DmC-%6`PDYuHboJ9gRzg+mV$;ne?GXG95v*Tid($x{_N>D0^ImvZ^{l1+(mEGp+ z)OUQdRt-p|VqzxEgL-HL8=y=OpIkX{%G$x9=Pme$EurIm5?XTCWnSSi*2tOgALV+Xqfw(@U&EUg$i*|YKpCNPz)AH@tdj%TOw#*w7vYI#xK zNS0pe7I)CQR5uF9CiII;0;;(+)8#G!TDzg?M`$~B275)~aH@XexAtP!*%;+48>r4P z3;Dv8W2B7kRNW*?!NP{kT2&s!yJ2UzMD}Lq+1bdzw0+LPBv9rCM%Tj+nIpi!%_a*O zXT)OQ=(eZZv46=0j;tGbaI`!eH&IqG0;4RRovGtp4(QrHu|~t;r;vC`hezdR?Tm1? z8#T;IUJ|ZfQRu@)Vb}DEIuOZ5utT`hSrK#rlqa|IO!ox*f7Z@-eE5A5z-nuwv=8(O z%YcJcBI3@b6L;82D5cf%b-N;bFt;|WeE?a>*nY9{sKc{%ck$#>vdb7tEioUM3mAdt zgqtgk^Tr+ArGx5Z?gv+aDcC|6OsKCH)K5r%vY5ujZlc>g8%UD(1gR6Z+fz-H?mQ+J^9&ua`K&FC5QM>FMjHp<%vonN{qkM@ncz!V+eo(Q{r-`ClXd(AZfM(y($$oHigqv`xzFk-V-Meh)$-S5&bvU*_sX_+;n?&gs7C__S(6&(4^)4_|`Ff)=p8s2Dfj?mb zwPnbk6KP)gN!AIYVrtY6w~-KOHa6}VwJ6+vf(0oWY`#p&ftN1Ow z73crgS#b^#*TkQ$Og&D?dlI0PzlIDl%Tvo(z zFd%xOwu!o6B()Jw;0c&Ux03I;x5@Gy6ym>O9?~k^g^7$6ETVz-Bc5+$BHIlY#)b{M zi5dDjPYFY6(1bUpxYzPUaL!;PLp+B5Q)RKkT}8_m;|Dg<3B7yT6XR*aa`L^k0=7bn zbwRpA5vi@YQ9Vv8Xz$5%&tW)o)Ke{@ub4qr#|yqcqdnV%J8=_yi9f{w;14G2zhe^N z|F8fUoIMHs^lfAWbeT3Hk|pD`RZtp0>D2Z=maYOiiey~_!QI_mLlWYdi4oi_xVyW% z%i_-B?j#T!X({gs?(U1*;x6x-z3<$!=UjHlq^G*7e)|Nw*pApUUP|~3hqHI^hS~tG zbSBl?RZ{r6{3CYCyJ7*d@>ZBI*Rnd2xbWS;R_@`agC~L0asac^X29=s7rV$3XfNhf zO+5tF=~bCv-=$Y2qbPjZ#Sc`ig@CJJuHrOO&kjVj$&SdQMm1)k8?ZgNg4l&!mKT%w zyT&?MMHl`sbcCZl@j-1vXOlI;FrOV=L9%LV&1OL1 zRHD214o4vLOf$I(h-{iWFb_WAE!m36MJ@W*u207oL?p5n@a_8++SiJ;oYF<~AVa;v3`2li8%r!0<+uVK3t5j(Dj1B1ehO?di;B*K@ znxoqijhtivovWV?$%F4W);(8DN57-KbFgSn%Hva^!lswuFG6Opzgb?ZP?{nA6RNVB zM$@!s&`_v?PT){*qr7=&OY)cOfG$$92$30p@w&u*!&UwZn}#>+i#c5yYWwAUqWf<| z(DS4OFXR{o9puCOgep!jcNGOtF^03>WEva)|8*!)Z&`QXf-dP(X@j&^qLpJH&eLn; z$qDois?1G%OXy>Hfhu4(G$SvaLf2ZH=YZOY>-Z3w3btcwa-IK&o};gEyDq?7(1uxb zJM_1Ui%23!2~^nLXa9jpHiBhV|C-sYU7~GzUXcq^g+i$(F;_dJ%1egMb51ps`s4RE z)pOuyVn`V}g_mIku{x(oKb*OVNpWy(N)mkuv_wNY$qgjjs_%J99>z3+V)}Rf(ImLz zMnk2lojO7C24MW)=m~7YoZ5$1 zmlIe&*LBtyUCO0(a=|eu3w+kj^8{Kirl-89pCJKqD{Vo7tV*Ixpb*XEEVH=iMBA~! zye*FaI`uwI+;>u)G>YEFLfAf)L;T}7jn6KyJgL%AOR=+8xvRJ=bVmWqdJR%Sj z^T;N6m%kH*LNjXB(|e`9hZJN6y?$=pgzGF!k^>Y35dSx8#Y-OnP= zpnp+?Zje4ucPxzE?Y(zuXeFRm^BriTQp%N9*wKbH=1}*wUPFJj7@S2e;LhH_imG{< z60^Zc?#FUEyt-xHy}X*#q*>)3D0j`L>0tV25*1Qk>Cre-;cS{n!ry`Vp|Oj0&^zk0 zpu1i)V3q#BQ5ro6g-->_kWJF+N4yQF%^#3?biRy@^k(7%`3vsj`NNmf)~cGlr0B$N zz}ec1n1(wecez(fY1;`t=r)l{8FCY^Yu)7+!8(qBCYvu#%??t}d@H`d)!;Mcle^e> zeI-!+^JNoyk}Ox-@JV5|5U5v0K-p%q(H^ee-^5MQmUP9fG?Y{@Yl`k{E`97ANgvTU zV3sTiJcLtW$C-J2nnzhbvY$kVpWx`G3oxm<3mPl~c>UPs z(AjTgjbvG6C)J<*OLGB(yNwn(_S*jhZAvR3)(y0p!&P!7A?S0Trt4F^< z%b+WHqituB*MXWy5I)s=yVg?U#AU}?sAip_HOK)YtC3Y)q_cobo=9f1u(TFHL8S1* z@T|^=HS*q&l}K(G@2Ubv_dM_w$R}oa@`-rW4YmA;)LWvd?8^G`500g52kSxeX*c)u29 zB`idR``9llo8q_)U*c9~PGG#E*i+XR=;0LM+wGaL6PAfZ%0Y8TAg0ttaTRk%?;d`p zhOw={*hR@Ko~7asorW%Pu$)OI(PfSxQdR$=MUb^DC%Z`7%VKH1?7Dpr$skukvkbj{ zd6fr2uQZ+B<1z5{-L1CCXUDLUOmuUOUzv*Jf8SN8wvYoD(Rvs;rjli8pH{#$OUKkik zu;`L|(ENd`te&2Mq8IcJbLhjt{`?`XKd6L_%&!|In`cm zwYrI>bSf}ZX`#iLpOWg9HJMHnz!H(~vI9Dvvw1f1-3&!`-5%fXCjJ==2Fwf+*6^AU zem*tt)Dia7yif%?`kIU{wZv4`%!Sv-gH(ilik%oMcwW^-^{Qm93? zlFl-Zv#l`*wM0H1YK_6Sn+*kJDkFItrHgr<{flgc7qm0$1hlvr0_GtN-T0zKu$N6&SjnW1706^`Tulq(>{cu zszDatBGwLV$xFiPEY}J(QxP$R*R`{>t2?wGC;FyKxvZS#`yZWc1HIku6f;=PvD+QV|QuB-r1D*e%K z3uht157WxQytXTkp!|V0!gfY7$5B**`HuG#6|@$phs(0b?(y1VGo588E$K44&iI6G zdKC6@te;&_iM&-D<7|jvN&v3v@Iw2VlLA=sg*35_|*jAZZiY15^Fs ziWw<5VRg|3ao{-$)$IxYY~+^cW84$Iw49tt^Y9l?U~8-LTPMxzD!`h<*XZpd(*r6X z6C7cFGcu^Q;316VUWE#%-8xNi6Z{-ID}FE!n`cH+ySxi^w|As8c#66CYElf2=`CD? z%{%mvdw{-P%uV@<{2vOBn2;`|1;jJ$xj2g%#cMGOc(HWPQGO-7jQ9n8jUMpNd9C8u z6jB0x8t)`&J)K30hbD$ci6?w9uniFc)@TRd9?|^!1gdl1OmroxMf*HsyDoZ8Ef@VDa_wH{qeoPMon@8>(Ee? zVm>s7v5*duOT`ap%q59T;=E%%TPJJbw=+)BbKUx}t zVlAaeV#eeOi`|MJ1r=_&X&Rqgm3 zcV4r+BhB2Z?f~bv-cwTM#C{8BTWWuW8g(oBO|Hj;$GdZa>2GsA@v1C5r;UtwQX}o7 zdx2}?e-0*5=+89q_`^!aAt8E31%+Js(HJAz7>mepSAPDbUN-TS7Ze{!bKT-Y%s8_mkmC2$7xn|* zKJ!_w*hO?+QZN7A;%BX9Gzz~h6FJ5=vaenYz4h|wbr}X-0_7?JMmPg1d_i=-RCM96 z+ji+MQhxIU@CU}~bvZI3w&efwQoDq5lC3zmrICG=LI+0-r-XaxvY= zyMiyQ$a0*9Q1p8I(?;ONRnU%^g2~}AkqG9&Z@jSwHRDJf_}PP-O1p(*LsUydrczqe zB4gz&dMd3ebXoHnE7QgWA4K0GgB+j=;ckBl?d?WSWoJJ_X9=4UM$An8%SZb>fk-w%q$)?A${-(ERG6x*|FmP2jq% z8*ayC^M@EI2XWJJfGlHm%<{M~qmlWR!#){iToze1_<|!FXy}~XhE8p7vD3YnZj#U0JM$n^e2S8Vu5c{| z6@=IEXQGOUXeQgrPtbpI7^V4<V*$xHk!=MT|IeHFo^4zPmLXjb5uiqKTl zt+i==mq#Sab;de6Tq~jsN^Fv%etSX$6+S+)F#*MlYN47oMgfvZ6TY?TC8W ze=E^HBgE!7%y%Hi6DrBNNOqA$JY3%*{h%H_FKQ|uBD&efqTBknx~#XQtwa!dip%jy z!SGD;<|NlJcP=XG8UO0N&{t@+?Ywxfy+rDMYWkV*LTA*3H>7;%_g{KbB7OsRsK zK=EglY9ZS2HuR5PFltM}JZll~rCzvu;`ofnqvV)0g}zirvR^i zQ`}|QjgIDS&nWUqY{Q+}gK!p0w}zHfTMmq7ouTaeN#+;h99^N_vR2eq4Fcww84|&W zwqn==(~XlioK7L{prf@Fdd;KMc;M`9Y^Ry-h(<0k8;I)o)bCP>s(KgkiCMBI?UMcuP4r%m+6tc!20vzDw+`Hv)F3 zWq4a!Q!J)At*7jp^;Jwle?*enO0HD9&!X31I1AIwtfa9@;Co2>yxXl0qPjsK=<&Mtbtrj zPm|4lx7j<^4KtEL=2!9syJV2q@Ly$C@<4fL*?QdzL)a7OL)CYEK(1_qlI8(clGSBL zp^ujgKdPH7RSclS_yq^nWl<}@3=LA7)l>ARTaZ*wU37EGsP(d6_)P5bM(naUBy9CV z|{KPq#L2~{G5h~YUBpk_7}kwX@}aR5+Z{)r#((msY#>dZ2T#b z{bV<+Xeg++r|VcRy|HMn;)8FvcgT#;8r>sLnr_*ajn-$&TqjBx`DBEvX!1Ho9o`O6 zr?T8+#XFmdPU2rjuxi6{nYqQZyRi%6J2)j%>OZKF@L!RYTd!oo?Zhu zyAx>>jT>Y%zDI(~8L)%=q>bQK?+@HZG@r}P>^)5;h#&Hq`5Jh)MIr}s1!O!zMrpi1 z8EIWb1oxE#Ju#@=c8UUy3W)!HEHk3aH};Jb;SH_sn8N#$ys3-HD6l6Q3tw4@JtXT% zB(f!cC}Hf8^W}Kg3G8rhL>%iGd$6f=vng72sv&0pKNxO{w<`697FHLy7fhyMnAuo@ zy04ZmB=?v%Sc>XM6SSvVUG3rVSa57hW8QjLyH7j2e2hzQ_w~Nb7tq$OO>ZIstY!_^ z&hQKo3vf0kfxUZ2gqhPYe?s>`#*5sfva?CpY_>KCc?dA;n(GxAXKxoykw`!TYh?|a;M`#wD`W0A>0p>8otYG8}1;IBOA2tVSIAg3G;sGmr ze1C_7q64(dJ%vITCACHydK=7fB}b!B_!;Dc~Nu zI`pe+tLR5{+FcfPW)P#Tis-=YVEH{39qTky5!@bo^)d1i&63)lW^vvWabbmA-RL)< zQNc`Oqa(bvMr}5hCIjP=QEj5%!93VT?;<}a4=CHqMy1bTJp7839%7e-KJ_Yxt5y9 zx1>1{i))ed+IOv-?XW&Myr-T89ybfgOf%8x?GAe*cLb}QaMXV#J7TQB{3IT$*L{Z!)d7uW{%}aGl_m(@@e$X>afSyTQTGUnRbxqnr{>Nlf~0zG8?cW zp`u~HSn^R=>Z2+lm)Zu(mCjy#vU@BPWQ)^|;w`*%PvhRrm|UBOz}280iv;@q0fm~Q z)|}0?Qn=IDBI-w9ca#M_vbQ>Fwm@Ay03Fyb;4_+9dED@$i&r*N=_u%lFvPEJGx)XKun{1S+h{rxZ(#|@|)#Q?KETudulWy#` z>m2Upf9OeQ+Z19gL|gjZ*;DmN9s@SabMAsxiAQb{JE6_E!$@%FRh`8dw)sSDHavK{ zs80sc)Sa(d;&7T2o^P^7JC28TrhrioVRHFCl$YyQF+z!)~P2Frm;=s=11q z{eZ5mq-M(@>>JL_5Bg5rc4fk<-{SRwgui52P%bUP1FWi6POGQf31!Pyw6DI?o*A|M z8xq6H=sdcB7^yckLR~lH3RNLFD~-Y3$y`sx(6Gf}%6SH7)Vsf?n>$@+pn0E}ZqSPc z2iwkonUlh{u*Fch>t>FCPGvcC-m{z2Wk%i~>X* zTO|v_8RUUT5Jh14m#F6N=mF>TMsz+qgJ``6$PUCmnJSuU*WKQn^$yJ?s<2Y}nCKz; z7HCq97sFDvv4J7?i4V&MW#1`sn9+>*u^TQYZqC2a^|rg9{$O1bJ4FlYi^xJZkQbP0 zpOgz(4tCA@h376L%=?t#3|YS%sgy*(s5&_RY8zwCX%>+tSTxIB~A$?4>~ z@r6wNZ_gexuCO-_ADNBhQVm$di80(eU3mwk($L6%JRuNA(JVU$#SYHsO7Rwlk3!rw)6#4%#95056vm7$=*UirK(zVAi9kY zffZUtYV%(9qWmJ>VXy-dR~7(ee{~-k;Z_0o@4FB`fXJTx9e@14&1_Lavb>h zmZIIEMV{V3ymduJWM{Vop%aW;#vP-9D<^*=m+Q;<`lzy^1&;!PyCCW!(|AulX#3bY zbkdf{3Suq2s48jiWE1Dg)OT94a}F5JHqu0XGWW{q=1bHXKZyr7)fnuU6*0T@1T9=$ zBieu8-zPQJZ6ud5L!w3lRUL_Z{km%)xkvhwa1zg-U?vlX-R+?{onwJZJV58FhrBy_ zsCj`2`AAktAMQ4%$%e?3?WkTfYX|ZgZ>DmA4xl?@MteTd8|DQ8E-Uxo-x}6iwG3GT zFgN(g^{lL340ya{svgekXuANn8}lXp0Xf1VplyV_X5|$x%q8xosDneHhzRvHaoe01 znGL_q4*bU<_}_SIb2|`2{q#6Tajl$Nf*+Sc2ScGEf$Mq<+hSPIP^d-vi@3A`>MqcO z6I0KJ*>o2$Ed+0E0(vcZk$JT9Y*HK9XNoBV$?0gX?V~G1WAnZ-7w2*U=2D|YL+h0) zW@hB?Nf6Y^SA?&oC6eorJMqo@NmtQgbO*B09&`y`=qMx3 z@z^l9r`b;OowB{Ljo)M2fC!nvOftm`u?oX=#~T|P^UdybM0$U@5Nz+hqMEI(Lt`&_ zZDk_&uO`!h8+c(v%NVaWA`LKXIRP2iE|2&$xa8sT$JioA3@Sf&5EYMEJiDKj2Q5XO-)%P1~p*Wt7+x>^;;2-U0uxl}c1>UWL^~G30 zDyt}Qm3POQbw@N&Y&dqQSHGhf-f?%)9G(5&uE(?o*(eV2LcD8Oc>xbCq0#nQ3Uu{P znY~ymz6bq_m{SnfX_kzz+ zI#etj{25RoHPJ&D0=DCOIK9s1|L7as{gCV5W4CEBV+bPqdHt!qsbS;gk;jw(e|*33 z2_AeJx@f=g{=wy9hBn332zrnepev9rf5SCo4sXlq>wEFMH%K+HQ0Aw8dTtIy0#P07 zYiHY`7p3zh=(Wy}SKLj(GRukI1f^;4wNPU*JHA9!vX)dFqTg z+_s(FG`rcpuos@yYNWhZeIaRRU;&ZfqMA3QD@+W-IoXn?onLd?VX?hRSnfjBsMb>maLaXHBGU)l=-b z`?S50S=3Nf`BfmplYxrNiQf;@aB?k7)Ys7k4&2ZZrnJr?`1Ye@l~5 zIakJX&4N7S#8|lUDXZME-fPHI6YW5vsE4rlbgbQ zuuo@b$51hKL??0sNm6bo_rN0?&$E=wMDA>t1;q<^)*p**5V;pUix*f!ujb2CE!lDd zU6ShB2zJRvTfvB}qM#!Sn@W$tH>6x}7+7`bJW)=U2l;eluaiYdaU}Jy@z^{@i%>rx zn=)8g+~G78pS7C?V;2r#VLX%e3SM-5MQ?TwUCh&}lE}i&r!F@8=|TJ&-H13G0QHmO z=pja@uF)m0CwlWMtg`9N2!WS}PepFURBslD39vUu_QtafvH(=CYdXDq`yyS-xJ;Di z!>ahz(fdO``xtu(4AN0vSac$5QpTv=2X^B3_!%R--!ZDcjD~k|4zSO1L#J(;svyhC zL14tZXETAcE2DiU5zgtJDWaj1v#+AC`WuYjc=?Bn;0I_vu1ud0H|v~&sVjTcC~VdVNkJ|KrTTQUT&l=<$TJ%(4slu9B@<`um^>)>d&)|HZdQ-Zz$!dvtuj zIoctplWFqqKo0CijrEth6HpTx>cTNJr)b7J{3AWZ>hUqcIzGxMCM$v6G&}UG z8Jyai{O0Y=?dc`;)gIsU^ZYj3O6JlkR!fh|>aG_8=CZSDD1HVv2Rg#WKak7T67L*X zmeRkcNjchV9(D%3powZeYne<@zh@Fvt&fgBEX@%Y`YW)5w^yr%%Py9M%5O62Wv~Ek z`y%4SgF0nNZ&_btWo?rd(?e{89FHk?HP$U4L?&qMjLOK*haz)VNmHYJ#7<49(i3?hoyi9xWKBB0V$W9vWg&wUMP1O zH2DX4tae8Iw$J4iP?Z;DQD7i-QXQf&6XC@~y|7@Nh!HYae1aCwCwVMwW9Uo#j_!^O zLg_v!+1;Pn71_!|91qOfm|9^abUV+(G9a5cjOwWk-YGPHQ!*oplx1gm1D@o5aQxSi z@pQE)1Z-YTc2HzN7VOP~*Mgh=i^iJ&(DPwjej)c{5}c)`ibvWk;P@mes4{qCHfYD) zfa*d{@d>A>6xg7v!V^PF=~>iTelU6z8>W_6z2sG`i>Osi(P4UJ{Q^2l`@pOkrb5{k zm0jk+{Np@Lceuep*uoz0Np8Dy0MBD|V0HO(p^OU2b@+7di(YR@Q5MMF(?Dm8Q+>_u z$v_Cp_@s%zX|H1wB3nuiZ^WEwI}NVR^MTHI&qJ_M?U<{?(q7))g2?SU%ZnQ0aBqEM z_n>9ry{%`$QPGw5&UAC=5vc7XR%Egos{^Rv>@3d8D1J$t)6`aQY-rCmq?VC4$ShZB zv4~6$ufR5-Yg3s2YmUaB59q*JK^d=(tb^a>bxK)jZHRQaW?}zKHJ0GdgUDdjNaCLQ zZ`D5Xvw9!xrr9Ql(COrf+=P>O)H6E0g&>HALGVa9YOfs%|5@y&ucALsgHGHYTF3B{ z9iSQ1#giMi50p=!i_(Z}gQKW7^UaUhVR?GYIt)d;Em}p)aub|gX{f%2O_I22QB!Ut z<ik_X`&9@p_QWP+G%yn8jW7V zF_8~7W+Y?L-N2VwL)N079S)S`H}?|J!Bx{5>=;Xj;hDV}>Cio;mxTjsGo5F*9G=qT zt+fIAS5NT?ZNx9biHPo1JKK&oQ%Phr!vb$7+akxitEzd#IhM&Q^@f#RM6^mUb0O^qgL8N&p39YN989zLRV-sGVG;Z)Q_-<{gK7ZZ?@8OIaas} z{t1U#W>rzk6ApaJa=+|y1>I^0az14aEoU}N(gH@wT$nMJi0p}(7?6(8wHzz2NFaF{ zdh;;vECUW{G#tG!f7H}tfr=MVQjT<>|ZvEqo- z*~sG^1;`XpOZJv)SG^TmB*0U*ct0+6SBi)lFPi8^ucuQ zG^zmaUM?YGRRvU0@Umg!W6r6$`VeuMoY00NhFxT9pwSk}D^bjm;g7uBdXC9+R(TUx zg)TfFI^m~r1|!&7^wK`^3+%CqH){P?8&+1AoP(`k&kNL)7rBS5(@T=N)Gs(M>io;H zxbHMtg;hu%OFOZeqOvIAiNwF(C$ps#C)^lLgTyd*SK-5VV@|Tb)taa8NaEd(6&1j@ z!;Qrb|FM(E(Y?Rf&RVgaU_<2N4QK%)B=WWhQ5B99h~DqcqMg-;$N)AXk%+wVt>|U5 z*?TZMzI6prk|fBo`V8?txZ*MI8q^Nj%&J=lt(mU3b?(xFo^E_Kx^)5Oe%XoS!#jQm z=P#$omQn(~WLuJ!6Q7VZbRjSmU````Zx<;fBk#>C;@n4r)3t*DR5uo$tG=wvr~ zYEa4ms^qPBFScL;Yss^0J)0=9hqP6#EMKD?aFKc7(={5mc{RC7RiT+_cezonN8fRk zJw+2_h4iIvVEVEOU(%i)gF8>Hw0PEE{DHDdFmlSy(k9mPQgR{`4HK=();akM6MDjS zh!oF3=)^QeALs#g5R)IxQle8#H{4LmfQC*a=V$cX>=cJ#y4m^BUY1h&t zBdxROtGA>pgMJ#@91X-xx-{%0dZFIiVwU{MM*7#_k@^&}K6n5&jl8kY%8{dk+;U(jrxkYG>!V}jXmRKIPgBR#Z!@Pwz3Y> z>b#7(mCgz+U+)~X+s=@yMugnrxfQZnUuW$V*=bnh8l00{dJRm*{$>TqYq8O2?mQ$9 zLk&Ey3KZAKMDd+S(jSh7qfw(yfb-^B#GhB-u)9buR27TG3v$iX3nu`IJJx(*S1T|l z9ROAOr_Ng<9hmyM?z%FQp4It=jKY226KZgcj56w)KF>VtIxHP{qislUJ|LwFP7Jh6 z&D-pW{y=Z4uOaV5meAV9X!KDp()X+l*swYEUx5WkQNA7SXHSB=slw`{xtMMiEznD-R>;Adoq)9o^_=hZA|iCYse)rgG!`d2>nN zd*Fk!Q$+B))=I0N$N|36MysqWYR|5utGcYfuZ6!rH!XtJ^t6Mv*lH3gm+HEDA7jBU zAWZHTlV~SV=*Sz|MvitpkoR3B!E$Xa)68SxLs%0!h$M)6^0j-B*_r=Na51;~YR+QE zpylva)M)t*_efRm*}?rVi5*Qns2XE}o4}jH|73z_ez-lY51nVuQ)73ZIKzrVm!S_i z1>VsnIfCXuEpQXajm3ItGfZ1gtMMc=hsmIm6&6;EEtEsqSaVk5I5o{Ez~kTy)1TI` z8rOI(cPD;LEexb~6RWp?Vg?=S?wZop9mnplXU1{q;8nuIWoDbf|3JrXs8O7*bX_22 z(TD8{q)HkuBlilY+Nl>Z^BoM%fRHiJk5WwuP?tfl+n0(v@(lyoTB=Yv?pJkUwOVJZ4&N`9~`ahwo09mTWV+sDe<1sX$+V zxs_L+&Mu^ST|SH2kLj)DPyR-%2D5duYf8)&!(Th(@-@;$HFfi79#SkaTi_V6-@&w$ zpytL%GEaVv30I*a%oxgo-P6?=M_*YrWiM?*_gV$SFk`IYsW(jDLbmbOzTMS+a~{9i z@G}1v*wZY})|=bJ>yXZDmGCqFSZSyap_|X`@-1|L8Oh?8WVU5JkBp)dWp({j@*B2K zKgN;Gq9>Y()kk@qe5FP{!~xa|7r0H#)twNIdef1U-x8uQCAH+M74w6UC&8#CT%12bW?* z>ivlDnEq^E;!kayTIt#vO;G_h53kB6!W;3p97|?Y2{K9^9Vng}Jwl%td)WR+Utv|- zp>IIPxCg23UXK32c}&nh%4hBz+EmfNtgojYX&9RcD74yv*~Bioiga?>MXKJL=sXMg z!gWVkYFFDxCubD~ZwdM~Z*)N}wscdif0o-UYsQxPexARP#M`xiPwVxPLAa2t}Rng>~RwnMIr3_@g13|XUgVM4gt zyqvh9_DKH9wvzTGd+1ZOIrN@=cwl#Y&kW`v_=KkMX+Qvsxu8>sOG@O^j+B^F<(cK!l#poejRjs=IQ0PW>&CKJg! zFl%DOIcPy`CmzhcTlr;T_ry@gagkep3n!*xbb=ntBFI3#mDe_Mse_JOl&jbLvD5AO z!porFu@Wr$?|Q4yC-m!)yZSWq5qVI%fO{HrmCDoE?(ZpOEw_0e%B=Zq2l-I@H$Fs; z3i8*8{Nf&mbKMo0SvUDNI|YS^oBUo%es`kY(4I|OrF}+Tcu>p+!}ATVNuSbEY(1&P z?*{lGN3V`=RG;364hF}*IPS`mhQC;9%c|<2=B$a_XP+43XzK3exZ-k3d-x`DlIGUW z^RH%@>rGf4V}uCjr^O8!s#Vh0@+dMj+=Uq33+_SdojX;f%FXCS_NaQ@(8cm8-CAceog9mA5%meW24w=GptCYY+aS&){X`u;ST>aT>kY-3y+TIn z`T0DvGn=E0h>RC-qT~@!xbX|yqp-V0^!oX)JQu_)qrRp*ZsvJ3NtBK(NMt)M1& zg`5j2!?(Fk1a1vntP0u3%PgWq+VaRMa#C6-P=Q@&aXB$1gjD0{{1Ft+4=K}Z3m#+< zarYRwRJLI9E36GIglu{N_Sht|uU^&}D%t@B`4FBTdpsHG8OsAVMZbH%4^YPTI*jP(TWz z?b&K^OASuDtF<(@qqi3!pu!BdyA|ljPGAM&)|j2m`C!Uywq6JAan3@{lncnw;v(MB zB7A1r*yH1DJClAOn|TtG!!=c`a-T?>4NU1bhYy??`^pb2ONd~1^!LySIR!TKQFj^9 zHh8+&V3Z(U|K7!Pzg**(O=)<3;>Qm}&j(-nHC&RrVoKnXd|Geor@1XP2+H#r_!ekj zT|hSR%KeWMvlvW!fAQJSODPAv-WZ-8%=!!}1J3GxvP~W_vm)=jg8S(b?_f*}>(Aa8 z868XbY;zWAQ@>BfqjLW*1Rh((;wmS^&qj9`3DI1n2G9bl6d}8M7-RMN+OXfIokpjH8 zHWMfN6V%_nN31nM(J>fptl|yHtjH8u!mLa~5a%O#Am1;#noUGn>M*kopBeoqx=8)Y z?!Q!ObOh$`S&>0ECL72hqZ_i(1k}+dNx6sz!Q}#MK#}Yt8F)c?54Z>@J@8N3y~xJ& zz5jN(2-+*zMa!_;auM|J-n(W;f1-=cma%sIWw66Y36=siIp*d~Xgy%8u(x5iNJr)m+_c6H`6U{|oc{J^s5TqRs$4;TYKUMoLS%pv@NilTT)ZW6 z7aMVGS!xFTSjrl)1#Uv+MC;H}WS6^!vClDEmZf#g%TcMWMaDw%JH}(2WM{=OqcvS+ z_?TnGZFK6}>9_5x^ruE`sFs&@R0GzsLg*|YRGtBUF;m2{EY3Hsen3HvMvVLD?iG3_ zxd0SiC%^;OhJIony;5WsW4m;i1=w&|i*2x3G?6sb*6HKI3yEwZn$%3pEEdu1e5

zD#2KhOJ30m1)VWBXzA7T-l?Q{45i7( zl1{pR=poaNDHEkxcoC@o&NG6=)LL0oKUql?B1gm+Hd_rRh51Jo%{wHu(fdZM5pPlX z1PixsLAdZWh#2c!0-e(ZB30yxjbabNq_`xrM*FGqB!woCgNRil*iSY#v^5+L;#jP7iZDkD9L04mUImlRW7Umtu&L5~jq!`eN*TGY2<<8^C;=vSyjk5Nb zDSBo1mdFpZzv?W1Km*!hHd;)b;Kj`%F`MK{8f#=qjUqEhZfAGrA@YjP#I!Xp`=O6w zRa6Me3RUE-dRM63rNC!FXOl=w$`1a^3?g&g>H1pPML$DJCEB%pM&m=jo&87~oTwM> zq2ku@0q$}}c{2UbK0Y9HeAo{ogsf+I9clEMR)#b-&IJ{OE{Vta(HYAJSdCq^!pa(n zMu>c zu$>9p9RAVO1zJ&`^>W}?#EZ8PXUQXWTh9%3=ey9tT&l$Y)p1#?MyEqLcs2SUi?piz zIsZ-rSXcKHQq4{1Y3 zh*@U5`)E)PRJ=ce*O-y+%p?r{@(z6(n1PS<5Bw|Ht*-L~bWwiOK&@=dWbz@YI4z#` zOkJk!ZS!;%-phT`tZHjQtEl?O+Z{k0zt@M$zN{F1rr&bkW7Xxvs2=d17%!V)W-}4Y zw@WZJ4l@IzGeU=;lkRXeMelqWdJKK#Vpaui1ARrfTnYZ^WN{WAFCC)1o`@GP3-3tE zFy(k;EE0df#8`}*+K$s1WM&1fwF;jgEM9^H(xK``&F1bBiPg3ITITS#tlm!~9kHZ`5YwkzBcL;sq<7}pPegH1wLphHf03PbniDU8`y^p<>No;Ue!*@CF zjv?VVq@o_Y?bakwD%L0>NbVymX(~Bsb|8<%Ec+33E52&cM&%lVC`(-A$f}-* z3Zj?e4V0qCX_Ne2>{(h5s169%W#?m>L)EK!&uqnR!ABw4yo#rAlVEZ?VjSxGyY#BL zMkGm23dAfV4QVOTjP%t8nEUln&YtvX$YcJAtmi9LEav4YS{Z$=IY8dvuN)4}$UjDR zvOVpJD8rq!0lL(wsad1yA2>|s5azy}`iC8J)F$)MQ;J~lIbqY`5t9xC+hjTldc!^S zkJ5&nzB6Sz`1?!fMQ2H%2@Z(NKv^Ca7A@q=!@uwr=9th-2cXug@$>c{K*h|dEVU|L>%-grcZ~!gLk5SFTnm~ADUMd+Y|wXp zo&190=0SL-7ImHt$>h2RPG%|iOtfHqqN|9B&SkWu-&;`ybxs4!tvAs`qsocnY%?NP z;fQ`BUPfw114p__rG^>DjXCgRlWG$D%Wx`1ID2U*GZVsgPdf=xa1Yp2eFzEIhx!xW1tmS&#)M@ z*i)XkGms7r_+&Dl;{uBKzp!iW(DE`jrbK1r3U=Pn+Z-e))%h!TX{{*jp!Kj-SErKZ z!!hQX>EM@LoB3Pv%+&xh)<2{f+-(bKg{Gc;UaeeD6@{@ zoA^X2R0A@S*^V*VRC*_@IB89W@(koOzs^>JReD|Ve*&&FZNySA5gMjGBo)$b zfEnZmf5X}4GbjUR6rarHs=Tbs`&ZZ8-|2celx}ifrIVxDM?WG_#sqC4CUKd>dRtu* z%knwA9J6rvWHbi<_aupX)H>-$BMj(5yA2#jOG%|_H#|Ib#!+#6M ziQe*2@)+DU=V%VxSxMAKj7ofp9aIST^VZ@X#fj1yv+6YqxT~v3K9R(mJDFFz;59!8 zj+M9b3>SBP70AVN#Lh?S$DM_PCOIDSp|luzNpg$7G>`151(_R22r#3sc%3zTw z+7HF5!~3q)+QN#8w%RqI^^XOA`@iF4ZvcRhi;5ObjXkWbxPe7kLb_+AMAQoXDc7o#f)ea zpEGwm9`O_5jl6ZREM->#TQi8C8>`Go!3{&pI$t6ZT$K?}rT-Z`^`x){>K<6M)#wME z0WIB;+Sk38)`Lk1J5F%mPRkjp7dfm8Y6#eJ<;^l&Hevx^i&+c}lxvw}Trf@o^HvUh z;TY~`Zc1Md&#~gV7+5KAKyls|2eNDLaMK#Q3;XH|(1+3=n~%*=I6=m$mg$|KnzImkgk|-6+WNmwU#sR(A5}Qq zU*{2C`lR7@eWOm|BppYu%vufy6xRl*Jz4eSp0M&f&6=a9QHFr)6Lk;_G`+9cU$mA_ z#Q+f}ZyL{`o6-VzqF&Y#ZK!YLz?f)?Fh3k_tT%wUy&m4sb%GvqRO5Qat*qj}gB>KF zMzLH_3!LA`-5(RMGH4f%(CHvhAjM?)y4dRz10&;$sUQlIyo49x$qlut+7W; zhw88&f33Y-s}Y3)I3)N_IaAEER?w5EGlsWXFDhfd z9-xe>d%dQ{jUzH?R=8V?MBNALQbSL99yecao`Yxw;ST98!t-l3nG){OOfWG7H__llnk2;5@#|cD)19&1rq9X2?QnVfIHe6gpSWt*?zo##Xx#e^f5_Ffcr# zqUVUtR6c4l`p5A)2a&~tvie%Bp%c-it@Fk)qXKz}<j#X;(3){?rssu zMKEhAWMw<+(fYKdy18*(_6^7H;S!EWdz@|!q)Id3I2WQ%0lsx~O-#AkqW9C3E7=2` zM7#7><6p-+*WchBrpvm{7&`(xZagCH8)}O_*Eu-5qStI5LndEaZGbvz11L&Y(2vDj zxr$42ytUgZWc^5M@V!gWVDeGpjZnP1AG9UD#JLyddZ68Oo67=QU6>QqdPI?loMSW< zO|3;ifg;>)2|nj^M`t)nPldL78ScyrjUkvJm(BG$o^1{S7 zfO@La>G$MYGP6<;F{X$w%){<(>aM%LdMd~0QSfuVZZv{QKs|IB-Z={Er>d@Mq2{Ox za=Lku-qJkL3S5c?m_W?72FOYgXZKt;ZiY>UuEknvMxWphk!yT~JSSLxl^$=8Qw8jm z#vfMYxDJ{1qL%Y*y04$eiuQJ(^FzUhY6X@{ANkt+(!PqRV*^^GI^)?x&lh<7bo+^O z7ZfC?iPM&g9hSowZbY;w#4o_+I;)~YXmC5Llg!Ah%e~=e-pX7o#{q#E?k*;uWn4A} z==MAxJg{Urld`RM@T=IB?PI%CO*I3VdJYhNF&xfu{5$7?zF8mf1CY(a? z*HcJuMpbg<8lJ@K3QDG&`7MI4a(nE+ykyJz?$ii)>ewh&THePc(hI(0^+Vk{JFcj{Zl0k|5f{w4^eYtA6nGeu z-8&4qJvZtYLqW&32M?MI!mtCJ9(XXl!j$qRhBu8^8yEuPqxZBCjCW0%+qh1 zTdej_`0$fA)mZ4J#H(o27wpyb>KFOae8)vpFFplT+lj{7dZ*x>`>QHOg=7dPB3A6D zVCpPQxE@@Pb*Q~A3x&!{T*@NoJlzpL;q=-TUBted{VIHeo-1xEU-`^Thl^cXOpvS7 zKI07>5TC?WHOt8w2gY)HS-epL6$32O=%x*MIPT6_^-5PXa?C`z)0Jq(z?C^k!_`I@ z8H>%!vZAaBr-XkoM=J0B9-kG(N!&^m%POko(BICD<`4R>*p9$teBWd$xXQnX6lj0_ z#}AAY^r=2jmUCmwW|hwfH)cq0<&DU3%s46r$r6;~x~nE}FT0u?z!edL9#C0Ce_T20 z{TT|Xp4?pRq8WZ3GPgYT zb*iYh(m%2zu=F#<2XhzAP%A?#NbDwLIBBYyyyiZuv*nGbnLw6zGw$f+#tm@OFW7mY zJUNMLJ13=|0gEw{F9_lR5}+|=i?;NS z&Na8X9-0$G0uRKFe}X(Tj@!7uaRh@o>~HpjR*j$;v6Z2#at=sV`znzXgaI%r> zNXX0s9(^QurhdARNTou?M=@2@fVOKRbzDxM-IRx&&RLCpoCj5bteJe&`Dgf2=!EC+ zPM}r%)K%`ruW7elWlWC=hwEndpeU6r8aI2V3dTI*T&SM6bS;;gfOH=KUx?N^$Nbx! z;r3UFSg`?mD!&mo*w2+K|A6L8G4&%({CDUMUy@U3A9|7#Xf8ROxnR-!XL>mY8)x-u zIh5-|?J7$IBVOjzX<|R(GV(a(QCo4U9iiV<3;IP?0&ZzJy56>Its{U6I;|4WA)bKV z_y_PNeBcV{rXcDAoSp~w=E3QBR;DM5Ot-JIH|E;s;O85mOWAK6SL7d@Nk{lOy%IH4 zJ$*vjTqo|Lnq@`Eg+PQ95NR^qI$_kyz8H4P>?NgK7Q5N{3la7j=3#TyQ3+ojJ=iq@ z&VV`K#kDkd14DWplft_ck5BYOW6$5Sn4C>BgJc>_1p6;lwbE^9taT1*y}9y3`f<1` zd`D?uu%*iRyz|f>)EEex+2~V$q!;3~xFErpmn*U^lE=&OJx;{pl$>F3smv6pG6sSf z?j1dlAL3fisH$MSOu#fQL>{2Oj3XKLp{Jq=aMC9^8aivSx{UZSYlHqSJJwhW2gfC% zGv{VyAX28r0^KgYl6P-8)6kep(FRb!*Rr#G1Up>PtXOF<{b4@mfe^j}DO9;!ym6LcU5 zJ!}d=&HS7f^LtYQTNhyG*r$v)`i?vX)XXJSn;%m{*LkSV?o(HECq(AOjxY6l&M&{( z{{=kv6z>p44;7{Gv|H4Qhj6m-t0Ua@rOD2jszkGu#tXBh-om-!Uto@VK+|Nes;Ikz zw@?Qh^hwCV#;}7+U{cW*J+i%eFDb5rDAQ7v!$hq=PvLlZwAx3!ACn=wB=Ew^WflE~j$@yBP_7Y2ZXm~-3LMuAJoQMv%sKP`>ata!qm9)~ zVU8p?wp4}>%_4Tm7qrT?MGn%fu%c^Q{h`g_Y_f#&0m)s|8~{J-Nl-Su=(>YBLRtBr zxMm%5okW*wl)20B%l49A0ViEeHIkpie0m{=Huu$+*|z4GXT+~rHS}}()|F^I*Nw8S zpr_&ziD_HR>+pl9f{eekng%VBZU0-HeW@Y+1qZq>aSh+tgXCDXln3aBRvbK4-*aB% zqWkDCZXEa)v!%!KAhp0$H8SEW`(OFc8c3`81T-wZ6Xo2As1oLa=~hQOP@UBS(`hMO zB-$ZUsj9C43GM?O)U_IH6K=)_WpMWQ>0_uLR>k4}p}yjzgB!w;-Q&e>X5%7H*Qdbqyh{1u8+}1Oc01v~bd+;t8>$sm+6bZ&>Faek{2QvM-&ngoTI0b7OF{wsUnAirQ*2 z_UUKz@c{K0&Vn^$aT+cbfzeQ$pSY@8vm4#iUG&uK*IA?O9@K{BnJ*mSqP(os_#w}e z(+rn(WSx|isgwCFbhUcISI5h|p_a)jO}gm4c15V>FI4-XcGMEn!Ubjns2S(g71a@( z*{(_f|9Kr~txzz3a&*-z zWA{Si{SVVCv}Sm=(NZo9ZxV9V?jd~S2Q|Pxz~$_lJcYGc{ZKbCU5`n3bFy}eR_2Y2 zvyr_m$>XfKu3`-u>uo>*W^j%p7dbc}x9y5TOX{tw|&YTWJR!6f1e^NHB z<2g{!`x$zWO~FsPLvW~tTj2>PJ!pNFX7L!*!_gW#vs_c%=6YC{4(^NYND?M=^?^KF z&t=#TGr%>#*k?nNv>Gx>Pqg=N8az7KwQ!aug4yE+ZYu_8g&pW0Uh9d-v`#3%D0RKizvGWDa`Kv(ww|9YpquRF3uzS?b{K;PkvD(@a@zJ&^m z0zSp!e%4ko0V-cB8dc!eMmSZq{Kaykb$GHEZ4~Ckva(U!`JIfFk5=IbD0XlT~Lnpxx#{o_ZJt8};w{j=q`QS~k(` z>?PERJLKdsPwS)TsKnC*Fb#runwh9_WKmM$ieoe#=H;1PRXBB|J;>`i<8|oan9*vU zo`PCtxzXvsCi&8efe%1^(Ve_`r1OEk6AHI5cW|>*P9Q0-;=FjxUbxS5G2JPa^^+O| zq*Qk~S{+f|Mg=uo4M%UXyy*vqd!-e=9J_#Oo(%V1TP_K+t*bc>ER{3R;k#p z9?!~C#&XAzY#(%Hq16L5vMPwdaMX|~Z1XHVJ-8C*KhlH3+=HRAksle{E|I3{>LpD^ z<>WVh(|uCwx$8jdJAnMnRA4sRQ8?-B1pBt^;`XzHRibzjl4=$}*8VN@rGxN^v(SsG ztPircJyze&{wvc!C+{d$L$rQN7pR@%C_RK)+*8Ip5~qTRS>r+6@6Q=W0tcACKw~}% z-*vZ~BnJY?k7@ubu?+VBDzO_^gM(%oRhN|S0N;1}RjbA5*jcLmR3n{Ay zspeo1K*@|caBJQ}8GMn`wrxSCpK4df6?_$Xb*u0g}p*Ue&qAu-Ge9uGk9?JI8{sZY>t`>E=y?z?M3xer;l-aviyJK0MF zS{1d-*@`2f!D;QUR?9IyyxsLXh0ghU-A-9l;{6X)54*C%43s31n z`Xw@j0(w54!Z^g)n&?lh!s=VaOdLHUC~nuEV z4pxV#9j`@29t5}FS@<3yh}J3m1Furm@skKJ6g{V!XPtV^X^+l|C%gW<(mmZ>&%Zo> z0%$*0dN1_Re#Gw>ixpEw_0+fdIvlKgkb6{ChtPRkp~@l?Xa}c}PxKxdFM}x#y1tW< z{glO&=qXh|FSQ9BkSpWPlP4o6Mj8d(}NzlAwQs2~b;W7|k}uM%RWn`8_M7ajca$I?C**{i0?%PvZRA2Q88Sy*{!M z_VXW<=$vKvsLqaX*$KVACTfBsNUXOeQ7OJJu27f`E9U^Y|O1Uc>J>ATgch3fm-h? z#v?!YB-iQ3m`ui~nLN(UtNTF@$Mb|d(SHQu??&(hipz4qCcQ=MdP&_-+kXJYBN*MC zVGb>qtLtV_IR75T+@8c}mk%7mMaV|;7_`aqs}S_#4$#u{hFpn`!8diaTn5y_PMk>F zftUYad&NAlMu;%zBM;-ARFMu?=|Jy9sjiqij&n{^_2kR!ddMp8V{$Q@hU>QSd(^T{ zp!V9pk>s(+%AP~*un)$m5jZamDvvvL=v;#np6zRtqZgS=3kN<u_724f6X96k7!PORvE+>|F-{g|z5|uzChW)uR#z^Gn#_}7Kyksk zLm#t;B6Auddn;*C&SLDOfAwXo`zmD8SX9?@(4}Z8?wUvSKp+Alr8nMbiBcTmy5)32 z`yn4awC3BhQl0$T-A(SM#TMwQ z_ZSmph+GUEbSS^<arck` zIbiKkZPY$~hzWBU%*B=iX_-&2*D0apU5^%wF}M(g=^^rsiW z$!8a4;LH}L$-{idJ0`0N;2Fe1vX#n(H`+TC3oNP?d&2 zWg(Ql0?xIR>kDx^ zBTe2?w^U&(TxB9AUKB45EdxT*mqS!*^-36lbdkT-;qC=w;oS1{Hyg{%h=raG zML!-6zlAh;Lk^)S$Sbe#PSp*0$YHRicT)-Ijr*$Oi1U51zY9Yjur6lVK8OnMP&c1L z|MVTIvH;bD|A@$oeV#=1)NA9dxJ~sP58*=Tjr<{sKf(X|DyHM>CHgIR-#mIPR;xhN zmiJT@-i6aO2`jrBGKw2?3dq5Ns5#GY4b=x|wa)m&Sn$!x0`+hlzikD-$KEcbuJJ@w zfmh;`?}wFH6-xA#wW3R?x-QT=9)@)f-J`NRi)$bPH^KK=LC=8}8zQR$QPT<)1)d3>;3+(-p7`Il(D1y*J#qhw z@DA<>oJ4o_!jvln?Jg!oNTc*$rpy zM&w_Ek)3`ZWDR&yw{VXhVcr~xJMP5KkE%`c6HHXl)xQ{)4`le&uAun38q_; zhXahv?GEsdzR159VNIRH&YMD-#$r_tSMBs|DumNxEY_1JBk@$|p5CmdGwaDtJaygY zEb?=1>3N0cC!b&QIkWV<=l^D$p8xT@BLx#^Pla|9Pv<3imsjA_k%D_r4qZKOWR)|q zN_XL&^~CdfgcGQbT8v7rFZydCnBx{j)_#P(WyZ>@h1t?`xsCI1Y3;wf*#OC@PsqiAA4&B4?p*x;=B>TcExHl%CM-^N)P*WD6J#b%nM0Z4vOtaQ-DQ6|;-`qFmFDmCOubQBXtwN2fuET`0Sf@hKxxT4mDu|)r z!TVa95C;^1fW?TA$g>ft-ulS-=kYeE1s&v%hnuORqMK@AB~UIhV;@z+Tn{y{ zLgr@k7a8yV4ouPxdK5T^3!qE0i6eD5RzO!V4DLxG9^FGeCF8+P_D9EIC+h2xoB#)# zTG0LSRgH0_p8YYB8qpH;O+LcWZMxd2o`HE=$W_K@iFwsW?2$XlK)2R6d%J9I`-c{= zs!}-gZ>GvHD4LX^YTOxd_XB!w^<*$2;3eRK{dJOk5IEqUt$7CUrRt@80re$stiWJ3 zZ+}{Ya+s72S3grUP6LPBisyb9`1ucTC%c0MYiJl6r;LRiTS^180id z+@u40G;TdR-}5&DSMa%>jO0pCAnS}X)E7IW7b5+BbDKz4+fZ42e(mQ-;rW;6J>mcV K&;QeR;Qs*7^oo`M literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/manifest.json b/reference/fixtures_qwen3_yarn/manifest.json new file mode 100644 index 0000000..825697a --- /dev/null +++ b/reference/fixtures_qwen3_yarn/manifest.json @@ -0,0 +1,189 @@ +{ + "model_repo": "mlx-community/Qwen3-0.6B-bf16", + "compute_dtype": "float16", + "prompts": [ + "The capital of France is", + "Hello, world!", + "Once upon a time, in a land far away," + ], + "chat_messages": [ + { + "role": "user", + "content": "What is the capital of France?" + } + ], + "greedy_max_new": 20, + "arrays": { + "prompt_0_ids": { + "shape": [ + 5 + ], + "dtype": "int32" + }, + "prompt_1_ids": { + "shape": [ + 4 + ], + "dtype": "int32" + }, + "prompt_2_ids": { + "shape": [ + 11 + ], + "dtype": "int32" + }, + "chat_ids": { + "shape": [ + 15 + ], + "dtype": "int32" + }, + "chat_ids_nothink": { + "shape": [ + 19 + ], + "dtype": "int32" + }, + "embeddings": { + "shape": [ + 1, + 5, + 1024 + ], + "dtype": "float16" + }, + "attn_norm0": { + "shape": [ + 1, + 5, + 1024 + ], + "dtype": "float16" + }, + "rope_freqs": { + "shape": [ + 64 + ], + "dtype": "float32" + }, + "rope_mscale": { + "shape": [], + "dtype": "float32" + }, + "q_pre0": { + "shape": [ + 1, + 16, + 5, + 128 + ], + "dtype": "float16" + }, + "q_rope0": { + "shape": [ + 1, + 16, + 5, + 128 + ], + "dtype": "float16" + }, + "k_rope0": { + "shape": [ + 1, + 8, + 5, + 128 + ], + "dtype": "float16" + }, + "v0": { + "shape": [ + 1, + 8, + 5, + 128 + ], + "dtype": "float16" + }, + "q_rope0_linear": { + "shape": [ + 1, + 16, + 5, + 128 + ], + "dtype": "float16" + }, + "k_rope0_linear": { + "shape": [ + 1, + 8, + 5, + 128 + ], + "dtype": "float16" + }, + "block0": { + "shape": [ + 1, + 5, + 1024 + ], + "dtype": "float16" + }, + "logits_last": { + "shape": [ + 1, + 151936 + ], + "dtype": "float16" + }, + "argmax": { + "shape": [ + 1 + ], + "dtype": "int32" + }, + "greedy_tokens": { + "shape": [ + 20 + ], + "dtype": "int32" + }, + "greedy_tokens_kvq8": { + "shape": [ + 20 + ], + "dtype": "int32" + }, + "greedy_gaps_kvq8": { + "shape": [ + 20 + ], + "dtype": "float32" + }, + "greedy_tokens_kvq4": { + "shape": [ + 20 + ], + "dtype": "int32" + }, + "greedy_gaps_kvq4": { + "shape": [ + 20 + ], + "dtype": "float32" + } + }, + "model_config": { + "rope_scaling": { + "rope_type": "yarn", + "factor": 4.0, + "original_max_position_embeddings": 32768 + } + }, + "eos_token_ids": [ + 151645 + ] +} \ No newline at end of file diff --git a/reference/fixtures_qwen3_yarn/prompt_0_ids.npy b/reference/fixtures_qwen3_yarn/prompt_0_ids.npy new file mode 100644 index 0000000000000000000000000000000000000000..fa2ad06eb7799f93031ab716a1d85f457cefd9b7 GIT binary patch literal 148 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 literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/q_rope0_linear.npy b/reference/fixtures_qwen3_yarn/q_rope0_linear.npy new file mode 100644 index 0000000000000000000000000000000000000000..de9b397aced79401bbe0b0ee5b3fe01ce25beb3a GIT binary patch literal 20608 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 xPAqB`PM_xH@Gs>ZY6ahPthzFZP~{{dsBK!pGR literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/rope_freqs.npy b/reference/fixtures_qwen3_yarn/rope_freqs.npy new file mode 100644 index 0000000000000000000000000000000000000000..4ed35fff4db338059bd0e1cb1128650811fd3c2e GIT binary patch literal 384 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+l>qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$dCOVor3bhL411<)J278|C^Xvm;j@nDj`eHxrh`7VjP#XuuZJ7>xm?ko;k_;@;mc$S~;h&7dbCGH`n=2;5p}8PV6q9UmLpoe3<3Zzh<_JPT+YL zrc+$5JN{a^W}K;Y-F$eh>&vDOt`|0HxOMC;aP!-}-mOsRmfIvhcK3i6>h5=90^Gwr z8r>W67P!9?J?`Ge``!JSr=-V03pqoAIaUsO_*m=~X4l#&V(cT3DEP6dh= YXCxM+0{I%6ItsN46alU|`zG200KTFfWdHyG literal 0 HcmV?d00001 diff --git a/reference/fixtures_qwen3_yarn/tokenizer_corpus.json b/reference/fixtures_qwen3_yarn/tokenizer_corpus.json new file mode 100644 index 0000000..d949f7e --- /dev/null +++ b/reference/fixtures_qwen3_yarn/tokenizer_corpus.json @@ -0,0 +1,392 @@ +[ + { + "text": "", + "ids": [] + }, + { + "text": "The capital of France is Paris.", + "ids": [ + 785, + 6722, + 315, + 9625, + 374, + 12095, + 13 + ] + }, + { + "text": "Hello, world!", + "ids": [ + 9707, + 11, + 1879, + 0 + ] + }, + { + "text": "don't I'll we've they're it's can't", + "ids": [ + 15007, + 944, + 358, + 3278, + 582, + 3003, + 807, + 2299, + 432, + 594, + 646, + 944 + ] + }, + { + "text": "DON'T SHOUT", + "ids": [ + 84641, + 17323, + 6434, + 3656 + ] + }, + { + "text": "spaces here and more", + "ids": [ + 44285, + 262, + 1588, + 257, + 323, + 981, + 803 + ] + }, + { + "text": " leading and trailing ", + "ids": [ + 220, + 6388, + 323, + 27748, + 256 + ] + }, + { + "text": "tabs\tand\tmore\ttabs", + "ids": [ + 30993, + 52477, + 2109, + 460, + 3244, + 3435 + ] + }, + { + "text": "newlines\n\nand\r\nwindows\r\nendings", + "ids": [ + 931, + 7969, + 271, + 437, + 319, + 27077, + 319, + 408, + 819 + ] + }, + { + "text": "mixed \n \t whitespace \n\n", + "ids": [ + 56685, + 715, + 19271, + 36372, + 4710 + ] + }, + { + "text": "1 12 123 1234 100000 3.14159", + "ids": [ + 16, + 220, + 16, + 17, + 220, + 16, + 17, + 18, + 220, + 16, + 17, + 18, + 19, + 220, + 16, + 15, + 15, + 15, + 15, + 15, + 220, + 18, + 13, + 16, + 19, + 16, + 20, + 24 + ] + }, + { + "text": "snake_case camelCase kebab-case", + "ids": [ + 72139, + 19096, + 49152, + 4207, + 1962, + 47722, + 38485 + ] + }, + { + "text": "for (int i = 0; i < n; ++i) { sum += a[i]; }", + "ids": [ + 1958, + 320, + 396, + 600, + 284, + 220, + 15, + 26, + 600, + 366, + 308, + 26, + 3443, + 72, + 8, + 314, + 2629, + 1421, + 264, + 989, + 5265, + 335 + ] + }, + { + "text": "café naïve résumé Zürich", + "ids": [ + 924, + 58858, + 94880, + 586, + 9333, + 1242, + 963, + 1863, + 5186, + 713 + ] + }, + { + "text": "Ünïcödé ßharp", + "ids": [ + 52491, + 77, + 37572, + 66, + 2956, + 128505, + 1683, + 253, + 71, + 7876 + ] + }, + { + "text": "你好世界,今天天气很好。", + "ids": [ + 108386, + 99489, + 3837, + 100644, + 104307, + 101243, + 1773 + ] + }, + { + "text": "こんにちは世界", + "ids": [ + 89015, + 99489 + ] + }, + { + "text": "Привет мир", + "ids": [ + 53645, + 26991, + 8178, + 137144 + ] + }, + { + "text": "emoji 😀 and 👨‍👩‍👧‍👦 family", + "ids": [ + 37523, + 90316, + 323, + 61804, + 101, + 378, + 235, + 145233, + 378, + 235, + 145665, + 378, + 235, + 145988, + 2997 + ] + }, + { + "text": "math ∑∫√≠≤ symbols", + "ids": [ + 10374, + 11995, + 239, + 145706, + 144336, + 145129, + 144570, + 17738 + ] + }, + { + "text": "<|begin_of_text|>hi<|eot_id|>", + "ids": [ + 27, + 91, + 7265, + 3575, + 4326, + 91, + 29, + 6023, + 27, + 91, + 68, + 354, + 842, + 91, + 29 + ] + }, + { + "text": "<|start_header_id|>user<|end_header_id|>\n\nWhat?<|eot_id|>", + "ids": [ + 27, + 91, + 2468, + 8757, + 842, + 91, + 29, + 872, + 27, + 91, + 408, + 8757, + 842, + 91, + 1339, + 3838, + 75414, + 91, + 68, + 354, + 842, + 91, + 29 + ] + }, + { + "text": "a<|eot_id|><|eot_id|>b", + "ids": [ + 64, + 27, + 91, + 68, + 354, + 842, + 91, + 1784, + 91, + 68, + 354, + 842, + 91, + 29, + 65 + ] + }, + { + "text": "URL: https://example.com/path?q=1&x=2#frag", + "ids": [ + 3144, + 25, + 3703, + 1110, + 8687, + 905, + 50976, + 43782, + 28, + 16, + 5, + 87, + 28, + 17, + 2, + 33198 + ] + }, + { + "text": "@user #hashtag $100 50% (parens) [brackets] {braces}", + "ids": [ + 31, + 872, + 671, + 4648, + 34311, + 400, + 16, + 15, + 15, + 220, + 20, + 15, + 4, + 320, + 3380, + 4412, + 8, + 508, + 1323, + 18382, + 60, + 314, + 1323, + 2434, + 92 + ] + } +] \ No newline at end of file diff --git a/reference/fixtures_qwen3_yarn/v0.npy b/reference/fixtures_qwen3_yarn/v0.npy new file mode 100644 index 0000000000000000000000000000000000000000..7b0a3769bcc1e638c74738294fe7f14a72890454 GIT binary patch literal 10368 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 P11wC3T01h83()@ofb~RV literal 0 HcmV?d00001 diff --git a/src/capi/mlxforge.cpp b/src/capi/mlxforge.cpp index ed1884c..0c18a3f 100644 --- a/src/capi/mlxforge.cpp +++ b/src/capi/mlxforge.cpp @@ -179,6 +179,9 @@ mlxforge_engine* mlxforge_engine_create2(const char* model_spec, /* v9: multi-row GEMV decode kernels. Zero-init keeps the default (on). */ if (covered(&opts->skinny_mm + 1) && opts->skinny_mm != 0) cfg.skinny_mm = opts->skinny_mm > 0; + /* v10: RoPE-scaling JSON override. NULL/empty keeps the checkpoint's config. */ + if (covered(&opts->rope_scaling + 1) && opts->rope_scaling && *opts->rope_scaling) + cfg.rope_scaling = opts->rope_scaling; auto handle = std::make_unique(); handle->model_name = model_spec; diff --git a/src/capi/mlxforge.h b/src/capi/mlxforge.h index c0f16c1..c448b6e 100644 --- a/src/capi/mlxforge.h +++ b/src/capi/mlxforge.h @@ -50,8 +50,11 @@ extern "C" { * v8: mlxforge_engine_opts2.prefill_chunk (chunked-prefill interleaving, * default-on) — appended, struct_size-gated; no new symbols. * v9: mlxforge_engine_opts2.skinny_mm (multi-row GEMV decode kernels, - * default-on) — appended, struct_size-gated; no new symbols. */ -#define MLXFORGE_ABI_VERSION 9 + * default-on) — appended, struct_size-gated; no new symbols. + * v10: mlxforge_engine_opts2.rope_scaling (RoPE-scaling JSON override, + * yarn/linear long-context support) — appended, struct_size-gated; no + * new symbols. */ +#define MLXFORGE_ABI_VERSION 10 typedef struct mlxforge_engine mlxforge_engine; typedef struct mlxforge_request mlxforge_request; @@ -152,7 +155,17 @@ mlxforge_engine* mlxforge_engine_create(const char* model_spec, * MLX's tiled GEMM, which runs at a fraction of GEMV bandwidth there * (ml-explore/mlx#3661) — roughly 2x per-row decode throughput at small * batch sizes. On by default. 0 keeps the default; < 0 disables (stock - * matmul); > 0 enables. */ + * matmul); > 0 enables. + * + * rope_scaling (v10+) overrides the checkpoint's RoPE-scaling config with a + * JSON object (vLLM --rope-scaling shape), enabling long-context yarn/linear + * scaling on a stock checkpoint, e.g. + * {"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768} + * (a yarn override may omit original_max_position_embeddings to scale the + * checkpoint's shipped context). NULL/empty = use the checkpoint's config. + * Unknown/unsupported rope_type values, hybrid (Qwen3.5) / vision-language + * models and GGUF checkpoints FAIL engine creation with a clear *err — there + * is never a silent fall-back to unscaled RoPE. */ typedef struct { size_t struct_size; /* caller sets sizeof(mlxforge_engine_opts2) */ int max_waiting; /* max queued requests; <= 0 => default (256) */ @@ -170,6 +183,9 @@ typedef struct { /* ---- v9 ---- */ int skinny_mm; /* multi-row GEMV decode kernels; 0 => default (on); < 0 => off (stock matmul); > 0 => on */ + /* ---- v10 ---- */ + const char* rope_scaling; /* RoPE-scaling JSON override; NULL/empty => use the + checkpoint's config */ } mlxforge_engine_opts2; /* Create an engine with extended options (v6+). Identical contract to diff --git a/src/core/config.cpp b/src/core/config.cpp index 6f26e0c..34007a9 100644 --- a/src/core/config.cpp +++ b/src/core/config.cpp @@ -47,21 +47,36 @@ std::vector parse_eos_ids(const nlohmann::json& j) { return {it->get()}; } -// Attempt to parse the optional "rope_scaling" sub-object, if present and is an object. -// Returns std::nullopt if absent or of incorrect type. -// Otherwise, fills out RopeScaling struct with available fields. -std::optional parse_rope_scaling(const nlohmann::json& j) { - auto it = j.find("rope_scaling"); - if (it == j.end() || !it->is_object()) return std::nullopt; +// Parse a rope-scaling JSON object into a RopeScaling. mlx_lm reads the type from +// "rope_type" or the legacy "type" key and treats a typeless object as "default"; +// mirror that so the two sides agree on what a config means. +RopeScaling rope_scaling_from_json(const nlohmann::json& o) { RopeScaling rs; - rs.rope_type = it->value("rope_type", std::string{}); - rs.factor = it->value("factor", 1.0f); - rs.high_freq_factor = it->value("high_freq_factor", 1.0f); - rs.low_freq_factor = it->value("low_freq_factor", 1.0f); - rs.original_max_position_embeddings = it->value("original_max_position_embeddings", 0); + rs.rope_type = o.value("rope_type", o.value("type", std::string{})); + if (rs.rope_type.empty()) rs.rope_type = "default"; + rs.factor = o.value("factor", 1.0f); + rs.high_freq_factor = o.value("high_freq_factor", 1.0f); + rs.low_freq_factor = o.value("low_freq_factor", 1.0f); + rs.original_max_position_embeddings = o.value("original_max_position_embeddings", 0); + rs.beta_fast = o.value("beta_fast", 32.0f); + rs.beta_slow = o.value("beta_slow", 1.0f); + rs.mscale = o.value("mscale", 1.0f); + rs.mscale_all_dim = o.value("mscale_all_dim", 0.0f); return rs; } +// Attempt to parse the optional rope-scaling sub-object. Lives under "rope_scaling" +// for most models, "rope_parameters" for Qwen3.5 — read both (like parse_mrope) so +// an unsupported type in either spelling is *seen* and rejected at validation, not +// silently dropped. Returns std::nullopt if neither is present. +std::optional parse_rope_scaling(const nlohmann::json& j) { + for (const char* key : {"rope_scaling", "rope_parameters"}) { + auto it = j.find(key); + if (it != j.end() && it->is_object()) return rope_scaling_from_json(*it); + } + return std::nullopt; +} + // RoPE base frequency. Most configs expose a top-level "rope_theta"; Qwen3.5 nests // it (with partial_rotary_factor) under a "rope_parameters" sub-object instead. // Prefer the sub-object when present, else fall back to the required top-level key. @@ -228,4 +243,60 @@ ModelConfig ModelConfig::from_file(const std::string& path) { return from_json(j); } +void validate_rope_scaling(const ModelConfig& cfg) { + if (!cfg.rope_scaling) return; + const RopeScaling& rs = *cfg.rope_scaling; + const std::string& t = rs.rope_type; + if (t.empty() || t == "default" || t == "llama3") return; + + if (t == "yarn" || t == "linear") { + // Supported only on the shared full-rotary text path (DecoderModel's + // precomputed-freqs RoPE). The other position schemes have their own rope + // code that would silently ignore the scaling — reject instead. + if (cfg.full_attention_interval > 0 || cfg.partial_rotary_factor != 1.0f) { + throw std::runtime_error("rope_scaling '" + t + + "' is not supported for hybrid / partial-rotary models"); + } + if (cfg.has_vision_tower() || !cfg.mrope_section.empty()) { + throw std::runtime_error("rope_scaling '" + t + + "' is not supported for M-RoPE vision models"); + } + if (cfg.rope_freq_factors) { + throw std::runtime_error("rope_scaling '" + t + + "' conflicts with checkpoint-baked rope frequency factors"); + } + if (rs.factor <= 0.0f) { + throw std::runtime_error("rope_scaling '" + t + "' requires factor > 0"); + } + if (t == "yarn" && rs.original_max_position_embeddings <= 0) { + throw std::runtime_error( + "rope_scaling 'yarn' requires original_max_position_embeddings > 0"); + } + return; + } + + throw std::runtime_error("unsupported rope_scaling rope_type '" + t + + "' (supported: default, llama3, yarn, linear)"); +} + +void apply_rope_scaling_override(ModelConfig& cfg, const std::string& json) { + nlohmann::json o; + try { + o = nlohmann::json::parse(json); + } catch (const nlohmann::json::exception& e) { + throw std::runtime_error(std::string("invalid rope_scaling override JSON: ") + e.what()); + } + if (!o.is_object()) { + throw std::runtime_error("rope_scaling override must be a JSON object, e.g. " + "{\"rope_type\":\"yarn\",\"factor\":4.0}"); + } + RopeScaling rs = rope_scaling_from_json(o); + // A yarn override without the original window means "scale the checkpoint's + // shipped context" — the natural reading for a stock (unscaled) model. + if (rs.rope_type == "yarn" && rs.original_max_position_embeddings <= 0) { + rs.original_max_position_embeddings = cfg.max_position_embeddings; + } + cfg.rope_scaling = rs; +} + } // namespace mlxforge diff --git a/src/core/config.h b/src/core/config.h index 5e97a1c..750d75e 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -24,11 +24,16 @@ struct QuantParams { /// Used by the RoPE stage to adjust rotational frequencies and handle /// position extrapolation for extended context. struct RopeScaling { - std::string rope_type; ///< Type of RoPE scaling ("llama3", etc.) + std::string rope_type; ///< Type of RoPE scaling ("llama3", "yarn", "linear", ...). float factor = 1.0f; ///< Primary scaling factor. - float high_freq_factor = 1.0f; ///< Scaling factor for high frequency components. - float low_freq_factor = 1.0f; ///< Scaling factor for low frequency components. + float high_freq_factor = 1.0f; ///< llama3: scaling factor for high frequency components. + float low_freq_factor = 1.0f; ///< llama3: scaling factor for low frequency components. int original_max_position_embeddings = 0; ///< Original context length before scaling. + // YaRN parameters (defaults mirror mlx_lm's YarnRoPE). + float beta_fast = 32.0f; ///< yarn: rotations bound for the interpolation ramp start. + float beta_slow = 1.0f; ///< yarn: rotations bound for the interpolation ramp end. + float mscale = 1.0f; ///< yarn: attention-scale numerator coefficient. + float mscale_all_dim = 0.0f; ///< yarn: attention-scale denominator coefficient. }; /// @brief Vision-tower (ViT) hyperparameters for a multimodal checkpoint. @@ -198,4 +203,20 @@ struct ModelConfig { static ModelConfig from_file(const std::string& path); }; +/// @brief Validate cfg.rope_scaling against the supported set. No scaling, "default" +/// and "llama3" always pass; "yarn"/"linear" pass only on the shared full-rotary +/// text path (rejected for hybrid/Qwen3.5, M-RoPE/vision and GGUF freq-factor +/// models); anything else throws. Replaces the old silent fall-through to +/// unscaled RoPE — an unsupported type must fail loading, never degrade. +/// @throws std::runtime_error naming the unsupported type or conflicting feature. +void validate_rope_scaling(const ModelConfig& cfg); + +/// @brief Replace cfg.rope_scaling with the parsed `json` object (vLLM --rope-scaling +/// semantics: full replacement, not a merge). For yarn overrides that omit +/// original_max_position_embeddings, defaults it to the checkpoint's +/// max_position_embeddings. Does not validate the type — call +/// validate_rope_scaling afterwards. +/// @throws std::runtime_error on malformed JSON or a non-object value. +void apply_rope_scaling_override(ModelConfig& cfg, const std::string& json); + } // namespace mlxforge diff --git a/src/model/decoder_model.cpp b/src/model/decoder_model.cpp index 48dada1..aac1de0 100644 --- a/src/model/decoder_model.cpp +++ b/src/model/decoder_model.cpp @@ -20,11 +20,26 @@ namespace { constexpr float kTwoPi = 6.283185307179586f; -// Precompute RoPE frequencies. For Llama-3.2 (rope_type "llama3") this applies -// the frequency rescaling that mlx_lm's Llama3RoPE precomputes and hands to -// fast::rope via `freqs` (with base disabled). Plain models fall back to the -// standard base**(2i/d) schedule. Returns head_dim/2 float32 values. -mx::array compute_rope_freqs(const ModelConfig& cfg) { +// YaRN attention-scale coefficient. Mirrors mlx_lm's yarn_get_mscale. +float yarn_get_mscale(float scale, float mscale) { + if (scale <= 1.0f) return 1.0f; + return 0.1f * mscale * std::log(scale) + 1.0f; +} + +} // namespace + +// Precompute the RoPE frequency schedule + YaRN mscale. For Llama-3.2 +// (rope_type "llama3") this applies the frequency rescaling that mlx_lm's +// Llama3RoPE precomputes and hands to fast::rope via `freqs` (with base +// disabled); "yarn" and "linear" mirror mlx_lm's YarnRoPE / nn.RoPE(scale= +// 1/factor) the same way. Plain models fall back to the standard base**(2i/d) +// schedule. freqs is head_dim/2 float32 values. +RopeSetup compute_rope_setup(const ModelConfig& cfg) { + // Defense-in-depth: the engine validates on the caller thread before model + // construction (a worker-thread throw would terminate); this catches direct + // construction paths (tests, CLI). + validate_rope_scaling(cfg); + const int hd = cfg.head_dim; const float base = cfg.rope_theta; @@ -42,12 +57,60 @@ mx::array compute_rope_freqs(const ModelConfig& cfg) { {static_cast(cfg.rope_freq_factors->size())}, mx::float32); freqs = mx::multiply(freqs, factors); mx::eval(freqs); - return freqs; + return {freqs, 1.0f}; } - if (!cfg.rope_scaling || cfg.rope_scaling->rope_type != "llama3") { + const std::string type = cfg.rope_scaling ? cfg.rope_scaling->rope_type : std::string{}; + + if (type == "linear") { + // mlx_lm uses nn.RoPE(scale=1/factor); fast::rope divides positions by + // freqs, so scaling positions by 1/factor equals scaling freqs by factor. + freqs = mx::multiply(freqs, mx::array(cfg.rope_scaling->factor)); mx::eval(freqs); - return freqs; + return {freqs, 1.0f}; + } + + if (type == "yarn") { + // Exact mirror of mlx_lm's YarnRoPE.__init__ (validated against the + // fixtures_qwen3_yarn golden freqs): blend interpolated (freqs * factor) + // and extrapolated (unscaled) frequencies with a linear ramp between the + // beta_fast/beta_slow correction dims. + const RopeScaling& rs = *cfg.rope_scaling; + const double orig = static_cast(rs.original_max_position_embeddings); + const double log_base = std::log(static_cast(base)); + auto correction_dim = [&](float num_rotations) { + return hd * std::log(orig / (num_rotations * static_cast(kTwoPi))) / + (2.0 * log_base); + }; + double low = std::max(std::floor(correction_dim(rs.beta_fast)), 0.0); + double high = std::min(std::ceil(correction_dim(rs.beta_slow)), static_cast(hd - 1)); + if (low == high) high += 0.001; // singularity guard (mlx_lm yarn_linear_ramp_mask) + + // freq_mask = 1 - clip((arange(hd/2) - low) / (high - low), 0, 1) + mx::array dim_idx = mx::arange(0, hd / 2, 1, mx::float32); + mx::array ramp = mx::clip( + mx::divide(mx::subtract(dim_idx, mx::array(static_cast(low))), + mx::array(static_cast(high - low))), + mx::array(0.0f), mx::array(1.0f)); + mx::array freq_mask = mx::subtract(mx::array(1.0f), ramp); + + // freqs = (inter * extra) / (inter * mask + extra * (1 - mask)), + // inter = factor * extra: unscaled where mask==1, interpolated where mask==0. + mx::array freq_extra = freqs; + mx::array freq_inter = mx::multiply(mx::array(rs.factor), freq_extra); + mx::array denom = mx::add(mx::multiply(freq_inter, freq_mask), + mx::multiply(freq_extra, mx::subtract(mx::array(1.0f), freq_mask))); + freqs = mx::divide(mx::multiply(freq_inter, freq_extra), denom); + mx::eval(freqs); + + const float mscale = + yarn_get_mscale(rs.factor, rs.mscale) / yarn_get_mscale(rs.factor, rs.mscale_all_dim); + return {freqs, mscale}; + } + + if (type != "llama3") { + mx::eval(freqs); + return {freqs, 1.0f}; } const RopeScaling& rs = *cfg.rope_scaling; @@ -80,11 +143,9 @@ mx::array compute_rope_freqs(const ModelConfig& cfg) { freqs = mx::where(is_medium, smooth_freqs, freqs); mx::eval(freqs); - return freqs; + return {freqs, 1.0f}; } -} // namespace - bool rope_array_offset_overload_available() { mx::array x = mx::zeros({1, 1, 1, 4}, mx::float16); mx::array offset = mx::array({0}, mx::int32); // per-row offset (B,) @@ -95,7 +156,7 @@ bool rope_array_offset_overload_available() { } DecoderModel::DecoderModel(ModelConfig config, Weights weights) - : cfg_(std::move(config)), w_(std::move(weights)), rope_freqs_(compute_rope_freqs(cfg_)) { + : cfg_(std::move(config)), w_(std::move(weights)), rope_(compute_rope_setup(cfg_)) { log::debug("DecoderModel: type={} layers={} hidden={} heads={}/{} head_dim={} vocab={} " "quantized={}", cfg_.model_type, cfg_.n_layers, cfg_.hidden, cfg_.n_heads, cfg_.n_kv_heads, @@ -146,14 +207,24 @@ mx::array DecoderModel::rms_norm(const mx::array& x, const mx::array& weight) co return mx::fast::rms_norm(x, std::optional(weight), cfg_.rms_eps); } +mx::array DecoderModel::mscale_input(const mx::array& x) const { + // YaRN multiplies Q/K by mscale *before* the rotation, mirroring mlx_lm's + // YarnRoPE (which scales the rope input). The rotation is linear, so this + // equals post-scaling, and it keeps q_rope0/k_rope0 fixture-exact. The + // scalar takes x's dtype so the result dtype is unchanged (weak-scalar + // semantics, like mlx_lm's python float). + if (rope_.mscale == 1.0f) return x; + return mx::multiply(x, mx::array(rope_.mscale, x.dtype())); +} + mx::array DecoderModel::apply_rope(const mx::array& x, int offset) const { - return mx::fast::rope(x, cfg_.head_dim, /*traditional=*/false, /*base=*/std::nullopt, - /*scale=*/1.0f, offset, rope_freqs_); + return mx::fast::rope(mscale_input(x), cfg_.head_dim, /*traditional=*/false, + /*base=*/std::nullopt, /*scale=*/1.0f, offset, rope_.freqs); } mx::array DecoderModel::apply_rope(const mx::array& x, const mx::array& offset) const { - return mx::fast::rope(x, cfg_.head_dim, /*traditional=*/false, /*base=*/std::nullopt, - /*scale=*/1.0f, offset, rope_freqs_); + return mx::fast::rope(mscale_input(x), cfg_.head_dim, /*traditional=*/false, + /*base=*/std::nullopt, /*scale=*/1.0f, offset, rope_.freqs); } mx::array DecoderModel::norm_qk_head(const mx::array& h, int /*layer*/, bool /*is_query*/) const { diff --git a/src/model/decoder_model.h b/src/model/decoder_model.h index d381ae4..8b38ddb 100644 --- a/src/model/decoder_model.h +++ b/src/model/decoder_model.h @@ -29,14 +29,31 @@ namespace mx = mlx::core; // true if it ran the overload successfully. bool rope_array_offset_overload_available(); +// Precomputed RoPE state: the per-dimension frequency schedule (head_dim/2 +// float32 values, fed to fast::rope via `freqs` with base disabled) plus the +// YaRN attention scale (1.0 for every other scheme). +struct RopeSetup { + mx::array freqs; + float mscale = 1.0f; +}; + +// Compute the RoPE frequency schedule + mscale for a config: GGUF baked factors, +// llama3 rescaling, yarn, linear, or the plain base**(2i/d) schedule. Validates +// cfg.rope_scaling and throws on unsupported types (see validate_rope_scaling). +// Exposed for the fixture-gated unit tests. +RopeSetup compute_rope_setup(const ModelConfig& cfg); + class DecoderModel { public: virtual ~DecoderModel() = default; const ModelConfig& config() const { return cfg_; } const Weights& weights() const { return w_; } - // Precomputed RoPE frequencies (llama3 rescaling), head_dim/2 float32 values. - const mx::array& rope_freqs() const { return rope_freqs_; } + // Precomputed RoPE frequencies (llama3/yarn/linear rescaling), head_dim/2 + // float32 values. + const mx::array& rope_freqs() const { return rope_.freqs; } + // YaRN attention scale, multiplied into Q/K before fast::rope (1.0 unless yarn). + float rope_mscale() const { return rope_.mscale; } // Embedding lookup: tokens (B, L) int32 -> (B, L, hidden) fp16. mx::array embed(const mx::array& tokens) const; @@ -121,6 +138,10 @@ class DecoderModel { // to route per layer. Same residual-stream shape (B, L, hidden) as the input. virtual mx::array feed_forward(const mx::array& x, int layer) const; + // YaRN pre-scales the RoPE input by rope_.mscale (see apply_rope); a no-op + // returning x unchanged for every other scheme (mscale == 1). + mx::array mscale_input(const mx::array& x) const; + // input RMSNorm -> Q/K/V projections -> reshape to heads (norm_qk_head on // Q/K), WITHOUT RoPE. QKV project_qkv(const mx::array& x, int layer) const; @@ -137,7 +158,7 @@ class DecoderModel { ModelConfig cfg_; Weights w_; - mx::array rope_freqs_; + RopeSetup rope_; bool skinny_mm_ = false; // see set_skinny_mm() }; diff --git a/src/runtime/engine.cpp b/src/runtime/engine.cpp index 32f3e39..75553c4 100644 --- a/src/runtime/engine.cpp +++ b/src/runtime/engine.cpp @@ -113,7 +113,7 @@ int validate_prefill_chunk(const EngineConfig& ec) { // For GGUF, this loads only the config/tokenizer fields from the GGUF header (not tensors). // For non-GGUF (MLX-style), loads config.json and tokenizer.json from disk. // This must be called on the main thread (MLX arrays are thread-locked to creating thread). -Engine::Loaded Engine::load_head(const std::string& spec) { +Engine::Loaded Engine::load_head(const std::string& spec, const std::string& rope_scaling) { Loaded out; // Resolve the physical directory for this model spec (could be local path or HF repo). @@ -144,6 +144,16 @@ Engine::Loaded Engine::load_head(const std::string& spec) { ); } + // RoPE-scaling override + validation, on the caller thread. The worker thread + // re-applies the same override when it rebuilds the config (make_factory) but + // cannot throw cleanly, so every rejection must happen here. + if (!rope_scaling.empty()) { + if (out.is_gguf) + throw std::runtime_error("rope_scaling override is not supported for GGUF models"); + apply_rope_scaling_override(out.config, rope_scaling); + } + validate_rope_scaling(out.config); + // Sniff embedding defaults from the on-disk sentence-transformers sidecar (no // such files inside a GGUF, so this is a no-op there). detect_embedding_defaults(out.dir, out.embed_pooling_default, out.embed_add_eos_default); @@ -155,8 +165,10 @@ Engine::Loaded Engine::load_head(const std::string& spec) { // MLX arrays must be created on the thread that will use them (the worker's). // - For GGUF: loads the weights from the GGUF file, then builds model. // - For non-GGUF: loads model config and weights, then builds model. -Worker::ModelFactory Engine::make_factory(std::string dir, bool is_gguf) { - return [dir = std::move(dir), is_gguf]() -> std::unique_ptr { +Worker::ModelFactory Engine::make_factory(std::string dir, bool is_gguf, + std::string rope_scaling) { + return [dir = std::move(dir), is_gguf, + rope_scaling = std::move(rope_scaling)]() -> std::unique_ptr { if (is_gguf) { // Parse config and load all weights from GGUF in one shot. GgufModel g = load_gguf_model(dir); @@ -164,6 +176,11 @@ Worker::ModelFactory Engine::make_factory(std::string dir, bool is_gguf) { } // Load config and weight tensors for legacy (non-GGUF) model format. ModelConfig wcfg = ModelConfig::from_file(dir + "/config.json"); + // Re-apply the rope-scaling override on the worker's copy of the config. + // load_head already applied + validated the identical config/override on the + // caller thread, so this cannot newly throw (a throw here would terminate — + // the worker run loop has no catch around the factory). + if (!rope_scaling.empty()) apply_rope_scaling_override(wcfg, rope_scaling); auto weights = load_weights(dir, wcfg); return create_model(std::move(wcfg), std::move(weights)); }; @@ -171,7 +188,7 @@ Worker::ModelFactory Engine::make_factory(std::string dir, bool is_gguf) { // Engine constructor: minimal form — loads config/tokenizer head from the given model spec. Engine::Engine(EngineConfig cfg) - : Engine(cfg, load_head(cfg.model_spec)) {} + : Engine(cfg, load_head(cfg.model_spec, cfg.rope_scaling)) {} // Engine constructor: explicit Loaded head (allows passing in preloaded config/tokenizer). // Sets up model name, config, tokenizer, and spawns worker thread for weights/model load. @@ -184,7 +201,8 @@ Engine::Engine(EngineConfig cfg, Loaded loaded) // Pass the tokenizer so the worker can build per-token byte strings for // constrained decoding. tok_ is initialized above and outlives worker_. // cfg_ is initialized above, so the KV-quant validation sees the model. - worker_(make_factory(std::move(loaded.dir), loaded.is_gguf), &scheduler_, &tok_, + worker_(make_factory(std::move(loaded.dir), loaded.is_gguf, cfg.rope_scaling), &scheduler_, + &tok_, validate_kv_quant(cfg, cfg_), validate_prefix_cache(cfg, cfg_, model_name_), validate_prefill_chunk(cfg), cfg.skinny_mm) { // Configure the max waiting requests for the batch scheduler. diff --git a/src/runtime/engine.h b/src/runtime/engine.h index 685d8fb..018e11b 100644 --- a/src/runtime/engine.h +++ b/src/runtime/engine.h @@ -57,6 +57,13 @@ struct EngineConfig { // On by default; logits may differ from the stock kernel at fp16-noise scale // (fp32 accumulation in a different order), token-equality gated in tests. bool skinny_mm = true; + // RoPE-scaling override (vLLM --rope-scaling style): a JSON object replacing + // the checkpoint's rope_scaling config, e.g. + // {"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768} + // Empty = use the checkpoint's config as-is. Like kv_bits, unsupported setups + // (unknown rope_type, hybrid/vision models, GGUF) FAIL engine creation — + // never a silent fall-back to unscaled RoPE. + std::string rope_scaling; }; // Per-call embedding options. The two int fields are tri-state: -1 means "use @@ -123,10 +130,13 @@ class Engine { bool embed_add_eos_default = false; }; - // Resolve model spec path, parse config/tokenizer, etc. - static Loaded load_head(const std::string& spec); + // Resolve model spec path, parse config/tokenizer, etc. Applies the optional + // rope-scaling override and validates it — this is the caller-thread rejection + // point for unsupported rope configs (the worker thread cannot throw cleanly). + static Loaded load_head(const std::string& spec, const std::string& rope_scaling); // Factory builder: creates a Worker::ModelFactory, handling weight loading with proper backend - static Worker::ModelFactory make_factory(std::string dir, bool is_gguf); + static Worker::ModelFactory make_factory(std::string dir, bool is_gguf, + std::string rope_scaling); // Private delegating ctor, used internally after head-loading step is complete. Engine(EngineConfig cfg, Loaded loaded); diff --git a/src/server/config.cpp b/src/server/config.cpp index 9140ba3..30cd671 100644 --- a/src/server/config.cpp +++ b/src/server/config.cpp @@ -59,7 +59,7 @@ ServerConfig ServerConfig::from_file(const std::string& path) { static const std::set kKnownKeys = { "model", "host", "port", "max_ctx", "max_waiting", "kv_budget", "kv_bits", "prefix_cache", "kv_block", "kv_pool", "kv_spill_dir", "kv_spill_bytes", - "prefill_chunk", "skinny_mm"}; + "prefill_chunk", "skinny_mm", "rope_scaling"}; for (const auto& [key, _] : j.items()) { if (kKnownKeys.find(key) == kKnownKeys.end()) { throw std::runtime_error("config file: unknown key '" + key + "' in '" + path + "'"); @@ -115,6 +115,15 @@ ServerConfig ServerConfig::from_file(const std::string& path) { throw std::runtime_error("config file: 'prefill_chunk' must be >= 0 (0 = monolithic)"); } if (j.contains("skinny_mm")) c.skinny_mm = require_type(j, "skinny_mm"); + if (j.contains("rope_scaling")) { + // Accept either an inline JSON object (the natural config-file spelling) or + // a pre-serialized string; the engine parses + validates the contents. + const nlohmann::json& rs = j.at("rope_scaling"); + if (rs.is_object()) + c.rope_scaling = rs.dump(); + else + c.rope_scaling = require_type(j, "rope_scaling"); + } return c; } @@ -167,6 +176,7 @@ ServerConfig ServerConfig::parse(const std::vector& args) { env_long("MLXFORGE_KV_SPILL_BYTES", static_cast(c.kv_spill_bytes))); c.prefill_chunk = static_cast(env_long("MLXFORGE_PREFILL_CHUNK", c.prefill_chunk)); c.skinny_mm = env_long("MLXFORGE_SKINNY_MM", c.skinny_mm ? 1 : 0) != 0; + c.rope_scaling = env_or("MLXFORGE_ROPE_SCALING", c.rope_scaling); // Helper: extract value for a flag (accepts "--flag value" or "--flag=value") auto value_of = [&](const std::string& a, size_t& i) -> std::string { @@ -213,6 +223,8 @@ ServerConfig ServerConfig::parse(const std::vector& args) { c.prefill_chunk = std::stoi(value_of(a, i)); else if (flag == "--skinny-mm") c.skinny_mm = std::stoi(value_of(a, i)) != 0; + else if (flag == "--rope-scaling") + c.rope_scaling = value_of(a, i); else throw std::runtime_error("unknown flag: " + flag); } diff --git a/src/server/config.h b/src/server/config.h index face2d4..ccab3d3 100644 --- a/src/server/config.h +++ b/src/server/config.h @@ -51,6 +51,10 @@ struct ServerConfig { // Multi-row GEMV decode kernels for small batched-decode matmuls (default on). bool skinny_mm = true; + // RoPE-scaling JSON override (vLLM --rope-scaling style), passed through to + // the engine. Empty = use the checkpoint's rope_scaling config. + std::string rope_scaling; + // Parses command line arguments (the model via -m/--model, plus optional flags as --flag value or --flag=value), // layering configuration sources by precedence (lowest to highest): // struct defaults < config file (-c/--config) < environment variables < CLI flags. @@ -58,7 +62,7 @@ struct ServerConfig { // Env vars: MLXFORGE_HOST, MLXFORGE_PORT, MLXFORGE_MAX_CTX, MLXFORGE_MAX_WAITING, // MLXFORGE_KV_BUDGET, MLXFORGE_KV_BITS, MLXFORGE_PREFIX_CACHE, MLXFORGE_KV_BLOCK, // MLXFORGE_KV_POOL, MLXFORGE_KV_SPILL_DIR, MLXFORGE_KV_SPILL_BYTES, - // MLXFORGE_PREFILL_CHUNK, MLXFORGE_SKINNY_MM. + // MLXFORGE_PREFILL_CHUNK, MLXFORGE_SKINNY_MM, MLXFORGE_ROPE_SCALING. // Throws std::runtime_error if an unknown or malformed flag is encountered. static ServerConfig parse(const std::vector& args); @@ -66,7 +70,7 @@ struct ServerConfig { // with struct defaults filling any keys the file omits. Recognized keys // (snake_case): "model", "host", "port", "max_ctx", "max_waiting", "kv_budget", // "kv_bits", "prefix_cache", "kv_block", "kv_pool", "kv_spill_dir", - // "kv_spill_bytes", "prefill_chunk", "skinny_mm". + // "kv_spill_bytes", "prefill_chunk", "skinny_mm", "rope_scaling". // Validates before applying: rejects unknown keys, wrong types, and out-of-range // values. Throws std::runtime_error (with the file path / offending key) on any // failure to open, parse, or validate. diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 47843e2..4278430 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -40,6 +40,8 @@ add_executable(mlxforge_tests runtime/bucketing_test.cpp scheduler/validation_test.cpp model/qwen3_test.cpp + model/rope_scaling_test.cpp + model/qwen3_yarn_test.cpp model/qwen3_moe_test.cpp model/qwen3_5_test.cpp model/vit_test.cpp @@ -159,6 +161,7 @@ target_compile_definitions(mlxforge_tests PRIVATE MLXFORGE_TEST_FIXTURES_DIR="${CMAKE_CURRENT_SOURCE_DIR}/fixtures" MLXFORGE_REF_FIXTURES_DIR="${CMAKE_SOURCE_DIR}/reference/fixtures" MLXFORGE_REF_FIXTURES_DIR_QWEN3="${CMAKE_SOURCE_DIR}/reference/fixtures_qwen3" + MLXFORGE_REF_FIXTURES_DIR_QWEN3_YARN="${CMAKE_SOURCE_DIR}/reference/fixtures_qwen3_yarn" MLXFORGE_REF_FIXTURES_DIR_QWEN3_MOE="${CMAKE_SOURCE_DIR}/reference/fixtures_qwen3_moe" MLXFORGE_REF_FIXTURES_DIR_QWEN3_5="${CMAKE_SOURCE_DIR}/reference/fixtures_qwen3_5" MLXFORGE_REF_FIXTURES_DIR_QWEN3_VL="${CMAKE_SOURCE_DIR}/reference/fixtures_qwen3_vl" diff --git a/tests/capi/capi_test.cpp b/tests/capi/capi_test.cpp index c3e529b..959f1f9 100644 --- a/tests/capi/capi_test.cpp +++ b/tests/capi/capi_test.cpp @@ -425,3 +425,45 @@ TEST_CASE("C ABI v9 skinny_mm: kernel-on and stock-matmul engines agree") { CHECK(run_with(1) == stock); // explicit on CHECK(run_with(0) == stock); // the default (on) } + +TEST_CASE("C ABI v10 rope_scaling: yarn override loads; unknown types fail creation") { + if (!model_available()) { + MESSAGE("MLXFORGE_MODEL_DIR not present; skipping"); + return; + } + // An unsupported rope_type must fail creation with a clear *err on the caller + // thread — never a silent fall-back to unscaled RoPE. + char* err = nullptr; + mlxforge_engine_opts2 opts = {}; + opts.struct_size = sizeof(opts); + opts.rope_scaling = "{\"rope_type\":\"dynamic\",\"factor\":2.0}"; + mlxforge_engine* eng = mlxforge_engine_create2(model_dir().c_str(), &opts, &err); + CHECK(eng == nullptr); + REQUIRE(err != nullptr); + CHECK(std::string(err).find("unsupported rope_scaling") != std::string::npos); + mlxforge_string_free(err); + + // Malformed JSON is rejected the same way. + err = nullptr; + opts.rope_scaling = "{not json"; + eng = mlxforge_engine_create2(model_dir().c_str(), &opts, &err); + CHECK(eng == nullptr); + REQUIRE(err != nullptr); + CHECK(std::string(err).find("rope_scaling") != std::string::npos); + mlxforge_string_free(err); + + // A valid yarn override creates an engine that decodes coherently. Llama-3.2 + // ships llama3 scaling, so the override also exercises full replacement. + err = nullptr; + opts.rope_scaling = + "{\"rope_type\":\"yarn\",\"factor\":4.0,\"original_max_position_embeddings\":8192}"; + eng = mlxforge_engine_create2(model_dir().c_str(), &opts, &err); + REQUIRE_MESSAGE(eng != nullptr, (err ? err : "engine_create2 failed")); + mlxforge_sampling s = {}; + s.max_tokens = 4; + mlxforge_request* r = mlxforge_submit_text(eng, "Hello", &s, &err); + REQUIRE_MESSAGE(r != nullptr, (err ? err : "submit failed")); + CHECK(drain(r).size() > 0); + mlxforge_request_free(r); + mlxforge_engine_free(eng); +} diff --git a/tests/model/qwen3_yarn_test.cpp b/tests/model/qwen3_yarn_test.cpp new file mode 100644 index 0000000..cdf24d8 --- /dev/null +++ b/tests/model/qwen3_yarn_test.cpp @@ -0,0 +1,89 @@ +// Qwen3 + yarn golden-reference checks: the same Qwen3-0.6B weights with the +// yarn rope_scaling from the fixtures_qwen3_yarn manifest injected through the +// engine's override path (apply_rope_scaling_override), gated end to end against +// mlx-lm loaded with the identical model_config injection — the yarn-rescaled +// attention front-half (freqs + mscale-on-input), the full-forward argmax, and +// the greedy token stream. Self-skips unless both the Qwen3 model +// (MLXFORGE_MODEL_DIR_QWEN3) and the committed yarn fixtures are present. +#include + +#include +#include + +#include "mlx/ops.h" +#include "runtime/single_stream.h" +#include "support/model_fixture.h" +#include "support/reference.h" + +using namespace mlxforge::test; + +namespace { +bool yarn_fixtures_present() { + return std::ifstream(qwen3_yarn_ref_path("manifest.json")).good(); +} +bool yarn_ready() { return qwen3_model_available() && yarn_fixtures_present(); } +} // namespace + +TEST_CASE("Qwen3+yarn: rescaled attention front-half matches the reference") { + if (!yarn_ready()) { + MESSAGE("Qwen3 model / yarn fixtures not present; skipping golden-reference check"); + return; + } + mlxforge::Qwen3Model& model = shared_qwen3_yarn_model(); + + // The override took: yarn freqs schedule + attention mscale, both vs mlx-lm. + assert_close(model.rope_freqs(), load_qwen3_yarn_npy("rope_freqs.npy"), /*rtol=*/1e-5f, + /*atol=*/1e-3f); + mx::array ref_mscale = load_qwen3_yarn_npy("rope_mscale.npy"); + mx::eval(ref_mscale); + CHECK(model.rope_mscale() == doctest::Approx(ref_mscale.item()).epsilon(1e-6)); + + std::vector ids = load_qwen3_yarn_token_ids("prompt_0_ids.npy"); + mx::array tokens(ids.data(), {1, static_cast(ids.size())}, mx::int32); + mx::array emb = model.embed(tokens); + assert_close(emb, load_qwen3_yarn_npy("embeddings.npy")); + + // Post-(q_norm + mscale + yarn-RoPE) Q/K. If the mscale were dropped or the + // freqs unscaled, q/k diverge from the reference here. + mlxforge::DecoderModel::QKV qkv = model.attn_qkv(emb, /*layer=*/0); + assert_close(qkv.q, load_qwen3_yarn_npy("q_rope0.npy")); + assert_close(qkv.k, load_qwen3_yarn_npy("k_rope0.npy")); + assert_close(qkv.v, load_qwen3_yarn_npy("v0.npy")); +} + +TEST_CASE("Qwen3+yarn: full forward logits + first-token argmax match the reference") { + if (!yarn_ready()) { + MESSAGE("Qwen3 model / yarn fixtures not present; skipping golden-reference check"); + return; + } + mlxforge::Qwen3Model& model = shared_qwen3_yarn_model(); + std::vector ids = load_qwen3_yarn_token_ids("prompt_0_ids.npy"); + const int T = static_cast(ids.size()); + mx::array tokens(ids.data(), {1, T}, mx::int32); + + mx::array logits = model.forward(tokens); // (1, T, vocab) + const int vocab = logits.shape()[2]; + mx::array last = mx::reshape(mx::slice(logits, {0, T - 1, 0}, {1, T, vocab}), {1, vocab}); + // Same loosened bound as the plain Qwen3 gate (28 layers of fp16 drift, now + // also mscale^2-scaled); the exact argmax below is the real correctness gate. + assert_close(last, load_qwen3_yarn_npy("logits_last.npy"), /*rtol=*/3e-2f, /*atol=*/3e-2f); + + std::vector argmax = load_qwen3_yarn_token_ids("argmax.npy"); + mx::array got = mx::astype(mx::argmax(last, /*axis=*/-1), mx::int32); + mx::eval(got); + CHECK(got.data()[0] == argmax[0]); +} + +TEST_CASE("Qwen3+yarn: greedy stream matches mlx-lm token-for-token") { + if (!yarn_ready()) { + MESSAGE("Qwen3 model / yarn fixtures not present; skipping golden-reference check"); + return; + } + mlxforge::Qwen3Model& model = shared_qwen3_yarn_model(); + std::vector prompt = load_qwen3_yarn_token_ids("prompt_0_ids.npy"); + std::vector ref = load_qwen3_yarn_token_ids("greedy_tokens.npy"); + + mlxforge::GenerateResult r = mlxforge::greedy_generate( + model, prompt, /*max_tokens=*/static_cast(ref.size()), model.config().eos_token_ids); + assert_tokens_equal(r.tokens, ref); +} diff --git a/tests/model/rope_scaling_test.cpp b/tests/model/rope_scaling_test.cpp new file mode 100644 index 0000000..9b7998a --- /dev/null +++ b/tests/model/rope_scaling_test.cpp @@ -0,0 +1,221 @@ +// RoPE-scaling unit gates (no model download needed): the yarn/linear frequency +// schedules and the yarn mscale vs the mlx-lm fixtures (fixture-to-fixture — the +// committed q_pre0 tensor pushed through our freqs must reproduce the committed +// q_rope0), plus the validation/override behavior: unknown rope_type values and +// unsupported model shapes must throw, never silently fall back to unscaled RoPE. +#include + +#include +#include +#include +#include + +#include "core/config.h" +#include "mlx/fast.h" +#include "mlx/ops.h" +#include "model/decoder_model.h" +#include "support/reference.h" + +using namespace mlxforge::test; + +namespace { + +bool yarn_fixtures_present() { + return std::ifstream(qwen3_yarn_ref_path("manifest.json")).good(); +} + +// Minimal config in the Qwen3-0.6B rope shape (the only fields +// compute_rope_setup reads besides rope_scaling). +mlxforge::ModelConfig base_cfg() { + mlxforge::ModelConfig c; + c.head_dim = 128; + c.rope_theta = 1000000.0f; + c.max_position_embeddings = 40960; + return c; +} + +// The injected yarn recipe from dump_ref.py's qwen3_yarn spec. +mlxforge::RopeScaling yarn_scaling() { + mlxforge::RopeScaling rs; + rs.rope_type = "yarn"; + rs.factor = 4.0f; + rs.original_max_position_embeddings = 32768; + return rs; +} + +// Plain base**(2i/d) schedule, the unscaled reference for the no-op cases. +mx::array plain_freqs(const mlxforge::ModelConfig& c) { + mx::array idx = mx::arange(0, c.head_dim, 2, mx::float32); + mx::array freqs = mx::power(mx::array(c.rope_theta), + mx::divide(idx, mx::array(static_cast(c.head_dim)))); + mx::eval(freqs); + return freqs; +} + +mx::array rope_with_freqs(const mx::array& x, const mx::array& freqs) { + return mx::fast::rope(x, x.shape().back(), /*traditional=*/false, /*base=*/std::nullopt, + /*scale=*/1.0f, /*offset=*/0, freqs); +} + +} // namespace + +TEST_CASE("yarn freqs + mscale match mlx-lm's YarnRoPE") { + if (!yarn_fixtures_present()) { + MESSAGE("fixtures_qwen3_yarn not present; skipping"); + return; + } + mlxforge::ModelConfig c = base_cfg(); + c.rope_scaling = yarn_scaling(); + mlxforge::RopeSetup setup = mlxforge::compute_rope_setup(c); + + // Both sides compute the schedule in float32 from the same formula, so the + // tolerance is far tighter than the fp16 tensor gates. + assert_close(setup.freqs, load_qwen3_yarn_npy("rope_freqs.npy"), /*rtol=*/1e-5f, + /*atol=*/1e-3f); + + mx::array ref_mscale = load_qwen3_yarn_npy("rope_mscale.npy"); + mx::eval(ref_mscale); + CHECK(setup.mscale == doctest::Approx(ref_mscale.item()).epsilon(1e-6)); + // Qwen3 yarn defaults (mscale=1, mscale_all_dim=0) reduce to 0.1*ln(factor)+1. + CHECK(setup.mscale == doctest::Approx(0.1f * std::log(4.0f) + 1.0f).epsilon(1e-6)); +} + +TEST_CASE("yarn rope application reproduces the reference q_rope0/k_rope0") { + if (!yarn_fixtures_present()) { + MESSAGE("fixtures_qwen3_yarn not present; skipping"); + return; + } + mlxforge::ModelConfig c = base_cfg(); + c.rope_scaling = yarn_scaling(); + mlxforge::RopeSetup setup = mlxforge::compute_rope_setup(c); + + // Fixture-to-fixture: mscale * q_pre0 through fast::rope with our freqs must + // equal mlx-lm's attn.rope(q) (YarnRoPE scales its input by mscale). + mx::array q = load_qwen3_yarn_npy("q_pre0.npy"); + mx::array qs = mx::multiply(q, mx::array(setup.mscale, q.dtype())); + assert_close(rope_with_freqs(qs, setup.freqs), load_qwen3_yarn_npy("q_rope0.npy")); +} + +TEST_CASE("linear rope matches mlx-lm's nn.RoPE(scale=1/factor)") { + if (!yarn_fixtures_present()) { + MESSAGE("fixtures_qwen3_yarn not present; skipping"); + return; + } + mlxforge::ModelConfig c = base_cfg(); + mlxforge::RopeScaling rs; + rs.rope_type = "linear"; + rs.factor = 4.0f; // the factor dump_ref.py's linear oracle uses + c.rope_scaling = rs; + mlxforge::RopeSetup setup = mlxforge::compute_rope_setup(c); + CHECK(setup.mscale == 1.0f); + + mx::array q = load_qwen3_yarn_npy("q_pre0.npy"); + assert_close(rope_with_freqs(q, setup.freqs), load_qwen3_yarn_npy("q_rope0_linear.npy")); +} + +TEST_CASE("default / missing rope_scaling keep the plain schedule") { + mlxforge::ModelConfig c = base_cfg(); + mlxforge::RopeSetup none = mlxforge::compute_rope_setup(c); + CHECK(none.mscale == 1.0f); + assert_close(none.freqs, plain_freqs(c), /*rtol=*/1e-6f, /*atol=*/1e-3f); + + mlxforge::RopeScaling rs; + rs.rope_type = "default"; + c.rope_scaling = rs; + mlxforge::RopeSetup dflt = mlxforge::compute_rope_setup(c); + CHECK(dflt.mscale == 1.0f); + assert_close(dflt.freqs, plain_freqs(c), /*rtol=*/1e-6f, /*atol=*/1e-3f); +} + +TEST_CASE("unknown rope_type values are rejected, never silently unscaled") { + mlxforge::ModelConfig c = base_cfg(); + mlxforge::RopeScaling rs; + rs.factor = 2.0f; + rs.original_max_position_embeddings = 4096; + + for (const char* t : {"dynamic", "longrope", "su"}) { + rs.rope_type = t; + c.rope_scaling = rs; + CHECK_THROWS_WITH_AS(mlxforge::validate_rope_scaling(c), + ("unsupported rope_scaling rope_type '" + std::string(t) + + "' (supported: default, llama3, yarn, linear)") + .c_str(), + std::runtime_error); + // compute_rope_setup re-validates (defense for direct construction paths). + CHECK_THROWS_AS(mlxforge::compute_rope_setup(c), std::runtime_error); + } +} + +TEST_CASE("yarn/linear are rejected off the shared full-rotary text path") { + mlxforge::RopeScaling rs = yarn_scaling(); + + // Hybrid (Qwen3.5): own partial rope, never reads the shared freqs. + mlxforge::ModelConfig hybrid = base_cfg(); + hybrid.full_attention_interval = 4; + hybrid.rope_scaling = rs; + CHECK_THROWS_AS(mlxforge::validate_rope_scaling(hybrid), std::runtime_error); + + mlxforge::ModelConfig partial = base_cfg(); + partial.partial_rotary_factor = 0.5f; + partial.rope_scaling = rs; + CHECK_THROWS_AS(mlxforge::validate_rope_scaling(partial), std::runtime_error); + + // Vision / M-RoPE (Qwen3-VL): 3D positions, hand-rolled rotation. + mlxforge::ModelConfig vision = base_cfg(); + vision.vision = mlxforge::VisionConfig{}; + vision.rope_scaling = rs; + CHECK_THROWS_AS(mlxforge::validate_rope_scaling(vision), std::runtime_error); + + mlxforge::ModelConfig mrope = base_cfg(); + mrope.mrope_section = {24, 20, 20}; + mrope.rope_scaling = rs; + CHECK_THROWS_AS(mlxforge::validate_rope_scaling(mrope), std::runtime_error); + + // GGUF checkpoints bake llama3 factors into rope_freqs.weight — conflicting. + mlxforge::ModelConfig gguf = base_cfg(); + gguf.rope_freq_factors = std::vector(64, 1.0f); + gguf.rope_scaling = rs; + CHECK_THROWS_AS(mlxforge::validate_rope_scaling(gguf), std::runtime_error); + + // Required parameters. + mlxforge::ModelConfig no_orig = base_cfg(); + mlxforge::RopeScaling bad = rs; + bad.original_max_position_embeddings = 0; + no_orig.rope_scaling = bad; + CHECK_THROWS_AS(mlxforge::validate_rope_scaling(no_orig), std::runtime_error); + + mlxforge::ModelConfig bad_factor = base_cfg(); + bad = rs; + bad.factor = 0.0f; + bad_factor.rope_scaling = bad; + CHECK_THROWS_AS(mlxforge::validate_rope_scaling(bad_factor), std::runtime_error); +} + +TEST_CASE("apply_rope_scaling_override: replacement semantics and defaults") { + mlxforge::ModelConfig c = base_cfg(); + + // Malformed JSON / non-object values are clear errors. + CHECK_THROWS_AS(mlxforge::apply_rope_scaling_override(c, "{not json"), std::runtime_error); + CHECK_THROWS_AS(mlxforge::apply_rope_scaling_override(c, "42"), std::runtime_error); + + // A yarn override without the original window scales the checkpoint's + // shipped context (max_position_embeddings). + mlxforge::apply_rope_scaling_override(c, R"({"rope_type":"yarn","factor":4.0})"); + REQUIRE(c.rope_scaling.has_value()); + CHECK(c.rope_scaling->rope_type == "yarn"); + CHECK(c.rope_scaling->factor == 4.0f); + CHECK(c.rope_scaling->original_max_position_embeddings == 40960); + CHECK(c.rope_scaling->beta_fast == 32.0f); // mlx-lm YarnRoPE defaults + CHECK(c.rope_scaling->beta_slow == 1.0f); + mlxforge::validate_rope_scaling(c); // the resulting config is valid + + // Full replacement (vLLM semantics), and the legacy "type" key is accepted. + mlxforge::apply_rope_scaling_override(c, R"({"type":"linear","factor":2.0})"); + CHECK(c.rope_scaling->rope_type == "linear"); + CHECK(c.rope_scaling->factor == 2.0f); + + // An unknown type in an override survives parsing but fails validation — + // the engine calls validate right after. + mlxforge::apply_rope_scaling_override(c, R"({"rope_type":"dynamic","factor":2.0})"); + CHECK_THROWS_AS(mlxforge::validate_rope_scaling(c), std::runtime_error); +} diff --git a/tests/support/model_fixture.h b/tests/support/model_fixture.h index 4b9fd78..5763757 100644 --- a/tests/support/model_fixture.h +++ b/tests/support/model_fixture.h @@ -8,6 +8,8 @@ #include #include +#include + #include "core/config.h" #include "core/weights.h" #include "model/llama.h" @@ -53,6 +55,28 @@ inline Qwen3Model& shared_qwen3_model() { return model; } +// The Qwen3 weights again, with the yarn rope_scaling recorded in the +// fixtures_qwen3_yarn manifest injected through the engine's override path — +// the C++ mirror of dump_ref.py's model_config injection (no checkpoint on the +// Hub ships yarn, so both sides inject the identical object). +inline std::string qwen3_yarn_rope_json() { + std::ifstream f(std::string(MLXFORGE_REF_FIXTURES_DIR_QWEN3_YARN) + "/manifest.json"); + nlohmann::json m; + f >> m; + return m.at("model_config").at("rope_scaling").dump(); +} + +inline Qwen3Model& shared_qwen3_yarn_model() { + static Qwen3Model model = [] { + ModelConfig cfg = ModelConfig::from_file(qwen3_model_dir() + "/config.json"); + apply_rope_scaling_override(cfg, qwen3_yarn_rope_json()); + validate_rope_scaling(cfg); + Weights w = load_weights(qwen3_model_dir(), cfg); + return Qwen3Model(std::move(cfg), std::move(w)); + }(); + return model; +} + // Same, for the Qwen3 MoE model (sparse expert-routing integration tests). inline std::string qwen3_moe_model_dir() { return MLXFORGE_MODEL_DIR_QWEN3_MOE; } diff --git a/tests/support/reference.h b/tests/support/reference.h index 9c81f99..d225530 100644 --- a/tests/support/reference.h +++ b/tests/support/reference.h @@ -52,6 +52,18 @@ inline std::vector load_qwen3_token_ids(const std::string& name) { return load_token_ids_at(MLXFORGE_REF_FIXTURES_DIR_QWEN3, name); } +// Same accessors against the Qwen3 yarn fixture set (reference/fixtures_qwen3_yarn): +// the same Qwen3 weights with an injected yarn rope_scaling (see dump_ref.py). +inline std::string qwen3_yarn_ref_path(const std::string& name) { + return std::string(MLXFORGE_REF_FIXTURES_DIR_QWEN3_YARN) + "/" + name; +} +inline mx::array load_qwen3_yarn_npy(const std::string& name) { + return mx::load(qwen3_yarn_ref_path(name)); +} +inline std::vector load_qwen3_yarn_token_ids(const std::string& name) { + return load_token_ids_at(MLXFORGE_REF_FIXTURES_DIR_QWEN3_YARN, name); +} + // Same accessors against the Qwen3 MoE fixture set (reference/fixtures_qwen3_moe). inline std::string qwen3_moe_ref_path(const std::string& name) { return std::string(MLXFORGE_REF_FIXTURES_DIR_QWEN3_MOE) + "/" + name;

K_~Bt{DFz>4bJnSga0HFI$J9_WF2o+O+~@ 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