{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Zero-Cost NAS Examples\n", "\n", "In this notebook, we provide examples of how to use zero-cost proxies within NAS algorithms. Specifically, we provide implementations of **random search** and **aging evolution search** with and without zero-cost warmup and move proposal.\n", "\n", "_note: the results in our ICLR paper were produced by a different (internal) AutoML tool that we are not publicly releasing. While it should be possible to get this notebook to exactly match our tool, we haven't done that here. We just provide examples to showcase the possible advantages of using zero-cost proxies._" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "try to create the NAS-Bench-201 api from ../data/NAS-Bench-201-v1_0-e61699.pth\n" ] } ], "source": [ "from nas_201_api import NASBench201API as API\n", "api = API('../data/NAS-Bench-201-v1_0-e61699.pth')\n", "api.verbose = False" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pickle\n", "synflow_proxy=[]\n", "f = open('../results_release/nasbench2/nb2_cf100_seed42_dlrandom_dlinfo1_initwnone_initbnone.p','rb')\n", "while(1):\n", " try:\n", " d = pickle.load(f)\n", " synflow_proxy.append(d['logmeasures']['synflow'])\n", " except EOFError:\n", " break\n", "f.close()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#dicts to map from index to spec or spec to index\n", "#spec is the model description within NAS, in our case we use an encoding [5, 5, 5, 5, 5, 5]\n", "#this is a length-6 vector, with each entry having a value between 0-4 \n", "#this is sufficient to describe any NAS-Bench-201 cell\n", "\n", "_opname_to_index = {\n", " 'none': 0,\n", " 'skip_connect': 1,\n", " 'nor_conv_1x1': 2,\n", " 'nor_conv_3x3': 3,\n", " 'avg_pool_3x3': 4\n", "}\n", "\n", "def get_spec_from_arch_str(arch_str):\n", " nodes = arch_str.split('+')\n", " nodes = [node[1:-1].split('|') for node in nodes]\n", " nodes = [[op_and_input.split('~')[0] for op_and_input in node] for node in nodes]\n", "\n", " spec = [_opname_to_index[op] for node in nodes for op in node]\n", " return spec\n", "\n", "idx_to_spec = {}\n", "for i, arch_str in enumerate(api):\n", " idx_to_spec[i] = get_spec_from_arch_str(arch_str)\n", "\n", "spec_to_idx = {}\n", "for idx,spec in idx_to_spec.items():\n", " spec_to_idx[str(spec)] = idx" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import random\n", "import copy\n", "random.seed = 42\n", "def random_spec():\n", " return random.choice(list(idx_to_spec.values()))\n", "\n", "def mutate_spec(old_spec):\n", " idx_to_change = random.randrange(len(old_spec))\n", " entry_to_change = old_spec[idx_to_change]\n", " possible_entries = [x for x in range(5) if x != entry_to_change]\n", " new_entry = random.choice(possible_entries)\n", " new_spec = copy.copy(old_spec)\n", " new_spec[idx_to_change] = new_entry\n", " return new_spec\n", "\n", "def mutate_spec_zero_cost(old_spec):\n", " possible_specs = []\n", " for idx_to_change in range(len(old_spec)): \n", " entry_to_change = old_spec[idx_to_change]\n", " possible_entries = [x for x in range(5) if x != entry_to_change]\n", " for new_entry in possible_entries:\n", " new_spec = copy.copy(old_spec)\n", " new_spec[idx_to_change] = new_entry\n", " possible_specs.append((synflow_proxy[spec_to_idx[str(new_spec)]], new_spec))\n", " best_new_spec = sorted(possible_specs, key=lambda i:i[0])[-1][1]\n", " if random.random() > 0.75:\n", " best_new_spec = random.choice(possible_specs)[1]\n", " return best_new_spec" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def random_combination(iterable, sample_size):\n", " pool = tuple(iterable)\n", " n = len(pool)\n", " indices = sorted(random.sample(range(n), sample_size))\n", " return tuple(pool[i] for i in indices)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def run_evolution_search(max_trained_models=1000, \n", " pool_size=64, \n", " tournament_size=10, \n", " zero_cost_warmup=0, \n", " zero_cost_move=False):\n", " \n", " best_valids, best_tests = [0.0], [0.0]\n", " pool = [] # (validation, spec) tuples\n", " num_trained_models = 0\n", "\n", " # fill the initial pool\n", " if zero_cost_warmup > 0:\n", " zero_cost_pool = []\n", " for _ in range(zero_cost_warmup):\n", " spec = random_spec()\n", " spec_idx = spec_to_idx[str(spec)]\n", " zero_cost_pool.append((synflow_proxy[spec_idx], spec))\n", " zero_cost_pool = sorted(zero_cost_pool, key=lambda i:i[0], reverse=True)\n", " for i in range(pool_size):\n", " if zero_cost_warmup > 0:\n", " spec = zero_cost_pool[i][1]\n", " else:\n", " spec = random_spec()\n", " info = api.get_more_info(spec_to_idx[str(spec)], 'cifar100', iepoch=None, hp='200', is_random=False)\n", " num_trained_models += 1\n", " pool.append((info['valid-accuracy'], spec))\n", "\n", " if info['valid-accuracy'] > best_valids[-1]:\n", " best_valids.append(info['valid-accuracy'])\n", " else:\n", " best_valids.append(best_valids[-1])\n", " \n", " if info['test-accuracy'] > best_tests[-1]:\n", " best_tests.append(info['test-accuracy'])\n", " else:\n", " best_tests.append(best_tests[-1])\n", "\n", " # After the pool is seeded, proceed with evolving the population.\n", " while(1):\n", " sample = random_combination(pool, tournament_size)\n", " best_spec = sorted(sample, key=lambda i:i[0])[-1][1]\n", " if zero_cost_move:\n", " new_spec = mutate_spec_zero_cost(best_spec)\n", " else:\n", " new_spec = mutate_spec(best_spec)\n", "\n", " info = api.get_more_info(spec_to_idx[str(new_spec)], 'cifar100', iepoch=None, hp='200', is_random=False)\n", " num_trained_models += 1\n", "\n", " # kill the oldest individual in the population.\n", " pool.append((info['valid-accuracy'], new_spec))\n", " pool.pop(0)\n", "\n", " if info['valid-accuracy'] > best_valids[-1]:\n", " best_valids.append(info['valid-accuracy'])\n", " else:\n", " best_valids.append(best_valids[-1])\n", " \n", " if info['test-accuracy'] > best_tests[-1]:\n", " best_tests.append(info['test-accuracy'])\n", " else:\n", " best_tests.append(best_tests[-1])\n", "\n", " if num_trained_models >= max_trained_models:\n", " break\n", " best_tests.pop(0)\n", " best_valids.pop(0)\n", " return best_valids, best_tests" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def run_random_search(max_trained_models=1000, \n", " zero_cost_warmup=0):\n", " \n", " best_valids, best_tests = [0.0], [0.0]\n", " pool = [] # (validation, spec) tuples\n", " num_trained_models = 0\n", "\n", " # fill the initial pool\n", " if zero_cost_warmup > 0:\n", " zero_cost_pool = []\n", " for _ in range(zero_cost_warmup):\n", " spec = random_spec()\n", " spec_idx = spec_to_idx[str(spec)]\n", " zero_cost_pool.append((synflow_proxy[spec_idx], spec))\n", " zero_cost_pool = sorted(zero_cost_pool, key=lambda i:i[0], reverse=True)\n", " for i in range(max_trained_models):\n", " if i < zero_cost_warmup:\n", " spec = zero_cost_pool[i][1]\n", " else:\n", " spec = random_spec()\n", " info = api.get_more_info(spec_to_idx[str(spec)], 'cifar100', iepoch=None, hp='200', is_random=False)\n", "\n", " if info['valid-accuracy'] > best_valids[-1]:\n", " best_valids.append(info['valid-accuracy'])\n", " else:\n", " best_valids.append(best_valids[-1])\n", " \n", " if info['test-accuracy'] > best_tests[-1]:\n", " best_tests.append(info['test-accuracy'])\n", " else:\n", " best_tests.append(best_tests[-1])\n", " \n", " best_tests.pop(0)\n", " best_valids.pop(0)\n", " return best_valids, best_tests" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 10/10 [00:18<00:00, 1.80s/it]\n" ] } ], "source": [ "from tqdm import tqdm\n", "num_rounds = 10\n", "length = 300\n", "ae, ae_warmup, ae_move, rand, rand_warmup = [], [], [], [], []\n", "for _ in tqdm(range(num_rounds)):\n", " ae_best_valids, ae_best_tests = run_evolution_search(max_trained_models=length)\n", " ae.append(ae_best_tests)\n", " ae_warmup_best_valids, ae_warmup_best_tests = run_evolution_search(max_trained_models=length, zero_cost_warmup=3000)\n", " ae_warmup.append(ae_warmup_best_tests)\n", " ae_move_best_valids, ae_move_best_tests = run_evolution_search(max_trained_models=length, zero_cost_move=True)\n", " ae_move.append(ae_move_best_tests)\n", " rand_best_valids, rand_best_tests = run_random_search(max_trained_models=length)\n", " rand.append(rand_best_tests)\n", " rand_warmup_best_valids, rand_warmup_best_tests = run_random_search(max_trained_models=length, zero_cost_warmup=3000)\n", " rand_warmup.append(rand_warmup_best_tests)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "def plot_experiment(exp_list, title):\n", " def plot_exp(exp, label):\n", " exp = np.array(exp) \n", " q_75 = np.quantile(exp, .75, axis=0)\n", " q_25 = np.quantile(exp, .25, axis=0)\n", " mean = np.mean(exp, axis=0)\n", " plt.plot(mean, label=label)\n", " plt.fill_between(range(len(q_25)), q_25, q_75, alpha=0.1)\n", " for exp,ename in exp_list:\n", " plot_exp(exp,ename)\n", " plt.grid()\n", " plt.xlabel('Trained Models')\n", " plt.ylabel('Test Accuracy')\n", " plt.ylim(70,73.6)\n", " plt.legend()\n", " plt.title(title)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_experiment([(ae,'AE'), (ae_warmup,'AE + warmup (3000)'), (ae_move,'AE + move')], 'Aging Evolution Search')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3de3xcdZ34/9d7cmnSJE2vBEjpvdTSFlIILcit/QFCEVoV0LIuUrwgLq4Lrl+F1QUUL9VFZF3cBQQEEVtQ6VYFZLESoFIoKRTS0nubQu9tesmluc3M+/fHOUkn6UwyM5kzt7yfj0cemXP/fDKT857P5Xw+oqoYY4wx3flSnQBjjDHpyQKEMcaYsCxAGGOMCcsChDHGmLAsQBhjjAnLAoQxxpiwLEAYE4GI3C0iv0l1OpJFRB4Xke+nOh0mfViAMBlFRGpFpFlEGkVkj3tTK051uvpKRP5NRLa5+dohIk+nOk3GWIAwmegqVS0GKoDpwB0pTk+fiMgNwPXAJW6+KoFlHlwnN9HnNNnNAoTJWKq6B3gRJ1AAICK3i8gWEWkQkfdF5JMh2xaIyHIRuVdEDrnf2OeEbB8rIq+4x74EDA+9nojMFZG1InJYRKpEZHLItloR+X8i8p6INInIoyJSJiIvuOf7q4gMiZCVs4EXVXVLR75U9eGQc5e659stIjtF5PsikuNuGy8ifxOROhE5ICJPicjgbun6loi8BzSJSK6InC8ir7v5+FBEFoSkZYiIPOem+U0RGR/Le2KyiwUIk7FEZCQwB9gcsnoLcAFQCnwX+I2InBSyfSawAefm/xPgURERd9tvgVXutnuAG0KudSqwCLgVGAE8D/xJRPJDzn01cClwKnAV8ALwb+7+PuBrEbLyBvA5N8BUdtz8QzwO+IEJOCWmjwFf7Ega8CPgZGAycApwd7fjrwM+DgwGyt10/Zebrgpgdci+83H+bkNw/q4/iJBm0x+oqv3YT8b8ALVAI9AAKE5VzOAe9l8NzHNfLwA2h2wb6J7jRGAUzk24KGT7b4HfuK//HXgmZJsP2AnMCknXZ0O2/wH4n5Dlfwb+t4d0fhb4K9AE1AHfcteXAa1AYci+1wEvRzjPJ4B3uv29Ph+yfAewJMKxjwOPhCxfAaxP9XtuP6n7sTpJk4k+oap/FZGLcG7iw4HDACLyOeDrwBh332K6VhXt6XihqkfdwkPHPodUtSlk3+0438jB+Ya+PeTYoIh8iPONvMPekNfNYZYjNqar6lPAUyKSh3OTf0pEVgOHgDxg97GCDj7gQze/ZcB/4pSaStxth7qd/sOQ16fglLIi2RPy+mhPaTbZz6qYTMZS1VdwvvXeCyAio4FfAl8FhqnqYGANTjVMb3bj1L8XhawbFfJ6FzC6Y8GtljoFpxSRMKrarqq/A94DpuLc3FuB4ao62P0ZpKpT3EN+iFMKmqaqg4B/5Pj8hg7Z/CFg7QomKhYgTKa7H7hURM4AinBuhvsBRORGnJtsr1R1O1ANfFdE8kXkfJx2hA7PAB8XkYvdb/n/inPjfr2vGXAbzz8uIiUi4nMbzqcAb6rqbuD/gJ+KyCB3+3i39AROqaEROCIi5cD/6+VyTwGXiMin3QbrYSJS0csxpp+yAGEymqruB34N3Kmq7wM/BVbgVO9MA/4ew+n+AacR+yBwl3vejutswPl2/l/AAZzgcZWqtiUgG/U4jdkf4FSV/QT4iqoud7d/DsgH3sepPvo90NHw/l3gTOAI8BzwbE8XUtUPcNoW/hUnn6uBMxKQB5OFRNUmDDLGGHM8K0EYY4wJywKEMcaYsCxAGGOMCcsChDHGmLCy6kG54cOH65gxY+I6tqmpiaKiot53zACWl/STLfkAy0u6ijcvq1atOqCqI8Jty6oAMWbMGKqrq+M6tqqqilmzZiU2QSlieUk/2ZIPsLykq3jzIiLbI22zKiZjjDFheVaCEJFJQOikJ+OAO4FhwDwgCOwDFqjqrjDHB4Aad/EDVZ3rVVqNMcYcz7MA4T55WgHgDl+8E1iCMyDav7vrv4YTNG4Oc4pmVbUhAIwxJkWS1QZxMbDFHe8mVMfYOcYYY9JMUobaEJHHgLdV9QF3+Qc448scAWa74+l0P8aPM06MH1ioqv8b4dw3ATcBlJWVnbV48eK40tjY2EhxcXaMbGx5ST/Zkg+wvKSrePMye/bsVapaGXaj1xNO4AwydgAoC7PtDuC7EY4rd3+Pw5n0ZHxv1zrrrLM0Xi+//HLcx6Yby0v6yZZ8qFpe0lW8eQGqNcI9NRm9mObglB72htn2FM40jcdR1Z3u761AFc5Ui8YYY5IkGQHiOpy5fAEQkYkh2+YB67sfICJDRGSA+3o4cB7OUMfGGGOSxNNGand2rkuBL4esXuh2gQ3iTOF4s7tvJXCzqn4RZ/L1h0QkiBPEFqoz1r8xxpgk8TRAqDO/77Bu6yJVKVUDX3Rfv44z2YsxxpgUsSepjTHGhGUBwhhjTFgWIIwxxoRlAcIYY0xYFiCMMcaEZQHCGGNMWBYgjDHGhGUBwhhjTFgWIIwxxoRlAcIYY0xYFiCMMcaEZQHCGGNMWBYgjDHGhGUBwhhjTFieDvedNYLBFF1YIdAGsc4brkFoO+pNkpItk/Oiwa6vWxtTl5ZEsrykn7yBnpzWAkQkquBvcW5OgbZUpyY2GoCWI6lORWJkS140AK0NqU5FYlhe0k9ugTen9eSs2SAYgObDqU6FMcakjLVBRKKpqlYyxpj0YAEiEgsQxph+zgJEJBYgjDH9nLVBRBRjzyFj+qK1AV76d2jYk+qU9Gp601HY5E2vmWTLmrwUnwDltyT8tJ4FCBGZBDwdsmoccCcwDJgHBIF9wAJV3RXm+BuA77iL31fVJ7xKa1hWgjB9EQzAzlVOTzhg6MFa2HYw8v5rn4VN/wennAOSnCTGK9AchPwsuKmSRXnJtG6uqroBqAAQkRxgJ7AEOKSq/+6u/xpO0Lg59FgRGQrcBVTifJVfJSJ/VNVDXqX3+AxkcYDQIPgzo+uuL9AK7S0Rtgbh6MH07Ib81qOw9g+di6cDrOnlmJn/BOd9zctUJcR71WuYVTk11clIiKzJS9EIeG15wk+brCqmi4Etqrq92/oiwtflXAa8pKoHAUTkJeByYJGnqQwV68NpqbDtNWg5vivuCft2wLpt4Y9pa4I3H4TG9K/KALgQ4O+pTkWcKr8AEz8GwKp1Wzhr8vjI++YWwPBTk5Qwkw1aA4HO29QAj6rEkxUg5hNycxeRHwCfA44As8PsXw58GLK8w12XPOlegtj9Liz5UthNpwGs7+HYYROh4h9I+7oMYMvOPYwvPzHyDgOHevaQUJ8UDoZRHwVx/sYNO3PgpCz4pmrSRkOzvzMs5JZ4EyBEPf6mLCL5wC5giqru7bbtDqBAVe/qtv4b7vrvu8v/DjSr6r1hzn8TcBNAWVnZWYsXL44rnY2NjRQXFx9bEQzgNJOkp3Fbf83Inc+zavpCgr78LtuONrcysHBA+ANFaCk4AZWcJKSy7xqbWiguSsMAEKNsyQdYXtKFP3Ds3p2bm0djU1PXe1iUZs+evUpVK8NtS0YJYg7wdvfg4HoKeB6nvSHUTmBWyPJIoCrcyVX1YeBhgMrKSp01a1a43XpVVVVFl2ObDkCgPa5zeap+p1NN9O47MPpczp515XG7VFWvYWY21Kvi5CUb6oizJR9geUkHAVUONh1rexsy4mSW//114r3/RZKMAHEdXauXJqrqJndxHuErQ14EfigiQ9zljwF3eJrK7tKximn/Bnhy3rHlGTelLi3GmJQJBJPTRuppgBCRIuBS4Mshqxe6XWCDwHbcHkwiUgncrKpfVNWDInIP8JZ7zPc6GqyTJh0DxHa3tfayH0FBKYy5ILXpMcakRDBJnWg8DRCq2oTz3EPouqsj7FsNfDFk+THgMS/T16N07MW0cxWUjoIpn0x1SowxKZSs25MNtRFOyuZ/6IEGnQAx8qxUp8QYk2Jedy7qYENtdBcMQntTqlPhOLQNnv0S+FudANFyGMrDdjYwxvQjWVHFlJHSaYapTX+FIztg6rVOf/rcgs4Hr4wx/VeS2qgtQBwvjdoePnzDeajtY/ekOiUmHhL6IKJ0W85klpdUc+5S3qfbAkR36dI4HWiDnW/D1LBt+seE/XBn5oc+vAzNiy8XCoeCz23m862Hkh6eCM8klpeUC/jaCAZC2kp93tzKLUCkm6MHYdl3YWc1+JvhlJmR9x1QDANKjl+foR/6sLIpL8YkSFY8B5GZUlyCeOc3sPklmHwVFJ0AYy+MvK9H3xqM95pa/TS1+VOdjLj4g8q+hkgj7GaWTM1Lsio67A6TTlRhw3NOqeHyH/e+vwWIjOUPaNrUZsYjk9PeXTblJdHsDtNdXz8tta/Be8/Ed2ygDQ5vd4aJjoYFiIwVsLuSyQB2h0m0N/4HDmyAkpPjO768Ek69vPf9fLmZ2XhrAPCn48OYxnRjAeI4ffhm19rgzNMw40tw3q2JS1I4vswYrtscLxjM7Ool039YgEik7a+DBmD0+d5dY0AJ5BWSCZP9mPCseslkCgsQ3fX0z7vxL1Abbv5LdUoOdZsgvwhOOsObtIk4k5P7bAitTJasLorG9JUFiGgFA7Dse+BvgfwwszaVlsM5tzjBIScvcdcVobO0kJtvwaEH/kCQxtb07DoaCCqHj7Z1vjYmE1iAOE6Ef94970HzQbjiXvjI8bO4eWZAiVMqMb3yB5VWf3o2/iqkbdqMicS+jkZr8zKQnORP0mNdWaNmVfvGJJbdfbrrfpd54Vuw5a/OPNCjz3Nmcksmsd5K0bLGX2MSywJEb2pfPTaL2+Srkn99684atWSNkW9Mf2FVTMcJucm0N0PzIZh0OZz5OSgcktykiM8ehotB0Bp/jUkoCxA9adjt/I73qei+stJDTCw+GJNYVsXUXWg1RWeAOCk1aRGL37GwKibT3+ytb2H5pgMMLcrHi0HxLUD0pN4NEINSFCCsB1NMrIrJ9CdH2/z801Nvs+NQM8OL87n3/AQ+f+Xy7A4kIpOAp0NWjQPuBMqBq4A2YAtwo6oeDnN8LdAABAC/qlZ6ldauQksQu5xv8UUnJOfSHfIHOvNPW4CImqqmeiYPY5Lm8b/X8sjyrfgDys8+cwbnjR/O+2+/kfDreFaHoaobVLVCVSuAs4CjwBLgJWCqqp4ObATu6OE0s91zJCk4dNOw2wkOiXwyOho5+ZA7wNogYmCFB9OfVG8/yNCifBZePY2Pjh/O0KJ8T66TrK+oFwNbVHU7sD1k/RvANUlKQ3RC67Hrd6eoeik7ey61tAfwx3gnDypRDZ9hw1eY/mRPfQvTykuZNcnb2g3RJDTsichjwNuq+kC39X8CnlbV34Q5ZhtwCKfO5yFVfTjCuW8CbgIoKys7a/HixXGlsbGxkeLiYmc0Vg2CKue8eTNHSiezbrLHQ3d358ulL0GiMy9pJhCMvRqouamRwqL0y0ussiUfYHlJNVXlK8uauXhULtee6pQccn0S9//97NmzV0WqpfG8BCEi+cBculUlici3AT/wVIRDz1fVnSJyAvCSiKxX1Ve77+QGjocBKisrddasWXGls6qqilmzZjnPPbS3wMGt8FodBadfQtkZU+M6Z9wGDnMG5otTZ17SzOGjbTGPR1RTvYJpled6lKLkyZZ8gOUl1Q42teF/6TWmThzHtMpTABhWlM/y115N+P99MvpRzsEpPeztWCEiC4Argc9qhCKMqu50f+/DabuY4X1SOVbFtN0d1nuMh3M7RGLdW40xEeytbwGgrLTA82sl4050HbCoY0FELge+CcxV1aPhDhCRIhEp6XgNfAxYk4S0HlO7HAaPhtKRSb0skLVPT9tjCsb0XUeAOHFQhgcI9+Z+KfBsyOoHgBKcaqPVIvKgu+/JIvK8u08ZsFxE3gVWAs+p6l+8TOtx9q6F8rOSesljsjNAGGP6bs8RtwQxaIDn1/K0DUJVm4Bh3dZNiLDvLuAK9/VWwKNp2aIQaIejdal7gjpLJwWyAoSJpK6xlbqmtqRf98OGIAP2NiT9un2xcV8jA3J9lBZ63/3ensTqThWa9gMKxWXJv36WVi8ZE4k/GOTTD72RutkAV6xMzXX7YPyIIiQJ9woLEOE0uu3pqQgQWVy9lIwu1Sbz1DW20djq55qzRnL2mOSOmLx98wZGT5iU1GsmwvgRyemaawHiOHosQJRYCcIYr+1269QvmDicc8YN62XvxKpp2MI0jx82y2S9VnaL9MMpzRr3Ob9TUsWUne0PYG0QJrxjja7e98oxsYnmbrRJRP5DRE7zPDXpQBUa9jjjIRUMTkECrARh+peOAJGMbpsmNtEEiDNwBtV7RETeEJGbRGSQx+lKrca9UHxCaqp7sriKyZogTDi7jzQzuDCPwvz+V1mR7noNEKraoKq/VNWPAt8C7gJ2i8gTIhK2y2pmc9sgUtJAbUz/s7e+lROT8FSwiV1UbRAiMldElgD3Az/FmdvhT8DzPR6cqRr3pS5AZHUbhBUhzPF2H2m2AJGmounFtAl4GfgPVX09ZP3vReRCb5KVQm3NUL8DPnJlaq6fxVVMFh8S44G/bWbDntQ93NVQ30LJxncSdr4dh5qT3nvJRCeaAHG6qjaG26CqX0twelLv4GZnuO8RqeobncUBwvTZ3voWnnxjO6cMLWTIQG8mielNWxBa/IGEnW9qeSmzJo1I2PlM4kQTIH4hIv/SMS2oiAwBfqqqn/c2aSmyb53zO1UBIotLEFaA6LvXNh0A4N5rzmDM8KKUpMEZIjs1kzya5Iq2BNE5Z7SqHhKR6R6mKbUObIDcQig9JTXXz+I2CONQVf62fh9NrbF/C//ze7s4ZWgho4cN9CBlxnQVTYDwicgQVT0EICJDozwuM+3fAMNP7dt80EXD47/RZ2mAsGE2jtm0r5F/WxL/6PU3njcmKePwGBPNjf6nwAoR+R1OBfk1wA88TVUqHdwKYy6I/3gRyPF+lEWTuQ66o5b+5OrT+chJJTEff0KJ98M8m8wxtCifHJ83Xxh6DRCq+msRWQXMdld9SlXf9yQ1qaYKrQ1QUBr/ObK0BNBXVoA45khzOwCjhw204SVMn/hEyMvx7p4TVVWRqq4Vkf1AAYCIjFLVDzxLVaoE/eBvgfw+jJTYD4euMrGpdwPEoCSM52+yW65HJYcO0TwoN1dENgHbgFeAWuAFT1OVKq1ub978PvQOydLJfvrKChDH1Lc48x4MKsjepjyTHLk5KQ4QwD3AOcBGVR0LXAy84WmqUqXVffioLwHCShCmF/XN7QzMzyHXw6oB0z94Wb0E0QWIdlWtw+nN5FPVl4Hs7ATdloAA0ZfeT1nMejEdU9/SnpTpIk1284l4XsUUTRn3sIgUA68CT4nIPqDJ01SlSkcJIs9KEMY79c1+BhVYgDDxG5DrY3ASnqSPJkDMA5qB24DPAqXA97xMVMokoorJShBhWfnhmPqWdgYVWvtDqByfUJSf/L9JjkhGBusBucmpnuzxHXFnk/uzqs4GgsAT0Z5YRCYBT4esGgfcCZQDVwFtwBbgxtAntUOOvxz4TyAHeERVF0Z77biFa6T25UCu2+/cl+v89KS37f2U1TAdU9/cnrQ5hTNFrk9SMh+ECDYPRQ96DEOqGgCCIhLzgwGqukFVK1S1AjgLOAosAV4Cpqrq6TgTEd3R/Vg3MP0CmAOcBlyXlBnt2roFCPE5s8oVlDo/+UVOsOjpx55wNb040txuXVy7sSfD01M0X3cbgRoReYmQtocYR3K9GNiiqtuB7SHr38B5Mru7GcBmVd0KICKLcaq6vH1Ar7OKqdgpCRTbCJOJYnNBOFSV+ha/VTF143Fbq4lTNJ/SZ92fvpgPLAqz/vN0rYbqUA58GLK8A5gZ7sQichNwE0BZWRlVVVVxJbCxsZGt29cyDnh1TS1B356MbU9obGyM++/gFQUCwdiDRHNTIzXVKxKfoCTryEeLXwkElaMHdlFTvT/VyYqLF++JTyQlQSId/1fi5UVeohlqI+p2h3BEJB+YS7eqJBH5NuAHnurL+VX1YeBhgMrKSp01a1Zc56mqqmJc/lDYnsuFZ0+HvAIYOLQvSUuZqqoq4v07eKWlPdA5xEQsnKGlz/UgRcnVkY/dR5rhb69z6sQJTDvj5FQnKy5evCclBbkMTEEjdTr+r8TLi7z0+o6IyDbCdEJR1XFRXmMO8Laq7g055wLgSuBiDd9BficQOt72SHedt9oanS6uIjamkumTjXsbuP0PNbQFggD429rIXbEcv7tcmoE9Z7zkszaItBRNyA59KK4AuBaI5av1dYRUL7m9k74JXKSqRyMc8xYwUUTG4gSG+cA/xHDN+LQ2hDRQ2wfWxG/p6l0caGzlsiknAnDwwF6GDnem1SzI83Hm6MGpTJ4xUYmmiqmu26r73dFd7+ztWBEpAi4Fvhyy+gFgAPCS23PhDVW9WUROxunOeoWq+kXkq8CLON1cH1PVtVHlqC9aG7v2YDImDoGgMyHQeROG8+2PTwagpvow0yonpzhl6ctKEOkpmiqmM0MWfTglimhHgW0ChnVbNyHCvruAK0KWnweej+Y6CdPWCPnuTF0WIBIqE56DeOatD/ntyr4PUhwIKgeb2rhk8gkJSFX/YL2Y0lO0EwZ18OOM6vppb5KTYm1WgujP/rZ+H+2BIDPG9r1zQklBHhdMtG7S0bLnINJTNFVMs3vbJ2u0NUGR+09tASKhMuE5iB2Hm5kxdih3XTUl1Unpd6wEkZ6imQ/ihyIyOGR5iIh839tkpYiVIPqtlvYA+xtaKR9cmOqk9DuClSDSVTR3wTmhYyWp6iFC2gqySlsT5HbcIOwDm0jp3gax+0gLACOHDExxSvoh+1dLW9EEiBwR6ZwlXUQKcXohZZ9A27GB+awEkVBpHh/YeagZgPIhVoJINuvBlL6iaaR+ClgmIr9yl28khlFdM4q/FXLcMdZt6tB+Zcch55GckVbFlHQWINJXNI3UPxaRd4FL3FX3qOqL3iYr+SQYAA06AcJKDwmXTjPKbd3fyJpd9V3Wrdhax8D8HAYPTP8nnHN9wpAkTBbT0/VHFCeuEsHiQ/qK5jmIsUCVqv7FXS4UkTGqWut14pJJ1B0nKHeABYgs9/3n1rG2W4AAmH7K4IxoLM3xCb4Ud/tJ9fVNckRTxfQ74KMhywF33dmepChFfEE3QFgJwhPpUn4IqrJ1fxNzzziZL5w/tsu2oUWp+1YeC7s5m2SJJkDkqmpbx4KqtrkjtGaVrgHC/gGz1f6GVprbA0w+qYQTSwtSnZy45Njn0yRJNF+V94vI3I4FEZkHHPAuSalxLEDkWYDwQLo0QdTWOXNejR7Wh3nHUyzHShAmSaIpQdwMPCUiD+D0WP4QuN7TVKVAZxuEVTFlte0HnN5KY4Zl7vMO9v3FJEs0vZi2AOeISLG73CgiZwNbvE5cMlkbhNPTqKHV78m52915EFKttq6J4gG5GdPeEI5VMZlkiWUKp1HAdSIyHzhC13kiMl5ngMjtvwEiqNDcFkh1MhKuPRDkh8+v470dRzjQ2Mr4EcUZ0VspEqtiMsnSY4AQkTE4E/5cB7QDo4HKbOviCqEliP7bzTWYLg0FfdTQ0s5/LtvE9jqnOunI0Xa2HzzKrEkjmHpyKRdn8DDcIjZukUmeiAFCRFYAg4DFwNWquklEtmVjcACrYoLMDhCqyo2Pv8XGPY0EVfH5hOmnDMYnQsGgHP7x3NHMTaM5oH0i5MZRErAuriaZeipB7AXKgTJgBLCJ9OnOnnCibt17Pw4QGRwfONjUxrrdDZw3YRinlpVw4cQRnHbyoFQnK6KCPB8lNi+1SXMRA4SqfkJESoFPAXeLyERgsIjMUNWVSUthklgbRGYHiE37GgH4hxmjqBzT9wl/vGbjD5lM0GMbhKoeAX4F/EpETsCZSe5nIjJKVU9JRgKTxaqYMruKact+J0BMOKE4xSmJjsUHkwmivhOq6j5VfUBVzwPO9zBNKeELug+L5/bfJ6kzOUBs3tfI8OJ8BqdwELtYiE2CYDJAXF+VVXV7ohOSUsFgSIDIzOEXEiFzwwNs2deUMaUH6LffQUyG8awuRUQmicjqkJ96EblVRK4VkbUiEhSRiM9SiEitiNS4x1Z7lU4ANIB0BIicfhwg0uNZtpjtrW9hy/5GTi0rSXVSjMkq0Qz3fZ6q/r23dd2p6gagwt0/B9gJLAEG4jR8PxRF+maralLGfTrWSJ2dk+VFI9OqmGp2HGFvfQsvvb8XgE9OL09xiqJnJQiTCaJ5kvq/gDOjWNeTi4EtoVVT6fawT2eAyOu/JYhMChAHm9r48pOrCLhpnn/2KZycQbPBWRuEyQQ9PSh3Ls48ECNE5OshmwYBOTFeZz6wKMZjFPg/EVHgIVV9OEI6bwJuAigrK6OqqirGyziXKm9tQfHxysoa8MWavfTS2NgY19/BH0y/ANHc1EhN9Yrj1r++y09AlVsq8ikb6KNs4AFqqutSkMLodM9Hji9zQ0S8n690ZHnpWU8liHyg2N0ntHK3Hrgm2gu4c0fMBe6IMW3nq+pOt3vtSyKyXlVf7b6TGzgeBqisrNRZs2bFeBkg0M4Hmx9DcvOZde6ZUDgk9nOkkaqqKuL5O+xraEm7ZyFqqlcwrfLc49Y//b9rGFp0iH+cc35GPFPQPR/DivLJzcnM7tTxfr7SkeWlZz09KPcK8IqIPN5RNSQiPqBYVY+frzGyOcDbqro3loSp6k739z4RWQLMAI4LEIniC7Y7z0Bk7Pe6vkt1cNjf0MoPnl/H4aOd81PR3NRCYc3xz2Vu3d/EJZPLMiI4hJOp6Tb9SzRtED8SkZtxphp9CxgkIv+pqv8R5TWuI8bqJREpAnyq2uC+/hjwvVjOEavOAJFm/7jNbQFa/bGNsBoIapebbKb4xcubWVV7iMoxx0pwue1NlIR5tmHG2AFcWzkymclLqDT7mBkTVjQB4jRVrReRzwIvALcDq4BeA4R7c78U+HLIuk/iNHKPAJ4TkdWqepmInAw8oqpX4Iz/tMRtyM4Ffquqf4kta7HxBdudh+TSrATRFgjS6o+t/6lCzMekysa9DXz5yVW0+oMEgsoNHx3NP82a0LndqZqpSGEKvQ4344sAAB+4SURBVJFunTSMCSeaAJEnInnAJ4AHVLXdbTjulao2AcO6rVuC0921+767gCvc11uBM6K5RqL4ND1LEJrqeh+PvVCzhzZ/kH88ZxSDCvK45qzMLRVEK70+YcZEFk2AeAioBd4FXhWR0TgN1VlFgv60bINIw45FCaOqvLxhHzPGDu1Sash66fURMyaiaKYc/Tnw85BV20VktndJSg1fsB3y068EkUnPJvRkf0MrT7xe22Xq0foWP7uPtPD588emMGXJl7kdXE1/E82T1GXAD4GTVXWOiJwGnAs86nXikqmziinN/nmzJD7w0vt7+d2qHQwtyu/8C+fl+Lhi2olcOrkspWlLtjT7DmJMRNFUMT2OM+T3t93ljcDTZFuACPohpzjthvrOljaI2romSgvzeOFfLkh1UlLO4oPJFBHvhiLSETyGq+ozQBBAVf04XV6zii/YlnaN1Kqa0SOshtped5TRwwamOhlpwXowmUzR09fljqeTmkRkGO5o0CJyDnDE64QlmwT97kB96fPPm00N1Nvrmhg7vCjVyUgL6fMJM6ZnPVUxdXyOvw78ERgvIn/HeX4h6qE2MoXTBpGXViWIbGmgPnK0nUNH260E4bKnqE2m6ClAhA7StwR4HidotAKXAO95nLakSsehNjI9QKgqDS1+1u1xekWPHmYlCCCdPmLG9KinAJGDM1hf949z9n0N1GCatkGkOgWw5J2dvLhmT1zH7m9sZceh5s7lsRYggLT6iBnTo54CxG5V9XT8o7Tx4zHktx+FvELS6etdqgNEY6ufny/bRGlhHieVxj5PxtjhRXxiejkDcnwMK86nfEjmzNeQCHk5PnJ8zudJBArynGHk8zN0FFfT/0TTBpH9zv8627ZuYmzFZ9Pq612yq5hqdh5h9YeHO5c3723kaFuA//7smUw+aVBS05INCvNyKMx3gkKOCKWFeSlOkTGx6SlAXJy0VKTa+beyPVDF2MGjkhogWv0Bgj2MqRf61HEy3PviBtbvaeiy7pxxQy04xCmNvmsYE5ee5oM4mMyEpIUk/0cfaW5PeTVSqCPN7Vw2pYw75kzuXDcgz6pDjOmvonmSuh9JXoBo8wfTKjiAEyAGD8zvrBYxfWPdWU2ms6+HoZI4zEZbkquPeuMPBjnaFmBQgX1nSBSLDybT2d0glM+bb85HmtsJdHss2t9T40MKNLb4ASgpsIbURLH4YDKdBYhQubF35YxGeyB4XIBIN/WdAcI+EoliYy6ZTGdVTJ3EfQ4i8dKtrSGchpZ2AAZZCSJhfBYfTIazAAHOGEy+3H5dadxgJYiEsxKEyXQWIJIgEwbtPtLslCAsQCSGhQaTDSxAJEP6x4fOEsQge9o3MSxCmCzgWYAQkUkisjrkp15EbhWRa0VkrYgERaSyh+MvF5ENIrJZRG73Kp3JkAHxobMNwkoQiWHPQJhs4NndQFU3ABUAIpID7MQZNnwg8CngoUjHuvv/ArgU2AG8JSJ/VNX3vUqvVzJlytD6Fj8Dcn0MyLWH5BLBwoPJBsn6ungxsEVVt3es6KUBbwawWVW3uvsuBuYBGRcgMkVDS7v1YEoga6A22SBZAWI+sCiG/cuBD0OWdwAzw+0oIjcBNwGUlZVRVVUVVwIbGxvjPrY3/iQ/A9Hc1EhN9YqYjtmxu5U8DcZ8nNfiyUs6EOgc6hu8/Xwlm+UlPXmRF88DhIjkA3OBO7w4v6o+DDwMUFlZqbNmzYrrPFVVVcR7bE8CQeVAY2vCz9uTmuoVTKs8N+y2/Q2t7DzcfNz6o76NjBjiY1plxGahlOgpL+msIDeH0oHHSmRefb5SwfKSnrzISzJKEHOAt1V1bwzH7AROCVke6a7LOKlogzjartSFCUrb645y2zOraWkPP8zHJZNP8Dpp/YfVMJkskIwAcR2xVS8BvAVMFJGxOIFhPvAPiU5YMngZHg41tfGlJ6s7n2EACAadmeB4eXnYY04qLeCbl08i13d8B7ZJJ5Z4ltb+xpogTDbwNECISBFOT6Qvh6z7JPBfwAjgORFZraqXicjJwCOqeoWq+kXkq8CLOHNjP6aqa71Mq1e8LEA8V7ObDw8284mKk8lzp7EUgeCRvYwbN+64/UXg/InDOaHEmzGnzDEWH0w28DRAqGoTMKzbuiU43V2777sLuCJk+XngeS/TlwlUlbW76mluCxBQRRX3t7J09S5OH1nKHVdM7nJMTfVBpp01MkUpNmDPQZjsYE9Feayvw2z8dd0+vvO/ayJuv/G80/p0ftOVCEgCvv9bgDDZwAKEx/pSxRRU5ZHXtjJ2eBHfunwSPhF8PsEnzg0oP8fHuBFFiUusYUTxAHuGwRiXBYg09vqWOmrrjnLPvClMHzUk1cnJeiL2gJsxoWywPo/1pQTx8vp9FA/IZfZHrPtpMli1kDFdWYDwWLxtEP5gkNc2HeC8CcM6eygZb+VYgDCmC6tiSpHlmw/wb8/WRJyKVHGewr7o1BHJTVg/5rMp4IzpwgKExyJVMb374WECQeWz54yKeOzA/FwutACRNBYfjOnKAoTHIlUw7TrczImlBfzTrAlJTY+JLMcihDFdWOW2xyKNxbSnvoWTSu2J5nRijdTGdGUBwmORShC7D7dwUmlhUtNiemYBwpiuLECkQKs/QF1TGydaCSKtWBWTMV1ZG4THwtUw7T3iDMVtVUzeyfUJpYWxzZBnAcKYrixAeC1MgNhd70zYYwHCO7k5PnLt+RFj+sT+gzzW/UG5jXsbeOiVrQBWxeShXCsNGNNnFiA81r2K6dm3d7JhTwMX2LwMnsrNsQBhTF9ZFVOSvbfjMJVjhnDvtWekOilZLdyMecaY2Nh/kcdCCxANLe1s3d/E6SMHpyw9/YGINTgbkwhWgvBIS3sAgMYWP+/tOEwQZePeRhQ4Y2RpahOXJQbk+mLuqZSO2tvb2bFjBy0tLalOSlRKS0tZt25dqpOREP0pLwUFBYwcOZK8vOj/ZyxAeKShxU9Qlcdf38Zjf6/tXD8g18dpJw9KXcKyiIhkxfwNO3bsoKSkhDFjxmREfhoaGigpKUl1MhKiv+RFVamrq2PHjh2MHTs26nNagPBIR++luqY2Sgvz+I9rTgdgePEABubbnz0RsqUaqaWlJWOCg8lMIsKwYcPYv39/TMfZncorbuPD0bYAgwpzOeMUa3dItCyJD4DNZGe8F89nzLNGahGZJCKrQ37qReRWERkqIi+JyCb3d9i5NEUkEHLsH71KpxdUjz39cLTNbyUGj9jYScZ4y7MAoaobVLVCVSuAs4CjwBLgdmCZqk4ElrnL4TR3HK+qc71KpxdCn3042hqgKD8ndYnJYhYgEicnJ4eKigqmTp3KVVddxeHDh7tsr6ioYP78+V3WLViwgPLyclpbnaFjDhw4wJgxYwCora2lsLCQ6dOnM3nyZGbMmMHjjz+ejKyYBEpWN9eLgS2quh2YBzzhrn8C+ESS0pA0oV1bj7YFrAThkWyqYkq1wsJCVq9ezZo1axg6dCi/+MUvOretW7eOQCDAa6+9RlNTU5fjcnJyeOyxx8Kec/z48bzzzjusW7eOxYsXc//99/OrX/3K03yYxErWnWs+sMh9Xaaqu93Xe4CyCMcUiEg14AcWqur/epzGhAmdA6Kpzc/o/IEpTE32ysYSxHf/tJb3d9Un9JynnTyIu66aEvX+5557Lu+9917n8qJFi7j++utZt24dS5cu5aqrrurcduutt/Kzn/2ML33pSz2ec9y4cdx3333867/+KzfeeGPsmTAp4XmAEJF8YC5wR/dtqqoiEmnKhNGqulNExgF/E5EaVd0S5vw3ATcBlJWVUVVVFVc6Gxsb4z62u475pAHqm5ppqW+npnpFQs4djeamxqRez0s95SWTxlvq6fNVWlpKQ0MDAO1t7QQCgYReu72tvfP8PWloaCAQCPDiiy9y/fXXdx6zaNEili5dyqmnnspDDz3EFVdcQUNDA+3t7YwYMYKZM2fyy1/+kjlz5qCqNDQ00NjYSDAY7HLdiRMnsn79+qjSkiyBQCCt0tMX0eSlpaUlpvtcMkoQc4C3VXWvu7xXRE5S1d0ichKwL9xBqrrT/b1VRKqA6cBxAUJVHwYeBqisrNRZs2bFlciqqiriPba7Vn+Aw0fbAWh7+WVGlp/MtMqJCTl3NGqqVzCt8tykXc9LkfLiE2FEyYAUpCg+PX2+1q1b19l//ftXVyQxVcc0NzdzwQUXsHPnTiZPnsy8efPIycmhurqaE044gdNOO41Jkybx1a9+lSNHjjB69Gjy8vIoLCzkzjvvZN68eVx99dWICCUlJRQXF+Pz+br0y/f7/QBp9dxBf3kOokNBQQHTp0+P+pzJaIO4jmPVSwB/BG5wX98ALO1+gIgMEZEB7uvhwHnA+x6nM2E6apgCQaWlPWiN1B7IoMJDRuhog9i+fTuq2tkGsWjRItavX8+YMWMYP3489fX1/PGPXTsVTpw4kYqKCp555pker/HOO+8wefJkz/JgEs/TACEiRcClwLMhqxcCl4rIJuASdxkRqRSRR9x9JgPVIvIu8DJOG0TGBIgOzW1OVYE1UkcvP8fHwPyczh+f0GX52I/9Tb0wcOBAfv7zn/PTn/6UtrY2nnnmGWpqaqitraW2tpalS5fy+9///rjjvv3tb3PvvfdGPG9tbS3f+MY3+Od//mcvk28SzNP/MlVtAoZ1W1eH06up+77VwBfd168D07xMm5c6ShBNbU6ReqCVIKJWUpDbZaIfnwglBZk/3lImmT59Oqeffjo/+tGPKC8v5+STT+7cduGFF7J+/Xp2797d5ZgpU6Zw5pln8vbbb3eu27JlC9OnT6elpYWSkhK+9rWvsWDBgmRlwySAfQ3zQNCNEE2tFiBikWezwKVMY2Njl+U//elPANx1111d1ufk5LB582ZKSkqOe67h2WePVRSMGTOG5uZmbxJrksYChAeOPUXtVjENsD9zTwbm51CQl5OV3VaNyWR25/JAx3MQHQHCGql7lp/rI89KDsakHfuv9EDoOExgjdS9ybPZ34xJS/af6QENOr87q5isBBGRCPisz6oxackChAc6xnK1RureWenBmPRl/50e0JC5IACKrJE6opwcKz0Yk64sQHhAgYaWdpatc0YRGZBrf+ZI7G+THmy4b+/s3r2bK6+8EoCVK1dSUVFBRUUFZ5xxBkuWLOnc7y9/+QuTJk1iwoQJLFy4sHP9tm3bmDlzJhMmTOAzn/kMbW1tALS2tvKZz3yGCRMmMHPmTLZv3w5ATU1Nwp43sf9OD6gq/1O1hQ17GygbNKBfzxYmPfwU5OYwINeq39JBugz3fffddyclkHSMC5UM9913X+dot1OnTqW6uprVq1fzl7/8hS9/+cv4/X4CgQC33HILL7zwAu+//z6LFi3i/fedwSO+9a1vcdttt7F582aGDBnCo48+CsCjjz7KkCFD2Lx5M7fddlvnMyvTpk1jx44dfPDBB31Ou9V9JFhzW4CAKut2NzC1fBA/ufr0VCcpZQQYVjwga+aOTooXboc9NYk954nTYM7C3vdzpfNw32+99RY/+tGPePbZZ1m6dCnz58/nyJEjBINBTjvtNLZu3covf/lLHn74Ydra2pgwYQJPPvkkAwcOZMGCBRQUFPDOO+9w3nnncfDgQXJzc1mzZg379u3jscce49e//jUrVqxg5syZnYGquLi480HC3//+9/z5z3/m8ccf7zxfdXU19fX13HfffZ0lhVB/+MMf+P73vw84Q5l0aGlp6fzyuHLlSiZMmMC4ceMAmD9/PkuXLmXy5Mn87W9/47e//S0AN9xwA3fffTdf+cpXWLp0KXfffTcA11xzDbfccguqiohw1VVXsXjxYr75zW/G/bcGK0EkVDCo1Le00x4IsmV/I6eXD2ZYceaMOJpoA3JzLDhkmEAgwLJly5g799gkjk8//TTz58/nuuuuY9GiRV32HzVqFOeffz5PPvlkr+c+88wzWb9+fZ/SN336dFavXg3Aa6+9xtSpU3nrrbd48803mTlzJgCf+tSneOutt3j33XeZPHly5zdugB07dvD6669z3333AXDo0CFWrFjBz372M+bOncttt93G2rVrqamp6bxOT2pra1m5ciXPPfccN998My0tLV22b9u2jSFDhjBgwLH7wJtvvsmUKVOYNm0aDz74ILm5uezcuZNTTjmlc5+RI0eyc+dO6urqGDx4MLm5uV3WA12Oyc3NZdCgQdTV1QFQWVnJa6+9FtsfNwwrQSRQe9Dp3/rhwWZa/UEmlhWnOEV9J8CgwvjGQrKH3+IQwzf9RGpubqaioqJzuO9LL70UgOrqaoYPH86oUaMoLy/n85//PAcPHuwyrPQdd9zBvHnz+PjHP97jNUIn0gpVU1PD9ddfD8CePXvIz8/n/vvvB2DZsmUMG3ZsOLfc3FzGjx/PunXrWLlyJV//+td59dVXCQQCXHDBBQCsWbOG73znOxw+fJjGxkYuu+yyzuOvvfZacnKOVWvOmTMHEWHatGmUlZUxbZozBNyUKVOora2loqLn4dc//elP4/P5mDhxIuPGjWP9+vVdjtm9ezcjRozocszMmTNZu3Yt69at44YbbmDOnDk9XiMeJ5xwArt27erzeew/OIH8AecfYONeZ9KObAgQeTk+CvJy4vqx0kPmSOVw39OmTWP16tWsXr2am2++me9973udy6HBocOFF17ICy+8QF5eHpdccgnLly9n+fLlnQFiwYIFPPDAA9TU1HDXXXd1+VZfVFTU5Vwd3+x9Pl+Xb/k+n6+znSK0DbF7CaF7+2L35cLCwuOO6TB58mSKi4tZs2YN5eXlfPjhh53bduzYQXl5OcOGDePw4cOdaelYD3Q5xu/3U19f3/n3amlpobCwMOx1Y2EBIoE6AsSmvY3k+oQxw4p6OSL95Vsvo34lE4b7vuCCC7j//vs599xzGTFiBHV1dWzYsIGpU6cCzsQ5J510Eu3t7Tz11FN9vl5ZWRnr1q0jGAx26XUE8Lvf/Y5gMMiWLVvYunUrkyZN6rL91FNPpba2tnN527ZtnTf77du3dwbfs88+m02bNrFt2zba2tpYvHgxc+fORUSYPXt259/8iSeeYN68eQDMnTuXJ554AnDaRi666KLOALVx48bOv0dfWBVTnPyB4HHrOqqY9ta3UDaoICuqWCxA9D/pPtz3zJkz2bt3LxdeeCEAp59+Onv27Om8Od5zzz3MnDmzczrUvk4punDhQq688kpGjBhBZWVll5FvR40axYwZM6ivr+fBBx+koKCgy7FFRUWMHz+ezZs3M2HCBJYvX87ChQvJy8vD5/Px3//93wwfPhyABx54gMsuu4xAIMDnP/95pkxx5hH/8Y9/zPz58/nOd77D9OnT+cIXvgDAF77wBa6//nomTJjA0KFDeeSRRzqv+/LLL/da5RcNiVQvmIkqKyu1uro6rmNjmXJUVdnX0Bpx+78sfof6Zj+/uvHsHs9TWpjnyXMAr7zyChdddFFCzpXqLrqJnAo2lXqbcjSTZlrrb9N0RrJgwQKuvPJKrrnmmh73W7JkCatWrersyeSVjry0trZy0UUXsXz58s7G7Q7hPmsiskpVK8Od00oQcegtph5pbmdwYX6v5/GJeHYDTvWN3Rjj+OQnP9nZuygZPvjgAxYuXHhccIiHBYg49FbmOtLczqihA3vZy+ZVNiaTxfJA3xe/+EXvEtLNxIkTmThxYkLOZRXMHqhv9lMaRddQmyDHdMimql6TnuL5jFmAiENPf2h/MEhja5QBwooQBigoKKCurs6ChPGMqlJXV3dcI3pvrIopDsEe/o/rm50ubL0FCAsNpsPIkSPZsWMH+/fvT3VSotLS0hLzjSZd9ae8FBQUMHLkyJjOaQEiDtpDK0R9czvQ+9PH1ohsOuTl5TF27NhUJyNqVVVVTJ8+PdXJSAjLS888q2ISkUkisjrkp15EbhWRoSLykohscn8PiXD8De4+m0TkBq/SGY+eagKOuAGitxKE1S4ZY9KdZwFCVTeoaoWqVgBnAUeBJcDtwDJVnQgsc5e7EJGhwF3ATGAGcFekQJJuog0QVoIwxqS7ZDVSXwxsUdXtwDzgCXf9E8Anwux/GfCSqh5U1UPAS8DlSUlpH9W3WAnCGJMdktUGMR/oGCe4TFU7ntPfA5SF2b8c+DBkeYe77jgichNwk7vYKCIb4kzjcOBAnMce58wfJ+pMcUloXlIsW/KSLfkAy0u6ijcvoyNt8DxAiEg+MBe4o/s2VVUR6VPfPlV9GHi4L+cAEJHqSI+bZxrLS/rJlnyA5SVdeZGXZFQxzQHeVtW97vJeETkJwP29L8wxO4FTQpZHuuuMMcYkSTICxHUcq14C+CPQ0SvpBmBpmGNeBD4mIkPcxumPueuMMcYkiacBQkSKgEuBZ0NWLwQuFZFNwCXuMiJSKSKPAKjqQeAe4C3353vuOi/1uZoqjVhe0k+25AMsL+kq4XnJquG+jTHGJI6NxWSMMSYsCxDGGGPC6vcBQkQuF5ENIrJZRI57qjvdiUitiNS4w5lUu+uiGs4k1UTkMRHZJyJrQtaFTbs4fu6+T++JyJmpS/nxIuTlbhHZGTLczBUh2+5w87JBRC5LTarDE5FTRORlEXlfRNaKyL+46zPuvekhLxn33ohIgYisFJF33bx8110/VkTedNP8tPtoASIywF3e7G4fE/NFVbXf/gA5wBZgHJAPvAuclup0xZiHWmB4t3U/AW53X98O/DjV6YyQ9guBM4E1vaUduAJ4AWcg3HOAN1Od/ijycjfwjTD7nuZ+1gYAY93PYE6q8xCSvpOAM93XJcBGN80Z9970kJeMe2/cv2+x+zoPeNP9ez8DzHfXPwh8xX39T8CD7uv5wNOxXrO/lyBmAJtVdauqtgGLcYYCyXTRDGeScqr6KtC9d1qktM8Dfq2ON4DBHc/TpIMIeYlkHrBYVVtVdRuwGeezmBZUdbeqvu2+bgDW4YxkkHHvTQ95iSRt3xv379voLua5Pwr8f8Dv3fXd35eO9+v3wMUS4yBw/T1ARD2kRxpT4P9EZJU77AhEN5xJuoqU9kx9r77qVrs8FlLVlzF5caslpuN8W83o96ZbXiAD3xsRyRGR1TgPGL+EU8I5rKp+d5fQ9Hbmxd1+BBgWy/X6e4DIBuer6pk4T6zfIiIXhm5Up3yZkX2ZMzntrv8BxgMVwG7gp6lNTmxEpBj4A3CrqtaHbsu09yZMXjLyvVHVgDojZI/EKdl8xMvr9fcAkfFDeqjqTvf3Ppzh1GcQ3XAm6SpS2jPuvVLVve4/dBD4JceqKtI+LyKSh3NDfUpVOx50zcj3JlxeMvm9AVDVw8DLwLk4VXod4+qFprczL+72UqAuluv09wDxFjDR7QWQj9OQ88cUpylqIlIkIiUdr3GGJFlDdMOZpKtIaf8j8Dm3x8w5wJGQ6o601K0e/pM47w04eZnv9jIZC0wEViY7fZG49dSPAutU9b6QTRn33kTKSya+NyIyQkQGu68LcUapWIcTKK5xd+v+vnS8X9cAf3NLftFLdct8qn9wemBsxKnL+3aq0xNj2sfh9Lh4F1jbkX6cesZlwCbgr8DQVKc1QvoX4RTv23HqTr8QKe04PTh+4b5PNUBlqtMfRV6edNP6nvvPelLI/t9287IBmJPq9HfLy/k41UfvAavdnysy8b3pIS8Z994ApwPvuGleA9zprh+HE8Q2A78DBrjrC9zlze72cbFe04baMMYYE1Z/r2IyxhgTgQUIY4wxYVmAMMYYE5YFCGOMMWFZgDDGGBOWBQiTVURkWMgInXu6jdiZ38uxlSLy8wSlY4GIPBBhvYrIJSHrPuGuu6b7/j2cf5aI/Lmv+xjTk9zedzEmc6hqHc7wCYjI3UCjqt7bsV1EcvXYuDXdj60GqpOQzBqchzL/6i5fh/MsizFpxUoQJuuJyOMi8qCIvAn8RERmiMgKEXlHRF4XkUnufp3fuN35Ah4TkSoR2SoiXws53z+64/KvFpGHRCTHXX+jiGwUkZXAeT0k6TVghojkuWMETcB5gKvj/Be7aatx0zDAXX+5iKwXkbeBT4XsX+Tut9I97rgRiUXkopCS1DsdT+Ab0xMLEKa/GAl8VFW/DqwHLlDV6cCdwA8jHPMR4DKccXrucm/ok4HPAOepM2haAPisO3TDd3ECw/k48wpEojilh8twhmTuHN5FRAqAx4HPqOo0nFL+V9z1vwSuAs4CTgw537dxhlGYAcwG/sMdeiXUN4Bb3DRfADT3kD5jAAsQpv/4naoG3NelwO/Emf3tZ8CUCMc8p868AAdwBqYrAy7GuUG/5Q67fDHOUAczgSpV3a/O3CJP95KexTjVTPNxhunoMAnYpqob3eUncCYj+oi7fpM6wx/8JuSYjwG3u+mpwhliYVS36/0duM8tCQ2OVM1mTChrgzD9RVPI63uAl1X1k+4cAVURjmkNeR3A+X8R4AlVvSN0RxGJaVImVV0pItOAo6q6UWKbx6U7Aa5W1Q3d0tQ5D4iqLhSR53DGIfq7iFymquv7clGT/awEYfqjUo4NibwgxmOXAdeIyAnQOU/zaJxJaC5ye1HlAddGca7bgX/rtm4DMEZEJrjL1wOv4FSLjRGR8e7660KOeRH4Z3fkUkRkevcLich4Va1R1R/jjGLs6TwCJjtYgDD90U+AH4nIO8RYilbV94Hv4Mzi9x7OrF4nqTO89d3ACpzqnHVRnOsFVX2527oW4EacKrAaIIgzr3ALcBPwnNtIHTrHxz0400++JyJr3eXubhWRNW6a23HmkDamRzaaqzHGmLCsBGGMMSYsCxDGGGPCsgBhjDEmLAsQxhhjwrIAYYwxJiwLEMYYY8KyAGGMMSas/x8mDJoOttXCOAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_experiment([(rand,'RAND'), (rand_warmup,'RAND + warmup (3000)')], 'Random Search')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }