Skip to content
Snippets Groups Projects
IntroductionPotentialFitting.ipynb 254 KiB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f2adfe85-18c8-4430-b370-1b4d6f1b05b3",
   "metadata": {},
   "source": [
    "# Interatomic potentials\n",
    "\n",
    "In general interatomic potentials can be written as a sum of functional terms depending on the positions of the atoms in a structure. Then the energy $U$ of the system is\n",
    "\n",
    "$U = \\sum_{i=1}^N U_1(\\vec{r_i}) + \\sum_{i,j=1}^N U_2(\\vec{r_i}, \\vec{r_j}) + \\sum_{i,j,k=1}^N U_2(\\vec{r_i}, \\vec{r_j}, \\vec{r_k}) +...$\n",
    "\n",
    "The one body term only matter when the system is within an external field. Most classic interatomic potentials don't use 4th and higher order body terms, pair potentials only use the 2 body term. As a general rule potentials that include higher order body terms can be more accurate but are slower.\n",
    "\n",
    "There are many different forms for $U_i$, which cover a wide range of different run time and accuracy necessities.\n",
    "\n",
    "Simple pair potentials (f.e Lennard-Jones, Morse, Buckingham) only contain very few parameters, typically less than 10. In many body potentials (f.e. EAM, MEAM, Tersoff) the typical number of parameters is 10-50 and for machine learning potentials the number of parameters can reach several thousands.\n",
    "\n",
    "# Fitting\n",
    "\n",
    "In the fit process the parameters of the chosen functions for $U_i$ are optimized. For this purpose an objective or cost function is defined and minimized. In general the objective function is defined as\n",
    "\n",
    "$\\chi^2 = \\sum_i w_i r_i$\n",
    "\n",
    "where $w_i$ is a weight and $r_i$ is a residual that describes the difference to target values. This residual can be defined in different ways, so it is not possible to simply compare the residual for different fitting processes or codes. A more in depth explanation and some examples can be found on https://atomicrex.org/overview.html#objective-function.\n",
    "\n",
    "The minimization can be done with local or global optimization algorithms.\n",
    "Generally local optimization algorithms should all be able to find the local minimum coming from some initial parameter set, so the \"best\" local algorithm is the one finding the minimum in the shortest time. Typically used local algorithms are f.e. (L)BFGS or Nelder-Mead.\n",
    "Examples for global algorithms are evolutionary algorithms or simulated annealing. For most problems it is impossible to tell a priori which global algorithm will give the best results, so using global algorithms typically involves testing many of them.\n",
    "\n",
    "# EAM potentials\n",
    "\n",
    "EAM potentials are pair functionals. \n",
    "In a generalised form they are equal to Finnis-Sinclair, effective medium theory or glue potentials. Their total energy can be written as\n",
    "\n",
    "$E = \\frac{1}{2}\\sum_{ij}V(r_{ij}) + \\sum_i F(\\rho_i)$\n",
    "\n",
    "with\n",
    "\n",
    "$\\rho_i = \\sum_j \\rho(r_{ij})$\n",
    "\n",
    "The original functions for V, $\\rho$ and F were derived from different theories, but they can be chosen freely.\n",
    "\n",
    "# Fitting code\n",
    "\n",
    "Fitting is done using the pyiron interface to the atomicrex code https://atomicrex.org. It can be used to fit different types of classic interatomic potentials:\n",
    "- pair potentials\n",
    "- EAM\n",
    "- MEAM\n",
    "- Tersoff\n",
    "- ABOP\n",
    "- ADP (in development)\n",
    "\n",
    "It allows to fit different properties (energies, forces, lattice constants, elastic properties, etc.) and implements the LBFGS minimizer. Additionally it offers an interface to the nlopt library which implements several global and local optimization algorithms and the ability to apply arbitrary constraints to parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f4075857-362a-400f-b043-2fc5ad54a407",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyiron import Project, ase_to_pyiron\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d70cf5ae-8e25-444c-b24f-2d676ef8d2f4",
   "metadata": {},
   "outputs": [],
   "source": [
    "pr = Project(\".\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6d83afb5-b99d-4081-9883-ce67c3557f5d",
   "metadata": {},
   "source": [
    "### Get the training data\n",
    "Load a job that contains structures with energies and forces from DFT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ea3fcb75-1d69-4f9e-901d-ba001c6dab2e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The job TrainData was saved and received the ID: 738790\n"
     ]
    }
   ],
   "source": [
    "tc = pr.create.job.TrainingContainer(\"TrainData\", delete_existing_job=True)\n",
    "df = pd.read_pickle(\"Al_3PreFinal.pckl.gz\")\n",
    "for r in df.itertuples():\n",
    "    s = ase_to_pyiron(r.ase_atoms)\n",
    "    if r.energy_corrected > 0:\n",
    "        continue\n",
    "    vol = s.get_volume()\n",
    "    natoms = len(s)\n",
    "    if vol/natoms > 120:\n",
    "        continue\n",
    "    tc.add_structure(structure=s, energy=r.energy_corrected, forces=r.forces, name=f\"ID{r.Index}\")\n",
    "tc.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "57cc1f71-1255-4d15-9c31-e598098fe1e4",
   "metadata": {},
   "source": [
    "### Have a look at the training data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "25b99c5a-e8a2-42de-aaf0-2794d675385b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>V</th>\n",
       "      <th>E</th>\n",
       "      <th>space_group</th>\n",
       "      <th>crystal_system</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16.484415</td>\n",
       "      <td>-3.482751</td>\n",
       "      <td>225</td>\n",
       "      <td>cubic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14.835973</td>\n",
       "      <td>-3.433909</td>\n",
       "      <td>225</td>\n",
       "      <td>cubic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>15.165661</td>\n",
       "      <td>-3.452735</td>\n",
       "      <td>225</td>\n",
       "      <td>cubic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>15.495350</td>\n",
       "      <td>-3.466526</td>\n",
       "      <td>225</td>\n",
       "      <td>cubic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15.825038</td>\n",
       "      <td>-3.475815</td>\n",
       "      <td>225</td>\n",
       "      <td>cubic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>303</th>\n",
       "      <td>28.793489</td>\n",
       "      <td>-2.746083</td>\n",
       "      <td>1</td>\n",
       "      <td>triclinic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>304</th>\n",
       "      <td>29.358067</td>\n",
       "      <td>-2.708848</td>\n",
       "      <td>1</td>\n",
       "      <td>triclinic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>305</th>\n",
       "      <td>29.922645</td>\n",
       "      <td>-2.672118</td>\n",
       "      <td>1</td>\n",
       "      <td>triclinic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>306</th>\n",
       "      <td>30.487223</td>\n",
       "      <td>-2.635916</td>\n",
       "      <td>1</td>\n",
       "      <td>triclinic</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>307</th>\n",
       "      <td>31.051801</td>\n",
       "      <td>-2.600260</td>\n",
       "      <td>1</td>\n",
       "      <td>triclinic</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>308 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             V         E  space_group crystal_system\n",
       "0    16.484415 -3.482751          225          cubic\n",
       "1    14.835973 -3.433909          225          cubic\n",
       "2    15.165661 -3.452735          225          cubic\n",
       "3    15.495350 -3.466526          225          cubic\n",
       "4    15.825038 -3.475815          225          cubic\n",
       "..         ...       ...          ...            ...\n",
       "303  28.793489 -2.746083            1      triclinic\n",
       "304  29.358067 -2.708848            1      triclinic\n",
       "305  29.922645 -2.672118            1      triclinic\n",
       "306  30.487223 -2.635916            1      triclinic\n",
       "307  31.051801 -2.600260            1      triclinic\n",
       "\n",
       "[308 rows x 4 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAENCAYAAAD34uk0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA9iklEQVR4nO3deXxU5dXA8d8hBBKQPSIJCGilCCJ7BRdeQCpU6oIgEtQKKIIbqFgQXBBbFSqKVBEwUkFfFBAFXFBBEJTa1r4sImoEUVkSQNkSEMKWnPePe2dIhpnJTDLJTML5fj7zubn7uUHn5LnPvecRVcUYY4wJR4VoB2CMMabsseRhjDEmbJY8jDHGhM2ShzHGmLBZ8jDGGBM2Sx7GGGPCVjHaAZSGpKQkbdy4cbTDMMaYMmXNmjV7VPVMf+tOi+TRuHFjVq9eHe0wjDGmTBGRrYHW2W0rY4wxYbPkYYwxJmxRTx4ikiQi80Rkpoi8KyJPiEhcgG3V5zOltOM1xhgTG30e04CuqpokIm2AtUAGMN3Ptu8Dj+eb/6WoJz1+/DgZGRkcOXKkqIcwJSwhIYEGDRoQHx8f7VCMMT6imjzcFkYvYJO7KNOd3oD/5FHH3b4p8AMwsajnzsjIoFq1ajRu3BgRKephTAlRVfbu3UtGRgbnnHNOtMMxpuz56k1Y/hfIzoAaDaDbWGh5Q8QOXyrJQ0QygPp+Vo1xYzjuznumyQEO9aSqLhaRZOBHoAvQMcA5hwBDABo2bHjK+iNHjljiiGEiQp06ddi9e3e0QzGmzFi0LpOJSzbS/sDHTKj0DxI56qzI3g7vDXd+jlACKa0+j47AOX4+04ATgOe+hGe6099BVHWxO90JbAE6iEjtANumqWp7VW1/5pl+H1O2xBHj7N/HmNAtWpfJmAUbyMzKYWTFN08mDo/jOU5LJEJKJXmoaoaqbvHzyQYWAfXcTVPc6ZsAIjJSRKa6P18sIne6P1fGaZ3sBPaXxjVE29q1a2nRogUiwpYtW05ZP3LkSJo0acKhQ4dKPzhjTNRNXLKRnOO5AKTIHv8bZWdE7Hyx0GF+F/CiiMzE6dN4EnjZXdcWaO72jWQB14nIuUAb4GtghJbSaFae5uCOrBxSaiYyskdTerXxdyeuZLRt25b27dvzzTff+F3fqlUrsrKyqFy5cqnFZIyJHTuyck7+rEk08JdAajSI2Pmi/qiuqu5W1RtUdZCqXqOqj6hqrruuv6q2UtVcVU1X1e6qOlJVf6+ql6nqf0sjxvzNQQUys3IYs2ADi9ZlFrpvIHl5eYwZM4aWLVsyevRo+vbty4svvoiI0KVLF/bt20fHjh0REVauXFlg36effpr27dvTunVr1q1bx/r163nqqaeYMWMGGRnOXxbPPfcczZs354EHHuBPf/oTr7zySjF+A8aYWJdSM9H789MnbuCwViq4QXyi02keIVFPHmVB/uagR87xXCYu2VjkY86cOZMJEyZw6623MmHCBJ566qkCHfu1a9fmD3/4g999+/fvz8cff8xXX33F7bffTqtWrbjooou865cvX86IESPo3r07zz77LFOm2OswxpR3I3s0JTHeeUXu3bzLGH18MJmahCJQ42y4+vmy97RVWZe/ORjK8lCsW7cOgPr1nVtfTZo0oUmTJiHt26BBA2rVqkWVKlX49ttvCz12jRo1uPXWW4scqzEm9nluo3tur6+pfgX/1+OeEru9bskjBCk1E8n0kyjyNxPD1aZNGwDvbab169ezbds2qlev7n1xMdBjqvv27aNevXrk5OTQtm3bQo+dmZnJ0qVLGTRoUJHjNcbEvl5t6pdaX6wljxCM7NGUMQs2FLh1lRgfx8geTYt8zEGDBrF582ZmzpzJjh07OHDgAE888QQPPfQQEydO5KmnnmLbtm0ApKWlUb16dW9l4Dlz5rBlyxYuvPBC0tLS2LBhg3fdiy++yMSJE3nuuedIS0vj/vvv59ChQ4wcObIYvwFjjClISulhpahq3769+pZkT09Pp1mzZiEfI9pPW52uwv13MsZEjoisUdX2/tZZyyNEpdkcNMaYWGdPWxljjAmbJQ9jjDFhs+RhjDEmbNbnYYwpl+whl5JlycMYU+54Sgp5Hq/3lBQCLIFEiN22ipI5c+ZQo0YNGjduHO1QIuahhx5CRBg4cGC0QzGnuZIoKWQKsuQRqq/ehOdawLiazvSrN4t1uP79+1OrVq3IxBYjhgwZEu0QjAFKpqSQKciSRyi+etMZhSt7O6AnR+UqZgIBOHr0KA8++CANGzakc+fOHD58mI8++ojf/e53jBgxgrZt2/Lxxx+zfft2OnXqhIhw2WWXsWzZMpo2bcrChQuZM2cOV111FaNGjaJZs2Y88cQT3uP/7W9/Izk5mVtuuYUePXogInTu3BmAt956i4suuohRo0Zx8cUXM3XqVAAee+wxRIQWLVowcuRIGjRowPXXX4/nhdIuXbpw//33c80119CpUyc2brS/5kxsCVQ6qDglhYwPVS33n3bt2qmvb7/99pRlAU26QPWx6qd+Jl0Q+jH8aNSokVapUkVzcnL0hRdeUEAXLFigVatW1S5duqiqapcuXbRWrVp68OBBzcrK0nPOOUdr1aqlQ4cO1f/7v/9TVdWVK1fqjh07VFX1vvvuU0C/++47Xb9+vQLat29fVVUdPHiwArpixQrdtGmTVqxYUfv376+qqmPGjFFAP/nkE1VVBbRJkyaqqjpq1CgFdO3ataqq+sYbb6iqalZWlgKampqqqqo//fSTAjpgwIBi/V7yC+vfyZRt6+e5/6/VcKbr5xX5UAvXZuj5j3yojR583/s5/5EPdeHajMjFexoAVmuA71XrMA9FoNG3IjAq15lnnklCQgJnnHEGAJs3b+bQoUP89NNP3HHHHcTFxXHuueeSmZlJ06ZNmTRpEtdddx2bNm2ifXunakCVKlUYNWoUcXFxbN68GYBdu3bx888/A3DWWWcBkJKS4j3v+vXrOXHiBHXq1AGcEvDgjFjYtWvXAtsnJjp/rWVnZ3PixAl++uknevXqxXnnnec9lzFFtWhdJl8uTmPU8alUkWPOwmKOue1bYdaetoo8u20VikCjb0VwVC6PihUrUqVKFerVq8f06dNZtmwZgwcP5txzz+XEiRMsWrSIO++8kxUrVvCPf/wDgNtvv52FCxcyY8YMOnXqBDgtSk9NqMxMZ9AqT5VdcEYerFixInv2OKON7d27F4B27doFje/999/n4YcfpmPHjjz11FPecxlTFJ6nogYfm30ycXgUc8ztXm3q8/noy/lpwh/5fPTlljgizJJHKLqNdUbhyq+Yo3LNnz+f/fv3s3//fpYuXcq8efMAWLp0KdOnT+fQoUPcdtttDB8+nLy8PLZt20bv3r05fvw4V155JRUrVmT48OE8//zz9OnTB1Vl7NixpKenAzBt2jQuvPBCJkyYwOeff07fvn29VXpFhCZNmjBnzhy+//57RowYwSeffMKLL75Ily5dSEtLA+CHH35g6dKlLF261HvMdu3a0bRpU+bPn8/MmTMLbOfZb/Xq1fgWojTGH89TUaUx5raJLKuqG6qv3nT+CsrOcFoc3cZGdFSukrJgwQJ69+4NwNChQ5kxYwZbt26lQYPIt5pKglXVLd/OGb0YBf5ZaTgNKvgbc/tsuP/rUo/LOKyqbiS0vKFMJAtfM2fOZOXKlcTFxbF27Vpmz55dZhKHKf88A609feIGJsTPKHjrKsJjbpvIsuRRzr333nvRDsGYgDwDrb17/DI4DqMqvkmK7OVIlXpUufIvZfIPttOFJQ9jTNTkfyrqvazLWFPlCnsqqoyw5GGMiSobaK1ssqetjDHGhM2ShzHGmLBFPXmISGURGSki+0Uk6HPDIpIqIp+IyN9FZKWItCqtOMu7tWvX0qJFC0SELVu2ANChQwf69esX0v79+vWjY8eOJRihMSaWRD15AB2AfwHZwTYSkQuB14GFqnqvu/27IlK55EOExT8upvtb3Wn5aku6v9WdxT8uLo3Tlpq2bdt6y514dO7cmQ4dOoS0f4cOHbwFF40x5V/Uk4eqfqaqn4ewaW+ceD2FlDKBhjjJp0Qt/nEx4/41jp2HdqIoOw/tZNy/xhUrgUycOJGEhASSk5MZNWoUdevWpX///kydOpWLL76Yc889ly+//JKtW7dy9dVX86c//Yk+ffpw8803s2/fPj799FMaNmyIiDBmzBg6d+7Meeedx9dfOy9UBdoP4I033uCCCy7g7rvvZsiQITz55JOnxPf2228zffp0nn/+eSB4pd0VK1YwadIknn76aQDy8vIYM2YMLVu2ZPTo0fTt25cPPvigyL8rY0wMClQxMZIfIANQP5+B+bbZ4oQT8BjT3X16ufN/d+f7Bdh+CLAaWN2wYcNTqkWGU631ivlXaItZLU75XDH/ipCP4U+jRo20WrVqmpOToyNGjFBAZ8+erRs2bFBAhw0bpv/zP/+jFSpU0JycHN24cWOBqrUDBgxQQD///HP99ttvFdDhw4erqgbc77vvvtO4uDi99tprVVU1NzdXJ0+eXOB4P/30kze+Ro0aeeMlSKXdzp07q/vvpzNmzFBAn3vuOVVV3bRpk7777rtF+h1ZVV1joocYqKrbEf+PBQcoaOPXTnca7zPd6WdbVDUNSAOnPEkY5znFrkP+q8YGWh6O2rVrk5CQQLVq1QCoX7++t8LugQMHWLNmDVWqVCEhIcFb+XbNmjUFjpG/Wm52drZ3G3/7bdiwgdzcXOrXdx6NrFChAvfee2/I8fqrtOtr3bp13msBaNKkCU2aNAn5HMaY2Fcqt61UNUNVt/j5/BpsP7cjfao7uwDIA+q58ynANuCLkovcUa9qvbCWR1L79u05fPgwOTk5IVe+DbZfy5YtiYuL81bYPXLkCM8880xEY27Tpg1wsorv+vXr7U13Y8qZqL8kKCKNgXuAWu78M8BcVV0NtAWai0icqm4QkZuBISJyHlATuEZVj5Z0jPe2vZdx/xrHkdwj3mUJcQnc2zb0v9h9earqAixatMhbuXb+/Pnecc1Xr17NrFmzePzxx7n11lvJycnhxhtvZNKkSaxdu9ZbudZTkdezj2e/YcOGnbJf7dq1ee2113jqqae48847ARgwYECB402bNo2LL77YG9+cOXM4ePAg4L/Srojwww8/APDiiy9y5513snnzZmbOnMmOHTs4cOBAgdENjTFln1XVDdHiHxfz97V/Z9ehXdSrWo97297LH8/9Y6RDNT6sqq4x0VOkqroicksY5/hVVReEHVkZ8sdz/2jJwhhjXMFuW83CeZopFFtx+iSMMcacBoIlj2zgyxCPc1bxQzHGhGLRukwbm9tEXbDk8aWqdg3lICKyIkLxGGOC8Iz5nXM8F4DMrBzGLNgAYAnElKpgj+qG/HhMqEnGGFM8njG/88s5nsvEJRujFJE5XQVLHrNEpL+IJJZaNMaYoHZk5YS13JiSEix57MapHbVcRF4TkR4iEvVaWKercePGMWvWLMCpHdWvXz9EhHHjxkU1Lo/ly5dz9tlnIyJ+11vV3chIqen/b7lAy40pKcGSwSBV/ZuqXgI8A1wO/FdEJovI70onvNiR/d57fH95N9KbNef7y7uRXcpvTD/++OPe5FGhQgXvC36xolu3bvzmN78JuN6q7kbGyB5NSYyPK7AsMT6OkT2aRikic7oKmDxUdX2+n79S1Qfdl0X+C3wkIptEZGxpBBlt2e+9x85Hx3Jixw5Q5cSOHex8dGyxEoiq8thjj9G5c2dGjBhBx44d+fDDD2ndujUiQp8+fejXrx+JiYnet7M3b97MfffdR2Zmpvc469at48Ybb6RGjRreMiP+jr1y5UpycnL8Hn///v1+twenpImIcM0113DNNdeQnJzM1KlTGT58OMnJyVx77bXk5eUVuLZRo0bRvHlzOnXqxJYtW6zqbgT1alOf8b0vpH7NRASoXzOR8b0vtM5yU/oCVUzUghVqqwODgI+B40AuTp2p3FD2j/anXbt2p1SLDKda66aul+u3Tc8/5bOp6+UhH8PXK6+8ooC+9NJLqqp68cUXa/Xq1XXRokUKaPfu3VVVdeHChZqTk6OAdu7c2bv/ihUrFNBBgwapqmq7du20evXqQY+dlZXl3S//8adOnVro9oMHD1ZV1dq1a3srAT/wwAMK6Jo1a1T1ZGXdbdu26bp16xTQPn36FFinGl7VXauqa0z0UJSquiLyLjATuAnoCVQGPDe09wNvAbMjl8Zi14mdfgv3BlweCk9l3Dp16gBOdd0DBw6wefNmAC666CIAevXqFfQ4DRs2BOCMM87gwIEDIR3b9/j33HNPodt7KuR6qv8mJCQUqP6bX4MGDbxVd7/99ttTYj7dq+563tNof+BjxlSaz1nsQWo0gG5joeUN0Q7PmJAE6/O4CidBXAckAMdw3iLvDdRT1aGquqrkQ4y+isnJYS0PhWfUvj17nKr0e/fupXr16t4v0bi4gve14+LiUFWys7O9Az4V9di+xw9l+3Ds27fPO/DUBRdccMr607nqruc9jXYHPmZ8/AzqsRtBIXs7vDccvnoz2iEaE5JQqup+htPCeEtVgw4VW17Vvf8+dj46Fj1ysqquJCRQ9/77inzMAQMG8NNPPzF79my++eYb8vLyWLRoES+//DIAS5cupVu3bnTq1AmA1NRUli1bxrBhw7jpppt49dVXvdtdcskl3qq206ZN44477vB77OrVq5OWlnbK8QPF4rt969atvZV233777QKVdXNzc70xTJ8+nU8//ZTLLruMiRMn8umnn1rVXZfnPY1Rld6kihwruPJ4Diz/i7U+TJkQsKquiHwN9FDVTL8blCGRqKqb/d57/PLcZE7s3EnF5GTq3n8fNa6+OtKhGh/lraruOaMXo8CPlW+kgt+nmgXGZZVuUMYEUKSqukBv38QhIjWBZOA7DZR1yqkaV19tycIUW0rNRDKzctihSTQQPwNp1mhQ+kEZUwTBHtXd5PlZRGqIyJs4w8a+DzQRka9F5PTp5TQmAjzvaTx94gYOa6WCK+MTnU5zY8qAUN8Yfx643t1e3MSSCjxdUoEZUx553tNYU/0KxhwfzC7ORBGocTZc/bz1d5gyI9RhaNsD3YB0YB6Aqn4tIlVLKjBjyqtebeq7L/VdDoyPdjjGFEmoLY+jwDZV3YXzgiAi8nvgtyUVmDHGmNgVasvjB2CTiJwAKojIcZzE806JRWaMMSZmhdryuB/4GogH4tzPd+5yU0T5K+VGYrtYMH/+fGrUqEHjxo2jHYoxpgQFfM/jlA2dcuwXAWcDGcD/qeqJEowtYiLxnsemL3bx73d+4Nd9RzmjdmUuvvY3/LZDvWLFJSJ07tzZW4SwuNvFCk/i2LJlS7GPVd7e8zCmLAn2nkfAloeItMw/r6p5qvofVZ2vqv/Onzh8ty1vNn2xixWvf8ev+44C8Ou+o6x4/Ts2fbGryMecMmUKcLJS7qeffkr37t0ZPHgwl1xyCc8++6zf7TIzM/1Wxv3iiy/o3Lkzo0ePpmPHjvTv35+cHGeAoCVLltCkSRN69OjBrbfeiohw/vnnk56ezvr16+natSt33nknV155Jffccw9Hjx5l/vz5JCUlISKMHz+eNm3a0Lp1a3a69bxGjBjBwIEDueOOO2jevDnvvvtukX8XxpgyKFDFROCTQOuKs200PsWtqjtrzD91ytDlp3xmjflnyMfwh3yVci+55BKtWLGiHj9+XMeNG6eA/vOf/zxlO1X1Wxl327Zt3u09lXmnT5+uubm5mpSUpHXr1tW8vDydPXu2AvrYY4+pqmqjRo00OTlZVVWXLFlSYJ2nEm5mZqZ+8MEHCuikSZNUVXXOnDneeFq3bq316tXzzjdq1EgbNWpUrN+Nh1XVNSZ6KEpVXaCLiOQGWZ/f1qKlrrLB0+IIdXlRfPnll4gI99xzDz///DPt2rVj69atXHrppQH3yV8Z9+eff2bu3LlMnjyZ+Ph4AHbt2sWePXvYs2cPLVq0QERISUnx7r9nzx62bt1KixYtAKeaLpysyuuRkpLCpk3OO6PZ2U55MxGhd+/epKSksHfvXnbtKnorzBhT9hT2tJX/MUVPM2fUruw3UZxRu3Kxjpu/Um6lSpU4cuQIzz77LFWrVuXDDz8sUGHXs9327dsL7O8xfvx4pkyZwr///W+ys7OZM2cOqkpSUhJJSUns2rWLvLw8byVbgKSkJBo1alSgmi44A0AFk5WVRWpqKj169GDKlCmsWbOmQFzGmPIv2NNW54Tx6VTUAESksoiMFJH9IhK0915E1OczpajnDcfF1/6GipUK/qoqVqrAxdcGHnY1FKmpqWzcuJFhw4Yxbtw4OnfuzA033MADDzzA8uXLadSo0SnbZWZmFqh0u2qVUxW/R48enHnmmTz77LMsW7bMu95TLbdmzZp06dKFjz/+GMA71vg777xD06ZNGTx4MM888wx33303Y8aMYfny5d5KuPPmzWPevHneY+7du5crr7yS9evX8/e//92bfKZNm8b8+fPZv38/+/fv9+5jjCl/Qn7aqsQCEPkfnBcPXwcaqWrA1o6IvAc8nm/RL6q6rbBzxOrTVqXlnXfe4eqrr6ZChQrMmTOHG2+8kTfeeIP+/ftHO7RC2dNWxkRPUavqlgpV/QxO/iVciDpAL6ApzouLE0ssMB+/7VCvzCQLX+vXr2fevHk0bNiQzz77jIceeoh+/fpFOyxjTBlWKslDRDKA+n5WDVLVWWEc6klVXSwiycCPQBegY4BzDgGGwMmhWk9XY8dapVZjTGSVVsujY4Bz+RnQIDBVXexOd4rIFqCDiNRW1X1+tk0D0sC5bRV2xMYYYwIKKXmIyFBVfamoJ1HVjMK38nvekcA5qnqXiFwMtFbVaSJSGWdQqp3A/qLGZYwxpmhCbXmMF5GGwBuq+k0kAxCRxsA9QC13/hlgrqquBtoCzUUkDsgCrhORc4E2OLW2Rmi0e/yNMeY0FGrymAt8ANwtIk2BJcAcVS32w/2qugX4s/vxXZf/caB0oHtxz2eMMab4Qqqqq6p3qernqnoXcANwKfCTiKwUkaEiUqtEoyynCquW++uvv9KkSRNGjRoV9DgPPfQQIsLAgQMBePvtt0lOTuY///lPoTH8+9//Jjk5mQULFoQTujHmNBdS8hCRp0XkchH5X2AbcJW7bzvgEuANERlRcmFGX/qqFaTdPYhnU68m7e5BpK9aUexjPv7440GTR0JCAl26dKFVq1ZBjzNkyJAC840bN6ZLly7Uq1f4o8X16tWjS5cuVkLdGBOWUMfz+DPwMXATkAj8CxgMJKvqAFW9Eri5ZEKMvvRVK1iaNoWDe3aDKgf37GZp2pRiJZD81XKHDh1KkyZNTqmU+9xzzzFjxgxefvllAHbv3s0NN9xAp06dePTRR+nZsyfbthV8R/LQoUOMGTOGuXPnsnLlStLT0zn//PMREe6++26uuuoqUlJSWLHCif2RRx5h7ty53qq4a9as4dJLL6VPnz6MHj2a66+/vsjXaIwpv0JNHgA7cAZc/q2qdlLVV1T1VwAReQCoVhIBxoJVc1/jxLGCta1OHDvKqrmvFfmY99xzDwDnnXceL730kjdB/Prrr8ybN485c+YwbNiwAvuMGDGC+fPn88ILL/DXv/6V22+/ndzcgrUrq1atyo033uidb9asGampqQBceumlzJ8/n507dzJ58mQAbr/99gL7X3fddXz33Xe8+eabTJgwgUsuuaTI12iMKb9C7TB/H7g2yJNNs4H/jUxIsefgXv+vowRaXhz5K+X6WrduHQD16zvvW1533XVA6IMupaSkkJiYCJysjpvfnj172L59O82bN/cWXRwxolzfjTTGFFGoLY8koIGINPT5nC0ilVT1Z1X9pSQDjaZqdZLCWh6q/NVyv/76a++yQNq0aQPgrYw7b948vv/++2LFkF9SUhJnn302u3bt8rZoxo8ff0rrxhhjQm15dAS2BFiXKyKLgNtU9WAkgoo1nVJvYWnalAK3ripWqkyn1FuKddzU1FSWLVvGsGHDvNVuly5dSrdu3ejUqROvvPIKAD/88AMfffQRkyZN4ujRowwfPpzLLruMvLw8+vbtyyOPPALA6tWr+eyzz7zVbOfNm8eFF17I0qVLvfM///yz95hLly5l9uzZ3vPedNNNLFy4kHvvvZe+ffvym9/8hqZNmwZNaLFi0bpMJi7ZyI6sHFJqJjKyR1N6tfFXEccYEwkhVdUVkbwQjjVZVWPyHkckquqmr1rBqrmvcXDvHqrVSaJT6i0069Q10qEaH6H8Oy1al8mYBRvIOX6yhZQYH8f43hdaAjGmGCJRVXcc8BnwX1U9LCKJOK2R7sAT7nQ8EJPJIxKadepqySJGTVyysUDiAMg5nsvEJRsteRhTQkLt8/gj8E9VPQygqjk4j+teoaqHVHUhYRY5NCZSdmTlhLXcGFN8obY8agGZIvINkIPzrscFQDY4owECVUskQmMKkVIzkUw/iSKlZmIUojHm9BBqy+NxnCeuugBXutM6wGMi0gzYANgg1iYqRvZoSmJ8wU79xPg4RvZoGqWIjCn/Qmp5qOrrIrIOuJ6TpdDfUtVvxRkC8ELgRMmFaUxgnn4Ne9rKmNIT6ngeuTjJ4pSxS90XB4+eupcxpadXm/qWLIwpRaHetlrlL3GISJ0Ix3NaiVRV3ZKwdu1aWrRogYiE/Aa7Meb0EWryeEdEbveTLOZHOqBYdWjdL+yc8F8yRq9i54T/cmhd8V+oj1RV3ZLQtm1b2rf3+3h36Tp2CJ5rAeNqOtOv3ox2RMYYQk8ezwLTgV9EJNfzATqXXGix49C6X8ha8D25Wc7dudyso2Qt+L5YCaQoVXV//PFHLrvsMlq3bs3YsWMREZKSkpg/fz779u3j5ptvpk+fPtxyyy1cffXVbN26tdCqunPmzOGqq65i1KhRNGvWjCeeeKKYv63IOZS1Gz28D7K3A+pM3xtuCcSYGBBOVV3x8zktHFiyBT1e8CV7PZ7HgSVbinzMolTVHTlyJJ9//jlvvPEGQ4cOBaBFixb07duX+++/n9dff53x48fz0ksv8cEHHzBgwIBCq+qmpKTw8ssv8/TTT/OHP/yBRx99lI0bNxb5uiJl/+FjxB/aheBTAeF4Diz/S3SCMsZ4hfqexxdAqs8yAeZENpzY5GlxhLq8OIJV1U1PTwfgrLPOonbt2gXWrVmzBoA6deqQmJhIYmKid5mHv6q6VapUYdSoUcTFxbF582YAdu3aRdOm0X3M9efsIzQN9ABfdkbpBmOMOUWoLY8eqrrV57MFZzjaci+uZuWwlod83DCr6npqPGVmZnor63p4+if27NlDTk4OOTk5tGvXrtAYbr/9dhYuXMiMGTPo1KkTAKHUOytpx3LzOB7ob5saDUo3GGPMKUIdw/yAiNwlIutE5EsROVdEpgEJJRxfTKjeozESX/BXJfEVqN6jcbGOm5qaysaNGxk2bBhPPvkk4FS3XbVqFcApVXUnTpzIpZdeSmpqqrfPxHnNBiZNmsSNN97IqFGjuO222+jZsyevvvoqW7ZsKVBV11Nx11NVt0+fPqgqY8eO9bZspk2bxtq1a/EUk5w2bVqxrrMoKsVVYJfWIs/n7mgOlaHb2FKPxxhTUKhVdR8G/urObgF+CwwF2qjq4BKLLkIiUVX30LpfOLBkC7lZR4mrWZnqPRpTtU3dSIca1Nq1a6lduzaNGzdm586dpKSkMGTIEF566aVSjaM07D98jMz9OWRv/YZGH/2JFNnLTuqwo90ofnfN0GiHZ8xpIRJVdW/CqZ77LXCfqp4AXhSRDyIUY8yr2qZuqScLX7t27WLMmDG0a9eO9evX069fP5566qmoxlRSalWpBMDu7Yl0Ova8vTVuTIwJNXn8qqpjAURkiDuthdMCMaWkZ8+e9OzZM9phlJpaVSpRr0YCP034Y7RDMcb4CDV5HBWRLcBG4EIR+QRog9MSMcYYc5oJNXmMBj4GGrrzXXDqWY0pgZhKjap6O5xN7ImFp76MMf6FWlX3cxE5H6fvowGQAcxV1Z+KG4CILMap0lsVaAs8o6ovB9g2FRiCUwK+FXCvqq4vynkTEhLYu3cvderUsQQSg1SVvXv3kpBwWjzQZ0yZE2rLA1XdhjPUrJeIjFHV8QF2CVWmqnr6UT4F0kTkP6q6wedcFwKv43TYvyAi7wDvishvVTXst/UaNGhARkYGu3fvLmb4pqQkJCTQoIG902FMLAq1JHsK8GegGZD/zbjW+CSUcHkSh8szlG0VP5v2xnkvZZc7nwlcA3TAGV/dN+YhOK0UGjZs6Lua+Ph4zjnnnCLHbYwxp7NQWx5v43xJ+wrpprSIZAD+nrEcpKqz3G1SgCuAmar6hZ9tk93pcZ9psp9tUdU0IA2c9zxCidMYY0xoQk0ejYCHcP7q93wRC/BgiPt3DHCuPQAi0hx4BeeW1CsBjrHTncb7THf62dYYY0wJCjV5LAD+pj6Pv4jIgVB2VtWAlexE5H6gP8446T+LyChgk6ouEpGRwDmqepcbw1ignrtrCrANp2ijMcaYUhRq8jgP+NYdx/xIvuV/wPlSL45J7vT9fMuuc6dtgeYiEqeqG0TkZmCIiJwH1ASuKUpnuTHGmOIJNXl0d6e+dbqL3ZegqgGfk1XV/j7zczhNysAbY0wsCzV5bAVm+SwTYEBEozHGGFMmhJo87lbVU4ogish/IxyPMcaYMiBg8hARz6AJH/kmDhG5FuiFc9vqtKmsa4wxxhGs5XEdcC+QKSLet+zcN81XAutx3v8wxhhzmgmWPLJU9TMAEZkJ9AA+Am5V1WwgW0SOlUKMxhhjYkywYWi9T1Kp6iBgo6reGmgbY4wxp49gLY94d8Anz6O0FX3mC9vfGGNMORXsy/9SThYq9PCdN8YYcxoqrOVQ2EAXdtvKGGNOQ8GSx3rgviDrBXgxotEYY4wpE4Ilj9Gq+mmwnd3ChcYYY04zAZ+2UtUlhe3s761zY4wx5V+wR3WNMcYYvyx5GGOMCZslD2OMMWELKXmIyHkico2INHDnG4vIJSUbmjHGmFgVasvjGaAPUDnffg+LyPASicoYY0xMCzV5VFHVAar6A4Cq/ghcBVxdYpEZY4yJWaEmj3NEpIrPsirA2RGOxxhjTBkQamHDLGCjiHwKHACqA/8D7CihuIwxxsSwUJPHX4BFQH93XoA8YEgJxGSMMSbGhZQ8VPU99+mqW4EGwDbgH6q6uiSDM8YYE5tCHo9DVb8Avsi/TESuVdV3Ih6VMcaYmBYweYhIVyBJVeeLyNgAmw0ELHmUI4vWZTJnziLOz1hFtdxfia9em+63DKJZp67RDs0YE0OCtTwWAtVE5J/AOJyxOzzje3h+tvE8ypFF6zJ5edZbdPp5BfF6AoATB/bx4fQXACyBGGO8giWPZ4AUYBewFZjls16AAcUNQEQWAzuBqkBb4BlVfTnAtr7J6kVVvae4MRjHnDmL6LJrGRV8/ibQE8dYNfc1Sx7GGK+AyUNVn/D8LCJ/VtW3fbcRkQ0RiCFTVYe4x/sUSBOR/6iqv2O/Dzyeb/6XCJzfAOmrVtBm28enJA6Pg3ttBGJjzEkhvSToL3G4bihuAJ7E4fJ8Q/m+kOhRB+gFPAhcDxwq7vmNY9Xc17y3qvypViepFKMxxsS6kJ62EpHfA88CvwUqhXsSEckA6vtZNUhVZ7nbpABXADPdJ7v8eVJVF4tIMvAj0AXoGOCcQ3DfQ2nYsGG4IZ92Du7ZHXR9p9RbSikSY0xZEOqjujMAf9/AoXaYdwxwrj0AItIceAW4T1VfCXQQVV3sTneKyBagg4jUVtV9frZNA9IA2rdvbx37QSybMbXQbay/wxiTX6jJIxsnAfzCyYQhwF9D2VlVMwKtE5H7cd5cfxz4WURGAZtUdZE7Rvo5qnqXiFwMtFbVaSJSGUjG6WjfH+I1GD/SV61g/cfBRxOulnRmKUVjjCkrQk0ek4BcYJuq5nkWisi2CMQwyZ2+n2/Zde60LdBcROJw6mtdJyLnAm2Ar4ERqloirYpF6zL5cnEag4/NJqXCXo4k1qPKlX+BlsXu5okZ6atW8OG0yUG3qVipst2yMsacItTksRdYjvPeh++6h4sTgKqecsB86/rnm00HuhfnXKFatC6Tfy6cyl8kjSoVjgFQJWcnJ94Z5vzCykkCWfLyFDQ3N+g23YfcY7esjDGnCLUk+0s4lXTF51MuTVyykfuYSxU5VmB5xdwjsPwvUYoqspb9bQS5R48E3abVFT0tcRhj/Aq15fEzzq2kIvV5lDU7snJIqRzgvYbsgN03ZcabowazfetOguX/Vlf05PeD7yq9oIwxZUqoyWMuTgl23z6Pn0okqihLqZnIjsNJNBA/CaRGg9IPKIKWzZhaaOJIqFbNEocxJqhQb1tNwKmoe1xEcj0fitnfEatG9mjKZFI5rAVfaTkRlwDdAtWILBucJ6uC33G8fIAN02KMCS7U5AGn9neU2z6PXm3qc9l1d/F0/F1k5CWRh3A4MZmK175QpjvLl82YWuiLOXGVK1s/hzGmUKHetvoCSPVZJsCcyIYTO3q1qU+vNo/jKaUVqF5KWbL+4w+CZ3yBHrdbnUljTOFCTR6Xevo6RKSOqu51f760xCIzETX9juDvaijwx7sfsFaHMSYkod62ihORiSJyEPhFRA6KyIQw9jdR9OZfH+bQ/lMquHgpUL1NZ0scxpiQhfrl/zDwAM6YG+JORwJjSiguEyHpq1aw/ev1QbeRChUYMnpkKUVkjCkPQr1tdT3wZ+C/wGGcLoAOOMPQlst3PcqLwsqPAPS86/6SD8QYU66EmjwOqOokn2X/FJE+kQ7IRE76qhWFlh+p3eBsu11ljAlbqMkjUUTeA1ZzsuVxEZBQUoGZ4vtw6nOFbjPo2WmlEIkxprwJNXk8A/wv0DPfMsEppW5i0MwH7kTz8oJuIxXseQdjTNGElDxU9XUROQzcDjQCtgJTVfX94HuaaEhftYJ9GdsL3a5ltz+UQjTGmPIo1GFoK6vqQmBhvmW3ikiDYAM9lReL1mUycclGp2BizURG9mhKrzb+RtWNDR+86Ns95Z/VrzLGFFWo9y0+9LPsEDArcqHEpkXrMhmzYAOZWTkokJmVw5gFG1i0LjPaofmVvmoFhDA+lo0OaIwpjqAtDxHxvJZcL9/PHlWA80skqhgycclGco4XfGIp53guE5dsjMnWRyid5DY6oDGmuAq7bTWLk+N3zPSzfmtEo4lBO7JywloeTaF0kldLOpNOqbfY47nGmGIpLHl8hpM8WgNf5luuOGOKl9vCiB4pNRPJ9JMoUmomRiGawJbNmFpoJ/nZLVpxw6NPllJExpjyLGifh6p2UdWuwCRV7er5AFfiDBD1bGkEGU0jezQlMT6uwLLE+DhG9mgapYhOlb5qhTtOR3CWOIwxkRLqo7p/FREBLgduAnoD1UoysFjh6deI5aetls9KK3SbVlf0LHQbY4wJVaHJQ0Ta4CSMVCDZsxg4BhwvudBihzO2R+wkC19Hfz0YdH3VWrXtsVxjTEQFTB4i8jBO0vDcnxHgCHAAuAtYClhFvShbNmNq0PVSoQJ3TH+tlKIxxpwugvV5/JWTj+J+DgzBaXmkq+oCVf1VVa2ibhSF0tdxpVXMNcaUgGDJ4/fAK8AGYAHwrqpmQ6HDYJtSsuTlKUHX23jkxpiSEvC2lap+AnwiIpWAq4ApIlIRqCsiCap6REQGqaq/9z9MCVs2Yyq5R48G3cbGIzfGlJRCO8xV9RhOy2OBiNQA+ro/HwVa4f/lwZCJyHicYovZOEnqfWC4qp7SGS8iqTi3zza4575XVYMPk1dOFXa7Kj4hwVodxpgSE1ZNblXNVtUZqtoTGI4ztkdxxQEDVfVO4B3gDpwEVYCIXAi8DixU1Xtxks27IlI5AjGUKaF0kl8x+O5SisYYczoq8oAOqrod6FTcAFR1lNu6ATjLne70s2lvnHh3ufOZQEOc4XBPG6F2klurwxhTkoo1GpCq7g9lOxHJEBH18xnork8WkTdxEsTfgZV+DuN5x+S4zzTZz7aIyBARWS0iq3fv3h3iFcW+VXODP3ZrneTGmNIQ6kiCxdUxwLn2AKjqTuAGERkF/A3YDfjW0vC0RuJ9pv5aKahqGpAG0L59+3LzhNjBvXuCrrdOcmNMaSiV5BFswCgReVxVH3NnPVV6G7rrRgLnqOpdOJ32Y4F67jYpwDbgixIJOkakr1rBqrmvcXDvHqrVSSLhjDM4ctD/G+WtruhprQ5jTKkorZZHMI1FZAZO5/sVwFuAJ5m0BZqLSJyqbhCRm4EhInIeUBO4RlWDP69aBqSvWsHyWWneMiMJ1apx+YAhACxNm8KJY84lHtwT+PZbqyt6WgkSY0ypEQ1h1Lmyrn379rp69epoh+HXshlT/XaAS4UKVKpStdC6VTY+hzGmpIjIGlVt729dLLQ8TlvBnpzSvLyQEseQF+0dTWNM6SvW01am6NJXrQhpyNhgCus8N8aYkmLJIwrSV61gadqUQoeMLUy1OkkRisgYY8JjySMKVs19zdsJXhydUm+JQDTGGBM+Sx5REInbTQnVqlknuTEmaix5REHCGWcUa/8KFSt6H+U1xphosKetouBYTk6R942Lj6fH0OHW6jDGRJUljyLwfes73Pcs8k6cKPK575u9sMj7GmNMpFjyCJPnSan8b30vTXNG9Cvp1kCrK3qW6PGNMSZU1ucRJn9PSp04drTQareRYOVHjDGxwpJHmAI9KRWs7lR+6atWEFc5/PGrrNVhjIkldtsqTNXqJAVMFOmrVgS8dZW+agWfvJoWsCJuYazVYYyJJdbyCFOwF/MC3bry9JMUNXH0vOeBIu1njDElxZJHmIJ1igdqkRTnjfL4hAR7LNcYE3MseRRBtaQzA65LX7XilGXFeaP8+NEyP1yJMaYcsuRRBMFuXb314hQunfAJi9ZlepfFF6GD3MOKHxpjYpEljyIIdhspUY9SZft67p/3JY8s2kD6qhUcP3KkyOey4ofGmFhkT1sVUbWkM/32cQjQY89yLtn/Bf862IGEfZ+TWMRz2JjkxphYZcmjiDql3sIHU571u06AFglnc2vV1lQ4o513edaxX1i6Y1ZIx+95zwOWOIwxMctuWxVRs05dSahWze+6hlWb0SHpKuIqVEREvJ+alerSPWVgoce2cuvGmFhnyaMYApVFb1mrMxUqnPqr9SSQYKRCBSu3boyJeZY8iqFZp64kVMw9ZXmVitWLeETlyrvut1aHMSbmWfIopq51vwe0wLLDJw4U4UhKq7ZNLXEYY8oESx7FVLsGxEvB1sdX+z8lLy/vlG1Vlaxjv/g5ipIbn8DvH5xUQlEaY0xkWfIopvHH+tKt3mbytz7qVK4P4iSL/B//T1spB6Uqv33g+dIM2xhjiiXqyUNExovIGyIyTUS2u9P4ANuqz2dKacfra3X1K1h9Rita1tgBKG1q/54m1dtSQSoUeNIK4EjuIZ+9nRZH6wefo1eb+qUeuzHGFFUsvOcRBwxU1WMikgvcDawC3vCz7fvA4/nm/d0DKlUjezTl/nm3Mq7uK7TkR86r3sabLPITEeolnpNviXKs1pmMmT6r1GI1xphIiXrLQ1VHqeoxd/Ysd7ozwOZ1gF7Ag8D1gO+f8qWuV5v63NSxIY+duJUddc9FODVx+LP+jAtoNvTJEo7OGGNKRqm0PEQkA/B3X2aQqs4SkWTg70Bvd7oywKGeVNXF7vY/Al2AjgHOOQQYAtCwYcNixV+YJ3pdCMBj/7mVrqJBE0gewtKky+lwxe/tVpUxpswSVS18q+KeRKQB/hPVHlX9Nd92o4C/AY+oatA/y0UkHTgfqKOq+4Jt2759e129enX4gYfpkUUbOPM/P9NbK51y60pVyTieR/9Kh7i5Y0NvwjHGmFglImtUtb2/daVy20pVM1R1i5/PryKSvw9jqzttCCAiI0VkqvvzxSJyp/tzZSAZ5/bW/tK4hlA80etCGvVrxiI5Rp7Pk1YZx/O4q+YxJvdrbYnDGFPmxUKHeWMRmQEcBq4A3gIec9e1BZqLSByQBVwnIucCbYCvgRFaGk2nMPRqUx/83I46G1hX+uEYY0yJiHryUNUBQdb1zzebDnQv+YiMMcYUJupPWxljjCl7LHkYY4wJmyUPY4wxYbPkYYwxJmyl8p5HtInIbk4+BhyrkoA90Q6iBJX364Pyf43l/fqg/F9juNfXSFXP9LfitEgeZYGIrA70Mk55UN6vD8r/NZb364Pyf42RvD67bWWMMSZsljyMMcaEzZJH7EiLdgAlrLxfH5T/ayzv1wfl/xojdn3W52GMMSZs1vIwxhgTNksexhhjwmbJoxSJSAcRWSUiz4jIf0RkmYhc4K7rJiKfishkEflMRLpGO97iEJHKIrLeHWt+oLusXFyjiDQUkbdFZJqIvCwia0Skanm5PgARGS0i34nIiyKyWUT+7C4vs9coIueKyDz3v8lZ+ZYHvKaydL3+ri/Yd467vujXpz7jTtin5D7A5UCq+/M5gAKrgbrAr8Cz7rq/AweAM6MdczGu9TmcESEVGFherhHnD671wD/yLft9ebk+N/Zm7r/bR+78F+58o7J8jcBgnOGrFZjlLgv471bW/k0DXJ/f75zCrj2U81nLoxSp6ieqOted9bzlWRW40p3ucpdlAtXc5WWOiPwROELB4YTLyzW2B1oCdUTkCRFZAFSm/FwfwEHgGJDgzidwctjnMnuNqjqDU9+uDvbvVqb+Tf1dX5DvHCjm9VnyiJ6BQA5wP86oiADHfabJlDEiUg+4Cxjrs6q8XGNjdxqvqo8AR4F3cMb7grJ/fahqBvAg0E5EXgPOA16g/Pwb5hfsmsrb9Q7k5HcOFPP6LHlEgYgMBW4A2qnqRzjD6QLE+0x3+u5bBlyP8x/oC8BV7rIBlJ9r9Ax7/KM7/QGIcz9Q9q8PEbka57bjC6p6C05yfA6nhQXl4BrzCfbfZXn5b9bfdw4U8/oseZQiETnLvc3REXgAqCoi7wEfAoeAeu6mKTi3Dj6MSqDFoKpTVPV6Vb0DeN9d/Crl5xq/APYCtd35Ou50BeXj+uBkK+pXd3rInX5H+blGj2D/XZb5/2aDfOdAca8v2p08p9MHp9moPp8sd1034FNgMvAZ0DXa8RbzWvsA/3Kv8UOgc3m5RuBSnP6cycC3wMjy9G8IJAIvA2vca9kAjC3r1wj0Bea5/01+DTxT2DWVpev1d33BvnOKe332hrkxxpiw2W0rY4wxYbPkYYwxJmyWPIwxxoTNkocxxpiwWfIwxhgTNksexhhjwmbJwxhTbCIyS0QOiMhDftY1F5EtInJURH4UkT7RiNFElr3nYYwpFhFphfNC6AfAdUA1Vc3Jt74BcD7Om/mv4dQFOz8asZrIsZaHiToRudwdg+DRKMaQJiK78491EOJ+NdzxPNT9rBWRSu66eiLybxHZKyJ/CuFYD4tIVv4xUGKBiIxzY9olInP9bPIzzhvNw3BKmBzLv1JVM1R1mbtNNpDuHreeiKwUkSPu8buU5HWYyLLkYWLBTT5TL/fLpTS+TM8GagE1wtlJVbOBy3BqAgG8rqrH3HW7cMZImKSq/xvCsZ4Evgzn/KXsI1VN9bO8A3ARTkG9M1Q113cDEbkLp47SRcBb4Px+VLULJ0uCmzLEkoeJKhGpjDNGhgJNRaRdlEK5BkhR1X+Fu6N7i2aBO+ubAG8EXi9mbDFLRCoAT+Rb1FBEzvCz6evA73Bub00TESmN+EzJseRhou0qnKq7n7vz3i9fERkLtHZnR7utkEQR+a2IvCvOMLfrReQdEWni7pP/1s8rIjJfRA6LM1zshSIyx+3YnZLvPPcA24Gf87dw3I7ej0Rkm4h8LCIr3IGu/JntTtuIyPnu/kk49/+35DtmwNh9icgL+W/piMiNvre1ini9F7jXtVZE0sUZgjTBXwwhuBFoAWTh9GkI0NznOi7FGZ0wB2fMiCNqna1lX7QrQdrn9P4A83FKQt+O0/rYAcTlW7/SXT7Qna+G80WfizNoTV3gBLAV55ZJ/n2muvPp7vwEn/l2+c4zy+c81XFuwyjQ1l12GzA5wHVUwBmJTYG/usvuAu7Mt004sXvi2OLOd/G3PtzrzXddR9x4bnPXPRPk32gc+YY2zbc8Hmc8EwUew6nOWiA2d7s/Ab+45/wauNJnfYFrtE/Z+FjLw0SNiNQEKqrTN/AmzpdLMs64y4H0BBoAGaq6U1V/wfnybeiuy2+tO/3FnW72mf9tkPP8ESep7VRVz3HeBN7wt7Gq5gGezuT+7vQGd5+ixF4UoVyv57q2q+pB4Bt33e1FON/twLk4rY7JwPfu8gIPHajq/6pqXVVNUNUWqlpmxsMwgVWMdgDmtNYXp59jpTt/EGe87JuAjwPs08idHs637LDPOo8T7lQDzFcmMM+ASAc8C9wv2/8G2Wc2MAL4jYj0B7JVdW8RYy+KUK63rvtzivt7r4STwBCRGuo8AFAoEUkEHnFnJ6tqtoj4TR6mfLKWh4mm3sDvVLWLOk/d3OVZ7n45wckvPo+t7rRKvmVVfNZFwjZ3Wt2zQERqBevQV9V1OINDAUzl1FZKUWI/6k49w9wmBtguVBnudLf7e78EOAfoGWricA3n5FjX40REgQnufHP/u5jyxJKHiQoRORs4qqqH8i1egvOOQDWcp5/AuSUCkCgiqTi3XLYBDUQkWUTq4vzVvhVYHMEQF+P0vySLSGt32VDgykL28zxZFQe867PufcKP/Tt3Wk9EquK8bFccHwC7gbNFpKm7rCfOGOUhEZEawIPu7Gc4o9fNAxa6ywI9cWXKk2h3utjn9PvgjP/9DU5H6W35lo/FeRdAcf5C7gd0d7fbAXyC0z9wHvAO8BWwHlgE/MY9xsM4CUdxvngH+szf5jPfDrgH510Dz7KL3WOdj/Ol/hOwDJgBVC7k2hoBecCrAdaHE3s7oBVOa+ZH4Emc22b51xflelu517MVJ2HPA+oFuaZx5Oswd+PwDHVaKd92gnObT4GLwvjvYQvWYV7mPlaexBgTlIiMw3ma6lVVHVgCx9+Ck3S7qurKSB/flAy7bWWMKUwWTiulfYDyJEXiKU/CyceVj0Tq2KbkWcvDGGNM2KzlYYwxJmyWPIwxxoTNkocxxpiwWfIwxhgTNksexhhjwmbJwxhjTNgseRhjjAmbJQ9jjDFh+39+2ZxUMmVBgwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "tc.plot.energy_volume(crystal_systems=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "f039bd7e-e62e-43d6-9c22-6a4bb1c68c73",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>c</th>\n",
       "      <th>alpha</th>\n",
       "      <th>beta</th>\n",
       "      <th>gamma</th>\n",
       "      <th>V</th>\n",
       "      <th>N</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4.039967</td>\n",
       "      <td>4.039967</td>\n",
       "      <td>4.039967</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>65.937658</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3.900545</td>\n",
       "      <td>3.900545</td>\n",
       "      <td>3.900545</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>59.343892</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3.929227</td>\n",
       "      <td>3.929227</td>\n",
       "      <td>3.929227</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>60.662645</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3.957496</td>\n",
       "      <td>3.957496</td>\n",
       "      <td>3.957496</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>61.981399</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3.985366</td>\n",
       "      <td>3.985366</td>\n",
       "      <td>3.985366</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>90.000000</td>\n",
       "      <td>63.300152</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>303</th>\n",
       "      <td>7.008729</td>\n",
       "      <td>7.232998</td>\n",
       "      <td>10.690023</td>\n",
       "      <td>121.764941</td>\n",
       "      <td>89.204727</td>\n",
       "      <td>90.106498</td>\n",
       "      <td>460.695818</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>304</th>\n",
       "      <td>7.054241</td>\n",
       "      <td>7.279967</td>\n",
       "      <td>10.759441</td>\n",
       "      <td>121.764941</td>\n",
       "      <td>89.204727</td>\n",
       "      <td>90.106498</td>\n",
       "      <td>469.729069</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>305</th>\n",
       "      <td>7.099174</td>\n",
       "      <td>7.326338</td>\n",
       "      <td>10.827974</td>\n",
       "      <td>121.764941</td>\n",
       "      <td>89.204727</td>\n",
       "      <td>90.106498</td>\n",
       "      <td>478.762321</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>306</th>\n",
       "      <td>7.143545</td>\n",
       "      <td>7.372128</td>\n",
       "      <td>10.895651</td>\n",
       "      <td>121.764941</td>\n",
       "      <td>89.204727</td>\n",
       "      <td>90.106498</td>\n",
       "      <td>487.795572</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>307</th>\n",
       "      <td>7.187372</td>\n",
       "      <td>7.417357</td>\n",
       "      <td>10.962497</td>\n",
       "      <td>121.764941</td>\n",
       "      <td>89.204727</td>\n",
       "      <td>90.106498</td>\n",
       "      <td>496.828823</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>308 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            a         b          c       alpha       beta      gamma  \\\n",
       "0    4.039967  4.039967   4.039967   90.000000  90.000000  90.000000   \n",
       "1    3.900545  3.900545   3.900545   90.000000  90.000000  90.000000   \n",
       "2    3.929227  3.929227   3.929227   90.000000  90.000000  90.000000   \n",
       "3    3.957496  3.957496   3.957496   90.000000  90.000000  90.000000   \n",
       "4    3.985366  3.985366   3.985366   90.000000  90.000000  90.000000   \n",
       "..        ...       ...        ...         ...        ...        ...   \n",
       "303  7.008729  7.232998  10.690023  121.764941  89.204727  90.106498   \n",
       "304  7.054241  7.279967  10.759441  121.764941  89.204727  90.106498   \n",
       "305  7.099174  7.326338  10.827974  121.764941  89.204727  90.106498   \n",
       "306  7.143545  7.372128  10.895651  121.764941  89.204727  90.106498   \n",
       "307  7.187372  7.417357  10.962497  121.764941  89.204727  90.106498   \n",
       "\n",
       "              V   N  \n",
       "0     65.937658   4  \n",
       "1     59.343892   4  \n",
       "2     60.662645   4  \n",
       "3     61.981399   4  \n",
       "4     63.300152   4  \n",
       "..          ...  ..  \n",
       "303  460.695818  16  \n",
       "304  469.729069  16  \n",
       "305  478.762321  16  \n",
       "306  487.795572  16  \n",
       "307  496.828823  16  \n",
       "\n",
       "[308 rows x 8 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABIYAAAHBCAYAAAAcirBzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA69UlEQVR4nO3df5glV10n/vcHEzIkxJYfExKEMAmzikBWF2aRVRaSsK5iGIJICKCSyCOzorsSRTC7KsZFlzwIOn7ZRR0DJihICKJxDEEkkESQiAMIAywq4ABmE5koacKPQIDz/aOqM3c63TPd09333u56vZ7nPnXr1K26n7q37+mqT51zqlprAQAAAGB47jbpAAAAAACYDIkhAAAAgIGSGAIAAAAYKIkhAAAAgIGSGAIAAAAYKIkhAAAAgIGSGNpAquqHq+rWqrr7mN5vU1V9uqqOXeZ676qqVlV/W1XfOlL+M1X1z1X1jkOs+8p+H89fQejAOlFV39PXFa2qrusff1NVL6yqo9fwfbdU1UfWavswRAv8nu+9Bu/xmKp66ypu78Sqem8f8w1VNTOy7KVV9dmqes1qvd9KjeMzXkYsj+pj2TepGGAp1E3jtRbnrFW1o6r2VdWlq7XNoZEY2lielOToJN87V1BV51fVtWvxZq2125Oc1lr74jLX++4k+5K8vrX2dyPlv57kA621Mw6x7k8k+dsjChhYd1prf5Hkgn728a21xyX5viRnJvmTqlqT/2OttX1Jvmtufi3rUhiKBX7P/7qc9avq2vkXhvqToi0jRe9Kcs4KwjxIa+3mJP8xyReT7GytzY4s/qUkf9lae9aRbHst6pWVfsYrUVWnjyaBWmvvGYkFppa66WBjOOa5yznrSrXWdiW5dLW2N0QSQxtEVX1jkq8l2Z3kaeN639barUe46hVJzh0tqKpHJnnfSmMCNrbW2r8kOT/JGUl+eA3f59a12jawNlpn9vCvXNY2v5jkqsw7bkny/UnevJrvBWxM6qbOpM5ZOTyJoY3jyUn+KMkfJjm77+b1uCQXJvmOPpP9iiSpqvtV1R9V1fV908Pz+vKT+/nWZ4rfXlUfrqqHVdXFVbWnqt5cVZv617+2qm6vqtPngqiq5/fbeEf/2kcsEu8b+ri+ZaTs3CSX99t5Vr+d6/tY77fQRqrqrXMZ+aq6x1z8/bK79/vdquonq+otVfUPVfXYPs53VdW7q2rzyPYe2b/ndVV1TVU9ZPlfBbDW+itlf57+6ttInXFdVb2uP/AY7X764qq6oqr+rqr+19x2quq7quqdfX13bVU9sS+/ZqRuuUtdWlVv65f/Wf/6H6mq/1dVbxz3ZwEbSf+b/av+t/aHI7/llyT5jiQX9svOqqqr+9Ve35c9aPQ4oF/vnlX1u/3v/J1V9aq5//tV9eD+OOK6qvrLqvqu+fGMeEOSJ8zF0/vBdMdeqaoX9O/9l30dcWcXiar6oX7Z2/vH41fpGO2rdXCLhKV+xgse69SBrhivr6rfqar31chxX/+aH62qD/Xr/VQd6MbyuCQ7k5zY788V897zBf37fbD6Y7+qultV/Vb/vVxXVZdU1XHL3R8YB3XTqtVNT868c9aReN5U3bnlz1XVn1TVx6rqJ0aWH1fd+ef7q+qqqnp5dcd4r1zkO1v0c6yqF1V3HviOqrq8qk46xGc8DK01jw3wSPLaJJuS3D3JZ5M8uS8/P8m18177tiQX9c/vm+SmJI/t57ckaUme0s/vTPLxJCcnqXTduJ4+sq19SU7vnz8zyYeSHNvP/+zc+ywS88eT/OLI/Fv76WOSfCbJ5n7+F5JcM/K6a5OcPzLfkmwZjX/e+7QkP9M/vyDJp5M8up//0yQX9s9nkuxPcmY/f1aSv0tyt0l/vx4eQ34kOb3/HR81r/w3knwkyXcnuWWkzvi1JJeMvO7adFfUKslJSe5Icv9+2XuSfGf//NuTXDqy3mjdclBdmq4J9C1JvmukbHeSmvTn5eExzY/Ffs8jy5838vyiJC8emT/o/39fdufvtJ8/6Dggya4kr+6f363/v396km9I8n+TPLtf9m/73/Txi8R1jySfT/Ij/fyxSf6kf/5D/baO7euZNyT5hX7ZdyW5eaR+eupcPTO/XunLlnKM9qx+/vlJTlrOZ5zDHOv0n/mNSe7Vf14fSvKMftnD0nVbOaWf/2/z6snTk+xbIJavJHlMP//KJL/TP//+JFePvPaPR79LD49xPtRNa1839csWPGcdWb4vySv754/q9+2ofv6lSa7uP6+7J3l3Dj42u2hkHxb9HJM8NN3xY/XLfiP9+eyQH1oMbQBV9U1JPt9au7219pV0Wdj5TQrnXvvNSR6f5NVJ0lq7JcmfpasARv1FP/1Qkltba59q3S/nQ0lOXSSUH03yhnZgzKHfTXKoq+d3dierqu9Md4KWJOcl+bPW2v5+/veSnFlVJx9iW4czuj/HttZu6Oc/mAP788R0n+Pbk6S1dlWSE5N85wreF1g7c//Dzk+ye6TOeF2SH6qqGnntn7fOTUn+Jd1BTJL8a5Ifqar7tdY+kOQnsgSttTuSvD7Js5Kkqv5dkg/29SRw5L7UX9m9LsnTkzzySDdU3Rhkz0o/7kRr7evpTlg+kuTRSR6c5Pf7ZR9MlxB54kLbaq19Kd3x0tzx1fZ+PunqoNe31r7Y1wF/mORH+mU/muTNI/XTnyT5rUXiXeox2pX98pf3ddpyLOVY569ba5/tP68PJTmlL39qkne31v6xn3/tEt/z8621d/bPPzCyvc8mOa26gX/vluQZST61zP2BcVE3rbBuWsY561v66QeTHJfkhH7+nCSva619vV//igXWnXOoz/G2dPXeU6q7kcnPJXnnItsZjKMmHQCr4slJ/kMdGCTsXklOrap7LPDaB/TT/SNl+5NsG31Ra+22/ulX0/14MjK/2AjyDxjdbuv60R6qL+0bkvxcVT0sXR/Ty0a288F58c2VH+kBw1L25wFJ7l0HD7a2P8l9jvA9gbW1JcnH0v12Hzry2z0qyT+n++3e0pd9bmS923Pgd//MdE2m31dVe/vnf7vE939NkrdU1fPSHWjtOpKdADrVdU1/ebobW+yrbjDX81ewyc1JjsnBxyb/0L/XGemucP/FSA75mHQtahbzhnRdQ+6V5AeS/GRf/oAkz+y3mXRXw78+suzOY5rW2leT/PUi21/qMdpKxilZyrHOYvXlSTlQp6a19q8H598XNbq9L89tr7X27qrake6k7NVJfifJS5a0FzBG6qZVq5uenEXOWfsE15zP9du7vf8MFqyD0l3cW8wDssjn2Fr7dFWdla7u+T/pkty/mO68cLAkhjaG703yyP4KdvrM5/50zYPn+3Q/3ZwDSZbNSf5pFeL4dL+t9HEcl+QBbeTOY6Naa++rqo+ly7o/vM/k3mU7I88Xi/GOdD/0JPmmIwv9zvf9p9ba6XMFfX/d21ewTWAN9H3B/3OSH0/XlewTrbWfHFl+3/6K1uEc01p7YVX9jyQvTHe160FLiaG19p6q+ud0B2Hf0lr76HL3A0iqu83yY9J1Vfq71t0VMOm6bK7E/nSJiM3puhSkqu6f7sTo00numPc//7gcOGlayJvTHRM8K8ndWzcQfvpt/UVr7ddGtnXfkWWjx0ZHJXlY30JxvjU7Rhv5jFdyrHNTkjvHhqyqFV0462O6trX25qp6cLpWAjemaykOE6duutNq1U2HOmddyhiNN+Xgc8RD1UGLfo5VdWySj7TWnlxVJyZ5U7ok0S8tY182HF3J1rk+M/zVuR9YcmcXh6vTtcK5LV2/0lTVH6Ubu+et6bPc/T/1J2Z1/glfmuRp/Y8t6cbz+b7DrHNFkucluWGk7NIk3z9ScZ2X5O2ttcVaC/1jkof3z79/eSEf5M+S3Keq/n1yZ+Xxjhw6Qw+MWVXdO12ddV26JsKXJjmrrw9TVd+abryfpXhjVR3bXyl7V7o+6Qs5qC7tD6DSv/+vp6tXgSNzr3RdBD6WZOtIwmH+rYxvS3JsVf2bqpo70fl8X/bDVfXU0Rf33TNekwPHPHdL8qp0V53/Osmnquop/bKj0nWlGL0pxkFaa7enO1Z4cQ6uYy5Nck4duDnH6elav8wtGz2mOTcHWhqM8xht7jNeybHOG9Nd7Z/rgj//jkKj+/OKqnrgYbb3A0l2JElr7ePpTjIXq4NhEtRNq1Q3LeGcdSnekG6ogLtVN4j2kw/x2kN9jo9K8st9DDenG2dN3bNWgxd5rP0j3T/xv03yiSRnjZSflW5g59vT9RV9X7oTnt/sl5+Q7p/79ekSMuf35ffu51u6q+aPSvLRJLem+/HsSDdI2b503S9e27/H36bL/iZd/9gb+m3/bhYZwG0k1m/v3+9h88p/eGQ7b0pyv778lX08H53b53Qj7388Xbb8J/rtXZvuB/7Wfv6GJN/ax3p7ukrxSf2+3JwDg1M/sl/3uv69nzjp79nDY8iPJN/T/27byO9yT7ouX0ePvG6uznh7uqvO39KXv3SkzvgPfR0yV289NF0rob9Kd2L01zkwIOs1I3XHN6c7ODyoLu1f98B0V/1OmPRn5eEx7Y8k/7H/Hbd0Y0u8sX+8Od1Jyt2SXJLuJOxN6U6cbk3y0n79H0h3AP+eJGf0ZRen6w7xzv73OHccM3cccM9+m+/sf+s/ORLPXCuV65L8ZfpBSg+zD2enG0z5XvPKn9/XIW9Pd/Jxv5FlP5x+kNR+f7+xL79LvZKlHaNdm+ShR/IZ969Z8Fgn3bHdvnTHRc/NvOO+/jU/muTD6Qai/bH+fR7ULzuq3/93p7vw97AcfNw1elz50nTHZVf167yn/57uPum/U4/hPQ73u4m6KVlB3ZSlnbO+sv9c547RTuk/67ljsXunG2/otf3yP03yq0ne0W9rRw7UXz9/qM8x3fhCb+jL39W/zzdN+u9w0o+5kbgBgGXqB1J8dWvtKZOOBWCtVdW9W2v/2j/fnG48t3u2AzceAVgTVXXPJF9p3cDTqaoXJNnWWlvwpkssj65kALBMVTXX/PoZ6e5OBrCh9V0x/rTv9pJ0g+6/U1IIGJOnp2u1mKo6Jl03vz+faEQbiMGnAWD5HpxubKG/T6K1EDAEX0vXFeTdVXVHujFUnjXZkIABeV+SnVX1jHRd8d6arqsfq0BXMgAAAICB0pUMAAAAYKCmqivZfe9737Zly5ZJhwGswHvf+95bWmubJx3HSqiLYGNY7/WRugg2BnURMA0OVRdNVWJoy5Yt2bNnz6TDAFagqj456RhWSl0EG8N6r4/URbAxqIuAaXCoukhXMgAAAICBkhgCAAAAGCiJIQAAAICBkhgCAAAAGCiJIQAAAICBkhgCAAAAGKipul09wFqoqnOTPDLJA5Ick+QZrbWvTDYqAACAydNiCFhXqurUqrq8qlpVXTpS/viquq6qdlbV9VV1xshqNyS5MMmLkzwlyUPGGzUAAMB0khgC1pszk1wxWlBVJyS5Msme1toFSd6f5Mqq2pwkrbVPtta+nuRJSV6XZO/8jVbVjqraU1V79u/fv8a7AAAAMB0khoB1pbV2SZJb5hU/IclxSW7u529McnxfnqraVFUvTPLpJL+Y5MELbHdXa21ba23b5s2b1yp8AACAqWKMIWAjOKmf3jFvOlf+00ku6svvluQ/J/nYuIIDAACYVlPRYqiqtlfVrtnZ2UmHAqxPN/XTo+dNb0qS1tpLWmvHtNbu2Vo7trX2zrFHCAAAMIWmIjHUWtvdWtsxMzMz6VCA9enqJF9IcmI/f/8kt/XlAAAALGIqEkMAS1VV5yR5bj+7rape1lr7TJKz+/mdSR6R5OzWmlGkAQAADsEYQ8C60lq7It1dyc6dV35NkmsmEhQAAMA6pcUQAAAAwEANosXQlguvWvJr91181hpGAkyzqtqeZPvWrVsnHQrrlP83MOUuWmQ8y4vcAAXWLb9rWLFBJIYAlqK1tjvJ7m3btj1n0rEAG09VnZvkkUkekOSYJM9orX1lslFtTIslafdtGnMgALAO6EoGALBMVXVqVV1eVa2qLh0pf3xVXVdVO6vq+qo6Y2S1G5JcmOTFSZ6S5CHjjRoA4K4khgAAlu/MdAPh36mqTkhyZZI9rbULkrw/yZVVtTlJWmufbK19PcmTkrwuyd6xRgwAsACJIQCAZWqtXZLklnnFT0hyXJKb+/kbkxzfl6eqNlXVC5N8OskvJnnw/O1W1Y6q2lNVe/bv379W4QMA3EliCABgdZzUT++YN50r/+l03ch2JflQkhPnb6C1tqu1tq21tm3z5s1rGSsAQBKJIQCA1XJTPz163vSmJGmtvaS1dkxr7Z6ttWNba+8ce4QAAPNIDAEArI6rk3whB1oC3T/JbX05AMBUkhgCAFimqjonyXP72W1V9bLW2meSnN3P70zyiCRnt9YMFgQATK2jJh0AwLSoqu1Jtm/dunXSoQBTrrV2Rbq7kp07r/yaJNdMJCgAgCOgxRBAr7W2u7W2Y2ZmZtKhAAAAjIXEEAAAAMBASQwBAEyRqtpeVbtmZ2cnHQoAMAASQwAAU0S3VgBgnCSGAAAAAAZKYggAAICD6NYKwyExBAAAwEF0a4XhOGrSAQAAAMBqOu2y0xYs33ve3jFHAtNPiyEAAACAgZIYAgAAABgoiSGAnkEWgWmgLgIAxkliCKBnkEVgGqiLAIBxkhgCAAAAGCiJIQAAAICBkhgCAAAAGCiJIQAAAICBkhgCAAAAGCiJIQAAAICBkhgCAAAAGCiJIQAAAICBkhgCAJgiVbW9qnbNzs5OOhQAYAAkhgAApkhrbXdrbcfMzMykQwEABkBiCKDnKj0AADA0EkMAPVfpAQCAoZEYAgAAABiooyYdAAAAK7PlwqsWLN+36ZkLr3CRLrMAQEeLIQAAAICB0mIIAIBVc9plpy1Yvve8vWOOBABYCi2GAAAAAAZqTVsMVdW5SR6Z5AFJjknyjNbaV9byPQEAAABYmiW3GKqqU6vq8qpqVXXpSPnjq+q6qtpZVddX1Rkjq92Q5MIkL07ylCQPWa3AAQAAAFiZ5XQlOzPJFaMFVXVCkiuT7GmtXZDk/UmurKrNSdJa+2Rr7etJnpTkdUnu0rm8qnZU1Z6q2rN///4j2wsAAAAAlm3JXclaa5dU1enzip+Q5LgkN/fzNyY5vi9/TVVtSvJTST6dLqn04CQfm7fdXUl2Jcm2bdvasvcAAGADqartSbZv3bp10qEwz5YLr1qwfN/FZy1YbiBuANaDlQ4+fVI/vWPedK78p9N1I9uV5ENJTlzh+wEAbGittd2ttR0zMzOTDgUAGICVJoZu6qdHz5velCSttZe01o5prd2ztXZsa+2dK3w/AAAAAFbJShNDVyf5Qg60BLp/ktv6coB1paq2V9Wu2dnZSYcCAAAwFsu5K9k5SZ7bz26rqpe11j6T5Ox+fmeSRyQ5u7VmFGlg3dF9AwAAGJrlDD59RboBpM+dV35NkmtWOS4AAFgfLlrkgsIpJ483DtjAFh38fdOYA4ENaKVdyVaF7hsAAAAA4zcViSHdNwAAAADGbyoSQwAAAACMn8QQAAAAwEBJDAEAAAAMlMQQAAAAwEBJDAEAAAAM1FGTDgAAgAOqanuS7Vu3bp10KINx2mWnLVi+97y9Y44EAMZvKloMVdX2qto1Ozs76VAAACaqtba7tbZjZmZm0qEAAAMwFYkhB0AAAAAA4zcViSEAAAAAxk9iCAAAAGCgJIYAAAAABspdyQAYnC0XXrXk1+67+Kw1jAQAACZLiyEAAACAgZIYAuhV1faq2jU7OzvpUAAAAMZCYgig11rb3VrbMTMzM+lQAAAAxmIqEkOu0gMAAACM31QkhlylBwAAABg/dyUDAADW3GmXnbZg+d7z9o45EgBGTUWLIQAAAADGT2IIAAAAYKAkhgAAAAAGyhhDAHAIWy68atIhAADAmtFiCABgilTV9qraNTs7O+lQAIABkBgCAJgirbXdrbUdMzMzkw4FABgAiSEAAACAgZqKxJAm0wAAAADjNxWJIU2mAQAAAMbPXckA2BDcPQwAAJZvKloMAQAAADB+EkMAAAAAA6UrGQArtpxuXPsuPmsNIwEAAJZDiyEAAACAgZIYAgAAABgoiSEAAACAgZIYAgAAABgoiSGAXlVtr6pds7Ozkw4FAABgLCSGAHqttd2ttR0zMzOTDgUAAGAspiIx5Co9AAAAwPhNRWLIVXoAAACA8ZuKxBAAAAAA4ycxBAAAADBQR006AAAAAMajqs5N8sgkD0hyTJJntNa+MtmogEnSYggAAGAdqqpTq+ryqmpVdelI+eOr6rqq2llV11fVGSOr3ZDkwiQvTvKUJA8Zb9TAtNFiCABgilTV9iTbt27dOulQkiRbLrxqwfJ9m5658AqnnLyG0QDznJnkiiRPmyuoqhOSXJnkd1prz6+q30xyZVU9uLW2v7X2yf51T0ryuiR7JxA3MEW0GAIAmCLu1gosVWvtkiS3zCt+QpLjktzcz9+Y5Pi+PFW1qapemOTTSX4xyYPnb7eqdlTVnqras3///rUKH5gSEkMAAAAbx0n99I5507nyn07XjWxXkg8lOXH+Blpru1pr21pr2zZv3ryWsQJTQFcyAICBOe2y0xYs33ueHiWwAdzUT4+eN70pSVprL0nyknEHBUwvLYYAAAA2jquTfCEHWgLdP8ltfTnAXUgMAQAArENVdU6S5/az26rqZa21zyQ5u5/fmeQRSc5urRksCFiQrmQAAADrUGvtinR3JTt3Xvk1Sa6ZSFDAuiMxtAKL3b51IfsuPmsNIwEAAABYPl3JAAAAAAZqKhJDVbW9qnbNzs5OOhQAAACAwZiKxFBrbXdrbcfMzMykQwEAAAAYjKlIDAEAAAAwfut28OnlDPwMAAAAwF2t28QQAAAAa6OqtifZvnXr1kmHAhvOYg1dJnU3c4khAACYVhctMgbnRW7awtpqre1Osnvbtm3PmXQswNoyxhAAAADAQEkMAQAAAAyUxBAAAADAQEkMAQAAAAyUxBAAAADAQEkMAQAAAAyUxBAAAADAQEkMAQAAAAzUUZMOAGBaVNX2JNu3bt066VAA4JBOu+y0Bcv3nrd3zJEAsN5pMQTQa63tbq3tmJmZmXQoAAAAYyExBAAAADBQEkMAAAAcpKq2V9Wu2dnZSYcCrDGJIQAAAA6iiz0Mx1QkhmSjAQAAAMZvKhJDstEAAAAA4zcViSEAADpaUgMA4yQxBAAwRbSkBgDGSWIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKCOmnQA02bLhVdNOgQAAACAsdBiCAAAAGCgJIYAAAAABkpXMgAWpGvt2lrO57vv4rPWMBIAAIZMiyEAAAAOUlXbq2rX7OzspEMB1pgWQwAAQJLktMtOW7B873l7xxwJk9Za251k97Zt254z6ViAtaXFEAAAAMBASQwBAAAADJSuZAAAALAEuluyEWkxBAAAADBQWgwBAMCEbbnwqgXL920acyAADI4WQwAAAAADJTEEAAAAMFASQwAAAAADJTEEAAAAMFASQwAAAAADJTEEAAAAMFASQwAAAAADNRWJoaraXlW7ZmdnJx0KAAAAwGBMRWKotba7tbZjZmZm0qEAAAAADMZRkw4AAIDh2XLhVQuW77v4rDFHAgDDNhUthgAAAAAYP4khAAAADmIcWBgOiSEAAAAOYhxYGA6JIQAAAICBMvg0AGO12ICzCzEILQAArC2JIQAAABh10SJd6E45ebxxwBjoSgYAAAAwUBJDAAAAAAMlMQQAAAAwUBJDAAAAAAMlMQQAAAAwUBJDAAAAAAMlMQQAAAAwUBJDAAAAAAMlMQQAAAAwUBJDwIZXVTNV9ZKqalX1mEnHAwAAMC0khoB1papOrarL+yTPpSPlj6+q66pqZ1VdX1VnjKz25SSXjD1YAACAKScxBKw3Zya5YrSgqk5IcmWSPa21C5K8P8mVVbU5SVprtyf52pjjBAAAmHoSQ8C60lq7JMkt84qfkOS4JDf38zcmOb4vX5Kq2lFVe6pqz/79+1clVgAAgGknMQRsBCf10zvmTU9KkqralOTZfdk5cy2JRrXWdrXWtrXWtm3efJfFAAAAG9JRkw4AYBXc1E+Pnje9KbmzK9mL+gcAAAA9LYaAjeDqJF9IcmI/f/8kt/XlAFPBHRIBgGkkMQSsK1V1TpLn9rPbquplrbXPJDm7n9+Z5BFJzm6tGSwIWBPukAhsdFW1vap2zc7OTjoUYI1JDAHrSmvtitbaua21aq09vLX2s335Na21x7XWLmitPba19o5JxwpsaO6QCGxorbXdrbUdMzMzkw4FWGPGGAIAWKbW2iVVdfq84kPdIfE1S9luVe1IsiNJTj755NUIdcM47bLTFizfe97eMUfCnC0XXrVg+b5Nz1x4hVP8TQNMIy2GAABWhzskAgDrjsQQQE9femCFDnuHxNbai/qusM8zDhoAMA0khgB6+tIDK+QOiQDAuiMxBACwTO6QCABsFAafBgBYptbaFenuSnbuvPJrklwzkaAAAI6AFkMAAAAAAyUxBAAAADBQEkMAAFPEHRIBgHGSGAIAmCLukAgAjJPEEAAAAMBAuSsZQK+qtifZvnXr1kmHQm/LhVdNOgQAANjQJIYAeq213Ul2b9u27TmTjgUAYKM77bLTFizfe97eMUcCw6YrGQAAAMBASQwBAAAADJTEEAAAAMBArWliqKpmquolVdWq6jFr+V4AABtBVW2vql2zs7OTDgUAGIAlJ4aq6tSqurxP8lw6Uv74qrquqnZW1fVVdcbIal9OcskqxgsAsKG11na31nbMzMxMOhQAYACW02LozCRXjBZU1QlJrkyyp7V2QZL3J7myqjYnSWvt9iRfO9RGq2pHVe2pqj379+9fTuwAAAAArMCSE0OttUuS3DKv+AlJjktycz9/Y5Lj+/KlbndXa21ba23b5s2bl7oaAAAAACu00jGGTuqnd8ybnpQkVbUpybP7snPmWhIBAAAAMHkrTQzd1E+Pnje9Kem6krXWXtRaq9ba81pr+ooBU8uArwAAwNCsNDF0dZIvJDmxn79/ktv6coB1xYCvAADA0CznrmTnJHluP7utql7WWvtMkrP7+Z1JHpHkbC2DAAAA1i8tqWE4jlrqC1trV6S7K9m588qvSXLNKscFAADAhLTWdifZvW3btudMOhZgba20K9mqkI0GAAAAGL8ltxhaS7LRAACdqtqeZPvWrVsnHQqsC6dddtqC5XvP2zvmSADWp6loMQQAQMdA+ADAOEkMAQAAAAyUxBAAAADAQEkMAQAAAAyUxBAAAADAQEkMAQAAAAzUVNyu3m1ZgWmgLmJabbnwqiW/dt/FZ61hJAAAbDRT0WLIbVmBaaAuAgAAhmYqEkMAAAAAjJ/EEAAAAMBASQwBAAAADNRUDD4NAEBn8APhX7TIOG+nnDzeOCDJaZedtmD53vP2jjkSgLWjxRAAwBQxED4AME4SQwAAAAADJTEEAAAAMFBTkRiqqu1VtWt2dnbSoQAAAAAMxlQkhvSlBwAAABi/qUgMAQAAADB+EkMAAAAAAyUxBAAAADBQR006AIBpUVXbk2zfunXrktfZcuFVS37tvovPOoKoAAAA1o4WQwA9A+EDAABDIzEEAAAAMFASQwAAAAADZYwhAIApciTjncFGstj4ffs2PXPhFU45eQ2jAdj4pqLFUFVtr6pds7Ozkw4FAGCijHcGAIzTVCSGHAABAAAAjN9UJIYAAAAAGD+JIQAAAICBkhgCAADgIMaBheGQGAIAAOAgxoGF4ZAYAgAAABgoiSEAAACAgZIYAgAAABgoiSEAAACAgZIYAgAAABgoiSEAAACAgZqKxFBVba+qXbOzs5MOBRgwdREAADA0U5EYaq3tbq3tmJmZmXQowICpiwAAgKGZisQQAAAAAOMnMQQAAAAwUBJDAABTxHhnAMA4SQwBAEwR450BAOMkMQQAAAAwUBJDAAAAAAMlMQQAAAAwUBJDAAAAAAMlMQQAAAAwUBJDAAAAAAMlMQQAAAAwUBJDAAAAAAMlMQQAAAAwUEdNOoAkqartSbZv3bp10qGsmS0XXrXk1+67+Kw1jAQAAACgMxUthlpru1trO2ZmZiYdCgAAAMBgTEWLIQAAABi3xXp27Ns05kBggqaixRAAAAAA4ycxBAAAADBQEkMAAAAAAyUxBAAAADBQBp8G6FXV9iTbt27duibbX2xww4Xsu/isNYmBjc/fGQAAy6HFEECvtba7tbZjZmZm0qEAAACMhcQQAAAAwEBJDAEATJGq2l5Vu2ZnZycdCgAwABJDAABTRLdWAGCcDD4NAADAii12A4R9m5658AqnnLyG0QBLpcUQAAAAwEBJDAEAAAAMlMQQAAAAwEBJDAEAAAAMlMQQAAAAwEBJDAEAAAAM1FQkhqpqe1Xtmp2dnXQoAAAAAIMxFYmh1tru1tqOmZmZSYcCAAAAMBhTkRgCAAAAYPwkhgAAAAAGSmIIAACAgxgHFoZDYggAAICDGAcWhkNiCAAAAGCgJIYAAAAABkpiCAAAAGCgJIYAAAAABkpiCAAAAGCgJIYAAAAABkpiCAAAAGCgJIYAAAAABkpiCAAAAGCgJIYAAAAABkpiCAAAAGCgJIYAAAAABkpiCAAAAGCgjpp0AADToqq2J9m+devWSYeyLFsuvGrJr9138VlrGAks33L+fhN/wwAAq02LIYBea213a23HzMzMpEMBAAAYCy2GAACmyHptvch0WqxV3r5Nz1x4hVNOXsNopthFi1wUGurnAQyKFkMAAFNE60UAYJwkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKCm4q5k7r5x5Ba708RC9l181hpGsjTinR4bed8AAABYmqloMeTuGwAAAADjNxWJIQAAAADGT2IIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGSmIIAAAAYKAkhgAAAAAGas0SQ1U1U1VvqqrnV9UfV9Xxa/VeAItRFwHTQF0EAEyrJSWGqurUqrq8qlpVXTpS/viquq6qdlbV9VV1xshqO5Lcr7X28iTfnOTHVjVyYHDURcA0UBcBABvJUlsMnZnkitGCqjohyZVJ9rTWLkjy/iRXVtXm/iUPTvKl/vmXkpy64miBoVMXAdNAXQQAbBhHLeVFrbVLqur0ecVPSHJckpv7+RuTHN+XvybJJ5Kc1i+7Rz9/F1W1I91VtJx88slLj5xl23LhVUt+7b6Lz1qT7W5ka/X5csCQ6iK/K9azjf73O6S6CDaaxeqnfZvGHAiDsOjfm3OBdWFI399Kxhg6qZ/eMW86V74ryS1VdWG6g6RXLbSR1tqu1tq21tq2zZs3L/QSgENRFwHTQF0EAKxLS2oxtIib+unR86Y3JUlr7dYkZ69g+wBLoS4CpoG6CABYl1bSYujqJF9IcmI/f/8kt/XlAOOiLgKmgboIAFiXlnpXsnOSPLef3VZVL2utfSbdla9tVbUzySOSnN1a278mkQKDpy4CpoG6CADYSJY6+PQV6e6+ce688muSXLMGcQHchboImAbqIgBgI1lJV7JVU1Xbq2rX7OzspEMBAAAAGIypSAy11na31nbMzMxMOhQAgIlywQwAGKepSAwBTAMnY8A0cMEMWEtVNVNVL6mqVlWPmXQ8wORJDAH0nIwBAOtJVZ1aVZf3SZ5LR8ofX1XXVdXOqrq+qs4YWe3LSS4Ze7DA1JIYAgAAWJ/OTDcY/p2q6oQkVybZ01q7IMn7k1xZVZuTpLV2e5KvHWqjVbWjqvZU1Z79+91cETY6iSEAAIB1qLV2SZJb5hU/IclxSW7u529McnxfvtTt7mqtbWutbdu8efOqxApML4khAACAjeOkfnrHvOlJSVJVm5I8uy87Z64lETBcR006AAAAAFbNTf306HnTm5I7u5K9qH8ATEeLIXcCAgAAWBVXJ/lCkhP7+fsnua0vB7iLqUgMuRMQAADA8lTVOUme289uq6qXtdY+k+Tsfn5nkkckObu1ZhRpYEG6kgEATJGq2p5k+9atWycdCjDlWmtXpLsr2bnzyq9Jcs1EggLWnWqtTTqGO1XV/iSfHPPb3jd3Hcl/2ohxdYhxdRwuxge11tblIIZzJ2PpDq7+YcLhLMV6+Hs5EvZr/Zj2fVq39VEyseOiQ5nG71tMSyOmw1vLeNRF02Pa/u7WyhD2cwj7mKzufi5aF01VYmgSqmpPa23bpOM4FDGuDjGujvUQ41Bs1O/Cfq0fG3GfWNw0ft9iWhoxHd60xcPaGMr3PIT9HMI+JuPbz6kYYwgAAACA8ZMYAgAAABgoiaFk16QDWAIxrg4xro71EONQbNTvwn6tHxtxn1jcNH7fYloaMR3etMXD2hjK9zyE/RzCPiZj2s/BjzEEAAAAMFRaDAEAAAAMlMQQAAAAwEANJjFUVd9ZVX9ZVS+rqhuq6m1V9bB+2eOr6rqq2llV11fVGROO9Ziq+kBVtao6f9pirKqTq+qPquq3qup3q+q9VXXclMV4YVV9tKr+T1V9rKp+ti+fWIxVdWpVXd5/r5eOlC8a07jjXSjGQ/12JhHjRreUz7P/vf12Vb2+qt7Q/xaP7ZftqqrXVdWrqurjVfXz49+Lu1rpfo285un93+e+sQV/CKuxX1W1o6r+rN/GNVX1U+Pdi7tahb/Db6mqt1fVm/t9eltVnTr+PWG11ALHJhOOZ8FjkQnHtOCxx5hjWPaxxiRiOtyxxSRiGlk2VX/rHLmq+uX+u3xFVf1FVX1bX76uj12P5He+3vb5EPt4qN/uutrHZMrOvVprg3gkOTPJ0/vnpyRpSfYkOSHJ55O8vF/2m0k+l2TzBGP9jSTX9jGeP00xpksmfiDJq0bK/tOUxfht/Wf3ln7+r/v5B00yxiQ/luSpfSyX9mWLfm6T+EwXiXHB387h4h/3974RHkv9PJP8Wv89fGOSe/XPL+6X/VaSb+ifX9Yve+J6369++ZYkf9yX79sg39fc7+3kfv7eSR69Afbr8n7+0Ume0D9/1Tj3w2PV/y4OOjaZcCyLHYvcfYIxLXbs8cAxx7GsY40JxrToscWkYhpZNjV/6x4r+o6399/hr/Tzf5Xkw0nuN8nfwyrt29SfU6zFPh6mfN3t4yG+y4mcew2mxVBr7e2ttdf3s7f00+PSHbAel+TmvuzGJMf35WNXVWcluT3dP6Q50xTjtiT/Nsl9qupXqupNSY6ZshhvS/KVJJv6+U1JPpHk9EwwxtbaJTnwtzfnUJ/b2D/ThWI8xG8nk4hxg1vq5/nUJF9srX2utfbZJF9K8rQkaa09t7X2tf5187+vSVnxflXVNyR5RZL/OpaIl2bF+5Xk2Um+mOSHquqyJD+f5KNrHfhhrMZ+zf3tbcqBuvhv1ixi1tQixyaTtOCxSGvtKxOMabFjj38ZZxBHcKwxkZgOc2wxkZiSqfxb58g9pJ9+tp/+a5KHJvnxrPNj1/VwTrFSi/1GFyvPOtzHZLrOvQaTGJrn/HQHsD+d5KS+7I5505MyZlV1YpKfSPKieYumJsZ0V+yT5OjW2i8k+XKSK5M8sC+feIyttX9K8nNJHllVr0myNd0J5TR9jnMOFdM0xnt+Dvx2kumMcT1b6ud50siyudcd9JqqOj7JU5K8NV0rm0lajf36pSSvbq3duCYRHpnV2K8tSY5N8rYk/yvJzyT57dUOdJlWY79+JckH0+3TLyd5d5K3rHqkrLlDHJtM0pZ+etCxSFU9fFIBLXbs0Vr74qRiGjHt/6vPz8HHFhMxpX/rHLl399MHzZt+vZ9O6+/hSK23c4rVtlH38fyM6dxrcImhqvov6a5oPrK19pYkN/WLjp43vWn+umPw1HRf/CuSPLEvOy/TFeNc1v0T/fTjSb6hfyRTEGNVbU/XDPgVrbVnpUtc/Ua6lk2jsU3yc5xzqO92mr73hX47o7FMRYwbwFI/z5tGls297s7XVNUD0v3d/3aSJ0z4Knqywv2qqnskOSPJ91bVXNLkPtWNb3OftQh4iVbj+xqtUz/eP3/MKsZ4JFZjv/4s3ZXZ/5Tuf9t/SPLqVY+UcVjw2KSqzptcSIseizx6MuEsfuxRVY+dVEwjpvZ/9SLHFpMyjX/rHKHW2juT/FCSB1bVr+RA671P9dOp+z2s0Lo5p1gjG24fx33uNZjEUFXdr29q/Ogkz09yXFXtTnJ1ki8kObF/6f3TNQe+etwxttb+d2vtqa21H093UJ10Y4RMTYzp+sz/S7pxMJJk7qTsHZmeGOdaL32+n36hn3400xPjnEN9t1PxvR/it5NpiXEDWfTzrKorquoH+vI3Jjm2qr6xqr4pyT2SvCFJquqZSXYn+Z0k16TronTB2PZgYSvar9bal1pr/7G19uN9/Zgk/9LPj7Wbxjwr/r6SXNVP750D9emku5Ktxn49MMnX0nXJmKuD55LzrCOLHZu01i6bYFiLHYtM8rez2LHHNPzdT93/6sMcW0zElP6tc4Sq6p5JPtVa+4G+ZeHX0n2vU/d7WCVTf06xxjbMPk7s3GvSAy6N65GuGVab97i1X/b4JNcl2Znk+iRnTDjWH0w3QFrrv+THTVOMSb47Xd/rnUk+kuQF0/Q5pjs5+d0k7+1j2ZvkRZOOMck5OTAg64eSvOxwMY073oViPNRvZ9Kf6UZ8LPR5pmv+/E9J/nv/muPSJX5e339fv53k2H7ZvgW+rwvW+371y4/v/yZbktkkv7re9yvdOCS/keSKdAm9a5Js3QD79X3p6uA/SPInSd6e5OGT3i+PFf1N3OXYZMLxLHgsMsF4Fj32GHMcyz7WmERMOcyxxaQ+p37ZVP2texzxd3y//vf420lele5i+336Zev62PVIfufrbZ8PsY+H+u2uq31cbH8OVz+u1X5Wv3EAAAAABmYwXckAAAAAOJjEEAAAAMBASQwBAAAADJTEEAAAAMBASQwBAAAADJTEEAAAAMBASQwxMVV1aVV9rqr+x7zyh1bVvqr6clV9oqp+cFIxAgAAwEYmMcREVNW3JzknyZ8n+Z9VdY+RxZ9L8mNJHp3kC0l+dfwRAhvVYknpJawnaQ1MvSOt44CNpaqeVVUfrKqvVtVfV9VD1+h9LqqqVlU3V9Xr+7LHVtU7qurqqvq2vuzEqrq2qm7vX3/6WsTDkZEYYk0sVEHM889JPpTkvyX5aJKvzC1orf1Ta+1t/fLZJP+336bKBFiRwySlD0fSGphqK6zjgA2iqn4myWXpzqX+Jsmjkuxc47d9S2vt6f3zP0jy40n+vyS/lSSttZtba6cnuXmN4+AISAxxSFV1VH91vFXVg+ct+9W+fE9V1SKbGK0gRn1nugrqpiT3bK19bd62fyLdidejkrwxUZkAh7eSpPThSFoDi6nO5/o6YE2uyo+816HquUXrOHUVDENV3T/JS5L8U5Iz0tUHSXL0OMNI0vrncg7rgC+JQ2qtfTXJ3/ez3zZXXlUnJbmgn31Ba61liarqbkl+ZaTo5Kq657yXvTbJv0/yV0l+6xCJJ4CFHFFS+nAkrYFFPCjJ8UnuSPIPY3rPheq5Res4dRWsH1V1bFW9uKr+oaq+UFXXVdXfVNWXqup+h1n97CR3T9dy8GtJfrgvf9Vh3nNTVX2tqv6uqr5zpPy/98nk31nGLpyXZFe688WfXMZ6TIjEEEvxoX76kJGyi5Icm+Sq1to7lrm9ZyZ5eJJbk/xLuozynVfXquq70yWhvpTuAOv25SSeABaylKR0VT2ov5o+//Gg/iWS1sBCTuun/9Bau2MSASzxwhuwPvxhkl9Il9h5X5LHJtmW5JLW2j8fZt3H9NO/Tddq6HlJ3pTkdYdZ7xuTXJPkW5L8TJL0dcjz010Uu2ipwbfW3t5aO7219r2ttb1LXY/JkRhiKT7cT+cGDvuWJM9OV1H93HI2VFVHJ/nlfnbnyLZHm12fmuRPk3wwyUnpMs7AQFXVN1TVC6rq7/sBFD9VVUdy9emQSekkaa19srW2aYHHJyWtYWOrqjOq6n1V9dmq+ko/2PwLlrj6XGLok1X1B/0V/g/39cZS3vtpVXVDv95tVbX7CHbhsHUcMP2q6iFJnpTk9iRnJnlOv+iOJL+2hE3M1Uf/mORdSb6Y5ClJfv1QK7XWPtO/7utJHtkX/1SS+yT59dbaTUvfC9YbiSGWYn6LoZckOSrJ77XWPrzwKot6TrrEz63pEkNzza0fNveC1trvt9ZO6E/GHt5au/pIAwc2hDckeWmSG9MljR+Y5H9X1balbmCJSenDkbSGje270tUzr09yebrf+Uur6hFLWPff9tPvSdeF48Pp6pfXHm7Fqvrv/ft9e5LdSa5OcsxyAl+lOg6YDo/tp9e21v5fkpl+/vLW2qcOtWJfF8yds93QWntakhf18z9wuDdurX0+ySeSnFJVm9O1FvpMlpaQYh07atIBsC7MHVw8pKoelS6T/MUkv7ScjfR3xviFfnZna222qu6SGAKYU1VPS1fnXN1a+/6+7BNJTkl34LNniZuan5R+YLoDryXXPa2130/y+0t9PbDuvCLJ/0tXv3w5Xaubk5KcuIR1567Q/8/W2our6pvTdeF4UFXdt7V2y0IrVdXWJC9O8tUkj2utvacvX+4gsSuu44Cp8YB+OpcEmmu5+I9LWPdbc2CQ6blz/WP76eG6oM35QJKtSV6Z5N5J/mtr7bYlrss6pcUQS/HxdF0n7p1kbtCxl/cZ7OX4qXQHWElyUVW1JBf3865oAQt5aj8dvep+XD+9cSkbWCgpnQVaKwLD1d/m/ZNJXp3kF9ONyTF3zPL3i63Xr3v3dGNyJAeSx5v66R3pkjWLOTvJNyT5q7mkUJIsZ5widRxsOLf20++rqouT/GA/f+bcmIf9HQZbVV0wb925JPXXk+yuqtfmQIuhlx9m3Tkf7KdPTVeX7FrBvrBOSAxxWK21r6e75WmSfEeOoDlhVc3kwHhE16drMn15kj/uywyQCCxkbnyO25Okqr4nyQlJPpvknUvchqQ0cDg/n+Sb0rUaOi4HunJ8Pt0FskP5thy4Mv/Ffjp3F6Br+ju8Lmbu2OcecwVVdbd+IOmlUsfBxvJ7Sd6WrrXizya5IcmfpLvr4H3718zd/GJ+/TKXGHplunO2p6RLbj+ztXb5Ydad88GR5/9jUgPqM166krFUH0ry7/rnv3wEzQlfmORe6bqlfU9r7StJ0t/RZzbdLV4fmuQ9i24BGJSquk+S+6e76vXyqjorB66avXApByoLJKXnBk68e7q+9idX1T37PvXAcH1TP/2+dImhs/r5vXODzFfVtUkel+SnW2s7R9Y9beT5lVX16XRX2u9If6X+EOte20//fVW9Lcm+dIO+LmkMNXUcbDyttc+mG69sQX3i+OHpWk7/wbzFc/XRe1pr/22Z6875TD/9dGvtjcsInXVMYoglaa09K8mzVrD+z6e7Gje/vKW7NSLAfN/eT29Id3v456Yb/+P5rbVLlrgNSWlgKX453dhCD0iXGLoyyY50Y23MOdwV+tf36z8xyUeS/Gxr7W8OtW5r7bqqena6MUS+O12998bW2teWGLc6DobnO9IN8fF9rbVb5y2bq4/+7xGsO2eupeEHFlk+363puuJuq6rXt9aevtCLqurEdPXkV/vX377E7TMGEkOslVuzhApiOVQmMDhzd/n5SGvtBTkw+OKSSUoDS9Fae1eSfzOv+L/MPTnUVfbW2s/lQKuduzjcFfrW2u+l6zpyJHGr42BgWmvvy4Fk852q6huTPKif/ej85Ydad5655NLeJcazM92g94d73c1JTl/KNhk/iSHWxFIriGVuU2UCwzLXYmixq14LuTWrnJQ+HElrGITvyOGvsq/Fugu5NUdQz6mrYGNrrX0uh0/6LGU7z0s3AD8DUn23aQCYKlX13iSPSPKE1tpbJh0PAABsRBJDAAAAAAPldvUAAAAAAyUxBAAAADBQEkMAAAAAAyUxBAAAADBQEkMAAAAAAyUxBAAAADBQEkMAAAAAA/X/A7P8sVyDk+xZAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1440x504 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(20,7))\n",
    "tc.plot.cell()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4cb440b6-aa79-4369-80d6-141dcfc37696",
   "metadata": {},
   "source": [
    "### Create an atomicrex job"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "56951cee-038f-44e7-bb11-b20841036f81",
   "metadata": {},
   "outputs": [],
   "source": [
    "job = pr.create.job.Atomicrex(\"FitAl\", delete_existing_job=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9807a140-dc20-4c4a-b22c-dcc89c789425",
   "metadata": {},
   "source": [
    "### Training Data\n",
    "Set the training data. This can also be done structure by structure to set other fit properties and weights, but here we simply load the TrainingContainer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "adbcf0a6-1ef8-4697-93d5-bd9346aad1ab",
   "metadata": {},
   "outputs": [],
   "source": [
    "job.structures.add_training_data(tc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d275454-0b14-4862-b4f0-8b7166852f96",
   "metadata": {},
   "source": [
    "Set the potential type. In this case an EAM potential"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "e90476e0-54cf-4a6e-9424-bf282517a4b5",
   "metadata": {},
   "outputs": [],
   "source": [
    "job.potential = job.factories.potentials.eam_potential()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1cd689cb-0d35-4b5c-93e6-e0112a5382b2",
   "metadata": {},
   "source": [
    "### Functions\n",
    "Reminder: $E = \\sum_{ij}V(r_{ij}) + \\sum_i F(\\rho_i)$ with $\\rho_i = \\sum_j \\rho(r_{ij})$\n",
    "\n",
    "It is necessary to define a pair potential, an electronic density function and an embedding function.\n",
    "For all of those it is possible to choose between different functional forms.\n",
    "Classic pair potentials are physically motivated and have a very limited number of paramaters that can often be derived from an experimentally measurable quantity.\n",
    "Splines or polynomials offer more flexibility, but can lead to unphysical oscillations or overfitting. Compared with the machine learning potentials shown later the number of parameters is very low no matter which functions you choose.\n",
    "\n",
    "In this case a generalized morse function is used for the pair interaction. It has the form\n",
    "\n",
    "$(\\frac{D_0}{S-1}exp(-\\beta \\sqrt{2S}(r-r_0))-\\frac{D_0S}{S-1}exp(-\\beta\\sqrt{2/S}(r-r_0)))+\\delta $\n",
    "\n",
    "The parameters in the morse potential can be derived from phyiscal quantities, here they are just educated guesses. For example $r_0$ is the equilibrium distance of a dimer. The nearest neighbor distance in fcc Cu is about 2.8 $\\mathring A$ so it is taken as initial value.\n",
    "In the case of analytic functions the initial parameter choices should not matter too much, since the functional form is constrained.\n",
    "\n",
    "The electronic density will be a cubic spline. The embedding function will be $-A*sqrt(\\rho)+B*rho$, which can be defined as a user function.\n",
    "\n",
    "The pair function and the electron denity and their first derivatives are required to smoothly approach 0 at the cutoff distance $r_{c}$\n",
    "For this purpose the pair function is screened by multiplying with the function:\n",
    "\n",
    "$\\Psi(\\frac{r-rc}{h})$ where $\\Psi(x) = \\frac{x^4}{1+x^4}$ if $x<0$ else $\\Psi(x)=0$\n",
    "\n",
    "For the spline it is necessary to set a node point with y value 0 at the cutoff "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "96a1900f-f4d2-43b6-87dd-cf5570517836",
   "metadata": {},
   "outputs": [],
   "source": [
    "morseB = job.factories.functions.morse_B(\"V\", D0=0.15, r0=3.05, beta=1.1, S=4.1, delta=-0.01)\n",
    "morseB.screening = job.factories.functions.x_pow_n_cutoff(identifier=\"V_screen\", cutoff=7.6)\n",
    "morseB.parameters.D0.min_val = 0.05\n",
    "morseB.parameters.D0.max_val = 1.55\n",
    "\n",
    "morseB.parameters.r0.min_val = 2.6\n",
    "morseB.parameters.r0.max_val = 3.1\n",
    "\n",
    "morseB.parameters.S.min_val = 1.5\n",
    "morseB.parameters.S.max_val = 4.5\n",
    "morseB.parameters.delta.max_val = 0.005"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "252c78d0-9230-4e23-83a1-20304f1630b5",
   "metadata": {},
   "source": [
    "It is also possible to plot most of the functions. This can help to judge if the initial parameters are reasonable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "1c380b21-78e8-404c-a9ae-a5b6d6ea85fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(<Figure size 720x504 with 1 Axes>,\n",
       " <AxesSubplot:xlabel='r [$\\\\AA$]', ylabel='func(r)'>)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "morseB.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b93e8548-cdcf-4d51-bbc0-ae7e5646cd02",
   "metadata": {},
   "outputs": [],
   "source": [
    "rho = job.factories.functions.spline(identifier=\"rho_AlAl\", cutoff=7.6, derivative_left=-0.2, derivative_right=0)\n",
    "## the spline requires node points and initial values\n",
    "init_func = lambda r: np.exp(-r)\n",
    "nodes = np.array([1.0, 2.2, 2.7, 3.2, 4.0, 5.0])\n",
    "init_vals = init_func(nodes)\n",
    "rho.parameters.create_from_arrays(x=nodes, y=init_vals, min_vals=np.zeros(len(nodes)), max_vals=np.ones(len(nodes)))\n",
    "# set node point at cutoff\n",
    "rho.parameters.add_node(x=7.6, start_val=0, enabled=False)\n",
    "rho.derivative_left.max_val = 0.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "56710703-5e6e-485e-a9d9-bc2c4bedac5b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# User function for embedding term\n",
    "F = job.factories.functions.user_function(identifier=\"F\", input_variable=\"r\")\n",
    "F.expression = \"-A*sqrt(r)+B*r\"\n",
    "F.derivative = \"-A/(2*sqrt(r))+B\"\n",
    "F.parameters.add_parameter(\"A\", start_val=3.3, min_val=0.0)\n",
    "F.parameters.add_parameter(\"B\", start_val=1.8, min_val=0.0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "865bca67-41c4-4bb1-b357-ba2c4d37ce8b",
   "metadata": {},
   "source": [
    "Assign functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "ce82c058-99b1-4044-89e4-d5b9fc6191d5",
   "metadata": {},
   "outputs": [],
   "source": [
    "job.potential.pair_interactions[morseB.identifier] = morseB\n",
    "job.potential.electron_densities[rho.identifier] = rho\n",
    "job.potential.embedding_energies[F.identifier] = F"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3fa3875d-c6ac-4a93-8917-0219be6bd90e",
   "metadata": {},
   "source": [
    "Set a fit algorithm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "d0c70020-3999-482a-9fc3-037d6b4e5be9",
   "metadata": {},
   "outputs": [],
   "source": [
    "job.input.fit_algorithm = job.factories.algorithms.ar_lbfgs(max_iter=10000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "6e161ce8-8d33-4eea-8d41-889287ccb7c5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The job FitAl was saved and received the ID: 738791\n"
     ]
    }
   ],
   "source": [
    "job.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd20a5b9-74f8-4609-96f8-d8c84f7a6976",
   "metadata": {},
   "source": [
    "Have a look at some of the outputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "8a895b83-d90e-489f-8382-393a520ae0a3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3366.772277399672"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(job.output.iterations, job.output.residual)\n",
    "job.output.residual[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "74465658-bc69-486c-a327-4cd7a5790ec7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/json": {
       "electron_densities": {
        "rho_AlAl": {
         "cutoff": "7.6",
         "derivative_left": {
          "enabled": "True",
          "final_value": "-0.2003639909380159",
          "fitable": "True",
          "max_val": "0.0",
          "min_val": "None",
          "param": "'derivative-left'",
          "reset": "False",
          "start_val": "-0.2",
          "tag": "None"
         },
         "derivative_right": {
          "enabled": "False",
          "final_value": "None",
          "fitable": "True",
          "max_val": "None",
          "min_val": "None",
          "param": "'derivative-right'",
          "reset": "False",
          "start_val": "0",
          "tag": "None"
         },
         "identifier": "'rho_AlAl'",
         "parameters": {
          "node_1": {
           "enabled": "True",
           "final_value": "0.3678099451630189",
           "fitable": "True",
           "max_val": "1.0",
           "min_val": "0.0",
           "param": "'node'",
           "reset": "False",
           "start_val": "0.36787944117144233",
           "tag": "None",
           "x": "1.0"
          },
          "node_2.2": {
           "enabled": "True",
           "final_value": "0.1116747345072877",
           "fitable": "True",
           "max_val": "1.0",
           "min_val": "0.0",
           "param": "'node'",
           "reset": "False",
           "start_val": "0.11080315836233387",
           "tag": "None",
           "x": "2.2"
          },
          "node_2.7": {
           "enabled": "True",
           "final_value": "0.07145424033657911",
           "fitable": "True",
           "max_val": "1.0",
           "min_val": "0.0",
           "param": "'node'",
           "reset": "False",
           "start_val": "0.06720551273974976",
           "tag": "None",
           "x": "2.7"
          },
          "node_3.2": {
           "enabled": "True",
           "final_value": "0.04425295799860187",
           "fitable": "True",
           "max_val": "1.0",
           "min_val": "0.0",
           "param": "'node'",
           "reset": "False",
           "start_val": "0.04076220397836621",
           "tag": "None",
           "x": "3.2"
          },
          "node_4": {
           "enabled": "True",
           "final_value": "0.01922526131909083",
           "fitable": "True",
           "max_val": "1.0",
           "min_val": "0.0",
           "param": "'node'",
           "reset": "False",
           "start_val": "0.01831563888873418",
           "tag": "None",
           "x": "4.0"
          },
          "node_5": {
           "enabled": "True",
           "final_value": "0.006425127502193282",
           "fitable": "True",
           "max_val": "1.0",
           "min_val": "0.0",
           "param": "'node'",
           "reset": "False",
           "start_val": "0.006737946999085467",
           "tag": "None",
           "x": "5.0"
          },
          "node_7.6": {
           "enabled": "False",
           "final_value": "None",
           "fitable": "True",
           "max_val": "None",
           "min_val": "None",
           "param": "'node'",
           "reset": "False",
           "start_val": "0",
           "tag": "None",
           "x": "7.6"
          }
         },
         "species": "['*', '*']"
        }
       },
       "embedding_energies": {
        "F": {
         "cutoff": "None",
         "derivative": "'-A/(2*sqrt(r))+B'",
         "expression": "'-A*sqrt(r)+B*r'",
         "identifier": "'F'",
         "input_variable": "'r'",
         "is_screening_function": "False",
         "parameters": {
          "A": {
           "enabled": "True",
           "final_value": "3.300380222615908",
           "fitable": "True",
           "max_val": "None",
           "min_val": "0.0",
           "param": "'A'",
           "reset": "False",
           "start_val": "3.3",
           "tag": "None"
          },
          "B": {
           "enabled": "True",
           "final_value": "1.941342723495742",
           "fitable": "True",
           "max_val": "None",
           "min_val": "0.0",
           "param": "'B'",
           "reset": "False",
           "start_val": "1.8",
           "tag": "None"
          }
         },
         "screening": "None",
         "species": "['*', '*']"
        }
       },
       "export_file": "'output.eam.fs'",
       "identifier": "'EAM'",
       "pair_interactions": {
        "V": {
         "identifier": "'V'",
         "is_screening_function": "False",
         "parameters": {
          "D0": {
           "enabled": "True",
           "final_value": "0.1530946632052217",
           "fitable": "True",
           "max_val": "1.55",
           "min_val": "0.05",
           "param": "'D0'",
           "reset": "False",
           "start_val": "0.15",
           "tag": "None"
          },
          "S": {
           "enabled": "True",
           "final_value": "4.099994790262965",
           "fitable": "True",
           "max_val": "4.5",
           "min_val": "1.5",
           "param": "'S'",
           "reset": "False",
           "start_val": "4.1",
           "tag": "None"
          },
          "beta": {
           "enabled": "True",
           "final_value": "1.354779328092613",
           "fitable": "True",
           "max_val": "None",
           "min_val": "None",
           "param": "'beta'",
           "reset": "False",
           "start_val": "1.1",
           "tag": "None"
          },
          "delta": {
           "enabled": "True",
           "final_value": "-0.01532934405060739",
           "fitable": "True",
           "max_val": "0.005",
           "min_val": "None",
           "param": "'delta'",
           "reset": "False",
           "start_val": "-0.01",
           "tag": "None"
          },
          "r0": {
           "enabled": "True",
           "final_value": "3.051226104734049",
           "fitable": "True",
           "max_val": "3.1",
           "min_val": "2.6",
           "param": "'r0'",
           "reset": "False",
           "start_val": "3.05",
           "tag": "None"
          }
         },
         "screening": {
          "identifier": "'V_screen'",
          "is_screening_function": "True",