{ "cells": [ { "cell_type": "code", "execution_count": 4, "id": "c7070975-920c-426e-8f2d-19f9e70fec81", "metadata": {}, "outputs": [], "source": [ "#|default_exp app" ] }, { "cell_type": "markdown", "id": "fc3cd6f5-7bb2-4ef3-bb8f-5c05043949d9", "metadata": {}, "source": [ "# Bear Classifier App\n", "\n", "This notebook creates uses an exported model `export.pkl` for a bear classifier, to create a python script which can run the model on HuggingFace. " ] }, { "cell_type": "code", "execution_count": 2, "id": "4defcbc0-6c1d-413e-a858-5aaa7c73d994", "metadata": {}, "outputs": [], "source": [ "#|export\n", "from fastai.vision.all import *\n", "import gradio as gr" ] }, { "cell_type": "markdown", "id": "a9ff5538-2fa7-428e-8464-9a5e26debc09", "metadata": {}, "source": [ "Let's take a look at an example picture:" ] }, { "cell_type": "code", "execution_count": 3, "id": "209f8ab6-3fa8-458a-bcfe-ed60e35fd480", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAABsCAIAAACzYCrFAAAKMGlDQ1BJQ0MgUHJvZmlsZQAAeJydlndUVNcWh8+9d3qhzTAUKUPvvQ0gvTep0kRhmBlgKAMOMzSxIaICEUVEBBVBgiIGjIYisSKKhYBgwR6QIKDEYBRRUXkzslZ05eW9l5ffH2d9a5+99z1n733WugCQvP25vHRYCoA0noAf4uVKj4yKpmP7AQzwAAPMAGCyMjMCQj3DgEg+Hm70TJET+CIIgDd3xCsAN428g+h08P9JmpXBF4jSBInYgs3JZIm4UMSp2YIMsX1GxNT4FDHDKDHzRQcUsbyYExfZ8LPPIjuLmZ3GY4tYfOYMdhpbzD0i3pol5IgY8RdxURaXky3iWyLWTBWmcUX8VhybxmFmAoAiie0CDitJxKYiJvHDQtxEvBQAHCnxK47/igWcHIH4Um7pGbl8bmKSgK7L0qOb2doy6N6c7FSOQGAUxGSlMPlsult6WgaTlwvA4p0/S0ZcW7qoyNZmttbWRubGZl8V6r9u/k2Je7tIr4I/9wyi9X2x/ZVfej0AjFlRbXZ8scXvBaBjMwDy97/YNA8CICnqW/vAV/ehieclSSDIsDMxyc7ONuZyWMbigv6h/+nwN/TV94zF6f4oD92dk8AUpgro4rqx0lPThXx6ZgaTxaEb/XmI/3HgX5/DMISTwOFzeKKIcNGUcXmJonbz2FwBN51H5/L+UxP/YdiftDjXIlEaPgFqrDGQGqAC5Nc+gKIQARJzQLQD/dE3f3w4EL+8CNWJxbn/LOjfs8Jl4iWTm/g5zi0kjM4S8rMW98TPEqABAUgCKlAAKkAD6AIjYA5sgD1wBh7AFwSCMBAFVgEWSAJpgA+yQT7YCIpACdgBdoNqUAsaQBNoASdABzgNLoDL4Dq4AW6DB2AEjIPnYAa8AfMQBGEhMkSBFCBVSAsygMwhBuQIeUD+UAgUBcVBiRAPEkL50CaoBCqHqqE6qAn6HjoFXYCuQoPQPWgUmoJ+h97DCEyCqbAyrA2bwAzYBfaDw+CVcCK8Gs6DC+HtcBVcDx+D2+EL8HX4NjwCP4dnEYAQERqihhghDMQNCUSikQSEj6xDipFKpB5pQbqQXuQmMoJMI+9QGBQFRUcZoexR3qjlKBZqNWodqhRVjTqCakf1oG6iRlEzqE9oMloJbYC2Q/ugI9GJ6Gx0EboS3YhuQ19C30aPo99gMBgaRgdjg/HGRGGSMWswpZj9mFbMecwgZgwzi8ViFbAGWAdsIJaJFWCLsHuxx7DnsEPYcexbHBGnijPHeeKicTxcAa4SdxR3FjeEm8DN46XwWng7fCCejc/Fl+Eb8F34Afw4fp4gTdAhOBDCCMmEjYQqQgvhEuEh4RWRSFQn2hKDiVziBmIV8TjxCnGU+I4kQ9InuZFiSELSdtJh0nnSPdIrMpmsTXYmR5MF5O3kJvJF8mPyWwmKhLGEjwRbYr1EjUS7xJDEC0m8pJaki+QqyTzJSsmTkgOS01J4KW0pNymm1DqpGqlTUsNSs9IUaTPpQOk06VLpo9JXpSdlsDLaMh4ybJlCmUMyF2XGKAhFg+JGYVE2URoolyjjVAxVh+pDTaaWUL+j9lNnZGVkLWXDZXNka2TPyI7QEJo2zYeWSiujnaDdob2XU5ZzkePIbZNrkRuSm5NfIu8sz5Evlm+Vvy3/XoGu4KGQorBToUPhkSJKUV8xWDFb8YDiJcXpJdQl9ktYS4qXnFhyXwlW0lcKUVqjdEipT2lWWUXZSzlDea/yReVpFZqKs0qySoXKWZUpVYqqoypXtUL1nOozuizdhZ5Kr6L30GfUlNS81YRqdWr9avPqOurL1QvUW9UfaRA0GBoJGhUa3RozmqqaAZr5ms2a97XwWgytJK09Wr1ac9o62hHaW7Q7tCd15HV8dPJ0mnUe6pJ1nXRX69br3tLD6DH0UvT2693Qh/Wt9JP0a/QHDGADawOuwX6DQUO0oa0hz7DecNiIZORilGXUbDRqTDP2Ny4w7jB+YaJpEm2y06TX5JOplWmqaYPpAzMZM1+zArMus9/N9c1Z5jXmtyzIFp4W6y06LV5aGlhyLA9Y3rWiWAVYbbHqtvpobWPNt26xnrLRtImz2WczzKAyghiljCu2aFtX2/W2p23f2VnbCexO2P1mb2SfYn/UfnKpzlLO0oalYw7qDkyHOocRR7pjnONBxxEnNSemU73TE2cNZ7Zzo/OEi55Lsssxlxeupq581zbXOTc7t7Vu590Rdy/3Yvd+DxmP5R7VHo891T0TPZs9Z7ysvNZ4nfdGe/t57/Qe9lH2Yfk0+cz42viu9e3xI/mF+lX7PfHX9+f7dwXAAb4BuwIeLtNaxlvWEQgCfQJ3BT4K0glaHfRjMCY4KLgm+GmIWUh+SG8oJTQ29GjomzDXsLKwB8t1lwuXd4dLhseEN4XPRbhHlEeMRJpEro28HqUYxY3qjMZGh0c3Rs+u8Fixe8V4jFVMUcydlTorc1ZeXaW4KnXVmVjJWGbsyTh0XETc0bgPzEBmPXM23id+X/wMy421h/Wc7cyuYE9xHDjlnIkEh4TyhMlEh8RdiVNJTkmVSdNcN24192Wyd3Jt8lxKYMrhlIXUiNTWNFxaXNopngwvhdeTrpKekz6YYZBRlDGy2m717tUzfD9+YyaUuTKzU0AV/Uz1CXWFm4WjWY5ZNVlvs8OzT+ZI5/By+nL1c7flTuR55n27BrWGtaY7Xy1/Y/7oWpe1deugdfHrutdrrC9cP77Ba8ORjYSNKRt/KjAtKC94vSliU1ehcuGGwrHNXpubiySK+EXDW+y31G5FbeVu7d9msW3vtk/F7OJrJaYllSUfSlml174x+6bqm4XtCdv7y6zLDuzA7ODtuLPTaeeRcunyvPKxXQG72ivoFcUVr3fH7r5aaVlZu4ewR7hnpMq/qnOv5t4dez9UJ1XfrnGtad2ntG/bvrn97P1DB5wPtNQq15bUvj/IPXi3zquuvV67vvIQ5lDWoacN4Q293zK+bWpUbCxp/HiYd3jkSMiRniabpqajSkfLmuFmYfPUsZhjN75z/66zxailrpXWWnIcHBcef/Z93Pd3Tvid6D7JONnyg9YP+9oobcXtUHtu+0xHUsdIZ1Tn4CnfU91d9l1tPxr/ePi02umaM7Jnys4SzhaeXTiXd272fMb56QuJF8a6Y7sfXIy8eKsnuKf/kt+lK5c9L1/sdek9d8XhyumrdldPXWNc67hufb29z6qv7Sern9r6rfvbB2wGOm/Y3ugaXDp4dshp6MJN95uXb/ncun572e3BO8vv3B2OGR65y747eS/13sv7WffnH2x4iH5Y/EjqUeVjpcf1P+v93DpiPXJm1H2070nokwdjrLHnv2T+8mG88Cn5aeWE6kTTpPnk6SnPqRvPVjwbf57xfH666FfpX/e90H3xw2/Ov/XNRM6Mv+S/XPi99JXCq8OvLV93zwbNPn6T9mZ+rvitwtsj7xjvet9HvJ+Yz/6A/VD1Ue9j1ye/Tw8X0hYW/gUDmPP8uaxzGQAAjZ1JREFUeJyM/WeYZOd5Hgi/6eRTuaqrc0/35AAMciQAAiRFiBQpUpGSJSuYli05SCvJ65W932rXa6/tz5b92WtLtkVJpkVKoiSKIglGEDljgAmY3NM5VVeOp056w/fjmTooDGRfrh+4Bt3VVW94wv3cTzj4Ax/4gOM4tm0TQhBCmqZZliWllFJOTExks9lsNuu6bhiGcRz7vr+6uiqEoJR2Oh3f9zVNQwiFYeh5nlKKMUYIYYwppaSUtm3ncrlMJuM4zqFDhyqVSrVaNQxDStntdtPpdKFQMAyDEKJpWhAEvu+32+0gCAzDcBwHfhWGoZQSY0wIoZQGQRCGIWPM931d15VShJBsNpvJZBhjUsrhcNhsNpVSsJ0gCKIoymQynPNMJkMpTaVSlFKMcTqdzmazuq5zzoMgiOOYMVatVl988cWdnR3f96WUnHPYS7IGjDFCCP63VCp95CMfWVpaQggxxhBCjUaj0+kIITDG+Xy+XC6bpqmUCoIA3uB5Hnxdp9Op1+uNRmM4HMKhwcHGcdzpdFzXzWazjDFd1/v9Puc8iqIbN24kx4sxdhxnZmamWCymUqmtra3Nzc1+v48xho+KoigIAtM0TdPEGOu6rmkabEHXdUppLpebmZmRUk5PT8Nl+b5PCImiKAzDIAgQQoSQTqfT6/XgtB3HEUJ0Op3t7e2NjY0oiphpmpZlWZbl+z5jzDRNx3EwxhhjwzAwxpxzjLFpmoZhCCGKxWIcx/1+3/f9KIqEELquY4wty8IYx3EMggg71DRN0zT4dzqddhzHsiwQNSGEbdvlctkwDIRQEASwNyEEXI+UEj5c0zTYkq7rtm3ruj4YDOD+KKW+7/u+b5pmLpeDmyaE5PN5xhisv9VqNRoNIYRhGCDiIMGapoF0wpphv4ZhTE9PF4vFSqVCCIEPhNXCaSqlQDRhkZ7nXb9+vVarHTt2zHVdxhhsGfZICLFtG5YkhIAT9jxPCKGU6na7zWZzOBwOh0OQP1iV7/tCiDiOQXY9z6OUZrNZ3/fhmhBCsHfHcUzTDMOQUgqqK6WklIKmwW3C7YAu6bqOEBJCJEsKgiCVSk1PT4NGhWE4HA6llP1+X9f1KIpASUzTjKKIEAJyD1fvuq4QgrmuC7cihCCEmKbJGOOc27ataRql1LZtWAfnfDAYFAoFpRTYiTiO4Ro0TWOMgYbBsjjnlFIpJWwMtlQsFg3DaDQanPN0Om1ZFsgEfG8URfV63TRNIcRwOIQ9UErhc0DOYEkgW6Zpwu3CtYFZiuNYKQWHpet6GIYgx4QQy7IQQqAJSinDMDRNA02FFYIESCknJydv3LgBP4e7BHmFi8djrziOm82m53mMsRMnTsCd2bYNUsI573Q6CKEoisCEUEqjKIrjGOQJDBWIqed5cJ6wIzhtsECJTsJ1wI0UCoWZmRkQIDAqrVYLvggODeQMY5ycHuccdpRcChxgNpvVNA1EJ5/Pc84Nw+j1ekopy7LgqMEm+aNXq9XinDPYsGEYsOJE1ZKvRwg5juM4DpjWTCYD36TrOugxvAeuljEGKzZNMwgCUMEwDMGGw3tSqRR8EewE1gr/ZYylUin4XlBi0zTBPzLGwHmBkYcXXDYcECgNCAQYrTAMwbCBcZZSIoTy+bxhGKlUCsTLMIzhcAjvBGFVSoHNtywLDhSkAf4cvgv2AhvnnFer1ZmZmcFgEEWRZVlwSdlsNo5jMGkg0OBQ4Hj7/T4cMpwzyL0QotVqZbPZQqEA5s33fcdxCCFxHINGBUFAKbUsa25ubmZmJpvNgpXNZrO1Wm1/fx+0GhYJSgtL1XUdrjiOY9gpSA9YMk3T4I5A0+AQNE1zXRcOFv5K13VYJ+fcdd1WqxUEAQPpppTCRSqloiiCOwDxB6MNRi+bzYKwT05ODgaDTqcDHhfeDG+Dxdm2DaoAQhnH8WAwyOfzYKUppbquw5vhcOM4Bq9s2zZoZ6fTiaIIbksIkUqlwDhpmgbYCDAZaC3nHIAFnAVsEu4b1hMEARhR2Fo6nQZxhw8HawTWnjGWyWSSr0gMPrgwsEOJC0tcGyhuGIaA2OC4bdsGvw8fBcfb6/W63a5lWYwxAJe+78OvdF13XRcgRL/fB1MEegKnbRhG4pviOEYIWZaVyWRSqRTYIdBq8EdgYzjnsM7EU4Pcw8IGg4Gu651Op1AoEEKKxWLi3eBS+v1+Op0GJ8s5dxwH3tPr9Xq9XrPZZABf1OgFhhRQWC6XS6VSsFWQZVCFRqOhaZrjOKDxyR0D5Bw3S6BksJNarbawsGCapud5ANUBgMOKAe26rptOp8EJEkIAu4HVgTcDAtB1vdvtNhoNz/Py+Ty4FbC0cGRwBKBkURQhhNLpNIhRKpVyXRdMI6BCWAxID4hdOp22bRv0IQxD+GFi6mC/cH/wQ13X4ZThrMIwFEKA8ZBSgutECA0GA5BgAAwJzkusYzabhZ9wztvtNhhgKWUcx71eDyxBqVSCLcdxDKoOl1IqlcrlMhjLBKWB9sIXwWrhLmD9sEEhxMsvv3zw4MGTJ0/atg3RCdw4ACAA/gBDlVLguRzHmZ6eXl9fZ3BbCXwRQsAFg0VJp9OADGBXlmU1Gg3f97vdLoA7MJUgniA9iSyCpYH3gAcE1wA2DJwrLCj5HEopfA5gFAiawFSA+YXTBEn1fR9QCLgtxhh8OEB7ECmwUrARSqlpmqlUCmMcRRF8CKg42G34rsSDgxwkuCeJxWCpIFJwVUEQ9Ho9zrkQolQqQZzS6/Ucx8nn84DDwFrAaiGGBaMbx7Ft2/l8HpAfHAjEZXD4sDawMWBu0+k0WBoA4KBaYFFAXcHaJb4liWlgGYm+JR4DIbS9vX3ixAnHcUBnIAIF4wd3Ac4OJLJQKEAMZBgGA52Gc3RdF2IciPfCMAQkBRcJpiUIgn6/3+12YZXgWUFRYGUg+4nKgoAahpHL5dLpNPhEcGGgHOChYQ2gWGBpwAhhjMETB0EA2AtEBDAv7C2OY4hXEwDn+/77fSjgaMMwdF0HMAEr1DQNrCDcLmC1wWAAR3yL9MAFwBZA5TDGwD7ArhPnEoZhFEWGYZimmWhIYuwzmUziFsFTJ1KbxJv5fB4i8FQqZRhGt9sdDoee57VaLcMwwIT3+3243b29vUajAQKdLHUcSic2CX6SuGY4Q9d1IQ6FmA62BjeSeBXGGEDbYrEIytbr9dj4dxQKBV3Xi8Ui4CwwuZ1OB5wLIPnhcNjr9YBcAUMHmgfLTUxlgvkTCwR+AcIQWDc4IxBzsPmgrAAY4RoA+cMtwoeD/05wj67rpmm22+1EjMCLKaXgDtLpdK1Wa7VawG8Vi0VYD2wZ3FOyZghc9/f3u90uwMHx4040JAnmoyiybRtcDKW03+8LIcARg14NBgNw0Jxz+EzOOXgEEH0QL1AVxhhEN67ruq6by+Vgs4ZhFItF13VN0+z3+zs7Oxjj2dlZhBAcabvdBocO2AUkA+Q+cREJboNXgpAgdNd1fXt7+8iRI8Az2bYNKpQgh4QqA6eZyCI7fPhwt9vlnBcKBdAP8DsTExPAcZmmCfEh3EfiUGBxIJJoxEwk3Am8wEoncTjEqKCjySfArhIaA8A1qCbER8AaADZKbAnAFzAkQIckPsVxHNd1OefAqQRB4DgOWPs4joGflFJmMhlYM+Br+FL43pWVFWAi4PSTMAKkB+4D3g8WCKBPv9/3PA/ISYQQEBPD4RBCS8AAoCHwJ6BgybmBwZuYmIiiaHp6Gi4yk8mAFgE7YFnW7u7u2tqaUgocRaVS6ff7tm1PTEy0Wq2VlRXQtwQ1Ji843kSGwHCAPm9sbKTT6WaziTF+6KGHwKQB6UAphXPzPA+cFagNOCLf91kul2OMAS6GP4CIDv6MUgpumBCSSqUAt3c6ncFgoJRKOGK4OfDB42ATfgjvBPCYLAIgbUKEJOpi2/b09LSmabu7u/DbxK+DxiTuwHEc+KhsNgtynDh1sLpgGABswjvDMGy1WmCBwXCCBYK4AeSSMQYBfGL2E9uTwLskfINgO51O4xFRHoYhMFiu68ZxnM1mgb2FD0cjZgHOGawUgDnQ4XQ6HYahYRjlchlOzPM8gOHgarvdbrFYBP+enD9c2dzcXK1W6/V6II6JlR23PaCx8KtEKwApapr29ttvLy0tLS0tAXUCIgFybxgG+ByQLfhzzjnTdb1cLqfTac/zCCHA9Pi+v7+/D6gZiBwhRLVavXTp0t7eXqvVgsMC13OLXo6vOFmlaZpTU1MgMYDR4CYS8A5WcZzDAJcE2w6CIAgCAMKwH7gSIYRlWRA7AIdGCAGgALgSaNMwDAESwd+CD93Z2YGYHy4mOW7f9yHkAQlLzG1itG8xP+ACwLcCW6Hrei6XgysHfYX3gE9MNgX8beLu4bQnJibAWudyOdB+27YBegLfAXcEtwv77Xa7gK+BS4M7TgznLdh5/CewhUTuu90uQmh3dzebzQJYHN8ywBW4Jrhu13XL5TIDFjKXyyUgH2MMWZharaaUArDW7XaXl5eTkx1HJGAkEtScnC9csBzRoP1+H+g1OGjwZWBO4Cx83wfVHw6H3W4X3AoYHoAUSd4t2YPjOFNTU4CiwGskcQrGuNlsRlEE1CWIlxCi2+0CwwusRhJygzBJKV988cXl5WUA1Il6wFEmCE+NAmDY7MbGxtzcHCSPYM0JQzYYDJrNJiFkMBiAJwW1ATzhOA6oEMYYsloYY9u2wepTSlOplBzlUkzTnJ6eBj0HYYIFJCEtEMQgInCw8Id49EoWn/i1xJCAaTQM4/Lly+vr60ePHj19+jRYpsFgkCgJGeVkOOcQ0jLAFniUJtR1PZVKAYyCsHNiYgJiRQAoyZpgibD/hGFLxBxOHHwfvHNvb+/gwYNwHGBIwCvDuYO9gddwOOx0OmDAADaVSiWwDcPhMPlDIDYhLgNBj6II3AHQgCCCYRi6rgvcBsCper3uui44EYAjEDRomvbWW29985vf7Ha7iXHF72Of0SjmAJQghGg0GkB2QARAKc1kMv1+nzHW6XQgCTAcDoG9BAPveR6cOZA6mqZBXhksIpzYcDhMmA64Dkrp3NzcjRs3EoFwXRd4LDAS6XQa3g+mJfG5cBG3yFAianB3ADBqtdr09PTW1tbx48fh2ymlYOTgHJIABVwTg5uAAH44HAJYBquzs7MD7LBpmmtrayCJEHOC3IDogPNKkBB8JSw3WTelNJvNQtoEUuWwveFwCDgXOGU5yngTQkDMQduSlCoYM0BguVxO07QE4sBNw/vB7EGWDS5jMBgAbxHHMYRslmU5jpNKpQBMgGK99NJL9XodKKLEHo9boCSiSZAQmKU4jgFMIIQKhQIILoDodrvd7XbhcEzTTKfT1WpVSjkxMaGUAviVy+UA2oNRGQwG8IHJSQJOhxgT7Faz2QQpgZ1CvnJ2djaKol6vl7iCJEyBT0Njr3HXloAkkFrwCcAp9Hq9hC4H8w/ojUDm1Pd9CBNAfhOeEfLSAJf29vauX78OgWKSswSeIBGdcWVNfDCsj3M+NTV1xx13gK8BLfE8D1jvIAjA8IJ8wCU5jgP1A0kaBGQOjApEy2B14foT6iJxNOAHQXoSjKxpGgAIyOd3Oh06Kp8wDCOdTq+vryfIFGwt2C01xu3CP8ALw7kDlQBiB0IppQT7BBsBRw95N7CypVIJgpIoioBf7ff7QPBA5k6NyhkAj/NRcjqVSs3NzbXb7Ww222w2wTiB0YVMVi6XAySQAIlE9OFjxw1qEnkkWwPUAWEgbBMCqTiO4bKS9AOHdC9YFHDYQGNDbAIuFqKMixcv9vv9RKgBJyacGBrLMqoRS6vGCKtUKnXy5EkIRhLXALAXaDTADWpEz0N9Uj6fBzFtt9tAjIL0YIwhVAG1AAIXPhzuDGj0IAg8zwOXl+wFTsQ0zXw+D0Zuf38fpBPinWq1CitJJDIJ78cFCJaa+LhUKgWXB9KTaDzcLiQf4jje3d1tt9vgtQGTgsNijNXr9eFwCIQCLAA0J5fLgfQkRFRCkYBzB7eeTqfBBAB1BGTS+PvVKKcBsBXUL8EtyYtzDiRfuVyGuheIzqBWp9PpgLe1LAuSx3EcM1goXKca8XWtVgshBEilVqtVq1UgFZOvpKMXrAxkDo2SX4mvTXJh8IbEwYEp1jSt1+tBxJQ4nV6vB2vI5XJgG8DBw7d7ngf5bZBgx3GgZiMJbeDzwZfv7++DE0niEZAkqFZDCAH2RAjBTy5dugQFWYl8gLiAXRw3P/CSo4olQFHgZwHpw2XIEV/nOA5A5na7DXYXUoq5XA6MKPigOI7BmWKMwzCEaAjoQYjIYG1g0uBzQO6B4k+lUg8++OCZM2dWV1chsEqMChnLvSRB5bhrwyNiAmO8s7PzwgsvzM/PHzp0yHEcMH6QawdCGOxrGIapVIoBhk0CChDPKIpAfVdWVsBwwWpAAOGVRF7jnisBdwA+wOmMF77AgULAGUXR3t4eyBB8phAin88jhCD2BpmAnHBiq0BlEUJA8MPpA0oFrgJA1WAwqNVqnU6Hjer35Ki8EBIpqVTKtu1MJqOUAnN19uxZELJxwy5GNSfj8Ysa8VtyxPHDn0B2E9YPgUiSIgQZTRYA7gnINojn4ZQgZQGbymQywCnArQM9bRgGOH1gZcCSQY0KRD/T09O5XK5SqQD8gBd8I9i2cTVInEbi7OAA9/f3+/3+5ubmAw88UCqVAEsopWBtUOkBcszgkgaDAUIIqnBAh+DdcLiDwQB41cTZge0ZV8pEnsbXB2KUTqeT4q8EuzHGAF0mvhnuA6AiQqhSqSQ+AiEE6XeQs0KhALmkxNvCtcHnRFFUqVRarVa/32+322DwwDuDBY2iqFarSSn39vYAlVNKL1++DJACdEmMajYSSQIZSnYBy07iHbhO0CsQHdgFJARASxFCpVKp0WhIKcFCgEGF3By8ATYCzAXA8G63C5eX5M9BpSGwB/sHXw2OBjAT7DS5AsASt7ASeIyxSzJa4GGhsi8IguXl5cnJSXCXaJS5g8gXkD4DSwCYH/aslIJbhGWhEeGdnFriQW8RXjSWtxuPyECEkz0kS4F0AdRCAB+YxIrwToj7QB2bzSYExgnOgCgJ1BGoThBrjDHUXoGfBvMAv0oQmJTSsqxarYYQApABJYiJxCQClJypUipJmCTWEVA2hGyUUqA0wRdDBAcaCFIO9huARb1eh7NNp9MJJQikAPArCCG4KrBbg8EAhCZZCdhFyDSDswYuG0AngEJYJ+hDwhslBukWR4ZGbDBIRqlUymQywKiBeEGpFixSKZVKpYbD4c18PagObAZiE03TpqamGo0GfDG4j0QsEuoowWK3SE8i5iA9ScAy/lu4RVAsSEACW9Xv98Fj9vt9MH5g3iGIq9frk5OTcDQQstZqtYmJCbhXeDPYAHBwyX2D10Ajrg90ut/vQ+42qcNHo2gu+V8yyiLBJ4C4JAqNRyl9SIO4rpvJZAD9gDWC2uHkOoMgqNVqhBAoRYfIH84/MWBgmQDZABZMWEoQR6j1AyFLEi+UUs/zQM0ymQzAKYhLgPoH/JC4rcQFJ9wEHoXPsP5MJnP69GmIlhLdg1pp4BhrtRqD+k5I+QJKBfIQnDFU2kIIl2AxPiqwAneW2Ek6VggLZsy27VQqlc/noYwtMUJQYAQ3DeEVGG1N01qtVrfbhYpEYGsgzoI1wOVVq1WoXGk2m0EQQIEfJHqBax5vKhh3rMn6lVLgZTzP03V9f38fZHQcGYwrKPwDQr/xH1JKwYOAnUtYNFgtAAMw+4AYwIQk5hzwPtgbuLkkrQvFh3DUN9EGY7B+cPRwmFDvRkbFd9lsFmM8GAwA8YDyj4ddclQEnNAQhBA2qkWmo+IhwKnpdBriOzUqnQClhQTXO++8U6/XWS6XE6PyKyAS4W+uXr1arVZ3dnaSNGxSdzFubBLrB2YGDDsIE9C7rus+9NBDSVl0Il6wPcCYcFvgICDQBUEBwgZqQKGcANZZqVSgIGYwGPi+v76+HkURECqAnZPoHTwLHnWYgHWBiElKCc6rXq9DrDAOEcblBhQUNg63leSbEEIgQCA9Usp+vz89PZ1cLbwfgiaoOwOtg4gGbNtgMADDA9Ec2FGoKYPYFgIxyG8kyTsI3xLpjKIoAYjgIpO0BixMjdKoaJRzRGP8Cx61xIDtAVVMYG5ikiHQGQwGQKQFQcAAHctReR4A3vPnz0PACaeQSEmil+OuCjaZ1GOAJsGv0un08ePHHccZj9HguBuNRlLUAScFtRngaOF86/V6p9MBjyZHeTHIltfr9Ww2q5SCwwJuE0waOIWE2E2oBDRCjqDHtVoNJHh1dRVYAFje+H5BKRMYAcUYScIyUVa4+AQOJvQ63AeYQxAgkEhwCsDLA75JkgFgjwFf81G9h1IKOqLAUSY+Hc4EElVRFAEJBN+1t7cHp5EQKCA648KUnIkaJQ/g5yDKAGY8zwNjDxIyHqO5rjszM8OgzAoEHAzyzs5Ou90GYwCcb4JgxqO+5IgTBQWTg8cIftu24d8JogTxBykGxJNoAGheogrA38CFAWZUSkFQQykFDYCPZYyBiUpse3Jw8F2QRUqsnRzVHQPrA9WoeIzXT8ATfm8eA74i0d3EI0AkBUKQy+Ug5Q6GE1AzbBbsBEIIYE3yOXBoSYUJcByUUqhkShYARwdfBFsAhwj+AXy3Ump9fX1vbw/YtXE2CxafoPVks7BHiKLYqAQRMjyQC0qYCEAdSVFHPp/P5/Msya3AZQCwBbIB+MOEwklC1vFCEzmWbUmcF0AtCK8SM5A42lvsaoLOQCmhP1IpVS6Xp6amer0eJM89z1tbWwPBQghBWkBKCSYTlAOOCW4CfEqS5QDRl2NkNIgXFBfAb+EQyFj9XvICsQYOE5wvyDoapTLAt8IbgFNO7DwkE4vFItgVwHYgo2JUrZCsBAihRIg553AvIPHgLiAZEo9qwxOaAG4aSufACcoR/wleIjE2aiyGT/x1klKEI0qlUidOnACKAT4ZAkmo/wFHoZRiSS9LolIzMzO9Xu/69evjUCvxhXLUKCPfy/HD1QIYh2gColmoqQPJSy4jsQF4jN9LugrViK4Eq5b0rIBMACeR0H0QyjabzUKh0Gq1qtUqNNeSUd+TUgrESI1lDZPUYNLoCaIzHluNG9pxMwBYEDh+WAzAI6AY4Kzr9TqUs7VarXa7vbS0BHa02WzKUe4sMUJweSAEalQp2+12gRGALh81arIDNQABAoIXjbIT4OmgRgWOK0EgicMio+7V8R0lNwjEAaV0b2/v0UcfnZycBGENR43tgA2AH4YMMYNqB+DTEk8ErgdOioyqLROUPh6FJYwiHmUf+ajKDlBIwr8l7gMakYCYT/I+UkoIQeNRtwocK0CHwWAAQBJWCJEqxOTQFQowCExaGIaO4wAPmxRhyVGiXow4d/jwJCSGFY7bGzXWfZG4bzQWQECZZcLxA8gF9nJ9fb3f70MQBJmvbDYrhGi326CryadBugacQOIiIdMOxAoQoVAmC8AZZBQY/CQs56NaTUCNsNOk+kWNKpXBmOGxzHziSeGUAAZQSi9dunTs2LFyuQzGfhywYoyhKlUIcbMgEL5AjsoVkvAh+dDk4OCUx81JchxkVHKKMfY8D9Jn0DsBx528h4w12oFUQRgFdwkIFCSJEFKr1QDlgLRBNS4Uk4MvA850dXUVOCcAQECBgAzB/46HG2SsrhmsiBzLdo3vLrkekAaQQjgrWCEeVaNmMhkhRLVavXbtGtSyqVFYzjlP6oBd1wW5hw+Bxn6QeGBWEqYOUt8AnxMHBPoDpkWNoiTQk+FwuL29DSQ7HG9iftCo8JyNGr7UiMwbVwkySkDFcby9vf31r3/9ySefhCOC7mbA7LBC2BoDayGlhKoAkFBg1SD/ANegxvjZxKpDYALGPwGhAG4YY5VKZWZmBs5xHOjwsXJ6Mtb9GUVRtVqdnp62LAsEKIkeG41Go9GAu4eCFQB0sIzBYJDNZre2toQQ+XweRBBMC/SpJM4CzuIW3zSeIUpUMxEy9N4qEUBOib622+3d3d1SqWRZFpTit1qtWq2WQJaEPgAQDUUsiYtPAnVowwVbC/xZ0gKQlD3xUV8EgD94GwAXSNQsLy8ndDMc0bgRxWO5d/TegDpx93JU2gtemFK6v78PGA5CabhukI0gCDqdDkvI/sQOYYwhcgPjAThOjjr6bolN4K/gLNSoYw2Nah83NjZeeOGFT3ziEwm8VyNKKhE1wH2wdDgXCKphDb1eDxLO4KHZqB8+HlVPgxADwoWQHuIUwBl4LNhGY7wDyGvioG8RL9hLcgFi1CyW+OjEiSOEtra2dF3f3d0FSR0veQb4Qkdt/FBtApAiqZNPOt1Ax4A+TjBitVq1bRuqRoFDQqNe+uQfYDMAO4NYRKPWykRikrgHtCUp5LrFhcE7kwW4rlsqlcD3wVlBGUU8anBACLGkLhNAHGD+ubm5VquVlA4m0pMY+XEvLkatNsmhw28hNw6wEZjZBLJBbAVvhutpNBq2bRcKBTYqF4doCyFUrVZB8Plo0AzwN4kTAb2EAwJXCNxMwverUYcXIQSI4OSIx0OBxNAmriH5+fh/wX4kN6GUunr1asIGwTIgk5hwjwBFYctCiCQznUSIYtRj6boubAeoAaiUTZKVkOGCcwByEo+qfqEkXo0KUZKPRQjR0cAXNcpdJCZAjpGlYpRpAK22bXthYQHmasDhi1HiD+IPoNpvHjFYSDmiE6FY/bnnnoNPH3el6L3QPTEDaMRyJj+E0BRCFTDIcMFQBgQYPmEyoLet1Wq5rgt5D3gnHbUbw5dCkQkcHBBu0LgD5wjsAxrFWYn3TP58fOUJ6H6/AJGx3PAtfzsOocZRDgQBwL6g9zaDwscmSQ8II5KDEmP0NwgNfAUMCUkEiHMOdwmELSTzgaIEyFGv18V7ux/RiHEed8cJMwlrHsfO8B6A/NAWMjs7i0eZHyklFKqjUdYFwkwGReBJrIQxNgyj3+9fuHABHAEfZVLGBUiOtezAT6B1KAHaYjT/ZnV1dXl5eWZmBswsmDSYMaNGxQk3y7MZi+N4fX0djbARUCO5XA4sFhmVUYMB56NeCzDj2qivDY219CbrTP6baOQteG7c2Kgx5uL970l0KXH9cEpq9Br/NMCtQKDDCUBN7fjNJcuDDwf6Dt6ffBS4YzWijIUQ4P7iOG40GpcuXQI4L99Ly0FMAy5+nIcbX2qCfkC2PM8DThz8VzjqkwfEw0f9/xC2Y4xZs9lMhggB+4cxfvPNN9fX1yEnp41m7dwiQOOBDBolifTR0BZYPcZ4eXn5t3/7tx999NH77rsP9h9F0fb2NlRiJJXnCKHEc2GMFxcXwVpCpVhSPA+mJUkDJRIMP084ViD0xgPJxCrABUSjwTHjQnMLvEPvC8rGX2AMwCVBaDYOKZIPJ6PmAoQQjO+gY326YjS9io4KvshoREuCgiE/Ch4TvJjrusn6oyi6evVq0gUlRrM4EgMDy0i+KIl4ElM0bm5BNOGU5ubmlFKQi4TyGIQQDJ2BxQMtzmq1GhQIgxKD6kMzeTyqDh4XW/ReTJrcDUII0p94NBYj+dt6vf7d73631+s9+uijUL/sOE6lUoE77vf70GeTFNZsbGwAfscYw8BDOqpQhrIYNaquImOl+4lYk9HoFpDI8dXisXIF9V42Fv4Qv482vOV1i3FCY44vkarkrPDohUZd9zA1JjlS8Ol81HwCotNsNkE0CSEQ3sPkDcgfQzMdhBpCiFarBaXKcsRjJdKTOMeEy1ajfGpS1oJGc2rgH4C9PM+bnp6emZmB3F+r1YK8rGmaQFkl4JgQwvb390GgEjtm2/bk5OSlS5eSwBuNysvHMRcdDf5J+DelFLAaZMQ9gpBijBuNxsrKyiOPPAJWd3p6emVlhY/KZ4fDIZh6IPdA8HVdhzZqEIIEuoLnSrT/lmtOQh6QIZC8xCqQUdou0bkEGt/ivBLFxWPlMuMvOTbHafyH44AjEUcAkQopqB5hozkkiRNRI1IR7BOk4sGtQ3c9DAaFWAygAmS7Nzc34a8SLUp0aVzEk90lQSuoekLkqrHxFYSQiYmJVCrVaDQg/QJpdaVUt9uFAaAQ23uex5KZpmEY5nI52N7i4mI2m4X2JVhQYkITGU8kaRxqAD4HGUo0L45jTdM2Nzebzebc3BxwaLlcbnl5OdFdgERJtRRoVbfbhZkmIFsgahBAjWs5GpUf5XI5Qgggd1iJNjajKLljNdZQl2jI++XjfyxD4/Y/sYKJa0g0SiklOBeQ8BI8HuWz5FgVaXKFQAIB3AlG8/ygXw8UO/l2YJXAuahRrjTRqOTW3q8e8FtI1EN0wkY9y7BlQNCe58FIXTWa7QQkFlh3gB9Syn6/z6B8HUh9cLFxHLuuWygU+v1+0iIuxsqTxVi2CI+FuLA+IPGAm0+kinPu+/5rr70GA5eEEDAyDAoCodAnGa8EK4N/QHEWcFFiVBiJxtgLOFBoA0p8VlLRkXBuiaDAIslYoZn6qyBzctbJr26B0up95XzJVSVfBCGCRpmuaUEQIIwNWx/t6N0xI2RsAAgflbXAJBfw2lBdCTwQHEUURa1W68qVK8Buy1HbVxKIJfuSo7rbZBdqxGaBG4H1gFGAQgCg/WDQRzKRJxqN7wT4DDbJ9/2blRIQi4EBAFqvVCoBRQaIFe4mMT/JlcCRybG8Ohql5aD0iYzmzGGMv/WtbwVBcM8994A0QP2XUqrZbE5OTgK7CHa1Wq3COFjowYAjgOwsBGvj92SaZqFQYEyLY27bdjabBccHcQoM4xkHs+NXPi4042bjFms0nvJD74XYt/ytHBUPqdFUCTD1CCNN1wqFopIKIWzbjpQiDG9O6kjQK2wwYbwgGpJS7u/vAyKBoscgCDY3N9vt9vhKblkYLAPsBxsNKRxXPAADybEYo1mrYOGgrBYuFLxeMnIPGARYMwO/AEunlAKTQQiBCdnjxciJpxwPCNEohh/HaGhE+Sflc2oEGJ9++mlK6alTp8BQgR9JMg8J8wZXDr2b46VhhUIh6f2DnUMRHCE3QaLv+3DiMO3bsqx0Og1V4sklJVcu38sDjQvQLZbpr3RzaNQINS5G4/AcOgVAv3XDyOVyGJOh78GlYowgF8E5T8gkKEslhADjBRYCbhRWAgUhkGsD047GopnkRUY5TfgtkCxJ4DyOmeI4hgKeBNp3u13ACZCWhncahgFjdJIpmmDIb073DcMQHDCYNUDjuVxub28Pj2abw5eNRxaJ2Uw0D494J3gDDEEyRgPLQZYvXbq0tLQEAzESnwUIDNhVAElgP5MPB4IVlp4ck64bmUzWNE0hbjZiCiHBVbPR4GKMsW27g8FAiHft1i2Q+Rb5GHdeiViM68y41bnlncknQFEDLAZjjBWKw4jHAhMC5poSIoTSdVMIEYaRlALgM2CgxOxBqiA5XqVUpVIBCJLkc/BoJhMag2JkVJ1CRlNXwV0mi4dPi6IIKEr4Riii8jwPGqcSjwbjYxOYn0BDBj1jwCvADUHoSCmdmZlZWVmJRv0YYAbHdW7cld5CNiZIBTYJsBp+uLu722w2ofs6iVkqlcrU1BSk6BBCYAhBfUHkQcjAqsFXGIaey+UY06SUcKeEECFutolBtzkktMMQxE5J+W7Z/Ptv/b/3SmDT/+T7E+0HF5McFOc8lcoYhiblu/PF1Sg5GEXhOJTp9XpJMo5zDka0UCiAgqmxxCIdDfVSI9aKjCVN49FYTyllEATgp5RSSVYRYBYYSzHqokzYIHjighhVZANNlWTiCCHv1pEls3ng5sAHQVwD+SM6KlcFUzTONLw/nEn+jUe9ngC+yKiMHBS03W4bhlEqla5cubK/vz85OQlLBANer9cT2gZCuXA00E/T9EwmqxtGwsBSSjBWcXxzACOlGmM650JKFMdR4prQGCK+Zc34vTWW7xejW945/r+3/ElyZ2gU28ub7cCBlCoIAtd1xtvBKGVMU0zTYRQGHU1VB2wAp6HrerVaheleYlTVlJAp44giWWFC7MkR0XyLwMFHQWAFVQz66JEa4PWAFs9ms/l8vtPppFIpgK0QHiqlGPwLXEw4NgNG13VIqfq+T0f12GoUAAejoevvF5r3Awg0qi6ApQdB8MILL0AjDkzanpqa2tjYuHLlSrJ6sKVgujRNazabnU4HihwIIa7ratrNukdCqeBcKYQxjuMIbiWK4iiC7J5CSCollJIYj2JGQhSEKlIihNFIGOR7SeT3C9BI8vAtu0NKIYQVuhlSjOvVeMyIEBoM+oR4CGEhYsdxwR5A3KBGXzIcegjhpCcwGs0qxBgDoTfOeSZmDH6oxpJLiSQlvmy8li3ZQkLSwhvy+fyBAwfACEGKBp6YA78CEwCHDGwkU6MB91Bbrkb17ZCkzGazfDQ1IVkW1LnhMfoHjUoLknBsfA9qRFTAdyGEms3ms88+e/z48WSqUqFQWFlZ2djYgJkySTQLRnFnZwc4ScdxTNNCCIMFjqMIzoNRGoVhHEcAFQeDgRBwZ0kS4+bELoQRUZhgIjWCGJFRrKIREYowRgojBNJwiwBhBD9SCCkpbv4aI0QZw4amuBRj6ZFbdIm8lzGnlEgpPG8A+GH07SCIKAhudp+pUboeQlHw4LBxPtaCrcbKnBPjlKxEjijyxLKOIzm4EQDvoMkwbhxkAD4c5jPDVycljpA4uunC+Gh8Oh+VP8LKNjc3b9y4IUazXiFSSKbd3KK1CRJSY6nBcQsUjZ5dAiCx2+2eP3/+2LFjME0Hyum3t7eVUlAJBHYOpkYqpUB6GGNSKoi5tNEEQjDinucFgQ9PROCj8YbJGhJxR1IJxRHGhFDNdbWUK6SQXhgPBnw4VCPe56+wQDc/ClFKzGzemSzZxawzWY6CwKtU6u8sj/uOW5xaYoESwEAIkVIMBgOYwa2Uim62S3OlJASecqybio+q4uHwx7ljNUZn/5Uy9K4OjOYVJwgJj+J5+AdMpga0AFgTeISkaQkG1/f7fUjqKaUYH9VjQ82iHHU6A4NSr9fR2NAWIQTgfzKWgbsFWCQCpMZG4yaHmJQqdzodXdffeecd6IIlhGQyGWhogmkVUJzV7/cJwbquW5ZNKVXqJgLDmFDG/KEH4xnQzcY/BSP03/+974q1gmPDMoiiqIWldA7Mp26bwjqLIm46acKQiKJsppA2LOpYQ98bNhqx5EJJM52aXjpCCYlCzjJOhFR/Y3P92ecbF6+KmCe7fj+0UmM8pBylO5S6OTW2UChwzoWUUgrBBaUaYzcbS/jYCMqERFXv5TDlWDV38ttEWG+xN2pUITgu6EopmGqVDLIB8g9iEajLTsa9w6yFwWAAxeAsqTOEDLYYDZUiox4AyOZDgzc85Qm9Fy6MCxBY2ver4PhOwtHjSKBgw/O8QqEAUu+6LhSlJxvTNM00DV3XNc2ghMZcCCm44FLIMA4C35dSxHE0bmzi0VMsbombbq4HgzlRCCHBxYJpnsw45ysV4+SR2I/Kd91mp1Lt3b3pEydcgfIHD964dD64eiWbzdrFAk2lNMsZNjtK8KjZMM69ldnY3j97EeN3gVRyFLeoVmIe0LtlQIQQGsdxq9WilCJMEFJSyMRCyFF9uzZ6YloiOgnYSrDEuMlX7w3HkitIxEuNuHg5enAWzK3udDowPhuPGixt24bpqAm9CYSQTJr/yWhIChTwotGMflg9yBo0GEA64v0YbVxQEoQ1DtNuMadKqSSfB7EedNAByZTsloymIxJCNE3HmMRcRFEUxaGQAiSBMSbf24+cmEY0xrq+35gnr+l85qH58uXvvHos5S6cPnbpysW9YRhwFe7taZoen3lDYZQuZLp71frVFU3wrOOk41CvVV985a0fuOvY0duPf/fsJSVvwiM89ho/pZsiBeh77A2wwpvNaxiB0SaEcI4Zo4nhH6d8xo8xOedEXseR1rgoJ+sZV61ERaFGQI1yCYA+lVIzMzNQlQv5CUAR4EPAVgVBwBLfCaYlk8nAcAKowoHZbDCT/GYbx1gh37hZTv59S6p5/J3J/jHGAIrB/ELhEcY46fEGYhSOjzEmJZJSBGGolDIMUwoZxRFCiFGGDZRMnUZjnvQWe3CLEKMRoTBZzh6dy37y9qU/evPKEycWv29xYr9RPXP++vkztVoYx1KlDM0oZB+YLt17cj6jZ5bXdje2d797aU2TgmJk6MQ1zd4wSGB3ElHfspKb/8aIEqITGis5vhKMEcaKUCoE9EYSIW4SLXACkFJF750RPm51bpEbNJYGJqNqFjWWNUv0CiBpPHqWCBlVEYKU7OzsQJZJHw3ohTLIeNQhQ5JMWwKwk2kB0CI5NzcHD6aEv+Sj3qVEZt9/Z/S900BvuU54xaMx8okaEUIgZIXykqTCBEo3fX+olNThAYm6pukaQgpmu6L3lpCO39m4Kxm/SDJKjc2UsvNL83ccn8sx9H9/8ant7d0H5or3H5wr6dQJImM4oL6ned4PPnDir3/63smC1ej0vn11e8DVbMrJp1JIirzrIqTIe11Gsp7xhSmlkEJY4aydsnRdSIEUQBkolb/5QNNbeGf4RyqVgrah5JUA8+QikksZ36kcZVj52EuMGubhryzLKhaLR44cgfFCkIOTUrZaLXg0ihzVKHc6nW63CwWivV6v0+kweCoRfCKUmYE1gi+GzkhN0xqNBhplqSAFMe7U36Nk79P1WxQxETs+mv2W1LJBYAW0NXjSpPJB3XzoEEIYmm9wILkQN2OTWzz9+789QSEIS4yQUlIqbBq6ocil61urde/Q/Q9/9qPf97v/8T/ubO3NzkwuHlmqx6u4T4TghXxacfXCM5dfvbD6zQvLn/jRzzz26CP/72/+I6TExn7D0hnCDBOJ0F99Gu+VJyQRqnu9gxMTlVajH0UaoVJJgm+SRuMwGa5A03QhJCFyampa0zRo+3q/lUX/nde49RVjjcUJXZ5Op++6664kkwrxMvytruv5fB6a3JVS0DwEDyqECbgBPLEwHjXIgYGB/H5CRYCRSPoiknzk+68q2Ywce8Jocnzv577UKNGDMYZMHPhj0zRhnnzCSyX/ZYxiTIMwUAjpuh6KW1ljPJZWVO8ZqYQIxggTIbBCghCc07WMa8cRX96oNHvej/z4Z3/oR37kztvueP2117719S+dmpu8/fDCS29fIlSvt7vfe+Nypd3WZ4/89n/74yNLCzMHlp758y8ur9/wopiHIcEEWESpEMEIIQVYHc5I4ZtkpVQKI+oQlNaNeOjde+T4m2srfhBhRBB+t4YVIoyktlMIqRSnlHEup6dnoIXo/fDgf/7FRyMf5ehBd5B4iEbd4qDYUGOTSqV2d3chBZbJZKDir9vtQpKAUsqSgB6WkgiXHKXWxhOcwAVHo2m6iTtIHFMi5mpUJDV+l+PQkoz6yCAnD+2CwD0A5LpFz+hosI3CcRgFN4nN9zl+OSrWHocFMPwiiGKF5FQ6daycW9mrFk3mZpzrWxVDZ1mDvf78M62el02lMoXsTqV5dWXDNfR8Macz5jrOS5dXGs3Wj971mMboles3vvLVr61dXw76vX4QGoymdaQRTWKcNazNbk8ihLCkCCOEOUIUYZBohXBR8nuZec/U9HQhVxFq6d77f//ll5XCWCLBQzk2gpKOZlQohSBL2e22hkPNcexUKgWDOMaty/vdNHqfTwBNBhsDwBnQSzh6eok+evoWGL+9vb1MJpPJZACwQpMW9HvBJOGbRGLysBLAzglHp0awPGk1goJRPvawi3E8n6xVjUD0+A8T0DfupBMjBJ+c9ACMmzo0Qo5CiOFwKJAiUNfG3/VfCqKbMWGVClGMMcFcyqVS4fhk4cJuLeD87plSwTa9XsePeahItdM/tTA1X85VN699+dnvdf1Q1/WMYxTN/NJ00Um5FGMZ8w/ffUI36MrW9d/++5+t1BsT+fz9s2WkT75xY2uv1Z9xbCw4x7iU0kwjV+0HWZvV+6FC6shk/vJus2gbSPJuKKgQnozr3fZMLnebaT6az4sPPPS7zz6na0yO8Tfj9KCUN58TxRjt9Xi73dZ1PZfLJU02/73X/wBIQNwHeS5ANlCjiEcFg6C9w+Hwxo0bS0tLSXoVWqrF6ImqjuPcrHmgo4bWccgJ0zbgQyEKSCp44I7BzSXSBt+dPLQg2cZfqShi9HxGMDzpdLrVakHD1PhcEjTmlUCedKYLJG3L7vX6EinGNCkkJkgiiZTCCCuE5ouFvG2+tVkhiNi6frhcOFjOH58t94OgUm1FUhFMJCKurS2US+V8amZy4t4jCz/80XudtMu9+HtvXzt/dX3SMR574ES+mN6sdm4sb2m68chdR37wyXt5HGuKBkO+vlfrxsLW65V2L+x3dU0nBB8v52+fYmEcxkXlBdGByfxiPlNrdrwwZMoTsdaWsjUYNHq9VKkUdjs/s3Dg2m0nX71yjTGm4jiBJmI0GgshwphhWZYQ3LIcjInnDUzTmJqa2t/fv6UI4hbReX98k/wc6kxg1BV4FaByEs0Hxa7X67VaDTqsZ2ZmAIkmz2s3DIP1ej3IaILPKhaLCd+TZIYJIfAww3g07RGN8esIIUC7aIT5bzGnic+6ZQ+cC4yF4zgTExPtdgd8IuxEjTXZjKeRNV0nGDNEe4Ph4WzmF4+d4Aj/n2fORDzWMIXOXhHHBkYPH13IZZz+YHCsXJrNpWMRHzgw60XRzl5t4IuQC0ZI3jIxwdf3Grv1NgujdNoShG3Uu2tblbsOzz7y4G2Hb5+zZ9P6ZUMJ+R/+/Nlzy2t515orZCdzqXQ63Q2i0A8+8uAdb1xde+tcJ2vrSmLbMicK2c3dismIwVgY8vtvO/LK25e7njeRTtV7/U6MhxLt1WsTmbTjmHh371ceeHh5b7/RboEZTmpj4NwY0wzDBOIRY6KQSqfTURTqujE9Pb23tzvK+v1PvcZhEx89nwqGNNLRA37UWLUF5Mg6nc74gyshEQ4BHYvjuNvtQkkR9NAjhGCiVrfbhdpkSOblcjmMMYw9S0RkXKTweylR9F4rOsI0CiOsFJISIyRN0yoUiggRhDBjmucN+Gj6RxI9obHZNhpjURgMh0Ehl/3nH/q+6TjoRdE/Pnr04tpah/PzmKccc2ZiYtK1S9nUQ2lzfWO3YJlKqZMnjy4sTO3vt2IVdz3eD4JiPkuUODlTfmN1ayARC6OdzU6rH2zWG7phH1mYMh0d27pm6UjEzVZnv9GKgqjFecFNFcvlzsDfqnfuOTxfyGUPzky/df4KwyrtWBnXSjvmXLnY73tlx8VIKoSOHJzdbzZtXRe2WekN96XM+v5eveHqulsq4c2NRw4u/cWZpuCSadi0zMC/OStICKHphpASE6IxBgEN0rFp2pzzlJMuFmN4KhdCCGPIxr7Hc/33gDYeEdmQ9gJvk1gEkC0QI5j+ls1moVshm82CuQG0w0D6HMeBYqUkaQe0I9g6oCahQSnpNgcUzEcD/f8HscAYzr25Q41h10WaZptWDuh8TdM8b5AA8CR6SvLMsE/DMLzhECP0//z8zx3s9Jodv9HqRO2mJnkN8YzO7j44V0xnEZYTE4Xrq5uNVi9j2ffee3KyXJZC6AxbulXvtIWUC+Wy5/XK+czdbOnzz701k7VPH1owNL26vdfsDc9cXluYny5ODsPWsFL3vvHyeRnzR+84cvrYIWIaKw1vNyKz01MHZyZXdvfjwNc0LevYh+em5qZLXIhsxs2k017fw4h0Oj3XMmfLxVa3n0+7bS/Y5HFOUqNWzaZs3dCZbR8Q6tT8/Dvr6xqzHcvWmJYMnECjIWijBAiO41hjTEoVS2FZdnliwg8bQSDDAI0CwP9uVI/Qu0IGAgRtetDkSUd9bUlgnmhvrVY7duwYDE5JhAwhxBqNxuzsLFBBUJUMJdPgxeBhFDBYH0wIwPXE3iSVTZAdhN/cjFiRgv0ohCTCSElGsO2QiSJKuZILfeCXXceVMm62ujGXYRQp9e7AHjXG0OPkaTSUKoR+7tM/+EHDGfrVfre/U6tuN1pbXLQ0tJBPZVOZYegfOTTvOlat1Y2FsGzTtUzOI03TXNvOutZWrYUIudHszFisPvAOzZY+eP9plCvZmey1M68fni/fnzJ6HG/u1xf2Cxqmb76zMjk5edfpkwHFr1xYfuHMOz/38z9zx6Kl7a30fP/C9XUei7ofHjf1qVJufnay1x10e31d1w9MTy7fWBex4DSaLuXDMFYKT+VSa83OmghTWF/d3M5olk6oiOOyps2Xy54QmBId6wAklFJIIaFkEASQ1QEZ8oZDRkgYhJl0SjdsO0KO1RJc1Bqk21Mxh1sQIEsYvwtDpVJYEYQVITefZDIxMZFQ1WisaS7JwQEyhtg8k8mAcQJwfLMrA+4GjQbRQesn9AAkhWcQtiXl+AgpIUQYRUreLIwhFGsMM4aiQHKJEJKUIqWIlAoTlLJpuUhnplQhR6qNuJCf/uWff2xzJ/ivf7FZqcYIESkjQqiSAkjsBP0l1Uhgk6Iouufokb/7wIPDc+8MwnB7r7JZ3VcYKY2YDM2UJySPHcdJpdxOr99udXLp1IGZCVPTbN2glLY61bShIyQRopu1dmm+cG11++SReQuhgIuf+dmf+ZJjFfLZOBarb78xPTF7ZbsxYTEyeUA3enh6Zn566nNfewkhgjE+/+abH1ia2tjdH/QG16vNZhBLzGanypmUGwYBJVRJkc+m5uenN7d2bNMKozifzbTavVwq7XaHsYoVxgHn1zbXF8jBjUF3t9n8wYceee76tU4YGhqD3ivOOSGMjrq8IVC6yQtjrCkecfzQPYWf+uTpa2vN3/ujZ287qkyT7tfl7r5qdSjnCiEBJQxwTRqDYxRcKs7j2dkD6Uy21+2QsZZLqJEEHQaRAEizvr4O5gr6g2EZLIoiaEBcWFiglIJ8AQUJU5ihjmd8Jo3kKggjIVHKtReXMnffk7n7DvPYUeq6gulGGHobG41vfK3/1Le4oePJSX7sEDl2SB49guZnsUL6F79U+juf/eHbTxxCMnjg3sm/849fXolsKVEc9dFoOA0YyZulLUrFNx//ZhpY/uoPfMK6sRIaxvWrl5e3txFCIUItIlzLdS0ziuOZ4mSn19NNS0k5mc+W0umMYxKGKFXFTMrVNVvX+9zv8DiQaL/VG7S9WUf/p3/852+8ee7w4YP/y6/+8tLBpbnF6R/4+E9850u/v/zK8wcff3w6Ch5//LHt7UoU+Dpln/vdz3/s4TumC+lKrYYZqw4CidRqq18ul5ASFCmKERdxFIXzs5P1aj2TSre73XTK6fUHCOGMbVY6YQ3JIib9MLiyemOiULhOSLrb/ZGHH/rP3/lOhG621yGElLrJbJGRMaaUSiFcx+YSf+YTU//rL95pp8sffAIjQurNlz7xMd5q8p1dfPkqeecqur7CGi05Nan93E/b992fyhRKhJDAD6oVduFiVK8V/aC9X6lLiUxLZzplhILFgoAGui2gt6JSqaRSqYmJCciKQrk6azQa/X4fmrCgEAeeHQn2TY6mA8OgPIRwrzfM5s07bzv4gQ9MPv6h9LHjNJ25WWuFUIxQiHjw0P369z9mX1/xP/oY++iHxOQCUjJEXDi2dulS/pd/5v48aVWun00VJo/O5/79//XAX/vlZ7e6PMmLiLG5GaA6jBCFUBSHP/jA/SfDSCF5Y2Vlr1o7MD9/eWuzimVISdm1lUSEUMc2PW8YcR9hRBmmFAdBqGnMSDtREDKqBGadWCCFru23j02Srb3q4mzp0Mz0m2fPXTh34YXnXpycLE9PT15+Z8MfDv/gT7/T+i9/ls1kDh5c2t3dkxxTinOGc3R6+vhM4dzFq14YhVxolC7vN86ubd85PzHoBxGPGSO+HziOXZooNNvtjudLiWzL8j0/Yzu1fn9XxrOKTeXcspte77SPZfPtdvuT1skzS0tnVlflaGiGlIrHMRoRXTe9GCHdXvhTP3zwf/uFkxhp7Z3VYa/1Yx+cOrd5t2aefeB+TiiWWGu3tetX0T//LfHYY/o//k2KYg1pOsJZhAyE6A//GJFC7u2q828XXnhpsLoW9j2mGAHrA1nI8ceMttvtSqUCEgztoGEYMph9hEYjIxcXF+EvYdYOu/lUZU4IGfo8l6V/4+cOPvH4/O235yYmDaZrgsdCcIwlwpFSgUIER30RB3/4hYAo/fpq/Pd/SQtUQchYif3NbXehcIe/vbXqdVOFvNequoX8idniP/21+/76r3wHYwxcTxJMAi2LRp1o5Wzqx48ew/Vmvdut1Wunjh3dajYGcdwxMcYo7dpxHJdLBcs2+0O/2WzpmoakGHhDRqlh6rZrm+l0LUQ7nqcxHHFR6w5OH5iqVqqn5ooHJ3LTRz5VyKX++L/9Udht15dXX3n6WV9KjTKHUen1r587SzAtlSd/7Gf/9uWz51xNdupNHvHdVhchGcfi+x++J2vb7Xbf96Nup59KOT3P0y3Dda1Kvdnp9jHCKccJh4FjahZlHhdVJdyhf8fBg9gyB7WaUShVl6//xOk7Lm9t8phrGsZICcmHwxCPmuBMaulM6wfRXcdTv/n37hLDoFlf9wcDv98Y9v3FuaVm90Qrda5YcKzMvJtu71e9WoNeOB+ffUXeda+nIhHrLlUMYwMjHRFtdl6bnSdPfjze2PAuXeo/+2zn0tWIIMZF6PuB53nQHyKl9DwPnuoC41wwxp7n3RzwljSS1et1kLtGo5FYAqYZhm49/ljpd377sf/tN07ffmfO50G12eh1m0oOKA0IqRJ1g8pVEr29vbHzr/5l5ytfi3/w4/b6Bur1SMx9O5UZRCWXPPTOmeY//P9d/c3PtyJaXvrAJ5yJI/1B+P0PT3z2J09FHEMqno41jWOMdV1jlAilfuze+8utdozUztbW3PSMVKrZ7gwIGRKiEWybhlRyZmYCY+QHYW8wsHSGEWp1e7V6o93qxGGczaXuOjz30w+edjVdIYSU5FjrY9Jodg5MlT75sSekEClGZ9300YniscnJ2WzW0fWMaZUsp5zKpC0LBcNTJ45+/MOPOgTv9wbVId9qd5FSd8xNPnxs/qHbFuMwjETU7vX7A7/WaDUabYKQrusxj4WUjGKqEVujtsYIVnuIx1w02t2i6x4sTOzV9luIpmrVRw4txTA15mYqQ0opoijUdMYMI1YymzL/2W88nNFUhEjp1ONL9zz61Jv87/6/jd/6L2+m0dHKzokA5xGimAZvnTNmZunSkvV//dPhN79a9XoXdPUOVWsEb2LcIdhDqCtkh+PhgSXnk58s/8v/77Ff/7UD2VwQhFDy9u5UciCNms0mHtWUtlqtm2VmrVZLSpnJZDY3N+E52Z43NHQNE6IQ1Wn8134q9+lPH0qlOphWMumaHmxKGXoDvd3ACikkcacR7G6ri5fUm2/pfkB+7qf1a9c6tbr48ldJLtUaxtsGuveTTywMRV8Q69XL6LO/8eIf/Xvz+GMfj6IDUf3qr/z0ie8+t3Vjs8GoJGNtD1JKJRUx9GPT0x92XBXz7c2tQi4XSxFFcdfzWlQpTHWNMEoYobZteoEXc+EPA8cwdcaGno+VtA0TC2lq9MiB2fX9ZieKCUKI0Asrm7O5k83eoMS0lIEblcrRicmFTGomnWkEwfVmY78/yBlm3jSLqYwn+Hqt9sw3vnt4wm11vA0lLmxVpERIoYlM6sl7ToVhxJBCSgWxaPf6FGOD6bauC6he0qipa4xpqwNvYDmDSHQj3kDc8/rZTNqTvBX4y61m7Hv3lUovOk439IMwlFIohJSSiGCpUBSGvh//0k/f/uCJXKhPpEuHyGDz3/zW1/6f31+3dOuxO7PtvsgVHvov/+EL5Yk1J62//mZ6e6v/93/JtSzzX/+76CtPhffcvXz4EJmYIk7aoEQ4KWU7EhElaBqhQ5pe+tjHZu+667b/9NvLX/9GyJgOD2tPcuqMMSjNgFnNN0feAUMYBEFSkU4o7fX9IJTTk+wX/pZz771o0L5k0JpjSB0pxnI84AOfh0N64dzwT/4kiGIxHFLbJg8+SJ54jFx8Rz3/ciAlNhk6uGhTg9Qrum2gn/3xO+o9dHHr2lpT/cJvPPNf/knnwO0P6MVjZWf/l37m1D/4569iFUt1K1cRKfljR46VY1Eb9HnMGaMSqc5g0AzDgU6QEpZhU0qRlL4fRLHoDbxe3ytOlkyNEYwZJlQJxGOC1NRMeWcQ520jCMkgiloD7+XLK8cn79UV37h2w9a0A7OzRwrZnG6sdbqtKAiEKNjWyWJpLptv8biQslMaq23vh57/9nZlu9GCyqJOFIWEojDUDAbBY6CkRmmr09ENbRiGhDHGIJMoUnMHgk4v1Mxmr7M+DI/1e5mwyLFihLY77aI1o5rNRdt+rdXCCEvJoQCFYMxjrlHzyKL72Z84pbKHNUSCtRe+9Mcv/7PPrTtuesIlf+9vPDgzm9nYQyeO2DNTqDfgJhn2uvgrXx7+r/9Qf+QR7UtfUn/8p5JRaZtqqhz93b/n6MyJ4qFpWUwnmO3HcbXnbbrW/K/9Oi6U6O9+juXzRUJwEEZSCMA98FxVKHBjkLVPkAcE6jD+PYhUIRf8yq/MHjw4Z1l2xh2kMtOaRQjlRHlMW7GyZmdZvPRKfxigg0v07geMDzxoOCz4s6+I73wnrNTVZ3/G+InP8KGfqXeM/V2dYBoR6+TBnFSxTvG5VfF///t3/refqTq5yfzMkY9+YO7Pb5s4c3FfqUAhCQWggPbvXlx81LRDrBr7NcuxwpjHQtZb7TpWihAhYkPXKMIKk0azY1h6s9lBUjoaNSmxdc0xdNfQA8/DKOfH/P7bl+46MPkPP/81pRTFZKfV3qh3zXjoMPOHPvPjL33hT/1YMCoipAxNd3VjMpWdTWccQ694XnFx6eDRpbPfforoxrW9Btj2vGX85CP3MYoihGzT8fwIISyl4lj1vKHW6QUhl1wZrhbGseBiIp+zHEfDiDLU5K2GH86G4aLjWkTb9wfX9vdCpCQXPIoklMmSUTksQqZl/eJfPzVdMOorZ7o7y5eXW7/5u3sI63HEZydT5XKOU1PJgTJypRlr0WzPzYdXbuDL16Pf+lfqV34Z/85v62+d05/5nnfxHbm5Jc6+zX/sp3RTE0oVlTarkI4lRkx6HjHdic9+1iP46he+YNkzc65t15uNyt4eiE7SGPjuc4eSqlvgf8Mwdhz+D379xKEjP5zNHHRS3HH7ttFG+PnI3+jVdzc2+1evsdU1ccft+Bd+wTl++wTmg/NvD/7TF/m5S7zZJHffSQ8s0g9/WgyHg2EQfd8jvU98UENGcbqIXBMHEdU08bVX+3cetR+/c9ja3ysvHf+JTx0+c3HfMPSY33y8I4Chzxw8bCG5X6nrhi6FQJhwwRvesMswIkhx7FgmpUQp3Gj3iizb6Q1SDNu6xigjSukER35Y36+nCxnNtj52z8kvPPOWH0eMYSllFMu1Sm2aodCoLhyY5n/tx9ZeeGmwUxEYmRrDCCuMdKbt9vt3fuYzpJTpXL/g6lo1ilv9PiYEKTQUwrQNipFSqOv7jW5fKSUVohRzrsI45kIopBzbVlzYpl6eLAqmK8n9gVdHsqqQ1++fKk9OWbEnM29V9tZ5NIzCaSe13e8iJJXEhBCN6UzTZ6e1H/rIgY1L56pb61LQf/UntXpPODbDii6UNWZQnJn0oyu/8g/amoZ4FD76qPlLvyT/xb8Ql6+H/8c/wZ/+lPapH3Ieemy6VUNn39g783bwW/9687ZT9OjB5tRsx83NUP1uU92BSQqrSc6Nn/7pl2u1L7722sSBxWmElBS8Vqt3u92EamFk1M44Kk5FUiLf9/uD8B/97Nw9dwyZ/lXbJMKntfaw298a9GqBNyRUK03aTzwx/OAjqJCVnAdvvrjxvWfF66+hSp24KSOfwz/5o/rCAtvdxZFQjJG1TX8Y8ZyZKmT1QpptNZHGaIij//CV+qmluazr17ZX7jtx8L7bJ9+8VDMMGcU3H/N7MF+423Hbw0Gn38u5KT+Oc4Xc6uWdRhgNTYQV0gnJpVymsSgWvh/0+t5gMJyaLOi6Zuo6lkLTWKMz6A289FR5znGGUdwbBB89fui711YwwRiTnU7/+NIMD8Ott17dk8b3/8rfefNr37n+7W8JQj/7m/8fy7Je+U//uROFP/SBB95+6Znm5obj2v1KGxhPV9cowTHChsaaYX9te6/Z6prgyIQglBCMCcaGrjPKeCxs0yjmXeZkZBT2ev1+GG9V641ONxJiuljcqVYn0y4a+PdOTL2yu7Pj9ZRUlBAotSOY/eyPHA07O/tbm6aO/+Db3ptXBm7KYJTGMTo4bRBqaKa7VekOfSy6UXegG8z5yc8MX3lJP/8OWd0Qv/M74umnG499kD50P3n4PnX7SRVx6Udata5v7e5Qtm05lx33GdeZc9OIUkSw+NmfYjs7wrJz5fKwsl9NclOQcWJJGSXGmFImhVJIRBH6vidSBw/wa9d2DC3WaOA4QSqj8q6YK1HTdC03/fa54He+KLY3WalM9ytityLaXaVp7ENP0F/4efLMM3JmTrectG03DWkTRvbqXmWvl87VXctaKOPdNtUwjUiwUw/+81/W/9FPlyYXlqTEP/GJwy+9tcEw1hkLFRJSPjY1KUXc7A1t0/bDOFvKRUrUGq0a4hIThhRjmmuZQgqJkOBxq9tHBGVsy7b0rOuGfkAJG3CxWmupyysH5iYDyX/k0dNhvf6d66sYIYJxpd3D+jxvD2Rj3xXo8ttvHbrz9Otf+Rq32BPf/1GKyV/8+/8YUnbx1WcKw/rrG9tZx17bbyCElUL5lP3QgblSypJCNnuDvVprGAW26UqFIs5NjVBCXJv1hmGnP4yj0LVtS2eWa09OFpd6M/1evz3oVQfBfqN+9ODBvDc8REiKsIypFxcWz7eb1aFPbj4lLTh6OPOh+wqYxNlS6a13dr/wdF1jiiJqG6aPwoMzmlRU9OsXl9tSUTttxzJ0MzHScneebv3sz+DKPv7d3xNvvyMvXZZ/8idibpbquuYN0H0PiE9/OlUsGINeN/D7vcHV+v7V7XWTx0wgU0r3obu7b76T6/Q8pCTU3sDzaKWUbNxtIaWE4EKptGs89gF3aWGYy8a5VIS1iBIVDKXXQ15L+bH42jdbb7wRxDFSJFrbRoFPDIOePMFOHUe//ut27PWnJ2l5qtT1HF3rxpwhpAaeuL7VX5xaVyK485Dx0iUPM4o0rMXo22e6H77H/cxJRE338QecU4dKl240EEJKqJyu35/Lhb5vahqSKlvMT0xOvXn27eZw0NcwwURJoWlU0/VarZ7LZjihG3t1RqmhM4xQynENXScasWx7wMXbV1c/dP/pVDGFYoEx0jARSGGMusNgu9mZUvilty//5Mcfqe1c6wya5kw+N5HbuvaWFPzIvUemTTIXN6/s7W/v7k/eeWJtv44xZgS3hhHTNVsjoVCVamOv1eMCSamkUjHnjmnrjJZLhY4XXlzdcm0z47qTuVx2plgqpDSK+p3OFRG1Vyv71bofBIsHF8naelbXJVJzNn2sPP2l1RWJpZSSC/QTnzqWsZDCdhjK3/tqt9MPLVOnlA7DsJwlc2U87O7TQL9wtccIwojomkYwQWTx1GmZshr3/qB+z33k7/+9gGn08kW/2eGGwQ2mtv4MP/u9/R/8lH73aSVCZNpyrkQNkyOEwzgceshk5ouvnt3edgmlUMoIvI8Q4t0eHc65wBIphTHJ5tjZ892UpaaKoUIx0yVWEmMUCbq7S779PbG1K3SdpbMo9BElqJhHv/EPaT7H3nyTa0a63/RsBzkmrTZ1IYnECilFCLtwpfmxBwvbG9ePL2pYDsPIpIhQSkIu/+g7rY8+3p05NFXS+U/98Ilf+T+f1ihOZ1Iy8BteUKCUEDI5Nenks/v12vr2VqCIjwRRSCFENbq6uW3phqVrXsAHfng4n7Utk3OJlMxm0xLJbCQyrnX+xubaTvWOXAojJTEuZtzmwBeCKyXX9puHFqeblfrnvvTtmamJUyeXfvr77144Ns3D5WAYffy+hdWVyte+98aLZy7ceeTAfn/Y94YIY9c0n7ztmK3RmKtm32t1umEcaxoLY+gaEBrTMEJzs9O1rqdWt/1YDLwh01A6bQoep1wr45pTxXx7veIF/rUbN+69+67ZpcV2tep3+1jRYRhqhqFR5vvDuZnCDz4xL4WiTL10rv7G1Z6lM41SKfnQDx85laJy2Kns4fzi8npDNzSEJKF64EuEcvMzQXXPUjF3HefBe6O//Yv03/5b+u1vC8VxhJGSeGVD/ta/jR++nz5wj3JdRbDASCIsYx4HMV9ZjXe3BzxGmmYlTSM3OcKEbkEIEYKRQoySTAqtrvh723JxUc5OiWIRRxGrN9T1FRZzdfiwfOIJdfoOcvQw/fa3ta/8ZfAr/4v9xMcPXDrvzU7XedTpB4Y3yNbbzX4n4oIRohAhQsUvv1Hhf+fBmRMPDofP33kk//rVHo8DyphFyNs3+n/57Rt/65fv0En8Qx9d/Le/m93cbXIpTaYPFd9qdw6XJvww6O3tbWztVLu9BpaCEoIUwmTg+VEQfuCukwTh9cq+qdGJlJvSmasznZFUyhZKUUqWpibevLbx6sXl+cliKusaBv3QPbd/+fnXY6kwUmvtvnM6hQl55frW8kbltXduxEhl065GaKfb4zGXnNs6O3lwdm5h9suvnFdKMUa8MFqcL9MoiBBqNToKU4qxzrSQx0pKy9BNXVcYM1MvpN18KnNte5eIuFTI5DI5HquJXObQ0lzKcZ8/d7kf883dnVIun83mhOCEkp1BTzctdHNmF/rEhw9NZxk3c5UbV77wVEUgojOqEAxly9x/3Hazhfm7Hv7qt65Uq4GuU4QQI6jRpHHwzuaWpjMaS8VQODmVtnKzv/aP2zHfv3wl+ke/Ybiuf+EddPmSXNtSn/tvZG4Oz83QdApJJXZ25eaOquxHmq6puB9KjRCFRhWqSql3nyIA6SyJaLmMlxaG+ZzKZFEmo2Ym9fyUW0j3e23tjnvd7/+BvINXsCJ6GiuM7r4vdfWKePS+kPsq4mhySg+DfuRnkYwpU9tbYRgSywI+UFxZqZ+7uP/4xz4oe9Xjs689dzbSNYIRIpQgyj7/jdqj9750/AMfmp3Sf+STR//dfzkjhAykSmkGI2i1Xm32O4amb+7uhVL2EaI3+2QUl3JxYcYyzSs3tjb266cOzg2i2LWtdMqVTFca0wgljB6en3Yt++rG7oXV9U88cPrwZGnOzf7pc6+CJvX86EprUHSM25amturtkIf+MOy2uxQrU9MppVIp0zayjn3m+vbV7QomBCkSCY4ss5S1GKM8jocRFxIzw/T7vhIq5VCNoVKhoFGqMS1rG34cbbYERdKwLA2rY0fmZ6eKzz73CtXYIOKtwWB9a3PK83no04kSQzgUsVRSp8x1rU8/uYjMdL9Z+4uvn72wEhgGoRoJI4EJ0fHgzsPl2dOPkPTUN57+yyDklCJKKSZyc4v6/bDVQQszvNdjFukV8tnBkDlo8KmPy05Xu+1OU2PBkaPmjzw5iI3y5euZV16q3nY89kLcbDLd8FxXzM2Q/iCo1NFe1QpCHSGECWZMi+OYjVde6wZ68qP4J38I3XlHOpczdaNCiKWlTlDi9fb7rRaeXMyqYD+MDOZMxa1tO5Oq7KsPPIK3dvR5ttFrpqdKfT+cK0y0ay/xO2nm6nUulZQSKyQJZl40/Oo3Lj7+0YeIaT9w0vyDb4lYYgwtvSK+shV898VNnXxj8dRdf+2HbvvdL7wzHAaBktXAX9CYPjl9/cJ5IYSSyEdyiBXBFCuFJCpmUrMT5fPX19f3qgghGYt63Pcx8xnTNIo0DWNKEE5l0zolcRy9dX37zoWpY1PFV+t9yBgogQlWf3n26gduO/z4yaVsqbfb8WS92Ws3FaKDKM66LOeklK7vNAdvLG/4QUw0pCRaLBX3m+0TJw7ahtWMeL3e7A+HSskojHSmcanSmWwq7QihavWWkAIhFSKCRUQG9XxKL5fzIm1fK6RiijpKFBTdqe5Xdvfu+Mj3Xdtav8NJ7wz6iAtfRB//yInTR0vby5d3blz/yxe7EedK03AsFFJBKD5yV24irzEnt31j7eXXdzUGXkUohPdrcnfHDEI/DLjt5jv1oDQRNnY2Y3tg2PTAnOx0cynWw3pOaXk+aB48QIv5XNjZL8841F1qVRuRt66Z+sAr1GqteqP69PfM5140B56AcW9shKCxbuAD8zifwT3Podbk8mrHscqHj2fjcKdaaWlSlYpchENqzGhWJh5soDCI5OL+XnvpgKlrot8JNNT3ByQ7lYtjvrs36LW9CxcIwkgpjAhGShqUfef5te3la7ni/AP31W4/2H57OeJRqJRCUiKEv/5a7wOn7UuvvHjgtuOP3r/4neeuKymut9vlQv763s4HHnn0+W99EzPWUmRP+k4oNUwwQbEUr75zuTf0hcLwaFdDo/0oLhk61miMMMKIaNRy7Fhxqeh+o/Py8taDi3PNdvcnHrnvmXNX9/sDinAY84sblSsbu08+cJen0D2nTzR292vt9lDIfC47DOPlRpdHvO0HlBKMFFfiyHT5QHkCMy2Kw2vL65Eft/uDII4MgnTGMKOK4JiLRqdbbXf6w6FCKIzj3/ndP8ukUpISypiIeK1eb/aDiIsy06PQv/P4qXba2V1dnbv9zr1+H2FMmf4DH5zbunq2vrt3Yw9fXPUwVkjwSHCsaZbGnny4MHPoqGawb33zzE5t4Lq2UgohjJToddUbr4tcIbq2nL770fTWhsqnKns7aOa0uNpMHTsanT+LP/RYadDaNUundWtWBLWUO9CicHNVpQpXNLfU7yyuvtOcXdQQndzYaJ46MTT0/pe/hrwBwhgzpSRGyLawZWHfw5TIYi58+Zl1RvGHP0TXr/lTk16/Y9gWce15pRcw0VG4292vTcwX3nqbWiZCSpvIB1fWnNIEr1bRyeLx7307FrLzzgW1sqHrGlUIYYmU4kwjG5XBN7/x2mf/5ifmjp3+8Y9VX798yTSYkioSQtPZ5c3g2ma0MEn2Vq598Dj55rOYEbwxGNxbLFy4vpybnytNT2/uV9eCYQ0LU9c1Tdc9v1fvIGjjVUgjWGfEduz+YKgbJqaUCyFioTFMEBZKDQLfto3L29UJN/34qYP1ufJLl24gpRChlMhaq4OQ/M6ZC33P+z7KgljseqHCbGNz3wvCaquLsGSEKoItZno8mitnH77tYL3Z3tqvrm9VvDBoeyGXyHYNpmmxxDvVhmYa9U43FsK2bYMxbxj92bdeswmKJBIICUqlpgEbuRWFJ3WtdNupz331q3cYxtqw78dcSjQ/5cyZe+trvmNq332jFitMKUYKaaYRRurovP7kh06kZk8Nqnt//vUrmCA8lkxEhH7n6einf1xevMKHg3k3221urtmO3Wpr87Pi4lW2v9NpDYoobPHaanrqNmTPGXrIY+ZX2qwn2tX9iDPTkE99ZX+qzDSCzryB1rakzqSmozhCBCGkEIljLAQ+ekSzDfqd7+D9Cnn4QXnhoux2aBAaN24wd2Je6UUe49DvVDdrrY7daqGtG31Gcbk47A2Vm8Xd1sDJzFAaf+sbtYUZ/NY51uooISKpRBSFGBGsEBfqG8/uVq68zoV44v7Jw7NGzBWhzEo5pmFiZnzvTJdg85nXegen8GxJIwLxOGz4gaDsT199xZmejjjvKoExlZaOCpk4n/Yi7kdiyEUklZISYaJr2sALur1hFESdVn8wGMYRb/b6fhj1PJ8iNOj01potP+YThWzONE7OTZkaU0hBLdVevdkfBl9+4fVvvHH+/MbuhfXNtb39aqtNCMKYCISkVIcmcnOF1KGZcjgc+r5/dXVHcl7t9LphnLL1XMrBlGgasR2Tamxje7/W7m7W6kHEuRSK4hgTQqmmMX0yp2UdZDCBVC30F+bmn7t0ea/ZEgjXul0DSaXU/Secdmd4bT1odNS5ldCyDcuxdMPACikpPvmBYrGY5f39V5974+JKQDCihEgBT9RTCoVnLrDhkPmDwasv75ani7WGUyp6PZ/kM4FlEqbzM6/0iEEvXVRisIqUxJI5ucVIZS5dJhEnZ84wLMTsjHruJb62ERTL0g9IzyOcIwXtEAhJRtHUFDF0vLNHlGIP3c8vvKPv7rKFA953vo1Pn4oZ2iNSEiKkd+PsOZTO65cuoijs551hLu3Z+cA2++vrZHbp6Nk3bmyu9zNZ9tzLXAkR82jQ798snVYSI/76xc6F8+tbl95Ug9qPPV5AmDBdo5gRyhw3tbytbmx5y1veXz69Y2rIISiv8Ha/hzBy/Ojs9qa0DUIIlnLY63drNSpFKZNO5dIpXU+ZBtON1mDY6vU6A++dS8t7+/X9er3WbDc6g44XSoVCzr0w5DFvdbq9YUB1/eTizBNHF2bzaSlH9bl/VYNA0reY1phG6fGZiSeOLRYzbr3Vb3b7g04vFGK32aMEl1OuaeqOrZsaiyL+1vkr566vLe9Wq51+jFTKNKYsq5B2i9lUKePGvh96Hg8DhJXCZDeM9q5fO5FJ74VRs9uf1XQdo3an/0dP7Q8D+cJbDY5dy9AxMTRdkxgfmrYfv8vcvHF159pbX3++Um/3BecII4Vujm5WSlbq0Wtvk4NL2p/+yQpWUaq0tHaNzy0OmRPPTnpU4X6vs73LuDKuX2xhvi2lHoXt2Yn6YIhXllGpxL/6TX15VZq2PPcOOndBUSKRlJwrjDCDuvdMhhSypN1TIlQffCTc3JY3VvgPfgI99RQ7tCgcO/aHLnU12b/28vPRxARxjLDeYJamnGxQmEdxyC6eVbo7pZtTv/d75xfm9bcukM0dgnEU+KGpm4QQpaSuM4xEbxD+5y9X/uaTnUyGPXDSWpxyuqHheX3T1GQcN3n88rk6xWitirZ3g0mCMrbd5ryczXUHg3M7O3OGqWtsAqG6H2Hfj2Zscd+p9Mwk8gL/mVc1FYdxtN0IlUKrlXql20tZhoYRo4gr1PGGQslqu+voWrPRiWLe97z7jy029qu3zU6t7tcZJQEXWL2nsQGjmx1GCiOEcckyLNsupe20ZTBCO93e2tpOs9PfanV8HpmUDGOhC+X3vJ1qaxjG1W5PSJQyjcmUk7Y0x2At020cmPF939urkZUtMggowobGECVvV3ZchY9MTOwqNeRxTjfcKDx31bvzqHZttVXpU88TpmNQLBGilml/+F7dMWR1p7a8HX3tpQ5lklDGNAoTfYMgCAOf6fbXn+b/+686a+vdV18cHDl54oWnVjeX42N3iYm5sFxRK6tavxvfcXv87W+l3Uxt5kg6iu16DS0diL/3LMtm4nSGXrpCMhnlB7TZREpxTJGmq4Aj4IEwIbLeRO2W+tAHcaslV9e007fRc+8gJOT8At/YJIfuKMbe2usvddod7dFH/bfe1rwOnp31iiUWB+zCGbq/j0/cUfzmX149f67+6CPFL33Fo4QEUUQwg3HmjBEpkWWYQSCfOdOgwsjZsuNr3VAPwiHGKIpiIUSocMhlGJEbW5GJUdE0XdPMUNIOgvXAx0qFcYwpWixmZwTy/GCr5w0pJyp2Dk2wG6VirevatqQo4kJwtVtrRhIsi8IYd/xYICwGXiHlMoI3Nvccx84Xcnu7lXLGnc64upJr3SG62WCVkBuASLGOKUJovpA9uXhAhJFRyGxV9tc39tZ2qy3P3+sOOJcRFrvtXsvz/DBSUhmMzuYyWccq5zMaQQxhJOXOTEGUsnI/9pVYdOzJYq4zjPc6nUioGYP1MG74fjGTIxj1DT0b0MpQbe2h2w/TvqcioXAQE4wkRlLxF8+HXqchlbqyLXeroWs5TNOkePfxU3EYUxVV9s2vPBUvzOmf//zFf/GvH8/mc9eudCyDzByKqB4V8ujKO+bsVP+B+9XTT5sfVqsTS0tWOru61j51kr/6unbosFxblRtbyLIVaspOB2s64hFGSDGYI0Eo2avIhXnimOraCs6mULeHtzbRJz6uzp5Xx4+TXn3nwvno+or18Y9GZ8+St85rxw6GQUCxsM6fUZubTDFnc8v7/OdvCKm++s1+s4UpiaRQlEqheBgFtmMhhC3LmCzb129U1vc5mUBvbai+H4G+E0y4kAZVXsSurQQi5mWqFUxHJziWamfo5Vy7GPFmxKnOAi7CmCukSBhXrlzVN9f1TGoJa85kmeVybr8nVRSFUnIRiSiSnAsUx3wml/aieMjFTmeAML6+tp0rZA4emC0V83mEP3rP7Y3danW43o+Fq2tCSp9LgrGjsSEXKUNjmDi6fnB6opC1q41g4Ifrmzu7e42hVG0/JJSWXSfvmlnDcDTqmJpGsGFYhmVYpkYUrvlx1zB4vVndqdY2Nrk35I3BnaliKW0z5jcGAz8SQskjqTSbnGr1+sMw1gnLMn0g40otdhyDUSQkF5IigpUSUoar+8Sicjorb+xK27KOHCrfWK8yRqUUnMeapmGCRSwMPX7mxfDUCSRj8a2vnb39WH65g9656MXc0hQmNNI043vPm48/HB49jp9+Gt1z341iDlNCvKFcWuRXLulLB0W9RTptbtmo3lShh6D7HFwYqtVl2iXFHNqroTDU56fjs+fl4YNoZU2aOm221Lnz8fa2fuqkWFtX33teW5gTlEiEjRdesSkaKEpMQ3vppc7mVoQJ3qvCCCMJfahRHEolwzDisfjgQwv/7p88/PIbO29f2N3ZqGE60IniEmdsSlCcMuRCES9vRIOBNAnOYuxoGlLY18idBxaj/X1D4DqKAimsWIRRhBDKMW2w0QtJj2YG/pMPi49+0Dy8oK7vz331Ke4N+wNfRBplmOlMI6TX8zr9viIIIRJJ1ej1nn7pzF6tOVOesBi598jCuSg83s2/vd/O6sygZLXvm4RkdYqxcghydXpoqlDIWIMwqPcGqzu7vX6AMck72sFyPmUZrqmnLcOBiUeMRnEcxJxoTMW86trDv/eZoSn7Z6+Kbz4rX7khlCzrppWnnu8LEROKQ6S6UmX6g1BV2Pz8dKnY3NvrDfoZRCIs1jb8k4fMhw+jtUaEiDEMaBxz25SBMqYWJ3/tsckPPzQdK/bJn/2LoT+E0fiEEKykUigIh5Qaq6tydoZ/6c+a+b9RZAbjHL/+OrXcjIY7+aJ48RUtiviDd/FsVnv9dW1xwS9MqP1LqpBDHU8RDU9MiEoVYyI1HQ+7N3PwN1MZQagWFwiX6Mo1dfedanefVavy9G1oZ1dk02Rnn8SBMT0TNdvquZdRq6k+8JCjaOrK1bBRi+88bQlEajXv+efbA1/6gRnzWIgYgklJpBSCEEQwlggfWnAXDywsTBWeOG2sLcd+3+l7kkuUthAl5I++uffqxajVijWKU4QqgpVGi3OzqaHvbW0VhdgXPERqGEYUE0MjrqGfmJvWMel6voj5K5ubPRSoYV88MLv1dTXR7hu6PlmwMWUB5xrFDiMpg2CENKZFIh5E0TAU66sba+ubSiGJpB/ESIqCbRHFU5TqjOUYo0hlqFZ02Fy+gLG6trHb7g4UwhlTPzxdyqWsfMou5nKUECmFRmnKdZBCzU6vUavXusNhEIlh2P6xx5xj+fDqRof64sbmnZmsoiyXMglSGNMw9iPOFVLVMEjZ7qDd7jab9548fuLIEYxJsLfrCRELdH01OH7Q/IUn04/cnat3OZfKNYlrk2wxe+jkIad8aGOjWsynur0oGdKgFFKKI0SUijxf7/U0yft//lX1qY9nBLKoob73bPjBRzI6U7Mz6At/NPR9dOooHw7Z9RWjVIhsh9QaYn6avPwqPnaC2CZqtCXBUmEELbDgwjDBqtUStRqybYyJfOeivOcevVZVholabdxo6ffcyfsd+p3n+cqG+KkfT5u6eeVG9N1nwh/+pCsk6vTkX3y93w/iwYAKoZQUGBFoaFJKYZirS7BtmbffNosKS+3Lr2CsFSYm23wr5egGlWFMXjjbfP1C2GlLjSqGiUloznGKtru/suIEQYaymoi34lAoJTDq+kGRWLqm9fuDyUx6qZjLO86r594++2df1HXXKBd+/NQRdOik98QTe9Vu8et/VuKhbuqIkjjOYYSYxriUjV5/v9Pv+qEXRBommBBq4M4gyDLMOQq5dCixGEJC2qY+ky94ge9YTENsOpfJunYu5aQdu5DLZNKOoWlRHBNCMCb+0F/b3qlVGq2ZpfSv/k06aKW+9dQ+V+f+xb8JWs1hvX08JrlcKoii3jCIeCwEbnmelBJR3OXoit+f0IyCbmxcWd7X1zXX0SjJKNZUMVboymrs2N7JQ6lDU7pEKOIKUzQxfaDf7eolc/rQkcMLmXPXujgOk+DxZpewQgiJakuzzfits57j0I980MyYKJOmf/QX4U982llYQOUp879+cfjhx/WH78ORICtr5uI855zqBjHteG0VHT2Kd19EjBJDU4HgiQVSmKBWR+mUTE/R8xe4Y9FCijENdT199QZ/6AFy7h3x2hlerePjR4wjh/XX3va+9lTv1HEjl1dbO/ypbw7rTa4kDQKiG9IgmlQ3H6EKg1SVUjEXEwX3gQePBM1dRpBZnmO60anubFWC81d6e/Xo1bNetyc1ghlhLiYEocbQk9X9uVQqLeTa0NuMIoNgaNvVCYnjuN0dlDNuKu1mbYtR/GC+/J3v3QgIdnLOU/eGp//3z87fdb+O8qJA73z+Wc0yuUL9gacI4wr5QWhZpu049Z6322wP/YgRouvUNXUhA003W0PfxFgJiZGaK+R7/YEU3NKonXNmysWpfKaQSbmOk3JdhBGPYwshkxGGsXNgZrpc2Nirn//1X7MPHtdR56xYqX3uG+TS9SiOJzA7PDOXS7scqd7A32o06v0eI0TDeCBRiHAkZSsITxgka+qzk1ONVivkIk+1UEmuVKD42xe9f+vv3XPCKOWNB0+nisV8bmJSET3sbKXmbnvkAwfPXHxL3XychSblzclMmqZhhKVQ2xXtwAz/3gu9yOcf/rB5x23suVf7n//j+Ed/yH3gXuP6cvCN74SrG+SjH9R003zpTXLn7azvxfNz+HvP+ekMm52lN1aEVCqxQAohxGNEiLQs7A1xtc4fuJsGsVzdkZvr6vgx8vyL3naFVxskY6NjR6znX/Kefn5oGdxxzNffDF5/y6/WhWGy/oAQKgihhBCKkMY03dAFF8M4klLxQDxy39SB2QxxJt2jS3F7EzUrsZBzE+b1bf7iN7vBQNkMFQnVCdEwaQjRE9KK4vnJKdVp5uKwwiONMKGEgZVGUSnjLJXLh+cmGUYR54yQX/7rn3r4wtVuq3vswNQXnn/9+T/5/OzWBcedyTaaS+lC1Gxtn7pTw2z2wpmsjBRBjuNgwiQioZR11FNS2rZtWlal3giiOIMtr93nlExm0kEUDaPA0TTbtuanJg7Mz8xOFrNpl2kMSSWEFFISGV8n9o3yUqpbe3DKDqfnX7/2DL/+TU80m19+9tcLs9lPLi6v7c1OlRqddtuLqELFDC1kU9u1+k61jok29AKOJUPYwkSjeGp2RsUiCPwQqRJFs0jHUjQE6kh1fdm3TParj6ZdQ0msFKLG/N2YajzsP/nEwd/7woXdikCKK6WZpokRiqFDnBDORSzwflPLuPzF1/u1RvDoI6lyES2vhZ/7A/HkR9KLB7Q3zsYXL6laXd19B0FI++o3o9tP0JkpNFnWr16LZuc0SmOFUAxDB5NgVUoVhmprN8plqKaTl1/3Wx05UdQuXAkHfVVvYp2ITIaef2dwYy3SNeJm0cUr3tDH9SYjRHXaTCEFsx0wxggjyzKVRGEYRrHCSt1/b/GznzmEejVlT2CaEoIPh32s8CtX/C99rRH2hcbQHDMdogZChlgNeOxh7PG4Va+fXpgPW931MBgILgjCCOUsa6FUMCiSCodCEiQXDh4kkh+fL9uH5ihWHz519Lnff+bKty8wjiZmp3/vhz9VvOO2hR/4MRO5l54uf/gbX3XyqcEw7iFaZiyVyRhmvdZoaRins2lL0/rDfrPVb/aHjOCIcx5znRBEiGMZi3NT5VJBKBUOve2e1+n7OYoMSveIfu3v/wybme+q2j/7g9/r9MPN/+MLzSCIlXhMn/jYLz0cRPzEicPdTi/XcK6sbna9QBKkBFqYKFGlGp2eo7MgiIhSRaYVXFfX9db2BtaNKPB8LixCBMUHqLnLo3osLl3sff4vzb/5I4WJOIzjQFecsFRcWzkyw37ux5f+8xe8nb0YE24Yhmnb2A+E5IJLRIim1GCACaFxTK6uiEarTajKZtHaWvgnf9GamqApF9UaMoyIH/iTJTEciqe+K28/rk+V6Y0VaVjEdbVG4+YgzncFCCEUBJIxhAl9+2zIqEqlVL0phgHp94muCUpVvcl3KzyOsFMQfqQGfdYdmEHEGdXQzQdq35zMAhNve0HQH/j3nJ79uz9/+vBC6tisGwWByXQlQtnd2dvc+aNvdJ56uo3i2DBwDrOipgWCh1h5XHSVVIjYpj3stKxDhzOunfEGLRwrrBzdmMxnpZSRkPVWc6ZcPHhwUTO05Rvr+UxGxFwKfnhm8ucPHn97dWthIlfukWf/4b9Z/exD9RnqspJme0snj0+G/usP3a4OHkutbN559oX5AzObm9vLG3tSioxrDoKhoWsmkiqSEUamqWNGTSkG/eFw6PU6zGDGesrd/MRP+QU38/Jzt3dayzq5MrzCz7/UC1uVL3/1I7vhX7/9/uffPG8Yxmc+9X0xVgGPo4gjhBzbOHJwbmO3Wmt0BMJK8pmJYsRFKGQUxUQgixDbcdrtbogRN03aVh3E89QIJbGZmsG6pwKF8HPP1za3wl/4yXxuZtMuLymzgKlGQu8TH1p84M6Zbz6z9qVvrlb3eyWm64bmDwXTKOdCIcwY9jwqpQgDw/ejXDrSLUSZ2t/n/V6sBLYN1enJ4ZB0e8OUowydvfia5zgsm8OVPd+wKCUoGo1iec/LtggiSHBkW5hzJSWNBUFYWkxKgblShCKdYc6RVBqimmFoSkqkJGMagsw7phHnMee2qd9zuviZTxz+xIcPdlvtVlcenndJYdGZPBbunvnan3zrP/ze8tXr/ZLGJplOKTUQz+vWZuDv89hTqMnjGKmHJqdODf0Hb78z7LefX1l9i0ec4YVSIW+blJB0yj5+ZLFcykdh0Gv307Zl6wwJiZTSCNUI5UIYjDGCdmqdX33ue73jGRrTLMHzH/u46HaO/Opn84VFDTn5z33ugc3K6+Vy88HHzF7E/+j3G+fOtTq9Vn6KTs/KG9dos1JwbPfJT5Z/7uf89n7qL//skO+f/9FP6d//yRC1N9787v5XX4+9TuX82Y7iPAqejCf/0Q99n6QsFrFpWpqhCSGFkFEcel0vCiPPH/YGnufH6zsVIZGhGZGMr2/tbjY6ukCLurk4P+s1OzPpzLXAW6/sFzS2ZOhNLjJMxwRXwtAguC3iSiC4RX744xO/+Nm7Dz30A9IsBWsvd9q9d67sPfLAwmY9+MOvrHz7ma21rbZC2DR0Rm8+dCbiHCYCSoR4FEk51JhCCEUhQVRBh0kYEUYJ02JDR0rhKFKlEm3UuFRKCBJE8lYLhDANY0QJRUh5viSYYUwYJUrSkEPVolAIDzl5d4w8ZkTHMBloMPSRVClXv/NE6dEHpj788PTpYyWTqe2V5QvL/UceuZ2mJ+18+eorT/2nf/ftP39q14zxadMsMqoh0pJ80k0hJaVCMZIdKWOEsEKpdNqRaNDrpCxTJ0Rh5FpmwbZiIXTGbjt1ZOnAvA8PEbMsDWEdYSViqEmOecwFHwYeVrKcc35+4dCzZ1dTrvX4kYNn//2fX9bE94xaKlW00rmSVd6Ym60c0o7cfRCjTB/15KuvaR/56JP/8l+HadJdu7r8N/626vjFf/brKFtQqPzmtWf3Z06d234z+txrQdion1t+9OnKXYuzAU+/cG095ziffvxwrV7HVNcNHROim4ZhaghjG1mplNvvewvu/JVLVy1DePHEm+vXuw1uM8s0TU3HKiQKq0DKyPfKx46+fumCjtWiYTlEhQwLKWcy6aEQSKjDzJx2+F7Ev/hnldfeevZv/nz1R3/2U+7MbVJeLBV6bzz/6p33nv5nv3zfL//Mba+8vffMK9VX39rZ3huEkdAoM014LhuJoggxKoQVxRIhITFSHCmCEcKUSsp0KVlvECopGNMr+0oIItW7mZ73WCBozNA0hhTChJimKYQQgsP0cRgVI+EhbQhLhTRN1zRm6MQx2dSkeWQxfd9t5duOlQ4t5DIpTQnUazYalZW19e7Bu+4/cduBvS7+w99/9st/eLZe9dNMO2ayaccNedyNOFfoztmZzVplPYpbQm5GAcMk5uKuI4d+wM2IVidXyp65tvKM8GdK+ZLrxkIcmJn4/o89TjGWSmCkVMxVGDOFkIh5GEZBOBj6g0EwDAIuhKYxQ9f6fZ8xls6lYqReOr/85Z3V0NGymp4nmtSM5r3F4ofvShlF1Axm2sbED37EPX5HJBqt7s76f/jDNM14h91eNByqVvcPXptqc33YX+NhJNThmP3TH/iom03FsWh2+rqp67YhJdJ0hhhxMxkn5TJdV1IhrCgm3sAL/AApdPnGjTW+u3G90K3h/d5+N94bym4xQku6OTlRdtqto4889IfffTpP8CnTwUj4inQlP5TPxYperlXKjGUcZxjx1WB4bRhjrG6/Z+Kzv/z4Rx4/rYat737rlSKpT8zNTcwtOSlHKtnsiXdu1N44u3vmXHV7b1hrRWGIhJJhEMY8guEoGL87QxdjYhg6JYwL7g0HjGlKSTmKwDiPlbzJA42GCCOMkAIGWSNUISSkVApRyiglSClNJ5auW6aWSVtT5dSBhcLCXObU8dlDh0pTMyU37SJshN5gULlW36/2qnu1/fqV1W5u4VR+Kvuffv+NL/7Xt/ZX2zajGUO7XTemM+nF0kRjMGjs7R6eKJsUB0JOUeZiESvDwEgSIj1/7rY7ruy+4gSWj9GQokCXnKqSkz9+4ohmaFJwxJWMYhlzShClTMea1DXD1HRdMzTDjMw4CIVUnAvHNmMpm50+M7QHTx/hXG4125OWm3atOBLfe+raxmurROE5wfoKb+IKvvCtdnUrCDveF8/nB3JgowGWSIgfMItPHlqMKVrbqvhRfPeJw8yxQ6GoppUniwohoTAimGhMMwzNNGMhQ29oG4Zp6VyIdDbV6/Xy2VLhuKpeXcz6t0lzJYiCIR/0g16ZKYUVDoNCJhNhGobxTDptYSoRUUgMMQqG/qH5A9V+10Lq+OycF0Zsb1sptMX58pnqr/zsl+574szf+tv3Hb3vtj///W8frt1YrFZLs7Pp0nSmvPR9px76vh8SPPBbjdZupb22Vl3faK2tt7d2mtXaoNcb9r3Q8zgijGlMKSQV4jFHBCtEojCWSuKb1YE3jdBNF6bp1NA1RlGp6DCCKCG2qWFCu71hueDOTruOrbkpO5NJTU/n3JSbzadKpWyxlHPTtmaYGiNUySj0/PqN9tal5u7O9l5jeWO4vBGsVeTtd3R/7/e/VLle1wnJW0ak5CFNP1UqTE1MI6TMIDB1/Vh5YqdaE1KmmK5hVOU8VnhW0wf9PisWhRCDfr+DiKJ5wSfM+cjSVHlyIvQDpZRGiW6akkaMEkvTiZQiwhRLprBtGjklsVKMMYUwoZRQ7AuENV0SJDXtaKPl+b5QCGPyJCPr+1VDNwvZVKfbf/M/fq2X15UQuB8vddSBlO1w1veD6Xzu0dNHM7lcwOO7ShPU0BxDo5RqlFDGpBCUMUw1hTGmGBNkCa5JJLgY9roDpSSlzDJy+UKj1TSmWsi7X8eW74v2MOoHCis8UJIoHPoDY/Zws9N2KC4RDfoedExMQoMwtgk+NTN7Y2/XpNh0bXPhoLa9NRj0AkYsoc59d+0XX9q6/4mD/UB77a3Nw3PdYwdaR5bWZmdX8gtHnMmjWqqQnzpQmlm68z6FiEJxHIdBHATtVqdV63i9wXDotVuDWsvreXGrFba6vkK41wuv3KjVWp6UMgxEGJM4jhlCCiOkM6oE10098ONMykBKDgYR02nKNUyLEKxMnWIpYq8/bHGbDAPe4rjR6Snh6DpBgnt+r9NutDa3mxs73tpesL0fNVvC7yLuqe9dOaMRktJ1jBFSqoDw3bn84tRMyDkjtB5EByfKOmNt3yu6KS2MGgoThEu6ftvk1OXanq+km3JbvXZdYp1mHTFf2/Yy9yz3oqBk2FEYcyGwRhXCPBY4ljKIhoOBkLHgUilkGFoq7Vq2iSghlMVcaVwqSuIwLOSztm0Ng5BQijGZmSwtLExGkeh6vhfHE9tdWm0LhHM6m0g7HCuq0xPT84Vipss0jAhmOsHYZhoU7UuMJReMMqRw6AdCKkunLsOmjPRUihu6pHq70w5jP2tYlm3KlrW5tXe98eZbK9kQbQ7CbqQiKWNfYY2gwPdZKr23t3vnzMy84VQaVUqoQqikWRHBnV7/0MTEVrvlcenq1DGM2xdmWytrF/whJdgxNMnlm09dlZhSG1Uq3tnrw8lC88D0/pH55cX5FyemSulcwU5ldMNEROMcKaV0k2l+XLLwpEsRSnlDLeb57oD7Pt+u9PZqvV7P7HZ63jBqtodhLKC3h0Hpgh/EGKOYB5TgXt8zNKIkNk1EEA092m9pM2VTScF01m9pcc8sF/TdLhFSRFHk9Xmn6+/Wwp39qNrkvZ7kvpIRxpFyGC1p1DVYhmIDEw2hGCOp1MLkpE6ZQEJJ6VjmgXQqCkOE8ESh0NjexggpQljazWWcSc/d2q/YmfSw2axKRiT2o7C6GQ1YOytWPnj6Ht0gupSh5w88jyjZlSIIos7AC8IwFMLQtKxtF8JYYRRzEUQi5DFChDHKDF0xShjL5WxCqBDScax0Jt3p9iXp0HbbMvWskoSQtKkRpIRCnOmc4Jlc5tTiPKNYUBoiHHARRHEYcYYRQ5gxgjRmuyaiVGEcEBYxolES+3Iz3Bk4Q9HVVva3DqL+kYfMa29Y+8FbATrc8RsCBRwFjCqFkK/QQarZmtlstu6anlsq5BzbvLG9jRWKBZ+bWxhUaxojCxMFhTElVCmVSmWOlcpBZaeoGaESMSKBI/pc9mPRqcfVmmxsyitX42edQT7bnJnYnZzQ5ietctHJZgzLNBSmo0nuMuacc9QfhEKh/iBo93irEzX7fHVnuF0RO5WAS4XVzeQIu/moNIWUQkIqjFQQIYwlUoh5mJG471FdCyt1z6AqndJ3d9S5S5JgJTkWMfZD6XtCcUJipARWUhkITTMtp+lFk7iMGIRyqYQSNiFE0R0RH8lkHMe2MDMo7sWxaTJbM5qDvp3LuZh0EGK64di2kMjGrJxK7+zu3p5KxUpV4wBFjZaHY1aL9oPdkj9c9PvDfmO4EyHP75NUlDaoCOJYxDwKI4OQtGOnbVPTDaGkZCzl0oKma0xjGkUEc0SGnCNMeRRjgmwn7TqO74fo6o0bm3tUZzJUFGYUUWwyXWfMMHUtnaqEsR/FvW6/3e7YhpZNp7KZjGUaOsEYI00nqVzWcEypFBdIKokiua9dzkxOnlj5WT061ox7z5z5/HOV31pf9nSEC/PXWmtYKa5hlMGaVGKgRMkwEVZxFOZtsx/4MxNlzOjqxjqLuJN2B81mEMVzqUIzGGYMkyAssZov5HdbDabUBNNjhQJFdI1gS/lSdmLZFLzl8VYv3tqXu8sRYgHSesxGjkktA2u60jRcyJmM4UioMMK+z+NIDQPRG8q+p7xQDQIRcpig+m651HvDeKjlx1gphBTisZIYxSGnBPcUYpjs7g51QnSMNIQ1hRjCMcEWJgalGiYuUVmduQSnCDEIoZgwjE2qCSy4QlThHpYaUguFIkUoEDGXsh2Es5k8j8Kh588fP1q/eNGxHZrLXa7t5w0zotTSjau93r2uuymlx0OCEKObrh1OlTO/9k+zq++8ceEp996Fj6Sdyc7COx2+3HzTm0w7VkqLOEdSaoZuOI6ddjHG1NBNx8aM6owhqYSSEed46HOBNEYVUgTjIAykULls1jINwRVCgGMwQiiO4+HQG4bu6k7V0FtKIaKE61iZVMqxTcMy4bGVQgosCZZYZ5pSkkdB5AXtWjV9fzt6+8dI89RQxpZMif2Hvvb87xi8axuu4nHZCqWgGlKLxeLyfq0mOGF6zxuYhDLCHNvqeYOJVMo+cPD8jWUZ8dL0VM8bOiktV8jWG82im4q5TNvWjJte67ZzjFGMdYQ1RuKI25S5WE0jbShFX8qqiKuxEIqFXuwPUCCRUkIgJQmSqh9LRAimiColOJJcIYWJwuj/X9iZ/EiWnVX8Tu++OSIjMiIyMiMjM7IqsyZX9VgUtFtCXXSDERLqXrDFC1ggVmxBXhgJWYIVYpS8YZBQM8gCjAVqUCHT2E134+qhipqzxhxjjnjxpjtfFmlwWcLiT7jST+fqft+555gTxTmJbX7ObUeeI+d5isD/xjxTBDGEEAAHIZegAMAKJqWRxlgMIYTAhXCN0lOuF1vLrBbWcgBKbWIElyrxznrnwcOHSGttcdSorRtjMTLWOi51pK63K03XnU3GJbDdavWZlL2N7pOcZ1otUzIv8qZL9XQ8NuaZFr6vpS4QBUIiD8Df/f1rR08av/HiP52JLwynQB/8XPHCV85/aVodna0tuQQjyUWeFtihyMEQQgChFlKUpSKEEgcT4hJSiwImjTY2K4o0K6SQSsiiLKLQN1oDCwiEFGEMgeu6S9WK71GEEMIoDIM48OMoIJh4lMZRiJElBBsNU57dm90rh3ZzeW01aiiIFtw0aH7wiI6z8c3DW09mi3uDzwtc/sIblwmkNx88zQuGCYkcElF6NJ5MuBwA4M8Xy0GQCRYEfqu9kkwmfhj21rvleNL7sVePP/m0UW/UW2sZIFZyl7pcCt9xdjrd8WjgaWWNqVZblXZ0cHzIjcYIOwA2kK0idMrFAyX6AAyVElA7AAILqw7BFpbAamiVtcogAaA4GRMDAC30LZIWFcAUz7Ur/LACPS9GEAAAMIAexBRCioEHUIzQEsYNhw4EODZCWNvA5KwXbFACjS2ssQA4ACoIjYs6rdVTjSYyymiNAJ4De7m9GllQMF5dWsrznCsZr2xmR/2kYKIaCy7qSzUNkMawGkVKqADhJc+jAA6SVEIQamwhBBL1GtWGqX1+bfDS1hcdu3NwzEZFcedgcO1m/+d/8YiIAiyELmXJ8tymxlhb0LVaDftECc2K4iRCm3iuFwfYpcjakokszWbzxGgDjJVCtGuVTqO2e9h3IAwwcghCCDquG0bBWqfdaNTDwI9CH2EohdRCAggwAorJo8V0RNJG8bo3X7tx+Nm9+JOza+vOOrx16+5ffvxHo8M1Bg+VgDPZX10Br5y/AKTora7mvNQA3ru9m2UFREgbuy9lfZ5shFHkuHmaxnG41F6b9wftZv3p4bEbVwQEgYONEnFnbf7gQdSoYEaiSlRfqpWCyeGYImS07LZarbi6e3QwztKTqYwGAFq9hel66N5l7CErDbAutOdcz4WQGyuM0RBoCwQAhdbMmszo0loDkQXQBVZazv+nJ/ZHAgROvg0DCzB0CfUQrFO34bntIBRp2tR2Zg2x9hKlm3G0FIYYoFwLj7jUdefWLIzxoohLaYw0xjBt1te73TCe5Wmr0QiDYDIeCddthNFIiUGWBe2VcjGnvqeIs6ByXjCA8FzwqMTAgvuTceg7UIHAo4HnvPX6le56+8bu7cdP9Tc+ujZkh/eH9wWPxvi2897RO2v7IfYOZ/2B1ucufMFvAro8u//R0dKISisrvk/DCDvEodRILTXLSz6eJhljeVkWJUMIVoKwGgeb7fqz4yFFMKSOhSCMwtVmvdGoub5HHWoNSFlGKHYMVUJZKzQAKSt5s7/99Nd3/J84QmbZXP2TD7+Gv/ze9nn8F7/Hou6/Pxu+ME6ONLAKjS6e2u50VqaTaakWAXYhwr7vpmmujJHWPOOlsGbLb+eCY4z3j46+cHqn29sY7O1V40o+nymXKiVxUVS2t5Pd3Txn9XZrKV042rx27vxH7KbJEuf74bvO2V6vJ6XhgvEyYUUmVUgcrhRdIB/YO1ysUyeCsLO26lO3lEJqY4zNtWTGlAYcsXLIS25BaYyV8vlCjh8NkAXAQoCggVADCzGu+kFEHUqIxJgAs46dDiHbzcZGe7UaRA4AHCitgbaWcjFLZoNi0VpqEKGABdyjr165XDx9hhy33moOhqM550vdrmWcCzUt881K1Z9NC+pOINidTEZFFgaVIWMUQg3Mo2QW+U7g4J1up7Vce+n8dqVW6ay1vvbk3b+6Pda2VIYpA4PG0XBAL/5KbbC7n3x785cuf1Xnm+ljtjv8xmu//K33/3AcMC8FsGQikwo0TakU5JiPjNBCIaCUXWRZskjWmg0H0oIzN8IUY2jxSmOp3qj51DFaF2mZFywPp0TUVBZbr79TaVCDyoQnYFDrduX0whHkB8n4/nh8425y7+sPiwT4IupsCaf+sWaaEtih7qWVlclgZK1xHAIcQh3aXmlKxithkDAxU9wqxYFdCF51PRfjbDxd622EjcaKhTzPURhPFlk3iACAZRimSVKRteWVZjqceMa8ePUnP/27b2JjHEKE0RBCHzskoq1aVRnLjUUIMCHn6aJy1PeyDFhlrA4cN3T9OAwZ5xBAbnSh1VyoqVZAcGuMMsYC4EAkgPn/AALQQqCtldooDA3GTuA5FhCEHKMzo1ao98JKO6iGQkmmOCauA3GpmVASWNuuVlPOF4ITKROhXv7Zn+F5Ocnz9a2tAthRMkcAB5XqvD9kSpYQBQ5mXNAgKDjfn05zKTMthLYJ5wspSwhjiwyEcexXaxFxHYgQgHCnXSn0/dsPpLbMC5Q2cqO9cmf27ff/K7kS/Fo+XROydCD5zr/F4Owu6Sj45IxgeqwWZgVvRm+sgCrZ2BuMP/70m3MIDVMWQBAH8f7x4KUvbf70xmvvwKsSyf7xrUcfporbApYAAM5Y7QK5LH+1R9+caviM372+/1tvnFurbqHFQTFaPP3gO/8IPHH7+DMhK0+z7y0fulfaK2vLS3v9aUcWjWXlIHhho/Py9iaQCmNUq0TIDYQxrVajTPNqODyeJQiBiTYLzkOMI+pCiJIyD8aTeqPO00QxIShNs0xZLfcPo1ZzNB7tDQent7fLNB9PJu3tnY3Ll49v3ciVJAC2WyvTyZRJkUlDsEMwKaXiWgEIN9ZW4Xj8lDGZJlzbCIJKJe4t9wb9wSLPVKkdBBCC0toJZ6mSHnYq1GVM65MM+P/r5vq+3/Vkq4oxxghXg8hIZQDwfT+RqlJbfuviRTYaWgsBxFLbRHNgbSY4dWhJwETrvclURGEopW7UtjY2b/3LtdOnem4YDsajVIpcqWUpXSWZ4AXGapYIawl1Do8OcqWMhftZ5gLUC/1UaQ8jYXRIHIc49eayGwbGAkrpuY1zaXY3bx/OC+VR3A3r4bzyZ789ZbK2s+l+zvY+3Pt0mIk7/euDvxlvLME3ezViLC/KF72vLGevJBntP+nTK4+r5/bL+3UJ+HKtnhSzq19u98jb3eO3k1lEPWycvx+/+NX976oWrltL3EbZaV3C33tzROU8zVlWf++637n0wes/7k8Xe9c/WPzntMhST9qxNIDjhxe73bdfuhRHfnZGPDo+ltqutBrnz54OIx9j4rkOwqhkKmU8iQOLoE8oAtBBCBhQalUoteACGKuBEYP+VhigIJoOBtZxhlycUmo+mzDPmynZkCorirjdyo15cv2T9Suv3L15I2fMx0QIsdHb2D88yPM054JSzwBAIAqpJ6WsNerrva33//UaU8yiYDKZLdXqm70e43yWpflxP5snEyEPWWkB0BAiCxGEPwTQD/q5ALTAWmtPzoAQgBCUSuRlob2AeK41Rmn11tWf8sbjubVGmYIXyliEkDLGOk5YWxqli3++fy8v+UCwlgI758/c/OhjHHpuFKeMzdN0wXhJiZ4lgAutFIFovFjEvj/XephlUmkLLAP2UZ4BYLmxlFgDwcmqy/MDpQ1BCGp79uwpJng1jITQBILTvTXf85tPDzTW7373D5SplvpAKlKa/rO9mSqrv/k7+eef7c7/9lKZXc6IEIKPx+av/9hffyGJcWXrTB0hqArdXT07/9Y7cVyBlhTM3rn78j/022c2jk6/vHPm1eqdB/emfTrvjx9PH944fjTOzePkzp++e+/rf87VIu400StfvPPhf4SzZOH4vObqi8t1zyXQ2s5q68yZnuMHbhwwrY0G1oI5l2mxENJYCInrOphQBF2MtLUaQG5sLoWLsYXAEpyUaVupMK66STqbjoBSWVb4AE1ZmUnt5kWSplEUN1utz27ccJ48A83WrCil67L+sfHdZndDH/ePRkMmBQKAM4YhQhgJqZqu2z13Pj08ZLFSRu8+erS51dMWKuwsMH4i+EGenZhYS6WM/cGr/b8BkzqVkLh9jlcAAAAASUVORK5CYII=", "text/plain": [ "PILImage mode=RGB size=192x108" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#im = PILImage.create('teddybear.jpg')\n", "#im = PILImage.create('grizzly.jpg')\n", "im = PILImage.create('blackbear.jpg')\n", "\n", "im.thumbnail((192, 192))\n", "im\n" ] }, { "cell_type": "markdown", "id": "8373d8af-73cb-4d72-8a9d-c19228a03355", "metadata": {}, "source": [ "Let's import the model and create the learner:" ] }, { "cell_type": "code", "execution_count": 1, "id": "6e9106b7-9c6c-4b1a-8d15-777b0e44ad60", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'load_learner' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32mc:\\Users\\teent\\OneDrive\\Desktop\\git\\minimal2\\minimal2\\app.ipynb Cell 7\u001b[0m line \u001b[0;36m2\n\u001b[0;32m 1\u001b[0m \u001b[39m#|export\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m learn \u001b[39m=\u001b[39m load_learner(\u001b[39m'\u001b[39m\u001b[39mexport2.pkl\u001b[39m\u001b[39m'\u001b[39m)\n", "\u001b[1;31mNameError\u001b[0m: name 'load_learner' is not defined" ] } ], "source": [ "#|export\n", "import pathlib\n", "plt = platform.system()\n", "if plt == 'Windows': pathlib.WindowsPath = pathlib.PosixPath\n", "learn = load_learner('export.pkl')" ] }, { "cell_type": "markdown", "id": "bad6e35f-536a-4de4-b914-1ca4e3ec3fd5", "metadata": {}, "source": [ "With the learner we can to the predictions (inference):" ] }, { "cell_type": "code", "execution_count": 25, "id": "52a0bb5a-e5a9-4905-a45f-4f613701c207", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\teent\\anaconda3\\Lib\\site-packages\\fastai\\torch_core.py:263: UserWarning: 'has_mps' is deprecated, please use 'torch.backends.mps.is_built()'\n", " return getattr(torch, 'has_mps', False)\n" ] }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "('teddy', tensor(2), tensor([9.2855e-03, 4.2793e-07, 9.9071e-01]))" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.predict(im)" ] }, { "cell_type": "markdown", "id": "c9519ddb-f6dd-4e8c-ba67-3ba748593911", "metadata": {}, "source": [ "The available categories are contained in the vocab:" ] }, { "cell_type": "code", "execution_count": 26, "id": "82cd137c-b375-4902-a572-95a5d723fb3f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['black', 'grizzly', 'teddy']" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.dls.vocab" ] }, { "cell_type": "markdown", "id": "49c774b1-96c0-4a3a-82e9-8453de8b26cd", "metadata": {}, "source": [ "This is the function to classify the images:" ] }, { "cell_type": "code", "execution_count": 27, "id": "1f479df5-838d-4f33-909c-703d39912d9c", "metadata": {}, "outputs": [], "source": [ "#|export\n", "def classify_image(img):\n", " pred,pred_idx,probs = learn.predict(img)\n", " return dict(zip(learn.dls.vocab, map(float, probs)))" ] }, { "cell_type": "markdown", "id": "15b2bff4-0a3e-4f6d-b628-341759c6508e", "metadata": {}, "source": [ "Testing the function:" ] }, { "cell_type": "code", "execution_count": 28, "id": "9049900f-0cd1-4a33-9a5c-e5bc08062dbb", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'black': 0.009285487234592438,\n", " 'grizzly': 4.2793084276127047e-07,\n", " 'teddy': 0.9907140731811523}" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "classify_image(im)" ] }, { "cell_type": "markdown", "id": "16d81693-3786-4dee-8edf-92fad120bc91", "metadata": {}, "source": [ "## Gradio App\n", "\n", "Now it is time to create the gradio app:" ] }, { "cell_type": "code", "execution_count": 29, "id": "c95ee1ca-5feb-4011-b99c-3241468d3e3a", "metadata": {}, "outputs": [], "source": [ "# commented, because it produced warnings\n", "\n", "#image = gr.inputs.Image(shape=(192,192))\n", "#label = gr.outputs.Label()" ] }, { "cell_type": "code", "execution_count": 30, "id": "5ca3c2b5-1691-434f-acf8-f0cb91bf32b7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running on local URL: http://127.0.0.1:7860\n", "\n", "To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/plain": [] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#|export\n", "image = gr.components.Image(shape=(192,192))\n", "label = gr.components.Label()\n", "examples = ['teddybear.jpg', 'grizzly.jpg', 'blackbear.jpg']\n", "\n", "intf = gr.Interface(fn=classify_image, inputs=image, outputs=label, examples=examples)\n", "intf.launch(inline=False)" ] }, { "cell_type": "code", "execution_count": 31, "id": "63b8cbb0-40f8-495d-995e-9f946e28ae98", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Closing server running on port: 7860\n" ] } ], "source": [ "intf.close()" ] }, { "cell_type": "markdown", "id": "585bbd25-7895-40df-b15c-790f1ca058a2", "metadata": {}, "source": [ "## Export\n", "\n", "Finally, we export the code in the cells which are marked with `#|export`:" ] }, { "cell_type": "code", "execution_count": 34, "id": "dcc8edc2-d153-4221-92bd-3e32277a65b7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 40, "id": "5031b82c-67fa-4cac-b1a4-9c52646795b1", "metadata": {}, "outputs": [ { "ename": "AssertionError", "evalue": "Use `create_config` to create settings.ini for the first time", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAssertionError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[40], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mnbdev\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m nbdev_export\n\u001b[0;32m 2\u001b[0m nbdev\u001b[38;5;241m.\u001b[39mexport\u001b[38;5;241m.\u001b[39mnb_export(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mapp.ipynb\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mapp\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mExport successful\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", "File \u001b[1;32m~\\anaconda3\\Lib\\site-packages\\nbdev\\__init__.py:6\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mimports\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m IN_IPYTHON\n\u001b[0;32m 5\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m IN_IPYTHON:\n\u001b[1;32m----> 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mflags\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[0;32m 7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mshowdoc\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m show_doc\n\u001b[0;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexport\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m notebook2script\n", "File \u001b[1;32m~\\anaconda3\\Lib\\site-packages\\nbdev\\flags.py:115\u001b[0m\n\u001b[0;32m 111\u001b[0m fns \u001b[38;5;241m=\u001b[39m [nbdev_default_export, nbdev_export, nbdev_export_and_show, nbdev_export_internal,\n\u001b[0;32m 112\u001b[0m nbdev_hide, nbdev_hide_input, nbdev_hide_output, nbdev_default_class_level,\n\u001b[0;32m 113\u001b[0m nbdev_collapse_input, nbdev_collapse_output, needs_local_scope(nbdev_add2all)]\n\u001b[0;32m 114\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m fn \u001b[38;5;129;01min\u001b[39;00m fns: register_line_magic(fn)\n\u001b[1;32m--> 115\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m flag \u001b[38;5;129;01min\u001b[39;00m Config()\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtst_flags\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m'\u001b[39m)\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m|\u001b[39m\u001b[38;5;124m'\u001b[39m): _new_test_flag_fn(flag)\n", "File \u001b[1;32m~\\anaconda3\\Lib\\site-packages\\nbdev\\imports.py:42\u001b[0m, in \u001b[0;36mConfig.__init__\u001b[1;34m(self, cfg_name)\u001b[0m\n\u001b[0;32m 40\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m cfg_path \u001b[38;5;241m!=\u001b[39m cfg_path\u001b[38;5;241m.\u001b[39mparent \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (cfg_path\u001b[38;5;241m/\u001b[39mcfg_name)\u001b[38;5;241m.\u001b[39mexists(): cfg_path \u001b[38;5;241m=\u001b[39m cfg_path\u001b[38;5;241m.\u001b[39mparent\n\u001b[0;32m 41\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig_file \u001b[38;5;241m=\u001b[39m cfg_path\u001b[38;5;241m/\u001b[39mcfg_name\n\u001b[1;32m---> 42\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig_file\u001b[38;5;241m.\u001b[39mexists(), \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUse `create_config` to create settings.ini for the first time\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 43\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39md \u001b[38;5;241m=\u001b[39m read_config_file(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig_file)[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mDEFAULT\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 44\u001b[0m add_new_defaults(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39md, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig_file)\n", "\u001b[1;31mAssertionError\u001b[0m: Use `create_config` to create settings.ini for the first time" ] } ], "source": [ " " ] }, { "cell_type": "code", "execution_count": null, "id": "85bbbb28-b48d-4531-9179-f98ebb751508", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "vscode": { "interpreter": { "hash": "d9da906b64701e68312bc07fbc15a3a13814f930718c2c6b0e41a29d035806a3" } } }, "nbformat": 4, "nbformat_minor": 5 }