{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "cell-000",
   "metadata": {},
   "source": [
    "---\n",
    "title: Decoder-Only Transformer on WikiText-2\n",
    "category: Deep Learning\n",
    "tags:\n",
    "  - deep learning\n",
    "  - transformer\n",
    "  - self-attention\n",
    "  - language modeling\n",
    "  - wikitext\n",
    "  - pytorch\n",
    "date: 2026-07-31\n",
    "description: Build a small decoder-only Transformer for character-level language modeling on WikiText-2.\n",
    "notebook_page: false\n",
    "aliases:\n",
    "  - /deep-learning/decoder-only-transformer-on-wikitext-2\n",
    "sources:\n",
    "  - https://huggingface.co/datasets/Salesforce/wikitext\n",
    "  - https://docs.pytorch.org/tutorials/intermediate/transformer_building_blocks.html\n",
    "---\n",
    "\n",
    "## Goal\n",
    "\n",
    "Build a tiny decoder-only Transformer on [WikiText-2](https://huggingface.co/datasets/Salesforce/wikitext). We will use a cropped character-level corpus so the model still shows real attention behavior without turning the notebook into an hours-long training run.\n",
    "\n",
    "Causal self-attention computes\n",
    "\n",
    "$$\n",
    "\\\\text{Attn}(Q, K, V) = \\\\text{softmax}\\\\left(\\\\frac{QK^\\\\top}{\\\\sqrt{d_k}} + M\\\\right)V,\n",
    "$$\n",
    "\n",
    "where the mask \\(M\\) is \\(-\\\\infty\\) above the diagonal so that token \\(t\\) cannot read from the future.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cell-001",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-31T21:59:00.766409Z",
     "iopub.status.busy": "2026-07-31T21:59:00.766290Z",
     "iopub.status.idle": "2026-07-31T21:59:02.692930Z",
     "shell.execute_reply": "2026-07-31T21:59:02.692169Z"
    }
   },
   "outputs": [],
   "source": [
    "## %pip install -q datasets torch matplotlib einops\n",
    "\n",
    "import math\n",
    "import random\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "from datasets import load_dataset\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cell-002",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-31T21:59:02.694666Z",
     "iopub.status.busy": "2026-07-31T21:59:02.694437Z",
     "iopub.status.idle": "2026-07-31T21:59:04.580277Z",
     "shell.execute_reply": "2026-07-31T21:59:04.579730Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "chars=300,000 vocab=154\n"
     ]
    }
   ],
   "source": [
    "ds = load_dataset(\"Salesforce/wikitext\", \"wikitext-2-raw-v1\")\n",
    "text = \"\\n\".join(ds[\"train\"][\"text\"])[:300000]\n",
    "\n",
    "vocab = sorted(set(text))\n",
    "stoi = {ch: i for i, ch in enumerate(vocab)}\n",
    "itos = {i: ch for ch, i in stoi.items()}\n",
    "data = torch.tensor([stoi[ch] for ch in text], dtype=torch.long)\n",
    "\n",
    "split = int(0.9 * len(data))\n",
    "train_ids = data[:split]\n",
    "valid_ids = data[split:]\n",
    "\n",
    "print(f\"chars={len(data):,} vocab={len(vocab)}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cell-003",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-31T21:59:04.581822Z",
     "iopub.status.busy": "2026-07-31T21:59:04.581689Z",
     "iopub.status.idle": "2026-07-31T21:59:04.589329Z",
     "shell.execute_reply": "2026-07-31T21:59:04.588790Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_batch(data: torch.Tensor, batch_size: int, block_size: int, device: str):\n",
    "    starts = torch.randint(0, len(data) - block_size - 1, (batch_size,))\n",
    "    x = torch.stack([data[s : s + block_size] for s in starts]).to(device)\n",
    "    y = torch.stack([data[s + 1 : s + block_size + 1] for s in starts]).to(device)\n",
    "    return x, y\n",
    "\n",
    "\n",
    "class CausalSelfAttention(nn.Module):\n",
    "    def __init__(self, d_model: int, n_heads: int, block_size: int):\n",
    "        super().__init__()\n",
    "        assert d_model % n_heads == 0\n",
    "        self.n_heads = n_heads\n",
    "        self.head_dim = d_model // n_heads\n",
    "        self.qkv = nn.Linear(d_model, 3 * d_model)\n",
    "        self.proj = nn.Linear(d_model, d_model)\n",
    "        mask = torch.tril(torch.ones(block_size, block_size))\n",
    "        self.register_buffer(\"mask\", mask.view(1, 1, block_size, block_size))\n",
    "\n",
    "    def forward(self, x):\n",
    "        B, T, C = x.shape\n",
    "        qkv = self.qkv(x)\n",
    "        q, k, v = qkv.chunk(3, dim=-1)\n",
    "\n",
    "        q = q.view(B, T, self.n_heads, self.head_dim).transpose(1, 2)\n",
    "        k = k.view(B, T, self.n_heads, self.head_dim).transpose(1, 2)\n",
    "        v = v.view(B, T, self.n_heads, self.head_dim).transpose(1, 2)\n",
    "\n",
    "        scores = (q @ k.transpose(-2, -1)) / math.sqrt(self.head_dim)\n",
    "        scores = scores.masked_fill(self.mask[:, :, :T, :T] == 0, float(\"-inf\"))\n",
    "        attn = scores.softmax(dim=-1)\n",
    "        out = attn @ v\n",
    "        out = out.transpose(1, 2).contiguous().view(B, T, C)\n",
    "        return self.proj(out), attn\n",
    "\n",
    "\n",
    "class Block(nn.Module):\n",
    "    def __init__(self, d_model: int, n_heads: int, block_size: int, mlp_mult: int = 4):\n",
    "        super().__init__()\n",
    "        self.ln1 = nn.LayerNorm(d_model)\n",
    "        self.attn = CausalSelfAttention(d_model, n_heads, block_size)\n",
    "        self.ln2 = nn.LayerNorm(d_model)\n",
    "        self.mlp = nn.Sequential(\n",
    "            nn.Linear(d_model, mlp_mult * d_model),\n",
    "            nn.GELU(),\n",
    "            nn.Linear(mlp_mult * d_model, d_model),\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        attn_out, attn = self.attn(self.ln1(x))\n",
    "        x = x + attn_out\n",
    "        x = x + self.mlp(self.ln2(x))\n",
    "        return x, attn\n",
    "\n",
    "\n",
    "class TinyGPT(nn.Module):\n",
    "    def __init__(self, vocab_size: int, block_size: int, d_model: int = 128, n_heads: int = 4, n_layers: int = 3):\n",
    "        super().__init__()\n",
    "        self.block_size = block_size\n",
    "        self.token = nn.Embedding(vocab_size, d_model)\n",
    "        self.pos = nn.Embedding(block_size, d_model)\n",
    "        self.blocks = nn.ModuleList([Block(d_model, n_heads, block_size) for _ in range(n_layers)])\n",
    "        self.ln_f = nn.LayerNorm(d_model)\n",
    "        self.head = nn.Linear(d_model, vocab_size)\n",
    "\n",
    "    def forward(self, idx):\n",
    "        B, T = idx.shape\n",
    "        pos = torch.arange(T, device=idx.device)\n",
    "        x = self.token(idx) + self.pos(pos)[None, :, :]\n",
    "        attn_maps = []\n",
    "        for block in self.blocks:\n",
    "            x, attn = block(x)\n",
    "            attn_maps.append(attn)\n",
    "        logits = self.head(self.ln_f(x))\n",
    "        return logits, attn_maps\n",
    "\n",
    "    @torch.no_grad()\n",
    "    def generate(self, idx, max_new_tokens: int):\n",
    "        for _ in range(max_new_tokens):\n",
    "            idx_cond = idx[:, -self.block_size :]\n",
    "            logits, _ = self(idx_cond)\n",
    "            probs = logits[:, -1].softmax(dim=-1)\n",
    "            next_idx = torch.multinomial(probs, num_samples=1)\n",
    "            idx = torch.cat([idx, next_idx], dim=1)\n",
    "        return idx\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "cell-004",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-31T21:59:04.590589Z",
     "iopub.status.busy": "2026-07-31T21:59:04.590486Z",
     "iopub.status.idle": "2026-07-31T21:59:27.513642Z",
     "shell.execute_reply": "2026-07-31T21:59:27.512687Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step=0000 loss=5.2090\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step=0100 loss=2.8399\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step=0200 loss=2.6231\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step=0300 loss=2.5646\n"
     ]
    }
   ],
   "source": [
    "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
    "block_size = 96\n",
    "model = TinyGPT(len(vocab), block_size=block_size).to(device)\n",
    "optimizer = torch.optim.AdamW(model.parameters(), lr=2e-4, weight_decay=1e-2)\n",
    "\n",
    "losses = []\n",
    "for step in range(400):\n",
    "    xb, yb = get_batch(train_ids, batch_size=32, block_size=block_size, device=device)\n",
    "    logits, _ = model(xb)\n",
    "    loss = F.cross_entropy(logits.reshape(-1, logits.size(-1)), yb.reshape(-1))\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "    losses.append(float(loss))\n",
    "\n",
    "    if step % 100 == 0:\n",
    "        print(f\"step={step:04d} loss={float(loss):.4f}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "cell-005",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-31T21:59:27.515794Z",
     "iopub.status.busy": "2026-07-31T21:59:27.515506Z",
     "iopub.status.idle": "2026-07-31T21:59:27.606046Z",
     "shell.execute_reply": "2026-07-31T21:59:27.605470Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAGICAYAAABSsmjoAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAAeERJREFUeJzt3QV4U+f3B/BTo6XUsEKhxYq7u8vGhm1Dx9zd3X4TtrHBFCb8Z2xsjA0GGzIchg6Gu3uRUoO2FOr5P9+T3pDUaEpLkvb7eZ6Qktzc3NzcJCcn5z2vm8lkMgkRERERkQtyd/QGEBEREREVFoNZIiIiInJZDGaJiIiIyGUxmCUiIiIil8VgloiIiIhcFoNZIiIiInJZDGaJiIiIyGUxmCUiIiIil8VglqiUmzFjhixbtkxc1aJFi2T27NlS2p09e1b3w/fffy8bN2509Oa4vB07dsh3330n6enpDrn91XL0/RNdS26cAYzo6vz6669y8eJF/dvd3V38/PwkJCREmjdvLoGBgU6/e+vWrSstW7aUP/74Q1xR//79JSYmRjZt2nRV6zl48KCsXLmyQMuOHj1afH19xVksX75chgwZIh07dpSaNWvKjTfeKLfccouUZFu2bNHTPffcIx4eHkW+/g8++EBeeeUVSUxM1Nf0tb791XL0/RNdS57X9N6ISqBnn31WzwcOHKjnFy5c0MBo165d0q9fP/1Qadq0qYO3kq4kOjpa1q9fb3PZDz/8IKGhoXLdddfZXD506FCnCmbfeecdadWqlSxZskRKizlz5sjbb78tt99+e7EEsy1atJD77rtPvLy8HHJ7Iio4BrNERZTdxE961g4fPix33nmntG3bVhYvXizdu3fnvnZinTt31pO1H3/8UTPs2Z9bZ3PgwAG5/vrrHb0ZJcoNN9ygJ0fdnogKjsEsUTEJDw+Xv//+Wxo0aCD33nuv7Nu3Tzw9L7/kTCaT/kyKy8uUKSOdOnXSLGButm/fLnv27NGfCzt06CDBwcE216empsratWvl5MmTUr58eenatasEBQXlWE9CQoL8888/kpycrMtUr149z+2/0vZlZGTI5MmTpXXr1nraunWrZqPbtWsnDRs2zHffYL179+7V9bZv315/Gs+edUO2bcCAAXLixAl9bP7+/tK7d+8rZkTnz5+vP62OHDky1/2IetIRI0ZIQECAFKYude7cuRo4Yt+tWrVKjh49KoMGDdLt+/nnny3Lent7S61atXS/WT/v2deB0oZTp05Js2bNNJuXHfbzunXrdD9UrFhR2rRpI5UqVdLr9u/fL6tXr5bz58/LoUOHLEH3qFGjLD8t4znHMrGxsXp/eN6xbQV5TDjHPrv//vvl3LlzWs6ATCMy1T4+Pnp7XL5ixQrdTvwSkVdpTVxcnD6PWB7Pd5cuXWz2C54X477w/OG+kpKStKQjO2wjjiHjC4exHpRWVKhQId91WZeTuLm56X7Cvm/cuHGOmtMNGzbI3XffbVl/9vUuXbpUX3s9evSQqlWrFuntDXiceO3jucFyeE7wGsavA3itF8axY8d0W3DfeNzI6meHYwq/VOC4wXGML+XWx01BlyG6JlAzS0SFV6VKFVOXLl3yvP7555834aW2atUqy2WHDh0ytWnTxlShQgXTTTfdZLruuutM3t7eptdff93mtgcOHDC1bdvWFBgYaOrfv79pyJAhplq1apkmTJhgWWbdunWmsLAwU2hoqGn48OGmZs2amfz8/EzfffedzbqWLVum91e7dm3LctOmTTOFh4ebhg4darNsQbbv0qVL+rjeeOMN02233Wbq0aOHqWfPnqavv/46z30RGRlp6tq1q8nf3980ePBgU69evUyenp6mRx991JSenm5ZrkOHDrq+b7/9VrcD24v9XLNmTVNERITNOq+//npdxjBu3Djdrt27d+e4/27duunjz8zMNBWEh4eHacCAAZb/r169Wtf9008/6WO98cYbdT9u3LjRlJiYaLrvvvssp1tuuUW3Gc/X/v37c6zjl19+0f06cOBAU9++ffWyF154IcfzUKdOHd3mUaNG6bZgfR9//LFlXbivMmXKmBo0aGC575iYGL1+ypQppoCAAFPjxo11H9aoUcNUrVo1m2Mxv8f00ksv6XVr1qwxtWzZ0rKOevXq6XP5zz//mJo3b66XY7vweLHN2b3//vsmHx8fU7t27UwjR47UZbG91vvF+r5w/9h/TZs2zfV5+eGHH0ytWrXS5e+++27L4z5x4sQV17V27VrL8vfcc4++rrD/sG/T0tIs9zF27FhdB57X7NuIfYP7x+PGvi1btqxp4cKFNtt4tbdPSUnR1yW2DccJnhccJ1999ZWuY+fOnbnum/zuH4/voYce0tccXnt4DeK1iNfa2bNnLctNnTpV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eB1jG/C84JhCzTNKHTAQDce08YWwIMsQXUtuaGlwTe+RiOgaQUcDBE3ffvutzrpE5OrwRQTBN37OL8qyHCJXxswsEZVYaM2FrCZ+9idyJcgzWdfLAv6Pzhxo08ZAlugyfq0johIHmSvUBi5ZskQmTJhwxZ9kiZwxmO3Xr5907dpVS2RQ646BnSg/KOr6ciJXxzIDIipxUJOLWk0MUsFAKCJXhFZs6GiAOmcMJkVdKgZmWrcVIyIGs0RERETkwlgzS0REREQui8EsEREREbmsUjcADDMYoZAezaIL03SaiIiIiIp/ECR6q6MndPae1lLag1kEsmhQTURERETODZMPYbbK/JS6YBYZWWPnBAQEOHpziIiIiCgbTAyC5KMRt+Wn1AWzRmkBAlkGs0RERETOqyAloRwARkREREQui8EsEREREbksBrNERERE5LIYzBIRERGRy2IwS0REREQui8EsEREREbksBrNERERE5LIYzBIRERGRy2IwS0REREQui8FsMcvINMnx2CRJSE4r7rsiIiIiKnUYzBazUd+skx7jV8iqA9HFfVdEREREpQ6D2WJWo0I5PT8SnVTcd0VERERU6jCYLWZ1KhvB7IXivisiIiKiUofBbDELN4LZGGZmiYiIiIoag9liVqeyn6XMwGQyFffdEREREZUqDGaLWc2KvuLuJnIhJV2iElOK++6IiIiIShUGs8XM29NDwir46t+HWTdLREREVKQYzF4DdSqxowERERFRcWAwe43rZomIiIio6DCYvZbtuWLYnouIiIioKDGYvQYaVPHX850n49nRgIiIiKgIMZi9BpqFBoq3p7vEJqXKoShmZ4mIiIiKCoPZa9TRoG2t8vr3+iOx1+IuiYiIiEoFBrPXSMfaFfV8/ZG4a3WXRERERCUeg9lrpGO4EczGsm6WiIiIqIgwmL1GWoQGiY8X62aJiIiIihKD2WukjKe7pavBYfabJSIiIioSnuIgycnJctNNN+W4/LnnnpN+/frlebv09HT55ptvZNmyZeLj4yMjR46UwYMHiyvAtLbbT8ZLRNxFR28KERERUYngsGAWQemiRYvk008/lYYNG1oub9y4cb63u+uuu2TNmjXyxhtvyLlz52TEiBHy0UcfyeOPPy7OrmZFXz0/wWCWiIiIyLWDWUPHjh31VBBbtmyRX3/9VYPZLl266GWZmZny+uuvy/3336+ZWmdWowKDWSIiIqISVTM7ZswYufnmm+X555+XPXv25LvswoULpXLlytK5c2fLZUOHDpX4+HhZt26duEKZAbDMgIiIiKgEBLMoL0B97KhRoyQmJkZatWol8+bNy3P5Y8eOSWhoqLi5uVkuCwsLs1yXm5SUFElISLA5OToze/LcJcnINDlsO4iIiIhKCoeVGZQtW1bLBnAOGMjl4eEhTzzxhAwcODDX26SmplqWN5QpU0Zvh+tyM3bsWHn77bfFGYQElhUvDzdJzciUyIRkqR5k+1iIiIiIyEUyswhAswemAwYM0AwrBnblJigoSOLibGfQOn/+vGRkZEj58ubpYrN75ZVXtAzBOEVERIijeLi7SWj5rLrZWHY0ICIiInL5mllrCFRRQuDpmXvCuGXLlnLkyBGbUoGtW7fqeYsWLXK9jbe3twQEBNicHIl1s0REREQlIJhFW679+/db/n/69GkZP368XHfddeLvb55cICkpSfr37y9LlizR/w8ZMkR8fX3lk08+0f8jI4vbdOjQQRo0aCCuoEYFczaa7bmIiIiIXLhmtlKlSnLbbbfJxYsXtXxg+/bt0qdPH50QwZCWlqZBLwaIAUoJpk6dqrebOXOmZmhRMzt//nxxFbUr+en5jlPxjt4UIiIiIpfnZjKZHDasHnd98OBBiY6Oljp16khISEiOiRWWLl0qzZo1k+rVq1suR8YWg8dQQtCmTRutvy0oBMCBgYFaP+uIkoMj0Rek98crxdPdTTa93leCfMtc820gIiIicmb2xGsODWYdwdHBLPT/bJXsi0yUccOay4i25tZiRERERGR/vOZUA8BKixubmTPQ83eecfSmEBEREbk0BrMODGbXHIyRS6kZjtgEIiIiohKBwawDhFcuJ+V9vSQ90ySHoy84YhOIiIiISgQGsw6AXrr1qpjbjx2MSnTEJhARERGVCAxmHaR+FXOLrgNnmZklIiIiKiwGsw5SLzgrM3uWmVkiIiKiwmIw6yD1sjKzB6OYmSUiIiIqLAazDs7MYlpbdjQgIiIiKhwGsw5Sya+MdjTAlBXsaEBERERUOAxmHYQdDYiIiIiuHoNZB6obbK6bPRKd5MjNICIiInJZDGYdqHbFcnp+NIbBLBEREVFhMJh1oJoVffX8WCyDWSIiIqLCYDDrQLUrmTOzx2MuigkjwYiIiIjILgxmHSisgq+4uYkkpqRLbFKqIzeFiIiIyCUxmHUgHy8PqRZYVv8+zlIDIiIiIrsxmHWwWpXMdbNHYy46elOIiIiIXA6DWQermdXRgJlZIiIiIvsxmHUwtuciIiIiKjwGs07Snou9ZomIiIjsx2DWwRpXC9DzfZGJEn8pzdGbQ0RERORSGMw6WGh5XwmvXE4yMk2y9lCMozeHiIiIyKUwmHUCPRsE6/mK/VGO3hQiIiIil8Jg1gn0bFBZz1fsj+ZMYERERER2YDDrBNrXriBlvTwkKjFF9p5JdPTmEBEREbkMBrNOwNvTQ9rWKq9/b4s47+jNISIiInIZDGadrKvBnjPxjt4UIiIiIpfBYNZJNA7JCmZPJzh6U4iIiIhcBoNZJ9HEqt8s2nQRERER0ZUxmHUStSv5iY+Xu1xMzZDjsUmO3hwiIiIil8Bg1kl4uLtJg6rm7OxulhoQERERFQiDWScsNdhzhnWzRERERAXBYNaJNMoaBLY/kr1miYiIiAqCwawTqV2xnJ6zZpaIiIioYBjMOpGaFX31POLcJclkRwMiIiKiK2Iw60RCAn3E091NUtMz5WxisqM3h4iIiMjpMZh1Ip4e7lK9fFn9+0TsRUdvDhEREZHTYzDrZGpUMJcaHI9jMEtERER0JZ7iJJYvXy5RUVEyZMgQKVvWnJ3MLj09Xf74448cl3fo0EFq164tJSmYjWAwS0REROQawew///wjAwcOlEuXLklERISEhobmulxycrLceuut0rdvX6lYsaLl8pCQkBITzBqDwI6zzICIiIjI+YPZmJgYueeee+SNN96QV199tUC3GTNmjHTs2FFKIiMze4KZWSIiIiLnDmZNJpPcfffd8sADD0i7du0KfLstW7bI2bNnJTw8XJo0aSJubm5SUtSoYO41y2CWiIiIyMkHgH366acSHx8vL7/8sl23++abb2TSpEnSvXt3PZ0+fTrPZVNSUiQhIcHm5MxqZJUZxCWlSmJymqM3h4iIiMipOSyY3bx5s3zwwQfy888/i4eHR4Fu4+XlJcuWLZNt27bJggUL5NChQxoMI7Obl7Fjx0pgYKDlFBYWJs7Mz9tTqgR4698Hzl5w9OYQEREROTWHBbMPPfSQ9O7dW9avXy+//fabrFixQi+fM2eObN26NdfbeHt7620MFSpUkGeeeUYWL16sGdjcvPLKKxrwGicMMHN2jUMC9HzPGefOIhMRERGV2prZTp06SXR0tPz111/6f9TAwqJFi8TPz09atWpVoPUEBARoy67z589LlSpVcg2AcXIljUIC5J/90bKXwSwRERGRcwazEydOtPn/0qVLNTv75ZdfWlpzpaWlycyZMy19ZCMjI6Vq1ao2t5s1a5bUqFEj10DWVTWulpWZPc3MLBEREZFTt+bKT1JSkvaVnTx5sgazqJPF3+hJGxQUJPPnz5clS5ZomUJJgsws7ItMkIxMk3i4l5xuDUREREQlcjpbZFxHjhwpvr7m0fxQpkwZvcyYEAH9aD/77DMtKdi4caNmbA8cOCCDBg2SkqRWxXJS1stDktMy5VhskqM3h4iIiMhpuZnQ7LUUQWsudDXAYDDU2zqrm75cK9sizsvEW1vJoBbVHL05RERERE4ZrzlNZpZsNcmqm918/Bx3DREREVEeGMw6qZ4NgvV80e5IycwsVclzIiIiogJjMOukutWrpBMonIlPlq0R5x29OUREREROicGsk/Lx8pA+jczZ2QU7zzh6c4iIiIicEoNZJ3ZjsxA9X7Qn0tGbQkREROSUGMw6sc7hFfU8Iu6SxF9Kc/TmEBERETkdBrNOzN/HS6oF+ujfB88mOnpziIiIiJwOg1knV6+Kv54fOHvB0ZtCRERE5HQYzDq5+lX89PwAM7NEREREOTCYdZnMLMsMiIiIiLJjMOvk6rPMgIiIiChPDGadXL1gc5lBzIUUiUtKdfTmEBERETkVBrNOrpy3p4SWL6t/s9SAiIiIyBaDWRfKzh6KYkcDIiIioqsKZletWiXLly8Xk8lk702pkOpUNgezR2OSuA+JiIiIriaYPX78uFx33XUSHh4uY8aMkYiICHtXQXaqU7mcnh+JZmaWiIiI6KqC2TvuuEMD2AcffFB++eUXqVWrllx//fXy+++/S0pKir2rowKoXckczDIzS0RERFQENbMhISHy8ssvy/79+2XlypUSGhoq999/v1SrVk2efPJJ2bVrV2FWS3kIzyoziDh3SVLTM7mfiIiIiIpqAFiLFi2kU6dOUq9ePTl//rwsW7ZMmjdvLiNGjJCLFy9e7epJRIL9vaVcGQ/JyDTJiTjWzRIRERFdVTCLwV/IyN51111StWpVeffdd2XIkCFy7Ngx2b17t+zcuVOztt9//31hVk/ZuLm5SW1L3SyDWSIiIqJCB7PIvCIL269fP0lKSpKZM2fKkSNH5M0335SwsDBdpkmTJjJ69Gg5ceKEvaunPNSpZC41OMKOBkREREQWnmKnuLg4eeihh+Tuu++WypUr57kclsnIyLB39XSlQWDMzBIREREVPpgdPnx4gZYLCgqyd9WUj/CsiRP2nU3kfiIiIiK6mprZ5ORk+eyzz7TUoFGjRtK7d295//335cIF9kEtLq3CzF8Odp+Kl4up6cV2P0REREQlOphNTU2V7t27y9ixY6Vhw4ZabtCyZUuZNGmStGvXThITmTksDqHly0pIoI+kZ5pk24nzxXIfRERERCU+mJ09e7ZER0fL3r17ZeLEifLSSy/JJ598Ivv27RNvb2+ZMmVK8WxpKYeOBu1qVdC/NxyLc/TmEBEREblmMIsBYCgvqFDBHFgZfH19ZdCgQRIbG1uU20dW2tU27/ONDGaJiIiIChfMoqTgv//+03KD7L1n165dq5MoUPHokBXMbjl+XtIyOBMYERERkd3dDKpUqSKenp7StWtXueeee3QKW5QdTJ06VfvKlilTRhYuXKjL1q5dWxo0aMC9XETqVvaTIF8vOX8xTXadipdWNcpz3xIREVGpZncwO2vWLNm+fbv+vWXLlhzXo9TA8Nxzz8mHH354tdtIWdzd3aRtzQqydO9ZLTVgMEtERESlnd1lBs8++6ykp6cX6MRAtvhKDTYcPVcMayciIiJyLYXqM0vOMQgsM9PEp4KIiIhKNbvLDAzHjh2TxYsXy8mTJyUkJER69eqlfWepeDWpFiBlvTwk/lKaHIy6IA2q+nOXExERUalVqMws+spiYNdrr70mc+fOlTFjxkjTpk3l1VdfLfotJBteHu7SuqZ5NjD2myUiIqLSzu5gFpMlIGidPHmyREVFydatW+X06dMa1E6YMEFWrVpVPFtKFm1qmksNdkRwJjAiIiIq3ewOZleuXCk333yzjB49WmelMtxwww3ywAMPyPLly4t6GymbusF+en4sNon7hoiIiEo1u4NZBLAZGRm5XocOBu7uHFNW3GpXLKfnR2MYzBIREVHpZnfk2adPH5kzZ4589913Grwas39Nnz5dL7vuuuuKYzvJSq1KvnoecyFVEpLTuG+IiIio1LI7mK1bt6588cUX8swzz0hAQIDO8uXv7y933nmnvPXWW9KxY8fi2VKy8Pfxkkp+3vr3MWZniYiIqBQrVE3A/fffL4cPH9ZBYI8//rh88803cvDgQXnppZcKtRFxcXFSr1498fPz08Fk+YmMjNR6XUyrW7NmTXnxxRclNTVVSpvaWdlZlhoQERFRaWZ3n9mff/5ZYmJiNDM7cuTIItmI++67TzO8hw4dkszMzDyXw3UDBgyQwMBAHYh27tw5GTFihCQmJsrXX38tpUntSuVk47FzDGaJiIioVLM7M5uSkqLtuYrKxIkTNSh9/vnnr7gsJmnYsmWLfPvttzpBQ6dOneS9997TWt3Y2FgpTWpVMg8C23A0TmZvOyVpGXl/CSAiIiIqqewOZvv16yf//POPnD179qrvfPv27fL+++/LlClTCtQFYc2aNVpaEB4ebrM9GIi2fv16KU3qZAWz/x6Olad+2yZzt+dfnkFERERUEtldZoDaWC8vL6lfv7707dtXKleubHM9gsuhQ4decT1JSUlapvDZZ59JjRo15MCBA1e8Deppg4ODbS7D/aNd2JkzZ/LMJONkSEhIkJKUmTXsOBkvt7QOddj2EBEREblEMHvp0iVp3LixngD1s9mD1IJ48sknpX379nbX3WbP4BoTN6A9WG7Gjh0rb7/9tpQ04ZX9pEVYkGzPmgXsCLsaEBERUSlkdzDbtm1badGihWZTs0N2NC2tYH1Ply1bpqUKs2bN0v8bEzE0aNBAOyR8+OGHOW6DrCwGfllDrSwC2ewZW8Mrr7wizz77rE1mNiwsTFydl4e7/PVoZ9l0/JwMn7RODkddcPQmERERETl/zezUqVNlwoQJdl+X3Z49eyQ6OlpbbeE0Y8YMvXzr1q0yZsyYXG+DAV9Hjx6VkydPWi5D/S6ytcjy5sbb21v74VqfSgpkpetWNk9te+r8JbmYap7EgoiIiKi0KNK5Z+Pj43UChYLw9fXVvrLGycfHx3J5mTJlLOvDdQiS4YYbbtB+tChRQAcEBLaYqAHtuUJCQqQ0Kl+ujFQoZ95fR6I5vS0RERGVLgUuM1i4cKH89ttvsnv3bq2bza1WdtGiRTqtbVFB+QDWa5QuIMj9+++/5YEHHtCyAg8PDxk+fLh89dVXUpohO7shKU4OR1+QptUDHb05RERERM4XzGLCArTAwrnxd/auAuj/2r9//0JtSK9evXTyg3LlLo/SDwoK0suMrK0xnS5KC3D/CGaNAWClWXhwOdlwLE4OsW6WiIiISpkCB7M33nijnhBIIsAcPHhwkW4IAlOUFGSX22Xg6Wn32LUSC50NAJlZIiIiotLEszAZVHIu4cHmYPbgWQazREREVLoUKr25Y8cO+fLLL3UAVmpqqs116Bv7yCOPFNX2UQE0qGIedHc0JklS0jPE29OD+42IiIhKBbuD2RMnTkiXLl2kY8eO0rp1a50NzFrt2rWLcvuoAEICfcTfx1MSk9O1o0GjkJLTfoyIiIioSIPZpUuXSufOnbVzATkHDIJDdhYTKBw4m8hgloiIiEoNu/vMorNArVq1imdrqNAaVDWXGuyLTOReJCIiolLD7mC2e/fusmrVKomLiyueLaKrCmYPMJglIiKiUsTuMoN9+/bpz9qNGjWSvn375pjxq1+/fjJ06NCi3EYqgPpZg8CYmSUiIqLSxO5gFrN/NW7cWP9OSUnRkzXM2EWO62hw6vwlSUxOE38f24F5RERERCWR3cHsoEGD9ETOpXy5MlIlwFvOJqTIntMJ0qFORUdvEhEREZHz1cyS82pf2xzArjkU4+hNISIiInLeYPbkyZNy++23S506deSNN97Qy3bu3Cnjx48v6u0jO/SoX1nPVx6I5n4jIiKiUsHuYDY5OVl69+4tGRkZ0q5dO62hhSZNmsgvv/wi+/fvL47tpALoXq+Snu84GS8xF2xrmYmIiIhKIruD2SVLlkiVKlVk2rRp0r59+8srcneXnj17yuzZs4t6G6mAggN8pHHW7F+rDzI7S0RERCWf3cHs8ePHpXnz5vo3WnRZ8/Pzk/j4+KLbOrJbjwbmUoPZ205z7xEREVGJZ3cwW6NGDdm6dWuOYDYtLU3mzZsnDRs2LNotJLuMaBsmHu5usmJ/tGw8xoktiIiIqGSzO5jt37+/zv718MMPy6FDhyQ6Olr+/PNP6dOnj5w7d44TJjhY7UrlNKCFcQv3iclkcvQmERERETlPMFumTBmtm42IiJBJkybJlClT5JZbbpHMzExZunSp+Pr6Fs+WUoE91aeeeHu6y8Zj5zRDS0RERFRSFao1V1hYmPz999+aicX0tsjOrlmzRurXr1/0W0h2qxroI3d3rqV/f7hwn2RmMjtLREREJdNVTZoQEBAgDRo0kEqVzC2hyHk80jNc/H08ZV9koizaHenozSEiIiIqFpwBrIQK8i0jQ1uH6t+bj59z9OYQERERFQsGsyVYeLCfnh+LvejoTSEiIiIqFgxmS7BaFc2D8Y7FJjl6U4iIiIicJ5hFSy5MngCY1vajjz6S+++/X9auXVvU20dXoVbFcnp+IvaiZHAQGBEREZVAdgezCQkJctNNN2mLLkB7rg8//FA7GvTr109OnTpVHNtJhVAtqKx4ebhJakamnIm/xH1IREREJY7dwSx6zDZt2lRCQkL0/7/++qt88cUXMnv2bBkxYoTMmjWrOLaTCgEzgYVVMJcaHGfdLBEREZVAdgezUVFREhQUpH9fuHBBtmzZorOCQXh4uMTExBT9VtJVlxqwbpaIiIhKIruD2SZNmsi8efNk+/bt8vHHH0ubNm0kMDBQr9uzZ480bty4OLaTrjaYjeEgMCIiIip5PO29Qffu3aVnz57SsmVLnTRhzpw5evmJEydk69at8uOPPxbHdlIh1apkdDRgey4iIiIqeQrVzeCXX36R8+fP66CvHj166GX+/v6yfPly8fb2LuptpKtQMyszu/NkvMRfTOO+JCIiohKl0K25EMyio4HRmuuFF16Qo0ePFv0W0lVpXSNIKvl5S2RCstw1eYMkpaRzjxIREVGJwdZcJZy/j5f8cn97CfL1km0R5+XlWTvFZDI5erOIiIiIigRbc5UCDasGyHd3thVPdzeZu/20TP3vhKM3iYiIiKhIsDVXKdG2VgV54foG+vcv682ztxERERG5OrbmKkWGtQnV832RiRJzIcXRm0NERER01diaqxSp6OctDav6azC77nCsDGpRzdGbRERERHRV2JqrlOlSt5Ke/3uYM7URERFRKQ1mAbN+oTWXoXz58lKtGjN9zq5L3Yp6/u/hWEdvChEREZFjgtn09HT5+uuv5cYbb5TmzZvL9ddfL+PHj5fk5OSr3yIqVu1rV9SuBsdjL8rWE+e4t4mIiMiluZnsbDqKxa+77jrZuHGjDBs2TMLCwiQyMlJmzpwpoaGhsn79epuMbX4Q/OJ2O3fulKCgIEtwnJfU1FR59tlnc1x+xx13SIcOHQp0nwkJCZpVjo+P1+l4S6Pnpm+XmVtOStua5WXGw53Ezc3N0ZtEREREVKh4ze7M7NKlS2XPnj2yd+9e+e677+TNN9/ULO3Bgwfl0qVL8vvvvxdoPSdOnJBWrVrp+ipWrKizh7Vv314+//zzfIPZL7/8Unx8fKRhw4aWEx4sFRxadPl4ucum4+dk0e5I7joiIiIqPd0MEMQigxoSEmJzOQJKZGr37dtXoPX4+/vL6tWrpVIl84AkCA4Olg8//FCeeuqpfG+L++nYsaO9m05Zqgb6yH1da8uX/xyWn9cfl/5NbZ9LIiIiIldhd2a2cuXKWhaQW3XCtm3b9PqCwIAx60AWkEpGlvZKJk+eLC+88IJMmjRJYmI4Kr8wRrWrYRkIdur8pUKtg4iIiMjlgtkBAwbIsWPHZMiQITJ//nzZvn27LF68WEaPHi0rV66U4cOH27W+L774Qh599FHp27evbNmyRaZNm5bv8hUqVBAvLy+tsZ06dao0aNBANmzYkOfyKSkpWndhfSKRsAq+0rFOBcF3kj+3nOQuISIiotIRzKIId8WKFTp4a+DAgdKyZUvtZnD8+HFZvny5VK9e3a71YQBZvXr1pGbNmlqisHnz5jyXRa3s7t27NQB+7bXXtEyha9eu8sADD+R5m7Fjx2oJhHHC/ZHZ0NbmGcFmbT3FXUJERESlo5sBMpsZGRlaJoCA9tSpU1o/6+vre9Ub89VXX8lzzz0np0+f1vUXxPTp02XkyJG6XajDzS0zi5P19iOgLc3dDAyJyWnS4u3FkmkSWf9KH62lJSIiIirR3Qy+//57ee+99yyZ0vDw8CIJZKFdu3YaIKPTQUEZgSp63+bG29tbd4L1icz8fbykcTXz/thwLI67hYiIiFyO3cEsZvmKiIi46jtGnev58+dzZFkRbKLsANDq6/HHH5f//vtP/4/etnFxl4OuixcvaqsuBMEFzeSSrXa1Kuj5JgazREREVBqC2UGDBmmf2d9++03LDQrr3Llz0rlzZxk8eLDce++90rp1a5kyZYr8/PPPlkwvsq4IVtEODJBq7tKli97mzjvv1B6zCGh/+umnQm9HaWcEsxuOMjNLREREpaBmFhMkvPjii3LhwgXtKoDuAtbQmeB///tfgdaFdWAQF2YQw+xhGMxVtmxZm0kSvvnmG+10gMDVuM2qVaskOjpa6tSpowGxh4dHgbefM4DZik5MkXbvLRVMArbtf9dJYFmvAu9LIiIiouJgT7xmdzCLLGl+HQcaN26sWVZnxWA2p14frZCjMUlyb5fa8uqNDcXTw+6EPREREZFrBLOujsFsTj+sOSrvzNujf7evVUEm3NqKnQ2IiIioZHYzALTjQmmAtdjYWO01S67n3q61ZeKtrcTP21O7GgycuEbOJiQ7erOIiIiIrsi9MJFy//79tZ7VZkXu7jqJQvYgl1zDoBbVZO4TXaVusJ/EXEiRsfPNg+6IiIiISlQwiylsmzVrJjVq1LC5HK2xMFDrjz/+KMrto2uodqVy8umIljoY7K9tp+W/I7Hc/0RERFSyglm01HJDtJMLXB4VFVUU20UO0iw0UEa1M0/5O2Udy0aIiIiohAWzHTp0kHnz5snhw4dtLkd5wbRp06R9+/ZFuX3kAMPahOr52sMxkoG5bomIiIiclKe9N0DbLUyc0KJFCxk+fLjUrFlTTp8+LTNmzJC2bdvKgAEDimdL6ZppERok/t6ecv5imuw+HS/NQ4NyLHP6/CUNdMMqFM1UxkRERESFUahuBpipa9y4cXLs2DH5/ffftffsq6++Kn///XeeJQjkOtBntlN4Rf179cGYHNenZWTK4C/WyI0TVsul1MLPAkdERER0zTOzRucCzPSFE5VM3epVksV7zsq0DSdk7aEYORx9QRpWDZAn+9QVb08Piblg7mZxIu6iNKjq7+jNJSIiolKqUMEslXzd6lXW85PnLukJziZEy7+HY+T2jjUty508x2CWiIiIHIfBLOWqVqVy8u5NTeVIdJI0DPGXmhV85YOF+2TrifPyy/rLXQ6MQJeIiIjIERjMUp6sM7Bwa7saGsymZZhsMrNERERELjUAjEqnHg3MpQfWrDOz6RmZMvW/43IilgEuERERXRsMZqnAqgT4SOOQgDyD2R/WHpXX/twlt32/Xi6kpHPPEhERUbFjMEt26dXQnJ2tFuij5xFZZQYp6Rny3eqj5sviLsk7c3dzzxIREVGxYzBLdnmgWx25rUMN+XRkS/0/JlZITE6Tv7aekqjEFAks6yVoNTx900k5FpPEvUtERETFisEs2SXIt4y8d3Mz6VCnogT5eullR2OS5It/Dunfj/eqK+1rVdC/Vx/KOeECERERUVFiMEuFFlq+rJ6PmbdHSwuqBHjL6A41pGvdSnr5vwxmiYiIqJgxmKVCCw3y1fONx87p+YvXN5Ry3p7SOSuYXXckVjIyTTJp5WFp+c5iORSVyL1NRERERYrBLBVav8ZVxMPdTf/uWKeC3Nyquv7dIjRQ/Lw9tZ52z+kE+WPzSf170e6z3NtERERUpDhpAhXa0DahMqB5iFxKzdD6WTeM/MJB5eGuwe3SvVGydO9ZORJ9QS8/cJaZWSIiIipazMzSVfHx8pDy5cpYAllDl6xSA0x9m5k1Ydj+yER5469dMmjiGom/lMY9T0RERFeNmVkqFkYwG5uUarnscPQFzc4iuF28O1KGtw3j3iciIqKrwswsFYt6wX5S2d/b5rK0DJMlS7t8XxT3PBEREV01BrNULFB20CW8Yp7XL9odKff/tEkenbpZziYk81kgIiKiQmEwS8VeagAYEGYNGVoMDpu/M1Ju+Hy1TrxgiIxPlrSMTD4zREREdEUMZqnYdK9fWXy83HVyhb6NquhlXh5uckPTqpZl6lQuJ3FJqfLbxhP6/9UHo6Xj2GXy6ZIDfGaIiIjoijgAjIpNlQAfmfdEVylbxlPiL6YJWtKiN+2z/epLQnKa3Ne1tpxLSpPnZmyXDUfj9DaLs3rRImv7Yv+GfHaIiIgoXwxmqVjVDfbX8+pBZWXVi72kYjlvKVvGQ6be31Evj4i7qOc7T8Zrv9rtJ8/r/w9FXZCklHSdUYyIiIgoLywzoGsmtLyvBrK2l5WVkEAfSc80yX9HY2XvmQRLTe2erL+JiIiI8sJglhze9aBdLfPgsJ/+PabtuwzI1hIRERHlh7/hksO1r11B5mw/Lf/sj7a5fOWBaJ1hzNPDTVLTM/Xvoa2r55htjIiIiEovBrPkcD0bVJYynu4asEKLsCDZHnFeg1mcrKE7wsDm1WwuQweEaRtOyPs3N5Mg3zLXdNuJiIjIsVhmQE5RSzvp9taW/9/VqablbwwcQ7Bbv4qf/n/Brkib26If7R3fb9B+tT+sPXYNt5qIiIicATOz5BR6N6wiMx7upBnZm1pWl52n4nVmsHdvaiYVypWRbbj8y7WyYl+UpKRniLenh00rL4i/mOrAR0BERESOwGCWnAYGghmDwd4c1MTmuubVA6VKgLecTUiRfw/HSq8GwXr55LVHLctEX0i5xltMREREjsYyA3IJ7u5ucl1j88xhC3eaSw3WH4mVTcfPWZY5de6Sw7aPiIiIHIPBLLmMAc1D9PyvbackKjFZxi7Yp/9vXSNIz0+dZzBLRERU2jg8mM3IyJBDhw5JTExMgW+TmZkpBw8elIiIiGLdNnIuHWpXkJZhQZKSnil3/7BR62t9y3jIuGHN9fqYC6k6ixgRERGVHg4LZpOSkuSll16SypUry4ABA6R27drSoUMH2bt3b763W7dundSpU0e6dOkijRo1ks6dO8vp06ev2XaT46C/7OO96urfxuxgj/WqK+GV/cQva9pbZmeJiIhKF4cFs2fOnJGaNWvKqVOnZP/+/RIVFSUVKlSQO+64I8/bXLhwQW6++WYZPHiwnD17VqKjozXAueuuu67ptpPj9GkUrK26qgX6yCcjWsijPcP1GEALL/ho0X555vdtciT6gvy24YQs2HmGTxcREVEJ5mYymS7PH+pgH3/8sbz//vsSGxub6/W//vqr3HnnnRrIVqxYUS/7+++/ZeDAgXLkyBHN7l5JQkKCBAYGSnx8vAQEBBT5Y6Dih0M2+yxg9/24UZbti8p1+b+f7CpNqgXmvHzHGXlr7m75fFRL6Rxeqdi2l4iIiOxjT7zm8NZchw8f1g09cOCAfP755/Laa6/luezmzZslPDzcEshCp06d9HzLli0FCmbJ9eU2nW318mWtrkfAe/m6cQv366xiIYE+cnOr6jot7sXUdHns1y16/cRlhxjMEhERuSiHB7Pjx4+X1atXy7Fjx6Rr164yatSoPJdFxtY6kIXy5cuLu7t7ngPIUlJS9GQd6VPJUy2rzADeHtxEalYsp3W0wyb9azMt7lcrDsmsR7rIjM2XBw8mpaY7ZJuJiIioBHQzmDRpkuzevVtLB/z8/KR3796Snp57cOHl5WUTmEJaWpp2N8B1uRk7dqymqY1TWFhYsTwOcqzyvpef/1tah0qP+pWlTc3yckurUL2sXrCfVPLzloi4S/L7xhPyzaojluWPRidp6QIRERG5HocHswYEsi+88IIOBsMpNwhEMXDMmtHJIK8g9ZVXXtEyBuPEdl4l08Dm1aRvoyry4dBmls4GMPaWZjLzkc6y4Klu8kRvcyeEL/85LOcvpkklvzJakpCYki6RCckO3HoiIiJyuWA2e4YVTpw4oefIoBo9aLdt2yZxcXH6f2RtEcziMsO8efOkbNmyltrZ7Ly9vbVw2PpEJU85b0/57q62MrJdDZvLy3i6a4bW08Nd+jWuopddSjP3oh3RNkzqVCqnfx84e8HmdkamFn1r0zMyc73P71YfkW9WHS6Wx0NEREROHsxOnDhRHnroIZkzZ478+++/8tVXX8kTTzyhrblCQ80/DScmJkqrVq10GUBN7Q033CC33XabdjH4+eefdcDYyy+/rJldoivV1TYPvdzV4JbW1aVBVX/9+0BkosQlperfj/yyWbqP/0dW7I/S80FfrNXgdsmes3Ii9qIuE38pTd79e6+8P3+fRMSZL7saGZkm+WTJAfn3UMEnDyEiIiIHDgB77rnnZNq0afLTTz9JZGSkBrATJkyQ4cOHW5bx8PCQFi1aaP9Zw4wZM+SDDz7QFl7Iuo4bN04efPBBBz0KcjXXN6kqO07GS4vQQKkb7C/1ghHMRsp78/fK2AV75cvRrWXBrkhd9u7JG/U8OjFF5u44I09O2yqNQgK0ZOG01dS564/ESlgF36vaLqxjwrKDsrCKnyx+psdVPkoiIqLSw9OR7ZVGjx6tp7z4+/vblBRAuXLlZMyYMXoistc9XWpJUkq6DG5ZTf9fv4o5MwuZJpFX/9yZ6+2m/Wcugdl7JkGOxSTZBLMbjsbJ8LZXN7DwRFZ29+S5S7n20b2SZXvPym8bI+SDW5pJRT/vq9oWIiIiV+I0A8CIrgXfMp7yYv+G0rCquXa6WfVAHQRmOHcxTc+HtKwmd3aqKXWDzeUr649enshj6d6zcjr+8oCx/46aa7qvhhEcX0zN0AFp9kJ3BpRBLN5z9qq3hYiIyJUwmKVSrUZFX/nh7nYy9/GuEux/OaN5T5fa8s6QpjKouTmDa925C0HjGavMLLKqZ+Iv/78wTlmtL9IqUC4ooxvDWXZlICKiUobBLJV6vRoES7PQQBnQPET3RYVyZaR5dfNAsQZVcw4s3HgsTssNrM3faa6zLawz5y8HsGfsDGZRlmAEsWcTcnYJISIiKskYzBJluaNjTZ3y9p7OtcTd3S1HTW1lf2+pX8VPa2tXHTR3HWhSzVyu8P78vbJgp20PZHuctsrsRtqZ5U24lC7Jaeb2YVHMzBIRUSnDYJYoS53KfrLulT7yRJ96ln2CaXG9Pc0vk8YhAdqz1milBf8b2FiGtQnV/7/y505JSTf3sLVHZqbpqjKz1hM+nE3k5A9ERFS6MJglyoeHu5vUq2IuNWhcLUBahZmDWUP18mXlw6HNNaOLWcUW7oqUeTtOy57TCfrT/6oD0XlOumCISUqRVKtl7K17tQlmWWZARESljMNacxG5ihuahsjeM4nao9a3jIflcnRBqBLgowEvsrMTlx+SF2bssAlM4fFedaVL3UqycNcZee76BhLg42Vz/WmrrGxhMrNnrZaPuZCiwTNmPCMiIioNGMwSXcGjPcPloe51NEBESYC/t6e2z0L3A6+soNEIZhHIIrj1cHOzBLVT1h2TaRtOSGxSqi7/+sDGubblQnCMrgn2djOwzszi9tEXUiQksCyfVyIiKhWYviG6AkxgYGQ6MTCseZi504F1wIja2j4NgwXjxj4a3ly2/K+fbH69r9Sq6CsJyekayMLP64/nGKRlBLMNsgabnTp3Sf7ZHyUJyeaet/YEs85UaoASi/lXMSiOiIioIBjMEtnJqJutHmSb/fzyttby78t95OZWoeLn7akzcd3btbZNN4SU9Ex5e+4em4FiRpmBMbgMWd97Jm+UN2fvznMbkCE2anGtywz0/07Q0QAD4h7+ZbM8/usWnQ6YiIiouDCYJbLTbR1ryOAW1eT+bpcDVfDx8pCqgT42l6H8oHN4RRnRNlQm3tpKSwn+3nlGRkxaZ5koYeep83reMMTc5suArGZiLtlZBLFDJ/0r3cf9o4Gi0cHA6LrgDO25YpNSdDYzNH04GJXo6M0hIqISjMEskZ1QXjDh1lbSqoZtZ4O8ps/99YGOMm5YC+lYp6LONhbk6yXbT8bLwAmr5feNJ2TjsXNantC3UbC0CAuy3BZZ3AW7Lk/GcCT6gvyx+aTM2nJKtp44r1Pqjp2/VyLjU2x63mYvMzh57qL8sOaoXEq1v21YYVlnY4/GJF2z+yUiotKHA8CIrvFsY5g699GpW2TnqXh5aeZOvbx3wyoaJE8c1UqOxFyQXafi5aPFB+SvradkRNswXea5Gds1iLU2a+spy9/NQ4Nky4nzOcoM3pqzR5buPSubjsfJV7e1ueI2pqZniqe7m2XiiMKIsgpmj0QzmCUiouLDzCzRNRZWwVemP9RJmoeaB5LBbR1q6HmNir7Ss0GwDGlZXf+/7kistttCuYF1IIspd4e2DrX8v4yHuzQK8c8xmxggkDWm3I2Iu5jvtqE/bpM3F8qHi/Zd1WNkZpaIiK4VBrNEDlC2jId8e2dbqV2pnJYWdK9fOUfA2ygkQFttrT0UoxlXw4BmIfLJiBYyblhz+Wh4C63ffWNQY2lSzRwc/3s4VracOKd/Z2/zNW7R/ny3a+HuSEnLMMnMzafEhDsvgmAW5RH2wgC3bRHnJTnt2pVGEBGRa2IwS+QgmHBh2bM95K9HO2tv2uy61auk56sPxsiGo7H6N7Kx6JqA7K0xWQPqd+/oWFOaVg+UW1pV1wD4lZnmqXW3n7wcBGPw2dztp7V0wYCANcpqCtwdWcsjG3w4qzzgQkp6joFom4+fky4fLJfpmyKuGMxGnLukpQv2mLP9tNz05Vr5ZMkBu25HRESlD4NZIke+AN3dtI9tbrrWNQezazSYjdO/29fOf9AZJmRACcL+s4kydv4+S3A6sm2YPNm7nv792p875UxWKQKCxfbvLZOZm09qYLvjZLxlXeuPxEr8pTTpOX6FtB6zRB75ZbOcv2jul/v1isPajeH1v3ZpfW/sBdtBZ9YBMtp0nbhCeUN22H7YctycYSYiIsoLg1kiJ9W+dgUp4+mukyKg44H5sor53gaB7PhhzfXvH/89Jl/+c1j/RinDk33qSYvQQElKzZC/tp6W/ZGJ8tUK8/XfrDoiJ89dkrisyR2MYPbfQzGapUXpATorIBOLwHXF/ihdBhnXgRPXSJt3l9pkaaOydVSwt6NBTFZm93AhShSIiKh0YTBL5KTQt7Z9rQqW/1cN8NEZxa6kT6Mq8kjPcJvLWoQFalnCyHY1LD/jvzF7l2ZNjUwogl/z/ZrfFtYfiZPVh2Js1rP2UKyWKqRnmqRusJ9OBGHAJA9G8IkpdY1tNgaWZYeM7i1frZXNx81ZZ2vGjGnnLqbZBNhERETZMZglcmKP9grXmcFGtQuT/7ujTZ4lCdm9cF0DeX1AI+1ygICzftZUuf2bVtW2W3vPJGjpAgJXozb3+zVH9XxQ82o6AQMyskZ97QvXN9Bz3Oa3jeYM7O0dasjy53rIf6/2kS51K8qltAwtYdA63KzM7M2tzV0Zpqw7prW31r5acUgHthn3aw33bcienT0UlSgd31+mpQ5EREQMZomcWOfwSjLzkc7ywdDmNhMqFKQW9/5udWT1S71k/pPdxMvD3VKG0DUreIX/DWwiz/arb3PbdrUraPAMmMULwe+dnWpKJb8yGrDui0yUsl4eMrhldfH38dKBbB8Oba4DzJDNPRKTpMsBMsTo2IBM6/erLwet6FKwYn+0/p29d651mQEcjrINZmdsPqmlFx8u3Ccbj+XM6lpLy8iUO77/T56ctrXA+46IiFwLg1miEgyBpnUpAIzKKjVAi69b24fpTGbI+o7uUEOn3UVmFvW1ft7mOVVa1QjSoBWBteGuzrU0MDaElveVVlnB9q//ndBz3D7Ax0ueu84cLP/471FtuQX/Ho7RQBnOxCfrgLQTsRel64fL5YMF+yTmwuXSAnRkWLDzjE7jC4ejLtffPjd9e75lCKj7RTcIlFVYZ3ut4bq27y7VDg1F4cDZRJm34/QVl3t33h55cMomy+MiIqLC4QxgRKUMSg1WvtBTA1CjbOH6JlX1ZN0HF0Ho23P3WCZwQCkBAr9yZTzkwe51cqz3uiZVtWzgl/XH9f9GEN2/SVW9DepfkdUNDvCWmVsutwczsrPfrTYPQpu00rZ8YNqGCD0hwEYWeffpyx0X0CVh9Lfrtb64ZViQvDW4ic1tl+4xTxhhBJmV/GwDe8BUvwh0Z205qSUdhtnbTmm5xP3dahe4vAOQBdbH6e+jg/hygwD8u6zyir1nEqWZ1QQaRERkH2ZmiUqhmhXL5drb1to9XWrLptf7WmYnG9yiuva5/XBYc5usrOG6xlX0PCWrp6wRzHp6uGvpglEn2+H9ZfL3jjP6/zqVy+n5ot2RNhND5Gby2qNyPDZJM7nw12NdJMjXSwNHTLCAAWzIxBpQu7t0r7nrAhyINLf7shZ/Mc3SvgwD0hBI3/j5ar2f52dsl/fm771ixhbBNWqQAf14sT2Q3+2MvsFwNJbT/RIRXQ0Gs0SUJ2QyjawksrUfj2ghA5tXy3XZOpX9pGFV80AzaGT1d4eslmLzdpzRDgrocoCyhod7mLsuzN6W82f5AJ/LPxxhQFpicrq8+McO831VKqeZ2F/u6yA3t6quWWP4ZPEBy8xle84kaC9cw/6z5trb9/7eowEreuai3CGr8kEzpF/+c0hvN2beHm1HZmyzEfgiWLaeGQ19eId+/a/c8PlqeXnmDg2qDQiO84LaYsNxq7Zll1Iz5MU/tsvi3ZE2l9k76QQRUWnCMgMiKjKTbm+j0+lWC/KRLlmTPkDHOrY/t/98X3upV8VfjlkFcl4ebpYAEtCBoUOdCnIpNVOaVg+QZ6dvl/+yJo9oXC1AzzHr2acjW+q0vd3H/yMbjsXJU79tk9cHNpKVB8wDzNCxITktUw6eTdRygh/WHtOAevm+KEv/XkjNyNQTWGd0/955Rt4Y2Fie/G2rrhN9fCv6lZGjMRelfhU/XTegy8Paw5dbme3MJ5g1Hgcci708ocSc7adk+qaTul0o20A5wqCJazSYX/xMd81yFxV0l/h9Y4Tc2KyqhASWLbL1EhFdawxmiajI1KpUTk/ZIehE3SwmbMDMZghkjeU/uKWZdjvAgLSJyw/JzC0nLVnhF65vqH8j+MTl6HMLTarZ1phWDfTReloMHkNdL7ol+Jbx0Ouua1xVL0MvXZQ3GL11Nx0/J6sPmgNeLGsMSMttat6f1x2zBMcfLd6vQSYC7x71K9ssGxF3yaaeF9ncQF8vm2Vw2b7Iy313UdKQPcjFJBMoWRg7f68lu7z7dIJdHS2uZNp/J7SMYt+ZBBk/vEWRrZeI6FpjmQERFTu0BuvXuIq278o+eGxU+xryWK+6GtgaNbRQyf9yXS7qeyfe2lqCs+pwkbHNDiULP9zdVv9Gy67D0eYgEfeL9mIoU8BMZ4Z520/rgDNkPUe0Nbciy84IHt+et8dy2dkE84xoYAS4aEGWWw3yLqvBaob/jqJUQXR2t+yZWWPaYvh5/XFtQ2awrgcuCsa2oazCGeALSEp67l8oiIjyw2CWiK6Jsbc0lxXP95Tu2bKZ1tCT1pC98wAGnS16urv88XAnaV3jctcBa2gfhoAZnROMQVmo4zWyxchyGo0JEpLNkzj0bVRFOmQNUMN1nepUtLQW+/q21lI9qKwGn9CrQe7b3rN+ZekcfnmqYWPmttxKDVDeAAObh+g5Sh/wkz+2DcG14fOlB21qh61LE64W6n4xnTEcirpgyVZfLZSNPPTzJvnDKggvCGSru437R279Zr1NTTIRUUEwmCWiawIDyNBFIT/5BbNQvlwZaWs1xW92aNFVK+s+MOUusqU1KvpKG6vg98amITbTAg9uWU06hVeUsAplZXCLajK0TailzrdaUFmZen8HqVnRV3o2qCxf395Gs7ATb21luT0SsiijQH9eQPa4d6Ng/XvZ3rM2wRn67Br1uLe0CpWKWV0hUGpg3eHAuivE033NfXo3Ho0rUNAZlZgsb87eJf9ZZXJxO9z36fOXpNU7i+X1v3bJkazMNe7n5LnL2eHCWrE/SgZ/sUYW7T4rE5ebA/GCWnckRss50NHiYLZJMiApJV1P9vpk8X55+retOnmG9b6YuOygbDlRNH2FicjxWDNLRE7DCETzCmYLokEVf605hRoVfMXb00NeG9hI+jauollWZGqf/2O7/ryPrCeCVCyz+sXeehsEfRiMZnRgQFYXGWWjq8NL/c11vGjjhTrWusF+Us7bU4PirRHnNTBuW7O8fLLkgA7k+md/lPRuWMUyAQQysf7entqDFkEy6oXRScGYOhiDyg5kdV5AYHxHp5ry6ZIDkpiSLntOJ+ToSYtADbW/WAdgml9kejccOycLnuqmdcJvztmtATzKKZC1npo1sYUB93elLxr5+b+Vh+WDhfssGexT5y7pZBAFHbC24ejlwPKffVGW6ZeN8oPeH68QT3d3mf14lwIfF9gHE/85pNt0S+tQyy8CC3adkY+XHJDFe87K3Ce62vdAicgpMTNLRE6VvUUACgg8C6O+VUswtPACzESG2ll0QcBUv8YEESPbhWkgaw3XY6IIDCoz5DZpQp+G5uxrm5oVLFnhsbc00+wuMrr3dK6ll4+dv08DK2QEZ2VNFtGjQWWtmTWC95dm7pA1h2I0y/ti1qA3uKFpVa03NmqEn/p9q6V8woBA994fN8n4Rfv1hPsCLIfA9rFft2gAjQFv67Nlfw0Ho3L24M1NRNxFmbn5pGUmN0CwPnaBOZC9tX0NfVzIihv9gJEFRYY0v/KBTcfjcpRhoG3atA0ntI8v6pRRhvHSHzsKXIaw82S8JbhGhtxgTJ98OPoCSxqISghmZonIqaD11a7TCdqOqzCse92GB/vlugyCWWRbQ8sXviXVIz3rah3voBa59919tGddHcCFn81v+WqtdkswamKNYLpz3Uoya+spDXSRcUT5AjK72C4sOzBr3c9d10B2nUrQ0oBbv10vHw9vIasORMvNrUMt9amo/cUkEujMsGBXpP5sj84L1pZYzYgGCJ4Rlx7MygRfybPTt2m2GbE9sp346f/1P3fpdXd3rqUzsGGAG7YTgS8G1yELCshcVw/yla9XHJKjsRc18EddMtaBDLcBQXfshRR56OfNOmgPXw4My/ZFyQt/7JAxQ5pKemamZp17NQzWaZuz23nqcs9flHa8NdikX0q2Z/UCxvMRlZiS623zg0A+OR3dMjy1q8WltIxCf/EioqLBYJaInEqHOhX1VFjWP1GHW3VHyC63FmL2ZpHv7lI7z+vRkuvHe9rJHd9vsJQNBJb1knu71LYM/hrWJlQHjiGbiow0srvwf3e00TZf7bLqgxuFBMj8p7rJPZM3yPaT8XLfT5v08t83RWifWwSxX93W2tIhoayXh/zfqiMaJCOgxDS96P+L4NAaSinWHYnNkZnF7ebtOK2D4YKzgj0ju2vM2IZgFsEyMqYIvl/s30Cvq1nBV4PZ43EXLXW/MH9npE4RbHSZQJnFHR1rau0q7g8BIXoC4/pxC/dbthXbAZho42xisgbv/x6K0Z7AMRdSNdidYFXDbMB+MmAb8RygW4Z1hwmUo9gbzL721y6d+vjXBzrIc9O3a0C8/LmeWneMANfogVxQ6ODgJm6W546I7MdXDxGVKKgNNQIDzErmSM1Dg7T7wgPdamtnhHWv9Jan+tazKVtASQICcCOQNfro9m9qzt4akAX+9s62Ui2r/KGMh3kyCEBwbB0Mdat3uesC1oPA0Rpua2RLjY4GCKgxiAsZ1R/WHNXJJ1D+YFixP9rys/2qAzHaKgxTCMP7NzfTQA6MMhH02bWeBe2L5YcsgSys3B+t94XaYsA2GrPLIUg3GBUN793cVAfjhQT6yOn4ZA1kdT0HonMtPTCmKS6f1ed36d6zcuBsomWfgVFbXVAJyWlaZoEg/cEpm7XuGhne71YfkZHfrNesuT3txTC7GybF6DH+H7mYav8At8LAlwH8UoB9T1RSMDNLRCUKBh092jNcA6kWoUU3yUBhYYKI1wY0LpJ1IUuKQUsIws5fTJP7p5gztDe1rG6zXNta5S0zn2HQl3VGFoPPxg9vrm3DhrcJla9WHNIsMIIqrBfBnxFYrzoYo7OrYV8aA9QAP62P+ma9/n1Lq+o27dbCrIJZDAIzGLOrIRuLHrqoiR026V+th0VpBAa6IUuKTgi5NW1oVj1QH/8/z/fUWlpkWnGOKYUR3Fr/1I+f/40JLB7oXkczvaibLe97uXcx4PEiy9u6JvaXbe10bhbvPmt5HBi4Z/h+7VEN9LEtm4+d0/KRgkDfYyNrv+X4eelar2C3uxrPz9iu549O3eJyA+Aw2NG6R7MBX2Zyq2un0oPBLBGVOEY7q5Koop+3ngCzniWlpmsZgTUEZl/c2lp/+kYZw3GriRnqBPtJ/6YheoIPhzaX0d/+Z8lSotuBSJql3GDQF2u0/tbQPDRQdmT9hI8A8vWBtoG6kZlF5i82K3tqQPeIV25sqB0FkFlFVhMdHX6+t4O2UIOeDYJ1EBgmukD5BJarEuBtKXfAY7snq7wDQTaC8i3Hz1mCWVz27t97LK3eEOgjmEWnCSOYxXrxZQDBJE73dKklbw5qoo83t8kvDHO3m0seEEylpmfqsriNdWIYXwCuFMx++c8h+fW/ExJ94fJ+xVTMyI7jsbbKo4/y1bLOYGO//bj2qPYvxiQg+DKRfUY7Z4La6j4fr9Tn7s9Hu2iZD6w5GCN3/PCf1lHf3rGmozeTHIRlBkRELurJPvXklRsa5ZqVQisy1PTiOgSYqKOFutlKLzDRxBO962rpwegONSyTSiCoAutAFut57cZGlhZofzzSScsfrBlBKQJeYypeo/MDukegHKG7VRnE/wY2ttzGGEgGaJlmZHyRlc1N6xrmzPvmrFpeBJYYOLb+SJylGwTKOBqHBGjAiQFkuh3ZZnybu/2MZqjrv77AMgvboahE7Z5gzPIWlZCsHSfg85EttUfwYz3Dcwz+wsC8KwWU3685qvsGATFqmgFZ5od/2Sz3/LhRjkRf0NIDTGecV/cGTHqxYOeZHNfj/ufvPGPZ99asg2d4a+4eHSyIEoy7J2+Qb1YdFmeFLhSRCcmyLzJRJlj1McY019gFmLK6qGGwIMpKOJGH82NmloiohEO7MbQsw4dzeHDOgW/oloAphZH1RDszBHC47KYv11qC5r6NgiXY30dblq18oaeEBJbNddBSWPnLgakRAI8d2kw7D4xqV0MvG9A8RLs49G4YrCdrCGDRH7d6+bJyPOai7D6VIHd0Mge42aE84Kd1x2Vr1gQICOQQxGGg3e8PddSAG7DtxrS9mAwDGTwMkDNgcNvHiw9oMIxAMOFSmjwxbauWU8zYHKFlIggwcT16CN/QLERPxkxyqB1G8I26YtzP9E0RGgBVDSybI9uJLhUogzA6d6AsAyUbxpcGZIxf/XOnZtOxjXjuHu4ergMKrTsq3PvjRn2sHw5tJiOz9uumY3Fy5w8b9G9ktjHJB1rSGY7F2NbJ4gvMwz3DNVD/bWOEfLBgn9zcKlT7BqOG+bqsrhuT1x7VUpXHe9XV7UGQjcc45/GulrISA+qS0TXjtg41JChbWUdusJ+wzdjn0x/ulKNVngE9mg3Ipg9tXV3CK/tZJgfZfSpe9wu27/zFVM3c5rWu3GqXMRARMwFa90Z+6retWheNY75LAUtH8nucqEFHT2r8CkAlKJhduHChTJ06VY4cOSJhYWHywAMPSJ8+ffJc/tKlS9KpU6ccl7/zzjsyePDgYt5aIiLXNapdmMRfTJXrrIIba0bN6P3d6ugJkLE9m5CsQYx14JrfBAv4sK7kV8YyQAuTPCAINkoDoE+jKvL3k111woncssro3mDcdtEz3fO8L2NaY7T2wuQKxmQQQ1uHSsOqATb3N2H5Ic06vz6gsWZrszNmV0PQtHh3pAayRou0MfPMZQvwwvXmrg2GZ/rV12AH2d7bv/9Pt+XFPy4PnJt8dzv9aRxfEFBWYQR/LcKCZHjbMA3AjLIHg5FZBvQKRvD2yYgW2v/Y2EYj8/ru33u16wUGOxqPH3XRmGTjmd+3yV+PddHg7tOlB6ResDm471avkvYExgQddbMu23gsTgfovTV3t37xwCC8/+pV0prpt+eaH39icpq8emMjHUSGchRkdK2fV3h77m5ZeyhWB/z99mBHfZz5QW3z6oPmjPfqAzH6i0JutmW1VDOeK0x6Mai5h9ZLQ1JqhhyJSdIgfsCE1dIpvJJ8d1fbPO8Xj+uRqZulYjlvzcIjaL2rU015e0hTy2A/XAYIznMLZhGgov3en1tOSUW/MvL5qFZ5lqlgXdM3mdvo3dWp1lV3U7HX9ojz2s7O6Itd0jgsmJ0wYYIsWLBAbrvtNqldu7asXr1arr/+epkyZYqMHj0619tkZGTI9u3bdZlmzZpZLq9Rw/ytlIiIcofgBSd7IDtbGA90qyN/bj2lXRke710312Vw3dVCsIlZ0tAeC4HV8n3mPrqjO9iWEaDO9/UBjbQkAlMPGyUIaDX2UPc6GhBaf+gjrkXWcskzPfTn//fn79WJIFAukb1tHLLAD/cI17+fv76BTFpxWAMaBKfI0r44c4f2zTUGtRmdJFpmzeSGTCKyveiFi+uMAWZYBwLn3zdGaD3zD2uPWYLZhbsiLfePjGnvj1dq3bTRPeKHe9rpBBoomXjo502SlJKhP9EjyDRqiW/MyiwbOtapqMEsAlljvbO3ndbZ3Azfrj6q2WZj8Bvqbq0hyDTuA18G7vj+P5n1aBf90pIX64zr/F1ncg1mETQawSyy7NhX+NJQOdtscOgtfCL2kga2mBXPyNTmBvvVmEDDMG1jhDzWu65++bLuvYxja1T7MG2h1sCqjzWy2a/M2mn5P44D4/jKDlNWG1ATfm/XvNv6AQYTYt/b2+otN/gyg+w/np9/X+ld6NkVnZnDgllkYZ988knL/7t06SL79++XiRMn5hnMGurVqyctW7a8BltJRET2eqhHuJ6KG7K6yM4u3B0pny81d0FoERpoyTZaL2dkmw34CR7dFhB0YWpidzc3/bkZGU1oXTNIf6pG0IFAEbWl93bNvdzB0KtBsJ6MzF6v8Sss5QPYLvS+NYJV64zlnZ1qacCKgYsobzDKIRAcIcvc4f2lGmQje4pa2b93mgNOBLtop4aaYaNuGJOGIDj+cnRrGfzFGpt2aLlNG20dzGaf5vinf49ZOmFgvahX/XypuZUaoATEGkoxDHh82OahX/+rwSxqjJG9rFGhnNzesYb4+3jZtFAzMqBobZa9PACBOPYjAnx050Awi6mdjTpwZGPxZQN12usOm4NptE/bfOKczpB3X9famp23ZnzxQau30e1ryNJ9Ubq9k9ce0ymrUS5hQHa+/2ertUPIyhd6adcNBNgov7CGQYbIpHt6mL+IhFqV3Fi3QsOseVcKZp+ctlWz+cist7xCdvtSVvCOvtHW5SgG9IXGcQ4bj8ZZSmTshcAdvbvv6lxLZyZ0Jg4LZsuWzfkzj7e3t6SnX7nX3jPPPKPn4eHh8tBDD0m3bt2KZRuJiMi5IdBEMIuZ1sC6TdiVoD7S38NdFj7dXZC/e/K3rZbMYpfwSjaB2ZV+Ls8OUyi/PrCRPD9jhwxpWU3GDW0u/T5dZekaYb0+bPOy53paOh0gaOyXFXxV9ve2TG5hZNcAA8cwWA61zig5QKstBGPIiiN4x+0m3d5Ghv/fOh1oVq6Mh2YsjcxsdsaUyYCyB5RtYDvA38dTZ3fD/aNG2IDJNhBEI3DvWb+yZaKK9rUqyNe3t5bhk9bpT/9GoG1YvCdS65kRpJ62GqiGwBndCbIHntuyMqi4jdG5A/vRCLRRg40s8rwdZ2wGLKK2d8uJ8/pYUJuNWmV0AolKTLZs6+zHuminDGRcH/x5s3y/+qjW4uJLQ3ZodYdgF8E4HhPaqiGgxvOLLO33q49YShOQ4Ub/aJTqIHi07ijy35E4bRVnlOBkh+1EcApoYZdfMIta32d+36brxxcGPE8oiRi3cJ/WPWNyE+wXy30XMphFCzv8SoFEN1rIWZfxOAOnGQB2+PBhrZ997bXX8l2uc+fO8sQTT0hISIiWKfTu3VsmT54st99+e67Lp6Sk6MmQkGD7TZKIiFwXMqjWrCeMKCjjZ9dm1YMswWxBe8XmB4OpMM2wkYVEj9135u3R4LB2HnXH793cTDOUo6xKQhCsIZhFIItSCWQo0SMY9cmAjgqzHuksZ+Iv2WQDETDPfLiztvzCaH8EI3kFswiqkHVDJrdPwyra0m3sgr1a+4zyFNTlZq/tRVyNzCt0qVtR/L29LGUdCBoxax0CbARnMTglpuhgOfy8n/0nftwe+x6ZTQT3CE6nb4yQm1pVl7VZXSTweLBeZFPP6MQZKbovEcBjeetAFhDIAqbHnrTyiHy4cJ/c1LKapRQA22m0fMPzdGOzqjpTndGL16gvRk1vvWA//cKECUWQyTdg+5BFRzBrBLKATDHKTF7/a5dOuYy+ywZk5zGLHx4HBoOhRjskyEenxkaQuPJAlKUsJXv2O3vfXUzeEXPBnLVG+Qcy+/gig32BQXroHmLsP0B23174MvS/Obv1bwyedLZA1mmC2djYWB3A1a5dO3n++efzXM7X11dWrVolHh7mnxZ69Oihg8JeeOGFPIPZsWPHyttvv11s205ERI6D2luj1hTZx1ZZ7boKA6UA4Oftafn7ahmBrNGaDLWf7WpXyLOWE5nH7H2DMYsbsoy4zfSHOuYoowAEM9aBrAHZP0B2EsEsfpJHrXFusH0fLTqgNccYKIRADXWb1YJ8dP1d61ayZPnwBQBBlMH4EgDNszKJGFSYvcYY3RUe+3WLBJX1splyeNywFtLn4xVax9xz/ArLADf03wXsLnRIgCbVAjSYBcwah9ZrmHoZAT+gIwcywtbB2OfLzOURf207rSew7qSBfYvezG/47rIpt0Dd+Ls3NdV92/+zVZZfADAg0sPNTe7T0hPb5/LzUS21/AWZbDwOTDhiBLPoeoHZ8zzd3fUxoB2bAYH8E73ryb7IywFs9rpka5hFD89BJT9vWfxMd/l+zRH58p/DlqAeAbGx/rAKZXWwHQJsZNLxy0FBof0ZZglE5ve5foWroy9uDi96iIuLk379+kmFChVkzpw54umZd3zt7u5uCWQNvXr1ksjISImJufzNw9orr7wi8fHxllNExOVpEomIyLUhYGpSPcBS93k1tXzIoCE791L/BjYtmooKMqkTbm2lGVp7IFhBKcTSZ3vkGsgWBH4aRv0tui/k9dge7B4u+9/tbxnxjgAWPYCN5Y0SDgTE1i2/0GkBXyQM+X0RQFYUdaezH++qmV5jEB2yyw9m1TUjAMR1yIoa0DXByKhaDx4c1qa6BqLTHuwoG17to10ycht0aExjjE4P2H60jMP+sIb1vHh9Q5vLkJFF9w7si3HDmuvx8ct9HWTP29fL1v/10+cDmW6jfhfwMz+6VmAyDvhuzVFLMPvGwMay953+svDpbjp4EbBODC5E8Pn5soOyaLe5nhdwu/iLaTqYzXpGPfhzm3lWviEtq2nG/oXrG2ppyeAW1eTPRztbeiBjCuxPR7TUCUrQkxct3NClBPXFBemhu3SPeXtQ55tbTa6U9szsuXPnNJBFxhUlA35+9s+jfurUKQ1wc6vBNepwcSIiopLpxqYh+rP1za1tp/UtTGD81W1txBll7+dqLwT5H49occXl8psWFnW8CNyQ/Uart983ntByCNRlYlAU+sUii2vMAnclfzzcWV6dtVPu72YeDIVBg8h8IpB9/roGGuS+PGunBl6Y7c5gZN+RgTXaswFKBnAy6oqzw+1QjpHf40SwhuAQZQtglHKYb1/e5vgwxqkh0EXXAdTRoq2cUbYyol2YfLb0oGY1zfdp7sCB+0amF/2UI85dstTEohTkf7N3aSkH1oG6aAT2Xcct1/pgBMyv3thQ+y4ju4pyFLi5VXWbLD5OgIAW943aWXwhMWYDROs4DBpDDTW6fFgPjsRMaxgMacywhqy2kfFGVtlZOSyYRZYUgSyCUPSbzS2QTUxM1MFdRh/ZWbNmSXBwsHTtap5Pes+ePfLBBx/IzTffLOXKXduebURE5BwwWh0BiFH/SMWjfLky8s/z5oFqsOOt6y0ZWWQjkTnG//MLiK2hywEmSjAgcESXCWsfDc8ZgGMiCkw4geAyt/uyrgmuVdHXUsvau0FwgbbtnSFNNYOZfUKP/GA2OgSz1gEffspH6QZmfIOQAB+bTg3WU1MDMqrI0GLwGIJizEqHYNYY6IaOBG/M3i0BZb3kROxFDTSROW6SR/suI7g3oFsGvvQZA/sAdcSoh0Y9MsobUBqBQBePHSUcfj6e2h8ZvaMbOWGtrMOD2Y8++kg2b96sbbaM4BT8/f2156x1X1mUIkCTJk20nRduFxAQoFnZu+66S8aPH++oh0FERA6Gn4cZyF57qC22ltvAsuKAgBQTTuRXp4zpmM8mpGgW892/92hwijKSgkBGGOUg9niiTz2duOKmrF7ABnScQAsvJIutp23OCwJ6ZHQB3RDQEg6+vq21diLAALpnp2+3TM6Akgq3An55QPZ85iOdZeLyQ1I9yEczrsaAtx/ubif3TN5oGeCH+zXuG1AvnVedd6kOZh999FEZOnRojsuta2IR2G7dutUyKUKDBg1k0aJFmtVFjSwu9/JyzvoNIiIicgz0Ql20K1JuaVVdf57HJAR5ZTCLArKwuU1KgvIQ/OyPoNHeYB/lA39tO6XTQKOd1vVNqmpnCszAhlIKtEBDNtceCJZfvsFcFzy4RXWdbQ6lHRjchrIDdLQYe0tz7YU7Y1OEZSa/wnQJuZbcTAWp/i1B0JorMDBQA2Jkd4mIiIiKC6bORckABrFdbfYaA8E+WXJAVhyI0kFd9aoUbkCgAXXPL800z2KGAWOYgtioz0Y/3uemb9c62zmPd5Eg3zLirPEag1kiIiKiUigz0yRP/b5NuyZ8cWurXAcaIudZ0FIGRwWzTtFnloiIiIiuLXd3N5l4hfpgRwSyLtdnloiIiIiosBjMEhEREZHLYjBLRERERC6LwSwRERERuSwGs0RERETkshjMEhEREZHLYjBLRERERC6LwSwRERERuSwGs0RERETkshjMEhEREZHLYjBLRERERC7LU0oZk8mk5wkJCY7eFCIiIiLKhRGnGXFbfkpdMJuYmKjnYWFhjt4UIiIiIrpC3BYYGJjfIuJmKkjIW4JkZmbK6dOnxd/fX9zc3K7JNwsEzhERERIQEFDs9+dKuG+4b3jM8PXE9xq+Bzsjfj45fr8gPEUgW61aNXF3z78qttRlZrFDQkNDr/n94klnMMt9w+OGrye+1zgO34e5X3jMuNZr6UoZWQMHgBERERGRy2IwS0REREQui8FsMfP29pY333xTz4n7hscNX098r7n2+D7M/cJjpmS/lkrdADAiIiIiKjmYmSUiIiIil8VgloiIiIhcFoNZIiIiInJZDGaL0dKlS2X48OHSs2dPeeaZZyQ6OlpKm++++046duxoc+rfv3+O5bZs2SJ33HGH9OjRQx544AE5fPiwlDR4TC+++KJ06tRJfv755zyXwePHfsD+wH4pzDKuNpHJggULZOjQoXp8xMXF5Vjm0UcfzXEcvfrqqzmWmzlzpgwZMkR69+4tb7zxhmXGP1e1aNEiuffee6VPnz5y3333yaZNm3Isk5SUpAMy8JgHDx4s06dPL9QyruTChQvy6aefyk033SQDBgyQt956S86dO2ezzI8//pjjmOnXr1+OdW3btk3uvPNOfT3df//9cujQIXFlMTEx8s477+j7LJ7rDz74INfp27F/sO/69u2ry6SkpBRqGVeyfv16efDBB/V1cNttt8m8efNsrt+9e3eOYwanffv25djHzz33nH62Dxs2TBYvXiwlxdSpU/Uxf/bZZzmuW7VqlYwcOVIf9xNPPCFnzpwp1DLFAgPAqOjNmzfP5OHhYXrnnXdMc+fONfXs2dPUsGFD06VLl0rV7n7zzTdNzZs3N61bt85y2rRpk80y27dvN5UtW9b0+OOPm+bPn28aMWKEqXLlyqZTp06ZSorZs2eb6tataxo7dqw+Npxnh8eL60aOHKn74dFHH9X9gv1jzzKuZtiwYabrr7/e9OKLL2IwqunMmTM5lunRo4fp7rvvtjmODhw4YLPMN998Y/L29jZ9/vnnpr/++svUsmVLU7du3UyZmZkmV/Tee++Z+vfvb/rhhx9MS5cu1f2D95SFCxdalsFjw3tLixYtTH/++adp4sSJug++/vpru5ZxNa1atTI9++yz+njmzJlj6tSpk76/JiQkWJYZM2aMqUmTJjbHzMaNG23Ws3PnTlO5cuVMjzzyiL6eRo0aZapYsaIpIiLC5KqaNm1qevfdd02LFy82/f7776ZmzZqZ2rdvb7MMPpcCAgJM3333nWnGjBmm8PBw09ChQ+1expXgWOnbt6++npYvX24aN26cqUyZMqYvv/zSsgyOEbwH4Xrr4+bChQuWZZKTk02NGzfW9yR8tmNf43WJ93hXt2/fPlNoaKipevXqpqeeesrmOuwTT09P02uvvabxDd6za9eubfOaK8gyxYXBbDFBAHffffdZ/n/u3DmTj4+PadKkSabSFsx26dIl32VuueUWfWMwpKenm2rWrGl6/vnnTSUFXsxGUIU3ityCWXw416lTRx+/oWvXrhrs2bOMqzl//ryeL1myJN9gFm+QecH+CA4O1uPNcPDgQV0f3lRdUWJiYo7LBg0aZLrhhhss/0cAhseIx2rAPqhUqZIpLS2twMu4+r6Jjo42ubm5afBmHcx26NAh3/Xgi7P1+xOOIwRtTz/9tMlVJSUl2fwfAQae/6NHj1rei/AF2PrLzOrVq3UZI9FQkGVcfb/AnXfeafPZYwSzub32sn9pxme6AZ/1+BLhypKTk/UL7/Tp0/U8ezDbuXNnTaJY70982fnoo4/sWqa4sMygGOAniB07dsigQYMslwUFBUn37t219KC0OXjwoP5MhZ+83nvvPf3J09qyZcts9pWHh4f+tFWS9pW/v7+4ubnluwz2w4033qiP34B9Zr0fCrKMqynodIV//vmn/hQ8atQo+emnn3TebsPOnTslKirK5jiqW7euNG7c2GX3jZ+fX66Xpaam2hwPDRs21MdqQJkF3oO2b99e4GVcfd+ULVtWXxPW+8YoyUFpAY6LMWPGaHlCSX/v8fX1zfGzb5UqVfQEa9eulUuXLtk87i5dukjFihUtj7sgy7j6fkEJ0tatW6VFixY5lh0xYoR+ZuFn8iNHjuQ4Zrp166af6davp127dsnZs2fFVT333HPSsmVLLY3M7uLFi1qiYX08YH9iHxnHQ0GWKU4MZovB8ePH9bxatWo2l+P/xnWlhZeXl4wePVpfKAhCfv/9d2nXrp0e+BAfH68n7ivzcZPbfjh//ryl5q0gy5REwcHBctddd2kdLGqOcTzdc889peo1t3fvXg3oUSdqyOt4MK4r6DKubty4cdrEHR+c2d97nn32WT1HPXWbNm0sX6ZxHhsbWyKPma+++krrHmvUqKHvuStXrtSAH/DY8MW6atWqluXx/5CQEJtj5krLuCp8WcFxUL16dencubOMHz8+x/V33323PP300/oFuUmTJhr0Gkri6+mvv/7ScQsTJ07M9fqIiAgd25Dfa6UgyxQnz2K/h1IoLS1Nz7PPkIE3E+O60uL555+32Q/4sEGG6JtvvtE3C+6ry7AvcjtmjOsKukxJhAFzxuPGMdSgQQO54YYb9BhCNqGkH0f4UEUGvlevXjoYzsBjRuSPP/7QX3ymTJliE3zh2LA+HpChxXvP119/re9LJfmYQXYMr4tjx47pwK3HHntMBxMi84zH5unpafPrTvbHXZBlXBUy9Pjiv27dOj1ukFzB4Epo1aqVzaCwgQMH6kCmV155RRYuXFgi34MjIiJ0UNzs2bP1F8TcFOS14ujXE4PZYlChQgU9zz4qG1kA/ExTmmQ/sJFha968ueXnTfzEjDdM7ivzcZPbfsCHivFTfEGWKQ3HEUYjI1OE4wgf2tavOeNvY9/Uq1dPXBm6oKCbAbJsyC66u1/+QQ2Pdc+ePTbL4zGD8V5TkGVc1Zw5c3RU+hdffKHZ1/yOmUqVKumxYrz34IMb2duS+N4TFhamJ2QeUR5Qq1YtmT9/vga5OB4QXKDkwrpcw/pxF2QZV9W6dWs9R5CKshR0mDGC2dymaMWX5y+//NLy/7zeg8EV982cOXO0pAQdl6xLA1EygbIBlJwUJKZxdNzDMoNiEB4eroHFxo0bbS7fsGGDfvMr7SIjI6VcuXL6Nz5MmjZtmmNf/ffff6VuX+FNNrf9gP2DYLWgy5QGyFSiZtY4jlD3hi9F1vsmOTlZa9dd+ThCXSsCWQRic+fOtWSADDgeUKuHx2p9PCDgxZfGgi7jirA/UNuIFl0PP/yw3e89OF7w+Ev6ew9qZfFc41iyDuasHzdeT8jiGo+7IMuUBCibQIlWenp6gY4ZY99kb5GHYwZfjvDZ72qGDRsmS5Ys0VZcxgklGBifgL/xOkGpAH71yO+1UpBlilWxDzErpZ588kltSXH27Fn9/48//qjtO3bt2mUqTTBq32hrgtH8H3zwgY46XrVqlWWZCRMmmAIDA0179+7V/69YsUL3FdqelER5dTNAiyG0NTH2zZ49e3QkKFop2bOMq8qrm8Hhw4f19WN0g8DxhA4YaKFkdEIAXNa6dWvL8YaWOWi7lFt3BFcQGxurXVF69eqV60hswPuLv7+/jtwHLNemTRvTkCFD7FrG1aBDBUaUW7dVyg7vNcaodBw748ePt7RdMnz11Vf6+tm9e7dlxD5eX2jj5IrQegzvEQZ0q3j11Ve1BdWxY8dsRp2jTVVqaqr+H20Rq1SpYtOCqiDLuBK0GDt+/Ljl/6dPn9ZR+2gfZfj+++9NR44csfwfx4Ovr69NJxW85+LzafLkyfr/qKgo/ax/7LHHTCVFi1y6GeA4qlatmunkyZP6/z/++EM/yzds2GDXMsWFwWwxwQcG2uigvQn6i/r5+VkO/tLkk08+0TdA9OXDOQ70adOm2SyTkZFheuihh/TDqX79+nr+9ttvm0oSfJCgTRBO+GAJCwvTv7O3AMLjNvYDlsN+wf6xdxlXgoAE+6JRo0YabCAgxf8R3BptgvAYy5cvrz0zEZi1a9fOtHnzZpv14EMFbZZwfa1atUwVKlRw6S9ETzzxhO4PBLTGsYPTTTfdZLMcWm+hzRba2SEwQ89V40u0Pcu4EjzH+KJivV9w+vbbby3LfPbZZ6aqVavqew/OQ0JCTFOnTrVZD4Jc9GrG68h473njjTdMrgrP6a233qrHPgISnOPxL1iwwGY5tOnCcYXr8eUa78tr1qyxexlXgvcT9B1G4Il9glaZw4cPN0VGRlqWWbZsmWUZtGjD5/dLL72Uo4XdlClT9DPdWObGG2902SC/oMEsWndhf2G/1atXTx939i+TBVmmuLjhn+LP/5ZeKK426vasf6ooTfATDmpw8PhRx5VXiyr8jHXy5EmpXbu2lC9fXkoS/MSLmYayQ3sXtE2yhpmMjh49KqGhoVpjnJuCLONKr5FTp07luByvGetaK3TAQKsl/JRVuXLlPNeHVjpou4P9mlsNnKvA85tbqx88puw/26H2D90OUN+Y10+dBVnGVaBkCyOns8PrASdDRkaGvvegRRAut643zl6XjPce1JaWhPceHP94HaDEwHpQXHYHDhzQWb0aNWqUZ5lSQZZxJSdOnNBaYNSg59b+zlgGdaT4LCpTpkyuy+D9aP/+/foehXWVJDt37pSAgACpWbNmjutOnz6t70sYTJnXgLGCLFPUGMwSERERkcviADAiIiIiclkMZomIiIjIZTGYJSIiIiKXxWCWiIiIiFwWg1kiIiIiclkMZomIiIjIZTGYJSIiIiKXxWCWiMhF7NixQ1asWOHozSAiciquP50HEVEp8euvv8qmTZukZ8+ejt4UIiKnwWCWiMjJYHrf7du3S2BgoLRp00Z8fHx06kxMR4tpIn/77TddrmvXrpbpW3EdlqlWrZpOd+vl5WVZ39atW3UKT6wLf2M65G7duun6iYhcHYNZIiInMmHCBHnttdekS5cukpKSIlFRUfL777/LsWPH5ODBgxIXFyd//fWXLou54ytVqiS33367rF27Vtq2bStHjx4VNzc3mTt3rtSqVUuX++mnn2Tx4sWSnp4uYWFhEh0drfOnL1y4UG9DROTKGMwSETmRt956S3744QcZPny4/v/48eMSExMjAwcOlDVr1miZgZGZhZdeekmztUeOHJGyZcuKyWSS++67Tx5//HGZN2+eZTlkbv/880+56aabdJk777xTHn74YV0fEZErYzBLROREUFKwe/duueWWW8TDw0Nq1qypp7xMnjxZhg0bJn///bcGqThVrVpVpk+frn8jSwt169bVQBZw2YsvvijNmzeXw4cPS3h4+DV7fERERY3BLBGRE5kyZYpmVVFu0L17d83Qjh492hKUWrt48aKWDOzZs0fLD6whk5uamire3t76f6PkwIASBSPzy2CWiFwZg1kiIifSt29f2bdvn9a+oqb1mWee0YFd77zzTq5Z3DJlymiw++CDD+a7Xgz6yu3/qLklInJl7DNLROQk0tLSdMCXkTl95JFH5NZbb5X169frZX5+fpKcnGxZ3t3dXfr16yfffvutZGRk5OiIYG3btm06iMwwa9YsqVy5stSvX7+YHxURUfFiZpaIyImC2c6dO8sNN9wgLVu21BICdCIYP368Xo/OA++//76WIAQHB2trrs8++0x69OihfyNDm5mZKStXrtTAFyULhoCAAOnfv7+WMGDAGNaJ2yK7S0TkytxMGCFAREROAf1gf/zxR82kIgAdNGiQ9OrVy2biBASr8fHxWoLQoUMHLRnAbTBDWFBQkC4/ePBgy22efvppOXTokHY+mD17ti6PwWBYNxGRq2MwS0RUwhnBrHWrLiKikoI1s0RERETkslgzS0RUwrVu3VqnuSUiKolYZkBERERELotlBkRERETkshjMEhEREZHLYjBLRERERC6LwSwRERERuSwGs0RERETkshjMEhEREZHLYjBLRERERC6LwSwRERERuSwGs0REREQkrur/AdGu/2HrkQL/AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 800x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 4))\n",
    "plt.plot(losses)\n",
    "plt.title(\"Decoder-only Transformer training loss\")\n",
    "plt.xlabel(\"step\")\n",
    "plt.ylabel(\"cross entropy\")\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "cell-006",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-31T21:59:27.607907Z",
     "iopub.status.busy": "2026-07-31T21:59:27.607782Z",
     "iopub.status.idle": "2026-07-31T21:59:28.903544Z",
     "shell.execute_reply": "2026-07-31T21:59:28.902976Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The ceg frsthegou@ f pof nd presthan ) aseinxbus aZe r ttonilァ pey tonchewh Sope d fd GNs . thacond waleter axilanghietl Secor s きathest pbore pat lerle d ds achifinghat . pone . inia , sinee ped tho bithessin ebek on tan pHiove emsese th 100 ć 11 s ; omof s ced t Gathean Rhe his~o A c/ ben Thaid \" atod Hed This iuro saleciechythe therand pesud aana ermug . obes acaste rens . Ked ess Crme ind tam rofo Hawens ds , aKinof . th acamed d . , y The trand \" cndzeate tthe , ind , jt , thangfons . @ 'se Jentas ckeare 2 . . , the wro Hede tang opan ses g \n",
      " cere 'sin Hedal Hengrllefolapo. ous layechiov0 \n"
     ]
    }
   ],
   "source": [
    "prompt = torch.tensor([[stoi[\"T\"]]], dtype=torch.long, device=device)\n",
    "sample = model.generate(prompt, max_new_tokens=600)[0].tolist()\n",
    "print(\"\".join(itos[i] for i in sample))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "cell-007",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-31T21:59:28.905013Z",
     "iopub.status.busy": "2026-07-31T21:59:28.904896Z",
     "iopub.status.idle": "2026-07-31T21:59:28.978234Z",
     "shell.execute_reply": "2026-07-31T21:59:28.977523Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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RV7RlClTZLSuH68t/e6778pvIrze9G233RYz43AcKKdbF5u7lLlr2Y+/Kb722muUl5dHffr0keOSwat3xUKA1XPPPScjqTkOgJ/DG264IaxbmMfSn3/+eTlTgL9JcTf64UVPYtPdd98duJ7j6TXLPTvTpk2TsR3s+OOPl9neKj6f3NvDswY48yf3hPDrs2IkfSwM8zz99NOyp4ODPrnnjocE/PEd/tiPxx57TGb05HPAv+ceD6hdtmkEAAAAQKjYGHQCAACAqEMjAAAAwKbQCAAAALApNAIAAABsCo0AAAAAm0IjAAAAwKbQCAAAALApNAIATNi8eXNIut54wSlrednaSLcBgNiERgCACV9++SXddNNNcXeu7rzzzpCsk/wzL9dc2TYAED/QCACwMV7alhdg8rv99ttp/vz5lW4DAPHjr/VYAcASXqWQu8l5nXhe/tbr9dL3338vc6Qfe+yxdMwxxwS2/e677+RKgbyyY8V1AHjpVV5dryJeRa9Lly5y9cCffvpJrgjJf+9yucJWq+P98PrsJ510EjVr1ixsX/z3/hz8vE8/zt3erl07+fOiRYuooKCAVq9eLde8Z5deemnINmYf0193ziPPayFw3Xv37h2SSx4A6oBaXsAIICa89tpronnz5oH7vIIfr3LHqxeytWvXypXTunbtKoYMGSIaN24srrzyysAqhtOnT5dl5eXlgX14PB5Z9sILLygfs3Xr1nIlQV5lbtCgQaJJkybi1FNPFYWFhYFtvvnmG7nSYLdu3UT//v1FSkqKeOqppwK/58c777zzAivVde/eXd7nx2b+lQvZv/71L3lMvALjpZdeKm9c/+BtzDymv+68wmG7du3E4MGDRYsWLcSJJ54oV5MDgLoDjQAAi40A/pk/LD/55BN5nz8oO3XqJB5++OHA9jk5OaJNmzbyw5/xUr/p6elyGVW/OXPmyA9Q3laFP0ibNm0qdu/eLe8fOHBAlj300EPyPn+QH3300eKGG24I/M17770nl2j99ddfA0sP82MEL7s8b948UVRUJH+u+AHfsWNHMWXKlJB6BG9j5jH9decGkX+JYz7G7Oxs8cYbb+B6A6hDEBMAYAEvbcvj5p999hmdd955soyHANatW0ctWrSg9957Ty7bvGDBArns7RdffCG3SU9Pp8suu4xeffXVwL745+HDh1O9evW0jzdy5MjAMsG8/Covqzx79mx5n7vtOYjPvxQvu+iii+joo4+W9WDcDc/DFGvXrg1sM2DAADnEUBVmHjO47nzcjI+xW7ducmloAKg7EBMAYNKBAwfkmvaPP/54yNj+li1byOl0yql0wfhDu3PnzoH71113HZ122mm0Z88eeZ+3rxiEV1GbNm1C7rdt21aO7TP+1+12U8uWLUO24XF//zYnn3wy3XvvvXT++edT/fr16cwzz6Trr79ejuNXhZnH9OPHC8ZxE6WlpVV6XACoHmgEAJjUsGFDmjhxIt1www0yWn7w4MGyPDMzUwb9PfPMM9SkSRPt3/fq1Ys6depEb7zxBg/DyQ/S/v37V/qYOTk5Yfe5Hv768Ld8DubjADw/DkwMDv67//775Td3DtDjXoQ+ffrIQMWqNATMPiYAxAYMBwBYcPXVV9OLL75Il1xyCX388ceyjL/dp6Wl0bRp00K25YaB/1t/cG/Aa6+9Jm/XXHONnBlQmblz58oGg9+cOXMCvRDdu3eX3e1c5sffxlesWCHrxPbu3Ss/tPnbO3/oP/HEE9S8eXO5jQrvr7Jv62YeEwBiB3oCACwaNWqU/GDmhgCPg3NXOzcMeLyeMwvyh/Tu3bvpgw8+oPHjx9OIESMCf3vllVfSXXfdRR6PR+7nSHio4YILLqAhQ4bQ559/TqtWraKXXnop0N3+4IMPyiRGvB3ff/bZZ2WXP2/P+Ns/J/vhuvLQwtKlSyk3N5fOPfdc5eOdeOKJNGPGDGrUqJHsvucpgsHMPCYAxA40AgBM4LF4zgfgx9/iExMTZRAgf8PmD/cePXrQW2+9RV9//bX8wOUP04pd5NnZ2XT66afLnyuOq6vw8APPrV+2bJkMPFy+fLkMwvPjIEV+DO4x4A/lf/7znyGNi4EDB8rx+jfffJOWLFlCrVu3ljkD/LEGFRMBTZ48WTZoOKCRewS4AaNKKFTZYzJuEPDjBuvXr5+pYwaAmuPgKQI1+HgAtpafny+743k44OKLL650W/6g5qA+HkIAAKgO6AkAqAEcH/DOO+/IwLxWrVrRhRdeiPMOALUOgYEANcDn88lVCLk7/JNPPglL/aui6lIHAIgmDAcAAADYFHoCAAAAbAqNAAAAAJtCIwAAAMCm0AgAAACwKTQCAAAAbAqNAAAAAJtCIwAAAMCm0AgAAACwKTQCAAAAyJ7+H+P04KX5a5x1AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 600x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "xb, _ = get_batch(valid_ids, batch_size=1, block_size=64, device=device)\n",
    "_, attn_maps = model(xb)\n",
    "head0 = attn_maps[0][0, 0].detach().cpu()\n",
    "\n",
    "plt.figure(figsize=(6, 5))\n",
    "plt.imshow(head0, cmap=\"magma\")\n",
    "plt.title(\"Layer 0, head 0 attention map\")\n",
    "plt.xlabel(\"key position\")\n",
    "plt.ylabel(\"query position\")\n",
    "plt.colorbar()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-008",
   "metadata": {},
   "source": [
    "## Why This Notebook Matters\n",
    "\n",
    "A character-level model is toy-sized, but the mechanics are real. The same masking rule, residual shape discipline, and next-token objective scale up to practical decoder-only language models.\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
