{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Tutorial_BigMax.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "aOpB14foyoVj"
},
"source": [
"#Introduction\n",
"In this notebook, we will implement a machine-learning framework accelerates functional high-entropy alloy discovery"
]
},
{
"cell_type": "code",
"metadata": {
"id": "HO3WeAGHmW_t"
},
"source": [
"import cv2\n",
"import os\n",
"import time\n",
"import random\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"import torch\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"from torch.optim import Adam, lr_scheduler\n",
"from torch.utils.data import Dataset, DataLoader\n",
"from scipy.spatial.distance import cdist\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.model_selection import KFold\n",
"from sklearn.cluster import KMeans\n",
"from sklearn.mixture import GaussianMixture\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.patches as patches\n",
"from matplotlib.patches import Ellipse\n",
"from mpl_toolkits.axes_grid1 import make_axes_locatable\n",
"import seaborn as sns\n",
"\n",
"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
"root = 'content/'\n",
"\n",
"sns.set(color_codes=True)"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "OQnO2Nrq9Bc-"
},
"source": [
"#Required packages"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "dTzbyKG1o_0i",
"outputId": "a7741bb9-e61a-47a5-b91b-1862e0778277"
},
"source": [
"!pip install bayesian-optimization\n",
"!pip install lightgbm"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Collecting bayesian-optimization\n",
" Downloading bayesian-optimization-1.2.0.tar.gz (14 kB)\n",
"Requirement already satisfied: numpy>=1.9.0 in /usr/local/lib/python3.7/dist-packages (from bayesian-optimization) (1.19.5)\n",
"Requirement already satisfied: scipy>=0.14.0 in /usr/local/lib/python3.7/dist-packages (from bayesian-optimization) (1.4.1)\n",
"Requirement already satisfied: scikit-learn>=0.18.0 in /usr/local/lib/python3.7/dist-packages (from bayesian-optimization) (0.22.2.post1)\n",
"Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.18.0->bayesian-optimization) (1.0.1)\n",
"Building wheels for collected packages: bayesian-optimization\n",
" Building wheel for bayesian-optimization (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for bayesian-optimization: filename=bayesian_optimization-1.2.0-py3-none-any.whl size=11685 sha256=fe62c2a660ed5d9d514b5ea22d24477c1375e2a76b765fe2428891c61cb98514\n",
" Stored in directory: /root/.cache/pip/wheels/fd/9b/71/f127d694e02eb40bcf18c7ae9613b88a6be4470f57a8528c5b\n",
"Successfully built bayesian-optimization\n",
"Installing collected packages: bayesian-optimization\n",
"Successfully installed bayesian-optimization-1.2.0\n",
"Requirement already satisfied: lightgbm in /usr/local/lib/python3.7/dist-packages (2.2.3)\n",
"Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from lightgbm) (1.19.5)\n",
"Requirement already satisfied: scikit-learn in /usr/local/lib/python3.7/dist-packages (from lightgbm) (0.22.2.post1)\n",
"Requirement already satisfied: scipy in /usr/local/lib/python3.7/dist-packages (from lightgbm) (1.4.1)\n",
"Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn->lightgbm) (1.0.1)\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4lKoaSz8pTHk"
},
"source": [
"#Wasserstein Autoencoder\n",
"Wasserstein autoencoder is used for learning the latent space representation"
]
},
{
"cell_type": "code",
"metadata": {
"id": "hlnrI--Mc9-T"
},
"source": [
"class FeatureDataset(Dataset): #from numpy to tensor (pytroch-readable)\n",
" '''\n",
" Args: x is a 2D numpy array [x_size, x_features]\n",
" '''\n",
" def __init__(self, x, y):\n",
" self.x = x\n",
" self.y = y\n",
" \n",
" def __len__(self):\n",
" return self.x.shape[0]\n",
" \n",
" def __getitem__(self, idx):\n",
" return torch.FloatTensor(self.x[idx]), torch.FloatTensor(self.y[idx])\n",
"\n",
"class AttributeDataset(Dataset): # this is for classifier \n",
" '''\n",
" Args: x is a 2D numpy array [x_size, x_features]\n",
" '''\n",
" def __init__(self, x, y):\n",
" self.x = x\n",
" self.y = y\n",
" def __len__(self):\n",
" return self.x.shape[0]\n",
" def __getitem__(self, idx):\n",
" return torch.Tensor(self.x[idx]), torch.Tensor(self.y[idx])"
],
"execution_count": 7,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "3OkOhFJf1MBC"
},
"source": [
"**Model architecture**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "IYHg-od4o9dZ"
},
"source": [
"def weights_init(m):\n",
" classname = m.__class__.__name__\n",
" if classname.find('BatchNorm') != -1:\n",
" m.weight.data.normal_(1.0, 0.02)\n",
" m.bias.data.fill_(0)\n",
"\n",
"class WAE(nn.Module):\n",
" def __init__(self, input_size):\n",
" super(WAE, self).__init__()\n",
" self.input_size = input_size\n",
"\n",
" # encoder\n",
" self.encoder = nn.Sequential(\n",
" nn.Linear(self.input_size, 80),\n",
" nn.LayerNorm(80),\n",
" nn.ReLU(),\n",
" nn.Linear(80, 64),\n",
" nn.LayerNorm(64),\n",
" nn.ReLU(),\n",
" nn.Linear(64, 48),\n",
" nn.LayerNorm(48),\n",
" nn.ReLU(),\n",
" nn.Linear(48, 2),\n",
" )\n",
"\n",
" # decoder\n",
" self.decoder = nn.Sequential(\n",
" nn.Linear(2, 48),\n",
" nn.LayerNorm(48),\n",
" nn.ReLU(),\n",
" nn.Linear(48, 64),\n",
" nn.LayerNorm(64),\n",
" nn.ReLU(),\n",
" nn.Linear(64, 80),\n",
" nn.LayerNorm(80),\n",
" nn.ReLU(),\n",
" nn.Linear(80, self.input_size),\n",
" nn.Softmax(dim=1) #(softmad along dimension 1)\n",
" )\n",
" self.apply(weights_init)\n",
" \n",
" def forward(self, x):\n",
" z = self._encode(x)\n",
" x_recon = self._decode(z)\n",
"\n",
" return x_recon, z\n",
" \n",
" def _encode(self, x):\n",
" return self.encoder(x)\n",
"\n",
" def _decode(self, z):\n",
" return self.decoder(z)"
],
"execution_count": 8,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Rfgq7_H51Sgi"
},
"source": [
"**Utility functions for WAE**\n",
"\n",
"\n",
"* same_seeds: fixing the randomness\n",
"* get_latents: get the latent spaces from the WAE\n",
"* imq_kernels: inverse multiquadric (IMQ) kernel - computing the maximum mean discrepancy, which is part of the loss function for WAE.\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "8yBgwL4mqPFk"
},
"source": [
"def same_seeds(seed): #fix np & torch seed to the same.\n",
" torch.manual_seed(seed)\n",
" if torch.cuda.is_available():\n",
" torch.cuda.manual_seed(seed)\n",
" torch.cuda.manual_seed_all(seed) # if you are using multi-GPU.\n",
" np.random.seed(seed) # Numpy module.\n",
" random.seed(seed) # Python random module.\n",
" torch.backends.cudnn.benchmark = False\n",
" torch.backends.cudnn.deterministic = True\n",
"\n",
"def get_latents(model, dataset): #from dataset to altten\n",
" model.to(device).eval() # training model or evaluation mode, eval means setting the model to its evaluation mode (gradient fixed)\n",
" latents = []\n",
" with torch.no_grad(): # fix the gradient, assure that the model parameters are fixed\n",
" dataloader = DataLoader(dataset, batch_size=256, shuffle=False)\n",
" for i, data in enumerate(dataloader):\n",
" x = data[0].to(device)\n",
" recon_x, z = model(x)\n",
" latents.append(z.detach().cpu().numpy())\n",
" return np.concatenate(latents,axis=0)\n",
"\n",
"def imq_kernel(X: torch.Tensor, Y: torch.Tensor, h_dim: int): # common kerntl to choose\n",
" batch_size = X.size(0)\n",
"\n",
" norms_x = X.pow(2).sum(1, keepdim=True) # batch_size x 1\n",
" prods_x = torch.mm(X, X.t()).to(device) # batch_size x batch_size\n",
" dists_x = norms_x + norms_x.t() - 2 * prods_x # mm matrix multiplicaiton\n",
"\n",
" norms_y = Y.pow(2).sum(1, keepdim=True).to(device) # batch_size x 1\n",
" prods_y = torch.mm(Y, Y.t()).to(device) # batch_size x batch_size\n",
" dists_y = norms_y + norms_y.t() - 2 * prods_y\n",
"\n",
" dot_prd = torch.mm(X, Y.t())\n",
" dists_c = norms_x + norms_y.t() - 2 * dot_prd\n",
"\n",
" stats = 0\n",
" for scale in [.1, .2, .5, 1., 2., 5., 10.]: # need more study on this\n",
" C = 2 * h_dim * 1.0 * scale\n",
" res1 = C / (C + dists_x)\n",
" res1 += C / (C + dists_y)\n",
"\n",
" if torch.cuda.is_available():\n",
" res1 = (1 - torch.eye(batch_size).to(device)) * res1\n",
" else:\n",
" res1 = (1 - torch.eye(batch_size)) * res1\n",
"\n",
" res1 = res1.sum() / (batch_size - 1)\n",
" res2 = C / (C + dists_c)\n",
" res2 = res2.sum() * 2. / (batch_size)\n",
" stats += res1 - res2\n",
"\n",
" return stats\n"
],
"execution_count": 5,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Tf5oEkuZ4fmv"
},
"source": [
"**Data loading** "
]
},
{
"cell_type": "code",
"metadata": {
"id": "KReugJAwrE14",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "b2397d63-7083-46d0-f2e5-4cfd56f62513"
},
"source": [
"same_seeds(1) #seed equals to 1\n",
"\n",
"params = {\n",
" 'num_epoch' : 100,\n",
" 'batch_size' : 20,\n",
" 'lr' : 5e-4,\n",
" 'weight_decay' : 0.0,\n",
" 'sigma' : 8.0,\n",
" 'MMD_lambda' : 1e-4,\n",
" 'model_name' : 'WAE_v1',\n",
"} # for WAE training\n",
"all = pd.read_csv('data_base.csv', header=0).iloc[:,1:19].to_numpy()\n",
"raw_x = all[:696,:6]\n",
"raw_y = all[:696,17].reshape(-1,1)\n",
"dataset = FeatureDataset(raw_x[:], raw_y[:]) #numpy to tensor\n",
"dataloader = DataLoader(dataset, batch_size=params['batch_size'], shuffle=True) # tensor to dataloader\n",
"print(raw_x[50:55])"
],
"execution_count": 10,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[[0.701 0.2 0.099 0. 0. 0. ]\n",
" [0.65 0.25 0.1 0. 0. 0. ]\n",
" [0.62 0.28 0.1 0. 0. 0. ]\n",
" [0.601 0.3 0.099 0. 0. 0. ]\n",
" [0.58 0.32 0.1 0. 0. 0. ]]\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "AkcWFeljrTEi",
"outputId": "7476a512-c833-4196-b95a-d58b1c16ab3c"
},
"source": [
"model = WAE(raw_x.shape[1]).to(device) # initialize the model \n",
"optimizer = Adam(model.parameters(), lr = params['lr'], weight_decay = params['weight_decay']) # optimizer\n",
"def train_WAE(model, optimizer, dataloader, params):\n",
" model_name = params['model_name']\n",
" num_epoch = params['num_epoch']\n",
" sigma = params['sigma'] # assuming the latent space follows Gaussian\n",
" MMD_lambda = params['MMD_lambda'] #WAE distance (maximum mean discrepancy)\n",
"\n",
" folder_dir = os.path.join(root, model_name) # a folder to save models\n",
" if not os.path.isdir(folder_dir):\n",
" os.mkdir(folder_dir)\n",
"\n",
" for epoch in range(num_epoch):\n",
" start_time = time.time()\n",
" total_loss = [] #save for plot, recon loss+MMD\n",
" total_recon = [] # binary cross entropy\n",
" total_MMD = [] #maximum mean discrepancy\n",
" \n",
" for i, data in enumerate(dataloader):\n",
" x = data[0].to(device)\n",
" y = data[1].to(device)\n",
" model.train() # model goes to train mode\n",
" recon_x, z_tilde = model(x) # latent space is Z_tilde\n",
" z = sigma*torch.randn(z_tilde.size()).to(device) # z is sampled from a Gaussian that has the same dimension (but no relation to z_tilde).\n",
"\n",
" recon_loss = F.binary_cross_entropy(recon_x, x, reduction='mean') #lowest reconstruction loss \n",
" #recon_loss = F.mse_loss(recon_x, x, reduction='mean') \n",
" #recon_loss = F.l1_loss(recon_x, x, reduction='mean')\n",
" \n",
" MMD_loss = imq_kernel(z_tilde, z, h_dim=2).to(device) #W-distance between z_tilde and z\n",
" MMD_loss = MMD_loss / x.size(0) #averaging, because recon loss is mean.\n",
" loss = recon_loss + MMD_loss * MMD_lambda #MM_lambda: learning-rate alike, hyperparamer\n",
"\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n",
"\n",
" total_loss.append(loss.item())# from tensor to values\n",
" total_recon.append(recon_loss.item())\n",
" total_MMD.append(MMD_loss.item())\n",
"\n",
" avg_loss = sum(total_loss)/len(total_loss)\n",
" avg_recon = sum(total_recon)/len(total_recon)\n",
" avg_MMD = sum(total_MMD)/len(total_MMD)\n",
"\n",
" #scheduler.step(avg_loss)\n",
"\n",
" print('[{:03}/{:03}] loss: {:.6f} Recon_loss: {:.6f}, MMD_loss:{:.6f}, time: {:.3f} sec'.format(\\\n",
" epoch+1, num_epoch, \\\n",
" avg_loss, \\\n",
" avg_recon, avg_MMD, time.time() - start_time))\n",
" # save the model every 2 epoches\n",
" if (epoch+1) % 1 == 0:\n",
" save_model_dir = str(model_name + \"_{}.pth\".format(epoch+1))\n",
" torch.save(model.state_dict(), os.path.join(folder_dir, save_model_dir))\n",
"\n",
"train_WAE(model, optimizer, dataloader, params)"
],
"execution_count": 11,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[001/100] loss: 0.365287 Recon_loss: 0.364788, MMD_loss:4.988922, time: 0.482 sec\n",
"[002/100] loss: 0.319609 Recon_loss: 0.319189, MMD_loss:4.200815, time: 0.240 sec\n",
"[003/100] loss: 0.311577 Recon_loss: 0.311122, MMD_loss:4.544367, time: 0.244 sec\n",
"[004/100] loss: 0.308807 Recon_loss: 0.308342, MMD_loss:4.655530, time: 0.173 sec\n",
"[005/100] loss: 0.307247 Recon_loss: 0.306776, MMD_loss:4.710283, time: 0.162 sec\n",
"[006/100] loss: 0.306054 Recon_loss: 0.305588, MMD_loss:4.664705, time: 0.168 sec\n",
"[007/100] loss: 0.305088 Recon_loss: 0.304617, MMD_loss:4.708817, time: 0.238 sec\n",
"[008/100] loss: 0.304573 Recon_loss: 0.304105, MMD_loss:4.686302, time: 0.191 sec\n",
"[009/100] loss: 0.303707 Recon_loss: 0.303228, MMD_loss:4.788946, time: 0.166 sec\n",
"[010/100] loss: 0.302751 Recon_loss: 0.302280, MMD_loss:4.713873, time: 0.156 sec\n",
"[011/100] loss: 0.301802 Recon_loss: 0.301345, MMD_loss:4.570692, time: 0.184 sec\n",
"[012/100] loss: 0.301485 Recon_loss: 0.301018, MMD_loss:4.667446, time: 0.162 sec\n",
"[013/100] loss: 0.300671 Recon_loss: 0.300216, MMD_loss:4.550119, time: 0.164 sec\n",
"[014/100] loss: 0.300389 Recon_loss: 0.299938, MMD_loss:4.517685, time: 0.167 sec\n",
"[015/100] loss: 0.300090 Recon_loss: 0.299639, MMD_loss:4.515236, time: 0.163 sec\n",
"[016/100] loss: 0.299518 Recon_loss: 0.299062, MMD_loss:4.564801, time: 0.156 sec\n",
"[017/100] loss: 0.299015 Recon_loss: 0.298569, MMD_loss:4.457237, time: 0.161 sec\n",
"[018/100] loss: 0.299192 Recon_loss: 0.298747, MMD_loss:4.443053, time: 0.163 sec\n",
"[019/100] loss: 0.298831 Recon_loss: 0.298389, MMD_loss:4.429230, time: 0.165 sec\n",
"[020/100] loss: 0.298761 Recon_loss: 0.298314, MMD_loss:4.470654, time: 0.219 sec\n",
"[021/100] loss: 0.298734 Recon_loss: 0.298295, MMD_loss:4.393027, time: 0.230 sec\n",
"[022/100] loss: 0.298443 Recon_loss: 0.298006, MMD_loss:4.373185, time: 0.228 sec\n",
"[023/100] loss: 0.299117 Recon_loss: 0.298690, MMD_loss:4.270142, time: 0.169 sec\n",
"[024/100] loss: 0.298156 Recon_loss: 0.297726, MMD_loss:4.298305, time: 0.160 sec\n",
"[025/100] loss: 0.298053 Recon_loss: 0.297621, MMD_loss:4.324094, time: 0.159 sec\n",
"[026/100] loss: 0.297877 Recon_loss: 0.297460, MMD_loss:4.173318, time: 0.162 sec\n",
"[027/100] loss: 0.297605 Recon_loss: 0.297177, MMD_loss:4.286124, time: 0.156 sec\n",
"[028/100] loss: 0.297636 Recon_loss: 0.297209, MMD_loss:4.271590, time: 0.188 sec\n",
"[029/100] loss: 0.297569 Recon_loss: 0.297137, MMD_loss:4.320729, time: 0.233 sec\n",
"[030/100] loss: 0.297554 Recon_loss: 0.297129, MMD_loss:4.245043, time: 0.160 sec\n",
"[031/100] loss: 0.297525 Recon_loss: 0.297099, MMD_loss:4.259788, time: 0.163 sec\n",
"[032/100] loss: 0.297699 Recon_loss: 0.297271, MMD_loss:4.274336, time: 0.161 sec\n",
"[033/100] loss: 0.297089 Recon_loss: 0.296667, MMD_loss:4.224826, time: 0.173 sec\n",
"[034/100] loss: 0.297538 Recon_loss: 0.297113, MMD_loss:4.246197, time: 0.157 sec\n",
"[035/100] loss: 0.297467 Recon_loss: 0.297044, MMD_loss:4.224483, time: 0.241 sec\n",
"[036/100] loss: 0.297129 Recon_loss: 0.296705, MMD_loss:4.234460, time: 0.230 sec\n",
"[037/100] loss: 0.296836 Recon_loss: 0.296420, MMD_loss:4.163971, time: 0.227 sec\n",
"[038/100] loss: 0.297052 Recon_loss: 0.296619, MMD_loss:4.321280, time: 0.187 sec\n",
"[039/100] loss: 0.296952 Recon_loss: 0.296546, MMD_loss:4.064921, time: 0.233 sec\n",
"[040/100] loss: 0.297335 Recon_loss: 0.296923, MMD_loss:4.114959, time: 0.210 sec\n",
"[041/100] loss: 0.297304 Recon_loss: 0.296895, MMD_loss:4.089278, time: 0.159 sec\n",
"[042/100] loss: 0.297130 Recon_loss: 0.296715, MMD_loss:4.145263, time: 0.214 sec\n",
"[043/100] loss: 0.297211 Recon_loss: 0.296795, MMD_loss:4.160071, time: 0.236 sec\n",
"[044/100] loss: 0.296866 Recon_loss: 0.296452, MMD_loss:4.143130, time: 0.168 sec\n",
"[045/100] loss: 0.296752 Recon_loss: 0.296336, MMD_loss:4.162766, time: 0.170 sec\n",
"[046/100] loss: 0.296653 Recon_loss: 0.296245, MMD_loss:4.076583, time: 0.159 sec\n",
"[047/100] loss: 0.296501 Recon_loss: 0.296101, MMD_loss:3.996096, time: 0.167 sec\n",
"[048/100] loss: 0.297359 Recon_loss: 0.296951, MMD_loss:4.075806, time: 0.156 sec\n",
"[049/100] loss: 0.296895 Recon_loss: 0.296487, MMD_loss:4.078783, time: 0.182 sec\n",
"[050/100] loss: 0.296613 Recon_loss: 0.296219, MMD_loss:3.934222, time: 0.241 sec\n",
"[051/100] loss: 0.296619 Recon_loss: 0.296196, MMD_loss:4.231486, time: 0.192 sec\n",
"[052/100] loss: 0.296902 Recon_loss: 0.296487, MMD_loss:4.149249, time: 0.172 sec\n",
"[053/100] loss: 0.296639 Recon_loss: 0.296232, MMD_loss:4.070097, time: 0.157 sec\n",
"[054/100] loss: 0.296636 Recon_loss: 0.296248, MMD_loss:3.872639, time: 0.161 sec\n",
"[055/100] loss: 0.296585 Recon_loss: 0.296192, MMD_loss:3.932009, time: 0.175 sec\n",
"[056/100] loss: 0.296295 Recon_loss: 0.295894, MMD_loss:4.014891, time: 0.174 sec\n",
"[057/100] loss: 0.296475 Recon_loss: 0.296065, MMD_loss:4.100971, time: 0.194 sec\n",
"[058/100] loss: 0.296458 Recon_loss: 0.296047, MMD_loss:4.109641, time: 0.162 sec\n",
"[059/100] loss: 0.296511 Recon_loss: 0.296105, MMD_loss:4.059724, time: 0.157 sec\n",
"[060/100] loss: 0.296396 Recon_loss: 0.295992, MMD_loss:4.038733, time: 0.171 sec\n",
"[061/100] loss: 0.296614 Recon_loss: 0.296203, MMD_loss:4.108154, time: 0.160 sec\n",
"[062/100] loss: 0.296747 Recon_loss: 0.296337, MMD_loss:4.106113, time: 0.167 sec\n",
"[063/100] loss: 0.296383 Recon_loss: 0.295984, MMD_loss:3.987412, time: 0.164 sec\n",
"[064/100] loss: 0.296521 Recon_loss: 0.296123, MMD_loss:3.984291, time: 0.161 sec\n",
"[065/100] loss: 0.296378 Recon_loss: 0.295979, MMD_loss:3.992087, time: 0.155 sec\n",
"[066/100] loss: 0.296210 Recon_loss: 0.295811, MMD_loss:3.988383, time: 0.175 sec\n",
"[067/100] loss: 0.296177 Recon_loss: 0.295773, MMD_loss:4.037848, time: 0.236 sec\n",
"[068/100] loss: 0.296045 Recon_loss: 0.295667, MMD_loss:3.787771, time: 0.233 sec\n",
"[069/100] loss: 0.296186 Recon_loss: 0.295795, MMD_loss:3.908190, time: 0.232 sec\n",
"[070/100] loss: 0.296298 Recon_loss: 0.295903, MMD_loss:3.944492, time: 0.223 sec\n",
"[071/100] loss: 0.296370 Recon_loss: 0.295976, MMD_loss:3.935484, time: 0.156 sec\n",
"[072/100] loss: 0.296354 Recon_loss: 0.295953, MMD_loss:4.011393, time: 0.166 sec\n",
"[073/100] loss: 0.296211 Recon_loss: 0.295825, MMD_loss:3.856404, time: 0.161 sec\n",
"[074/100] loss: 0.296478 Recon_loss: 0.296078, MMD_loss:3.995800, time: 0.161 sec\n",
"[075/100] loss: 0.296381 Recon_loss: 0.295980, MMD_loss:4.001204, time: 0.160 sec\n",
"[076/100] loss: 0.296341 Recon_loss: 0.295940, MMD_loss:4.011523, time: 0.215 sec\n",
"[077/100] loss: 0.296220 Recon_loss: 0.295829, MMD_loss:3.904648, time: 0.169 sec\n",
"[078/100] loss: 0.296117 Recon_loss: 0.295726, MMD_loss:3.912922, time: 0.165 sec\n",
"[079/100] loss: 0.296196 Recon_loss: 0.295803, MMD_loss:3.929377, time: 0.166 sec\n",
"[080/100] loss: 0.295948 Recon_loss: 0.295549, MMD_loss:3.984029, time: 0.160 sec\n",
"[081/100] loss: 0.295997 Recon_loss: 0.295608, MMD_loss:3.892871, time: 0.161 sec\n",
"[082/100] loss: 0.295835 Recon_loss: 0.295448, MMD_loss:3.866601, time: 0.162 sec\n",
"[083/100] loss: 0.295890 Recon_loss: 0.295501, MMD_loss:3.886154, time: 0.215 sec\n",
"[084/100] loss: 0.296199 Recon_loss: 0.295807, MMD_loss:3.923056, time: 0.218 sec\n",
"[085/100] loss: 0.295973 Recon_loss: 0.295577, MMD_loss:3.960673, time: 0.159 sec\n",
"[086/100] loss: 0.296010 Recon_loss: 0.295614, MMD_loss:3.961454, time: 0.161 sec\n",
"[087/100] loss: 0.295832 Recon_loss: 0.295442, MMD_loss:3.900643, time: 0.158 sec\n",
"[088/100] loss: 0.295746 Recon_loss: 0.295352, MMD_loss:3.940127, time: 0.170 sec\n",
"[089/100] loss: 0.295856 Recon_loss: 0.295475, MMD_loss:3.814231, time: 0.236 sec\n",
"[090/100] loss: 0.296133 Recon_loss: 0.295738, MMD_loss:3.948777, time: 0.235 sec\n",
"[091/100] loss: 0.295939 Recon_loss: 0.295552, MMD_loss:3.870931, time: 0.223 sec\n",
"[092/100] loss: 0.295722 Recon_loss: 0.295336, MMD_loss:3.862048, time: 0.171 sec\n",
"[093/100] loss: 0.295671 Recon_loss: 0.295289, MMD_loss:3.814457, time: 0.167 sec\n",
"[094/100] loss: 0.295676 Recon_loss: 0.295293, MMD_loss:3.827099, time: 0.162 sec\n",
"[095/100] loss: 0.295916 Recon_loss: 0.295534, MMD_loss:3.814622, time: 0.174 sec\n",
"[096/100] loss: 0.295846 Recon_loss: 0.295460, MMD_loss:3.854504, time: 0.205 sec\n",
"[097/100] loss: 0.295670 Recon_loss: 0.295290, MMD_loss:3.798476, time: 0.205 sec\n",
"[098/100] loss: 0.296372 Recon_loss: 0.295990, MMD_loss:3.812305, time: 0.158 sec\n",
"[099/100] loss: 0.296216 Recon_loss: 0.295829, MMD_loss:3.869949, time: 0.215 sec\n",
"[100/100] loss: 0.295944 Recon_loss: 0.295553, MMD_loss:3.911615, time: 0.199 sec\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rSr013Mk7qeP"
},
"source": [
"**double check on the recontruted compositions**\n",
"\n",
"* one way to find out whether WAE (or any other VAE) has learned the \n",
"repsentation is to compare the reconstructed and original compositions. \n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 235
},
"id": "vcz36-9atIfk",
"outputId": "80c9dd91-75bc-4354-b5e3-a8a587297e09"
},
"source": [
"#double check on the recontruted compositions\n",
"#t = time.localtime()\n",
"model_dir = os.path.join(root,'{}/{}_100.pth'.format(params['model_name'], params['model_name']))\n",
"model = WAE(raw_x.shape[1]).to(device)\n",
"model.load_state_dict(torch.load(model_dir))\n",
"model.eval()\n",
"with torch.no_grad():\n",
" test = torch.FloatTensor(raw_x).to(device)\n",
" recon_x, z = model(test)\n",
" recon_x = model.decoder(z)\n",
" recon_x = recon_x.cpu().detach().numpy()\n",
"\n",
"column_name = ['Fe','Ni','Co','Cr','V','Cu']#,'VEC','AR1','AR2','PE','Density','TC','MP','FI','SI','TI','M']\n",
"#recon_x = (recon_x * (max-min)) + min\n",
"pd.DataFrame(recon_x.round(3), columns=column_name).loc[690:695]"
],
"execution_count": 12,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Fe | \n",
" Ni | \n",
" Co | \n",
" Cr | \n",
" V | \n",
" Cu | \n",
"
\n",
" \n",
" \n",
" \n",
" 690 | \n",
" 0.614 | \n",
" 0.330 | \n",
" 0.053 | \n",
" 0.000 | \n",
" 0.003 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 691 | \n",
" 0.613 | \n",
" 0.331 | \n",
" 0.052 | \n",
" 0.000 | \n",
" 0.003 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 692 | \n",
" 0.612 | \n",
" 0.323 | \n",
" 0.062 | \n",
" 0.001 | \n",
" 0.002 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 693 | \n",
" 0.608 | \n",
" 0.326 | \n",
" 0.063 | \n",
" 0.000 | \n",
" 0.003 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 694 | \n",
" 0.608 | \n",
" 0.317 | \n",
" 0.072 | \n",
" 0.001 | \n",
" 0.002 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 695 | \n",
" 0.605 | \n",
" 0.320 | \n",
" 0.073 | \n",
" 0.001 | \n",
" 0.002 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Fe Ni Co Cr V Cu\n",
"690 0.614 0.330 0.053 0.000 0.003 0.0\n",
"691 0.613 0.331 0.052 0.000 0.003 0.0\n",
"692 0.612 0.323 0.062 0.001 0.002 0.0\n",
"693 0.608 0.326 0.063 0.000 0.003 0.0\n",
"694 0.608 0.317 0.072 0.001 0.002 0.0\n",
"695 0.605 0.320 0.073 0.001 0.002 0.0"
]
},
"metadata": {},
"execution_count": 12
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 235
},
"id": "uIm7HRMYthG5",
"outputId": "3202a4da-a783-44d9-cec9-ebb91cc6893d"
},
"source": [
"csv_data = pd.read_csv('data_base.csv', header=0).iloc[:,1:19]\n",
"csv_data.iloc[690:696,:6].round(3)"
],
"execution_count": 13,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Fe | \n",
" Ni | \n",
" Co | \n",
" Cr | \n",
" V | \n",
" Cu | \n",
"
\n",
" \n",
" \n",
" \n",
" 690 | \n",
" 0.630 | \n",
" 0.330 | \n",
" 0.04 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 691 | \n",
" 0.625 | \n",
" 0.335 | \n",
" 0.04 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 692 | \n",
" 0.635 | \n",
" 0.315 | \n",
" 0.05 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 693 | \n",
" 0.625 | \n",
" 0.325 | \n",
" 0.05 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 694 | \n",
" 0.635 | \n",
" 0.305 | \n",
" 0.06 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 695 | \n",
" 0.625 | \n",
" 0.315 | \n",
" 0.06 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Fe Ni Co Cr V Cu\n",
"690 0.630 0.330 0.04 0.0 0.0 0.0\n",
"691 0.625 0.335 0.04 0.0 0.0 0.0\n",
"692 0.635 0.315 0.05 0.0 0.0 0.0\n",
"693 0.625 0.325 0.05 0.0 0.0 0.0\n",
"694 0.635 0.305 0.06 0.0 0.0 0.0\n",
"695 0.625 0.315 0.06 0.0 0.0 0.0"
]
},
"metadata": {},
"execution_count": 13
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7uheLggK8WqX"
},
"source": [
"**Visualize the WAE latent space**\n",
"\n",
"Here we assign different colors to alloy with and without Copper,\n",
"as we expected them to differ significantly in the latent space.\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 549
},
"id": "Ua13kwzjt0jv",
"outputId": "b1431013-bb2a-4797-9406-15394b20e9db"
},
"source": [
"sns.set_style('ticks')\n",
"model = WAE(raw_x.shape[1]).to(device)\n",
"model.load_state_dict(torch.load(model_dir))\n",
"dataset = FeatureDataset(raw_x[:], raw_y[:])\n",
"latents = get_latents(model, dataset)\n",
"\n",
"low_cu = raw_x[:,5] < 0.05\n",
"low_cu_latent = latents[low_cu]\n",
"low_cu_color = raw_y[:][low_cu]\n",
"\n",
"high_cu = raw_x[:,5] >= 0.05\n",
"high_cu_latent = latents[high_cu]\n",
"high_cu_color = raw_y[:][high_cu]\n",
"\n",
"\n",
"# figure settings\n",
"fig, axs = plt.subplots(figsize = (3, 3),dpi=200)\n",
"\n",
"#axs.set_aspect(1.)\n",
"#axs.set_ylim(-7,7)\n",
"#axs.set_xlim(-11,5)\n",
"\n",
"axs.set_yticks(np.arange(-6, 8, step=2))\n",
"axs.set_xticks(np.arange(-10, 5, step=2))\n",
"\n",
"axs.set_yticklabels(np.arange(-6, 8, step=2), fontsize=7)\n",
"axs.set_xticklabels(np.arange(-10, 5, step=2), fontsize=7)\n",
"\n",
"\n",
"for axis in ['top','bottom','left','right']:\n",
" axs.spines[axis].set_linewidth(1.)\n",
"\n",
"\n",
"axs.tick_params(axis='both', which='major', top=False, labeltop=False, direction='out', width=1., length=4)\n",
"axs.tick_params(axis='both', which='major', right=False, labelright=False, direction='out', width=1., length=4)\n",
"\n",
"#scatter1 = axs.scatter(low_cu_latent[:,0], low_cu_latent[:,1], c=low_cu_color, alpha=.75, s=10, linewidths=0, cmap='viridis')\n",
"#scatter2 = axs.scatter(high_cu_latent[:,0], high_cu_latent[:,1], c=high_cu_color, alpha=.75, s=9, linewidths=0, cmap='Reds')\n",
"\n",
"scatter1 = axs.scatter(low_cu_latent[:,0], low_cu_latent[:,1], c='steelblue', alpha=.55, s=8, linewidths=0, label='Alloys w/o Cu')\n",
"scatter2 = axs.scatter(high_cu_latent[:,0], high_cu_latent[:,1], c='firebrick', alpha=.65, s=14, linewidths=0, marker='^', label='Alloys w/ Cu')\n",
"#scatter3 = axs.scatter(latents_exp_4[:,0], latents_exp_4[:,1], alpha=1., s=10, linewidths=.75, edgecolors='darkslategray', facecolors='w')#, label='New FeCoNiCr HEAs')\n",
"#scatter4 = axs.scatter(latents_exp_5[:,0], latents_exp_5[:,1], alpha=1., s=16, linewidths=.75, edgecolors='darkred', facecolors='w',marker='^')#, label='New FeCoNiCrCu HEAs')\n",
"\n",
"handles,labels = axs.get_legend_handles_labels()\n",
"handles = handles[::1]\n",
"labels = labels[::1]\n",
"\n",
"legend_properties = {'size':7.5}\n",
"axs.legend(handles, labels, loc='upper right', bbox_to_anchor=(1.015,1.017), handletextpad=-0.3, frameon=False, prop=legend_properties)\n",
"#axs.legend(handles, labels, loc='upper left', bbox_to_anchor=(-0.045,1.017), handletextpad=-0.3, frameon=False, prop=legend_properties)\n",
"\n",
"#rect = patches.Rectangle((-19.4,15.0), 18, 4.5, linewidth=0,edgecolor=None,facecolor='k', alpha=0.03,linestyle=None,zorder=-10) #(0.2,15.4), 14, 4.1\n",
"#axs.add_patch(rect)\n",
"\n",
"fig.savefig('Figure3_a.tif', bbox_inches = 'tight', pad_inches=0.01)"
],
"execution_count": 14,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6kU0c7vv9bkg"
},
"source": [
"#**From WAE latent space to composition**\n",
"\n",
"In order to sample composition from the latent space. We turn the latent space into probability distribution via Gausian Mixture Model (GMM) \n",
"\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "oS7EEdLX03Mo"
},
"source": [
"#plotting functions\n",
"def draw_ellipse(position, covariance, ax=None, **kwargs):\n",
" \"\"\"Draw an ellipse with a given position and covariance\"\"\"\n",
" ax = ax or plt.gca()\n",
" \n",
" # Convert covariance to principal axes\n",
" if covariance.shape == (2, 2):\n",
" U, s, Vt = np.linalg.svd(covariance)\n",
" angle = np.degrees(np.arctan2(U[1, 0], U[0, 0]))\n",
" width, height = 2 * np.sqrt(s)\n",
" else:\n",
" angle = 0\n",
" width, height = 2 * np.sqrt(covariance)\n",
" \n",
" # Draw the Ellipse\n",
" for nsig in range(1, 4):\n",
" ax.add_patch(Ellipse(position, nsig * width, nsig * height,\n",
" angle, **kwargs))\n",
" \n",
"def plot_gmm(gm, X, label=True, ax=None):\n",
" X= latents\n",
" fig, axs = plt.subplots(1,1,figsize=(2,2),dpi=200)\n",
" ax = axs or plt.gca()\n",
" labels = gm.fit(X).predict(X)\n",
" if label:\n",
" low_cu = raw_x[:,5] < 0.05\n",
" low_cu_latent = latents[low_cu]\n",
" low_cu_color = raw_y[:][low_cu]\n",
"\n",
" high_cu = raw_x[:,5] >= 0.05\n",
" high_cu_latent = latents[high_cu]\n",
" high_cu_color = raw_y[:][high_cu]\n",
"\n",
" scatter1 = axs.scatter(low_cu_latent[:,0], low_cu_latent[:,1], c=low_cu_color, alpha=.65, s=8, linewidths=0, cmap='viridis')\n",
" scatter2 = axs.scatter(high_cu_latent[:,0], high_cu_latent[:,1], c=high_cu_color, alpha=.65, s=14, linewidths=0, cmap='Reds', marker='^')\n",
" #scatter3 = axs.scatter(latents[698:,0], latents[698:,1], alpha=1., s=10, linewidths=.75, edgecolors='k', facecolors='none')\n",
" else:\n",
" ax.scatter(X[:, 0], X[:, 1], s=5, zorder=2)\n",
" ax.axis('equal')\n",
" \n",
" w_factor = 0.2 / gm.weights_.max()\n",
" for pos, covar, w in zip(gm.means_, gm.covariances_, gm.weights_):\n",
" draw_ellipse(pos, covar, alpha= 0.75*w * w_factor, facecolor='slategrey', zorder=-10)"
],
"execution_count": 21,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Mhbv_7whyr__"
},
"source": [
"Here the GMM is applied, you might wonder why 4 is chosen, the answer can be found below"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 434
},
"id": "lud3Guz13qvc",
"outputId": "6aed482a-0958-411c-8e37-1fe4a6c54843"
},
"source": [
"gm = GaussianMixture(n_components=4, random_state=0, init_params='kmeans').fit(latents) #plot a n_components v.s. Average negative log likelihood\n",
"print('Average negative log likelihood:', -1*gm.score(latents))\n",
"plot_gmm(gm, latents)"
],
"execution_count": 22,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Average negative log likelihood: 1.3329691491445406\n"
]
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iaK6ggga-iRF"
},
"source": [
"Using elbow method to find out the best # of components, the best number of cluster is either 4 or 5."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "P8_AGKU333z8",
"outputId": "f1da3e61-899b-4970-d681-bd025172fa57"
},
"source": [
"scores=[] #using elbow method to find out the best # of components\n",
"for i in range(1,12):\n",
" gm = GaussianMixture(n_components=i, random_state=0, init_params='kmeans').fit(latents)\n",
" print('Average negative log likelihood:', -1*gm.score(latents))\n",
" scores.append(-1*gm.score(latents))"
],
"execution_count": 23,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Average negative log likelihood: 1.6934940458870427\n",
"Average negative log likelihood: 1.5939515381329854\n",
"Average negative log likelihood: 1.3446285344006002\n",
"Average negative log likelihood: 1.3329691491445406\n",
"Average negative log likelihood: 1.1957491673672727\n",
"Average negative log likelihood: 1.1577345788629838\n",
"Average negative log likelihood: 1.1085116154613388\n",
"Average negative log likelihood: 1.106149515195862\n",
"Average negative log likelihood: 1.0059797843308775\n",
"Average negative log likelihood: 1.012995374227744\n",
"Average negative log likelihood: 0.9596908609051571\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 268
},
"id": "ywT4MXG45OkC",
"outputId": "befdfcfc-0c12-4706-ce15-16ee75fbdcf4"
},
"source": [
"import matplotlib.pyplot as plt\n",
"plt.figure()\n",
"plt.scatter(range(1,12), scores,color='red')\n",
"plt.plot(range(1,12),scores)\n",
"plt.show()"
],
"execution_count": 24,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AINTm8aV-yqP"
},
"source": [
"#INVAR Classifier\n",
"\n",
"A simple neural network classifier that predicts INVAR based on composition. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "80SQeJDw5er_"
},
"source": [
"class Classifier(nn.Module): #a very simple classifer with large dropout. intuition here: as simple as possible, given that we only have 2d input\n",
" def __init__(self):\n",
" super(Classifier, self).__init__()\n",
" self.fc = nn.Sequential(\n",
" nn.Linear(2,8),\n",
" nn.Dropout(0.5),\n",
" nn.Linear(8,1),\n",
" nn.Sigmoid()\n",
" )\n",
" \n",
" def forward(self, x):\n",
" return self.fc(x)"
],
"execution_count": 25,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Gf_Nrnjx_1s_"
},
"source": [
"**Classifier training**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6ervUJMQ5W7N",
"outputId": "a1613e9e-0970-48da-bb63-c644f122c192"
},
"source": [
"same_seeds(1)\n",
"\n",
"params['cls_bs'] = 16\n",
"params['cls_lr'] = 1e-4\n",
"params['cls_epoch'] = 100\n",
"params['num_fold'] = 5\n",
"\n",
"\n",
"params['label_y'] = np.where(raw_y<5, 1, 0)\n",
"params['latents'] = latents\n",
"\n",
"cls = Classifier().to(device)\n",
"opt = Adam(cls.parameters(), lr=params['cls_lr'], weight_decay=0.)\n",
"\n",
"\n",
"def training_Cls(model, optimizer, params):\n",
" label_y = params['label_y']\n",
" latents = params['latents']\n",
" cls_epoch = params['cls_epoch']\n",
"\n",
" kf = KFold(n_splits=params['num_fold'])\n",
" train_acc = []\n",
" test_acc = []\n",
"\n",
" k=1\n",
" for train, test in kf.split(latents):\n",
" x_train, x_test, y_train, y_test = latents[train], latents[test], label_y[train], label_y[test]\n",
" cls_dataset = AttributeDataset(x_train, y_train)\n",
" cls_dataloader = DataLoader(cls_dataset, batch_size=params['cls_bs'], shuffle=True)\n",
" cls_testDataset = AttributeDataset(x_test, y_test)\n",
" cls_testDataloader = DataLoader(cls_testDataset, batch_size=cls_testDataset.__len__(), shuffle=False)\n",
"\n",
"\n",
" for epoch in range(cls_epoch):\n",
" t = time.time()\n",
" total_loss = []\n",
" total_acc = []\n",
" cls.train()\n",
" \n",
" for i, data in enumerate(cls_dataloader):\n",
" x = data[0].to(device)\n",
" y = data[1].to(device)\n",
" y_pred = cls(x)\n",
" loss = F.binary_cross_entropy(y_pred, y)\n",
" total_acc.append(torch.sum(torch.where(y_pred>=0.5,1,0) == y).detach().cpu().numpy())\n",
" total_loss.append(loss.item())\n",
"\n",
" opt.zero_grad()\n",
" loss.backward()\n",
" opt.step()\n",
" \n",
" #eval\n",
" cls.eval()\n",
" for test in cls_testDataloader:\n",
" x = test[0].to(device)\n",
" y = test[1].to(device)\n",
" y_pred = cls(x)\n",
" accuracy = torch.sum(torch.where(y_pred>=0.5,1,0) == y) / y_pred.size(0)\n",
" test_loss = F.binary_cross_entropy(y_pred, y)\n",
"\n",
" #print(f'[{epoch+1:03}/{cls_epoch}] loss:{sum(total_loss)/len(total_loss):.3f} test_loss:{test_loss.item():.3f} acc:{sum(total_acc)/cls_dataset.__len__():.3f} test_acc:{accuracy:.3f} time:{time.time()-t:.3f}')\n",
" \n",
" print('[{}/{}] train_acc: {:.04f} || test_acc: {:.04f}'.format(k, params['num_fold'], sum(total_acc)/cls_dataset.__len__(), accuracy.item()))\n",
" train_acc.append(sum(total_acc)/cls_dataset.__len__())\n",
" test_acc.append(accuracy.item())\n",
" k+=1\n",
" print('train_acc: {:.04f} || test_acc: {:.04f}'.format(sum(train_acc)/len(train_acc), sum(test_acc)/len(test_acc)))\n",
" return train_acc, test_acc\n",
"\n",
"train_acc, test_acc = training_Cls(cls, opt, params)"
],
"execution_count": 26,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[1/5] train_acc: 0.8183 || test_acc: 0.8929\n",
"[2/5] train_acc: 0.8797 || test_acc: 0.7122\n",
"[3/5] train_acc: 0.8205 || test_acc: 0.9065\n",
"[4/5] train_acc: 0.8474 || test_acc: 0.8058\n",
"[5/5] train_acc: 0.8276 || test_acc: 0.9137\n",
"train_acc: 0.8387 || test_acc: 0.8462\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hmkRO4PTAbmE"
},
"source": [
"#Markov Chain Monte Carlo for composition sampling"
]
},
{
"cell_type": "code",
"metadata": {
"id": "tbBx1tu_6HR2"
},
"source": [
"def MCMC(gm, classifier, n_samples, sigma=0.1): #MCMC\n",
" sample_z = []\n",
"\n",
" z = gm.sample(1)[0]\n",
" for i in range(n_samples):\n",
" uniform_rand = np.random.uniform(size=1)\n",
" z_next = np.random.multivariate_normal(z.squeeze(),sigma*np.eye(2)).reshape(1,-1)\n",
"\n",
" z_combined = np.concatenate((z, z_next),axis=0)\n",
" scores = cls(torch.Tensor(z_combined).to(device)).detach().cpu().numpy().squeeze() \n",
" z_score, z_next_score = np.log(scores[0]), np.log(scores[1]) #z score needes to be converted to log, coz gm score is log.\n",
" z_prob, z_next_prob = (gm.score(z)+z_score), (gm.score(z_next)+z_next_score) # two log addition, output: log probability\n",
" accepence = min(0, (z_next_prob - z_prob))\n",
"\n",
" if i == 0:\n",
" sample_z.append(z.squeeze())\n",
"\n",
" if np.log(uniform_rand) < accepence:\n",
" sample_z.append(z_next.squeeze())\n",
" z = z_next\n",
" else:\n",
" pass\n",
"\n",
" return np.stack(sample_z)"
],
"execution_count": 27,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "TGX6Y-taAp2v"
},
"source": [
"Sample 10000 times with sigma=0.5"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Z4uB20Bf6VZ_",
"outputId": "b6acefb4-c685-460a-9d5b-a52c718bf379"
},
"source": [
"sample_z = MCMC(gm=gm, classifier=cls, n_samples=5000, sigma=0.5)\n",
"WAE_comps = model._decode(torch.Tensor(sample_z).to(device)).detach().cpu().numpy() # new_comps save as csv and goes to TERM\n",
"print('Sample size:', sample_z.shape)"
],
"execution_count": 28,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Sample size: (1129, 2)\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "YJJIWk8L6go6",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "07f09e18-7012-4518-cc25-45669c346c23"
},
"source": [
"WAE_comps=pd.DataFrame(WAE_comps)\n",
"WAE_comps.columns=column_name\n",
"WAE_comps.to_csv('comps_WAE.csv',index=False)\n",
"WAE_comps.head()"
],
"execution_count": 29,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Fe | \n",
" Ni | \n",
" Co | \n",
" Cr | \n",
" V | \n",
" Cu | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0.621771 | \n",
" 0.278061 | \n",
" 0.066139 | \n",
" 0.033976 | \n",
" 0.000051 | \n",
" 0.000002 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.290811 | \n",
" 0.193655 | \n",
" 0.426399 | \n",
" 0.000012 | \n",
" 0.089111 | \n",
" 0.000012 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.356562 | \n",
" 0.032219 | \n",
" 0.479116 | \n",
" 0.132074 | \n",
" 0.000014 | \n",
" 0.000015 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.232804 | \n",
" 0.026366 | \n",
" 0.633758 | \n",
" 0.107050 | \n",
" 0.000015 | \n",
" 0.000007 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.431049 | \n",
" 0.083583 | \n",
" 0.353330 | \n",
" 0.132014 | \n",
" 0.000015 | \n",
" 0.000009 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Fe Ni Co Cr V Cu\n",
"0 0.621771 0.278061 0.066139 0.033976 0.000051 0.000002\n",
"1 0.290811 0.193655 0.426399 0.000012 0.089111 0.000012\n",
"2 0.356562 0.032219 0.479116 0.132074 0.000014 0.000015\n",
"3 0.232804 0.026366 0.633758 0.107050 0.000015 0.000007\n",
"4 0.431049 0.083583 0.353330 0.132014 0.000015 0.000009"
]
},
"metadata": {},
"execution_count": 29
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "lwnDaCQmA72h"
},
"source": [
"Plotting the sampled composition along with known datas"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 565
},
"id": "VlhEqqLS8N9x",
"outputId": "a70e2992-8738-49c2-9fed-545c1925b2f9"
},
"source": [
"sns.set_style('ticks')\n",
"\n",
"t = time.localtime()\n",
"model_dir = os.path.join(root, '{}/{}_100.pth'.format(params['model_name'], params['model_name']))\n",
"model = WAE(raw_x.shape[1]).to(device)\n",
"model.load_state_dict(torch.load(model_dir))\n",
"model.eval()\n",
"\n",
"dataset = FeatureDataset(raw_x[:], raw_y[:])\n",
"latents = get_latents(model,dataset)\n",
"\n",
"low_cu = raw_x[:,5] < 0.05\n",
"low_cu_latent = latents[low_cu]\n",
"low_cu_color = raw_y[:][low_cu]\n",
"\n",
"high_cu = raw_x[:,5] >= 0.05\n",
"high_cu_latent = latents[high_cu]\n",
"high_cu_color = raw_y[:][high_cu]\n",
"\n",
"fig, axs = plt.subplots(figsize = (3, 3),dpi=200)\n",
"\n",
"axs.set_xlim(-6,3)\n",
"axs.set_ylim(-4,5)\n",
"\n",
"scatter1 = axs.scatter(low_cu_latent[:,0], low_cu_latent[:,1], c='steelblue', alpha=.55, s=2, linewidths=0, cmap='viridis')\n",
"scatter2 = axs.scatter(high_cu_latent[:,0], high_cu_latent[:,1], c=high_cu_color, alpha=.65, s=3.5, linewidths=0, cmap='Reds', marker='^')\n",
"\n",
"scatter4 = axs.scatter(sample_z[:,0], sample_z[:,1], c='k', alpha=.15, s=0.8, linewidths=0, zorder=-1)\n",
"\n",
"plt.show()"
],
"execution_count": 30,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAIkCAYAAAD2/5R6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde3Cc933f+/dz2SsWwAIgSIBXgaIoWaJkO3FkS5GdOHUySZo/3NqZ9BzXPU0z9Uxnoun0NJOTsadxq8w00zSZpGNP25k2ceLaTurYudmpO+fETmRZtnWjbjRFUhRBEiQXFwJYYK/PPpff+WO5qwW4ABYgiNt+XjMacbH7PPvsktLz4ff3/f1+ljHGICIiItJF7O2+ABEREZGtpgAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGu4273BXSDXC7Ht771rebjo0ePkkqltvGKREREdodKpcLVq1ebj3/iJ36C0dHROz6vAtAW+Na3vsVTTz213ZchIiKyJ3zsYx+743NoCExERES6jgKQiIiIdB0NgW2BI0eOLHn867/+69x///3bdDUiIiK7x/nz55e0kSy/p26UAtAWSKfTSx7ff//9vOc979mmqxEREdm9lt9TN0pDYCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGus+cD0K/92q9x//33N//5zGc+s92XJCIiIttsTwegp59+mj//8z/f7ssQERGRHWbPBqBiscinP/1pANLp9DZfjYiIiOwkezYA/dZv/Ra5XI7R0VF+4Rd+YbsvR0RERHaQPRmAvve97/HlL38ZgE9/+tP09PRs8xWJiIjITrLnAlClUuHf/Jt/gzGGn/3Zn+WDH/zgdl+SiIiI7DB7LgD9zu/8DhMTE2SzWT71qU9t9+WIiIjIDrSnAtDp06f54he/CMCv/uqvsm/fvm2+IhEREdmJ3O2+gM3ieR6f/OQniaKIxx57jI985CObev4bN25w48aNDR17/vz5Tb0WERERuTN7JgD9p//0nxgfHyeZTPLUU09t+vm/+tWv8tnPfnbTzysiIiJbb08Mgb322mv84R/+IQBPPvkkR48e3d4LEhERkR1t1wegWq3Gpz71KcIw5KGHHuIXf/EXt/uSREREZIfb9UNg/+W//BcuXLiA4zj8xm/8Bo7j3JX3+chHPsJjjz22oWPPnz9/V4blREREZGN2dQA6d+4c/+2//TcA/uk//ac89NBDd+29Dh48yMGDB+/a+UVERGTr7OoA9Gd/9mf4vo9t28RiMf7zf/7PbV/3wgsvLPl143VjY2P8zM/8zJZcq4iIiOwcuzoAGWMAiKKI//pf/2tHxzz33HM899xzAPy9v/f3FIBERES60K5vghYRERFZr11dAfrUpz7V0XYXn/nMZ5pr+PzyL/8yTz755N2+NBEREdnBVAESERGRrqMAJCIiIl1HAUhERES6jgKQiIiIdJ1d3QTdqSeffFKNzyIiItKkCpCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABIREZGuowAkIiIiXUcBSERERLqOApCIiIh0HQUgERER6ToKQCIiItJ1FIBERESk6ygAiYiISNdRABKRPaNSqZDL5ahUKnv6PUXkzrnbfQGboVgs8uyzz/Lcc89x9uxZLl++TKFQIJFIsH//fh555BF+7ud+jve///1YlrXdlysid0k+n6dcLgOQSqXu6ntVKhXy+TzVapUoirbkPUVk8+z6APS5z32O3/3d38XzvNueC4KA8fFxxsfH+cu//Eve85738B//43/k4MGD23ClIrJRjbCRzWZXDRnZbHbJv++mRtiybZt0Or0l7ykim2fXB6Dx8fFm+Dlw4ACPP/44Dz30EENDQ3iexyuvvMJf/dVfUS6XefHFF/n4xz/Ol7/8ZYaGhrb5ykWkU51WdlKp1JZVYVrDlio/IrvPrg9AlmXxxBNP8M/+2T/jsccew7aXtjX9g3/wD/jEJz7BL/3SLzE+Ps61a9f47d/+bX7zN39zm65YRNZrKys7ndrKsCUim2/XN0H/q3/1r/j93/99fvRHf/S28NNw6NAhfu/3fq/5+Bvf+IYaFkV2kVQqxejoaNvAsRVNyGp0Ftl7dn0A6vRvhA888ABjY2NA/X9mV65cuZuXJSJbpDE8ls/nd/V7iMjW2vVDYOuRyWSav27XNC0iu89WDI/txCE4EbkzXROAarUaly9fbj7WTDCRnaPTWV7tbEUvjvp9RPaerglAX//61ykUCgA89NBDDA8Pr+v4GzducOPGjQ299/nz5zd0nEi32Mr1e7bSnQQ7Ebm7uiIAzc3N8du//dvNx//iX/yLdZ/jq1/9Kp/97Gc387JE5Ja9OsS0V4OdyF6w5wNQrVbjySefZHZ2FoAPfehD/ORP/uQ2X5WItNqrQ0zLg50qQiI7x54OQFEU8clPfpIXX3wRgKNHj/Lv//2/3+arEpHNdjeCxWacc3mwU0VIZOfYswHIGMOnP/1pvva1rwH1pufPfe5z9Pf3b+h8H/nIR3jsscc2dOz58+d56qmnNnSsiKztbgSLu3HOvTrUJ7Ib7ckAZIzh3/7bf8uXv/xlAEZGRvijP/ojDh8+vOFzHjx4UDPHRHaoToPFeqo6dyOs7NWhPpHdaM8FIGMM/+7f/Tv+5E/+BKjvD/b5z3+eo0ePbvOViUg7d2OoaSWdVnXUqyOy9+2pANQIP3/8x38MwP79+/n85z/PsWPHtvnKRGQlGx1q2khI6bSqMzk5ydTUFNVqtbmCvIjsLXsmAC0PP8PDw3z+85/nnnvu2d4LE5FVbXSoaSPBSUNQd5cqZ7Kb7JkA9NRTT90WfvQ3N5GdYbUb40ZDyd1sKB4ZGSGZTKpZeZ00y012kz0RgH7jN36DL33pS8Db4ef48ePbfFUi0nA3boybWc1ZHtBUKdqY3TLLTZUqgT0QgH73d3+XL3zhCwBYlsU/+Sf/hEuXLnHp0qVVj3vwwQc1q0tki+y0G6MxEQQBViwO3ApopSKgysWd2C3BUZUqgT0QgE6fPt38tTGG3/md3+nouN/8zd/kH/7Df3i3LktEWuy4G+P1cSgtwP0/BNSDWer8iyTe8+NLXmaMwbKsbbhAuZt2WiCX7WFv9wWIiCxXqVTI5XJUKpXNP++NG/hvvIQZfwNT86hUKhSuXCS9MEVy6krztWbqGlxfvZK85nvdhc+wmXbDNd4NqVSK0dHRnRXKZcvt+grQ//gf/2O7L0FENpExhvz8POVbN+XNvEnl83nCiYv4+VmIxyiefpaFA2P0Xnodv+bjXjoDx+7HcmOYcy+BX4NDxzdUBVppmGUn9Z9oKEi62a4PQCKyt5hL58h6VRgY6WiIYl2rO/f3EcxcwXZsCoUCVM4Si6dIlRaIxWPgVeDKeUwmC7NT9YOuX4LD9677c6w0zLKTQoeGgqSbKQCJyI5hjCE6/SwxYOSjv7Rm5cUUF8gXyh0HimR5EdPbS7FkE+ISRSH7cxdwU8m3z3npDMZN0Hhnc+70hqpAK/U9rRQ6tqMytON6s0S2kAKQiOwY5tI5mJ+59es3sO59cOXXmgjz3W+QfeQJSKeXBIrWMJFMJCB3GevQcax9o1g/9mHMD17iZqHCyMkHiQ0MLD3v1DWs737j7R8szm+4CtTOSqFjJ1WGRLqBApCI7AiN6k9DdPq7WMffsXLl5epFKC6QuHyW0ff91JKnWsPESFDEnH0BDhyh6gfk5+ZInjvNcLoXz7sXy7Iwvgfjb2CdfBfsG4Gf/cdL38tZ+r/Ku1Gt0XCUyNbSLDAR2RFaqz8AzM9gLr3R/rUmwpy/tQTGjcuY/M0lz2ezWdLpNNm+Psybr4LvwfhZ8vk80dULOF6Z9OIsWTuiUqkwf/pZ/DdfxVTLWG4MK5muV42S6fo/sTgmDJrnbwSsfD6/aZ9/IzOTunUWl8hmUAVIRDbdRiok1vEHcMZ+ddkPV/g72q3qT53BnDuN1VIFagwzmYk3MeVC/VWXfkD2fccIpi+TSKZwXQeuvMHU6H2kJt7EtwzupTNYDz6KKS5gzr8EPb1Y+49gvCrm/ItYjzwB7JxqjYbNRDZOAUhENt1GbsyWZYHlLPnZikGqtLi0J8eyMDUPK55o/shEUb360+B7JH7wXRJWBO6t95m8wgAWoWWIxeJw9QLm+CnMW6+BAXPxtXoAuvIGzFzDLMxi9Q/dcfPwZg2h7ZQgJrIbKQCJyKZbz43ZLMxBIoWV7Lwx2HrwPaw5JyuoYd1a6bn5XsZgvfOJtx8HNWLf+wbxxnuHYb1faPpq/fHCHNG1t+D6W/XXXzqD9e4fu/0zXL2AdfTkWle05udar9YgtpPWF9pJ1yKyEgUgEdl066mQRC99B3p6cd77wdue6zRImTDAXDyDff+7mj+z4kk4tHRTZItlM8QyaawPfHjp9Zx9Hsu0nPuVp7FS6fqDuVyzCtR8vlLEnH2+HuIOHOnkI99R5WalcLGThsN20rWIrEQBSES2jcnPYt46C04M88733VYF6jRImbfOYl7/PubYyXoD8ypab86jo6OQ7l3yvH3vw3D8VP28fg1e+w7GiWHd6kcyExew+h9ree/XIQoxF1/tOADdyRDaSuFiJw2H7aRrEVmJApCIbJvo9LNgDAQ1ole/37YKtBYTBpg3XoLAx7xxGuvdT6z82tIi2f5+YOWbszWwv/nraqVC/tSPrziUYypFuFYfHmNhFjM10XEI2qjGdScSCXK5XPPadtKihjvpWkRWomnwIrItmtWfxuMfnMZU1z+d27x1FirFW78+g6mWV37t698jmZ/qeLr5WtPdG9Wf5uOLr7Z93WZqTJf3PG/Tp+KLdBNVgERkW5jCAtYj720+9ms1Zi+ep+/e+zuuHjSrPw2rVIHM/DRMX6sHpNF7OtraYq2hHOvAURg+fNs1Wc7d/1/reoaZ1JQscjsFIBHZFvaR43Dk7Sbl6VyOcrlMlM93fJOulssU7vshent7STg2Viy+ZNXm1ht/4vzL9R8uzkHuMhwca3tOc/kNOHAUK9Wz5lCONXyoo+u8G1a7tuWBZ7uakhW8ZCdTABKRHWG9jbOVSoULl8ZxXReKRRJhCevUY0te07jxO4tzJKavNX9uLryypArUvFH39taD0sIc1jt/dJM+2dZbHni2qylZs8FkJ1MAEpEdYT0VDajfXGOxGL7vky1MQHkRc+/DWKlM87jGDb9voQAHx/B9n0qlQiqRIl5cgN5s81zlcpn49YskvArB+BvM9Y/Sf2B9W1PsFDtlFtZOuQ6RdhSARGTbrTVU0q6S0Lippsp5/PEcxOO4b72+pArUDFWjowDM3RpmS6fTjN4KP5VKhWq1io2hd+oyAL5XJTj3EhcWTnLy5MldF4KWh8ntqsRoNpjsZJoFJiLbLp/P4+eutJ3RZKKQbH9/fXPTlkpCKpFgdGSE6M1XKZVKVCsVuDFen5q+guYmqdlscyPRyclJoiiibz6HG9YAiMXiJKcniEfBjpxltd5NUFs/t4jUqQIkItsuG7MJL72Cc8+9S35ualVYmCbZN8zIvkGsWH2vLxNF+OUCpdkZQr9GLd6Dm0pDph8mr1IZGWtbUWqtSORuVYNs2yadTpPOPoB130MAxICeahXf87csNKynYXi9FR1VYkRupwAkItsucfUcJOIwcR4Gh5s/Nzfequ9f4cTqW1vEEhjfg0oJy0TYiSTFU+8nmUyQScex+oawLIv8rXADtweERtBIJOphaqXAkeqHzYoMnYSb9YSalRZD3Mk2e0aYZpjJnVIAEpFtZYoLcONS/cHERfz990A8jYOHGT8DR+/HKuahfx/G94jyM9hBFTudJf7qCxx84kPE43EoL4Jfhfjqs56Wb4XRGE66mzfSxntWq1WSyWTb91pPw3CjopNbJejtNJvdh6QZZnKnFIBEZNtUKhW8F58mHQS4jgMmYuYP/4Bi3zBjP3wMOwggPwP9Qxi/hlVa4MIffJ6T/8eHMWdfxXrlBWKn3gl9t0KDV8bEks2AEIXhkvczZ18gO1bf56sRNLbiRtp4r2q1uuJ7bWSYarXQNFuokpsvMzqQZqg32dH57mZVZbNnhLU7n6pCsh5qghaRbZOfn6ccS1M4dBLrHT9CeOgB5l8/R+W7z1K7NgG2Vd9jy3agVmb2xRe4+eoZZl56jfD574AxBM8/C6EPQPnmLFefeaZ5/tOf/xKV/AIA5uYk5uxLJBduLtkKI5vNYts21WqV6vj5u/I5G9tXjIyMNN+r0wbmTs67/GY/W6jyF89f5rvnJ/mL5y8zW6h2dL61tv64G9e6mee7m9cve48CkIhsm+zAANbxh0ifepTqoRNcfuEHkMoQq1VZOHMJK9WHlcxgJzJYw0e5+v/+LZExXPmzrxHl5wFDdP4sZqF+w3vjG9/kzFf+gjAIKE5Nc+nvnuHc174BQPiD5zn9vdcwb7y45BpSqRTJZBLjVQie+/8wN3N37fM23iuKort6k87NlwmjCIAwisjNr7w/WqvdPltst1+/bC0NgYnItmkd9rl2/jzF7z2HYyJS6R5KV6YJevcTy/aD7TB75iyz16cJQ4vw2hVuZpMMH+0DC8Izr+O/7ycYf+FVfM/j5a9/g+rEdUwU8dbfPs39j/8QE09/h1efP8Pxk8cYeMcE1sjbu7Zns1kSF18h7tiYN17Cev/PLbnOSqXC5OQkACMjI3dUxdiKxQFHB9I4tk0YRTi2zehAuqPjdvtssd1+/bK1FIBEZEfo8QOqP/4B0j1p4rE4AEE8S/zISQCu/fcvEY/HqRmDffgeJp1+Rv/xJ7AdByybV7/2v4iCgFrN5+yf/jlRrUYqmST0fc5+7ve59MoZjIGXnz/DB0++uCQAJW1IzOfq+4jN3KBybZy883azcj6fZ2pqqv7aZPKObrKbfZNu1+sz1Jvkw4/es+4eoPW+j8hupgAkIltmtSbVgVMPMXDqoRWPfeST/89tP7MdB4Dy7BzjT38HgHg8xsz5N0kPZEmN1G/Up5/7ASadwRkZ4PKiYWH/CbJRhGXXuwDMhVchCJrnrb32fcr3Pwq8vZdWtVrvo9lJwyuNXp9GpefDj96zJAStJ6is9nuz2vuI7FYKQCKyZdY746rTWT226/Djv/avl/wsnumh/9BBoijiK//6kxSmppvPvfKtZ/ngQw83H1t9A/Cutzc/TdRqpBPxt7fbSKUYG2u/e3wn1lM9Wf7a1Y5t1+uz0WCy2u/NZr6PyE6hACQiW2a9/S+dBqZkfz/J/v7m40ZwilcqxF2XD/3fv0y1WmVxYZG+/j5S6fTScHXs/qXnA0bX+dlWsp7qyfLX/tiDozx9NrfkcdUPm2Foo70+7aw0rXxychK/7GOikDAy+LUaAynNn5HdTwFIRLZMu/6X1ao8G20YXr7Y4eCRw+RyOWK2hZVOMzA62lxEcLXFCVfTuqK053nN45d/nkb1JAgCSp7H5cl5hnrbx6vllZaz1+abj0tVn698/xKDmcSSILVZvT7tfm9ae5/ef+8oM4UaGTeOHVSAnTMUKLIRCkAisq1Wq/JstGG43VYRy8NUJ4sTrmZycpKpqSls22ZoaKh5/PLP06jSlDyPKAxIWbUVz7m8ovPg4QFmFquEUUS5FpCK13ueWoeh1tvrsx6tvU8jI/sZg2a4E9ntFIBEZFvdjWnhjeA0Pj7O1NRU86bdWuVpvKa1YrMRvb29S9aeWf7vRpXm8uQ8KavG2KH9K56rXUVnIJMgN18mGXOWDIfdyXBXp9r1PmmauewVCkAisq02Y1r4Ws3ShUKhvl8Yb9/AW48ZHe2s46f1mJGRkbZDZ+0+T71Ks/p7tJ773uEUk5M5pq/Vh+fuvbX2UCMM3elwl7aMEFEAEpE9YKVhtEZIae3TgXoAuHDhAq7r3nZMp++z2cNArecGmJqaYnZ2lqGhoebaQ8uHuzYaZLSRqIgCkIjsASsNo61UXcrn88RiMXzfXzHItAsXre+z2SGiXW9Sf39/s8rUzkavYaPDjqocyV6iACQiu15r0Fl+k263jk5rAFjpRt4uXDT+nc/niaKIYrHIwMDAHV9/u2DRybpDGw0yrZ+j9fFa1hO4tHK07HQKQCKyp7TepMuB1XYNnk76jlYKF43zF4tFMpkMnueteI5OKyarBYuVznGn1ZiNVI86DVxaOVp2AwUgEdlV1rrxR26Ka4tFTvR1vgZPu2rFSiGpMTU8Ho9j2/aqYaDTkLFasFjpHHe6qvZaYabd99xpw/pKK0drCE12EgUgEbkr7tbNbrUb/2yhyv9+bZIwirg4N8l77x2gUi5T831si7Zr8Ky3WpFKpUgmk0RRtObGqKuFjOXfz0rnWWmF5mq1umYAa7X8e1srzNxJj9NKK1Q3zrnRxSdFNpMCkIisWyfhZjOahNdqRF5ueeVhdn6RJ45nmCuH7MvESDkRlUplSb/QmYvX8Go1XNdtVisa52pUhK7P5Ll4bYYTh4c5NHz7ooorWS1kdBoGVlqhOYoi0un0pg1frbdCtJrl6xmlXUMulyORSAAbX3xSZDMpAInIunUSbjZjgcOVGpHbVX4aiwW2Vh5OHB7GDio82DJr69ylCRZrFicOD1MrzuMtzFCt2GR6+3Bsm2TMWVIRemC0h699/02ScYeXxmf56UdGGTu0v+3aQctDRCfbfGwkDCz/bjsJpOut+Nzp+kxDvUnSriGfn2exWiW6FUxHR0fvePFJkc2gACQi69ZJuNmMBQ47GUKK3FRz2KvdhqGte1bNl2r87fkZgtDwytUFPnCij76kzQfvHyTWu4/RgTTnrueZypdxHZuSF/DihRvMl2qExnDvsMXEzCIDPfEVp9e3hojGdhnVarXtisobXYl6+Xe7GdW2u7Eid+O6bNteslr2ZvzZELlTCkAism5bdQPrZAjp2mJxybBX1Q85dXSw7bmieC/J1AKe5xGLx4nivRw71tusnFyfyfOdM1e4PFNmrljDsiwqno9fPz1ncyV+ZGyweSO/mFvg7LV5Hjw8wInR/g2FiLsdFLfyOpbrZLkBNUbLdlEAEpFdqXFzPRS3eOXqNWLxOIl4nIGU3dwAdfkNdXQgTSIex3Vd/JpHaS5HYuie5npBf/vaVSpVj9Ar4/ngh2BajveCiK+/Ps07Tx6BfI3PfOMMYRTxzdev8+TPnOLEaH/blajv9lDPWuFls0NGp+frJFRpVWrZLgpAIrIrlQOLG0Uozd3g0cNxanaKUyeOUCvO33ZDbZ3m3mjOnctdJqosMjExgYml+cp332RyJs/FyQJeZOGHZkn4aZjKV/jvf3OW4/uSVDyfMIKYazh7bZ4To/3LptTfHgC2o+KxmSGjsY1IEARMT09z8uTJNc/Z+pnLgbWkwfxuDL2JdEIBSER2tLm5OSYmJjhy5AiDg/WhrcbU9cVCgZpX5bF7enj0kcOkUkkq7ts31NlClXPX87w8fhObCL9W4+//0GGGYoaBwwe4edPhyJEjvHE9z/WbBYqlMg4Rju3gWBC0SUChgfHJRWL4zBc9bMfGrlkcHEh3NKU+n88zNzfXDA+NnzUCwN0IR41zJxKJFatjnWpsI3L9+nUymQyTk5NrrlrdCGDzpRrfu1JZ9v2oH0i2hwKQiOxoExMTTE5OcvPmTR5//HFSqbcXOGxMq+4ZHL1tllgjjEzly+TyZQ72uRD6PPvi67zn5EEGBwd55zvfyWyhysvjN5gu+EznI2zLxjcQtSv/3FINI+YrIf3pOL09CfqSDueuTFIoV9suANgqm80yPT1NLBZrbkXRCER9fX3N2VKbGQoa30kul9u0ZmnLslhYWFjXMfkihFEJWPn7EdkqCkAisqMdOXKEmzdvMjAwQD6fJ5VKNRfaw3VJxOPcM3L7flyNkNSTrP9vzgsgqpQYOZAhCILmTTk3X8YmIuYYAmPhWBYAlm0gan9NmaTLvkyCmVJAXyrO1NwCQbnA1ZtF+vr6iLv2kgUAW6VSKU6ePNms9FQqFSYnJ0mlUniex/DwcEfDQasNpa303GY2Szc2hO3kXI1j4oUqr1xduG2BRJHtoAAkIjva4OAgDzzyw1y8NsMBt34zX77QXrsqQjLmMFf0SLXZ348AACAASURBVMdd7j+Y5Z6szWAsRU+MJX0rowNpCqUKNwsefhgRhPXqT/sCkCFuWzgWOFbEoT6XfX0Oth8j9KsEtSr37Rsm6cKJw8MrVjdam4Pz+TwjIyNMTk42m6Y7qc6s1tez0nObOdNrI+fq5PdNZKsoAInIltlIA/Dy7S0+/GiSod63/1npmKfP5kjFHcq1gI++7ziHsvEVd4l/9OQIF3KL5A2Eq16NRTLucKQ/RjYW8iPH+4nFYjxd8ahUDa5jk4oKHOrrp1acJxdU1lwUsVFBGR0dxfO827a8WGshxeUVmI1sk3E3rHTtq/2+iWwlBSAR2TIbmY200saanRyTiruk4i5VP1xScZkreksWT3znsUH8yMKyWKn0A4BjwWh/kqQTcv++FAcGMiSTSX5hZITJfIWUVWNksBfP88jn80sWQVytKtO4ruVhYbXvq3UhxdbG5o1sk9Gq3caw7awVZpdf+2bNftO6QbJZFIBEZMtspAdlpY01l2u9Ma62Gef8/DwXJifwaklc16VU9Xnx0gxjB3qp+CElLwAD5lYLUAzAgX1pl7HRLB94xyh2rUgtNMQzA4wO31qPaHjpZ6pWq0uahBOJBNPT0wwM3N6vtFLQ6WT21vJjV6sMrRUc1rMx7Fphdvl1rLYq9npo3SDZLApAIrJlNqNvpLGx5mrVktHR0ba9Jo0g0Z/s5UqhRhBZvDW1yL5MghvzVe4/mOX6fJm+ZIzcXJEwDEklYhwdSvPDJw7w4w8fAeAvnq9XmK6+9vaQ3HLLF0H0PI9YLMbExMRt38NKoaV19tb8/HzbdXeWH9taUVr+eK3gsJ5q21phtt3vted5zMzMMDIysqO27JDupAAkIuu21cMQrX0jjancy3dRj9wU1xaLnOhL3XYM1KsbZ67Mks4Ok3YNHz15jJcu56nWAibmSjg2BJHh4++/j6nFKqffvMHkQgXbRGQSNu+7r97UfObq3G0hob7p59Lvo13ImZ6exnXd5my2Tr/LbDbL1atXqVart6270y5otAs7rRWo5fuPrVU5a2e9q0+PjIywuLh42+dfL+0jJptFAUikS3Xa69HOdg5DtN60G0MqfftG2zZKNzSGdrxaDb9W46OPn+DQcJZkMsnZa/MYY4i5DoM9CZ5/a4YoMlQCONQXw6vVGE362EEFaB8S8vnbV59ebvn094ZOvstUKsX+/fuZmppa13fU+j6e55HJZFhYWGBiYoJYLNZ8bq3K2Ua0211++edf7c/gTu712cnXJp1TABLpQuvp9Whnq4Yh2t1oGjfT1h6btYZuGs+7rovrusxXIg5RrxJ99H3H+cr3L5GKO1RqIam4A4Bl2yRTaXpicGi4jxtFiBeqbadyz/kr9/e0aq1eND5bYzHHtb7LdvuKrXQjXl4luX79Oq+++iqjo6Nks1lc16VYLJJKpejv71/y/qvN0lrPjX+tPyNr/Rncyb0+O/napHMKQCJdaCMzq1pt1TDE8htNa8WgNRCUA2vVoZvWqo2JQuxagUql/hlOjPbzzz/0DnLzZZIxh6fP5gijqLl2UI+T4bVclVRpnleuLvDhR+8h7RqGYh7pW+sSNaornudt6LONjo6u+fp23/nk5CRXr14llUrx8MMPrzjb6ty5cywsLJBIJHjggQfI5/Ok02miKMLzvI7ef/k1r/X7v9bQ3KyfWPXPYGuA2mkVF/Uh7Q0KQCJdaD29Htup9UbTdhjr1o07BasO3bRWbQr5OSZmFgF48MSx5vONYwYyiSUN18+fu0YsvuxGHfPazrxaz15ba91EV7rpN1aOrlar3Lx5k7m5OQYHB5t9Ne1CygMPPEChUKBSqXD58mXuuecegNuG41azfH2hO12JOr5GaG0NUJuxhcdmUh/S3qAAJNKFtntF3k7/Rt96o3nrVvOx53n4fsDFazNLpp6vtcBe47ln37jO3GKJF697xHuynBjtv+11rec5deIIF+cuL7lRNyo/rTOvVtprq9NhquXfTbVabbsvWKP3aXZ2lkwmQ2bwALVkP9Gya2oNKYODg4yNjfHWW29x6dKlesPzrfC4fLbYSpavL7RaKFlpynvrZ14rtLZSxUXuBgUgkS61nSvybqSHolG1SiQS2JbFicPDHb9fIwjcKELJC7hys4LtOHzl+5f45x96x5rBqd2Nut11t1vrZ70LAjZeb9s26XT6tpt+NpulWq1CvIdcIeLKYkS6ZnH1tUl++hGwb60+DXDhwoVms/ORI0fqDeN9fUsayTv9fVgeQu40lFQqFWrFPPcOZ0mlVv9zqIqL3A0KQCKy5TZy89xI1Wp5NSVluSwWK/XeEwtScaej/qflPT8radcLtPyzrhQ62jVFtz7f2v/Ut2+Ub116e6f7EyMOqbjLxWszHO6zm8e4rovv+81zvfe9711yvY0wVa1WqVQqHVfj2j1u1a5hezk1Est2UwASkS230b/Rr7dqtbyacjCb5aOPJ/nT775FX0+KTDK+pPdkpepMYwXpdgsRtmoX7Dpd9HC1pujlM6YeOJQljCIyyXp1p1QNcGybagDj16c5NJzlwIEDpNPp5tpB/f39zb3GWmfUJZNJyuVyx2vzdDJ82cnv72pNzjut6Vn2JgUgEdmzmosjHh5qbllx6p4Uo0P9bStJq21J0W4Rw+U6ufGv9JrlDd+t19eYtRcEASXPo1arDwcm43D/wSwnRvq4OLnI2et5FvIF3jE7x6PJJMlkkqmpKRYWFlhcXCSTyTQXkEwkEnied9s0/HZhZHJyEqhXdu60crNky5JbQW95P5GqQ7IVFIBEZE9aaRf5Ru/JwUwCrzhPxX27ytAIAZGb4szVuWYAWWkRwzu9vsuT86SsGmOH9lMOLGb9BLNTi3zz1Qks28ZEER99/ASjA2lMFDI5M4sfWSSp8eFH72keXzExrro2UeCwUPQ4W60xkMszNDxConeQbDrWrABVq1XK5TLT09NLAlHD+PVpJmYWOTJc48ETx5pN18CSYa2Nfg/tws1m9xeJdEIBSET2pJXWOmrcgBsBAFgyJFQOrLYL9G1WI26lUmH8+jTPvLVIuVIlCgMeL/ucnQkIo4gbM3kcDDYBsVicly/muOfQAQ71GM6Xa6QSDs9dKbIQTpNfWAC/SlirMjFXP/+s77BYi/Gl56c4eSTEGHjPkQzezBwXrufJL+S5d3+Gh+89yLVFD0KP3PxNwvAK73xgjKfPzzE1m8e9WuL/7MlyqKVPqNErlM/nuXjxIplMhmw2u669vToZJlTTs2wFBSAR2ZNWWuuoceMdGBho9sS0utNFIteSz+eZmKmHH8dxKBQKfPfMOFMLFfr6+jBWnFy+xL6eGJZjuHjT40ZxkonJBVJxh1QqxflcgVevzFGs+hAF2BjSdoAXOQSWQyVy8KOIly/NYBnD6bemCCK4tdE9r93w+M6lEoeyca7PVwmCkFjM4cz0myRcm8lChCmU+MLf/oB//pMPMjY2xtmLV/jBxCzBubfAKzI3N0c8HufEiRPNCtJ6lzYQ2U4KQCKyJ602fX21G/B6FonstFm3tacnm81yZLjG5UWYWyyxWA0JilfIV1yKFY+y1UNfwmKmaHj3UIZS4BMENql0itxsyNyCz83FKkFk8PwIC0NkwLMtQgNYBtuGWmCohQZjIuqxxwYsAEIDC6UqQaWAR4xYLI5l2YRhyIIfEoYhtm3hWBEXr82QTCZ55q1Fbs4WwLi8a3+WkcwAnpWoD7Fls0uGtoDmjLbljderfTfbtSyDdCcFIBHZE9rdSId6k7d2al/a67Oa9Uy376RZt90K1mOH9rNQ9vn6TAHLiRNl7+FHDhTJh0lmai43iyHYDq9MLJC0DW48zoJnUQsMc8UqNT+iXqMyWICFhe3EiKJ6+CEC14YIsIwhuhV8oB6BXBviNvTEIAwgnYxBFBLH550jCc7MxLFNQE/CZSgT45kXXsOruc2qWfrAAS7kFihXqkwHHkePWkuGtlYaZmyd6r+wsEC+7PP8NQ/Ldja0J53InVAAEpFdb7WNNTcyo6jT6fYrNeu2VoZy85XbVrA+OZLhxlyB2YKHG3OpWklOnDqJXSvyJ8/foBJC6EcEoeGmFzDYC7XIwWDh2jahHWEZwFhggWNBLQJjLIyBKDI4NlgGIsvBuZV/Yq5FNhXjkcM9ZJM2cRtGR4aZKkSElQJpUyaR7uGJTICxHI4fHMIv5VnMz3IxF7F/KEump4fJBY/rM3lK5SoDfWly82VOHR1c8v1Wq1Xi8fiSrTMuXLiA67oEQUClUuHKvE/ZS9LT03NXhhtFVqMAJCI7WifDTKv17WxkRtFGtupo1boVxEBmgEq5jB9ZlH2Dm0hyowg+Do7rNI+Zmsvz1mSBohdQ8iJcxybCJhm3iTs2JT8kCCPCsN7zY1sWsRhYloMxIdXAYAxgwLIgGXMIjYUXhNgWhJEhbtuk4g7TxQjjpihUQ3JegbjrMLvo42CTLIUUSlXeO9ZPxcRZMBlengJjDFcn82QyNQrVkHOTJZIOlMIq1VrAS2/mmjPaGusLRVFEMplsbp0Ri8XwfZ8jR47UN2ft9clfqy8auZP3pJO9SQFIRHa0Tio4AymbSrlMLB4nEV+6uGHjmJX2vGo3dLbRdWhaV55usIMKj4wm+buLi/SkUnz5+1c5fqAXx7bZ35ckX6wy1BsnYRnKtYieVBLHCaj6EemYgx/aFH2Daxksv8CAVWbexHHjcWp2mshYVGv18GMsC6iXfmqhwbLq1aDIAmOgUA0Io5B8OeD6fJXQ1INHTzJGzQ+JjMGmjO8HXJmtcHx/kWt5D9tKUa1VqNQCSpHHXHmeVDxG0rU4MNDD37x+nYQVEIUBP0N9k9nlCx1Wq1Usy6Kvr49UKsXg4CAAR4+qB0i2hwKQiOxYy3cgX4kdVHjieIZi4HDqxJHbbqSNQNMaTEZGRlac8t7J0Fa7HdAbe281dohvHG9PFjkwkCFfrk91L1UDMskY5XIFO6xRLfk4VoIIC8t2iMcs/LBGOm5jLAvLcombKsaJEY9i9MUzzNccCsWIwBhCY3Gr/5laGJGI2WBbpKwQL/JxHRvbcQjDkFotoloLMZZDzAEsCwtDMu5SrvpgonovEQGTcwXC0CKw7Pq1WTYOEZGJKHkRsUySS9NFTo5miSdcFko+U2WLB7l9N/coiqjVasTj8SWLSW7nnnTS3RSARGTHWr4D+UpaA0u7jTUbz1er1SWL+s36ibZDZysNba1WGcrn8829t8bGxpY839hRPhNZtyouLuVaQG/SpYaHH4a8cKXAvv4MtlujUPEJQ5vphTLYMRwnIPRrZGMWD953nKmqy7Urs9RCn8jU38MAjQG1uGMRRJD3QiITEUQ2fQmHcmSIjMGxwDcR5lazdNI1jPbFWHAjsCz6U3EmZktEJqLsBfQmwDIhqZRDLBanGhgOZWOU/AjXtnjj2jxxx+DYFn/z2jWS1HjXfYea30tjtemVlh4Q2Q4KQCKyY63Wv7O8GtOuIrP8+UqlsuTc8cBadcr78nOsdj1LQ9jS/ayGelPNmWU/+0NHmVqoUKjUOHfNYs73KXohQ2mH3nQCLzBEkeFmvkixBuBjWRYx23AzdLg0W6Mchgz2xCl7PmXfUK/hAEQYLDwvuDVLDGzbxrYdaqFhX8pivupiOxZWBEFoSFiGwZ44XmiRiMVIJeMc6E+xWK6Qywd4kSGsgG1ZEBpq5YCehE0tCHFsi4ofYVuGYi0i4VpMzhX561cD+tMxBnriK+5vJrLdFIBEZMdabc2etfp02j2fSqUYGxt7+/yw6pT35edY7XqWP7f82MZQz2yhytNnc/W9vSIglmSoL2K2HNJX8SgWi1ybrxJR79uxbIiw8CPIJF1uLAbEXEO1FuJYjZV9IuK2zWBPnIoX4Ac+SStgIUwQ4YIBP4zIG3DdeiCybQNEWI7FQiWiElRxbYv5mTJXphfIFyuEoSGyXaxbFaXA1N+r4sO+FFR8g2NZJGIONcvCmIhYzCXpOpy/nufAUD/ZpMtBVXxkB1IAEpFdaa3ZXZ3O/kq7hqGYR9pdfYPSjV5fIpEgl8s1K0OtM9ZqQUQyHmdfX5KBWkDKDrhSqUIUEAWGhAvY9envvckYtSDAsS1irk0mmcYYQxSVqUU2lg3FGkQ4+CbCN049PZn6DC4/rE+Rj9s2fhhBVH86MHCzUKUWhoBDEEXUfEMUQIANoSGMboUxCwyGIAzxA4veOBR8i2Q8xqGBGGWvRiIWI8LmbK7I5fkafb29HDhgsfzb1QKIst0UgERkV1prRedOt1xYrZLU6TnaNUc3jm3sdD5fqhHFeyHymzPW+tJxgsCnVCqRTiW5b3SI3GyR+VIB1zb4kUXCtUknEwz1OJwYynB6okjo++QKVYLQUDMutg2JmIMxEAQhkbGox5m6CAsLCCOIjEUm6RJFEQnHJogMQ0m4ng+phCH1mfQWMdfBCgIs26mvI22DH9UrTlEEMdcmsGM8cKQfy7I5eSDNK29eJ4gCvNAmk3BIJOo9Vpcn56kV3x4eXL5u008/MoIdVNZcdkBkM+25APTNb36Tv/zLv+TMmTPMzMyQyWQ4duwYH/rQh/hH/+gfNVclFRGBzdl5fLUQlc1mmS/VeOatRSy7RKVc5pHRJHYswakTR7gwfo03rs/zjtEUJ8cO8Nr4DMeCgBvzJfYlXFLpFFjwjgNJXh+f4uYiFPx6mGmViluU/RBMvRMILEIM9q3+oMY/fhjQl4hRqln0Jh1KtRCsiLjlEblJHMemFhjSMajaLhW/flx9Zhg4toVjQzIeo+QbZhcrHOiL44QeMQdihMQTNpabwHVdTBRSmssx77+9FcnydZsuXpvhcJ/d9vsTuVv2TAAqlUr8yq/8Ct/61reW/Hxubo65uTlefvllvvCFL/B7v/d7vOtd79qmqxSRzdDpQoWd2IzNOVcLUalUiijeSxgt4FVK+JHF9ULEBx8ZBuC1XIWyV//3yTH46OMneOH1C4z1Rzx7NaC0WMG2La5608yXHMq+SxhZt73PYsUnk3QJAoNj23hBfcjKqY9iNQOHi83UokcqVu/9qdZ8alVDaCcIA0NoDMYyGBwsK8K2I+pTzeqhKhW3CSMoV2tUvYB45OElMgz29NKb6aFWC4g78ODRfi7PVjjcYzDVAkUrYGxsjEqlgl0rYKKwuQXGicPDzQqQyFbZEwEoDEP+5b/8lzzzzDMA7Nu3j5//+Z/nxIkTLCws8PWvf53Tp0+Ty+X4xCc+wR//8R9z7733bvNVi8hGrVZxudNwtJHjO9lg1a/VKFY8biz4OE6W//nMOcaGUoSRRU9PD0BzS4nBxx7mr549Q09inlQqRcIKOdg3xNXSwgrvcGtDVL++vpAfRESE+OGtZw23ZonVw5AdGSIcytWQMDLUiHBtm6RrEwFRZBGPuxivRiUyGFM/Ou5ahNj0phzCwKM/HjCQTuJYkOkf4P/6yeOcPvsWk9Oz/MXz47ixOK/4NX7qeIJ3Hx1uDgkmrIBHRlNcmfPotQqknP0MDt8+S2wzg67IcnsiAP3pn/5pM/ycOHGCP/qjP2Lfvn3N5z/2sY/xH/7Df+AP/uAPWFhY4Nd//df54he/uF2XKyJ3aLWKy0ZXcV7v8eu5OQ/1Jvno4yf429eukk6H2CZgsVhi3qnhk8Z13SXT8OeKHm/kSpRqUPTKHBxI0pPp4dRQnlpQY6YaqzcoN1k4RCSsCCKbZMwiDMF16/086ZhFNQA/NKRigGWTjllEIVQNgI0XQsIyhGFA3HWpejWqfoRt1QtAMdswnLYIbJeBBGQSKUpVl0QihhNPkruZZySb4sT+NK9fuoFXi7CdGLYTo+z2MTIyArw9JPjclXkmcjOYWpk4Pk88+u7bvs87/b0UWc2uD0BhGPLZz362+fi3fuu3loSfhl/5lV/he9/7Hm+88QYvvvgi3/nOd3jiiSe28lJFZJOsVnHZaE9P607lcPvsreVWujmvFIwODWf5mUeTzZ3hezM9vPvEIPv372e+EjE6kCbtGnK5HGevzpGIOQwlQ8q+RaHscT4XMj8fMFi9htMzxkzZ4BkHF+hJ2mRiNjHLYCyLRS+sj1pZkHItEnGHnlR9t/jBtEMmFaffFHk9VwQnhbFdbNsm8H0cp946nYrHCKIArPp6P2EYUm+Hjog7NgvFCg/sT1CoGa5ezxFUK1zILfD4PT0Mxmo4VowwDEgmErzvwWNLmsPngwQXJxcplgKC0GbOjy3ZP62xVMFm9GeJrGTXB6AXXniBmZkZAB599FEeeuihtq9zHIePf/zjfPKTnwTgr//6rxWApOvtxanIG+3paQ00o6OjzdlbjXMut9LNebWqxVBvsu26Q4duPd94z32ZGOlUip6eHmbyJRKujWsZ3FiM9P4j9MbTpFIwuVhjoDeFBcStiPlqiGMiIgNDGRfXdhjrN/Sl4ljJDE5llt60y8GhNFdvlLCCGpUoRiYdp+pHxB2HIAyoBoZY3BBEhiiq9xH1xCxG+2LsH+jhB9fy+JUK379qSFgh1cilp1whkUxwZSrP2HCG4eE0BZPm2GCCwUR4W5gMwhDHdcG2KYVx3pqYJGZqm/J7KdKJXR+Avv3tbzd//YEPfGDV17Y+33qcSDdaPhW5sQ9Wt1oeaNaqPqx0c17ruKHeJGnXkM/PU3GXVokSiQTT09McO3KEf3z0KLn5MsmYw/9+ZYLJ+SJ2KsuP3DfAy1cXmJ8rEmLjBQbHqjcul2tRfSp8ZBFUDANpmCmFLHoe1VqRWmC4Lz0L0X6+eRVuhr2EBjzfB6u+WnRwq2/IikIycbCBuOvQm0oyV/GZLC4wX4lI2y6BsejN9FGreNixJOlUkmMHXOygwtDAMBcnpsEPmZgokclkqFarJJNJ7hlKcd+BXq7N5CmHcaYWK8zkQ06NpJkLkvQVql39Z1G2xq4PQBcuXGj++uGHH171tcPDw82/2d28eZO5ubnmjsQi3Wb5VOTGPljdanmg2Wj1oZPjVqoSeZ5HObD49isX+ZGHT3Lq6CAXcwvk5svcmKuQirtcLtgc6EtyLlekL+liqAeeWhThBxGJuINt2yTjDgcHM1RKRW4WypSD+oam5519zM6EeH6I49hEYX0n+XTcZnSwh1rNo+bV6Em6WMYQj8eIrBjjU3m8apUAF9t1sOwkobGo+hEx1+XBgxnec+8gAz1xbtxc4C+eu0S54mER8ffffZibly+TTqexLIsDBw7wEyf7+LZfIF9zcC2DF1k8dyMiun6FMHiLj33gPk7dc2Dd379Ip3Z9ABofH2/++vDhw2u+/vDhw+RyOQAuXbrUcQC6ceMGN27c2NA1nj9/fkPHidxNowPpVffBkvXrtDG6UR2K3BRnrs41h8MiN8XfXciDZXHluxf5+4/ex1e+f4nJ+TKVWoCF4ex4jpMHs/SmkxjLouQF9CUcwCKKDIExpJMxbMvCti0qtYhyYFMJLfzIIqrWKz7GgG3VF1A8mE3Sl4Q4VbJph3cc7SGe6qEawtV8wHzJx4QBfmiI7Ii45TDYl8LFEEYBSSsghcfIYC+pVIoLk0WwbCrlMql0mjcnpjk2ECOfzzMwMFD/DtIx3rE/wXMTVYy5taZQqcp8qQrG8MVvv8kvJZJU/XBPDdHKzrHrA1ChUGj+uvEf1mpay9Ktx67lq1/96pJma5HdbqV+FGmvk36pdo287aRSKcqBddsQ5Hwloj+bxfM8YvE4Z6/Nk4o7xGM2hSrMFav0xgy52QX2ZVLkFj1sYGqxSk/cphZEHBhIUakZDg2mGZ9aBGOohtatjVUNtbAGCYt3H4qRyfRzeGSQHx7bx9mzZ3lj/AZOqcjgoTGOHs5SCW1ueosY2yWdiBEzHvN+DAzkF0vEYi42hrIxzJV8/tfL1zg4PMjpK0XOTXsk7SSZWJwfPnUvYXmB++67D9u2idwUk/kKhw8f4vi9Ca7fLLDgW/zVi9cAiKKIUsXjfz77JsP9aQ3Ryl2x6wNQo4wMNGdvrKb1NaVS6a5ck8hu0digs9utVbnptF+qWq0yOztLf39/2/dpDVHthiBHB9Ik4vHmtPgHDw+QmytwdCBO0rVxrCQJarhEDPZY2HaCyHLIzZWwMDiOQ8KxsZMWflh/HEUWlh1hW/X1oR3bIjCwvzfBL3yo3jaQz+c5vH+A4twUvp/GtutT7Pv7+zl1rP7/zJ965CDffu0K3704T9UPqQSGTCJiuL+Hmu/zzOUq8fhNZp67jh/eei8LDuxLMzoyQto9QD6fJ3JT/O/XJlu2wejn5IghclNcyBU5c+UmUWiwTH25gNbvZ7U/q1ozSNZr1wcgEdk7tusmttZ6M532SyWTSYaGhkgmb39ueYj6sQdHbxuCXF6VS7uGd2R9ZmzDI/sTXKsmKVeq1LwqJ4ZiJKtJvAAK1ZAD/QkmZgoMZ9NMLXgMZRIUqj7GGKxblR/bqvcBZRIWvT1p8vk8UP+LZDKZbK6Sny/7nL6S5+LNaVKJGKVikZ9/4iTHj4zwd28u4IURoTEs1iweyGaYmCkQj4VUagFhFDUXXcSCfDng3PU8QaVAxg0pBsW222Ck0/CLP/EAr41PkZ/PM9gT49xsvSO7kyFarRkk67XrA1A6nWZhob46qud5uO7qH8nzvOavG6uvduIjH/kIjz322Iau8fz58zz11FMbOlakm2zXTWytmVud9kuNjIyQTCbbnmd5iKr64W1hpzFV/NTRem9iLpdjX28SvzjP6PAoY/EeKmYfKavG2KH9lAOL3HyZn/2ho1T9kGTMWfJvIp/LuTncWIygWub0lXnOTXu4MZe/uVDg/uM29x7oa372cmBx7nqeZ87PMTVfpOIbeqw8C4UCf/30Ivv27cOxIiIT4VgW8ViM0cFe3nW0jy898/+3d+dRcld1/v+ftS+9r+klW4cmCSEGRYiABFzgy0gcHI0wKossLmdADnMYGHQcESKOzhkQnVGPOsfxGGZEHTIjImf4a9HIsQAAIABJREFUDQFhFJUIBEiArGTvvbuqt9rrU78/miqrO13d1d1VXcvn9fiHqnT1p253hdSr3vd9730Tl92K1WIh/tbO0ZYE1Fe6+OOBbqLhEDarhf93dge2IR/hSIRoJEJ741K89sRbodfNezesAFYAsH6aacdMU5HaM0jmquQDUFVVVSoA+Xy+WUNN8hNP8nuz1dbWRltb2/wGKSJZKdSb2Gwrt7Ltl5rpOtOFqPQpyOn2HUr+HlpaWgiHw6dUxjxvjS2Tw4cP02gZZknDEtzuJg51DeKyTuzubLPbebM/mApAh3pH+NWuLvpHghztG8PjtDEaiuDAwJ6ws78/RJ3XhyMawGZxY7GAy2FleWMlq2oSXHFWE68eH+asNjcvHBkmZkBzjZt3r23hjaO9JBIQNxIM+ka4eHUtew4co7nJhS0WBLt72urf1CnamaYitWeQzFXJB6COjg5OnJhonDtx4sSsK8GSjwVYtWpVXscmInNTzG9iC+2Xmi1ETRf+sv19BINBenp6gImwlGl/orevWsLuvi6ibx2TsW5pHYdP9vHGiSFeODaOL2jQNxwgFIkTCEexWy0kbLC0sZKmmgoSljEuWOnhqcMxXC4PTruNJTUeDHuCw74Y1dVVdPX7WdXowe20UVdXR5XHidfjZig6TiAYxYiGGer2UWcLEg+G6esLUVVVRTQapbKyMvVzT/cz7jl4gvFAgHg8PrFTt8m3bpCFKfkAtHr16tQ5YLt37+a8887L+NiBgYHUEviGhgbtASQii2qmELWQ8Of3++nt7QUm+pCS10mfkvN4PHSuaGP5AT+DgThOh40/Huhm7/EBfOMRxiIJonGDuDGxk/SEBF6XA4/HQ0N9HZdsOIM/7t7PmdEghsWB2+3kD68fpb2pBo93YlqwubGO4bEgVVVuopEIKxvc1LibeeR3h6iq8LDrxBhrq8MYhkHAsLHU4yYajbJs2bJUlSu9GpT8+UKhEJX2OONjY9jsE8v8tXWDLETJB6BNmzbxwx/+EJjY3fnTn/50xsc+++yzqdsXX3xx3scmIsVjujfVfDdb57Kpe6YqT21tLaFQKHUb4GD3MK+f8LFuaR2tbz324Il+jHgU30iQ4XCCfcd9WG0War1OxsIxKhxWDCOROgDVZrPSWOnkHUsr2biuhfamWnjbat707yUQjnOsb5hI0M7BriFqa2vwul3UVHi44txVnOzpIzQ+yu9eeo2xcByX1YLDmgBsjCS8HB4MUlHppftklI9e0El9/Z+CTygUwnirXwommrStVittjTVceWEtJwdG6VzapOqPLEjJB6CNGzfS1NREf38/O3fu5LXXXpv2PLB4PM5DDz2Uun/55Zcv5jBFpMDSG6yBnJ/4PttzLjQAZaryJK/d0dHB0NAQ+/fvpzvk5Gc7T2K32fifFw9zzUWd1FRW0FBXTf/ImwwG4sSS+cJIYI/EAQt2u41qr5WxUAQSCewYdNbDmiYHw8PDqUNb/2xDK3840EckbhAIR/G67HQ2uljZ3pJqwG6oq+axvd0EQyFiBjidTmpqXNisFiorbdTEXKlFK76gQXva78tqteL1eidNB6a/Bp3LWhb0uxSBMghANpuNm2++mXvvvReAu+66ix//+Mc0NDRMetz999/PG2+8AcDZZ5/Npk2bFn2sIlI40/XYTNdsnb7KKDK2sACTy6bu6ao86Q52D/PLZ14kONTDm5EaRmNO4vEIdquVbc/sZ21bNRabHavNCcRS32cB4vEEDpuVOo+F/tHoRCUoHqfJE6fFGWb/0S5OGg04nONv7d3TwhntUXad7CYctdIfiHBpTRWtdd5Uk/LQWBint4o4NuLROGevbmdVa11q2qo3rZk5+Wfpv6+pAU8k10o+AAFcddVV7Nixg+eee44DBw7woQ99iCuvvJLOzk78fj+PP/44L774IgDV1dVaki5iQuk9NsFg8JSvB4NBDp/s4zeHRrBYbak3eq93/gEml03dySrPwe5hntzTy7qldXS2Tmy4uOdIL9954nXGA1ECoUqqXQaGkSAUTZAgTiQep7nKicVqpbbKQ30wytB4FACnzcqyOjeBqEFgbIxKI8yapfUsa2mltcrK0NAQL3eF8cVHWNpch8dpxxc0qKqtZ2nDKAe6h3E5nfxm3wCRmMHI6CiGxU4oEmM0bjASTABW3uwbpcYWprs7wbpV7fzFxpXsPek/5WfM9PvSRoeSa2URgOx2O//8z//MHXfcwa9//Wv6+/v57ne/e8rjWlpaePDBBzn99NMLMEoRKRbTTU35/X6O948QCIaoqKggbhj4ggbrl7cWcqjARMB5+VAvjbWV/M8r3cQNg//v5eNcuLoJN2EOdg0SCEWJGuCwO3F7nNTEIBCJYLVCNA79Y1HWLq3DbnfgdUDfcJAqt51AJEFrQxXRaIRYXw9N1QYXbWhj5cqVHD7Zx5N7fRwcNAjEg4xHraxbNlHF8Y2F8Y2HsdssOOxWvE47fp+fQd8wfUELLpeLao+T+goXDVVuxgPjPLarnyqXldd7gmzeeDp7T/qJGwZ7T/pnPepiutdsulA005ElClGSriwCEEBlZSXf+9732LFjB48++ii7d+9mcHCQiooKli9fzqWXXsrHPvaxOe39IyLlKdN02LKmCEdGJu4vxgGxU9+Qp3uDPtg9zHeeeJ1Y3CAQ6cXpsBKPRhkNGzzyhzHcVgOPLYYvYMFmt2GzWrhoTSOv9YbpHxuaeCILLG2q4tr3nAHAkR4fkeA4r3YHCcfANx6mzRWjflk9tV5HKvz85vUuen0BrFYLtS4HbqeNareV/YdP8Gp3kPpKN4OjYVbVV1DhdrCy0YrP7yQxbGFJw0R1KhCJYbcmCISiuBwOIliJYeOVw32MjI5OHE9kt8+6pH2612xqKJrtyBLtFi3pyiYAJV1yySVccsklhR6GiORJLj7FTzfV4vF4WNe5giVLZj/0NFemNmbv378fu93O/pM+jg/HePtpS3izP4jFasOaSOB22hkLholHI4RiVpw2C+PxBIl4nOYKJ/F4jNbGGiq9bmoqrHicdiKxOJVOK52NE2d6TSzFb2XPsSFCx08wMByge2icWK2bAZuXK9++mpP+CP/9ch9D/gADgTh2qxWbHcLROCcHRth/IkKF24nX66WlxkWtG/5sQwv1lRPP0bNngOHxEHVVHi55Wzt7j/ZQ1+Ll/w6NYLNbGBsMsL7FQyQcIhAI0NhQP2PYzPSaTw1Fsx1Zot2iJV3ZBSARKW+5/hQ/dcpkMQ+ITTY2h0Ihenp6cDgcHO4f57HXR4jGDJ55vZePXnAaDrsNq9WC22rline28uxLh+gah0gcLBYrjdVV1Fc6qK6c2G26oqKCam+Cd3TUc6J/BJfDylAQfrHzSKoqEorE2HPMRzAcIRyN01rjxO3xcNwX5vlD3RzpG2NoNIzHYaPG6+RtHY30DUfoHw1iRMOEInFO+CPEY3Hc1jjDw8O0N00cYTE6Oko0YcNht/KHA30YsRgn+4dpq6vAZndgt1oYi9tY3+ImYbGxqq16ztNfydvp92c7sqSYN9qUxacAJCIlJZef4rM95T2ThVajPB4Pbrc7tfS7rq6OF3othGIjxCJRnHYbA/4xbv3Ael4/4aOtzovbaee0ljoef+EIw8E4iYTB1RedTmtDTSrIAbzZH8BjS1DvdVDhcWC32xkLRfjfl49TV+ni+QN92KyWiWBlh2gsjhGP0Ts4zMhYEP/IGPGEhUTCSlO1m1A4zmvHfRgJg1gsxvLKCF5vJa1LarEYMYIJJwADY1EikRiGNYF/NICRsOCxxal0u4jH41RXenizdxS3047L7mbTadV0tDfPOB2Y7Wue7ZElIqAAJCIlJpef4vee9NPrD1DhtuNxzt6Hki4YDLJ//34cDkdqXPOR/uYeiFnoG+klEI5hGBYcdgtvP20Jna011FW6+MXOI6lDRDefsxKsDjCiDPpGqKtwpQ5RBfiLjSsn9foEIzH2dQ2z7+QwkVgcq9WCzWrB47BSU+XhXatqaamr4Pmjo/T5x7BYJnZDdDmsHOobwzUUJBo3sFstxA0YjlqwB6J4gzGaqj2sbKkDoK62Cl/EipFIYItFwGrHsBtUuG1cdGYbe0/4iTd6cTttABjOKjwezylnoaVXfVpbW7P+/S5mBU9Km7XQAxARKYTB0RC7Dg/QNTTGG8cHCYTCc2p69vv92O12otHovKtRySXt43gnQoAvQLXXyVkrG1jW4OXD561i/colwJ/6W8LhMOHIROhprfPy1CvHef7gAI/87iCDo6HUtRuq3Lzz9FZWdyxldWsNHmuchgoHkCCRiBOPGyyp8bC8qZoPv7OdP9u4GsNZSSCSoKnGg8Viwe1yMhiIMxKM0jcaIhSOMRaKkrBYiWInHIfhsTAjIyMcO3aMoaEhTpzsobnCSqXTQjwex4hFCEUNzu9spL3awRnNTmyJODC50dzlcjE2NjbRFM1EIJy6GSJMBM/u7u5ptzKYzUK+V8qPKkAiYkp7T/oZCURorLATiUJno2tOlYNMm/Zl62D3MP/yP3uIGwZP7T7JrR9Yn+phaarx0lJXybvX/elw5+TXXC4XVouFzqVNdPsCOJxOjEQCh9OZqmAl+5rcDhtPvHycvqFhSBg4bDYMI44NWFrv5v1nLWNt+0Qf0lMvH2ZPd5Buf5DBkSARwwIJAxIQjYGBgQULViy47DbGI/GJIGUYOAwL+4/FiYz5sMcCeBxWYkAoAdUeOxVuJ05PBS6XC7sRZvPZSwklnJOmqcLhMJWVlYTDYSBzpW8hPWA9PT309vYSCoXo6OiY82sm5UUBSERMJ1n96fYHMAyD5XUu3tHZNqdrLHQq7pXDfYTCYWw2O2Dw+gkfV5y7MmMPS7K/5dXDvYyPjwMTocjldGK324nEDIYDEQ52D/Ps692MhSIc6R3BPx7C5bADCS4+o4mVLQmcRNm0fjntTbWc7PezbcerDIcM/OEEFW4Ho4EoEQNg4lwwiwVIABjEEzaMhEE0ZmCxWBgLxenGistuJZFIYIkGuGzDcoL2anbu76GqwoPL6WRlSx3hMR+VlZV47Qk6WycfRp1tn49WckmuKACJiOl0+wI47VZOb6lhLBTlwjPbJg76XERtlRaMeJxYNIbX62Hd0okemvQeluk29Xv1cD/hSJRDfQGued/61I7Kuw4P8NrxIX7zRphINM6xgTFGA2ECkRgVrjhuh5U/HuzBbbdiRMZZ1uDBFzQ4crIXLBbi8RhDo1GODQSIv3UavAWwWS3UVzgJhMKEYxAHYnEDm2XisFSb1UJzjQe7y8PQUA9VVVUsqauko2MFGzqWTBp/0D59eEk/6HU2CwmeLS0tuN1uhScBFIBExISS00luJ1S4Haxtz/0bYqYdiZOrm9Ysrecv3ubj5Eict61oTB1rkf79U1eoJae8ApEYI+EEfzzYx9KGSsZGR+nr78fq8BCIGuzrGiYWN0geqD4ejhGNQSQcIRIKkMDCfzy7n/Wdyxj0DdMzNMaJEYNQfPLPkGAiAC2pqyARc3JscIzRcAISEwnJ47RRU+FmeVMV1S6Diool2O12WlomDiud2pA807RWpoNec0nL4CWdApCImE6+l0vPtLw+vYflfRvXp5Z6T5W+qV84EmHPweO0N1Yx4B/jyFAIm9XGsYFD1FfYGRkN0D8eI2oECMVOuRQ2qw2rFcLxGHGsJEjgcrkYHguwt2uEgaBB+poYy1v/9TgtuGwW4tEwpy+p5FDfKE7bxNfbqm2saa1gQ+dSNnQ047Un5r0lwGwHvYrkgwKQiJhKemUmfdn4QqXvW9PtC56yI7FvLMzrJ3ysavLQ8NbqpukqEsnr1Hk8qU39opEIlXYnXV1djIWixGJxxqMRgpE4fcNMG3qSLIDVCpUeB4GAgdXhwOWwE7PY+cPBwbe+d/KCYKsFmiosOCwJwobBwEiQk74QboeV8bBBhdOC22bhjHpY2+RIhbtMP8tsoSh50Otim+ncMCl/CkAiYhoL3fhwJpP2ramrm7QjcSgS4193vJG6f+sH1tOaIRAkr+P1kqpS1XmsWGNBDg+6qauM0DcaYTwcJ2q81ayTqtmcymGDWq+TOq+d1kob4UiUkQgc6BknMc3j6yqcnN9RRXV0kFcGLMSjNqKGBYsFYvE4FQ6oclnZtKqC01e0Mh6z8OyuA3QubTqlj6qYz97K598FKQ0KQCJiGrOdFbUQk5fFT55ie25vz6Tnff2E75Sen0zXSY67ta6ONZXw0vExsIynRZ7pw48FqHPGiCegscJGfU0FkXCY4VCcY77QtI9f0ejl+ncvY83SeoaHh6k5MshT+0YYCsQYC8Vw2K24nU4uW1/H21c24Kys45HfHSQcifLysWGued/6SVNhi7lia667cufz74KUBgUgETGN2c6KWoip01npDcDrltbx1O6TqedNrvia7TrTVSne0dHIyaFxRoIx4pGJgJNcpe6wWbCSoMptY2NLgqHRGEG8NFU5MSxWhiMWBgPGKc9Z67Fz+TkrOHepB5clxvDwMMG4lSO+GIlEgtFQFJvVggVY1lRNQ20NhmFw8ET/qfsQOcIZd3DOxUG2mcy12pTPvwtSGhSARMQ0CnVWVGdrTeo8r3VL6zJWf6aarkqxtr2W37zRTUOlC1/Agtthw2Gz8K7OJaxcUkWVx0l8uAsjOELMWstrPgcxbOzvGiGRSBAMT24YqnTZuPk9y9h45sRBpn6/H7/fz+4jA/hGowyOhTHiYFgSOB0WXA4bnUubsMaCdFZ72Nt3HJhYLdZa58Vrnwgf01V98jklNtdqk84NEwUgETGVQp0V1dlak3XwSZquStFQ5eaj563ikT+8idViwUgk+Oh5qyZde2jIyfHjx1m2bBnvcHh5ZvdxBofHOdg3TsxIYLOCxWKhvsLFB8+ooMk7sUtyco8cv98PoREGR60EYxMlJofdSmtdBVdvOp32phpgImhsOm2Y4/1vVYYyNEMn5XNKbD5L3HVumLkpAImILIL5rDjKVKXobK3h2gs7OHii/63m48nBqr6+nvr6P61wq7TFOTowTjASw0iA22mn1uvksjMbWN9sIxqN4vF4CAQC9AyNcuD4IAmHG5vdwEoUl91CdYWTy89engpayemslvoq6iqcWYWaxdyHJ5/TbVIeFIBERHJoujfehaw4ylSlsMaCLK2eWB2WrMZMN5bDJ/t4/oifSDyOkZjoE6pw2VnZXMWm9cuJjPkAqKmpoWdolF/v6ycQiDE4GsHldFHpTmCxWFi1pIZzO5tT1556Wvt85HMZejGvQJPioAAkImWrEPu8TPfGm48VR9lMJ/n9ft44McTAcIhQFIwEYCSo99rZsnEZ7U21dMeC+Hw+RkZGGLfVEDcSGAkDm9NJ13AMp8OK3WZj89nLJ415odNZ+V6GnovxqT+ovCkAiUhZKtQ+L9O98eZjxVE200mG3cO+3iC9IyESgMthw+uwsqbZRYNrIpC5XC66u7uxuqvoGukmEjOw2l0M+oN4XBNvEUtrXVgSk8/JWOh0Vr6XoS9kfNojyBwUgESkLBVqn5fp3ngLseJocDTEi0f8ROJQ44RQNEGVy0ZtpZuzOxpTAS0cDuOtbeKZ/X4qKiux26O0NlSTsI1zdGCMhBEnFovjsURyOr5iXoauPYLMQQFIRMpSsb3B5mPFUaZG32QFY2AkyN6ecbwOO/UVNt61ZgmXbFgxacVYbW0tkZ4xamrBbrfjdrtprq3gxcND2G1WYiTYtKaJjvbmGZ9ztq9NVczL0Ivt747khwKQiJSlYn6DnatMwSLZbxQKhVJL2D0eT6qCETcS1Fa4qPE6aa+v4MIz2k9Ziu/xeFjfuYyDQ3+a8qnyODltSTVjoSiVbgftrc2p553a45Q+trk2HhfrMvT0vzt1HiuRMR9Bu1aTlRsFIBEpW8X0BruQZdmZgkVyGsvv99Pb20soFKKjoyNVwahw23E5bLTXV1DhdmSsZEwNiwB7T/pxO22nVECm9jilj20xj77It+Tfne7ubq0mK1MKQCJiaou1X8xcqyPp48oULJL9RqFQiOHh4dSfpweazWfbCEXjs1bBpobFTNWzqT1Ok88uW7x9fhZLOYU6mUwBSETKwnyXLS/WfjFzfSOdus/OTGNraWlJTYElZVP9min8Tff90z1+vqGnVDYqLMdQJxMUgESk5C1k2fJifcKf6xvpbOOaHPhmv/Z0gWOu4S+XYbHUNirUvkDlRwFIREreQpYtF+sn/JnGNTga4pHfHSAQDOH1uPnoBafjtSdmrKhMFzimC1kzVWYyhbL5VHPmEjzTw4fXnqCnpweYqHwtxmunfYHKkwKQiJSk9DdFsy1b7vYFCARDRKMxAkz8Hhoc4RkrKtMFjkDMwmDUhTNmIfkdM1Vmpgtlg6Mh9hw8QaU9nvG5F2Jq+Dh/hYeRgV4A3G73ogQg7QtUnhSARKTkTPeJvFyWvCfNVFVprfPi9bgJMFEBmqiMTK7qTDU1vGSqasy1MvOLnUcIRyJEIxE+2tKS9c8303L69HFODR/BhJMlS5ZkPcZcMFvANgsFIBEpOdN9Il+/vL4sgk/STJWYhqqJaa+pgW8u1ZBMVY1kUAoGg3R3d+NyuQiHw9MGseQ17HY7drsdX9CgfYbnTK/azbScPv156jxWgoEADqcTl9PJypa6RX+dy2lPKfkTBSARKTlm+EQ+WyUm0yqvbPtxZvsdJgNJX18flZWVwKkBay6vw3QVp/RT5DP9vNZYkAtXVTIWs7G+c9miho/032VDlUfBp8woAIlIyTHDJ/L5Nmdnu7pqtt9hMojU1dURDodTh6amB6u5vA6z9dFk+nkn7zO0uK9zqa1Uk7lRABKRklRMuzxPVcgl03Pp4Znpdzg1kGTaETnb12G6alE21aqFrtJbyH5DM/0utSy+9CkAiYjkUKGXTOdrWf9C90uarlq0GMdMLKSKk+l3WejXWHJDAUhEJIfKdcl0LoLV1GqRy+Wir6+Purq6hQ4vo3xsdFmur7HZWAs9ABGRcpKc6gHKtkE7V8LhMJWVlYTD4bw9h8fjSTVbd3d3EwwGF3xNvcblQRUgEZEpFtLfka8G7VI5O2suFvOg0Vw2NJuhCd8MFIBERNLkor8jHw3a+VyRdLLfz8ET/XQubaK9afFOPc/FtNp0YXW6sJjrsFXMTfiSHQUgEZE0xdrfka9qycS5YgcJR6K8fGyYa963vih+3mxkCqvThcViPfNNCkcBSEQkTbFuspivN/Bu38Quy0YigcPpnDHwFds0XLcvQDgS+dM+RW+NfTGn1qR0KQCJSFZKad+TYuzhKVatdV5cTid2u33WwFdsGwO21nmJRiJEozGsFktq7Kr2SDYUgERkVqW070mhe3hKKShC9oEvGAwSCoWwWq1FU1mZOBOtM9W/1FDlLroqlRQvBSARmVWx9sVMp5BjLaWgmC6bwOf3+zEMA6/Xm/dgMZcQ2d5UO6lxu9iqVFK8FIBEZFbF2hcznUKOtZSC4lwtVl/NQkOk+n8kWwpAIjKrUuqLKeRYFyN8FWqKLb2vZr5jyGZ6aqEhMpf9P5pOK28KQCKSlVLa96RQY813+CqGKbaZxpApMCQDkzUyissSAzJPT+UqROYiKGo6rbwpAImI5FA+w1cxTLHNNIbpAkN6YEoYcTadVk3bDNNT04XIuVZichUUa2trCYVChEIhgsGgQlCZUQASESkRxdCLNdMYpuu/SQ9MFqsNw1k1a5CYGiLnWonJVVD0eDy43W4CgQB+v18BqMwoAImITKMYl7MXQy/WTGOYrv8mF6EtU2NzpsrQfJ9zMY7QkOKhACQiMkUx9NpkUgy9WHMZQy5CW6bG5kyVofk+p47QMBcFIBGRKYqh16bUzNSnM9/Qln7NQMxySqCZqTozn+dUtcdcFIBExFSyaajNNIVSSsuiczHWuVxjLn062V43eU3feITfHw2eUpHLdXUmV9crxulTOZUCkIiYSjZv1JmmUEppWXQuxjqXa8ylepLtdZPX8o9B3BgH8lORy2WwLebpU5lMAUhETCXbN+rpplBKaYokm7HOVqmYy887l+pJttdNXtM5GuLlY8N5W/2WHsiS9+cbhjR9WjoUgETEVBYyzVFKDbGzjTWbSkW+ft7prjs4GuJIjw+PJUJHe3NOmpqzlR7IFlo5K4atCiQ7CkAiIkVgsftG5lKpyHfvUzKMjYyOYsRjfABY17li0mNy0UidaezTBbL5VvmKYasCyY4CkIhIgRWib2QulYr5VEWyDXTBYJA9B08QjkRwuVyEwxBMOOf2w8xgrmPPtuqVj1VvsrgUgERECizXfSPZVD3mUqlInyLKJtjMJdD5/X4q7XGikQgerxeX08nKlro5/sSZ5atvq5Qa4mV6CkAiIhks1rL3XPeNZPvmnG2lIlkVyTbYHOnxMeTzAVBRUTFjoEsGk4+2tOALGjmfNspXH1MpNcTL9BSAREQyWKxP+bnuG8nXm3O2lSqPJUIoGMBIgNPhmDHQpQeU9izGkM9Qmu21S2k/KMlMAUhEykauG4lzESSyHVMu+0YWWvVY6BlbHe3NfPDsMANjUdatap/0c0137WAwSE9PDwAtLS1ZbY6Y/DlzKdtra/qrPCgAiUhZyEcj8UKDRKluirfQM7Y8Hg/vOHN11tf2+/309vYC4Ha7s9ocMR9TT9leW9Nf5UEBSETKQjFuQFeMY8pGrs/YSgoGg4RCIaxW66Rr19bWEgqFMj5nunzuxZTttUtpPyjJTAFIRMpCMW5AV4xjyka+3uD9fj+GYWC1WvH7/ZOeq6OjI+fPlyvq+SlPCkAiUhaKcQO6YhxTISWrO6FQqKR6aNTzU54UgESkbBTjBnTFOKZCSVZ70isqpUA9P+VJAUhERPJu6jRSsVVSZlqtV4zjlYVTABIRmcFin9FVrop5GqlUV+vJwigAiYhkUKg3xnIKXcnKj8vlAoo5kEmjAAAW0UlEQVRvGin9LDK73V5Sq/VkYRSAREQyKMQy9rmGrmIPS+mVn9bW1gVfL9crstLPIrPb7SW1Wk8WRgFIRCSDQixjn0voKoWpm4U2EE8NPPOdSssUnPJ9FpkULwUgEZEM8rGMfbaKzVxCVylstLjQBuKpgWe+gSpTcJrrWWRSPhSARERmkMtl7NlUbOYSukp1o8W5mBp45huotJRdplIAEhFZJNlWbLINXdmGpVLeyXi+gWdqpU1L2WUqBSARkUWSj4pNNmGpmJeg50Mp9EZJ4SkAiYgskkIdjWG26Z9S6I2SwlMAEhFZRIU4GsNs0z9m6I2ShVMAEhEpcsW+189iyfb3MFOlrZT7oSS3Sj4A7d27l+eee46XXnqJAwcO0NfXRywWo7q6mtNOO40LLriALVu20NzcXOihiojMWbltjDhf6b+HhBFn02nVdLQ3ZwwxmSptZuuHksxKNgCNjIxw5ZVXcuTIkWm/Pjg4yODgIDt37uT73/8+d955J1dfffXiDlJEZIGm9rMc6fERGWPaCkY5N/+m/x4CwRDH+6GuwjnnEGO2fijJrGQDUDgcToUfm83GO9/5Ts455xyWLVuGx+Ohq6uLJ554gldffZVgMMjWrVsJhULcdNNNhR24iMgcTO1n8VgiBAIx4NQKRjIkhCJxxkIh9p708+61LYUY9rzMVL1K/z14PW6WNVXPK8SYrR9KMivZAAQTCf7666/POMV100038YMf/IAHHngAgAcffJBLLrmEFStWLPZQRUTmZWo/i9eeSPWwTNVa5yUSMzjQMwzArsMDrG2vLYkq0GzVq0KtoJPyVbIBqLa2lqeffpqKiooZH/eZz3yGV155hR07dhCNRvnlL3/JrbfeukijFBFZuKn9LDP1vbyjo5GRQIQKtx2n3TrrEvB89QzNtdk4m6XrhVhBJ+WrZAOQw+HA4XBk9djLL7+cHTt2ALBv3758DktEpKDWttey96R/xiXgyXBi2D088WrPjD1DMwWkmb6WbDb2jUcwnFU61kOKTskGoLmorKxM3Q6FQgUciYhIfmUzVZQMJydGxmasusw0LTXblFVtbS2+8Qi/OTSCxTo+a1P2XKe4tJxdFsoUASi96tPW1lbAkYiI5N9sU0XJ/qHOag8Hh3oyVl1mmpaabcrK4/FgOKuwWMczPmau406n5eyyUGUfgKLRKNu3b0/df8973jOv63R1ddHV1TWv79W0m4gUk/SVUH+x0Z3VyqupASmbKat8TmtpObssVNkHoO9///up5fJnnHHGvAPQ9u3b+fa3v527gYmIFIGZqi4zTUtlM2WVz5VbWs4uC1XWAeiZZ57hO9/5DjDRNL1161asVmuBRyUiUjpmC0izhRqt3JJildcAdO2117Jz586cXOsb3/gGmzdvzvrxu3fv5vbbb8d4a476rrvuYsOGDTkZi4iIiJS2sqwA7d27l0996lOMj0803918881ce+21C7rmli1bOP/88+f1vfv27WPr1q0Len4RkXKnlV2ymPIagC677DLWrl2bk2t1dHRk9bh9+/Zx/fXX4/f7AfjsZz/LbbfdtuDnb2tr0woyEZE80souWUx5DUDXXHNNPi9/imT48fl8AHz605/m9ttvX9QxiIjI/GhllyymspkCS4afoaEhAG688UbuuOOOAo9KRESypZVdspjKYknU1PBzww03cNdddxV4VCIiIlKsSj4AHThwYFL4uf766/n85z9f4FGJiIhIMSvpAHTw4EE++clPTgo/X/jCFwo8KhERESl2JdsD1NPTwyc/+UkGBwcBWLduHeeee27q1PdM3G43F1544WIMUURERIpUyQago0ePMjAwkLr/+uuvc8stt8z6fe3t7Tz99NP5HJqIiIgUuZKeAhMRERGZj5KtAL3rXe/SKesiIiIyL6oAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6dgLPYB8OXToEB/+8IcJh8OpP9u3b18BRyQiIiLFoiwrQIZh8MUvfnFS+BERERFJKssAtG3bNnbt2oXX6y30UERERKQIlV0AOnbsGN/85jcBuO222wo8GhERESlGZRWAEokEX/ziFwkGg2zYsIHrrruu0EMSERGRIlRWAejhhx9m586dOBwO7rvvPqzWsvrxREREJEfKJiF0dXVx//33A3DTTTexZs2aAo9IREREilXZBKAvfelLjI+Ps3LlSm655ZZCD0dERESKWFnsA7R9+3Z++9vfYrFYuO+++3A6nTl/jq6uLrq6uub1va+88sqk+9qPSEREJDtT3zMDgUBOrlvyAai3t5evf/3rAFx11VWce+65eXme7du38+1vfzsn19q6dWtOriMiImI2x48fz8l1Sn4K7J577mFkZITm5mbuvPPOQg9HRERESkBeK0DXXnstO3fuzMm1vvGNb7B58+ZJf/bYY4/x9NNPA3D33XdTVVWVk+cSERGR8layU2CDg4N89atfBeDSSy/l0ksvzevzbdmyhfPPP39e37tz506+9a1vpe7/7d/+LWeddVauhiYLtG/fvknTknfffbdWERYJvTbFS69NcSun1ycYDHLs2LHU/fe97305uW5eA9Bll13G2rVrc3Ktjo6OSfe3bt2Kz+ejqqqKu+++OyfPMZO2tjba2tpycq2zzjqLc845JyfXktxbs2aNXp8ipdemeOm1KW56fU6V1wB0zTXX5OW6o6OjPPHEEwB0dnbyyCOPZPV93/3ud1O3r7rqKhobG/MyPhERESluJTkFlkgkUrd37drFrl27svq+9Gmo9773vQpAIiIiJlXyq8BERERE5qokK0DV1dVZbyaY3vSlDQhFREQEVAESERERE1IAEhEREdNRABIRERHTUQASERER0ynJJui5UOOziIiITKUKkIiIiJiOApCIiIiYjgKQiIiImI4CkIiIiJhO2TdBF4O2tjY+97nPTbovxUOvT/HSa1O89NoUN70+s7Mk0k8WFRERETEBTYGJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOkoAImIiIjpKACJiIiI6SgAiYiIiOloJ+giEwqFeOyxx3jqqafYv38/g4OD2O12GhsbWbFiBe9617t4//vfz8qVKws9VFM7dOgQH/7whwmHw6k/27dvXwFHZE579+7lueee46WXXuLAgQP09fURi8Worq7mtNNO44ILLmDLli00NzcXeqhl5amnnuLRRx9lz5499Pf3U1lZyYoVK7jkkkv42Mc+RmVlZaGHaCpjY2M899xzPP/887z++uscOXKE0dFRXC4Xzc3NbNiwgQ9+8INs2rQJi8VS6OEWDe0EXUSeeeYZ7r33Xrq6umZ83HXXXccXv/jFRRqVTGUYBp/4xCfYtWvXpD9XAFo8IyMjXHnllRw5cmTWx3o8Hu68806uvvrq/A+szI2Pj3PHHXfw9NNPZ3xMa2sr3/zmN3n729++iCMzrx/96Ec8+OCDkz6MZXLOOefwT//0TzoW4y2qABWJ7du38/d///cYhoHFYuHd7343F1xwAUuWLMFisdDf38+ePXv4zW9+U+ihmt62bdvYtWsXXq+XQCBQ6OGYUjgcToUfm83GO9/5Ts455xyWLVuGx+Ohq6uLJ554gldffZVgMMjWrVsJhULcdNNNhR14CYvH49x2222pf4MaGxu58sor6ezsZHh4mF/96le89NJLdHd385nPfIaHH36Y0047rcCjLn+HDx9OhZ8lS5ZwwQUXcOaZZ9LQ0EA4HObll1/ml7/8JYFAgBdeeIFrr72Wn//85zQ0NBR45IWnClARePHFF7nmmmswDIO2tjb+5V/+hfXr10/72Hg8zsDAAEuWLFnkUQrAsWPHuOKKKwgGg3zhC1/ga1/7WuprqgAtnv7+fj74wQ9y/fXXzzjF9YMf/IAHHngAAIfDweOPP86KFSsWc6hl46c//Slf/vKXAejs7OTHP/4xjY2Nkx7zj//4j/zbv/0bMFFt+I//+I9FH6fZfPnLX+bEiRPceOONnH/++Vitp7b2njx5kptuuonDhw8D8JGPfGTSv11mpQBUYNFolM2bN3P06FG8Xi+PPvooy5cvL/SwZBqJRILrrruOnTt3smHDBn72s59xxhlnpL6uALR4otEokUiEioqKWR97yy23sGPHDgA+97nPceutt+Z7eGUnHo9z8cUX09/fD8B//dd/ceaZZ077uC1btvDGG28A8MMf/pALL7xwUcdqNn6/n9ra2lkft3fvXj70oQ8BE9PCv//97/F4PPkeXlHTKrAC+9///V+OHj0KwA033KDwU8Qefvhhdu7cicPh4L777pv2k5YsDofDkVX4Abj88stTtxVS5+ePf/xjKvxs3Lhx2vADE9OR1157ber+448/vijjM7Nswg/A2rVr6ejoACAYDKbed8xM/4IX2COPPJK6nUznUny6urq4//77AbjppptYs2ZNgUck2UpfkRQKhQo4ktL1f//3f6nbF1100YyPTf96+vdJ4aX/v5BN03S5UxN0AcVisdRKotraWlasWEFfXx/btm3j6aefpqurC5vNRmtrK+eddx5XX311KsHL4vrSl77E+Pg4K1eu5JZbbin0cGQO0qs+Wv0yP/v370/dftvb3jbjY5uammhtbaW7u5uBgQGGhoaor6/P9xBlFpFIZNKqSf2/oApQQR08eJBgMAhMLB197rnn+PM//3P+9V//lUOHDhEMBhkbG+PAgQM89NBDbN68mR/84AcFHrX5bN++nd/+9rdYLBbuu+8+nE5noYckWYpGo2zfvj11/z3veU/hBlPCks2zAEuXLp318emPefPNN/MyJpmbX/3qV4yOjgJw5pln0tTUVOARFZ4qQAWUnFMHGBoa4nOf+xyBQIDVq1fzoQ99iLa2Nnw+H08++SS///3vicfjPPDAAzgcDm644YYCjtw8ent7+frXvw7AVVddxbnnnlvgEclcfP/730996j3jjDMUgOYp+cYJUFdXN+vj0/tS0r9XCmNoaCg1hQ/wV3/1VwUcTfFQACqgkZGR1O3e3l4AtmzZwle+8hVsNlvqa1dffTUPPfQQ9913HwAPPPAAl112mUqYi+Cee+5hZGSE5uZm7rzzzkIPR+bgmWee4Tvf+Q4w0TS9detWNa7PU/p+Vy6Xa9bHpz9mfHw8L2OS7EQiEW699VYGBwcBuOSSS7j00ksLPKrioAA0i2uvvZadO3fm5Frf+MY32Lx5c+q+YRiTvr5ixQruueeeSeEnfRzPP/88Tz75JNFolIcffpi/+Zu/ycm4SlU+XxuAxx57LLXj7d13301VVVVOnsss8v36zGT37t3cfvvtqf/H7rrrLjZs2JCTsYiUCsMw+Lu/+zteeOEFAJYvX84//MM/FHhUxUMfhwpo6jLej3zkIzP2l/zlX/5l6vYf/vCHvI1LYHBwkK9+9asAXHrppfrEVEL27t3Lpz71qVTl4eabb560NFvmzuv1pm5ns3oo/THZblcguZVIJPjyl7/MY489Bkw0Pf/oRz+ipqamwCMrHqoAzeKyyy5j7dq1ObnW1BVc1dXVk+5n2lsjKX136GPHjuVkTKUsn6/N1q1b8fl8VFVVcffdd+fkOcwmn69PJvv27eP666/H7/cD8NnPfpbbbrstJ2Mws6qqKoaHhwHw+Xyzhprk7z/5vbK4EokE99xzDz//+c8BaGlp4cc//nFWDexmogA0i2uuuSZv1161atWk+7P9Q5H+dc2r5++1GR0d5YknngAmtvxP36tpJt/97ndTt6+66qpTjgkwm3z+vzOdZPjx+XwAfPrTn+b2229f1DGUq46ODk6cOAHAiRMnZn0jTT4WTv13TvIrkUhw77338tOf/hSYOB9s27Zt2mR3GgpABVRfX09zczN9fX3A7Ksl0r+evqGV5Fb66TC7du065dT3TL71rW+lbr/3ve81fQBaTMnwMzQ0BMCNN97IHXfcUeBRlY/Vq1enDkHdvXs35513XsbHDgwM0N3dDUBDQ4P2AFpEyfDz8MMPA9Dc3My2bdt0/l0G6gEqsIsvvjh1+7XXXpvxsXv27End1oaIIhOmhp8bbriBu+66q8CjKi+bNm1K3Z5td+dnn302dTv93zfJr6nhp6mpiW3btrFy5crCDqyIqQJUYFdccQX/+Z//CUwcMHjjjTdmbIT+2c9+lro923b0Mn/V1dVZnxmVfiSGzplafAcOHJgUfq6//no+//nPF3hU5Wfjxo00NTXR39/Pzp07ee211zIehvrQQw+l7qefwyb5tXXr1lPCjz4oz0wVoALbuHFj6rTko0ePcu+9956yPB7g3//933nyySeBiVUVH//4xxd1nCLF5uDBg3zyk5+cFH6+8IUvFHhU5clms3HzzTen7t91112pfWXS3X///amT4M8+++xJlSPJn6985Sv85Cc/Af4UftR7NTtLIr3hQQri+PHjfPzjH0/tDL1mzZpTdoL+3e9+l3r8N7/5TT7wgQ8UariSRhWgwujp6WHLli0MDAwAsG7duqzOaHO73akPHDI3sViMz3zmMzz33HPAxBvtlVdeSWdnJ36/n8cff5wXX3wRmKii/uQnP+H0008v5JBN4cEHH+R73/seABaLhdtvvz2r8LNu3TrTb6arAFQk9u/fz1//9V9z6NChjI/xer189atfVVm5iCgAFcbzzz/PddddN+fva29vT21uKXM3NjbGHXfcwa9//euMj2lpaeHBBx/k7LPPXsSRmdd8Nxz92te+xkc+8pE8jKh0qAeoSKxevZpf/OIX/Pd//zdPPPEEBw8exOfz4fV6WblyJRdddBGf+MQntKJCRAqmsrKS733ve+zYsYNHH32U3bt3Mzg4SEVFBcuXL+fSSy/lYx/7mPb+kZKgCpCIiIiYjpqgRURExHQUgERERMR0FIBERETEdBSARERExHQUgERERMR0FIBERETEdBSARERExHQUgERERMR0FIBERETEdBSARERExHQUgERERMR0FIBERETEdBSARERExHQUgERERMR0FIBERETEdBSARERExHQUgERERMR0FIBERETEdBSARERExHQUgERERMR0FIBERETEdBSARERExHQUgERERMR0FIBERETEdBSARERExHT+f0GP5XTILLM4AAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jKkdRjD1DZQN"
},
"source": [
"#Two-stage ensemble regression model (TERM)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Cs6dt9E0ELs9"
},
"source": [
"**Ultility functions**\n",
"* MAPELoss - Mean Absolute Percentile Error (MAPE)\n",
"* normalizing_data - Normalizing the data\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "k71dxvuL84R6"
},
"source": [
"import torch.nn as nn\n",
"import torch\n",
"import numpy as np\n",
"import pandas as pd\n",
"from torch.utils.data import Dataset, DataLoader\n",
"import random\n",
"\n",
"class MAPELoss(nn.Module):\n",
" def __init__(self):\n",
" super(MAPELoss, self).__init__() \n",
" \n",
" def forward (self, output, target):\n",
" loss = torch.mean(torch.abs((target - output) / target))\n",
" # loss = (-1)*loss\n",
" return loss\n",
" \n",
"def minmaxscaler(data):\n",
" min = np.amin(data)\n",
" max = np.amax(data) \n",
" return (data - min)/(max-min)\n",
"\n",
"def weights_init(m):\n",
" classname = m.__class__.__name__\n",
" if classname.find('BatchNorm') != -1:\n",
" m.weight.data.normal_(1.0, 0.02)\n",
" m.bias.data.fill_(0)\n",
" \n",
"class FeatureDataset(Dataset):\n",
" '''\n",
" Args: x is a 2D numpy array [x_size, x_features]\n",
" '''\n",
" def __init__(self, x):\n",
" self.x = x\n",
" \n",
" def __len__(self):\n",
" return self.x.shape[0]\n",
" \n",
" def __getitem__(self, idx):\n",
" return torch.FloatTensor(self.x[idx])\n",
"\n",
" def getBatch(self, idxs = []):\n",
" if idxs == None:\n",
" return idxs\n",
" else:\n",
" x_features = []\n",
" for i in idxs:\n",
" x_features.append(self.__getitem__(i))\n",
" return torch.FloatTensor(x_features)\n",
" \n",
"def normalizing_data(data, seed=42): \n",
" df_all = data.drop(columns=['alloy'])\n",
" #create a min max processing object\n",
" composition = df_all [['Fe','Ni','Co','Cr','V','Cu']]\n",
" min_max_scaler = preprocessing.MinMaxScaler()\n",
" normalized_atomic_properties = min_max_scaler.fit_transform(df_all[['VEC','AR1','AR2','PE','Density',\n",
" 'TC','MP','FI','SI','TI','M']])\n",
" x = pd.concat([composition,pd.DataFrame(normalized_atomic_properties)],axis=1)\n",
" x=x.iloc[:697]\n",
" y = df_all[['TEC']][:697]\n",
" # bins = [18,35,48,109,202,234,525,687,695]\n",
" bins = [18,35,48,109,202,234,525,687]\n",
" y_binned = np.digitize(y.index, bins, right=True) #stratified 7-fold: each folder contains a specific type of alloys (7 types in total, each takes 85% and 15% as training and testing)\n",
"\n",
" x = torch.FloatTensor(x.values) #numpy to tensor\n",
" y = torch.FloatTensor(y.values) #numpy to tensor\n",
"\n",
" if torch.cuda.is_available():\n",
" x = x.cuda()\n",
" y = y.cuda() \n",
" \n",
" train_features, test_features, train_labels, test_labels = train_test_split(x, y, test_size=0.15, random_state=seed, stratify=y_binned)\n",
" return train_features, test_features, train_labels, test_labels"
],
"execution_count": 31,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "dcW5DVUsEo0o"
},
"source": [
"**Data loading**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "h9GqV60vATsC"
},
"source": [
"import datetime\n",
"import torch.utils.data as Data\n",
"import pandas as pd\n",
"import torch\n",
"import torch.nn.functional as F \n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"import torch.nn as nn\n",
"import torch.optim as optim\n",
"from bayes_opt import BayesianOptimization\n",
"import time\n",
"import os\n",
"from sklearn import preprocessing\n",
"\n",
"\n",
"t = time.localtime()\n",
" \n",
"table = pd.DataFrame(columns=['target','batch_size','lr','module__n_hidden','module__w'])\n",
"\n",
"plt.close('all')\n",
"starttime = datetime.datetime.now()\n",
"data = pd.read_csv('data_base.csv')\n",
"\n",
"\n",
"train_features, test_features, train_labels, test_labels = normalizing_data(data, seed=42)"
],
"execution_count": 32,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "IuRdKijDE01B",
"outputId": "186ab58a-56d5-40bd-ae70-aebb667016ba"
},
"source": [
" print(torch.cuda.is_available())"
],
"execution_count": 33,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"False\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cqhFxU_yE3pc"
},
"source": [
"**Neural network architecture**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "g2TdhVbt9j5F"
},
"source": [
"\n",
"class Net(nn.Module): \n",
" def __init__(self, n_feature=17, n_hidden=218, n_output=1, w = 6):\n",
" super(Net, self).__init__() \n",
" # self.BN=torch.nn.BatchNorm1d(n_hidden)\n",
" self.hidden1 = torch.nn.Linear(n_feature, n_hidden) \n",
" nn.init.kaiming_normal_(self.hidden1.weight)\n",
" \n",
" self.hiddens = nn.ModuleList ([nn.Linear(n_hidden, n_hidden) for i in range(w)]) \n",
" for m in self.hiddens:\n",
" nn.init.kaiming_normal_(m.weight) \n",
" \n",
" self.predict = torch.nn.Linear(n_hidden, n_output) \n",
" nn.init.kaiming_normal_(self.predict.weight)\n",
"\n",
" def forward(self, x): \n",
" x = self.hidden1(x)\n",
" # x = self.BN(x)\n",
" # x = self.Dropout (x)\n",
" x = F.relu(x) \n",
" \n",
" for m in self.hiddens:\n",
" x = m(x)\n",
" # x = self.BN(x)\n",
" x = F.relu(x) \n",
" \n",
" x = self.predict(x)\n",
" # x = self.BN_3(x)\n",
" # x = self.Dropout (x)\n",
" # 输出值\n",
" return x\n",
"\n",
"def train(net, num_epochs, batch_size, train_features, test_features, train_labels, test_labels,\n",
" train_loader,\n",
" optimizer):\n",
" print (\"\\n=== train begin ===\")\n",
" print(net)\n",
" train_ls, test_ls = [], []\n",
" loss = MAPELoss() # MAPE means Mean Absolute percentile error \n",
" for epoch in range(num_epochs):\n",
" for x, y in train_loader:\n",
" ls = loss(net(x).view(-1, 1), y.view(-1, 1))\n",
" optimizer.zero_grad()\n",
" ls.backward()\n",
" optimizer.step()\n",
" if epoch % 100 == 0:\n",
" train_ls.append(loss(net(train_features).view(-1, 1), train_labels.view(-1, 1)).item())\n",
" test_ls.append(loss(net(test_features).view(-1, 1), test_labels.view(-1, 1)).item())\n",
" print (\"epoch %d: train loss %f, test loss %f\" % (epoch, train_ls[-1], test_ls[-1]))\n",
" \n",
" print (\"=== train end ===\")\n",
" \n",
"def test(model, test_loader):\n",
" model.eval()\n",
" test_loss = 0\n",
" n = 0\n",
" loss = MAPELoss() \n",
" with torch.no_grad():\n",
" for data, target in test_loader:\n",
" output = model(data)\n",
" test_loss += loss(output.view(-1, 1), target.view(-1, 1)).item() # sum up batch loss\n",
" n += 1\n",
"\n",
" test_loss /= n\n",
" \n",
" print('Test set: Average loss: {:.4f}'.format(\n",
" test_loss))\n",
" \n",
" return test_loss \n",
"\n",
" \n",
"\n",
"\n",
"def train_model(batch_size,lr, module__n_hidden,module__w):\n",
" module__n_hidden = int(module__n_hidden) # number of neurons per layer\n",
" module__w = int(module__w) # number of hidden layers\n",
" batch_size = int(batch_size)\n",
" train_dataset = Data.TensorDataset(train_features, train_labels)\n",
" test_dataset = Data.TensorDataset(test_features, test_labels)\n",
" train_loader = Data.DataLoader(train_dataset, batch_size, shuffle=True)\n",
" test_loader = Data.DataLoader(test_dataset, batch_size, shuffle=True) \n",
" net = Net(n_feature=17, n_hidden=module__n_hidden, n_output=1, w = module__w)\n",
" if torch.cuda.is_available():\n",
" net = net.cuda()\n",
" n_epochs = 20 \n",
" optimizer = optim.Adam(net.parameters(), lr=lr, weight_decay=0.0001)\n",
" train(net, n_epochs, batch_size,train_features, test_features, \n",
" train_labels, test_labels,train_loader, optimizer)\n",
" train_loss= test(net,train_loader)\n",
" test_loss = test(net, test_loader)\n",
"\n",
" \n",
" r = -np.abs(train_loss-test_loss)\n",
" \n",
" return -test_loss\n",
" \n",
"\n",
" "
],
"execution_count": 34,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "FyzNkXLkFQXT"
},
"source": [
"**Bayesian hyperparameter optimization**\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "bHuElmYp-2Ws",
"outputId": "538b0f58-d458-4517-f65c-ae027c345a35"
},
"source": [
"bounds = {'lr': (0.0005,0.001), 'batch_size': (32,64), 'module__n_hidden': (16,526),\n",
" 'module__w': (2,10)}\n",
"optimizer = BayesianOptimization(\n",
" f=train_model,\n",
" pbounds=bounds,\n",
" random_state=1,\n",
")\n",
"\n",
"optimizer.maximize(init_points=10, n_iter=1)\n",
"print(optimizer.max)\n",
"table = pd.DataFrame(columns=['target','batch_size','lr','module__n_hidden','module__w'])\n",
"for res in optimizer.res:\n",
" table=table.append(pd.DataFrame({'target':[res['target']],'batch_size':[res['params']['batch_size']],\n",
" 'lr':[res['params']['lr']], 'module__n_hidden':[res['params']['module__n_hidden']],\n",
" 'module__w':[res['params']['module__w']]}),ignore_index=True)\n",
"table=table.append(pd.DataFrame({'target':[optimizer.max['target']],'batch_size':[optimizer.max['params']['batch_size']],\n",
" 'lr':[optimizer.max['params']['lr']], 'module__n_hidden':[optimizer.max['params']['module__n_hidden']],\n",
" 'module__w':[optimizer.max['params']['module__w']]}),ignore_index=True)\n",
"model_name = 'Invar_inference_NN'\n",
"file_name = '{}.xlsx'.format(model_name)\n",
"endtime = datetime.datetime.now()\n",
"Rtime = endtime - starttime\n",
"print(Rtime)\n",
"table.to_excel(file_name)"
],
"execution_count": 35,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"| iter | target | batch_... | lr | module... | module__w |\n",
"-------------------------------------------------------------------------\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=16, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=16, out_features=16, bias=True)\n",
" (1): Linear(in_features=16, out_features=16, bias=True)\n",
" (2): Linear(in_features=16, out_features=16, bias=True)\n",
" (3): Linear(in_features=16, out_features=16, bias=True)\n",
" )\n",
" (predict): Linear(in_features=16, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.967301, test loss 0.964457\n",
"=== train end ===\n",
"Test set: Average loss: 0.6603\n",
"Test set: Average loss: 0.6365\n",
"| \u001b[0m 1 \u001b[0m | \u001b[0m-0.6365 \u001b[0m | \u001b[0m 45.34 \u001b[0m | \u001b[0m 0.000860\u001b[0m | \u001b[0m 16.06 \u001b[0m | \u001b[0m 4.419 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=110, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=110, out_features=110, bias=True)\n",
" (1): Linear(in_features=110, out_features=110, bias=True)\n",
" (2): Linear(in_features=110, out_features=110, bias=True)\n",
" (3): Linear(in_features=110, out_features=110, bias=True)\n",
" )\n",
" (predict): Linear(in_features=110, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.952195, test loss 0.945242\n",
"=== train end ===\n",
"Test set: Average loss: 0.4462\n",
"Test set: Average loss: 0.4631\n",
"| \u001b[95m 2 \u001b[0m | \u001b[95m-0.4631 \u001b[0m | \u001b[95m 36.7 \u001b[0m | \u001b[95m 0.000546\u001b[0m | \u001b[95m 111.0 \u001b[0m | \u001b[95m 4.764 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=229, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=229, out_features=229, bias=True)\n",
" (1): Linear(in_features=229, out_features=229, bias=True)\n",
" (2): Linear(in_features=229, out_features=229, bias=True)\n",
" (3): Linear(in_features=229, out_features=229, bias=True)\n",
" (4): Linear(in_features=229, out_features=229, bias=True)\n",
" (5): Linear(in_features=229, out_features=229, bias=True)\n",
" (6): Linear(in_features=229, out_features=229, bias=True)\n",
" )\n",
" (predict): Linear(in_features=229, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.887715, test loss 0.865657\n",
"=== train end ===\n",
"Test set: Average loss: 0.5808\n",
"Test set: Average loss: 0.5417\n",
"| \u001b[0m 3 \u001b[0m | \u001b[0m-0.5417 \u001b[0m | \u001b[0m 44.7 \u001b[0m | \u001b[0m 0.000769\u001b[0m | \u001b[0m 229.8 \u001b[0m | \u001b[0m 7.482 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=29, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=29, out_features=29, bias=True)\n",
" (1): Linear(in_features=29, out_features=29, bias=True)\n",
" (2): Linear(in_features=29, out_features=29, bias=True)\n",
" (3): Linear(in_features=29, out_features=29, bias=True)\n",
" (4): Linear(in_features=29, out_features=29, bias=True)\n",
" (5): Linear(in_features=29, out_features=29, bias=True)\n",
" (6): Linear(in_features=29, out_features=29, bias=True)\n",
" )\n",
" (predict): Linear(in_features=29, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.970142, test loss 0.981575\n",
"=== train end ===\n",
"Test set: Average loss: 0.4597\n",
"Test set: Average loss: 0.4817\n",
"| \u001b[0m 4 \u001b[0m | \u001b[0m-0.4817 \u001b[0m | \u001b[0m 38.54 \u001b[0m | \u001b[0m 0.000939\u001b[0m | \u001b[0m 29.97 \u001b[0m | \u001b[0m 7.364 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=87, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=87, out_features=87, bias=True)\n",
" (1): Linear(in_features=87, out_features=87, bias=True)\n",
" (2): Linear(in_features=87, out_features=87, bias=True)\n",
" )\n",
" (predict): Linear(in_features=87, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.989642, test loss 0.933345\n",
"=== train end ===\n",
"Test set: Average loss: 0.3933\n",
"Test set: Average loss: 0.4565\n",
"| \u001b[95m 5 \u001b[0m | \u001b[95m-0.4565 \u001b[0m | \u001b[95m 45.35 \u001b[0m | \u001b[95m 0.000779\u001b[0m | \u001b[95m 87.6 \u001b[0m | \u001b[95m 3.585 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=175, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=175, out_features=175, bias=True)\n",
" (1): Linear(in_features=175, out_features=175, bias=True)\n",
" (2): Linear(in_features=175, out_features=175, bias=True)\n",
" (3): Linear(in_features=175, out_features=175, bias=True)\n",
" (4): Linear(in_features=175, out_features=175, bias=True)\n",
" (5): Linear(in_features=175, out_features=175, bias=True)\n",
" (6): Linear(in_features=175, out_features=175, bias=True)\n",
" )\n",
" (predict): Linear(in_features=175, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.997312, test loss 0.987231\n",
"=== train end ===\n",
"Test set: Average loss: 0.4088\n",
"Test set: Average loss: 0.4704\n",
"| \u001b[0m 6 \u001b[0m | \u001b[0m-0.4704 \u001b[0m | \u001b[0m 57.62 \u001b[0m | \u001b[0m 0.000984\u001b[0m | \u001b[0m 175.8 \u001b[0m | \u001b[0m 7.539 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=59, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=59, out_features=59, bias=True)\n",
" (1): Linear(in_features=59, out_features=59, bias=True)\n",
" )\n",
" (predict): Linear(in_features=59, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.945286, test loss 0.931218\n",
"=== train end ===\n",
"Test set: Average loss: 0.4456\n",
"Test set: Average loss: 0.4744\n",
"| \u001b[0m 7 \u001b[0m | \u001b[0m-0.4744 \u001b[0m | \u001b[0m 60.04 \u001b[0m | \u001b[0m 0.000947\u001b[0m | \u001b[0m 59.37 \u001b[0m | \u001b[0m 2.312 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=66, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=66, out_features=66, bias=True)\n",
" (1): Linear(in_features=66, out_features=66, bias=True)\n",
" (2): Linear(in_features=66, out_features=66, bias=True)\n",
" (3): Linear(in_features=66, out_features=66, bias=True)\n",
" (4): Linear(in_features=66, out_features=66, bias=True)\n",
" )\n",
" (predict): Linear(in_features=66, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.951440, test loss 0.957168\n",
"=== train end ===\n",
"Test set: Average loss: 0.3364\n",
"Test set: Average loss: 0.3963\n",
"| \u001b[95m 8 \u001b[0m | \u001b[95m-0.3963 \u001b[0m | \u001b[95m 37.43 \u001b[0m | \u001b[95m 0.000939\u001b[0m | \u001b[95m 66.16 \u001b[0m | \u001b[95m 5.369 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=368, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=368, out_features=368, bias=True)\n",
" (1): Linear(in_features=368, out_features=368, bias=True)\n",
" (2): Linear(in_features=368, out_features=368, bias=True)\n",
" (3): Linear(in_features=368, out_features=368, bias=True)\n",
" )\n",
" (predict): Linear(in_features=368, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.948707, test loss 0.970389\n",
"=== train end ===\n",
"Test set: Average loss: 0.3856\n",
"Test set: Average loss: 0.4180\n",
"| \u001b[0m 9 \u001b[0m | \u001b[0m-0.418 \u001b[0m | \u001b[0m 62.65 \u001b[0m | \u001b[0m 0.000766\u001b[0m | \u001b[0m 368.9 \u001b[0m | \u001b[0m 4.524 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=25, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=25, out_features=25, bias=True)\n",
" (1): Linear(in_features=25, out_features=25, bias=True)\n",
" (2): Linear(in_features=25, out_features=25, bias=True)\n",
" (3): Linear(in_features=25, out_features=25, bias=True)\n",
" (4): Linear(in_features=25, out_features=25, bias=True)\n",
" (5): Linear(in_features=25, out_features=25, bias=True)\n",
" (6): Linear(in_features=25, out_features=25, bias=True)\n",
" (7): Linear(in_features=25, out_features=25, bias=True)\n",
" )\n",
" (predict): Linear(in_features=25, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.964479, test loss 0.965559\n",
"=== train end ===\n",
"Test set: Average loss: 0.4016\n",
"Test set: Average loss: 0.5237\n",
"| \u001b[0m 10 \u001b[0m | \u001b[0m-0.5237 \u001b[0m | \u001b[0m 53.97 \u001b[0m | \u001b[0m 0.000917\u001b[0m | \u001b[0m 25.33 \u001b[0m | \u001b[0m 8.001 \u001b[0m |\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=526, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=526, out_features=526, bias=True)\n",
" (1): Linear(in_features=526, out_features=526, bias=True)\n",
" (2): Linear(in_features=526, out_features=526, bias=True)\n",
" (3): Linear(in_features=526, out_features=526, bias=True)\n",
" (4): Linear(in_features=526, out_features=526, bias=True)\n",
" (5): Linear(in_features=526, out_features=526, bias=True)\n",
" (6): Linear(in_features=526, out_features=526, bias=True)\n",
" (7): Linear(in_features=526, out_features=526, bias=True)\n",
" (8): Linear(in_features=526, out_features=526, bias=True)\n",
" (9): Linear(in_features=526, out_features=526, bias=True)\n",
" )\n",
" (predict): Linear(in_features=526, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.967434, test loss 0.948400\n",
"=== train end ===\n",
"Test set: Average loss: 0.5070\n",
"Test set: Average loss: 0.6614\n",
"| \u001b[0m 11 \u001b[0m | \u001b[0m-0.6614 \u001b[0m | \u001b[0m 32.0 \u001b[0m | \u001b[0m 0.001 \u001b[0m | \u001b[0m 526.0 \u001b[0m | \u001b[0m 10.0 \u001b[0m |\n",
"=========================================================================\n",
"{'target': -0.3962911367416382, 'params': {'batch_size': 37.43457342606621, 'lr': 0.0009390712517147066, 'module__n_hidden': 66.15688525485555, 'module__w': 5.368861000040417}}\n",
"0:00:20.704944\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"id": "FE1V_s8QD-wv",
"outputId": "45481cc7-c088-4ac5-8961-b93d516a23f7"
},
"source": [
"table.head()"
],
"execution_count": 36,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" target | \n",
" batch_size | \n",
" lr | \n",
" module__n_hidden | \n",
" module__w | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" -0.636508 | \n",
" 45.344704 | \n",
" 0.000860 | \n",
" 16.058331 | \n",
" 4.418661 | \n",
"
\n",
" \n",
" 1 | \n",
" -0.463091 | \n",
" 36.696189 | \n",
" 0.000546 | \n",
" 110.992708 | \n",
" 4.764486 | \n",
"
\n",
" \n",
" 2 | \n",
" -0.541740 | \n",
" 44.696559 | \n",
" 0.000769 | \n",
" 229.789202 | \n",
" 7.481756 | \n",
"
\n",
" \n",
" 3 | \n",
" -0.481740 | \n",
" 38.542472 | \n",
" 0.000939 | \n",
" 29.967673 | \n",
" 7.363740 | \n",
"
\n",
" \n",
" 4 | \n",
" -0.456523 | \n",
" 45.353754 | \n",
" 0.000779 | \n",
" 87.597339 | \n",
" 3.584812 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" target batch_size lr module__n_hidden module__w\n",
"0 -0.636508 45.344704 0.000860 16.058331 4.418661\n",
"1 -0.463091 36.696189 0.000546 110.992708 4.764486\n",
"2 -0.541740 44.696559 0.000769 229.789202 7.481756\n",
"3 -0.481740 38.542472 0.000939 29.967673 7.363740\n",
"4 -0.456523 45.353754 0.000779 87.597339 3.584812"
]
},
"metadata": {},
"execution_count": 36
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2mqpUtXeGX47"
},
"source": [
"**Load top 2 NN model with 2 different seeds**\n",
"\n",
"Due to the data size problem, we even need to train the model with different seed in order to obtain a robust ensemble."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "aZ7g7ajfD9fu",
"outputId": "4d04ec35-d078-4f00-c2c6-1cd4e2dde6c1"
},
"source": [
"import datetime\n",
"import torch.utils.data as Data\n",
"import pandas as pd\n",
"import torch\n",
"import torch.nn.functional as F \n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"import torch.nn as nn\n",
"import torch.optim as optim\n",
"import time\n",
"import os\n",
"import pickle \n",
"import seaborn as sns\n",
"t = time.localtime() \n",
"plt.close('all')\n",
"target = pd.read_excel('Invar_inference_NN.xlsx')\n",
"starttime = datetime.datetime.now()\n",
"for i in range(1,3): # This is to choose best 10 points \n",
" for j in range(40,42): # 10 different seeds\n",
" train_features, test_features, train_labels, test_labels = normalizing_data(data, seed=j)\n",
" lr = target.at[i,'lr'] # the same\n",
" module__n_hidden = target.at[i,'module__n_hidden']\n",
" module__w = target.at[i,'module__w']\n",
" batch_size = target.at[i,'batch_size']\n",
" \n",
" module__n_hidden = int(module__n_hidden)\n",
" module__w = int(module__w)\n",
" batch_size = int(batch_size)\n",
" print (module__w)\n",
" \n",
" batch_size = target.at[i,'batch_size'] # choose 'batch_size' paramter at ith row\n",
" lr = target.at[i,'lr'] # the same\n",
" module__n_hidden = target.at[i,'module__n_hidden']\n",
" module__w = target.at[i,'module__w']\n",
" \n",
" module__n_hidden = int(module__n_hidden)\n",
" module__w = int(module__w)\n",
" batch_size = int(batch_size)\n",
" print (module__w)\n",
" train_dataset = Data.TensorDataset(train_features, train_labels)\n",
" test_dataset = Data.TensorDataset(test_features, test_labels)\n",
" train_loader = Data.DataLoader(train_dataset, batch_size, shuffle=True)\n",
" test_loader = Data.DataLoader(test_dataset, batch_size, shuffle=True) \n",
" \n",
"\n",
" class Net(nn.Module): \n",
" def __init__(self, n_feature=17, n_hidden=module__n_hidden, n_output=1, w = module__w):\n",
" super(Net, self).__init__() \n",
" # self.BN=torch.nn.BatchNorm1d(n_hidden)\n",
" self.hidden1 = torch.nn.Linear(n_feature, n_hidden) \n",
" nn.init.kaiming_normal_(self.hidden1.weight)\n",
" \n",
" self.hiddens = nn.ModuleList ([nn.Linear(n_hidden, n_hidden) for i in range(w)]) \n",
" for m in self.hiddens:\n",
" nn.init.kaiming_normal_(m.weight) \n",
" \n",
" self.predict = torch.nn.Linear(n_hidden, n_output) \n",
" nn.init.kaiming_normal_(self.predict.weight)\n",
" \n",
" def forward(self, x): \n",
" x = self.hidden1(x)\n",
" # x = self.BN(x)\n",
" # x = self.Dropout (x)\n",
" x = F.relu(x) \n",
" \n",
" for m in self.hiddens:\n",
" x = m(x)\n",
" # x = self.BN(x)\n",
" x = F.relu(x) \n",
" \n",
" x = self.predict(x)\n",
" # x = self.BN_3(x)\n",
" # x = self.Dropout (x)\n",
" return x\n",
" \n",
" def plotCurve(x_vals, y_vals, \n",
" x_label, y_label, \n",
" x2_vals=None, y2_vals=None, \n",
" legend=None,\n",
" figsize=(3.5, 2.5)):\n",
" # set figsize\n",
" plt.xlabel(x_label)\n",
" plt.ylabel(y_label)\n",
" plt.plot(x_vals, y_vals)\n",
" if x2_vals and y2_vals:\n",
" plt.plot(x2_vals, y2_vals, linestyle=':')\n",
" \n",
" if legend:\n",
" plt.legend(legend)\n",
" #training \n",
" print (\"\\n=== train begin ===\")\n",
" \n",
" net = Net()\n",
" print(net)\n",
" if torch.cuda.is_available():\n",
" net = net.cuda() \n",
" train_ls, test_ls = [], []\n",
" loss = MAPELoss() \n",
" n_epochs = 10\n",
" optimizer = optim.Adam(net.parameters(), lr=lr, weight_decay=0.0001)\n",
" for epoch in range(n_epochs):\n",
" for x, y in train_loader:\n",
" ls = loss(net(x).view(-1, 1), y.view(-1, 1))\n",
" optimizer.zero_grad()\n",
" ls.backward()\n",
" optimizer.step()\n",
" train_ls.append(loss(net(train_features).view(-1, 1), train_labels.view(-1, 1)).item())\n",
" test_ls.append(loss(net(test_features).view(-1, 1), test_labels.view(-1, 1)).item())\n",
" if epoch % 100 == 0:\n",
" print (\"epoch %d: train loss %f, test loss %f\" % (epoch, train_ls[-1], test_ls[-1]))\n",
" print (\"plot curves\")\n",
" plotCurve(range(1, n_epochs + 1), train_ls,\"epoch\", \"loss\",range(1, n_epochs + 1), test_ls,[\"train\", \"test\"])\n",
" plt.text(60, 0.7, 'Loss=%.4f' % test_ls[-1], fontdict={'size': 20, 'color': 'red'})\n",
" fig_name_1 = '{}-{}_1.png'.format(i,j)\n",
" plt.savefig(fig_name_1, format='png', dpi=300) \n",
" \n",
" #plotting\n",
" net.eval()\n",
" predict=net(test_features)\n",
" predict=predict.cpu()\n",
" predict=predict.data.numpy() \n",
" plt.figure()\n",
" sns.regplot(x=predict, y=test_labels.cpu().data.numpy(), color='g') \n",
" fig_name_2 = 'NN_rank_{}-seed_{}.png'.format(i,j)\n",
" plt.savefig(fig_name_2, format='png', dpi=300)\n",
" \n",
" #save the models\n",
" net_name = 'NN_rank_{}-seed_{}.pt'.format(i,j)\n",
" torch.save(net.state_dict(), net_name)\n",
" \n",
"endtime = datetime.datetime.now()\n",
"Rtime = endtime - starttime\n",
"print(Rtime)"
],
"execution_count": 37,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"4\n",
"4\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=110, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=110, out_features=110, bias=True)\n",
" (1): Linear(in_features=110, out_features=110, bias=True)\n",
" (2): Linear(in_features=110, out_features=110, bias=True)\n",
" (3): Linear(in_features=110, out_features=110, bias=True)\n",
" )\n",
" (predict): Linear(in_features=110, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.935467, test loss 0.921161\n",
"plot curves\n",
"4\n",
"4\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=110, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=110, out_features=110, bias=True)\n",
" (1): Linear(in_features=110, out_features=110, bias=True)\n",
" (2): Linear(in_features=110, out_features=110, bias=True)\n",
" (3): Linear(in_features=110, out_features=110, bias=True)\n",
" )\n",
" (predict): Linear(in_features=110, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.928591, test loss 0.887510\n",
"plot curves\n",
"7\n",
"7\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=229, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=229, out_features=229, bias=True)\n",
" (1): Linear(in_features=229, out_features=229, bias=True)\n",
" (2): Linear(in_features=229, out_features=229, bias=True)\n",
" (3): Linear(in_features=229, out_features=229, bias=True)\n",
" (4): Linear(in_features=229, out_features=229, bias=True)\n",
" (5): Linear(in_features=229, out_features=229, bias=True)\n",
" (6): Linear(in_features=229, out_features=229, bias=True)\n",
" )\n",
" (predict): Linear(in_features=229, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.862380, test loss 0.871121\n",
"plot curves\n",
"7\n",
"7\n",
"\n",
"=== train begin ===\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=229, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=229, out_features=229, bias=True)\n",
" (1): Linear(in_features=229, out_features=229, bias=True)\n",
" (2): Linear(in_features=229, out_features=229, bias=True)\n",
" (3): Linear(in_features=229, out_features=229, bias=True)\n",
" (4): Linear(in_features=229, out_features=229, bias=True)\n",
" (5): Linear(in_features=229, out_features=229, bias=True)\n",
" (6): Linear(in_features=229, out_features=229, bias=True)\n",
" )\n",
" (predict): Linear(in_features=229, out_features=1, bias=True)\n",
")\n",
"epoch 0: train loss 0.998901, test loss 0.993529\n",
"plot curves\n",
"0:00:06.117407\n"
]
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"image/png": "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MzPZt28fTzzxBHZ780ccFxfXcH7SpElUVlYGfBRR/ZRCt9vNTTfdxKefftqsTWJiIjk5OQ3Hubm5xMfHt1mN/ng8Hj766CMmTJjg93r37t1xuVwAXHrppSQkJLB79+62LNGvhIQEPB5PQwjm9XrJz8/3O7UzISGhydTZQD/3k/VvaH99vCX9G9pfHz9Z/4b228dFREREREQkcBT4tbLHHnuMbdu2sXTpUtxut982Ho+n4ftNmzZht9uJi4trqxKbqayspLy8HADLslizZg2pqanN2qWlpfHqq68C8M033/D555/73em0Lb3++utcfvnlDbvBHu/YZ/3FF1+Qk5NDz54926q8E4qJiSE1NZVVq1YBsGrVKlJTU/3ueJuWlsZrr72Gz+ejuLiYd955h3HjxrV1yUDL+je0rz7e0v4N7a+Pn6x/Q/vt4yIiIiIiIhI4NsuyrEAX0Vns3r2b9PR0UlJSCA4OBsxum0uXLmXixIk8/fTTxMXFccstt1BUVITNZiM8PJz77ruPgQMHBqzuAwcOcNddd+H1evH5fPTu3Zt58+YRGxvbpO7KykoyMjL44osvsNvtzJkzh7FjxwasboBx48bxwAMPMHLkyIZzv/zlL5k9ezbnn38+c+fOZfv27djtdlwuF7Nnz+byyy9v0xoXLVrE2rVrKSwsJCoqisjISFavXs2ePXvIyMigrKyMiIgIMjMz6dWrV7PP4PV6WbhwIf/6178artVvLNGWNT/xxBMn7N9Au+jj/upetmzZCfv38XUHoo+fqH+A//4N7a+Pi4iIiIiISPuiwE9ERERERERERKQT0ZReERERERERERGRTkSBn4iIiIiIiIiISCeiwE9ERERERERERKQTUeAnIiIiIiIiIiLSiSjwExERERERERER6UQU+Im0AwcPHqRv377U1dUFuhQRERERERER6eAU+ImIiIiIiIiIiHQiCvxEREREREREREQ6EQV+Iifg8Xi46667GD58OKNHj+bFF18EYMmSJcyePZu7776bQYMGMXnyZHbu3Nlw3549e7j55psZMmQIV199NevXr2+4VlVVxe9+9ztGjRrF4MGDufHGG6mqqmq4npWVxRVXXMGwYcN48skn2+7DioiIiIiIiEinocBPxA+fz8edd95J37592bhxI8uXL2f58uVs2rQJgPXr15OWlsaWLVtIT09nxowZ1NbWUltbyx133MGll17KBx98wLx587j33nvZu3cvAJmZmWzfvp2//vWvbNmyhTlz5mC3N/43/OSTT3jrrbdYvnw5S5cuZc+ePQH5/CIiIiIiIiLScSnwE/Hj888/p7i4mFmzZuF2u+nRowfXX389a9asAaB///6kpaXhcrn4xS9+QU1NDVu3bmXr1q1UVlYyffp03G43I0aMYNSoUaxevRqfz8eKFSt44IEHiIuLw+FwcNFFF+F2uxt+7qxZswgODqZfv37069evychBEREREREREZGWcAa6AJH2KCcnh/z8fIYMGdJwzuv1MmTIEBITE4mPj284b7fbiYuLIz8/H4D4+Pgmo/YSExPxeDyUlJRQXV1Njx49Tvhzu3Xr1vB9SEgIlZWVrfmxREREREREROQHQIGfiB8JCQkkJSWxdu3aZteWLFlCXl5ew7HP58Pj8RAbGwtAXl4ePp+vIfTLzc0lJSWFqKgogoKCOHDgAP369WubDyIiIiIiIiIiPzia0ivixwUXXEBYWBhPP/00VVVVeL1edu3axWeffQbA9u3bWbt2LXV1dSxfvhy3282FF17IBRdcQHBwMM888wy1tbVs3ryZd999l/Hjx2O325kyZQqPPvooHo8Hr9dLdnY2NTU1Af60IiIiIiIiItKZKPAT8cPhcLBs2TJ27tzJmDFjGD58OPPmzePIkSMAjBkzhjVr1jB06FBWrlzJkiVLcLlcuN1uli1bxsaNGxk+fDgPPvggv//97+nduzcAc+fOpU+fPlx77bVcfPHFLF68GJ/PF8iPKiIiIiIiIiKdjM2yLCvQRYh0JEuWLGHfvn0sXrw40KWIiIiIiIiIiDSjEX4iIiIiIiIiIiKdiAI/ERERERERERGRTkRTekVERERERERERDoRjfATERERERERERHpRBT4iYiIiIiIiIiIdCIK/ERERERERERERDoRBX4iIiIiIiIiIiKdiAI/ERERERERERGRTkSBn4iIiIiIiIiISCfy/zvpntVPIv+RAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"image/png": "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JUvwpS99CTfeeCNuvvlmFBcXp/XZlmOn9X5ERERERETzHQM2IqIccBwHTzzxBBYvXnzVtR//+Md477338Pbbb+NjH/sYvv/97yMQCMz6mZqpIWpo6I8OzPpeREREREREdBmXHBARZYnX68Xw8DAAYNOmTXj66adhWRYAoL+/H+fPn8fw8DD6+/tx/fXX46/+6q+watUqtLe3X/X5VDmOgxEtgt6RPvRFBxAxo3AcJ71fjIiIiIiIaJ5jBRtRjh3sbMOe4D50j/TB563CHYEtWFfbnOtjZc18+v6f/vSnsW3bNrjdbjz11FN46qmncOedd0IQBCiKgq985StQFAWf+9znEIvF4DgOVq9ejVtvvfWqz0+15MB2bNiOA9uxMagPZesrEhERERERzUuCk4VShkuXLuFLX/oSzp07B1VVsXTpUjz88MOorKzE73//e3z961+HpmlYtGgRvvnNb6Kqqiql+3Z0dGDz5s144403UFdXl+FvQZR+BzvbsOvAS1BECaqkQrd0GLaF+9d/Ys6GTONl+vsfPXoUTU1NaThpYXBGAzXbsTH2G/vx4DFULqlOel/XxS786R0f5++dREREREREaZKVFlFBEPBnf/ZneP311/Hqq69i8eLFeOyxx2DbNr74xS/i61//Ol5//XVs2LABjz32WDaORJQX9gT3QREluGQXBEGAS3ZBESXsCe7L9dGyYr5//3RwHAeWbcO0TBi2CWtcuEZERERERETZkZWArby8HDfccEPi76+77jpcvHgRbW1tcLlc2LBhAwDg7rvvxi9+8YsJ7xEOh9HR0ZH0V1dXVzaOT5Qx3SN9UCU16TVVUtE90pejE2XXfP/+MzVWqWbaFkzbhOVYYKxGRERERESUO1mfwWbbNl588UVs2rQJnZ2dWLhwYeJaZWUlbNvGwMAAysvLkz737LPPYufOndk+LlFG+bxVGIgOwiW7Eq/plg6fN7U26UKXje/vOA4EQUjb/XLJduxEuJZKnOY4DjA3vjoREREREVFey/oW0W984xsoKirCJz/5yWl97r777sMbb7yR9Nfzzz+foVMSZccdgS0wbAuaqcFxHGimBsO2cEdgS66PlhWZ/v6SJMEwjLTcK1fGt4CatjWtFlDTMCCKXBZNRERERESUaVmtYNuxYwfOnj2Lp556CqIoora2FhcvXkxc7+/vhyiKV1WvAUBp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jFUL6jNWSZUvg/ynU32XrdbNQm67JSIiIiIiIqLsyouAbdOmTVBVFS5XPER68MEHcdNNN2XkWSJEuBUXPOOq1fJZJiupslUNlk7ZbN0s1LZbIiIiIiIiIsquvAjYAODb3/42Vq1alZF7j81W88geuBUXJFFK+zMy1WqZyUqqQhzkz9ZNIiIiIiIiIso3eROwTSUcDiMcDie91tXVNelnBAjwKG64ZRfc4yqe0i3TrZaZqqQqxEH+bN0kIiIiIiIionyTNwHbgw8+CMdxsH79ejzwwAMoLS1Nuv7ss89i586dU95HACCLMjyyGx7FnZFqtSvlU6vldCrpCrUajK2bRERERERERJRP8iJge/7551FbWwtd1/Hoo4/i4YcfxmOPPZb0nvvuuw933XVX0mtdXV249957AYyfreZKqsjKhnxptZxuJR2rwYiIiIiIiIiIZi8vArbaVqFsiwAAIABJREFU2loAgKqquOeee/DZz372qveUlpZeVdU2pljxotpbmZVqtYnkS6vlTCrpWA1GRERERERERDQ7Yq4PEIlEMDQ0BABwHAd79+5FU1PTtO5RpHpyFq4B8VZLw7agmRocx4Fmajlptewe6YMqJW9GzfelBUREREREREREhS7nFWx9fX343Oc+B8uyYNs2VqxYge3bt+f6WNOSL62W+VJJR0RERET0/9q78+goy/P/4+/ZJwtZCGSBsFsMi4KCgrgCoihBoKiotG4sda+2KLTwFYorPeqXI2KVuqFfF6r8FEGqINZipRVEVFZFNllC9pBlkpnM8vvjbgIhCSQEMkn4vM6ZM5ln7nnmep7c5Byuc933JSIicjoJe4KtQ4cOfPDBB+EOo8GawlLL+jQtqE8zBBERERERERERqV3Yl4jKyWMq6cYRFxFLcbmHuIhYJvQbVy1xVtEMoaD0UJVmCBsyNoUpchERERERERGR5ivsFWzSMDVVos0c/MAxP3MizRBERERERERERKRmp1WCraUti6yoRHNYbVUq0Sb045jXlVWSS7QjssoxNUMQERERERERETkxp80S0Za4LPLISjSLxYLL7sJhtfHhtpXH/FxiVAK+gK/KMTVDEBERERERERE5MadNgu1Ek1FNWVZJLk6bs8qxulSiXZM2jPJgAK/fSygUwuv31toMQUREREREREREju20SbCdaDKqKTvRSrS6NkMQERER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Fe1tufR37eYr+hB0x9DOUURnexYZUT1wRkYRZy8jzlJCMLY97sgIohwhIt023BERWK1W/P4A/kAAvx/KgyECPi+Bci8+ixt/IEjQ6yHk9eCxx+IPBLGWFWLxlVBgT8DvDxHptnL7yLNwaymuNBIl2ERERERERE6uJvE/+l27djFt2jQKCgqIi4tjzpw5dK5t3e1x+AI+EqMSTm6Ap4gtohVEmF9Cp2QHjLkVgEGVI2rpKNIEWSwWHHZLPRokVG3jW+6/mksOlZFTUEpOfgmbMzsSW2IludhKSX4We7yxfLo+i51ffUtbayETW/3MP3f+yC5LKcnuMuyONDJLHdgiLYRad+RLbqBrbEfSoloR4ezOD+4rGRvhJNJlJzLCQYTrOh5324l0OYh023HYrUysrQuJiIiIiIiIiMgxNIkE28yZM7npppsYNWoUS5Ys4eGHH+b1ilaodeAL+IgMhfAFfJQHA1yTNuwURiungsNuIzkhiuSEKKAN0OmoESMZ7g+Qe6gMgEj3OM5327HbKhJ61zZitCIiIiIiIiIih4U9wZabm8uWLVt49dVXAUhPT+eRRx4hLy+P1q1bV44rLCyksLCwymcPHjwIQIyrFcXlHhKjErgmbVi9GxxI81CRhBMRERERERERaUrCnmDLyMggKSkJm810UbTZbCQmJpKRkVElwbZw4UKee+65Gs/x2wsmaB8hEREREREREREJi7An2OrqlltuYcyYMVWOHTx4kPHjx4cpIhERERERERERkSaQYEtJSSEzM5NAIIDNZiMQCJCVlUVKSkqVcTExMcTExIQpShERERERERERkZrVteXjKZOQkECPHj1YtmwZAMuWLaNHjx5VloeKiIiIiIiIiIg0VWGvYAOYNWsW06ZN4/nnnycmJoY5c+aEOyQREREREREREZE6aRIJtm7duvHuu++GOwwREREREREREZF6axIJthMVCAQA0+xARETqpuJvZsXfUBEREREREWmYZp1gy87OBlAnURGRE5CdnU2nTp3CHYaIiIiIiEizZwmFQqFwB3GiysrK2LRpE4FAgJtvvpk333yT5OTkcId1XAcPHmT8+PGK9xRpTvE2p1hB8Z5qjRVvIBAgOzub3r1743a7T9n3iIiIiIiInC6adQWb2+2mf//+7Nu3D4Dk5GRSU1PDHFXdKd5TqznF25xiBcV7qjVGvKpcExEREREROXms4Q5ARERERERERESkOVOCTUREREREREREpAGUYBMREREREREREWkA26xZs2aFO4iTweVyMWDAAFwuV7hDqRPFe2o1p3ibU6ygeE+15haviIiIiIiINPMuoiIiIiIiIiIiIuGmJaIiIiIiIiIiIiINoASbiIiIiIiIiIhIA9jDHUB97Nq1i2nTplFQUEBcXBxz5syhc+fOVcYEAgEeffRRvvjiCywWC5MnT+a6665r9Fjz8/N56KGH+Pnnn3E6nXTq1InZs2fTunXrKuOmTZvGmjVriI+PB2D48OHceeedjR4vwJAhQ3A6nZV7P02ZMoWLL764ypjS0lL+8Ic/sHnzZmw2G1OnTmXw4MGNHuu+ffu4++67K18XFRVRXFzM2rVrq4ybN28eb731FomJiQCce+65zJw585THN2fOHD755BP279/P0qVL6d69O1C3OQyNP49rireucxgafx7Xdn/rMoeh8edxTfHWdQ5D+OaxiIiIiIiI1E2zSrDNnDmTm266iVGjRrFkyRIefvhhXn/99Spjli5dys8//8yKFSsoKChg9OjRXHDBBaSmpjZqrBaLhYkTJzJgwADA/Af7qaee4vHHH682dvLkyfzqV79q1Phq8+yzz1YmK2ry8ssvEx0dzcqVK9m9ezfjx49nxYoVREVFNWKUkJqaypIlSypfP/bYYwQCgRrHjh49mqlTpzZWaAAMHTqUm2++mfHjx1c5Xpc5DI0/j2uKtz5zGBp3Htd2f+H4cxgafx7XFG995jCEZx6LiIiIiIhI3TSbJaK5ubls2bKF9PR0ANLT09myZQt5eXlVxi1fvpzrrrsOq9VK69atufzyy/n4448bPd64uLjKxARA3759OXDgQKPHcbL9/e9/Z9y4cQB07tyZ3r17s3r16rDG5PP5WLp0KWPHjg1rHEfq378/KSkpVY7VdQ5D48/jmuJtynO4pnjro7Hn8fHibYpzWEREREREROqu2STYMjIySEpKwmazAWCz2UhMTCQjI6PauHbt2lW+TklJ4eDBg40a69GCwSBvv/02Q4YMqfH9V199lZEjR3LXXXexY8eORo6uqilTpjBy5EhmzZpFYWFhtfcPHDhA+/btK183hfv72WefkZSURK9evWp8/6OPPmLkyJHcfvvtbNiwoZGjO6yuc7hibFOax8ebw9B05vHx5jA0vXl8vDkMTWcei4iIiIiISHXNJsHWnD3yyCNERkbWuHzugQceYOXKlSxdupQrrriCiRMnHnOZ2Kn05ptv8uGHH7J48WJCoRCzZ88OSxz1tXjx4lorf2644QZWrVrF0qVLmTBhAnfddRf5+fmNHGHzd6w5DE1nHrfEOQyaxyIiIiIiIk1ds0mwpaSkkJmZWfmf9kAgQFZWVrVlVykpKVWWsWVkZJCcnNyosR5pzpw57Nmzh7lz52K1Vr/dSUlJlcdHjx6Nx+MJWyVNxb10Op3cdNNNfPPNN9XGtGvXjv3791e+Dvf9zczMZN26dYwcObLG99u2bYvD4QDgwgsvJCUlhe3btzdmiJXqOocrxjaVeXy8OQxNZx7XZQ5D05rHx5vD0LTmsYiIiIiIiFTXbBJsCQkJ9OjRg2XLlgGwbNkyevToUa2j4fDhw3n33XcJBoPk5eXx6aefcuWVV4YjZJ555hk2bdrE/PnzcTqdNY7JzMys/PmLL77AarWSlJTUWCFW8ng8FBUVARAKhVi+fDk9evSoNm748OEsWrQIgN27d7Nx48YauzQ2lvfff59LL720snvl0Y68v1u3bmX//v106dKlscKroq5zGJrOPK7LHIamMY/rOoehac3j481haFrzWERERERERKqzhEKhULiDqKsdO3Ywbdo0CgsLiYmJYc6cOXTt2pVJkyZx3333cdZZZxEIBJg9ezZffvklAJMmTarczLwxbd++nfT0dDp37ozb7QZM18D58+czatQoFixYQFJSErfeeiu5ublYLBaio6N56KGH6Nu3b6PHu3fvXu69914CgQDBYJBu3boxY8YMEhMTq8Tr8XiYNm0aW7duxWq18uCDD3L55Zc3erwVrrzySqZPn84ll1xSeezI+TB16lQ2b96M1WrF4XBw3333cemll57yuB599FFWrFhBTk4O8fHxxMXF8dFHH9U6h4+Ou7HncU3xzp07t9Y5DIR1HtcU7wsvvFDrHD463saex7XNB6h5DkPTmMciIiIiIiJSN80qwSYiIiIiIiIiItLUNJsloiIiIiIiIiIiIk2REmwiIiIiIiIiIiINoASbiIiIiIiIiIhIAyjBJiIiIiIiIiIi0gBKsImIiIiIiIiIiDSAEmwiTcC+ffs488wz8fv94Q5FREREREREROpJCTYREREREREREZEGUIJNRERERERERESkAZRgE6lFZmYm9957LwMHDmTIkCG8/vrrAMybN4/77ruP+++/n3POOYcxY8awbdu2ys/t2LGDX//61/Tv358RI0awatWqyvfKysp48sknGTx4MP369ePGG2+krKys8v2lS5dy2WWXMWDAAP7yl7803sWKiIiIiIiIyAlTgk2kBsFgkDvvvJMzzzyT1atXs3DhQhYuXMgXX3wBwKpVqxg+fDhr164lPT2du+66i/LycsrLy7njjju48MILWbNmDTNmzGDKlCns3LkTgDlz5rB582beeecd1q5dy4MPPojVevif4fr16/n4449ZuHAh8+fPZ8eOHWG5fhERERERERGpOyXYRGqwceNG8vLyuOeee3A6nXTo0IHrr7+e5cuXA9CrVy+GDx+Ow+Hgtttuw+fz8d133/Hdd9/h8XiYPHkyTqeTCy64gMGDB/PRRx8RDAZZvHgx06dPJykpCZvNxrnnnovT6az83nvuuQe3201aWhppaWlVKuNEREREREREpGmyhzsAkaZo//79ZGVl0b9//8pjgUCA/v37065dO5KTkyuPW61WkpKSyMrKAiA5OblKVVq7du3IzMwkPz8fr9dLhw4mvUBbAAAB5ElEQVQdav3eNm3aVP4cERGBx+M5mZclIiIiIiIiIqeAEmwiNUhJSSE1NZUVK1ZUe2/evHkcPHiw8nUwGCQzM5PExEQADh48SDAYrEyyZWRk0LlzZ+Lj43G5XOzdu5e0tLTGuRAREREREREROeW0RFSkBmeffTZRUVEsWLCAsrIyAoEAP/74I99//z0AmzdvZsWKFfj9fhYuXIjT6aRPnz6cffbZuN1uXnrpJcrLy/nqq6/47LPPuPrqq7FarYwdO5YnnniCzMxMAoEAGzZswOfzhflqRURERERERKQhlGATqYHNZuOFF15g27ZtDB06lIEDBzJjxgyKi4sBGDp0KMuXL+e8885jyZIlzJs3D4fDgdPp5IUXXmD16tUMHDiQP/3pT/z5z3+mW7duAEydOpXu3btz7bXXcv755/PUU08RDAbDeakiIiIiIiIi0kCWUCgUCncQIs3JvHnz2LNnD0899VS4QxERERERERGRJkAVbCIiIiIiIiIiIg2gBJuIiIiIiIiIiEgDaImoiIiIiIiIiIhIA6iCTUREREREREREpAGUYBMREREREREREWkAJdhEREREREREREQaQAk2ERERERERERGRBlCCTUREREREREREpAGUYBMREREREREREWmA/w8jHiz0m2KAzAAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"image/png": "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0zdffFo364Zxw0Ev8HSq+2y2Nfhk16vyw2DMGsswtbF63fDk4EZtrFo3ZVg3HYYMmYYxpi3YtiIzrjYstiqyhars43w+AAAAAAAK27TTlu3bt+u+++7Ta6+9pp07M5VRp0+fVk1NzZSvve6663T77bdr9+7dY67fc889uu2223TjjTfqiSee0Cc+8Ql95StfmeFbkO7b8WGtW7duxq9baqZTqTZf1Ww3XfZ2fePo08NttNKAM6hBL61rG96klJfOrjt04nlFTFNRKypJw386OnTieV1e16wgDHSmp00tyVYdT7aqteu0HN8d8yxD0rrKejWvaFJzolFNNRsUi0Rn/XO6eN9MEBizopkg0LIVtew531cqriqyharsK7bKSgAAAAAAis20g8G/+qu/0pe+9CXV1tZqz549kqQTJ07o9ttvn/K1V111Vc61ZDKpl156SV/60pckSb/1W7+lT37yk+rs7FRtbe10t7WsTKdSbTbVbGEYygs8eYEvL/Dk+q5Wlq3Q25reon/55Q+UTHUrUVqtXVt35lQBJlPdKouUjLmXEUpn+y7oHw5/Tb9MnlLKG8p55uryldnW4M2JBsXt0jn/fAwZipimbCsq24zMaxBYzBaqsq/YKisBAAAAACg20w4Ga2pqdOedd4659ta3vnXWD25ra9OqVatkWZmz4izLUl1dndra2sYNBnt7e9Xb2zvm2vnz52f9/EI22SCI6VSqTbZm5GxAL/DkB57cwMsMCgnDnLP9tq7crK0rN+fc46X2Fh068bySqW6lnEF5niPLspX20kr7joLh1uCjF36RfU0iXpMNApsTDaqMVczoZzIeQ4Zs0xoeFBKVHbEVmaezB5eThazsK6bKSgAAAAAAis20g0HXdfXQQw/piSeeUHt7u+rq6nTjjTfqfe97n6LRubd9TuWRRx7Rgw8+uODPybf5HgQRhqFc35Xre3ICRz+/cEzP/fJ5XRhIqra0akaDQqRMKPj1o08pCH15vq+072rId6Sx3cGK26W6bOXmbBiYiE/dcj6VMUHgcHswQeDcUdkHAAAAAMDyNO1g8NOf/rT+4z/+Q/fee6/WrFmjc+fO6Qtf+IL6+/v1sY99bMYPrq+v14ULF+T7vizLku/7am9vV319/bjr77jjDt10001jrp0/f167d+/Wf3/6L9SwYaN2v/GmgggzJqv4m8p8DIJwfFeu58oN3GwFXyiNGRQSj8SmHBQyYsAZ1CvJk2pJtupHZ34qN3DHXWebtqpKKvS2xl/Tr23YLsMwprXfiYy0BmfOCMwNAufyc8ZYk1X28XMGAAAAAKA4TTsYfOaZZ/TEE09kh400NTXp8ssv14033jirYDCRSOiyyy7TU089pRtvvFFPPfWULrvssgnPF6ysrFRlZeW43wsV6mzvBX3hR1/RB950+6xDi/kIQOZa8TfTQRCjKwIvDQIvNdWgkBFDXlonOk9lJwef7T2fcz9DhmKRqGJW5ssJPP3Fjg9N+f4mY8iQNRwERqdoDZ7vysqZWE5BWT5/zgAAAAAAYGFNOxgMw/Gipomvj3b//ffre9/7njo6OvSe97xH1dXV+s53vqO/+Iu/0Ec/+lF94QtfUGVlpfbu3Tv9nY9iGqYMw1DKG5pRZd1o8xWAzLXib6JBEKvLV0pSZkCI78kNnEx7sO8p1PhB4KUuHRQiSVHTVsdgVzYEbEm26lT32ew5gSMipqWG6vXqTHUrDAPF7Xi2ItDxHa2YRavw6CDQNm3ZVmZgyHTMR2XlbCy3oCxfP2cAAAAAALDwph0MXn/99Xr/+9+vP/7jP9aaNWt09uxZPfTQQ7r++uunfO3dd9+tu+++O+f6pk2b9I1vfGNmOx6H67sygohMw5ywsm4q8xWAzLTi71K7tu7Ul37yDYVhqNJIiUKFilpRvX3zr+u1gQ55QZAzJGS6EqXV6k33yTZtOb6rtJ9Wyh2SF3j6/I8eGbPWNAytr1qjLYkmNSca1VCzXlHLzrYju4GrqGnLCVx5QaAdTddMaw+GDMUsWzErppbOVj3zyvfV1ndBtcNTj6f7s57rz3m2lltQlq+fMwAAAAAAWHjTDgY/8pGP6KGHHtJ9992n9vZ2rVq1SjfccIM+8IEPLOT+pilTuRaEgUpHVdrNxHwFIBNV/NWVJaZ8rRf42rpis26/4r/quRPP60J/UhXRMv16w9VaV1UvN/BntJcRQRjoXN8FrYjX6lT3WXmBN264uKZilZoTjdqyokmbajaoxC7JWXN5XbNu1g3ZqcSJ0upJB5gYylR0xiIxxcyoohFblmmNqbwrsWIzrryby895Nkbah19+7RVFLVtVsQqVRTOfl2IOyhb75wwAAAAAABbPpMHgD3/4wzH/+eqrr9bVV1895trhw4f1lre8Zf53NiOZkMsY/mc25isA2bV1p/Yd3i95aUWtqBzfkRv42rV155h1mXZgT97wlxt48oerAddUrta7r3jnrN6HlGnvbh9IZluDX0m2asBN5ayzzYiaE426et0V2pxoUHm0bFr3v7yuedJhJaZhKmbZmXMCh9uDLx1EMpvKu9Fn+5VGYtn3NNnPeT6MDjFtMyLX95RMdUmSyqLxog7Kpvt5BgAAAAAAS8+kweDHP/7xca+PhDxhGMowDD333HPzv7MZss2IakurNegNzer18xWAXFm/TXu2Kxtgramo02+/bqe2rtysgfSg3MCV4zvyw3DWLcHj6Ur16HjyRDYM7Bnqy1lTXVKp5kRjpiow0ajq0qp5eXZ2enAkpujwMJKpJhLPtELz0rP9HN9RGIaKmBH1u4MLOgRkdIhZU1qljsEuhWGonnSfIqZV1EHZpZ/nYh+2AgAAAADAcjJpMHjo0KHF2secrK9ao7KqCqW99KzDrvkMQN646nJdtrI5Uw3oe0r7jpKDnfMYA0p96X61JE9mg8COwc6cNeXReDYIbE40akW8dsrAbjqy7cFWVFErqqhlK2JNuytd0swrNMetMJRUHivTbW/8HR04dlD/cPixBQmuRoeYcbtUK+KZINbxXVWXVhV9UHZl/baifn8AAAAAACxXM0tzClQYSmkvPefKrdkEIK7vyvU9eaGXmRg8qiV4Ph0596K+98r3M1OBFcrx3Zw1JZGYNtc2DJ8T2KjV5XXzEgRKF4eG2FZ0+M/c9uCZmGmF5kQVhq/2nFvwKcGXhphxu1SWYaq6tEr3vO1D8/IMAAAAAACAxVYUweDZvvOqLqnWb77uugWrbAqCYPg8QH84BPTk+p6CeW4JHuH4jlo7X9XxZKv+4/zLem0wt8XWMi1tqtmoLSsatSXRpLWVq2WZ1rw835Ah27KzIWDUsmUa5rzcWxq/QvP1dVsmrPybqMLQD/wFnxLMOXsAAAAAAKAYFUUwuLZiteySqP5P6wvaVLtxToFQEAbyAl++PyoAHK4C1IJEgBle4OlU99lsa/DJrlflh0HOuqhlK2bFZJmmEqU1+sCbbp+X5xuSLMNU9JLpwQtpdIXmpWcIXlr5N1E4FzEjilrRMfed7ynBnLMHAAAAAACKUVEEg4Yxu0qxIAzk+K78wM9MCPZduYGvhQwARz/7TE+bWpKtOp5sVWvX6Zz2YEPSuqo1ah9IqsKOKxqJXqzaC0N1DvXMaQ8j7cEj5wRGI9GpX7RApppSPFE4d+DYwXmZJj0VztkDAAAAAADFpiiCwRFTVYr5gS/Hd+UGrlzfleN7ixABZoRhqPP9r2UnB7+SPKkhL52zbnX5yuywkM2JBsXtUj34wpfVm+4b08rrBK4SpdUz2sPI0JCSUdODTXP+2oPnYjpTiicK5wqhzfdI29FFrShc7OcBAAAAAIDiUxTBYPtAh6xIryzD0rrKekmZMwHd4GIrsOs78hZgKMhEwjBUMtWllo5MRWBLslX9zkDOukS8ZtTk4AZVxipy1uxoukbffPFpSY6ipi0ncOUFgXY0XTPlPgwZw5V4UUWtmKJzHBqyUGY6pXhEIbT5TtUGvdSfBwAAAAAAilNRBINlkbgq4pWSTHmBp3879e/aXNuwaCHgiJ6h3mxrcEuyVV2p3Fbfylh5ZmpwokmbEw1KxGumvO/ldc26WTfo0InnlUx1K1FarR1N1+jyuuZx15syFY3Yig1XBUaswv+veS4DPvLd5jtVG/RSfx4AAAAAAChOhZ8YTUO/OyBnMFBFrFx+6Om7x/9Vf/Lm31/w5w44g3oleTIbBrYPdOSsidsl2lzbqC0rMlWBdWUrZlWxd3ld84RBoCFDEdNULBJTdHhwyHxOEF4MhVD5N1vTaYNeys8DAAAAAADFqSiCQS8IZIW+JClq2kqmuhfkOUNeWic6T2UrAs/1ns+pSYxatjbVbtSWRJOaE41aU7lqQUI6U6ZKItHs4JClUBU4lXxX/s3WbNugl8rzAAAAAABAcVr6aZI0HLwZ6nP6ZZnmjIdyTMT1XZ3sPqPjHZmBIad7zioIx0aBEdNSY8364TMCm7Shao0s05qX518qMjw4JGbFZC/BqsBiNZc26KXwPAAAAAAAUJyKIhgMw0CGJM/3pj2UYzx+4OvVnnPZ1uCTXa/KDbwxa0zD0PqqtdoyPDCkoWa9opY9D+9ifBHTGjNFuNAGhxTKdNx87mOx26CXcts1AAAAAAAoHEURDJqmqSAMFItEdfPrb5jwLL5LBWGgc30X1NKRaQ3+ZdcppT0nZ11mkq+p2pIqvb35rbqi/vL5fgtjWIap0kgsc2ZgAYaBI+ZjOu58BHqFMKV3sdugl2rbNQAAAAAAKBxFEQxWxspll5ZOGQqGYaj2gaRahs8IfCXZqgE3lbNuZVlCWxKNKo2U6Mfnfq6oFVHUtOUErg4cO6ioZU87fJwua7hNuMSKKRop3DBQuhjmHe84IcMwVFNSpVjEmPF03PkK9Kaa0lsoVY0AAAAAAACFpCiCwX5nQHHP1KETz0vSmNCuK9WdGRYyXBXYk+7LeX11SaWaE43asqJJzbUNqi6tkiQ9+MKXM6GgFZWk4T8dHTrx/JyDQUOSVeBtwuMZCfP8wMu2WV8Y6FC1V6naePWMpuNOFehN12RTeguhmhAAAAAAAKAQFUUwWB4tU1VJpXrTffr60ae0fc02DbpDakmeUMdg1zjr48PDQjJfK+K144ZyyVS3yiIlY67NZeqxIUO2FVHMiikWiS7o2YQL5cCxg/IDTz3pfhkyFA7PZe5J96nEjskyzGlPx50s0JOm32Y82ZTe+QofAQAAAAAAik1RBIN+EKg73ashz5EXeHpuuHJwREkkpk21G7Ul0aTmRKPqK+qmVZ2XKK1Wb7ovWzEoSU7gzmjqsSFDsUimIjAWiSmyQBOLF0v7QFL9zmC24tEbrhoMFaoz1a3qkqppT8edLNCbSaXfZFN6/+HwY5OGjwAAAAAAAMtVUQSD3UM9ipaWjrn2uhVNak40aUuiUWsrV8uaRSC3o+kaffPFpyU52TMGpzP12Bw+LzA23CJsmuaMn12o6soS6hzskmVaMmQoYkbkBZ4MZc5w3LP9lmlX4k0W6M2k0m+yKb2ThY8AAAAAAADLWVEEgyMMZaoAV5Wt0Puvvn3O97u8rlk36wYdOvG8kqluJUqrtaPpmnHPF7SyYWCmTXgpnBc4G7u27tTxjhPyg0CmkQk8I6alymi56itXzag9d7JAb6aVfhNN6Z0sfAQAAAAAAFjOiiIYNGXKNiMKw1BBGMqcx1Du8rrmcYNAQ8ZwRVtU9hIaHjJXV9Zv002XX69/fulZBaEv27IVj5QoYtmzCtsmCvTmq9JvsvARAAAAAABgOSuKYNCyLAVhIMu0VBUtV8p3FuQ5Y84LtKKKWEXx45uxm1//m9pUu3FBw7b5rPSbKHwEAAAAAABYzooi2UqU1iheUS4pU1VWE6uYt3sX83mBc7HQYRuVfgAAAAAAAAurKILBjsFORex+WaalkkhMv3PZ9bO+18i03ZEwMLpMWoQLEZV+AAAAAAAAC6cogkHp4uCRMJzda20rkh0cErXsed4dAAAAAAAAUFiKIhhcEa9VvPJiK/GhE8+POzBkNM4LBAAAAAAAwHJWdGlY1LSVTHWP+z3OCwQAAAAAAAAyii4YdAJXidJqSZwXCAAAAAAAAEykKIJBN3ClMJQbeIqYtn7zdTtUES3LhIGRaL63BwAAAAAAABScoggGE6U1MiO21pev1Y7Gt+iN9a/P95YAAAAAAACAglYUweCfvPn3tWH9hnxvAwAAAAAAAFgyimL6hmkUxdsAAAAAAAAAFg2JGgAAAAAAALAMFUUrMTBbR9qO6sCxg2ofSKquLKFdW3fqyvpt+d4WAAAAAADAgqNiEMvWkbaj2nd4v7pTPSq34+pO9Wjf4f060nY031sDAAAAAABYcASDWLYOHDso27QUi8RkGIZikZhs09KBYwfzvTUAAAAAAIAFRzCIZat9IKmoFR1zLWpF1T6QzNOOAAAAAAAAFk9BnDG4Y8cORaNRxWIxSdJdd92la6+9Ns+7QrGrK0uoO9WjWCSWveb4jurKEnncFQAAAAAAwOIoiGBQkj73uc9py5Yts3rtJw59RhvXbyiIwREMs1g6dm3dqX2H90teWlErKsd35Aa+dm3dme+tAQAAAAAALLgl00rc29urM2fOjPk6f/68JCkeKS2IwREMs1harqzfpj3bb1F1aZX63UFVl1Zpz/ZbCHIBAAAAAMCyUDAVg3fddZfCMNT27dt15513qrKycsz3H3nkET344IPjvtYwlGkH9dI6cOxgNtiZTfXeXCr+Rg+zkMbfEwrLlfXb+O8GAAAAAAAsSwVRMfjoo4/qwIED+ta3vqUwDHXfffflrLnjjjv03HPPjfl69NFHx6wZPThiNtV7c634Y5gFAAAAAAAAloqCCAbr6+slSdFoVLfddpt+8pOf5KyprKzUunXrxnytXr16zJrRgyNGV+8ZhqFYJCbbtHTg2MEJ9zGb14xWV5aQ4zsT7gkAAAAAAAAoFHkPBgcHB9XX1ydJCsNQTz/9tC677LIZ3SMMpbSXHjM4YjbVe3Ot+Nu1dafcwFfaSysMw5w9AQAAAAAAAIUi72cMJpNJffCDH5Tv+wqCQJs2bdI999wzo3sMeiltLF055jzAurKEulM92fP+pKmr92bzmtEywyzEVGIAAAAAAAAUvLwHg+vXr9fjjz8+p3vct+PDWrdu3Zhru7bu1L7D+yUvragVleM7U1bvzeY1l2KYBQAAAAAAAJaCvLcSL5RM9d4tqi6tUr87qOrSKu3Zfsukod1sXgMAAAAAAAAsRXmvGFxIs6neo+IPAAAAAAAAy0HRVgwCAAAAAAAAmFhRVwwulCNtRxkwAgAAAAAAgCWNisEZOtJ2VPsO71d3qkfldlzdqR7tO7xfR9qO5ntrAAAAAAAAwLQVRTD4v364b9GCuQPHDso2LcUiMRmGoVgkJtu0dODYwUV5PgAAAAAAADAfiiIY7E33LVrVXvtAUlErOuZa1IqqfSC54M8GAAAAAAAA5ktRBIMX+jv02kBSf//jry34s+rKEnJ8Z8w1x3dUV5ZY8GcDAAAAAAAA86UogkFJChWqY7BT33zxOwv6nF1bd8oNfKW9tMIwVNpLyw187dq6c0GfCwAAAAAAAMynIgkGjezfvnH0O7r3Xz+7YG3FV9Zv057tt6i6tEr97qCqS6u0Z/stTCUGAAAAAADAkhLJ9wbmRzjqb6Haei9o3+H92rNdCxLYXVm/jSAQAAAAAAAAS1qRBINj9Tr9qoyW68CxgwR4wDLmuq7OnDmjoaGhfG8lL0pKSrRu3TrZtp3vrQAAAAAAClDRBYOWYUoyNOgNMSkYWObOnDmjiooKNTQ0yDCMqV9QRMIwVDKZ1JkzZ9TY2Jjv7QAAAAAAClCRnDGYYRmmLDMiQ4Zc32VSMLDMDQ0NKZFILLtQUJIMw1AikVi21ZIAAAAAgKkVRcVgdUmlHDMcHkESKggDmYbFpGAAyzIUHLGc3zsAAAAAYGpFUTFomRFVxcolSY7vyg99VZVU5HlXADDW3/7t38pxnBm/7uc//7k+/OEPL8COAAAAAADLWVEEg29ef6X6nUG5gZe91pvu0xd+9BUdaTuax50BwEUPPvigXNfNue553jirL3rDG96gz3zmMwu1LQAAAADAMlUUrcQvvHpEfqk/5prn++oPBvXoz/6ZycQA5AW+OlPdC3Lv2tJqRUxr0jX33nuvJOnWW2+VaZpau3atampq1NraqoGBAT3xxBP68Ic/rNbWVrmuqw0bNugv//IvVVVVpR/96Efau3evvv3tb+vMmTN65zvfqVtvvVXf//73lUql9KlPfUpXXXXVgrw3AAAAAEDxKopgMGKa8oNMMGjIUDj8j2kYautrz/PuAOSbF/j60Hfv1YX+1xbk/qvKV+qz77hn0nDwnnvu0Ve/+lU99thjKisr00c/+lG9/PLL+qd/+ifF43FJ0sc//nHV1tZKkj772c/q7//+73XXXXfl3Ku7u1tXXHGFPvShD+nAgQN64IEH9Nhjjy3IewMAAAAAFK+iCAZtMyppYMy1UKEUSlriZ+8faTuqA8cOqn0gqbqyhHZt3UkFJFAkrr/++mwoKElPPPGEnnzySbmuq8HBQTU0NIz7ung8rre97W2SpCuuuEJ79+5djO0CAAAAAIpMUQSDbuDIjtpyfFeZNHCkclBaW7Eqr3ubiyNtR7Xv8H7ZpqVyO67uVI/2Hd6vPdtFOAjMQMS09Nl33JPXVuLxjA4Ff/zjH+trX/uaHnvsMdXW1urJJ5/U17/+9XFfF41Gs383TXPKMwoBAAAAABhPUQwf8YJAFdEymcNhoCSZhqGKWJlue+Pv5HVvc3Hg2EHZpqVYJCbDMBSLxGSblg4cO5jvrQFLTsS0VFeWWJCv6YaCZWVl6u/vH/d7vb29Ki8vV3V1tRzH0be+9a35fPsAAAAAlivDyHwtN488Il19tVReLlVVSW99q/TUUzO7x89/Lv3hH0pXXimtXCnFYtL69dJv/Ib07W9LYZj7mpGf92Rf//iPua/7wQ+kG2+UGhqkkhJpwwbphhukZ56ZeH8vvST97u9KdXWZ17zuddI990ip1LTfYlFUDP7utt/SCz0/kxf48gJPlmlpfdWaJd922z6QVLkdH3MtakXVPpDM044AzMUf/MEf6Pbbb1dJSYnWrl075nvXXnutDhw4oLe//e2qqanRVVddpZ///Od52ikAAAAALGF33SV95jPSunXSH/2R5DjSY49Jv/3b0t/+rfQnfzK9+xw+LD3+uPTmN0u/9muZgPH8eenJJ6V3vlN697ulr3xl7GvuuWf8e/X1SX/zN1IkIu3cOfZ7Dz0kfeADUlmZdNNNmX2fOZMJH7/7Xen++6WPf3zsa370I2nHDsl1pZtvzgSWhw5J990nPfdc5isWm/ItGmE4Xry5NJw5c0bXXXeddt1/mwZL3aI7g+/ef/2sulM9ikUu/heZ9tKqLq3SPW/7UB53BiwNL7/8si677LJ8byOvxvsZjPy787nnntO6devytDMAAAAAi2KkWnDpxj8z83//r3TNNdKmTdL/+39STU3m+smT0vbt0sCAdOxYpjJvKun0+OFab28mLHz55UxAd/XVU9/r7/5Oet/7MsHft7998brrZqoR02nppz/NVP2NePnlTLWiaUpdXRf34vvSG96Q+f4TT0i7dmWuB0GmgvBb35L+6q+kj350ym0VRSvxLztPqXeoT+f72rXv8H4daTua7y3Ni11bd8oNfKW9tMIwVNpLyw187dq6c+oXAwAAAAAAzEQ6Lf3P/5kJneJxqbJSuvZaaYLzz3XggHTddVJ9fSa0WrNG+vVfl77whbHrTpyQ3vteafNmqbRUqq3NPON975OS89wV+fDDmT8//vGLoaCUCQL/+I8z7/FLX5revSaquKuslN7+9szfW1qmd68vfjHz53/7b2Ovd3ZKPT3Sli1jQ0FJuuyyzPVUShp9LNX3v58JBf/zf74YCkqZAPGv/zrz94cfnlYYXBTBYBCGSvuOOlM9SrmpojmD78r6bdqz/RZVl1ap3x1UdWmV9my/pWgqIgEAAAAAQIFwnEzY9T/+h+R5mRDt3e+WR/3tVQAAHStJREFUjh+XbrlF+tjHxq7/4hczZ+K99FKmRffDH86ciZdKjQ3e2tqkX/3VzLXXv1760z/N3LexMXPWXlvb/L6PQ4cyf15/fe733vGOsWtma3Dw4j3e8Iap1x8+LP3kJ5lw8r/8l7Hfq6vLVAweP54bMo5cu+IKKZG4eH2y99jUlAkTT53KBLJTKIozBqVweApxqD5nQGd65vlDlUf/f3t3Hh9Vee9x/DMzmSULIftGkFAUEqAqEDaxAgEVNWERsAJKFZG6QbVFicUWxK1prfU2oFyurYIrWq6lLCKK9oLaFhGkyCIUZQvZyEISQraZc/84JBAygaCQCcn37SvOnHOeJ/M7Jw95vfjxPM+vV2xPJQJFRERERERE5ML6/e/NmWg33GDOBPQ7kTKaM8dcKvvMM5Caau61B+bSWIcDtm41k1unOnLk5Pu//MWcFff88/Czn9Vvd+yYOcutVnGx2e5cjB5tJs5qv19WlllwJDa2YdvLLjNfd+8+t8/4z3/gtdfMJby5ubBqFRw+bCZRL7/87P1rZwvefXfDQjAWCyxYALfdZi51HjPGnHmZlQXvvmsmU996q36fr782X7t29f55l11m3uPu3eaS6jNoJYlBy4n/m8nBGk+Nj+MREREREREREbmI/PnPZpKqtkBGrago+NWvzOq8L710MjEIZju7veH3iohoeM7fv+G5wMD6x8XF8Pjj5xZ3QsLJxODRo+Zr+/be29aeLy4+t8/4z3/qx+VwwO9+Z86SPJuyMnjzTfNZTZnivc348WYycMKE+sVMoqPhzjvNWYCnOo/32SqWEoNR9x+AzWrzcTwiIiIiIiIiIheJ0lIz+RUXB4mJDa+npJivW7acPDdpkrmktnt3eOghs3pvfn7DviNHmjP47r/frOS7aBFs3+59/7uEBPP8uXzdccf5eAJnNmKE+VlVVeZzmj3bXFo9cqR57kzefNN8viNHQkyM9zavvQbDh5v7Oe7caT7XnTvN/RsfeABuvfX839MJrSQxaLJgIcgeQMf2cb4ORURERERERETk4lA7A83b8ttTz586A+3nP4fFi6FTJ/jjH80lsNHRMHQobNp0sl2nTrBxI9x8M3z4oVl8o2fPk/3Op9qZcrX3c7ra8yEh3+372+3m0txf/xrmzYOVK89+D7XLiKdN8359925zJmGPHuaei4mJ5uzKxETzuE8feOcd+PvfT/Y5j/fZSpYSmwLt/gQ4AlS1V0RERERERESkqWoTTTk53q/XFgg5fenq5MnmV3ExfPaZuSfen/9sFjHZtcssqgFmdd2lS82iJlu3mgnCzExzz8HAQLjrLrPd991jMDAQOnQw9+fLzm6Y6Kwt7tHY3nzn4oYbzD0G//53mDnTe5svvzSTpJ07Nyw6UmvtWqiuNqs5W0+bv2e1mpWHv/jC/BoyxDxfW724sb0Sz+E+W0Vi0OnnwGqxYmCcU9Xe6hoPy/+ylvZl33K88zWEhLUnrJ2T8JAAwtq7cNq1JFlEzp/MzEx++tOf4nA4fNJfRERERETEq3btzJlw33xjJpVqi3TU+vhj87V3b+/9Q0LMisQ33ggej5kcXL/eXDp8Kj8/cwZcnz7mXoXXXGMuQT41Mfh99hgEc9nzq6/CmjXm/nyneu+9k22+r6ws89XvDKm1//5v83Xq1IZFR2pVVpqv3pZhn3r+1L8HpqTAU0+Z9/joo/Xbf/ONmTDs1Knh3oRetIrEYFRgBAHtgyirLj+nCr7VNW4qDu7gyspPeXhnNDXYuNa1jR+5dnFv8c34+7vo0a6YOP8KSiKvIKy9P+Ht/QkLdhHe3vwKCXJis7WqFdkicoHMnz+fKVOmfOfE3vftLyIiIiIi0qgpU8y98x5+GJYtA9uJyVJHjsATT5xsU+vjj80ZbKcnvPLyzNeAAPP1iy/g0ksbzjbMza3fDk7uMfh93HOPmRh86ilzNmFoqHl+3z6z+q/T2TBheOSI+RURUb9wyqZNkJzc8DPy8yE93Xx/003e4zh2DN5448xFR8DcVxDM6s0zZ9avcvzll+Z5i6V+MnPwYHMW5vr1ZgXpkSPN8x4PzJp18jk0low8RatIDAJUuauICgw/pz4BLju3Pfxz3JX38KrHTuHR4xzdFUTNwXZMjO1JYUkFXfZ/TmzZHn5f3IHC0kpucm7CYyvm6bJhAHTyO0JggJOq4HgCXHb8qMFmAbfNgdViIcBzDJvVoNIejMViIbT6CIbVSrkzAovFQlTFftw2J6UBHbBaIKZ0J1aHC2fnK4mLDKRDZBBhwS4sTfhhnm9Fm9ZyNOcQR7rcRI3bQ+T+Dwlw2ogZNgGLxYJRU43Fz0v1IRFp4PET/+p16623YrVaefHFF1mwYAFff/01lZWV9O/fn0cffRSbzcb8+fNZuXIlTqcTi8XCkiVL+MMf/lCv/6uvvkpwcLAvb0lERERERC4mZyrS8cILZlLqvfdg+XK44gpz9l95ubm/XV4ePPIIXH31yT5jxphFRQYMOJnQ27ABPv/cnBE4fLjZ7tVXzZlzV19tzkoMDYW9e2HFCjNJ9+CD5/c+r7rK3P/wuefMJNu4cWaBkKVLobDQXMKckFC/z/z55kzFOXNg7tyT56dOhYIC6NcPLrnETJbu2werV8Px42bisbGk31tvQUmJubdiY0VHwPzed94JL78Mffuaz7VTJ/Nz/vpXM/YHHzT3IKxls5ntU1LM+xs3zoxv3TozmTlokFkQpgkshvF9U7G+c+jQIYYNG8aQX6VhD/E/p2XETeWpqsB9rBh7aAxuj0HeJ8spzztEQdI4CkoqiNq0EEtlGcvbT6Kyyk1q6dsYWHjXdTMew+CW429TgZNl9jQ8HoPJNW9TQiDvcAMew2Aab3PECGFpzXA8hsHP7G/zbU0kr5UNAmB6uzXs9nTk6+CBdIgM4rLAEkLi4omNjSAuIoj2QY7vnDT0eDwU5+aQX+Uiu6Acy1fvEZy7haUBE8ktOMbg6v8j3lbIf5XeAMDEwE/xw83b1UOJDA3gJ8b/UuMfSlb324kK9Sf6+F5CYzsQmdBFsyilRdi5cydJSUkAfLTpAB9sPHBBPufafpeQknzJWdt169aNzZs3ExgYyOzZs+nbty+jR4/G4/Ewc+ZMBgwYwHXXXcfw4cP55JNPcLlclJWV4XK58PPzq9e/qU59BrVqf3euW7eO+Pj4c75fERERERG5iDQlZ1BUZC4HrqgwE2pvvGEm7/z8zCTh/ffDhAn1+yxcCO+/b+4ZmJMDLpeZ0JowAe6911yeDPCvf8Err5h7EB48aCbUOnQwZ8r94hdmIZIL4ZVXzBmCO3aYe/X17m3OhkxNbdh27lzvicHXXjOTc5s3m8nRqipzRmHv3nD77XDLLY0/3/79zaIra9aYey6eiWGYhVxeecV8nqWlEBwMvXrB3Xc3XpV4xw4z5o8/NvvUPv/0dLOASRO0isTgyCcnMvHqsec9KdgU1YWH8VSU44y7FICy7Z+AxUJQdzOxV77nC/DzI6DzFQBUHNyFxc+OM7YLAFV5B7DYHdhDzexxTUkBhs1BUaWNw/klGBv+xGFbBza5E8nNP8pD7v/hw4qerD7eCwsexrXbwuF23bFFX0pcRBAdIgOJiwwiLiKQoAAHNW4PeUXl5BSUcyQ7h8qDO/mq5hKyCytILPkH19m/YFbRBKqw08fxDT8MyOeL0OuJDG9HbHgAMeGBxIQHYrNZyC86Tl7RcfKLy8kvOk5s3j/IP25hQ0knwOCpkLfZWnUJf6m4ivD2LsY5PuFoSDeq43sRGRpAZHtz/0YAt8fAc+LL7THwuN0YFaW4rU48NjueqkqsRQeoDozEbW+HUVGCM2cb5WFdqXaGYKksJSRvC7aEPgRExhLoMAiy1RAYGobfmdb3S5vSkhODAwcOJCIiAuuJzWUrKipISUlh5syZjB8/nvj4eK6++mqGDBlCVFRUg/5NpcSgiIiIiIiINEYZlO/JHhZX7ziox9X1jgMu61Pv2NUxsd6xI6p+MsEv2FwOHRUIUWEB0G02vYCbAMNdTemeUNKswfR1h5J36BCXfb6Uf/h14P/2F7Ft624eCl7Ny8f681X1JXQMOE4ftvPx8SSOGoH0dnzLT4I2sMnvFsLDOxHSoS/Zlk7MSkomJiqM6PBUnHYbp20NWueyjqGnnekHwIyqGvKLyik42IUOJVWMrwygoLCU6APZHMoPZvWedlg91TwdupQlxwayqeoHtLeUk95+Of9b3o/Pq7oQaS3hsZC/8mrZIDZVdSHaWswvQ/7GK2U/YktVZzrYCnmk/Ur+WjqEf1dfwg/8cvlZ8Pss2FjG7po4LvXLYXrwWh4vuZbD9kvo6l/IMOvnfN5uOO7gGCL9jtGhZj8VMVfg3z6UIIdBO5cfgcFBuJx+dUlKj8Ep709JXJ76/pTjeu8NsFrAarVgsViwWizYrJYTx2C1mO+tVvOaeczJ41Ne4yKDsFmbf/l4a5aS3LTkXXMxDIMXXniBjh07Nrj29ttvs3nzZv75z39y880389JLL5GYmOjlu4iIiIiIiIh8d60iMbi3cD/PfrKIMd2vZ1yPRjZ9bAUsNjvBif0IBuIBkqIxhr/BpR4Pk21+lB/JJvejXMbG9advdRjlWXvof2A33a4aTEjXK4kOuoogdxpzozthsZ2/H73L4UfH6GA6Rv/wtCv96APc5TEoyi+g8LNCbgpK4NroHvi5K7F8XcDIjn1Ii+iC1V1J5QEX42O68+OQWKzuKjxHLuWOiI7cFRCCxajBWjGE+wNCsDmcgEFl2UimVlkorTI4XpDH4awABgYlUljtxFlUheMIHK8xyDpcgqVyJ0P8PuapbRbyPO1Jduzl9qBPeaJ4NEc8wfR17CU1YDO/PZrGMcNFf8cervf/N78tSaPCcDDQuZthru1kHE2jGj8GOb/mGtcuMo6m4cHK1c5dDHTu4XclaQAMdu6kt/Nb/lByIwBDXdvpaT9EZqk5fTjF9RVd7dksLL0WgGtd2+jkl89LZeZmoj++tiu3jUhCWpfAwEDKysoIDAwkJSWFRYsWMXfuXGw2G4WFhRw7dozQ0FDKy8vp168f/fr148svv2TPnj0kJibW6y8iIiIiIiLyfbWIxOC3335Leno6xcXFhISEkJGRQcLpG0GegdViw2N4eHfHGrqEdfLJkmJfsViscGI/v4CIWDrf8hCdgWTA8HQG41ouq5cEjGz2GG1WCxHREUSMubv+hV4P1D/uftrMqS6nb84ZdtrhqcmRGOCUyj1cDoxm4Ikjwz2YmrJbybQHUVbpoSzrMir3RTM1bhCVHhv+RcHYD7uZ0SMZi9MfZ347XIc8pPfuj9XuwpEThP2AmycHDsJqd2A7EIh1v5s/DB2CzWqDb/zx7HPzwvAUPIaB+2s7xkEPzw2+xiyotNuAbAtPXzUIj8fAb08ltnwrc/oNwOMxcP6nDL8iG7N6JWN44Iquzf9zkgtvypQpTJ48GZfLxcKFC1m4cCGjRo3CYrFgt9v55S9/id1uZ/r06VRUVGAYBt27d+e6665r0F/FR0REREREROT7ahF7DE6ePJmxY8cyatQoli9fzrJly1iyZMlZ+9Xuk3X5zGtwhvrj9rhJjLyUOUObVnlFRFo3b/vrtTXaY1BEREREREQa4/PSsQUFBezYsYPUE1VhUlNT2bFjB4WFhef0fQzDwM/qR96xggsRpoiIiIiIiIiISKvi86XE2dnZREdHY7PZALDZbERFRZGdnU1Y2MmloyUlJZSUlNTrm5OTA5hJQQMIcgQQFRjebLGLiIiIiIiIiIhcrHyeGGyqxYsXM3/+fK/XrBYL7Z1B2Kx+jEy8tpkjExERERERERERufj4PDEYGxtLbm4ubrcbm82G2+0mLy+P2NjYeu1+8pOfMGbMmHrncnJymDRpEkHOIGLaRTEy8do2VXhERM7OMAwsFouvw/CJFrCFrIiIiIiIiLRgPk8MhoeHk5SUxMqVKxk1ahQrV64kKSmp3jJigODg4EYrcM5L+YU20BeRBlwuFwUFBYSHh7e55KBhGBQUFOByuXwdioiIiIiIiLRQPk8MAsydO5f09HReeOEFgoODycjI8HVIItIKxMfHc+jQIfLz830dik+4XC79o4mIiIiIiIg0qkUkBrt06cI777zj6zBEpJWx2+107tzZ12GIiIiIiIiItEhWXwcgIiIiIiIiIiIizU+JQRERERERERERkTaoRSwl/q7cbjdgVicWEZGmqf2dWfs7VERERERERNqmizoxWFtQYNKkST6ORETk4pOfn0+nTp18HYaIiIiIiIj4iMUwDMPXQXxXFRUVfPXVV0RGRmKz2Xwdzlnl5OQwadIkXn/9dWJiYnwdTpMp7ualuJtXW4zb7XaTn59Pz549cblcFyhCERERERERaeku6hmDLpeL5ORkX4dxzmJiYoiPj/d1GOdMcTcvxd282lrcmikoIiIiIiIiKj4iIiIiIiIiIiLSBikxKCIiIiIiIiIi0gYpMSgiIiIiIiIiItIG2ebOnTvX10G0JU6nk/79++N0On0dyjlR3M1LcTcvxS0iIiIiIiJt0UVdlVhERERERERERES+Gy0lFhERERERERERaYOUGBQREREREREREWmD/HwdQGtTVFTEI488woEDB3A4HHTq1Il58+YRFhZWr116ejqfffYZoaGhAIwYMYJ7773XFyHXSUlJweFw1O1XNnPmTH70ox/Va3P8+HEeffRRtm/fjs1mY9asWQwdOtQX4QJw6NAh7r///rrj0tJSysrK2LhxY712mZmZvPHGG0RFRQHQu3dv5syZ06yxZmRk8P7775OVlcWKFSvo2rUrAN9++y3p6ekUFxcTEhJCRkYGCQkJDfq73W6efPJJNmzYgMViYdq0aYwfP94ncTd1nIPvxnpjz7sp4xx8N9a9xd3UcQ4tY6yLiIiIiIjIxUGJwfPMYrEwdepU+vfvD5h/yX/22Wd5+umnG7SdNm0at912W3OHeEZ//OMf6xIo3vzpT38iKCiIDz74gH379jFp0iTWrl1LYGBgM0Z5Unx8PMuXL687fuqpp3C73V7bjh49mlmzZjVXaA0MGzaMyZMnM2nSpHrn58yZw8SJExk1ahTLly/n17/+NUuWLGnQf8WKFRw4cIC1a9dSXFzM6NGjGThwIPHx8c0e97mMc/DNWG/secPZxzn4bqx7i/tcxjn4fqyLiIiIiIjIxUFLic+zkJCQumQJwJVXXsnhw4d9GNH59d577/HjH/8YgISEBHr27Mn69et9HJWpqqqKFStWMHbsWF+H4lVycjKxsbH1zhUUFLBjxw5SU1MBSE1NZceOHRQWFjbov3r1asaPH4/VaiUsLIzhw4ezZs0an8R9MYxzb3GfC1+N9bPF3dLHuYiIiIiIiFw8lBi8gDweD2+++SYpKSler7/88sukpaVx3333sXfv3maOzruZM2eSlpbG3LlzKSkpaXD98OHDdOjQoe44NjaWnJyc5gyxUR999BHR0dH06NHD6/VVq1aRlpbGlClT2LJlSzNH5112djbR0dHYbDYAbDYbUVFRZGdne20bFxdXd9xSnv3Zxjm0vLF+tnEOLXesn22cQ8sc6yIiIiIiItLyKDF4AT3xxBMEBAR4XUL50EMP8cEHH7BixQquu+46pk6desalgc3h9ddf529/+xvLli3DMAzmzZvn03jO1bJlyxqdRXXrrbeybt06VqxYwV133cV9991HUVFRM0fYOp1pnEPLG+uteZyDxrqIiIiIiIg0nRKDF0hGRgb79+/n+eefx2pt+Jijo6Przo8ePZry8nKfz0aqXb7ocDiYOHEimzdvbtAmLi6OrKysuuPs7GxiYmKaLcbG5Obm8vnnn5OWlub1emRkJHa7HYBBgwYRGxvLnj17mjNEr2JjY8nNza1LlLndbvLy8rwuJY2Nja23XLclPPuzjXNoeWO9KeMcWuZYP9s4h5Y71kVERERERKTlUWLwAnjuuef46quvWLBgAQ6Hw2ub3NzcuvcbNmzAarUSHR3dXCE2UF5eTmlpKQCGYbB69WqSkpIatBsxYgRLly4FYN++fWzbts1rRdfm9u677zJ48OC6yrenO/V579y5k6ysLDp37txc4TUqPDycpKQkVq5cCcDKlStJSkryWt13xIgRvPPOO3g8HgoLC/nwww+5/vrrmzvkOk0Z59CyxnpTxzm0zLF+tnEOLXesi4iIiIiISMtjMQzD8HUQrcmePXtITU0lISEBl8sFmBVFFyxYwKhRo1i0aBHR0dHccccdFBQUYLFYCAoK4pFHHuHKK6/0WdwHDx5k+vTpuN1uPB4PXbp04bHHHiMqKqpe3OXl5aSnp7Nz506sVisPP/www4cP91ncta6//npmz57NNddcU3fu7rvvZsaMGfzwhz9k1qxZbN++HavVit1uZ8aMGQwePLhZY3zyySdZu3YtR44cITQ0lJCQEFatWsXevXtJT0+npKSE4OBgMjIy+MEPftDgHtxuN/PmzePTTz+tu1ZbHKO5437++ecbHedAixjr3uJeuHBho+P89Lh9NdYbGyfgfZxDyxvrIiIiIiIicnFQYlBERERERERERKQN0lJiERERERERERGRNkiJQRERERERERERkTZIiUEREREREREREZE2SIlBERERERERERGRNkiJQRERERERERERkTZIiUGRFuDQoUN069aNmpoaX4ciIiIiIiIiIm2EEoMiIiIiIiIiIiJtkBKDIiIiIiIiIiIibZASgyKNyM3NZfr06QwYMICUlBSWLFkCQGZmJjNmzODBBx+kV69ejBkzhl27dtX127t3L7fffjvJycncdNNNrFu3ru5aRUUFv/nNbxg6dCh9+vRhwoQJVFRU1F1fsWIFQ4YMoX///rz44ovNd7MiIiIiIiIi0uYoMSjihcfj4d5776Vbt26sX7+exYsXs3jxYjZs2ADAunXrGDFiBBs3biQ1NZX77ruP6upqqqurueeeexg0aBCfffYZjz32GDNnzuSbb74BICMjg+3bt/PWW2+xceNGHn74YazWk38Mv/jiC9asWcPixYtZsGABe/fu9cn9i4iIiIiIiEjrp8SgiBfbtm2jsLCQBx54AIfDQceOHbnllltYvXo1AD169GDEiBHY7XbuvPNOqqqq2Lp1K1u3bqW8vJxp06bhcDgYOHAgQ4cOZdWqVXg8HpYtW8bs2bOJjo7GZrPRu3dvHA5H3ec+8MADuFwuEhMTSUxMrDcTUURERERERETkfPLzdQAiLVFWVhZ5eXkkJyfXnXO73SQnJxMXF0dMTEzdeavVSnR0NHl5eQDExMTUmwUYFxdHbm4uRUVFVFZW0rFjx0Y/NyIiou69v78/5eXl5/O2RERERERERETqKDEo4kVsbCzx8fGsXbu2wbXMzExycnLqjj0eD7m5uURFRQGQk5ODx+OpSw5mZ2eTkJBAaGgoTqeTgwcPkpiY2Dw3IiIiIiIiIiLSCC0lFvHi8ssvJzAwkEWLFlFRUYHb7Wb37t38+9//BmD79u2sXbuWmpoaFi9ejMPh4IorruDyyy/H5XLx0ksvUV1dzb/+9S8++ugjbrzxRqxWK2PHjuWZZ54hNzcXt9vNli1bqKqq8vHdioiIiIiIiEhbpMSgiBc2m42FCxeya9cuhg0bxoABA3jssccoKysDYNiwYaxevZq+ffuyfPlyMjMzsdvtOBwOFi5cyPr16xkwYACPP/44v/3tb+nSpQsAs2bNomvXrowbN45+/frx7LPP4vF4fHmrIiIiIiIiItJGWQzDMHwdhMjFJDMzk/379/Pss8/6OhQRERERERERke9MMwZFRERERERERETaICUGRURERERERERE2iAtJRYREREREREREWmDNGNQRERERERERESkDVJiUEREREREREREpA1SYlBERERERERERKQNUmJQRERERERERESkDVJiUEREREREREREpA1SYlBERERERERERKQN+n+JU5NgFFAo8wAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD7CAYAAAB68m/qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXRU93k38O9dZpU0Gu0aEAYkW6yOTaBxa5ukgG1oY8A0TuFAbDe2k3Oc1OmbvCQmJxzjhZyGhpOkDk6dtG5ekhcvsV0IAmKMt4Q4ceIF+43ALAaBDUhIGi0jada7vH/cucOMZkZzZ713rp5PT+syGml+DFfPfeb5Pb/fj5FlWQYhhJCyx+o9AEIIIYVBAZ0QQkyCAjohhJgEBXRCCDEJCuiEEGISvF4vHAwG0dnZiYaGBnAcp9cwCCGkrIiiiL6+PsyfPx92uz3ha7oF9M7OTmzYsEGvlyeEkLK2a9cuLFq0KOEx3QJ6Q0MDAGVQzc3Neg2DEELKSk9PDzZs2BCLofF0C+hqmaW5uRktLS16DYMQQspSqlI1TYoSQohJUEAnhBCToIBOCCEmQQGdEEJMQrdJUUKM5kh3J/YeP4TeMS8aK+qwavbNWOCZr/ewCNGMMnRCoATzJ995FkOBYVRanBgKDOPJd57Fke5OvYdGiGYU0AkBsPf4IVhYDjbeBoZhYONtsLAc9h4/pPfQCNGMAjohAHrHvLBy1oTHrJwVvWNenUZESPYooBMCoLGiDmExnPBYWAyjsaJOpxERkj0K6IQAWDX7ZkQkESEhBFmWERJCiEgiVs2+We+hEaIZBXRCACzwzMc9C9fC7ajGaMQPt6Ma9yxcS10upKxQ2yIhUQs88ymAk7JGGTohhJgEBXRCCDEJCuiEEGISFNAJIcQkKKATQohJUEAnhBCToIBOCCEmQQGdEEJMggI6IYSYBAV0QggxCQrohBBiEhTQCSHEJCigE0KISVBAJ4QQk6CATgghJkEBnRBCTIICOiGEmAQFdEIIMQk6go4QEzjS3Ym9xw+hd8yLxoo6rJp9Mx2nV0Dl8v5mzNAHBwfxpS99CcuXL8fKlSvxz//8zxgYGAAAvPfee1i1ahWWL1+Ou+++G16vt+gDJoQkOtLdiSffeRZDgWFUWpwYCgzjyXeexZHuTr2HZgrl9P5mDOgMw+Dee+/FwYMH0dHRgWnTpmH79u2QJAnf/OY38eCDD+LgwYNYtGgRtm/fXooxE0Li7D1+CBaWg423gWEY2HgbLCyHvccP6T00Uyin9zdjQHe73bjuuutif7722mtx8eJFdHZ2wmazYdGiRQCAdevW4cUXXyzeSAkhKfWOeWHlrAmPWTkresfoE3MhlNP7m1UNXZIkPP3001i6dCm6u7sxZcqU2Ndqa2shSRKGhobgdrsTvs/n88Hn8yU81tPTk8ewCSGqxoo6DAWGYeNtscfCYhiNFXU6jso8yun9zSqgP/roo3A6nfjCF76AQ4e0f9zYuXMnduzYkfXgCCGZrZp9M55851lACMHKWREWw4hIIlbNvlnvoZlCOb2/mgP6tm3bcO7cOTzxxBNgWRYejwcXL16MfX1gYAAsyyZl5wBw1113Yc2aNQmP9fT0YMOGDXkMnRACAAs883HPQpRFF0Y5Kqf3V1NA/8EPfoDOzk787Gc/g9Wq1JLmz5+PYDCIt99+G4sWLcIzzzyDFStWpPx+l8sFl8tVuFETQhIs8Mw3ZIAxi3J5fzMG9FOnTuGnP/0pZsyYgXXr1gEAWlpa8Pjjj+Pf/u3fsGXLFoRCIUydOhXf//73iz5gQgghqWUM6FdddRVOnDiR8muf/OQn0dHRUfBBEUIIyR6tFCWEpFUuKySJgvZyIYSkVE4rJImCAjohJKVyWiFJFBTQCSEpldMKSaKggE4ISamxog5hMZzwmFFXSBIFTYoSQlIqpxWS2SrXyd4j3Z146o8vpP06ZeiEkJSUFZJr4XZUYzTih9tRjXsWri2LwDeRcp3sVcftC42kfQ5l6ISQtMplhWQ24id7ASj/FULYe/yQof+u6riZcfMa8ShDJ4RMKuU62Ztq3ONRQCeETCrlOtmbatzjUUAnhEwqq2bfjIgkIiSEIMsyQkKoLCZ71XFPFNSphk7KUrl2KRD9ldN2uPEWeObjS4tY/M+b+9I+hwI6KTvqbL+F5RK6FO5ZCMP/UhJjKLfJXkmWEIyEMM3lwW1zV+AZPJnyeYYI6JRtkWyUa5cCIdkKCWEEhSACQgiSLAEAZFlO+3zdA/rR3pPouPgaZVtEs94xLyotzoTHyqFLgRAtRElEIBJEUAgiIglIH76T6R7Q//Ptp2CvdaLW4Y5tAETZFplIOR3aW0j0Sda8lMnZMAJCEEEhBDmrMH6Z7l0usixDkiT0+wfhjwQAULZFJlauXQr5KNfVjWRiYSEMX2gEvWP9GAgOISAEcw7mgAECOs9xAMOAATAU9AGYHNkWyZ1Zl6RPhLayNQ9BEjEaGkP/mBfewBBGw36I0fp4vnQvuVRZK+FHGDKAiBiZFNkWyV+5dSnki+YNypsoiQgKIYSEMEJiOK8sfCK6B3SHxQ6HowKDwWHIkOF2VFNtkJBxJuu8QTmTJAlBIYSgqATyYgXxeLoHdFkGLCwHt938H5sJyZWZt7I1E3VyMyiEEBRCkFCYUopWugd0vxDAdEcDZeWETKBcVzdOFiEhjFC0X7xQ9fBc6B7QH1n6v9HS0qL3MAgxvMk2b2B0ETESzcSDECSxBAWVzHQP6IQQUi4kSYr1iofFSEnq4tmggE4IIROQZRlhIYyATnXxbFBAJ4SQFMJiJFYXFyRR7+FoQgGdEEKiBElEKBJCQAwiIgqGK6lkQgGdEDKpSbKEUCSMgBgsWb94rkZDYzg/3J326xTQCSGTTqwuLoYQjBi3Li6IArqGPsbxvtM40X8a533dCA8G0j6fAjohZNJQlt6HEIwEIejYL56OLMu4NNqH4/1KAD89cA5hMZLwHAtnSfv9FNAJIaZmxH7xeKOhMZz0nokF8eHgSNJzprqaMau+DbPr2+AMWHHH9t+l/FkU0AkhpnN5cjOEiMH6xdUyyon+0zjRp5RRxo/OZauMBfD2+lZU2SpjX+u52JP2Z1NAJ6ZFB0JMLnpshqWFLMu4NNaPE9E6+IcDZ5PLKCyPttrpmN1wJWbVt6K5shEMw2T9WhTQiSnRQdKpme0mp/dmWOmMhsdwsn/iMkqLqxnt0Sx8Zs20CWvjWmkK6Nu2bcPBgwdx4cIFdHR0oL29HQCwdOlSWK1W2GzKlp4bN27E4sWL8x4UIfmig6STmekmFxRCCAsh3TfDUsV3o5zsn7iMovxvYhmlUDQF9GXLluHOO+/Ehg0bkr722GOPxQI8IUZBB0IkK/ebXDjaoWKElZvZlFFm1bdhdkNbzmWUbGgK6IsWLSrqIAgpNDoQIlk53uSM1KGilFG6lMnM/tOxIzPjqd0os+pb0VpzRUHKKNnIu4a+ceNGyLKMhQsX4hvf+AZcLlfSc3w+H3y+xL98T0/6mVpC8kUHQiQrl5ucIIkIRoIIiiFdl99n041SzDJKNvIK6Lt27YLH40E4HMZ3v/tdPPLII9i+fXvS83bu3IkdO3bk81KEZMUsB0IUchLTyDe5WIeKEERIpzZDzWWUuhmYVdeKWfVt8FQVv4ySjbwCusfjAQBYrVasX78e9913X8rn3XXXXVizZk3CYz09PSlr8oQUSrkfCFHoSUyj3eQkWYqe9KPUxfUI4mo3yon+M4Yto2Qj54Du9/shiiKqqqogyzIOHDiAOXPmpHyuy+VKWYohZDLLlH0XYxJT75ucuodKMDq5KZW4Q6UcyyjZ0BTQt27dipdeegn9/f344he/CLfbjSeeeAL3338/RFGEJEloa2vDli1bij1eQkxBS/ZdjpOY6ahBvNR7qMTKKNEAbpRulGLRFNA3b96MzZs3Jz2+Z8+egg+IkMlAS/ZdLpOY6agdKiEhhIgklKygoqUbZUpVE2Y3XFnQRT1GQCtFCSmyVKUVLdn3qtk34z/+/Ev0+QcgSiI4loPT4sCdC24v9V9BMyWIK/3ipepQESQBXYPRMkr/GZwfvmiqMko2KKATUiRHujux6/3dOO/rAc9yqLFXx0orDt6GsBjOmH3LshKaGDAJfzYSQRQQEEIICUFEJLHoQVxrN0pr7XTMNkEZJRsU0AkpArVGPhQcBsswkGUZ3sAQKi1O+IUAREkCy7CosjpRbXelbCHce/wQKq1O1DlrYo+FDLKys9RthlrLKGod3OjdKMVCAZ2QIlBr5JIsgQELhmEgigKGQj7wLAdAhstWAV9oFIIsYlr1lKQuFyNOiqothsU+5UeQBJwdPI8T/adxvP902jJKe30rZtdfaeoySjwGmPCTBgV0Yjhm2BFQDcY8y0OQRDBgYlksAwY8x6Pa7oKdt8HtqMaWJV9P+hlGmRQNixGEhGBR91CRZRm9Y/3K7oQaulGMuKin0BgwYBgGVpaHhePBMxZwHAfBEU77PRTQiaEYaUfAfG4sajCutlXBGxiEJEuxgC4DcNuVdRkTZdz5ruzMZ/yiJCIYCSEgBos2ual9b5RWzKprQ2utOcsoTPT/8iwLC2sBz/HgGA48y4Fn+aSbFmXopGwYZUfAfG8sajC2sBzq7DUYDA0DAHiWQ72zBk6LA8DEGXc+KztzGb+6clPdW7zQQTy7bhRlab3ZyigMGLAMo2TcLA+e4WOBm2XZvH8+BXRiKEapG+d7YxkfjK+qm4l5je14vetNcAyrrJjUkHHnurJT6/glSUJIVJbfB4VwQeviWssoajfKrPpWeKqa8i6jHOs9hVfPvAFvYAh1DjeWtt6AuY1X5fUzs6Vm3RaWg4WzgGd5cAwLnrNE51CKgwI6MRSj1I0LcWNJFYzbaqeXZH4g3fiHgj4liEdXboYKHMTHwn6c9J7BiT5lMjP9op42zKprw8zaK2AtYBnlWO8pPH/0AHiWRQVvhy80guePHsDt+PuiBfVY8OZ4WFkeHKtk3xaOB8vkn3VngwI6MRSj7Ag4/sbijwQwEBiCLMt4+LUf5hyItWTchZgUjh+/hbPAyloAyLDzNlwa6y9YOUVrN4paRmmvb4XLVlWQ107l1TNvgGdZWDkrAET/G8arZ94oSEBnwIBjlEltC3t5otKSotatBwroxFCMsiNg/I1FkET0+wcBAPWOmqJO1BZqUvi2Obfg6ff3wmmxgwEDX2gEY5Eg/mHuiryCudG7UbyBIVTw9oTHrKwF3sBQVj8nvsPk8iSlUu/milgyyRcFdGI4eu8IqI5BvbGc7D8DjmVRY69GhTVaxijSRG2+tXtBEhESQphWPRUr2pfg5dOH0ecfQJ3DjX+46m9zylLVbpST/enLKJ6qRsyuv1L3RT11Djd8oZFYhg4AYSmCOoc77ffET1SqWTfPpe4wMToK6ISkod5YvrpvMyotzoRf7mJN1GZbu5dlGRExokxsiuGEFsP2+plor5+Z9Ri0lFGqrBWxVZnFLqNkY2nrDXj+6AEAYVhZC8JSBIIkYWnrDQCSe7s/9J7Dy2feQO9YP2rsLvxd+xLdk4l8UEAnJIN8JmqzrYdreS1REhEWIwhHu1NEWcqrIq6WUdRDHk55u9J0o1wRXZVp3EU9cxuvwu34e7x25g/whUfRVNmAZa03YH7TLFjGZd5Hujvx5LtKecvKWdE35tVtzUOhUEAnJINcJ2pzqYePfy1BEsBzFqyefQtGQmMIi2GEC7B3itZulFn1bcoWswXuRhkv31bD+E6TT039BK6ftjA2cZnuxmOUNQ+FRAGdkAxynajNJWAs8MzHvQsZHDz1W4yEx9BU1YC/mnoNmirrMRIezfnvEF9GOdF/Gh9PuDdKacso2bYaMtH/sUS7Szg2WvvOsk3QKGseCokCOiEa5DJRm0s9PCyE0VozDV9c+I8QJTEWdLPNx7WXUaZjVnSDK73KKONbDW2cFTwr4Y2P3sLVTbOUnm6WA8cq3SYcyxZkwtIoax4KiQI6IUWiuR4uRBCSLtfDc5VNGWVWfStaa6cXtYyiBQPAHwmi1u6GhVOybZZhIUqC8gmlsqFor22UNQ+FRAG9hMywiyDRbnwv+2BwGBzDodpWhXcv/gUz3NMQEsM518O1lFGqrBWY1XD5pB69ulHiN6CK9XMzPDiWw9SqJgwGhiAzgBg9ODokhOB2VBd1TEZZ81BIFNBLxEi7CBYS3aTSUwPGC50H0O8fRKOzDg7OjrFIAP/1zrP4h7krspr4U8oo3lgA/9B7FiExcSvVYuyNki0GDDiWVeraLKespmTZtDXum668Mfa7UepM2QhrHgqJAnoesglmZpxRN+tNqlAEUcBVtTNRaatEUAwhEAmi1++FKIlgGRb7jh/KGNBjZZR+pZQyGBxOek4pu1Hijc+6LZwFFia6sjKL1ZRmzJT1QgE9R9kGMzPOqJvxJpWvsBhB56XjOHT6MC6O9KLS4kD3SB9svLIxFgOAZVhIkoTu0T4c6z2VENQFScC5ofM43pehjJLFop5C7D6YmHUr275ynLJndyE2oDJbpqwXCug5yjaYmXFG3Yw3qWypk5phSVmpefTSSfyqcz84loGVtWA4NIKgEEJACERXKUaDH8OAZ1i8cvr3qHPWxMooEy3qUbPwbMoouew+qC6Ft3IWnBn8CL/t+pOyktJRjeVXfgbXeuZRqc2gKKDnKNtgZsYZdTPepDJR9jGPrtIct9QeAA6dPqwE87jd/iosdgyHR8ExLCDLkGQJgAyWtaBr6CP86+92JL2OUkZR2glDYhi/O/snHD73Fo71nsoqw860+6ByRiV7+ZgzVtmv28JZ8F73Ufyfd5+PfX/PSC/+651n8Lcz/xqvd71JpTYDooCeo2yDmRnrhGa8SaWiHgIRFpXTfKQJltqn2u2v0lqB4fAoZFmGCCH2ePyEZrpulGO9p7Dng5dy3t87fjzqyThVlgoIsohqW5VS907T0/3r48rrjv8Uuv/EK3DbXVRqMyAK6DnKJZiZrU5oxpuUShAFhIQwQmIIoSyW2tc53BgO+sAyHEKicpRbSAgBAMbfBniWx8IpV+PTM67DlDRllHz292bA4ArXFISFEJxWB0RZgihJ8Ef8qLBWXN45Mo10n0IDQgiNcbsZqo9PplKbUVFAz5GZg1k2yuUmlanmK8kSwmIktnNhtgcjq90oHMvBGxiKllUS1TrckGQJgiSisaION7UtzhiUte7vnXRCPKtk3itnL8PP330OI+ExWDhLLPH4x6tXZvw7pfsU6uBtCIvhSVVqKxcU0PNQLsFsshvfkeQLjuCp938NBgyuqp2pTGgKEc1HsR3rPYVXTv8el8a8gKyUYyKSkPQ8BgwqrU4snPoJLJl5Part2S/qGb+/NwMl02+paoaVs8DKWZJ2EYz3iea5uHPB53JKPNJ9Cv3srGV4vetN05fayhEFdGJ6e48fgpO3o9JaAQvHQwYwGh7Fng9ewpf/an3a74tv96u1V2Ph1E/gvK8bb51/H4IUSZm/aymjZGNZ643oOPEy7JwFTksFAAlBMYJPNM/Bf779FC6O9KLeWTNhkM418ZjoU2ipzkYl2dE9oP/7H5/E+hs/RxcDKYqwGIEoiaiyVSAsRjAaGYMgiYAswxtIXqSjOtZ7Cr/q3AdJFiFKIrqGPsbpwXMpn6v2aDdVNCAiReD1D2Kqqzn2c7LpAY9vGeRZC268YhHqK2rwm1Ovo3ukF7WOalzrmYtDpw/DwnJw8vaidpmkuxnQp1Nj0j2g+0Ij1PJECkaQRESim12Fo5tdiZKIgcBQxmPJ1EU9J/rP4LddbyYtq1c5eTtsvA3DQR84loMsA7IsRWvYl+vbx3pP4an39yAkhiBJEkZDo3jq/T1Yf81tsaDORFda2jgrPhw4h1fP/AGXxvrhtrvw99HTc65pnotrmufGXv/h135IC7pISroH9Euj/XDaqrDr/d10MZKsqROZgiQgLIYhSFLSZOaSNMeSLZl5PXpH+2NHraXaGwVQtnO18zbYOCu8/kFU2ipg5awYi/ghSUrvirrUPf5G0XH8EPyRABhGWVDERWvch8++iU+1XAMLY1EmMDke73UfxX+/+6vYfib9E5yeY4QFXbSwyJh0D+iAkhl9PNyNI92ddFGUuWL/okuyFMvAQ0IoZQAfTz2W7NUzb6DPPwAHb0NjhRvPH92fdm8UfyQAWZZRaa2I1cHDYhhNlfUIihEAYVRZKzEYLdtUWSpjNxT1/MqhwDAqbU7YOTusnAWiLCIgBHHe15O0XP/Xx1/SnHXrvaBr/CRzz0gvtv/+p3BY7JhWPYWCu44MENDVSSOZPjKWuWJs1iVJUrSLQoiu0NTeEx7fjWJhOfAcD1/Qh2EAPaN9sedVWitip/TMqm9Dtb0qtmQ+IkUSsvrb5q0AgFhdvLmyHjKAoBhGQ7RGfnXTLFg5C6rtLoSEEAJCEMOhEciQIUliyonSbLJuvRd0xW974Y8EMBwaja2gpVWj+jJAQFd/ORlamFDm8t2sS5IkhCVlElOQBETECCKSmFU/uCzL6Bvz4vWzb6btRuFZDq010zE7ujLTU9WYtMFUfFafakIztmweLKycstOglbXAwlnAsmz0729Fn38ALKP0iMuy8jeZWtWUNO5ssm6910DE33zUDccYhoUgCVTP11nGgL5t2zYcPHgQFy5cQEdHB9rb2wEAXV1d2LRpE4aGhuB2u7Ft2zbMmDEjhyEwsWOlaGFCecsmy1QX2Kj171yCt2os7McpbxeORze4GkzRvcJHz52scVTjf11/r6YtZuc2XpXUkcKAgY2zwMpZlSDOWdK2Jq6/5jb8x59/CX8kAFESwbEcqqxOrL/mtqTnZpt169llEn/zESRB2T1SlsGzSjihVaP6yRjQly1bhjvvvBMbNmxIeHzLli1Yv349Vq9ejV//+td48MEH8Ytf/CLrAXDRzMhpcWT1kZEmZYxnfJbJgIEMGdOrpyIsKGUTQRIQkQRERAFIE74ztfqJkoizQ8pJPcf7TuPj4QtJP4cBAwdvg423wc7blElLWcaYEMwYzONfv7miHsvabsQ1zXNg42ywxmXgmSzwzMd9n7pjwus0/jp28DYwYDAa8Rv6mo6/+XAMB0ESwTBAdXRegFaN6idjQF+0aFHSY16vF8eOHcPPf/5zAMCtt96KRx99FAMDA6itrc1qAAzDoMXVjPXX3Kb54qWDFYxp9exb8H/f3w2e4eCwOCBKIvxCEJ9qWQBvYFBT7p1qu9fnOvfj5isXQ5SEtN0oShnlCsxuuBKz6tvwP0d/g5HwaMZWxfGO953GgZOvocJix4zqqQgJYXQcfxkuWyWu9czL+j2ZKJMefx2rWfm9C9cZ+jqOL/mMhv3wR4KosjrhtDgQEkK0alRHOdXQu7u70dTUBI5TWrU4jkNjYyO6u7tTBnSfzwefL/HA2p6eHgCAy16FSltFVq9PBysYgyzLiEhCrOY9w92C2+bcglfP/AEXR3tRbavETW03or1+puZCiroZFc/y8AvB6KRiCL/q7Eh6rqeqMTqZ2Ya22isSgveythuTWhUDkSA4hsPDr/0IdQ43lrXegLmN7eBZNrrroAXvdXfCwVsREIL4aPgiIlIELMNi1/u7cwroEynn6zj+RkWflo2jJJOiO3fuxI4dyXs+A4CTd2SdYRuhD3cyUmveESkS7f9W9i+JL5y01k5Ha+30rH+2WkY57+uGKEmISJGk51RaKzAr2okyq74V1XZX2p83flLTwVkBmQHHcmiy1YJlWPz27J9Q76zBNXGB+vTgR2DBwBsYSjhd6GNf4dtqzXId06pR48gpoHs8Hly6dAmiKILjOIiiiN7eXng8npTPv+uuu7BmzZqEx3p6erBhwwYwTPaZid59uEZXiIxJ7TgRJAGCKES7TzL3fGuldqOc6D+jnNQz0IWQkHpRD8/yqHW48fUb7s3quDN1UpMBg1+89zxqhXC05isgIkUwFvZjz/GXEgJ6Y0UdTnm7Yp0bAGKnC2m9PrW+/3Qdk0LLKaDX1dVhzpw52LdvH1avXo19+/Zhzpw5aevnLpcLLlf6bArILjPRuw/XyHKdX4iIEQiiiIgURjg6aVmo4K1Su1HUlZmpulFqHW74IwHYOCsqLE4IsgBBkvB37UuyCuYMlP1Q7JwNNosNl0b7kw5ySHXNrZp9M7Yd/g+wDAPIcvQ9kFFjc2u6PrN5/+k6JoWWMaBv3boVL730Evr7+/HFL34Rbrcb+/fvx0MPPYRNmzbhJz/5CVwuF7Zt25bTAHrH+tFYpRw26+BtePi1H2rKLB28DRdHLgFQaql3LridPvYhfV12/4lXscAzX2kXFAV09p7A62ffRN+oF5XWClx/xSLMamgt6FiSu1EuJt0kKq3OaAnlchkll0ONGTDKsnneCitrTepGqbZXacqGF3jmo8XVjJ7RPkiyBJ7lUW2rAs9ycDuqM/6ds6mL691PTswnY0DfvHkzNm/enPR4W1sbnnvuubwHIEgi+v2DSm8vb4UoiRNmNvEZUIvLEz0WLPUmSpNR75gX1dYq8BwPnuHAcSyqbS6MhsfQP+ZFRBLxQd+HeP7oAbCMcljCSHgUz3Z24PZ52o41S0eWZfT7B2In1p/ydqXpRpmu1MIb2jClqinloh4t44jvCbfxSl94OtlkwxuuWRO7xrLNnLOti1P9mRSSAVaKAhzLQpQlVFgcGTObcu4MKBZZlqOdJiKurJ2B4cAwwLAIS2FEIgL8kQCqbJUIRw9hePn0YSWY53Cs2Xj+SAAn+8/EauED407SAQBPZWPsvMzx3SjZYKAsELLzttiiHq1lmGyy4XwyZ611ceoMIcWge0CfUtUEZ1Ulzg1fSPpFT5XZmKUzIFeiJCa0CioTfGJ0WbmMq5tmx/q44/cgUTeMArQfa5bu9dUyyon+0/hoKFUZRXs3ihYcw8JhscPO2WDlc7sZANllw7lmzlo+CdA6ClIsugd0ILtzCidTZ4AgChAkEYKsLo0XMnaaZNqDBEg+1gxIv+gmqYySohtFy94o2VJXetp5O2y8VdPJP0bIerVk9/QpkxSL7gE9LIYhS5zmcwrN2BmgLtARREHp6hCV5fFSrMsiO5lq0DZKgmIAABYZSURBVEvT7A+uZvH+SACn+i/vjZKqjNJc2RBblZlPGSUeAwY23qp0pvDW2B7jWuiR9aa7gWTK7if7p0xSPLoHdJetCusXfk7zOYWF7AzQK6NTM++IpBzOEJYEyLJU4CbB9MZn8bX2asxrbMfZoY9x8MPX05RRkrtRCoEBAztvhS2HIB6v1FlvPjeQyfQpk5SW7gH9X/7mHrR4WgBor1sWojOgFBmd2iKolk2EaH93rpl3ociyjIaKWlzTPBcnvEo3yvjzMjl1b5T6trTdKLliGVY5AYhVulO0bnY1kVJnvfncQMz4KZMYg+4BXS+FzugkSbo8WRmteYcn2FGw1LSUUS53o7SirXZ6QcooKhYsHBZbbGJTS008G6XOevO5gVD/OSmWSRvQ8/mFlCRJmaSM1buVGrRRgjegdKOcGzofC+CZyijt9a1wF6iMolL6xK1wRCc2c83EtZTGipH1TvS6+d5AqP+cFMOkDehafyFlWY7uZyIiIl/elMo4oVuhdqOoy+pPeZO7UTiWQ1vNFWivb8Ps+jZMcRWujKJSV2zaeTvsvA08l3yJZTN3obU0VuisN9PrUtmEGNGkDejxv5B23g5ZlmDhrFg9+xb4w4FYt4kyYalvzTsdrWWU9vpWzG5oK3gZRcVAuVkoB0rYJzxAItu5i2yX0hcq6830ulQ2IUY0aQP6tc3zcO/CdXit6w8YCAyj0urEX7d8Ek2V9RgK+TL/AB0oZZQLsSz8o6ELJS+jqJRVmxzsvA3W6Ek+Wuri2c5d6NXip+V1qWxCjGZSBPSEPm9JObsyIgpoqqzH2qtXJT5XpzGmkk0ZRQ3ixSijJLwew8YW/OSyalNLoIwvyfjDfkiSmNAmWcjJznTlH2otJOXIVAFdrXeLkghRliBKQmwrWCNNWE4ku26Uwi3qmQiLaJshH20zzOOGkSlQji/JiKKAwaDyicllqyporXqi8g/VyEk5KruALsmSErAlCaIsQpSVTalESYh2mpRL6FYkdqOcyVhGKeSinokoQdwKWzSQFyrrn9fYjt3HXoxtTVtpdYJj+VigHF+SUbesDQohsCxX0Fr1ROWfLUu+TjVyUnYMG9CV8ogQy7SVxTlKIAfKK2jH01pGaa2Zhln1VxatGyWV+KX3dt5WkAU/8Y50d+L1rjdRZa2AXwgiIkbgC41hzdzlsUCZqiRTbXdhNOLH47duzfv14wP0+eFu1I7bvya+/EM1clJuDBHQBUmM9XNHJGVRjt6rKQtJ694os+rbitqNEu9Y7ym8duYNjEYCmFLViJvbFuOa5rk5L73XQs2IK61OuKFk3iEhhKO9J3H7vM8C0NZOmsuWDanKK/5IEDw7UrT6PCGlpntA9wYGwY1ZTRO8Ae3dKO11rZjdcGVRu1FSOdF3Bi9/eBhOqwMO3o5B/xD++91f4Z6Fa4uakWqZEM1Uu851y4ZU5ZUqqxO+0Gi0U4fq5KT86R7QRUks+2CuvYyidKOUsoyiUhf82Hg73rn4/wAGCEQCyjvPKF/LdyOrTJmzluw7U393rls2pCvlCLIIt6Oa6uTEFHQP6OUqvoxysv90ysMhmisblEU99VeirXY6bHkczpCLy73i9tgpPwDQNfSxEtwyHJicDS2Zs9bOkYlq17n2pae7mUyrnoItS76ey1+ZEMOhgK6RljJKhdWJWXXRk3oa2kpaRomnLvhJd8JPMXqstWTOhVhdmevYqQ2RTAYU0NOIL6Oc6D+DU94uBIVQwnMul1GULLzUZZR4bGzBj1IPnmjVZjGCm9bMOd/OEa1HvKW6aVAbIjE7Cuhx/JEATnm7cCJ63Fq6MoraE65HGSWecjiELbbopxgHJmtVqpWVmcaeqfRDAZyY2aQO6Nl0o+hdRlExYGDhLLFsXGubYaqstZC141KWNCYKzHReJ5nMJlVAH9+N8qH37ARlFH26UVJJN7mpVSlOZzJKSYPO6ySTmekDermVUeKpG2HZogdE5KpUWasRShq0qRaZzEwX0OPLKCf6T+PcRN0oDW2YVdca2y/ECOLr4nbelnJyM9uVkpMpa820VwwhZmaKgN4/NhBbVp++G0XZG2VWfSumupp1L6PEi9XFORvslonr4mr5RBAj8AtBDPgHcbK/C2vmLo8tnx9vsmStWvaKIcTMyjKgl3MZJR6v8ZSfeHuPH4IgRuALjwJgwDIcJFnC7mMvoq12esrAle+EZS57pxRTuvFo2SuGEDMri4CudVGPsjeKEsT17kZJhwULu8UGR3TRj5ZTfuL1jnnhF4JQgrnyKYNjWIiSmLYmns+EZSkmVLMx0XjMWloy2g2VGJdhA3rGMgrDYmbNFbEAbrQySjx1W1oHp0xu5rMtbWNFHQb8g2CZy2UZWZbBs/yEgSvXCUujtQFONB4zlpaMdkMlxmaYgJ5QRvGegdc/mPQcvfdGyQYDwMJa4ODtsFls4LPcljZdVrZq9s042d8FSZbAMWz0AGulX74YgctoWe9E47l34TrTLe832g2VGJvuAf31rj+i5+zAxN0o0ZN6jNSNkk6+Z24CmbOyNXOXY/exFyFKYtE7OYyW9WYaj4O34eLIJQCAp6oRdy64vawDn9FuqMTYdA/ovzv7J1hrHAAS90Yxehklnnpcmz3aL55tXXy8TFnZ7fM+i7ba6SWpqxptU6t045nX2B67Cba4PAiLYQTHbWFcjox2QyXGpntAb6iow7UzPmHobpRUGDCwcZbY6s1CHtemJSsr5CKeiSbdjLICVJVuPGYtTRjthkqMTfeAft+n7kDzFI/ew9BEPSRCDeI8V5y3r5RZmZZJNyOsAI2Xajz/9c4zpixNGO2GSowt74i0dOlSWK1W2GxK8Nm4cSMWL16c98CMJJd+8XyUMiszS2Zr5tKE0W6oxLgKkmI+9thjaG9vL8SPMgyOYaPb0tpgy7C/eKGVMitLVd4RRBEn+8/gq/s2l01GSKUJQkpUcvH5fPD5fAmP9fT0lOKls6JObtqy3F+8GEqVlY3PbMfCfvQHBsGxbFn1PVNpgpACBfSNGzdClmUsXLgQ3/jGN+ByJa7S3LlzJ3bs2FGIlyo4ZXLTGtsMq5CTm6WWy4rC8ZntYHAYAFDrcINhmLIqwVBpgkx2jCzLcuanpdfd3Q2Px4NwOIzvfve7GBsbw/bt2xOeky5D37BhA57e+2zJJ0WVzbB42Dkb7BZ71ot+jCh+cjO+5HDPwrUZg1z8jWAoMIxahxsV1stlGFmWMRrx4/Fbtxb7r0EIyeD8+fNYtmwZXnnlFbS0tCR8Le8M3eNRgrHVasX69etx3333JT3H5XIlZe16KPXkZinlM7kZn9k+/NoPMRQYTvi6WSYXCTG7vOoLfr8fIyMjAJQs7sCBA5gzZ05BBlYoLFg4eQfq7G40OOtQZasyXTAHlMlNK5fYw59L296q2TcjIokICSHIsoyQEKLJRULKRF4Zutfrxf333w9RFCFJEtra2rBly5ZCjS1nDBhYOQvsvA0O3l7WdXGtCtW2R5OLhJSvvAL6tGnTsGfPnkKNJW9qScXO27M+d7PcFbJtb/zk4pHuTjz82g8pwBNicGWfurJg4bQkllQmWzAH1Mx6LdyOaoxG/HA7qjVNiGaiTrYOBYYT2hiPdHcWaOSEkELRfel/LiZjSUWLXNr2MrU6mmUlKSGTQVkFdKWkouyjYsYsvNQn02jZx4W2byWkfBg+tU0uqVSaNpiXurQRn32ri4gsLIe9xw/FntNYUYewmLgNLbUxEmJMhgzo6urNalsVGivq4La7YLPYSrqfSqlpCa6FpqXVkdoYCSkfhgroPMOiyupEvbMGdc4aVFidk6Y+Xqg+8mxoyb6LNdlKCCk8A9TQGTh5e8FO+ylXemz/qrXVkfZIIaQ86J7+Njhr4XZUw27ykkomepQ2KPsmxFx0z9AncxCPp9cKTcq+CTEP3QM6uYyCKyEkHxTQNSh1fzghhOTCVAG9GIFXy+IbQggxAtME9GIF3mIsfaeMnxBSDLp3uRRKsRbmFLo/XL3x9Iz0whccwfG+D7H99z/F80f35zVOQggxTUAv1sKcQi9933v8EERJwHBoFJIsgWM5SLKM3ccO0g6GhJC8mCagF2vPkUL3h/eOeTEa9oMBwDAsAAYsw0KSxaIu8yeEmJ9pauiFPOAhnpb+8Gxq4o0VdRjwD4KLO5hahgwLZ6EdDAkheTFNQC/mwpyJ+sNTTcb+5E+/gNvugl8IJo1j1eybcbL/DERJAsuwkCEDkOHk7bSDISEkL6YJ6IA+C3PGd8EIkojRsB8BIYipVc1J3TYLPPOxZu4K7D52EJIswsJZ4OTt4DkL7WBICMmLqQK6HsYfADEcGgHDAJIsxbptxrc53j7vs2irnU6ti4SQgqKAnqfxuyQKkgDIAM9dfmtTdduowVsN6uqEKAV1QkiuTNPlopfxXTBKXRxw212x56TqtqHDlwkhhUYBPU/jt6BtrmxAla0CHMNO2OaoxwlFhBBz073k8u9/fBLrb/xcWZcaxk/GamljpMOXCSGFpntA94VGTLfZlZZuGz1OKCKEmJvuJRcrZ52UpQY6fJkQUmi6B/TesX4IojjpSg10/BshpNB0L7kIkoT+wCCmupr0HkrJ0QlFhJBC0j1DZ2L/pbNFCSEkH7oHdI5lUe+sgV8I6j0UQggpa7oHdEBZXUndHYQQkh/dA3pEFDEY9GFeY7veQyGEkLKme0C3cBzctioc7T2p91AIIaSs6d7l0lhRD6e9ctK1LRJCSKHlnaF3dXVh7dq1WL58OdauXYuzZ89m/TNohSQhhOQv74C+ZcsWrF+/HgcPHsT69evx4IMPZvX9hToqjhBCJru8ArrX68WxY8dw6623AgBuvfVWHDt2DAMDA5p/hstWRSskCSGkAPKqoXd3d6OpqQkcpxx4zHEcGhsb0d3djdra2tjzfD4ffD5fwvf29PQAAP7lb+5Bi6cln2EQQghBiSZFd+7ciR07dpTipQghZNLKK6B7PB5cunQJoiiC4ziIooje3l54PJ6E5911111Ys2ZNwmM9PT3YsGFDPi9PCCEkTl4Bva6uDnPmzMG+ffuwevVq7Nu3D3PmzEkotwCAy+WCy+VK81MIIYQUQt4ll4ceegibNm3CT37yE7hcLmzbtq0Q4yKEEJKlvAN6W1sbnnvuuay/TxRFAJcnRwkhhGSmxkw1hsbTbaVoX18fAFAdnRBCctDX14fp06cnPMbIsizrMZhgMIjOzk40NDTE2h6NQJ2s3bVrF5qbm/UeTgyNKzs0ruwYdVyAccem17hEUURfXx/mz58Pu92e8DXdMnS73Y5Fixbp9fIZNTc3o6XFeP3xNK7s0LiyY9RxAcYdmx7jGp+Zq3TfbZEQQkhhUEAnhBCToIBOCCEmwT300EMP6T0Io7HZbLjuuutgs9n0HkoCGld2aFzZMeq4AOOOzWjj0q3LhRBCSGFRyYUQQkyCAjohhJiE7meK6mFwcBDf+ta38NFHH8FqtWL69Ol45JFHkjYV27RpE/7whz+gpqYGALBixQrcd999RR3b0qVLYbVaYzW5jRs3YvHixQnPCQQC+Pa3v42jR4+C4zg88MADWLJkSdHGdP78eXz1q1+N/XlkZASjo6P485//nPC8H//4x3jqqafQ2NgIAPjkJz+JLVu2FHQs27Ztw8GDB3HhwgV0dHSgvb0dgHIU4qZNmzA0NAS3241t27ZhxowZSd8viiK2bt2Kw4cPg2EYfPnLX8bnP//5ooxL63UGFPdaS/eeabnWgOJdb6nGpfVaA4p3vU307/bee+/hwQcfRCgUwtSpU/H9738fdXXJx2eW+nc0Rp6EBgcH5TfffDP25+9973vyt7/97aTnPfDAA/Ivf/nLUg5NXrJkiXzixIkJn/PjH/9Y/s53viPLsix3dXXJ119/vTw6OlqK4cmyLMtbt26VH3744aTHH3vsMfl73/teUV/7rbfeki9evJj0Pt1xxx3ynj17ZFmW5T179sh33HFHyu/fvXu3fPfdd8uiKMper1devHix/PHHHxdlXFqvM1ku7rWW7j3Tcq3JcvGut3TjipfuWpPl4l1v6f7dRFGUb7rpJvmtt96SZVmWH3/8cXnTpk0pf4Zev6OTsuTidrtx3XXXxf587bXX4uLFizqOKDu/+c1vsHbtWgDAjBkzMH/+fPzud78ryWuHw2F0dHTgc5/7XEleb7xFixYl7befzVGIBw4cwOc//3mwLIva2lrcdNNNePHFF4syLqNcZ6nGlo1iXW+ZxqXXtZbu362zsxM2my22wn3dunVprx29fkcnZUCPJ0kSnn76aSxdujTl13/+859j5cqV+MpXvoLTp0+XZEwbN27EypUr8dBDDyUd3QcAFy9exNSpU2N/9ng8Jdu18tVXX0VTUxPmzZuX8uv79+/HypUrcffdd+PIkSMlGdNERyGmeu6UKVNify7Ve5fpOgOMea0B+l1vma41oPjXW/y/2/hrp7a2FpIkYWhoKOn79HrPJn1Af/TRR+F0OvGFL3wh6Wtf//rXcejQIXR0dOCWW27Bvffem3LLykLatWsX9u7dixdeeAGyLOORRx4p6utl64UXXkibMa1btw6vvPIKOjo6cM899+ArX/kKBgcHSzxCY5roOgPoWktlomsNKM31lunfzWgmdUDftm0bzp07hx/96Edg2eS3oqmpKfb4bbfdBr/fX/S7rPoR1Gq1Yv369Xj33XeTnjNlyhRcuHAh9ufu7u6S7PZ26dIlvPXWW1i5cmXKrzc0NMBisQAAbrjhBng8Hpw6daro44o/ChFA2qMQ1efGlz1K8d5lus4A415rgD7XW6ZrDSj+9Tb+3238tTMwMACWZeF2u5O+V6/f0Ukb0H/wgx+gs7MTjz/+OKxWa8rnXLp0Kfb/Hz58GCzLoqmpqWhj8vv9GBkZAQDIsowDBw5gzpw5Sc9bsWIFnn32WQDA2bNn8Ze//CVld0Kh7d69G5/5zGdinRjjxb9fH3zwAS5cuICZM2cWfVzxRyECSHsUIqC8d8899xwkScLAwABefvllLF++vGhj03KdAca91gB9rrdM1xpQ3Ost1b/b/PnzEQwG8fbbbwMAnnnmGaxYsSLl9+v1OzopV4qeOnUKt956K2bMmBHbT7ilpQWPP/44Vq9ejZ/97GdoamrCP/3TP8Hr9YJhGFRWVuJb3/oWrr322qKN6+OPP8b9998PURQhSRLa2tqwefNmNDY2JozL7/dj06ZN+OCDD8CyLL75zW/ipptuKtq4VMuXL8d3vvMdfPrTn4499qUvfQlf+9rXcPXVV+OBBx7A0aNHwbIsLBYLvva1r+Ezn/lMQcewdetWvPTSS+jv70dNTQ3cbjf279+P06dPY9OmTfD5fLGjEFtbW5PGKIoiHnnkEbzxxhuxr6mTV4Ue149+9KO01xmAkl1rqcb2xBNPpL3Wxo+tWNdbun9LIPW1BpTmepsoPrz77rvYsmVLQttifX09gNK8Z5lMyoBOCCFmNGlLLoQQYjYU0AkhxCQooBNCiElQQCeEEJOggE4IISZBAZ0QQkyCAjohhJgEBXRCCDGJ/w+Y5RhWTdLBYQAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "PvGetAcBH0Kw"
},
"source": [
"**Gradient Boosting Decision Tree Ensemble (GBDT)**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wzwdbWHGI9gQ",
"outputId": "5a3b191d-7a35-4d8e-adc6-19d7b01536ee"
},
"source": [
"import os\n",
"import time\n",
"from bayes_opt import BayesianOptimization\n",
"#from sklearn.model_selection import cross_val_score\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import mean_squared_error\n",
"from lightgbm import LGBMRegressor\n",
"import numpy as np\n",
"#import seaborn as sns\n",
"#from sklearn.preprocessing import MinMaxScaler\n",
"from sklearn.metrics import explained_variance_score\n",
"#from sklearn.preprocessing import StandardScaler\n",
"import matplotlib.pyplot as plt\n",
"import datetime\n",
"import pandas as pd\n",
"\n",
"t = time.localtime()\n",
"model_name = 'Invar_inference_GBDT'\n",
"file_name = '{}.xlsx'.format(model_name)\n",
"data = pd.read_csv('data_base.csv')\n",
"train_features, test_features, train_labels, test_labels = normalizing_data(data,seed=42)\n",
"train_features, test_features = train_features.cpu().data.numpy(),test_features.cpu().data.numpy()\n",
"train_labels, test_labels = train_labels.cpu().data.numpy(), test_labels.cpu().data.numpy()\n",
"train_labels, test_labels = train_labels.reshape(-1), test_labels.reshape(-1) \n",
"def train_model(num_leaves,\n",
" min_child_samples,\n",
" learning_rate,\n",
" n_estimators, \n",
" max_bin,\n",
" colsample_bytree, \n",
" subsample, \n",
" max_depth, \n",
" reg_alpha,\n",
" reg_lambda,\n",
" min_split_gain,\n",
" min_child_weight\n",
" ):\n",
" params = {\n",
" \"num_leaves\": int(round(num_leaves)),\n",
" 'min_child_samples':int(round(min_child_samples)),\n",
" 'learning_rate': learning_rate,\n",
" 'n_estimators': int(round(n_estimators)),\n",
" 'max_bin': int(round(max_bin)),\n",
" 'colsample_bytree': max(min(colsample_bytree, 1), 0),\n",
" 'subsample': max(min(subsample, 1), 0),\n",
" 'max_depth': int(round(max_depth)),\n",
" 'reg_alpha': max(reg_alpha, 0),\n",
" 'reg_lambda': max(reg_lambda, 0),\n",
" 'min_split_gain': min_split_gain,\n",
" 'min_child_weight': min_child_weight,\n",
" 'verbose': -1\n",
" }\n",
" model = LGBMRegressor(**params)\n",
" model.fit(train_features, train_labels)\n",
" y_pred = model.predict(test_features)\n",
" error = -np.mean(np.abs((test_labels - y_pred) / test_labels)) # print(error) \n",
" return error\n",
"bounds = {'num_leaves': (5, 60),#50\n",
" 'min_child_samples':(1, 50),\n",
" 'learning_rate': (0.001, 1),\n",
" 'n_estimators': (5, 200),#100\n",
" 'max_bin': (5, 100),#10\n",
" 'colsample_bytree': (0.5, 1),\n",
" 'subsample': (0.1, 2),\n",
" 'max_depth': (1, 60),#10\n",
" 'reg_alpha': (0.01, 1), #5\n",
" 'reg_lambda': (0.01, 1),#5\n",
" 'min_split_gain': (0.001, 0.1),\n",
" 'min_child_weight': (0.0001, 30)}\n",
"optimizer = BayesianOptimization(\n",
" f=train_model,\n",
" pbounds=bounds,\n",
" random_state=1,\n",
")\n",
"optimizer.maximize(init_points = 10, n_iter=1)\n",
"table = pd.DataFrame(columns=['target', 'colsample_bytree', 'learning_rate', 'max_bin',\n",
" 'max_depth','min_child_samples','min_child_weight','min_split_gain',\n",
" 'n_estimators','num_leaves','reg_alpha','reg_lambda','subsample'])\n",
"for res in optimizer.res:\n",
" table=table.append(pd.DataFrame({'target':[res['target']],'colsample_bytree':[res['params']['colsample_bytree']],\n",
" 'colsample_bytree':[res['params']['colsample_bytree']],\n",
" 'learning_rate':[res['params']['learning_rate']],\n",
" 'max_bin':[res['params']['max_bin']],\n",
" 'max_depth':[res['params']['max_depth']],\n",
" 'min_child_samples':[res['params']['min_child_samples']],\n",
" 'min_child_weight':[res['params']['min_child_weight']],\n",
" 'min_split_gain':[res['params']['min_split_gain']],\n",
" 'n_estimators':[res['params']['n_estimators']],\n",
" 'num_leaves':[res['params']['num_leaves']],\n",
" 'reg_alpha':[res['params']['reg_alpha']],\n",
" 'reg_lambda':[res['params']['reg_lambda']],\n",
" 'subsample':[res['params']['subsample']]}),\n",
" ignore_index=True)\n",
"table=table.append(pd.DataFrame({'target':[optimizer.max['target']],'colsample_bytree':[optimizer.max['params']['colsample_bytree']],\n",
" 'colsample_bytree':[optimizer.max['params']['colsample_bytree']],\n",
" 'learning_rate':[optimizer.max['params']['learning_rate']],\n",
" 'max_bin':[optimizer.max['params']['max_bin']],\n",
" 'max_depth':[optimizer.max['params']['max_depth']],\n",
" 'min_child_samples':[optimizer.max['params']['min_child_samples']],\n",
" 'min_child_weight':[optimizer.max['params']['min_child_weight']],\n",
" 'min_split_gain':[optimizer.max['params']['min_split_gain']],\n",
" 'n_estimators':[optimizer.max['params']['n_estimators']],\n",
" 'num_leaves':[optimizer.max['params']['num_leaves']],\n",
" 'reg_alpha':[optimizer.max['params']['reg_alpha']],\n",
" 'reg_lambda':[optimizer.max['params']['reg_lambda']],\n",
" 'subsample':[optimizer.max['params']['subsample']]}),\n",
" ignore_index=True)\n",
"table.to_excel(file_name)\n",
"endtime = datetime.datetime.now()\n",
"print ('running time {}'.format(endtime - starttime))"
],
"execution_count": 38,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"| iter | target | colsam... | learni... | max_bin | max_depth | min_ch... | min_ch... | min_sp... | n_esti... | num_le... | reg_alpha | reg_la... | subsample |\n",
"-------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n",
"| \u001b[0m 1 \u001b[0m | \u001b[0m-0.3647 \u001b[0m | \u001b[0m 0.7085 \u001b[0m | \u001b[0m 0.7206 \u001b[0m | \u001b[0m 5.011 \u001b[0m | \u001b[0m 18.84 \u001b[0m | \u001b[0m 8.191 \u001b[0m | \u001b[0m 2.77 \u001b[0m | \u001b[0m 0.01944 \u001b[0m | \u001b[0m 72.38 \u001b[0m | \u001b[0m 26.82 \u001b[0m | \u001b[0m 0.5434 \u001b[0m | \u001b[0m 0.425 \u001b[0m | \u001b[0m 1.402 \u001b[0m |\n",
"| \u001b[0m 2 \u001b[0m | \u001b[0m-0.4054 \u001b[0m | \u001b[0m 0.6022 \u001b[0m | \u001b[0m 0.8782 \u001b[0m | \u001b[0m 7.602 \u001b[0m | \u001b[0m 40.56 \u001b[0m | \u001b[0m 21.45 \u001b[0m | \u001b[0m 16.76 \u001b[0m | \u001b[0m 0.0149 \u001b[0m | \u001b[0m 43.63 \u001b[0m | \u001b[0m 49.04 \u001b[0m | \u001b[0m 0.9686 \u001b[0m | \u001b[0m 0.3203 \u001b[0m | \u001b[0m 1.415 \u001b[0m |\n",
"| \u001b[0m 3 \u001b[0m | \u001b[0m-0.3692 \u001b[0m | \u001b[0m 0.9382 \u001b[0m | \u001b[0m 0.8947 \u001b[0m | \u001b[0m 13.08 \u001b[0m | \u001b[0m 3.304 \u001b[0m | \u001b[0m 9.322 \u001b[0m | \u001b[0m 26.34 \u001b[0m | \u001b[0m 0.01074 \u001b[0m | \u001b[0m 87.12 \u001b[0m | \u001b[0m 57.68 \u001b[0m | \u001b[0m 0.5378 \u001b[0m | \u001b[0m 0.695 \u001b[0m | \u001b[0m 0.6995 \u001b[0m |\n",
"| \u001b[0m 4 \u001b[0m | \u001b[0m-0.4082 \u001b[0m | \u001b[0m 0.8433 \u001b[0m | \u001b[0m 0.8348 \u001b[0m | \u001b[0m 6.737 \u001b[0m | \u001b[0m 45.26 \u001b[0m | \u001b[0m 49.45 \u001b[0m | \u001b[0m 22.44 \u001b[0m | \u001b[0m 0.02876 \u001b[0m | \u001b[0m 158.9 \u001b[0m | \u001b[0m 10.68 \u001b[0m | \u001b[0m 0.4534 \u001b[0m | \u001b[0m 0.9095 \u001b[0m | \u001b[0m 0.6579 \u001b[0m |\n",
"| \u001b[0m 5 \u001b[0m | \u001b[0m-0.677 \u001b[0m | \u001b[0m 0.6439 \u001b[0m | \u001b[0m 0.1309 \u001b[0m | \u001b[0m 6.84 \u001b[0m | \u001b[0m 41.05 \u001b[0m | \u001b[0m 11.37 \u001b[0m | \u001b[0m 7.966 \u001b[0m | \u001b[0m 0.04967 \u001b[0m | \u001b[0m 15.41 \u001b[0m | \u001b[0m 36.58 \u001b[0m | \u001b[0m 0.1553 \u001b[0m | \u001b[0m 0.5934 \u001b[0m | \u001b[0m 1.43 \u001b[0m |\n",
"| \u001b[0m 6 \u001b[0m | \u001b[0m-0.4456 \u001b[0m | \u001b[0m 0.5512 \u001b[0m | \u001b[0m 0.4146 \u001b[0m | \u001b[0m 70.97 \u001b[0m | \u001b[0m 25.44 \u001b[0m | \u001b[0m 3.448 \u001b[0m | \u001b[0m 16.08 \u001b[0m | \u001b[0m 0.06672 \u001b[0m | \u001b[0m 105.4 \u001b[0m | \u001b[0m 56.95 \u001b[0m | \u001b[0m 0.5907 \u001b[0m | \u001b[0m 0.9044 \u001b[0m | \u001b[0m 0.3612 \u001b[0m |\n",
"| \u001b[0m 7 \u001b[0m | \u001b[0m-0.565 \u001b[0m | \u001b[0m 0.5696 \u001b[0m | \u001b[0m 0.8076 \u001b[0m | \u001b[0m 42.78 \u001b[0m | \u001b[0m 10.76 \u001b[0m | \u001b[0m 46.45 \u001b[0m | \u001b[0m 10.43 \u001b[0m | \u001b[0m 0.07533 \u001b[0m | \u001b[0m 146.6 \u001b[0m | \u001b[0m 53.58 \u001b[0m | \u001b[0m 0.6274 \u001b[0m | \u001b[0m 0.7534 \u001b[0m | \u001b[0m 0.7629 \u001b[0m |\n",
"| \u001b[0m 8 \u001b[0m | \u001b[0m-0.5732 \u001b[0m | \u001b[0m 0.635 \u001b[0m | \u001b[0m 0.896 \u001b[0m | \u001b[0m 45.67 \u001b[0m | \u001b[0m 57.93 \u001b[0m | \u001b[0m 33.51 \u001b[0m | \u001b[0m 18.65 \u001b[0m | \u001b[0m 0.01236 \u001b[0m | \u001b[0m 190.2 \u001b[0m | \u001b[0m 29.75 \u001b[0m | \u001b[0m 0.5826 \u001b[0m | \u001b[0m 0.4141 \u001b[0m | \u001b[0m 0.5504 \u001b[0m |\n",
"| \u001b[0m 9 \u001b[0m | \u001b[0m-0.4179 \u001b[0m | \u001b[0m 0.9517 \u001b[0m | \u001b[0m 0.5741 \u001b[0m | \u001b[0m 5.273 \u001b[0m | \u001b[0m 37.41 \u001b[0m | \u001b[0m 17.01 \u001b[0m | \u001b[0m 15.81 \u001b[0m | \u001b[0m 0.08871 \u001b[0m | \u001b[0m 74.67 \u001b[0m | \u001b[0m 54.97 \u001b[0m | \u001b[0m 0.6271 \u001b[0m | \u001b[0m 0.02566 \u001b[0m | \u001b[0m 1.866 \u001b[0m |\n",
"| \u001b[0m 10 \u001b[0m | \u001b[0m-0.551 \u001b[0m | \u001b[0m 0.8454 \u001b[0m | \u001b[0m 0.9973 \u001b[0m | \u001b[0m 21.37 \u001b[0m | \u001b[0m 9.091 \u001b[0m | \u001b[0m 46.7 \u001b[0m | \u001b[0m 20.9 \u001b[0m | \u001b[0m 0.007534\u001b[0m | \u001b[0m 152.3 \u001b[0m | \u001b[0m 46.46 \u001b[0m | \u001b[0m 0.9238 \u001b[0m | \u001b[0m 0.7144 \u001b[0m | \u001b[0m 0.3361 \u001b[0m |\n",
"| \u001b[0m 11 \u001b[0m | \u001b[0m-1.059 \u001b[0m | \u001b[0m 0.5 \u001b[0m | \u001b[0m 1.0 \u001b[0m | \u001b[0m 100.0 \u001b[0m | \u001b[0m 1.0 \u001b[0m | \u001b[0m 50.0 \u001b[0m | \u001b[0m 30.0 \u001b[0m | \u001b[0m 0.001 \u001b[0m | \u001b[0m 11.92 \u001b[0m | \u001b[0m 5.0 \u001b[0m | \u001b[0m 1.0 \u001b[0m | \u001b[0m 0.01 \u001b[0m | \u001b[0m 2.0 \u001b[0m |\n",
"=========================================================================================================================================================================\n",
"running time 0:00:08.129287\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "o3mxAtKuIHO0"
},
"source": [
"**Introducing the atomic properties**\n",
"\n",
"All were found in the standard text book.\n",
"e.g., valence electron concentration(VEC)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "3dschQ9eKwNY"
},
"source": [
"def atomic_properties(new_comps):\n",
" df_test = new_comps.copy()\n",
" df_test['VEC'] = 8*df_test['Fe'] + 10*df_test['Ni'] + 9*df_test['Co'] + 6*df_test['Cr'] + 5*df_test['V'] + 11*df_test['Cu']\n",
" df_test['AR1'] = 140*df_test['Fe'] + 135*df_test['Ni'] + 135*df_test['Co'] + 140*df_test['Cr'] + 135*df_test['V'] + 135*df_test['Cu']\n",
" df_test['AR2'] = 124*df_test['Fe'] + 125*df_test['Ni'] + 125*df_test['Co'] + 125*df_test['Cr'] + 132*df_test['V'] + 128*df_test['Cu']\n",
" df_test['PE'] = 1.83*df_test['Fe'] + 1.91*df_test['Ni'] + 1.88*df_test['Co'] + 1.66*df_test['Cr'] + 1.63*df_test['V'] + 1.9*df_test['Cu']\n",
" df_test['Density'] = 7874*df_test['Fe'] + 8908*df_test['Ni'] + 8900*df_test['Co'] + 7140*df_test['Cr'] + 6110*df_test['V'] + 8920*df_test['Cu']\n",
" df_test['TC'] = 80*df_test['Fe'] + 91*df_test['Ni'] + 100*df_test['Co'] + 94*df_test['Cr'] + 30.7*df_test['V'] + 400*df_test['Cu']\n",
" df_test['MP'] = 1181*df_test['Fe'] + 1728*df_test['Ni'] + 1768*df_test['Co'] + 2180*df_test['Cr'] + 2183*df_test['V'] + 1357.77*df_test['Cu']\n",
" df_test['FI'] = 762.47*df_test['Fe'] + 737.14*df_test['Ni'] + 760.4*df_test['Co'] + 652.87*df_test['Cr'] + 650.91*df_test['V'] + 745.78*df_test['Cu']\n",
" df_test['SI'] = 1562.98*df_test['Fe'] + 1753.03*df_test['Ni'] + 1648.39*df_test['Co'] + 1590.69*df_test['Cr'] + 1412*df_test['V'] + 1957.92*df_test['Cu']\n",
" df_test['TI'] = 2957.4*df_test['Fe'] + 3395*df_test['Ni'] + 3232.3*df_test['Co'] + 2987.1*df_test['Cr'] + 2828.09*df_test['V'] + 3554.6*df_test['Cu']\n",
" df_test['M'] = 2.22*df_test['Fe'] + 0.6*df_test['Ni'] + 1.72*df_test['Co'] + -0.6*df_test['Cr'] + 0.0*df_test['V'] + 0.0*df_test['Cu']\n",
" return df_test"
],
"execution_count": 39,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "bJAo_7g4L5BW"
},
"source": [
"WAE_comps=pd.read_csv('comps_WAE.csv')"
],
"execution_count": 40,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"id": "WP4-WdrdMCr1",
"outputId": "ed2a4046-4df0-4bda-ba1d-00d6e0fc2256"
},
"source": [
"WAE_comps.head()"
],
"execution_count": 41,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Fe | \n",
" Ni | \n",
" Co | \n",
" Cr | \n",
" V | \n",
" Cu | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0.621771 | \n",
" 0.278061 | \n",
" 0.066139 | \n",
" 0.033976 | \n",
" 0.000051 | \n",
" 0.000002 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.290811 | \n",
" 0.193655 | \n",
" 0.426399 | \n",
" 0.000012 | \n",
" 0.089111 | \n",
" 0.000012 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.356562 | \n",
" 0.032219 | \n",
" 0.479116 | \n",
" 0.132074 | \n",
" 0.000014 | \n",
" 0.000015 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.232804 | \n",
" 0.026366 | \n",
" 0.633758 | \n",
" 0.107050 | \n",
" 0.000015 | \n",
" 0.000007 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.431049 | \n",
" 0.083583 | \n",
" 0.353330 | \n",
" 0.132014 | \n",
" 0.000015 | \n",
" 0.000009 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Fe Ni Co Cr V Cu\n",
"0 0.621771 0.278061 0.066139 0.033976 0.000051 0.000002\n",
"1 0.290811 0.193655 0.426399 0.000012 0.089111 0.000012\n",
"2 0.356562 0.032219 0.479116 0.132074 0.000014 0.000015\n",
"3 0.232804 0.026366 0.633758 0.107050 0.000015 0.000007\n",
"4 0.431049 0.083583 0.353330 0.132014 0.000015 0.000009"
]
},
"metadata": {},
"execution_count": 41
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "picNF-1gLuPN"
},
"source": [
"WAE_comps=atomic_properties(WAE_comps)"
],
"execution_count": 42,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"id": "SzEg5zz0MdPu",
"outputId": "2cd2672b-1b0d-4ac6-b680-c2baa8971cb8"
},
"source": [
"WAE_comps.head()"
],
"execution_count": 43,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Fe | \n",
" Ni | \n",
" Co | \n",
" Cr | \n",
" V | \n",
" Cu | \n",
" VEC | \n",
" AR1 | \n",
" AR2 | \n",
" PE | \n",
" Density | \n",
" TC | \n",
" MP | \n",
" FI | \n",
" SI | \n",
" TI | \n",
" M | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0.621771 | \n",
" 0.278061 | \n",
" 0.066139 | \n",
" 0.033976 | \n",
" 0.000051 | \n",
" 0.000002 | \n",
" 8.554161 | \n",
" 138.278730 | \n",
" 124.378586 | \n",
" 1.849766 | \n",
" 8204.346680 | \n",
" 84.855103 | \n",
" 1405.916691 | \n",
" 751.560250 | \n",
" 1622.408826 | \n",
" 3098.264551 | \n",
" 1.640541 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.290811 | \n",
" 0.193655 | \n",
" 0.426399 | \n",
" 0.000012 | \n",
" 0.089111 | \n",
" 0.000012 | \n",
" 8.546386 | \n",
" 136.454110 | \n",
" 125.333000 | \n",
" 1.848989 | \n",
" 8354.534968 | \n",
" 86.268967 | \n",
" 1626.528722 | \n",
" 746.739280 | \n",
" 1622.753743 | \n",
" 3147.844701 | \n",
" 1.495193 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.356562 | \n",
" 0.032219 | \n",
" 0.479116 | \n",
" 0.132074 | \n",
" 0.000014 | \n",
" 0.000015 | \n",
" 8.279407 | \n",
" 137.443177 | \n",
" 124.643576 | \n",
" 1.834079 | \n",
" 8301.935493 | \n",
" 91.789769 | \n",
" 1611.823904 | \n",
" 746.184940 | \n",
" 1613.687947 | \n",
" 3107.137533 | \n",
" 1.555734 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.232804 | \n",
" 0.026366 | \n",
" 0.633758 | \n",
" 0.107050 | \n",
" 0.000015 | \n",
" 0.000007 | \n",
" 8.472368 | \n",
" 136.699274 | \n",
" 124.767323 | \n",
" 1.845596 | \n",
" 8472.905377 | \n",
" 94.465468 | \n",
" 1674.396917 | \n",
" 748.755867 | \n",
" 1625.087152 | \n",
" 3146.339692 | \n",
" 1.558479 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.431049 | \n",
" 0.083583 | \n",
" 0.353330 | \n",
" 0.132014 | \n",
" 0.000015 | \n",
" 0.000009 | \n",
" 8.256451 | \n",
" 137.815327 | \n",
" 124.569091 | \n",
" 1.831909 | \n",
" 8226.027066 | \n",
" 89.836372 | \n",
" 1566.023427 | \n",
" 745.150945 | \n",
" 1612.702447 | \n",
" 3095.030896 | \n",
" 1.535598 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Fe Ni Co ... SI TI M\n",
"0 0.621771 0.278061 0.066139 ... 1622.408826 3098.264551 1.640541\n",
"1 0.290811 0.193655 0.426399 ... 1622.753743 3147.844701 1.495193\n",
"2 0.356562 0.032219 0.479116 ... 1613.687947 3107.137533 1.555734\n",
"3 0.232804 0.026366 0.633758 ... 1625.087152 3146.339692 1.558479\n",
"4 0.431049 0.083583 0.353330 ... 1612.702447 3095.030896 1.535598\n",
"\n",
"[5 rows x 17 columns]"
]
},
"metadata": {},
"execution_count": 43
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TRInGf1JImc-"
},
"source": [
"We want the atomic properties to be normalized (so that it can be understood by neural networks)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Sg4m9Q25MZqk"
},
"source": [
"composition= WAE_comps[['Fe','Ni','Co','Cr','V','Cu']]\n",
"min_max_scaler = preprocessing.MinMaxScaler()\n",
"normalized_atomic_properties = min_max_scaler.fit_transform(WAE_comps[['VEC','AR1','AR2','PE','Density',\n",
" 'TC','MP','FI','SI','TI','M']])\n",
"WAE_x = pd.concat([composition,pd.DataFrame(normalized_atomic_properties)],axis=1)"
],
"execution_count": 44,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"id": "29QZZChOM1Y5",
"outputId": "89e28ac7-b3d2-400b-80b7-0344974bd2c2"
},
"source": [
"WAE_x.head()"
],
"execution_count": 45,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Fe | \n",
" Ni | \n",
" Co | \n",
" Cr | \n",
" V | \n",
" Cu | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
" 4 | \n",
" 5 | \n",
" 6 | \n",
" 7 | \n",
" 8 | \n",
" 9 | \n",
" 10 | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0.621771 | \n",
" 0.278061 | \n",
" 0.066139 | \n",
" 0.033976 | \n",
" 0.000051 | \n",
" 0.000002 | \n",
" 0.267221 | \n",
" 0.670098 | \n",
" 0.254303 | \n",
" 0.342567 | \n",
" 0.305292 | \n",
" 0.213701 | \n",
" 0.324892 | \n",
" 0.631284 | \n",
" 0.304340 | \n",
" 0.311627 | \n",
" 0.647061 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.290811 | \n",
" 0.193655 | \n",
" 0.426399 | \n",
" 0.000012 | \n",
" 0.089111 | \n",
" 0.000012 | \n",
" 0.263212 | \n",
" 0.296670 | \n",
" 0.937977 | \n",
" 0.333972 | \n",
" 0.454033 | \n",
" 0.258131 | \n",
" 0.661898 | \n",
" 0.464790 | \n",
" 0.306213 | \n",
" 0.428373 | \n",
" 0.554423 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.356562 | \n",
" 0.032219 | \n",
" 0.479116 | \n",
" 0.132074 | \n",
" 0.000014 | \n",
" 0.000015 | \n",
" 0.125557 | \n",
" 0.499093 | \n",
" 0.444123 | \n",
" 0.169010 | \n",
" 0.401940 | \n",
" 0.431623 | \n",
" 0.639435 | \n",
" 0.445645 | \n",
" 0.256987 | \n",
" 0.332520 | \n",
" 0.593009 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.232804 | \n",
" 0.026366 | \n",
" 0.633758 | \n",
" 0.107050 | \n",
" 0.000015 | \n",
" 0.000007 | \n",
" 0.225048 | \n",
" 0.346845 | \n",
" 0.532766 | \n",
" 0.296438 | \n",
" 0.571263 | \n",
" 0.515706 | \n",
" 0.735021 | \n",
" 0.534433 | \n",
" 0.318883 | \n",
" 0.424829 | \n",
" 0.594758 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.431049 | \n",
" 0.083583 | \n",
" 0.353330 | \n",
" 0.132014 | \n",
" 0.000015 | \n",
" 0.000009 | \n",
" 0.113720 | \n",
" 0.575257 | \n",
" 0.390767 | \n",
" 0.144998 | \n",
" 0.326763 | \n",
" 0.370237 | \n",
" 0.569471 | \n",
" 0.409936 | \n",
" 0.251636 | \n",
" 0.304013 | \n",
" 0.580175 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Fe Ni Co ... 8 9 10\n",
"0 0.621771 0.278061 0.066139 ... 0.304340 0.311627 0.647061\n",
"1 0.290811 0.193655 0.426399 ... 0.306213 0.428373 0.554423\n",
"2 0.356562 0.032219 0.479116 ... 0.256987 0.332520 0.593009\n",
"3 0.232804 0.026366 0.633758 ... 0.318883 0.424829 0.594758\n",
"4 0.431049 0.083583 0.353330 ... 0.251636 0.304013 0.580175\n",
"\n",
"[5 rows x 17 columns]"
]
},
"metadata": {},
"execution_count": 45
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "sYiCzAquIyVv"
},
"source": [
"**The final ensemble model**\n",
"\n",
"the final ensembles combine 4 GBDT and 4 NN to predict TEC of the WAE-generated compositions."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hvhd70hpK4_J",
"outputId": "9489587c-59f5-4fb5-c666-034123835022"
},
"source": [
"def Tree(n,j, WAE_x):\n",
" target = pd.read_excel('Invar_inference_GBDT.xlsx')\n",
" colsample_bytree = target.at[n,'colsample_bytree']\n",
" learning_rate = target.at[n,'learning_rate']\n",
" max_bin = target.at[n,'max_bin']\n",
" max_depth = target.at[n,'max_depth']\n",
" max_bin = target.at[n,'max_bin']\n",
" min_child_samples = target.at[n,'min_child_samples']\n",
" min_child_weight = target.at[n,'min_child_weight']\n",
" min_split_gain= target.at[n,'min_split_gain']\n",
" n_estimators = target.at[n,'n_estimators']\n",
" num_leaves = target.at[n,'num_leaves']\n",
" reg_alpha = target.at[n,'reg_alpha']\n",
" reg_lambda = target.at[n,'reg_lambda']\n",
" subsample = target.at[n,'subsample']\n",
" params = {\n",
" \"num_leaves\": int(round(num_leaves)),\n",
" 'min_child_samples':int(round(min_child_samples)),\n",
" 'learning_rate': learning_rate,\n",
" 'n_estimators': int(round(n_estimators)),\n",
" 'max_bin': int(round(max_bin)),\n",
" 'colsample_bytree': max(min(colsample_bytree, 1), 0),\n",
" 'subsample': max(min(subsample, 1), 0),\n",
" 'max_depth': int(round(max_depth)),\n",
" 'reg_lambda': max(reg_lambda, 0),\n",
" 'reg_alpha': max(reg_alpha, 0),\n",
" 'min_split_gain': min_split_gain,\n",
" 'min_child_weight': min_child_weight,\n",
" 'objective': 'regression',\n",
" 'verbose': -1\n",
" }\n",
" data=pd.read_csv('data_base.csv') \n",
" train_features, test_features, train_labels, test_labels = normalizing_data(data,seed=j)\n",
" train_features, test_features = train_features.cpu().data.numpy(),test_features.cpu().data.numpy()\n",
" train_labels, test_labels = train_labels.cpu().data.numpy(), test_labels.cpu().data.numpy()\n",
" train_labels, test_labels = train_labels.reshape(-1), test_labels.reshape(-1) \n",
" model = LGBMRegressor(**params)\n",
" model.fit(train_features, train_labels)\n",
" preds = model.predict(WAE_x)\n",
" return preds\n",
"\n",
"class Net(nn.Module): \n",
" def __init__(self, n_feature, n_hidden, n_output, w):\n",
" super(Net, self).__init__() \n",
" # self.BN=torch.nn.BatchNorm1d(n_hidden)\n",
" self.hidden1 = torch.nn.Linear(n_feature, n_hidden) \n",
" nn.init.kaiming_normal_(self.hidden1.weight)\n",
" \n",
" self.hiddens = nn.ModuleList ([nn.Linear(n_hidden, n_hidden) for i in range(w)]) \n",
" for m in self.hiddens:\n",
" nn.init.kaiming_normal_(m.weight) \n",
" \n",
" self.predict = torch.nn.Linear(n_hidden, n_output) \n",
" nn.init.kaiming_normal_(self.predict.weight)\n",
" \n",
" def forward(self, x): \n",
" x = self.hidden1(x)\n",
" # x = self.BN(x)\n",
" # x = self.Dropout (x)\n",
" x = F.relu(x) \n",
" \n",
" for m in self.hiddens:\n",
" x = m(x)\n",
" # x = self.BN(x)\n",
" x = F.relu(x) \n",
" \n",
" x = self.predict(x)\n",
" # x = self.BN_3(x)\n",
" # x = self.Dropout (x)\n",
" return x\n",
" \n",
"def NN(n,seed, WAE_x):\n",
" target = pd.read_excel('Invar_inference_NN.xlsx')\n",
" batch_size = target.at[n,'batch_size']\n",
" lr = target.at[n,'lr']\n",
" module__n_hidden = target.at[n,'module__n_hidden']\n",
" module__w = target.at[n,'module__w']\n",
" module__n_hidden = int(module__n_hidden)\n",
" module__w = int(module__w)\n",
" batch_size = int(batch_size)\n",
" net = Net(n_feature=17, n_hidden=module__n_hidden, n_output=1, w = module__w)\n",
" print(net)\n",
" #load模型\n",
" net.load_state_dict(torch.load('NN_rank_{}-seed_{}.pt'.format(n,seed)))\n",
" net.eval()\n",
" Comp_NN = torch.FloatTensor(WAE_x.values)\n",
" preds = net(Comp_NN)\n",
" preds=preds.data.numpy()\n",
" return preds\n",
"\n",
"# \n",
"r=0\n",
"Comp_total = pd.DataFrame()\n",
"for i in range(1,3):\n",
" for j in range(40,42):\n",
" #Tree\n",
" print ('prediction_Tree_{}'.format(r))\n",
" prediction = Tree(i,j,WAE_x)\n",
" Comp_total['pred_Z_Tree_{}'.format(r)] = prediction\n",
" #NN\n",
" print ('prediction_NN_{}'.format(r))\n",
" prediction = NN(i,j,WAE_x)\n",
" Comp_total['pred_Z_NN_{}'.format(r)] = prediction \n",
" r += 1"
],
"execution_count": 46,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"prediction_Tree_0\n",
"prediction_NN_0\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=110, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=110, out_features=110, bias=True)\n",
" (1): Linear(in_features=110, out_features=110, bias=True)\n",
" (2): Linear(in_features=110, out_features=110, bias=True)\n",
" (3): Linear(in_features=110, out_features=110, bias=True)\n",
" )\n",
" (predict): Linear(in_features=110, out_features=1, bias=True)\n",
")\n",
"prediction_Tree_1\n",
"prediction_NN_1\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=110, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=110, out_features=110, bias=True)\n",
" (1): Linear(in_features=110, out_features=110, bias=True)\n",
" (2): Linear(in_features=110, out_features=110, bias=True)\n",
" (3): Linear(in_features=110, out_features=110, bias=True)\n",
" )\n",
" (predict): Linear(in_features=110, out_features=1, bias=True)\n",
")\n",
"prediction_Tree_2\n",
"prediction_NN_2\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=229, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=229, out_features=229, bias=True)\n",
" (1): Linear(in_features=229, out_features=229, bias=True)\n",
" (2): Linear(in_features=229, out_features=229, bias=True)\n",
" (3): Linear(in_features=229, out_features=229, bias=True)\n",
" (4): Linear(in_features=229, out_features=229, bias=True)\n",
" (5): Linear(in_features=229, out_features=229, bias=True)\n",
" (6): Linear(in_features=229, out_features=229, bias=True)\n",
" )\n",
" (predict): Linear(in_features=229, out_features=1, bias=True)\n",
")\n",
"prediction_Tree_3\n",
"prediction_NN_3\n",
"Net(\n",
" (hidden1): Linear(in_features=17, out_features=229, bias=True)\n",
" (hiddens): ModuleList(\n",
" (0): Linear(in_features=229, out_features=229, bias=True)\n",
" (1): Linear(in_features=229, out_features=229, bias=True)\n",
" (2): Linear(in_features=229, out_features=229, bias=True)\n",
" (3): Linear(in_features=229, out_features=229, bias=True)\n",
" (4): Linear(in_features=229, out_features=229, bias=True)\n",
" (5): Linear(in_features=229, out_features=229, bias=True)\n",
" (6): Linear(in_features=229, out_features=229, bias=True)\n",
" )\n",
" (predict): Linear(in_features=229, out_features=1, bias=True)\n",
")\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-vPQl2BV2D6V"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "R6hTpb8SJMFV"
},
"source": [
"#Rank-based exploration-exploitation strategy\n",
"\n",
"In this case, we emphasize on exploitation - more weights on mean prediction\n",
"(0.8) and less on std prediction(0.2). then we use the top - 6 compositions for the next stage computation (DFT-involved)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "e5oNynw2PeWQ"
},
"source": [
"prediciton_mean = Comp_total.mean(axis=1)\n",
"prediciton_std = Comp_total.std(axis=1)\n",
"WAE_x['prediction_mean'] = prediciton_mean\n",
"WAE_x['prediction_std'] = prediciton_std\n",
"WAE_x['rank_score'] =prediciton_std*0.2+prediciton_mean*0.8"
],
"execution_count": 47,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "PRyJ0mEvQJJv"
},
"source": [
"WAE = WAE_x[['Fe','Ni','Co','Cr','V','Cu','prediction_mean', 'prediction_std','rank_score']]"
],
"execution_count": 48,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 419
},
"id": "SBYAl3jkQ2Uu",
"outputId": "9c767f8a-dfde-4fe7-bf81-4e6351effcb5"
},
"source": [
"WAE.sort_values(by=['rank_score'])"
],
"execution_count": 49,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Fe | \n",
" Ni | \n",
" Co | \n",
" Cr | \n",
" V | \n",
" Cu | \n",
" prediction_mean | \n",
" prediction_std | \n",
" rank_score | \n",
"
\n",
" \n",
" \n",
" \n",
" 603 | \n",
" 0.654393 | \n",
" 0.341160 | \n",
" 0.001058 | \n",
" 0.000353 | \n",
" 0.003026 | \n",
" 0.000010 | \n",
" 0.627258 | \n",
" 1.422438 | \n",
" 0.786294 | \n",
"
\n",
" \n",
" 757 | \n",
" 0.663680 | \n",
" 0.335000 | \n",
" 0.000301 | \n",
" 0.000415 | \n",
" 0.000567 | \n",
" 0.000037 | \n",
" 0.692613 | \n",
" 1.222421 | \n",
" 0.798574 | \n",
"
\n",
" \n",
" 658 | \n",
" 0.664676 | \n",
" 0.333256 | \n",
" 0.000477 | \n",
" 0.000665 | \n",
" 0.000905 | \n",
" 0.000021 | \n",
" 0.695272 | \n",
" 1.223406 | \n",
" 0.800899 | \n",
"
\n",
" \n",
" 610 | \n",
" 0.663638 | \n",
" 0.334157 | \n",
" 0.000523 | \n",
" 0.000681 | \n",
" 0.000983 | \n",
" 0.000019 | \n",
" 0.695637 | \n",
" 1.224201 | \n",
" 0.801350 | \n",
"
\n",
" \n",
" 809 | \n",
" 0.662541 | \n",
" 0.334845 | \n",
" 0.000706 | \n",
" 0.000627 | \n",
" 0.001268 | \n",
" 0.000013 | \n",
" 0.696887 | \n",
" 1.225691 | \n",
" 0.802648 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 874 | \n",
" 0.479208 | \n",
" 0.318671 | \n",
" 0.075633 | \n",
" 0.000024 | \n",
" 0.126453 | \n",
" 0.000010 | \n",
" 17.461110 | \n",
" 2.301345 | \n",
" 14.429157 | \n",
"
\n",
" \n",
" 1083 | \n",
" 0.558625 | \n",
" 0.320308 | \n",
" 0.021384 | \n",
" 0.000034 | \n",
" 0.099639 | \n",
" 0.000010 | \n",
" 17.172029 | \n",
" 3.918994 | \n",
" 14.521422 | \n",
"
\n",
" \n",
" 1061 | \n",
" 0.493232 | \n",
" 0.317133 | \n",
" 0.059200 | \n",
" 0.000025 | \n",
" 0.130399 | \n",
" 0.000010 | \n",
" 18.031670 | \n",
" 2.532749 | \n",
" 14.931886 | \n",
"
\n",
" \n",
" 309 | \n",
" 0.522177 | \n",
" 0.311523 | \n",
" 0.047142 | \n",
" 0.000030 | \n",
" 0.119119 | \n",
" 0.000009 | \n",
" 18.079628 | \n",
" 3.046448 | \n",
" 15.072992 | \n",
"
\n",
" \n",
" 20 | \n",
" 0.509453 | \n",
" 0.318668 | \n",
" 0.043539 | \n",
" 0.000026 | \n",
" 0.128302 | \n",
" 0.000011 | \n",
" 18.353016 | \n",
" 2.920211 | \n",
" 15.266455 | \n",
"
\n",
" \n",
"
\n",
"
1129 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Fe Ni Co ... prediction_mean prediction_std rank_score\n",
"603 0.654393 0.341160 0.001058 ... 0.627258 1.422438 0.786294\n",
"757 0.663680 0.335000 0.000301 ... 0.692613 1.222421 0.798574\n",
"658 0.664676 0.333256 0.000477 ... 0.695272 1.223406 0.800899\n",
"610 0.663638 0.334157 0.000523 ... 0.695637 1.224201 0.801350\n",
"809 0.662541 0.334845 0.000706 ... 0.696887 1.225691 0.802648\n",
"... ... ... ... ... ... ... ...\n",
"874 0.479208 0.318671 0.075633 ... 17.461110 2.301345 14.429157\n",
"1083 0.558625 0.320308 0.021384 ... 17.172029 3.918994 14.521422\n",
"1061 0.493232 0.317133 0.059200 ... 18.031670 2.532749 14.931886\n",
"309 0.522177 0.311523 0.047142 ... 18.079628 3.046448 15.072992\n",
"20 0.509453 0.318668 0.043539 ... 18.353016 2.920211 15.266455\n",
"\n",
"[1129 rows x 9 columns]"
]
},
"metadata": {},
"execution_count": 49
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Z9nTu3ov2E5d"
},
"source": [
"Congrats! you have completed the tutorial!\n",
"\n",
"For more information and complete version of this notebook, please stay tuned to the paper: \n",
"\n",
"'Ziyuan Rao et cl, A universally applicable active-learning framework for functional high-entropy alloy discovery, in preparation, 2021'"
]
}
]
}