{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":24800,"databundleVersionId":1831594,"sourceType":"competition"},{"sourceId":1847440,"sourceType":"datasetVersion","datasetId":1072964}],"dockerImageVersionId":30043,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Introduction\n\n[Object detection API](https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/) is a tensorflow-based library for object detectio tasks. Following [the docs](https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html) you should be able to train your own detector without problems. Furthermore, there is a well written [public notebook](https://www.kaggle.com/sreevishnudamodaran/vbd-efficientdet-tf2-object-detection-api) that uses OD API for this challenge.\n\nThe API itself provides a python script for both training and evaluation of a detection model, but this approach is not very suitable for IPython notebooks and is not easy to customize. For this reason I've choosen a slightly different approach to use this API by looking at their codebase and rewriting the training loop by myself. Most of the code is indeed copied from OD API with some minor modifications to make it work in kaggle notebooks.\n\nI'm sorry if the code isn't very clear, this is my first attempt with object detection API too.","metadata":{}},{"cell_type":"markdown","source":"# Install Object Detection API\n\n**NOTE:** I decided to use commit `3f6fe2aa410d901aae8829597a65d084bffc20d3` as it does not require tensorflow version `2.4.0` (that causes CUDA version mismatch due to some recent commit).","metadata":{}},{"cell_type":"code","source":"!python --version","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:14:26.208093Z","iopub.execute_input":"2024-07-24T10:14:26.208413Z","iopub.status.idle":"2024-07-24T10:14:27.200102Z","shell.execute_reply.started":"2024-07-24T10:14:26.208379Z","shell.execute_reply":"2024-07-24T10:14:27.199204Z"},"trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"Python 3.7.6\n","output_type":"stream"}]},{"cell_type":"code","source":"import tensorflow\nprint(tensorflow.__version__)","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:14:27.202053Z","iopub.execute_input":"2024-07-24T10:14:27.202356Z","iopub.status.idle":"2024-07-24T10:14:31.680603Z","shell.execute_reply.started":"2024-07-24T10:14:27.202324Z","shell.execute_reply":"2024-07-24T10:14:31.679816Z"},"trusted":true},"execution_count":2,"outputs":[{"name":"stdout","text":"2.3.1\n","output_type":"stream"}]},{"cell_type":"code","source":"%%capture\n!git clone https://github.com/tensorflow/models.git\n\n%cd models/research/\n!git reset --hard 3f6fe2aa410d901aae8829597a65d084bffc20d3\n\n!protoc object_detection/protos/*.proto --python_out=.\n\n!cp object_detection/packages/tf2/setup.py .\n!python -m pip install . \n%cd /kaggle/working","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-24T10:14:31.682091Z","iopub.execute_input":"2024-07-24T10:14:31.682359Z","iopub.status.idle":"2024-07-24T10:16:19.817695Z","shell.execute_reply.started":"2024-07-24T10:14:31.682333Z","shell.execute_reply":"2024-07-24T10:16:19.816781Z"},"trusted":true},"execution_count":3,"outputs":[]},{"cell_type":"markdown","source":"# Setup directories\n\n* Organise workspace/training files: in standard OD API approach you need to setup your working directories following a specific tree. For convenience, I did the same here:\n\n```\n./\n├─ annotations/\n    └─ label_map.pbtxt\n├─ models/\n    └─ pipeline.config\n└─ pre-trained-models/*/\n    ├─ checkpoint/\n    ├─ saved_model/\n    └─ pipeline.config\n```\n\n* Download pre-trained EfficientDet-D0 from [TF Model Zoo](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md)","metadata":{}},{"cell_type":"code","source":"!pip install roboflow\n\nfrom roboflow import Roboflow\n\nrf = Roboflow(api_key=\"rTmGDJBCgwOL8rnTDzQn\")\nproject = rf.workspace(\"arge-mfkgl\").project(\"fault-detection-nfpkz\")\nversion = project.version(2)\ndataset = version.download(\"tensorflow\")\n\nrf = Roboflow(api_key=\"rTmGDJBCgwOL8rnTDzQn\")\nproject = rf.workspace(\"arge-mfkgl\").project(\"fault-detection-nfpkz\")\nversion = project.version(2)\ndataset = version.download(\"tfrecord\")","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:16:19.820134Z","iopub.execute_input":"2024-07-24T10:16:19.82044Z","iopub.status.idle":"2024-07-24T10:16:55.086429Z","shell.execute_reply.started":"2024-07-24T10:16:19.820402Z","shell.execute_reply":"2024-07-24T10:16:55.085512Z"},"trusted":true},"execution_count":4,"outputs":[{"name":"stdout","text":"Collecting roboflow\n  Downloading roboflow-1.1.6-py3-none-any.whl (58 kB)\n\u001b[K     |████████████████████████████████| 58 kB 5.4 MB/s  eta 0:00:01\n\u001b[?25hRequirement already satisfied: matplotlib in /opt/conda/lib/python3.7/site-packages (from roboflow) (3.2.1)\nRequirement already satisfied: Pillow>=7.1.2 in /opt/conda/lib/python3.7/site-packages (from roboflow) (8.0.1)\nRequirement already satisfied: requests in /opt/conda/lib/python3.7/site-packages (from roboflow) (2.31.0)\nRequirement already satisfied: PyYAML>=5.3.1 in /opt/conda/lib/python3.7/site-packages (from roboflow) (5.3.1)\nRequirement already satisfied: tqdm>=4.41.0 in /opt/conda/lib/python3.7/site-packages (from roboflow) (4.45.0)\nRequirement already satisfied: python-dateutil in /opt/conda/lib/python3.7/site-packages (from roboflow) (2.8.1)\nRequirement already satisfied: pyparsing==2.4.7 in /opt/conda/lib/python3.7/site-packages (from roboflow) (2.4.7)\nRequirement already satisfied: six in /opt/conda/lib/python3.7/site-packages (from roboflow) (1.14.0)\nRequirement already satisfied: cycler==0.10.0 in /opt/conda/lib/python3.7/site-packages (from roboflow) (0.10.0)\nRequirement already satisfied: numpy>=1.18.5 in /opt/conda/lib/python3.7/site-packages (from roboflow) (1.18.5)\nCollecting certifi==2022.12.7\n  Downloading certifi-2022.12.7-py3-none-any.whl (155 kB)\n\u001b[K     |████████████████████████████████| 155 kB 57.1 MB/s eta 0:00:01\n\u001b[?25hCollecting chardet==4.0.0\n  Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB)\n\u001b[K     |████████████████████████████████| 178 kB 68.0 MB/s eta 0:00:01\n\u001b[?25hRequirement already satisfied: six in /opt/conda/lib/python3.7/site-packages (from roboflow) (1.14.0)\nCollecting idna==2.10\n  Downloading idna-2.10-py2.py3-none-any.whl (58 kB)\n\u001b[K     |████████████████████████████████| 58 kB 6.2 MB/s  eta 0:00:01\n\u001b[?25hCollecting kiwisolver>=1.3.1\n  Downloading kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.1 MB)\n\u001b[K     |████████████████████████████████| 1.1 MB 66.7 MB/s eta 0:00:01\n\u001b[?25hRequirement already satisfied: typing-extensions in /opt/conda/lib/python3.7/site-packages (from kiwisolver>=1.3.1->roboflow) (3.7.4.1)\nRequirement already satisfied: pyparsing==2.4.7 in /opt/conda/lib/python3.7/site-packages (from roboflow) (2.4.7)\nRequirement already satisfied: numpy>=1.18.5 in /opt/conda/lib/python3.7/site-packages (from roboflow) (1.18.5)\nRequirement already satisfied: python-dateutil in /opt/conda/lib/python3.7/site-packages (from roboflow) (2.8.1)\nRequirement already satisfied: cycler==0.10.0 in /opt/conda/lib/python3.7/site-packages (from roboflow) (0.10.0)\nCollecting opencv-python-headless==4.8.0.74\n  Downloading opencv_python_headless-4.8.0.74-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (49.1 MB)\n\u001b[K     |████████████████████████████████| 49.1 MB 173 kB/s  eta 0:00:01\n\u001b[?25hRequirement already satisfied: numpy>=1.18.5 in /opt/conda/lib/python3.7/site-packages (from roboflow) (1.18.5)\nRequirement already satisfied: six in /opt/conda/lib/python3.7/site-packages (from roboflow) (1.14.0)\nCollecting python-dotenv\n  Downloading python_dotenv-0.21.1-py3-none-any.whl (19 kB)\nRequirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.7/site-packages (from requests->roboflow) (3.3.2)\nCollecting requests-toolbelt\n  Downloading requests_toolbelt-1.0.0-py2.py3-none-any.whl (54 kB)\n\u001b[K     |████████████████████████████████| 54 kB 2.8 MB/s  eta 0:00:01\n\u001b[?25hRequirement already satisfied: requests in /opt/conda/lib/python3.7/site-packages (from roboflow) (2.31.0)\nCollecting supervision\n  Downloading supervision-0.11.1-py3-none-any.whl (55 kB)\n\u001b[K     |████████████████████████████████| 55 kB 4.3 MB/s  eta 0:00:01\n\u001b[?25hRequirement already satisfied: PyYAML>=5.3.1 in /opt/conda/lib/python3.7/site-packages (from roboflow) (5.3.1)\nRequirement already satisfied: matplotlib in /opt/conda/lib/python3.7/site-packages (from roboflow) (3.2.1)\nRequirement already satisfied: opencv-python in /opt/conda/lib/python3.7/site-packages (from supervision->roboflow) (4.4.0.46)\nCollecting numpy>=1.18.5\n  Downloading numpy-1.21.6-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.7 MB)\n\u001b[K     |████████████████████████████████| 15.7 MB 68.7 MB/s eta 0:00:01\n\u001b[?25hCollecting urllib3>=1.26.6\n  Downloading urllib3-2.0.7-py3-none-any.whl (124 kB)\n\u001b[K     |████████████████████████████████| 124 kB 61.6 MB/s eta 0:00:01\n\u001b[33mWARNING: The candidate selected for download or install is a yanked version: 'opencv-python-headless' candidate (version 4.8.0.74 at https://files.pythonhosted.org/packages/76/02/f128517f3ade4bb5f71e2afd8461dba70e3f466ce745fa1fd1fade9ad1b7/opencv_python_headless-4.8.0.74-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=f8a88620c43a5d17f7df8317767da93b935656ab9236df92e1e2e0dd23195756 (from https://pypi.org/simple/opencv-python-headless/) (requires-python:>=3.6))\nReason for being yanked: deprecated, use 4.8.0.76\u001b[0m\n\u001b[?25hInstalling collected packages: urllib3, numpy, kiwisolver, idna, certifi, supervision, requests-toolbelt, python-dotenv, opencv-python-headless, chardet, roboflow\n  Attempting uninstall: urllib3\n    Found existing installation: urllib3 1.25.9\n    Uninstalling urllib3-1.25.9:\n      Successfully uninstalled urllib3-1.25.9\n  Attempting uninstall: numpy\n    Found existing installation: numpy 1.18.5\n    Uninstalling numpy-1.18.5:\n      Successfully uninstalled numpy-1.18.5\n  Attempting uninstall: kiwisolver\n    Found existing installation: kiwisolver 1.2.0\n    Uninstalling kiwisolver-1.2.0:\n      Successfully uninstalled kiwisolver-1.2.0\n  Attempting uninstall: idna\n    Found existing installation: idna 2.9\n    Uninstalling idna-2.9:\n      Successfully uninstalled idna-2.9\n  Attempting uninstall: certifi\n    Found existing installation: certifi 2020.12.5\n    Uninstalling certifi-2020.12.5:\n      Successfully uninstalled certifi-2020.12.5\n  Attempting uninstall: opencv-python-headless\n    Found existing installation: opencv-python-headless 4.4.0.46\n    Uninstalling opencv-python-headless-4.4.0.46:\n      Successfully uninstalled opencv-python-headless-4.4.0.46\n  Attempting uninstall: chardet\n    Found existing installation: chardet 3.0.4\n    Uninstalling chardet-3.0.4:\n      Successfully uninstalled chardet-3.0.4\n\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\nucx-py 0.16.0 requires pynvml, which is not installed.\ntensorflow 2.3.1 requires numpy<1.19.0,>=1.16.0, but you have numpy 1.21.6 which is incompatible.\nkubernetes 10.1.0 requires pyyaml~=3.12, but you have pyyaml 5.3.1 which is incompatible.\njupyterlab-git 0.10.0 requires nbdime<2.0.0,>=1.1.0, but you have nbdime 2.0.0 which is incompatible.\ngym 0.17.3 requires cloudpickle<1.7.0,>=1.2.0, but you have cloudpickle 2.2.1 which is incompatible.\nearthengine-api 0.1.244 requires google-api-python-client>=1.12.1, but you have google-api-python-client 1.8.0 which is incompatible.\ndatashader 0.11.1 requires numba!=0.49.*,!=0.50.*,>=0.37.0, but you have numba 0.49.1 which is incompatible.\nbotocore 1.19.31 requires urllib3<1.27,>=1.25.4; python_version != \"3.4\", but you have urllib3 2.0.7 which is incompatible.\nbokeh 2.2.3 requires tornado>=5.1, but you have tornado 5.0.2 which is incompatible.\nautogluon-core 0.0.15b20201207 requires dill==0.3.3, but you have dill 0.3.1.1 which is incompatible.\naiohttp 3.7.3 requires chardet<4.0,>=2.0, but you have chardet 4.0.0 which is incompatible.\naiobotocore 1.1.2 requires botocore<1.17.45,>=1.17.44, but you have botocore 1.19.31 which is incompatible.\u001b[0m\nSuccessfully installed certifi-2022.12.7 chardet-4.0.0 idna-2.10 kiwisolver-1.4.5 numpy-1.21.6 opencv-python-headless-4.8.0.74 python-dotenv-0.21.1 requests-toolbelt-1.0.0 roboflow-1.1.6 supervision-0.11.1 urllib3-2.0.7\n\u001b[33mWARNING: You are using pip version 20.3.1; however, version 24.0 is available.\nYou should consider upgrading via the '/opt/conda/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\nloading Roboflow workspace...\nloading Roboflow project...\n","output_type":"stream"},{"name":"stderr","text":"Downloading Dataset Version Zip in Fault-Detection-2 to tfrecord:: 100%|██████████| 1980/1980 [00:01<00:00, 1706.08it/s]","output_type":"stream"},{"name":"stdout","text":"\n","output_type":"stream"},{"name":"stderr","text":"\nExtracting Dataset Version Zip to Fault-Detection-2 in tfrecord:: 100%|██████████| 8/8 [00:00<00:00, 1032.32it/s]\n","output_type":"stream"},{"name":"stdout","text":"loading Roboflow workspace...\nloading Roboflow project...\n","output_type":"stream"},{"name":"stderr","text":"Downloading Dataset Version Zip in Fault-Detection-2 to tensorflow:: 100%|██████████| 1962/1962 [00:01<00:00, 1681.41it/s]","output_type":"stream"},{"name":"stdout","text":"\n","output_type":"stream"},{"name":"stderr","text":"\nExtracting Dataset Version Zip to Fault-Detection-2 in tensorflow:: 100%|██████████| 93/93 [00:00<00:00, 5574.82it/s]\n","output_type":"stream"}]},{"cell_type":"code","source":"!pwd","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:16:55.087841Z","iopub.execute_input":"2024-07-24T10:16:55.088126Z","iopub.status.idle":"2024-07-24T10:16:56.071404Z","shell.execute_reply.started":"2024-07-24T10:16:55.088095Z","shell.execute_reply":"2024-07-24T10:16:56.070532Z"},"trusted":true},"execution_count":5,"outputs":[{"name":"stdout","text":"/kaggle/working\n","output_type":"stream"}]},{"cell_type":"code","source":"!ls -al","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:16:56.073125Z","iopub.execute_input":"2024-07-24T10:16:56.073437Z","iopub.status.idle":"2024-07-24T10:16:57.074201Z","shell.execute_reply.started":"2024-07-24T10:16:56.073398Z","shell.execute_reply":"2024-07-24T10:16:57.073289Z"},"trusted":true},"execution_count":6,"outputs":[{"name":"stdout","text":"total 16\ndrwxr-xr-x 4 root root 4096 Jul 24 10:16 .\ndrwxr-xr-x 5 root root 4096 Jul 24 10:14 ..\ndrwxr-xr-x 4 root root 4096 Jul 24 10:16 Fault-Detection-2\ndrwxr-xr-x 8 root root 4096 Jul 24 10:15 models\n","output_type":"stream"}]},{"cell_type":"code","source":"BASE_DIR = 'porselen-hata-bulma'\nMODEL_PATH = 'efficientdet_d0_coco17_tpu-32'","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:17:16.582126Z","iopub.execute_input":"2024-07-24T10:17:16.582478Z","iopub.status.idle":"2024-07-24T10:17:16.587733Z","shell.execute_reply.started":"2024-07-24T10:17:16.582444Z","shell.execute_reply":"2024-07-24T10:17:16.586982Z"},"trusted":true},"execution_count":7,"outputs":[]},{"cell_type":"code","source":"%%capture\n!rm -r {BASE_DIR}\n!mkdir {BASE_DIR}\n!mkdir {BASE_DIR}/pre-trained-models/\n!mkdir {BASE_DIR}/annotations\n!mkdir {BASE_DIR}/models\n!mkdir {BASE_DIR}/models/efficientdet/\n\n!wget http://download.tensorflow.org/models/object_detection/tf2/20200711/{MODEL_PATH}.tar.gz\n\n!tar -xvzf {MODEL_PATH}.tar.gz\n!rm {MODEL_PATH}.tar.gz\n!mv {MODEL_PATH} {BASE_DIR}/pre-trained-models/\n!mv {BASE_DIR}/pre-trained-models/{MODEL_PATH}/pipeline.config {BASE_DIR}/models/efficientdet/pipeline.config","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-24T10:17:23.506375Z","iopub.execute_input":"2024-07-24T10:17:23.506855Z","iopub.status.idle":"2024-07-24T10:17:38.708302Z","shell.execute_reply.started":"2024-07-24T10:17:23.506809Z","shell.execute_reply":"2024-07-24T10:17:38.707219Z"},"trusted":true},"execution_count":8,"outputs":[]},{"cell_type":"markdown","source":"# Import libraries","metadata":{}},{"cell_type":"code","source":"import pathlib, cv2, os, time, functools\nimport numpy as np\nimport pandas as pd\n\nimport matplotlib.pyplot as plt\n%matplotlib inline\n\nimport tensorflow as tf\n\nfrom google.protobuf import text_format","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-24T10:17:44.565983Z","iopub.execute_input":"2024-07-24T10:17:44.566337Z","iopub.status.idle":"2024-07-24T10:17:44.576464Z","shell.execute_reply.started":"2024-07-24T10:17:44.566305Z","shell.execute_reply":"2024-07-24T10:17:44.575608Z"},"trusted":true},"execution_count":9,"outputs":[]},{"cell_type":"markdown","source":"## Object Detection API internal libraries","metadata":{}},{"cell_type":"code","source":"from object_detection import inputs\n\nfrom object_detection.model_lib_v2 import eager_train_step\nfrom object_detection.model_lib_v2 import eager_eval_loop\nfrom object_detection.model_lib_v2 import load_fine_tune_checkpoint\nfrom object_detection.model_lib_v2 import get_filepath\nfrom object_detection.model_lib_v2 import clean_temporary_directories\n\nfrom object_detection.protos import pipeline_pb2\n\nfrom object_detection.utils import label_map_util\nfrom object_detection.utils import visualization_utils as viz_utils\nfrom object_detection.utils import config_util\n\nfrom object_detection.builders import dataset_builder\nfrom object_detection.builders import image_resizer_builder\nfrom object_detection.builders import model_builder\nfrom object_detection.builders import preprocessor_builder\n\nfrom object_detection.core import standard_fields as fields\n\nfrom object_detection.exporter_lib_v2 import DetectionInferenceModule","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:17:50.72665Z","iopub.execute_input":"2024-07-24T10:17:50.727041Z","iopub.status.idle":"2024-07-24T10:17:51.562791Z","shell.execute_reply.started":"2024-07-24T10:17:50.727005Z","shell.execute_reply":"2024-07-24T10:17:51.562081Z"},"trusted":true},"execution_count":10,"outputs":[]},{"cell_type":"markdown","source":"# Setup notebook","metadata":{}},{"cell_type":"code","source":"!echo $BASE_DIR","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:18:55.707259Z","iopub.execute_input":"2024-07-24T10:18:55.707623Z","iopub.status.idle":"2024-07-24T10:18:56.714223Z","shell.execute_reply.started":"2024-07-24T10:18:55.707591Z","shell.execute_reply":"2024-07-24T10:18:56.713313Z"},"trusted":true},"execution_count":13,"outputs":[{"name":"stdout","text":"porselen-hata-bulma\n","output_type":"stream"}]},{"cell_type":"code","source":"!ls -al $BASE_DIR","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:18:21.472207Z","iopub.execute_input":"2024-07-24T10:18:21.472565Z","iopub.status.idle":"2024-07-24T10:18:22.468948Z","shell.execute_reply.started":"2024-07-24T10:18:21.472533Z","shell.execute_reply":"2024-07-24T10:18:22.467935Z"},"trusted":true},"execution_count":12,"outputs":[{"name":"stdout","text":"total 20\ndrwxr-xr-x 5 root root 4096 Jul 24 10:17 .\ndrwxr-xr-x 5 root root 4096 Jul 24 10:17 ..\ndrwxr-xr-x 2 root root 4096 Jul 24 10:17 annotations\ndrwxr-xr-x 3 root root 4096 Jul 24 10:17 models\ndrwxr-xr-x 3 root root 4096 Jul 24 10:17 pre-trained-models\n","output_type":"stream"}]},{"cell_type":"code","source":"MODEL_DIR = BASE_DIR + '/models/efficientdet/'\nPIPELINE_PATH = MODEL_DIR + 'pipeline.config'\nLABEL_MAP_PATH = BASE_DIR + '/annotations/label_map.pbtxt'\nOUTPUT_MODEL_DIR = '/kaggle/working/saved_model'","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:19:28.126099Z","iopub.execute_input":"2024-07-24T10:19:28.126468Z","iopub.status.idle":"2024-07-24T10:19:28.131408Z","shell.execute_reply.started":"2024-07-24T10:19:28.126433Z","shell.execute_reply":"2024-07-24T10:19:28.13049Z"},"trusted":true},"execution_count":14,"outputs":[]},{"cell_type":"code","source":"!ls -al /kaggle/input/chest-xray-detection-512x512-groupkfold-tfrec","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:19:40.543134Z","iopub.execute_input":"2024-07-24T10:19:40.543469Z","iopub.status.idle":"2024-07-24T10:19:41.545115Z","shell.execute_reply.started":"2024-07-24T10:19:40.54344Z","shell.execute_reply":"2024-07-24T10:19:41.544074Z"},"trusted":true},"execution_count":15,"outputs":[{"name":"stdout","text":"total 339048\ndrwxr-xr-x 2 nobody nogroup        0 Jul 22 12:17 .\ndrwxr-xr-x 4 root   root        4096 Jul 24 10:14 ..\n-rw-r--r-- 1 nobody nogroup 68765251 Jul 22 12:19 fold_1.tfrecord\n-rw-r--r-- 1 nobody nogroup 68912283 Jul 22 12:17 fold_2.tfrecord\n-rw-r--r-- 1 nobody nogroup 68600463 Jul 22 12:17 fold_3.tfrecord\n-rw-r--r-- 1 nobody nogroup 68937531 Jul 22 12:17 fold_4.tfrecord\n-rw-r--r-- 1 nobody nogroup 68948934 Jul 22 12:17 fold_5.tfrecord\n-rw-r--r-- 1 nobody nogroup      578 Jul 22 12:17 label_map.pbtxt\n-rw-r--r-- 1 nobody nogroup  2995083 Jul 22 12:17 train.csv\n","output_type":"stream"}]},{"cell_type":"code","source":"!ls -al /kaggle/working/Fault-Detection-2/train | grep porcelain","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:20:43.015325Z","iopub.execute_input":"2024-07-24T10:20:43.015681Z","iopub.status.idle":"2024-07-24T10:20:44.014935Z","shell.execute_reply.started":"2024-07-24T10:20:43.01565Z","shell.execute_reply":"2024-07-24T10:20:44.014165Z"},"trusted":true},"execution_count":19,"outputs":[{"name":"stdout","text":"-rw-r--r-- 1 root root 1850354 Jul 24 10:16 porcelain.tfrecord\n-rw-r--r-- 1 root root     154 Jul 24 10:16 porcelain_label_map.pbtxt\n","output_type":"stream"}]},{"cell_type":"code","source":"!cp /kaggle/working/Fault-Detection-2/train/porcelain.tfrecord /kaggle/working/Fault-Detection-2/train/fold_1.tfrecord","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:24:21.406433Z","iopub.execute_input":"2024-07-24T10:24:21.406803Z","iopub.status.idle":"2024-07-24T10:24:22.413267Z","shell.execute_reply.started":"2024-07-24T10:24:21.406757Z","shell.execute_reply":"2024-07-24T10:24:22.412077Z"},"trusted":true},"execution_count":29,"outputs":[]},{"cell_type":"code","source":"!ls -al /kaggle/working/Fault-Detection-2/train | grep tfrecord","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:24:33.434549Z","iopub.execute_input":"2024-07-24T10:24:33.434928Z","iopub.status.idle":"2024-07-24T10:24:34.444238Z","shell.execute_reply.started":"2024-07-24T10:24:33.434893Z","shell.execute_reply":"2024-07-24T10:24:34.44329Z"},"trusted":true},"execution_count":31,"outputs":[{"name":"stdout","text":"-rw-r--r-- 1 root root 1850354 Jul 24 10:24 fold_1.tfrecord\n-rw-r--r-- 1 root root 1850354 Jul 24 10:16 porcelain.tfrecord\n","output_type":"stream"}]},{"cell_type":"code","source":"!cat /kaggle/working/Fault-Detection-2/train/porcelain_label_map.pbtxt","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:23:47.820346Z","iopub.execute_input":"2024-07-24T10:23:47.82072Z","iopub.status.idle":"2024-07-24T10:23:48.834239Z","shell.execute_reply.started":"2024-07-24T10:23:47.820691Z","shell.execute_reply":"2024-07-24T10:23:48.833168Z"},"trusted":true},"execution_count":28,"outputs":[{"name":"stdout","text":"item {\n    name: \"Fingerprint\",\n    id: 1,\n    display_name: \"Fingerprint\"\n}\nitem {\n    name: \"paint stain\",\n    id: 2,\n    display_name: \"paint stain\"\n}\n","output_type":"stream"}]},{"cell_type":"code","source":"!echo $LABEL_MAP_PATH","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:21:25.029332Z","iopub.execute_input":"2024-07-24T10:21:25.0297Z","iopub.status.idle":"2024-07-24T10:21:26.03568Z","shell.execute_reply.started":"2024-07-24T10:21:25.029666Z","shell.execute_reply":"2024-07-24T10:21:26.034879Z"},"trusted":true},"execution_count":21,"outputs":[{"name":"stdout","text":"porselen-hata-bulma/annotations/label_map.pbtxt\n","output_type":"stream"}]},{"cell_type":"code","source":"#input_path = pathlib.Path('/kaggle/input/chest-xray-detection-512x512-groupkfold-tfrec')\n\ninput_path = pathlib.Path('/kaggle/working/Fault-Detection-2/train')\n\n!cp {input_path}/porcelain_label_map.pbtxt {LABEL_MAP_PATH}\n\nDS_PATH = str(input_path)\nos.makedirs(OUTPUT_MODEL_DIR, exist_ok=True)","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:21:42.619008Z","iopub.execute_input":"2024-07-24T10:21:42.619398Z","iopub.status.idle":"2024-07-24T10:21:43.622687Z","shell.execute_reply.started":"2024-07-24T10:21:42.61936Z","shell.execute_reply":"2024-07-24T10:21:43.621576Z"},"trusted":true},"execution_count":22,"outputs":[]},{"cell_type":"code","source":"!echo $DS_PATH","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:21:54.75297Z","iopub.execute_input":"2024-07-24T10:21:54.753323Z","iopub.status.idle":"2024-07-24T10:21:55.749974Z","shell.execute_reply.started":"2024-07-24T10:21:54.753289Z","shell.execute_reply":"2024-07-24T10:21:55.748829Z"},"trusted":true},"execution_count":24,"outputs":[{"name":"stdout","text":"/kaggle/working/Fault-Detection-2/train\n","output_type":"stream"}]},{"cell_type":"code","source":"plt.rcParams['axes.grid'] = False\nplt.rcParams['xtick.labelsize'] = False\nplt.rcParams['ytick.labelsize'] = False\nplt.rcParams['xtick.top'] = False\nplt.rcParams['xtick.bottom'] = False\nplt.rcParams['ytick.left'] = False\nplt.rcParams['ytick.right'] = False\nplt.rcParams['figure.figsize'] = [12, 12]","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-24T10:22:01.445488Z","iopub.execute_input":"2024-07-24T10:22:01.445875Z","iopub.status.idle":"2024-07-24T10:22:01.454798Z","shell.execute_reply.started":"2024-07-24T10:22:01.445836Z","shell.execute_reply":"2024-07-24T10:22:01.453961Z"},"trusted":true},"execution_count":25,"outputs":[]},{"cell_type":"code","source":"def seed_everything(seed=0):\n    np.random.seed(seed)\n    tf.random.set_seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    os.environ['TF_DETERMINISTIC_OPS'] = '1'\n\nseed = 2020\nseed_everything(seed)","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-24T10:22:06.643313Z","iopub.execute_input":"2024-07-24T10:22:06.643669Z","iopub.status.idle":"2024-07-24T10:22:06.649474Z","shell.execute_reply.started":"2024-07-24T10:22:06.643627Z","shell.execute_reply":"2024-07-24T10:22:06.648473Z"},"trusted":true},"execution_count":26,"outputs":[]},{"cell_type":"code","source":"gpus = tf.config.experimental.list_physical_devices('GPU')\nif gpus:\n    try:\n        tf.config.experimental.set_visible_devices(gpus[0], 'GPU')\n        logical_gpus = tf.config.experimental.list_logical_devices('GPU')\n        print(len(gpus), \"Physical GPUs,\", len(logical_gpus), \"Logical GPU\")\n        strategy = tf.distribute.MirroredStrategy(devices=[\"GPU:0\"])\n    except RuntimeError as e:\n        gpu = None","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-24T10:22:10.67116Z","iopub.execute_input":"2024-07-24T10:22:10.671532Z","iopub.status.idle":"2024-07-24T10:22:12.353549Z","shell.execute_reply.started":"2024-07-24T10:22:10.671496Z","shell.execute_reply":"2024-07-24T10:22:12.352655Z"},"trusted":true},"execution_count":27,"outputs":[{"name":"stdout","text":"1 Physical GPUs, 1 Logical GPU\n","output_type":"stream"}]},{"cell_type":"code","source":"#NUM_CLASSES = 14\nNUM_CLASSES = 2\n\nPER_REPLICA_BATCH_SIZE = 2\ntry:\n    REPLICAS = strategy.num_replicas_in_sync\nexcept:\n    REPLICAS = 1\n    \nBATCH_SIZE = PER_REPLICA_BATCH_SIZE * REPLICAS\n\nfold = 0\nN_FOLDS = 1\n#N_FOLDS = 5\n\nSCORE_THRESHOLD = 0.5","metadata":{"_kg_hide-input":false,"execution":{"iopub.status.busy":"2024-07-24T10:24:47.753735Z","iopub.execute_input":"2024-07-24T10:24:47.754139Z","iopub.status.idle":"2024-07-24T10:24:47.759929Z","shell.execute_reply.started":"2024-07-24T10:24:47.754103Z","shell.execute_reply":"2024-07-24T10:24:47.759071Z"},"trusted":true},"execution_count":32,"outputs":[]},{"cell_type":"markdown","source":"# Read data\n\nI created a custom version of the dataset stored in tfrecord files (private at the moment). I'm not planning to make the dataset public, but I've done basic pre-processing steps:\n\n* voi-lut\n* monochrome correction\n* resizing to `512x512`\n* histogram equalization\n\nI've also splitted data by patient id in `5 folds` using (Multi-Class Stratified) GroupKFold.","metadata":{}},{"cell_type":"code","source":"!echo $input_path ","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:25:46.754755Z","iopub.execute_input":"2024-07-24T10:25:46.755127Z","iopub.status.idle":"2024-07-24T10:25:47.761861Z","shell.execute_reply.started":"2024-07-24T10:25:46.755097Z","shell.execute_reply":"2024-07-24T10:25:47.760809Z"},"trusted":true},"execution_count":33,"outputs":[{"name":"stdout","text":"/kaggle/working/Fault-Detection-2/train\n","output_type":"stream"}]},{"cell_type":"code","source":"train_df_eski = pd.read_csv( '/kaggle/input/chest-xray-detection-512x512-groupkfold-tfrec/train.csv' )\ntrain_df_eski.head()","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:29:18.733996Z","iopub.execute_input":"2024-07-24T10:29:18.734343Z","iopub.status.idle":"2024-07-24T10:29:18.804683Z","shell.execute_reply.started":"2024-07-24T10:29:18.734313Z","shell.execute_reply":"2024-07-24T10:29:18.803839Z"},"trusted":true},"execution_count":41,"outputs":[{"execution_count":41,"output_type":"execute_result","data":{"text/plain":"                           image_id          class_name  class_id rad_id  \\\n0  379aef556ea6744aa51174e342fabcef    Pleural effusion        11     R9   \n1  fd1bd078f5f30ad02ed984c94077bbdb       Consolidation         5     R8   \n2  5da459bb842baf8b844d998f5b6c996c  Pulmonary fibrosis        14     R9   \n3  ede3e4041468a91f1a8027aeaa10e540  Pulmonary fibrosis        14     R8   \n4  429f8dfd3cd4748c67b8395f9e8d678e  Aortic enlargement         1     R9   \n\n    x_min   y_min   x_max   y_max  fold  \n0   139.0  2214.0   226.0  2347.0     0  \n1   229.0  1084.0   990.0  2052.0     2  \n2   357.0  1398.0   654.0  1468.0     0  \n3  1806.0   478.0  2461.0  1172.0     4  \n4  1074.0   669.0  1432.0   957.0     2  ","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>image_id</th>\n      <th>class_name</th>\n      <th>class_id</th>\n      <th>rad_id</th>\n      <th>x_min</th>\n      <th>y_min</th>\n      <th>x_max</th>\n      <th>y_max</th>\n      <th>fold</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>379aef556ea6744aa51174e342fabcef</td>\n      <td>Pleural effusion</td>\n      <td>11</td>\n      <td>R9</td>\n      <td>139.0</td>\n      <td>2214.0</td>\n      <td>226.0</td>\n      <td>2347.0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>fd1bd078f5f30ad02ed984c94077bbdb</td>\n      <td>Consolidation</td>\n      <td>5</td>\n      <td>R8</td>\n      <td>229.0</td>\n      <td>1084.0</td>\n      <td>990.0</td>\n      <td>2052.0</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>5da459bb842baf8b844d998f5b6c996c</td>\n      <td>Pulmonary fibrosis</td>\n      <td>14</td>\n      <td>R9</td>\n      <td>357.0</td>\n      <td>1398.0</td>\n      <td>654.0</td>\n      <td>1468.0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>ede3e4041468a91f1a8027aeaa10e540</td>\n      <td>Pulmonary fibrosis</td>\n      <td>14</td>\n      <td>R8</td>\n      <td>1806.0</td>\n      <td>478.0</td>\n      <td>2461.0</td>\n      <td>1172.0</td>\n      <td>4</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>429f8dfd3cd4748c67b8395f9e8d678e</td>\n      <td>Aortic enlargement</td>\n      <td>1</td>\n      <td>R9</td>\n      <td>1074.0</td>\n      <td>669.0</td>\n      <td>1432.0</td>\n      <td>957.0</td>\n      <td>2</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"np.min(train_df_eski['fold']), np.max(train_df_eski['fold'])  #tfrecord isimlerinin bir eksiği","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:30:02.048523Z","iopub.execute_input":"2024-07-24T10:30:02.048875Z","iopub.status.idle":"2024-07-24T10:30:02.055461Z","shell.execute_reply.started":"2024-07-24T10:30:02.048843Z","shell.execute_reply":"2024-07-24T10:30:02.054579Z"},"trusted":true},"execution_count":47,"outputs":[{"execution_count":47,"output_type":"execute_result","data":{"text/plain":"(0, 4)"},"metadata":{}}]},{"cell_type":"code","source":"np.min(train_df_eski['class_id']), np.max(train_df_eski['class_id'])  #tfrecord isimlerinin bir eksiği","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:36:56.64458Z","iopub.execute_input":"2024-07-24T10:36:56.645004Z","iopub.status.idle":"2024-07-24T10:36:56.652147Z","shell.execute_reply.started":"2024-07-24T10:36:56.644967Z","shell.execute_reply":"2024-07-24T10:36:56.651211Z"},"trusted":true},"execution_count":52,"outputs":[{"execution_count":52,"output_type":"execute_result","data":{"text/plain":"(1, 14)"},"metadata":{}}]},{"cell_type":"code","source":"# train_df = pd.read_csv(input_path / 'train.csv')\n# train_df.head()\n\ntrain_df = pd.read_csv(input_path / '_annotations.csv')\ntrain_df[\"fold\"] = 0\n\ntrain_df[\"class_name\"] = train_df[\"class\"]\ntrain_df[\"image_id\"] = train_df.index.astype(str)+\"_\"+train_df[\"filename\"]\n\ntrain_df[\"class_id\"] = train_df['class_name'].apply(lambda x: 1 if x == 'Fingerprint' else 2)\n\ntrain_df.head()\n\n# burada data içerisine 2 kolon eklememiz gerek. class_id ve fold. fold statik 0 olacak. 1 de rename olacak class_name => ","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:49:06.161073Z","iopub.execute_input":"2024-07-24T10:49:06.16146Z","iopub.status.idle":"2024-07-24T10:49:06.187218Z","shell.execute_reply.started":"2024-07-24T10:49:06.161424Z","shell.execute_reply":"2024-07-24T10:49:06.186518Z"},"trusted":true},"execution_count":79,"outputs":[{"execution_count":79,"output_type":"execute_result","data":{"text/plain":"                                            filename  width  height  \\\n0  IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...    640     640   \n1  IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...    640     640   \n2  IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...    640     640   \n3  IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...    640     640   \n4  IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...    640     640   \n\n         class  xmin  ymin  xmax  ymax  fold   class_name  \\\n0  paint stain   306   289   324   301     0  paint stain   \n1  paint stain   307   290   313   297     0  paint stain   \n2  paint stain   330   327   335   331     0  paint stain   \n3  paint stain   308   329   319   337     0  paint stain   \n4  paint stain   336   353   341   356     0  paint stain   \n\n                                            image_id  class_id  \n0  0_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...         2  \n1  1_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...         2  \n2  2_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...         2  \n3  3_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...         2  \n4  4_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...         2  ","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>filename</th>\n      <th>width</th>\n      <th>height</th>\n      <th>class</th>\n      <th>xmin</th>\n      <th>ymin</th>\n      <th>xmax</th>\n      <th>ymax</th>\n      <th>fold</th>\n      <th>class_name</th>\n      <th>image_id</th>\n      <th>class_id</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...</td>\n      <td>640</td>\n      <td>640</td>\n      <td>paint stain</td>\n      <td>306</td>\n      <td>289</td>\n      <td>324</td>\n      <td>301</td>\n      <td>0</td>\n      <td>paint stain</td>\n      <td>0_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...</td>\n      <td>640</td>\n      <td>640</td>\n      <td>paint stain</td>\n      <td>307</td>\n      <td>290</td>\n      <td>313</td>\n      <td>297</td>\n      <td>0</td>\n      <td>paint stain</td>\n      <td>1_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...</td>\n      <td>640</td>\n      <td>640</td>\n      <td>paint stain</td>\n      <td>330</td>\n      <td>327</td>\n      <td>335</td>\n      <td>331</td>\n      <td>0</td>\n      <td>paint stain</td>\n      <td>2_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...</td>\n      <td>640</td>\n      <td>640</td>\n      <td>paint stain</td>\n      <td>308</td>\n      <td>329</td>\n      <td>319</td>\n      <td>337</td>\n      <td>0</td>\n      <td>paint stain</td>\n      <td>3_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd...</td>\n      <td>640</td>\n      <td>640</td>\n      <td>paint stain</td>\n      <td>336</td>\n      <td>353</td>\n      <td>341</td>\n      <td>356</td>\n      <td>0</td>\n      <td>paint stain</td>\n      <td>4_IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06...</td>\n      <td>2</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"train_df.iloc[0][\"image_id\"], train_df.iloc[1][\"image_id\"]","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:46:15.84755Z","iopub.execute_input":"2024-07-24T10:46:15.847917Z","iopub.status.idle":"2024-07-24T10:46:15.854623Z","shell.execute_reply.started":"2024-07-24T10:46:15.847883Z","shell.execute_reply":"2024-07-24T10:46:15.853769Z"},"trusted":true},"execution_count":77,"outputs":[{"execution_count":77,"output_type":"execute_result","data":{"text/plain":"('IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd2b.jpg',\n 'IMG_1835_JPG.rf.54205d5e3953aab40767ea125d06bd2b.jpg')"},"metadata":{}}]},{"cell_type":"code","source":"category_index = label_map_util.create_category_index_from_labelmap(\n    LABEL_MAP_PATH,\n    use_display_name=True\n)","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:43:25.677595Z","iopub.execute_input":"2024-07-24T10:43:25.677986Z","iopub.status.idle":"2024-07-24T10:43:25.683027Z","shell.execute_reply.started":"2024-07-24T10:43:25.677949Z","shell.execute_reply":"2024-07-24T10:43:25.682169Z"},"trusted":true},"execution_count":62,"outputs":[]},{"cell_type":"code","source":"category_index","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:43:27.10025Z","iopub.execute_input":"2024-07-24T10:43:27.100643Z","iopub.status.idle":"2024-07-24T10:43:27.106088Z","shell.execute_reply.started":"2024-07-24T10:43:27.100604Z","shell.execute_reply":"2024-07-24T10:43:27.105253Z"},"trusted":true},"execution_count":63,"outputs":[{"execution_count":63,"output_type":"execute_result","data":{"text/plain":"{1: {'id': 1, 'name': 'Fingerprint'}, 2: {'id': 2, 'name': 'paint stain'}}"},"metadata":{}}]},{"cell_type":"code","source":"!echo $DS_PATH","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:44:09.646911Z","iopub.execute_input":"2024-07-24T10:44:09.647241Z","iopub.status.idle":"2024-07-24T10:44:10.682764Z","shell.execute_reply.started":"2024-07-24T10:44:09.647212Z","shell.execute_reply":"2024-07-24T10:44:10.681691Z"},"trusted":true},"execution_count":69,"outputs":[{"name":"stdout","text":"/kaggle/working/Fault-Detection-2/train\n","output_type":"stream"}]},{"cell_type":"code","source":"len(train_df['image_id'][train_df['fold'] != fold + 1].unique()), BATCH_SIZE","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:50:07.197541Z","iopub.execute_input":"2024-07-24T10:50:07.197926Z","iopub.status.idle":"2024-07-24T10:50:07.205971Z","shell.execute_reply.started":"2024-07-24T10:50:07.19789Z","shell.execute_reply":"2024-07-24T10:50:07.204984Z"},"trusted":true},"execution_count":82,"outputs":[{"execution_count":82,"output_type":"execute_result","data":{"text/plain":"(273, 2)"},"metadata":{}}]},{"cell_type":"code","source":"TRAIN_DATASET = tf.io.gfile.glob(DS_PATH + f'/fold_[^{fold + 1}].tfrecord')\nTEST_DATASET = tf.io.gfile.glob(DS_PATH + f'/fold_{fold + 1}.tfrecord')    \n\nct_train = len(train_df['image_id'][train_df['fold'] != fold + 1].unique())  / BATCH_SIZE\nct_test = len(train_df['image_id'][train_df['fold'] == fold + 1].unique()) / BATCH_SIZE","metadata":{"execution":{"iopub.status.busy":"2024-07-24T10:50:11.234142Z","iopub.execute_input":"2024-07-24T10:50:11.234491Z","iopub.status.idle":"2024-07-24T10:50:11.245399Z","shell.execute_reply.started":"2024-07-24T10:50:11.234462Z","shell.execute_reply":"2024-07-24T10:50:11.244391Z"},"trusted":true},"execution_count":83,"outputs":[]},{"cell_type":"markdown","source":"## Show samples","metadata":{}},{"cell_type":"code","source":"def plot_img_with_boxes(image, classes, boxes, scores=None, axis=None, plot=True):\n    if scores is None:\n        scores = np.ones(len(classes))\n        \n    image_with_detections = image.copy()\n    \n    viz_utils.visualize_boxes_and_labels_on_image_array(\n          image_with_detections,\n          boxes,\n          classes,\n          scores,\n          category_index,\n          use_normalized_coordinates=True,\n          max_boxes_to_draw=100,\n          min_score_thresh=SCORE_THRESHOLD,\n          agnostic_mode=False)\n    \n    if plot:\n        if axis is None:\n            plt.figure(figsize=(12,12))\n            plt.imshow(image_with_detections)\n            plt.show()\n        else:\n            axis.imshow(image_with_detections)\n    else:\n        return image_with_detections","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-24T10:50:16.585911Z","iopub.execute_input":"2024-07-24T10:50:16.586309Z","iopub.status.idle":"2024-07-24T10:50:16.59494Z","shell.execute_reply.started":"2024-07-24T10:50:16.586273Z","shell.execute_reply":"2024-07-24T10:50:16.594139Z"},"trusted":true},"execution_count":84,"outputs":[]},{"cell_type":"code","source":"feature_description = {\n    'image/height': tf.io.FixedLenFeature([], tf.int64),\n    'image/width': tf.io.FixedLenFeature([], tf.int64),\n    'image/filename': tf.io.FixedLenFeature([], tf.string),\n    #'image/source_id': tf.io.FixedLenFeature([], tf.string),\n    'image/encoded': tf.io.FixedLenFeature([], tf.string),\n    'image/format': tf.io.FixedLenFeature([], tf.string),\n    'image/object/bbox/xmin': tf.io.FixedLenSequenceFeature([], tf.float32, True),\n    'image/object/bbox/xmax': tf.io.FixedLenSequenceFeature([], tf.float32, True),\n    'image/object/bbox/ymin': tf.io.FixedLenSequenceFeature([], tf.float32, True),\n    'image/object/bbox/ymax': tf.io.FixedLenSequenceFeature([], tf.float32, True),\n    'image/object/class/text': tf.io.FixedLenSequenceFeature([], tf.string, True),\n    'image/object/class/label': tf.io.FixedLenSequenceFeature([], tf.int64, True)\n}\n\ndef parse_image_sample(example_proto):\n    return tf.io.parse_single_example(example_proto,\n                                      feature_description)\n\nraw_image_dataset = tf.data.TFRecordDataset(TEST_DATASET)\nparsed_image_dataset = raw_image_dataset.map(parse_image_sample)\niterator = iter(parsed_image_dataset)","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-24T11:05:11.381914Z","iopub.execute_input":"2024-07-24T11:05:11.382292Z","iopub.status.idle":"2024-07-24T11:05:11.437875Z","shell.execute_reply.started":"2024-07-24T11:05:11.382256Z","shell.execute_reply":"2024-07-24T11:05:11.436869Z"},"trusted":true},"execution_count":100,"outputs":[]},{"cell_type":"code","source":"TEST_DATASET[0]","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:05:12.813328Z","iopub.execute_input":"2024-07-24T11:05:12.813709Z","iopub.status.idle":"2024-07-24T11:05:12.819211Z","shell.execute_reply.started":"2024-07-24T11:05:12.813669Z","shell.execute_reply":"2024-07-24T11:05:12.818162Z"},"trusted":true},"execution_count":101,"outputs":[{"execution_count":101,"output_type":"execute_result","data":{"text/plain":"'/kaggle/working/Fault-Detection-2/train/fold_1.tfrecord'"},"metadata":{}}]},{"cell_type":"code","source":"!sha1sum /kaggle/working/Fault-Detection-2/train/fold_1.tfrecord","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:05:13.468166Z","iopub.execute_input":"2024-07-24T11:05:13.468515Z","iopub.status.idle":"2024-07-24T11:05:14.473282Z","shell.execute_reply.started":"2024-07-24T11:05:13.468484Z","shell.execute_reply":"2024-07-24T11:05:14.47219Z"},"trusted":true},"execution_count":102,"outputs":[{"name":"stdout","text":"fb3a985f4e56a0acece5fa83dda88a7697300fa5  /kaggle/working/Fault-Detection-2/train/fold_1.tfrecord\n","output_type":"stream"}]},{"cell_type":"code","source":"raw_image_dataset","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:05:15.167031Z","iopub.execute_input":"2024-07-24T11:05:15.167513Z","iopub.status.idle":"2024-07-24T11:05:15.173638Z","shell.execute_reply.started":"2024-07-24T11:05:15.167445Z","shell.execute_reply":"2024-07-24T11:05:15.172877Z"},"trusted":true},"execution_count":103,"outputs":[{"execution_count":103,"output_type":"execute_result","data":{"text/plain":"<TFRecordDatasetV2 shapes: (), types: tf.string>"},"metadata":{}}]},{"cell_type":"code","source":"parsed_image_dataset","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:05:15.849188Z","iopub.execute_input":"2024-07-24T11:05:15.849584Z","iopub.status.idle":"2024-07-24T11:05:15.855237Z","shell.execute_reply.started":"2024-07-24T11:05:15.849534Z","shell.execute_reply":"2024-07-24T11:05:15.854336Z"},"trusted":true},"execution_count":104,"outputs":[{"execution_count":104,"output_type":"execute_result","data":{"text/plain":"<MapDataset shapes: {image/encoded: (), image/filename: (), image/format: (), image/height: (), image/object/bbox/xmax: (None,), image/object/bbox/xmin: (None,), image/object/bbox/ymax: (None,), image/object/bbox/ymin: (None,), image/object/class/label: (None,), image/object/class/text: (None,), image/width: ()}, types: {image/encoded: tf.string, image/filename: tf.string, image/format: tf.string, image/height: tf.int64, image/object/bbox/xmax: tf.float32, image/object/bbox/xmin: tf.float32, image/object/bbox/ymax: tf.float32, image/object/bbox/ymin: tf.float32, image/object/class/label: tf.int64, image/object/class/text: tf.string, image/width: tf.int64}>"},"metadata":{}}]},{"cell_type":"code","source":"iterator","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:05:16.558698Z","iopub.execute_input":"2024-07-24T11:05:16.559088Z","iopub.status.idle":"2024-07-24T11:05:16.565222Z","shell.execute_reply.started":"2024-07-24T11:05:16.559055Z","shell.execute_reply":"2024-07-24T11:05:16.564167Z"},"trusted":true},"execution_count":105,"outputs":[{"execution_count":105,"output_type":"execute_result","data":{"text/plain":"<tensorflow.python.data.ops.iterator_ops.OwnedIterator at 0x7af804081650>"},"metadata":{}}]},{"cell_type":"code","source":"next(iterator)","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:05:17.686943Z","iopub.execute_input":"2024-07-24T11:05:17.687287Z","iopub.status.idle":"2024-07-24T11:05:17.714464Z","shell.execute_reply.started":"2024-07-24T11:05:17.687258Z","shell.execute_reply":"2024-07-24T11:05:17.713401Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":106,"outputs":[{"execution_count":106,"output_type":"execute_result","data":{"text/plain":"{'image/encoded': <tf.Tensor: shape=(), dtype=string, numpy=b'\\xff\\xd8\\xff\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xff\\xdb\\x00C\\x00\\x08\\x06\\x06\\x07\\x06\\x05\\x08\\x07\\x07\\x07\\t\\t\\x08\\n\\x0c\\x14\\r\\x0c\\x0b\\x0b\\x0c\\x19\\x12\\x13\\x0f\\x14\\x1d\\x1a\\x1f\\x1e\\x1d\\x1a\\x1c\\x1c $.\\' \",#\\x1c\\x1c(7),01444\\x1f\\'9=82<.342\\xff\\xdb\\x00C\\x01\\t\\t\\t\\x0c\\x0b\\x0c\\x18\\r\\r\\x182!\\x1c!22222222222222222222222222222222222222222222222222\\xff\\xc0\\x00\\x11\\x08\\x02\\x80\\x02\\x80\\x03\\x01\"\\x00\\x02\\x11\\x01\\x03\\x11\\x01\\xff\\xc4\\x00\\x1f\\x00\\x00\\x01\\x05\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\xff\\xc4\\x00\\xb5\\x10\\x00\\x02\\x01\\x03\\x03\\x02\\x04\\x03\\x05\\x05\\x04\\x04\\x00\\x00\\x01}\\x01\\x02\\x03\\x00\\x04\\x11\\x05\\x12!1A\\x06\\x13Qa\\x07\"q\\x142\\x81\\x91\\xa1\\x08#B\\xb1\\xc1\\x15R\\xd1\\xf0$3br\\x82\\t\\n\\x16\\x17\\x18\\x19\\x1a%&\\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xff\\xc4\\x00\\x1f\\x01\\x00\\x03\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\xff\\xc4\\x00\\xb5\\x11\\x00\\x02\\x01\\x02\\x04\\x04\\x03\\x04\\x07\\x05\\x04\\x04\\x00\\x01\\x02w\\x00\\x01\\x02\\x03\\x11\\x04\\x05!1\\x06\\x12AQ\\x07aq\\x13\"2\\x81\\x08\\x14B\\x91\\xa1\\xb1\\xc1\\t#3R\\xf0\\x15br\\xd1\\n\\x16$4\\xe1%\\xf1\\x17\\x18\\x19\\x1a&\\'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xff\\xda\\x00\\x0c\\x03\\x01\\x00\\x02\\x11\\x03\\x11\\x00?\\x00\\xf9\\xfe\\x8a(\\xa0\\x02\\x8a(\\xa0\\x02\\x8a(\\xa0\\x02\\x8a(\\xa0\\x02\\x8a(\\xa0\\x02\\x8a(\\xa0\\x02\\x8a(\\xa0\\x02\\x8a(\\xa0\\x02\\x8a(\\xa0\\x02\\x8a)\\xc8\\x8c\\xed\\xb5\\x14\\xb1\\xf4\\x034\\x00\\xda+F\\r\\x03Y\\xb9\\xc7\\x91\\xa4\\xdfK\\x9e\\xe9n\\xe7\\xfaV\\x94\\x1e\\x01\\xf1M\\xc66h\\xd7\\x03?\\xf3\\xd0\\xaa\\x7f\\xe8DQp9\\xca+\\xb6\\x83\\xe1O\\x8a%\\xc6\\xf8-\\xa0\\xff\\x00\\xae\\x93\\x83\\xff\\x00\\xa0\\xe6\\xb4\\xed\\xfe\\rj\\xef\\x8f\\xb4jV1\\xff\\x00\\xb9\\xbd\\xff\\x00\\x98\\x14\\xae\\x87fy\\xb5\\x15\\xebp|\\x16\\x8c`\\xdck\\x8e\\xde\\xa2;l~\\xa5\\x8f\\xf2\\xad8>\\x0fh)\\x835\\xde\\xa1)\\xff\\x00}\\x14\\x7f\\xe89\\xfdis \\xb3<F\\x8a\\xfa\\x02\\x0f\\x85\\xfe\\x14\\x87\\xefXI1\\x1d\\xe4\\x9d\\xff\\x00\\xa1\\x15\\xa7o\\xe0\\xaf\\x0c\\xdb\\xe3\\xcb\\xd1,\\x8e?\\xe7\\xa4a\\xff\\x00\\xf4,\\xd1\\xcc\\x87\\xca|\\xd9S\\xc1cws\\xff\\x00\\x1e\\xf6\\xb3\\xcb\\xff\\x00\\\\\\xe3-\\xfc\\xab\\xe9\\xe84\\xad:\\xdb\\xfe=\\xec-b\\xc7\\xfc\\xf3\\x85W\\xf9\\n\\xb7\\xda\\x970r\\x9f4\\xc1\\xe1\\x1f\\x11\\\\\\xe3\\xcb\\xd1/\\xf0z\\x16\\x81\\x94~\\xb8\\xad(>\\x1a\\xf8\\xae~\\x7f\\xb3<\\xb1\\xeb$\\xc8?L\\xe6\\xbe\\x84\\xa2\\x8ef\\x1c\\xa7\\x87A\\xf0\\x87\\xc4R\\xe0\\xc95\\x84#\\xfd\\xa9X\\x9f\\xd1MiA\\xf0b\\xe9\\xbf\\xe3\\xe3Y\\x85?\\xeb\\x9c\\x05\\xbf\\x99\\x15\\xeb\\xf4\\x94\\xb9\\x98\\xec\\x8f3\\x83\\xe0\\xce\\x9c\\xb8\\xfbF\\xabu\\'\\xaf\\x96\\x8a\\x9f\\xcf5\\xa7\\x07\\xc2o\\x0c\\xc3\\xf7\\xc5\\xe4\\xd8\\xff\\x00\\x9e\\x93c\\xff\\x00A\\x02\\xbb\\x9aZ.\\xc7dr\\xd0|<\\xf0\\xad\\xbe6\\xe9\\x11\\xb1\\xf5\\x92G\\x7f\\xe6kN\\x0f\\rhV\\xd8\\xf24k\\x04#\\xb8\\xb7L\\xfex\\xad^\\xd4\\n.\\x03\"\\x82(WlQ$c\\xd1T\\x0f\\xe5O\\xc5\\x18\\xa2\\x90\\tGzZJ`\\x07\\xa6)\\x07Ju% \\nCKE0\\x19\\x8ei\\xd4R\\xd2\\x01(\\xa2\\x8e\\xd4\\xc0\\r\\x14b\\x8a\\x001I\\xd0R\\xd1@\\tE\\x14P\\x01E\\x1dG4t\\xe9@\\x05\\x14Q@\\tE-\\x18\\xe9@\\x05%-\\x18\\xe6\\x80\\x12\\x97\\x19\\xa3\\x14\\xb4\\x00\\x98\\xa2\\x96\\x92\\x81\\x05-%\\x14\\x00\\x0e(\\xa2\\x8a\\x00))h\\xc5\\x00!\\xa2\\x8a(\\x03\\xe6\\x8f\\x12\\xc1\\xf6o\\x14j\\xb0\\xe3\\x01n\\xe5\\x03\\xe9\\xb8\\xe3\\xf4\\xac\\xba\\xe9\\xbe!A\\xf6\\x7f\\x1dj\\x8b\\x8e\\x19\\xd5\\xc7\\xfc\\t\\x14\\xff\\x00Z\\xe6kD@QE\\x14\\x00QJ\\xa8\\xce\\xdbQK\\x1f@3W\\xa1\\xd15k\\x8cy:e\\xe4\\x80\\xf7X\\x18\\xff\\x00J\\x00\\xa1EoC\\xe0\\xaf\\x11\\xcf\\x8d\\x9aL\\xc3\\xfd\\xf2\\xa9\\xfc\\xc8\\xad\\x08~\\x1bx\\x8a_\\xbf\\x15\\xbc?\\xef\\xcc\\x0f\\xf2\\xcd\\x17\\x03\\x91\\xa2\\xbb\\xe8~\\x15jm\\xfe\\xbfP\\xb4O\\xf7\\x037\\xf3\\x02\\xaf\\xc3\\xf0\\x9e1\\xfe\\xbfWv\\xf6H1\\xfa\\x964\\xae\\x87c\\xcc\\xa8\\xaf\\\\\\x87\\xe1v\\x8a\\x9c\\xcbs{!\\xff\\x00}T\\x7f\\xe85~/\\x87\\xbe\\x1b\\x8b\\xad\\x93\\xc8}^g\\xfe\\x84Qp\\xb1\\xe2\\x94W\\xbei~\\x15\\xd0#\\xd4\\x9e?\\xec\\x8b7_,0\\x12F\\x1f\\x1c\\xff\\x00\\xb5\\x9a\\xea`\\xd2\\xf4\\xfb_\\xf8\\xf7\\xb1\\xb6\\x8b\\xd3\\xcb\\x85W\\xf9\\n\\x9eq\\xf2\\x9f1Aayu\\x8f\\xb3\\xdaO.\\x7f\\xe7\\x9ce\\xbf\\x95iA\\xe1\\x0f\\x11\\xdc\\xe3\\xcb\\xd1/\\xf0z\\x17\\x81\\x94~\\xb8\\xaf\\xa5\\xba\\xd1G8\\xf9O\\x9f \\xf8i\\xe2\\xb9\\xf1\\xff\\x00\\x12\\xc1\\x18=\\xe4\\x9d\\x07\\xe9\\x9c\\xd6\\x94\\x1f\\x08<E&\\x0c\\xb3\\xd8B?\\xda\\x95\\x89\\xfd\\x16\\xbd\\xca\\x92\\x973\\x0eTy\\x0c\\x1f\\x05\\xee[\\x06\\xe3Z\\x89=|\\xb8\\x0b\\x7f2+N\\x0f\\x83:b\\xe3\\xed\\x1a\\xad\\xdc\\x9e\\xbeZ*\\x7f<\\xd7\\xa5\\xfb\\x1a(\\xe6c\\xe5G\\r\\x07\\xc2o\\x0cC\\xf7\\xd6\\xf2|\\x7f\\xcfI\\xb1\\xff\\x00\\xa0\\x81Zp|<\\xf0\\xa5\\xbe6h\\xf11\\xff\\x00\\xa6\\x92;\\xff\\x002k\\xa6\\xa5\\xa5v\\x16F\\\\\\x1e\\x1a\\xd0\\xad\\xbf\\xd4\\xe8\\xd6\\x08Gql\\x99\\xfc\\xf1Z\\x11C\\x14\\x0b\\xb6(\\x921\\xe8\\x8a\\x00\\xa9H\\xa3\\x14\\x00\\x94R\\x9aJ\\x00(\\xa2\\x97\\x14\\x00\\x94R\\xe2\\x8a\\x00J)i(\\x00\\xa3\\x9cQ@\\xa0\\x044b\\x94t\\xa2\\x80\\x12\\x92\\x96\\x8cP\\x02Ps\\x8e:\\xd2\\xd1@\\x05%-\\x14\\xc0L\\xd1E\\x14\\x80(\\xa2\\x8a`\\x18\\xe6\\x8a1E\\x00\\x04R\\x1e\\x94\\xb4f\\x80\\x12\\x8aZ(\\x01(\\xa2\\x8a\\x00))h\\xa0\\x04>\\xf4\\x01A\\xe6\\x8e\\xdcP\\x01\\x8a)h\\xa0\\x04\\xa2\\x96\\x90\\xd0\\x02QE-\\x00%\\x14Q@\\x05\\x14R\\xd0\\x01\\x8a(\\xa2\\x81\\x05&ih\\xc5\\x00%-\\x14P\\x01I\\x808\\x00\\x01\\xedK@\\xa0\\x02\\x92\\x96\\x8a\\x00)1KI\\xcd\\x00xg\\xc5\\x88<\\xaf\\x1a\\x17\\xc7\\xfa\\xebh\\xdf\\xf9\\xaf\\xfe\\xcb\\\\5z_\\xc6H6\\xeb\\x1am\\xc6>\\xfd\\xbb\\'\\xfd\\xf2\\xd9\\xff\\x00\\xd9\\xab\\xcd*\\xd6\\xc4\\xb0\\xa2\\x8a)\\x88\\xfaU\"\\x8e%\\xdb\\x1a*\\x0fE\\x18\\xa7R\\xd1PP\\xda)M%!\\x89E-%\\x00%!\\xa7R\\x1a\\x00e\\xa1\\xdb\\xacF\\x7f\\xbd\\x13/\\xeb\\x9a\\xde\\x1c\\xd7<\\x84\\xae\\xa9j\\xd9\\xc6w/\\xe9]\\ng\\x1c\\xf5\\xa9e!\\xdd\\xe9\\x05-%\\x00-\\x14\\xb4\\x82\\x80\\n1KE1\\x06(\\xa5\\xa2\\x80\\x12\\x8aZ(\\x01(\\xe89\\xa5\\xc74P\\x02{QJE\\x14\\x081\\xde\\x93\\x18\\xa5\\xa2\\x98\\xc4\\xa4\\xa5\\xa2\\x90\\tE\\x14P\\x01\\xd6\\x8aZ)\\x80\\x94R\\xf4\\xa4\\xc5\\x00\\x14Q\\x8a(\\x01(\\xa2\\x8e\\xb4\\x00\\x0e\\xb8\\xa2\\x81Gj\\x00(\\xc5-\\x14\\x00\\x94R\\xd2P\\x01E\\x14P\\x02QE\\x14\\x00QK\\x8a1@\\tF)i(\\x01(\\xc5-\\x14\\x00Q\\x8a(\\xa0\\x02\\x92\\x96\\x8a\\x04%\\x18\\xa3\\x14\\xa7\\x19\\xa0cqE-\\x14\\x00\\xdaZ(\\xa0AE-\\x14\\x00\\x94R\\xd1@\\x84\\xa2\\x96\\x92\\x81\\x85\\x14R\\xe2\\x80\\x13\\xbfJ(\\xa3\\xbe(\\x00\\xa2\\x96\\x8cP\\x07\\x96\\xfce\\x836:M\\xc7\\xf7$\\x91?0\\xa7\\xff\\x00e\\xaf#\\xafp\\xf8\\xbb\\x07\\x99\\xe1\\x18d\\x03\\xfdU\\xda6}\\x8a\\xb0\\xfe\\xa2\\xbc>\\xadlK\\n(\\xa2\\x98\\x8f\\xa6(4QPP\\xda)h\\xa0\\x04\\xa4\\xa5\\xa2\\x81\\x89Hih4\\x80\\x81\\xfe[\\xcb6\\xf4\\x9b\\x07\\xf25\\xd1/N+\\x9c\\xb8;L-\\xe92\\x7f\\xe8@\\x7fZ\\xe8\\x93\\xa5K)\\x0e\\xa3\\xf1\\xa5\\xa2\\x80\\x0cR\\xd1\\x8a)\\x881I\\x8aZZ\\x00h\\xa2\\x94\\x0cQ\\x8a\\x00(\\xc5!\\xa5\\xa0\\x05\\xa4\\xa5\\xa3\\xbd\\x00%\\x1fJ\\\\RP\\x02\\xd2b\\x8a(\\x00\\xc5\\'n\\x94\\xbdh\\xa6\\x02QKE \\x12\\x8a\\\\QL\\x04\\xa3\\xa5-\\x14\\x00\\x94b\\x8a>\\xb4\\x00\\x94R\\xe2\\x8cP\\x02QK\\xda\\x8a\\x00)(\\xa5\\xa0\\x04\\xa2\\x96\\x8a\\x00JJZ0h\\x01(\\xe9K\\x8a(\\x00\\xa2\\x8a1@\\tE-\\x04\\xe2\\x80\\x12\\x92\\x9d\\xd6\\x8a\\x00m\\x14\\xb4P\\x02QE-\\x00%\\x18\\xa2\\x8a\\x00)(\\xa5\\xa0\\x04\\xa2\\x96\\x92\\x81\\x05\\x1d\\xe8\\xa2\\x80\\n(\\xa5\\xa0\\x04\\xc5\\x14w\\xa2\\x81\\x05\\x18\\xcd\\x14P0\\xa3\\x14\\xb8\\xa2\\x80\\x12\\x8cR\\xd1\\x8a\\x00\\xe4\\xfe%A\\xe7\\xf8\\x0bQ#\\xac~[\\x8f\\xc1\\xd7?\\xa6k\\xe7\\xca\\xfaW\\xc5\\xd0}\\xa3\\xc1\\xfa\\xc4x\\xc9\\xfb$\\x8c>\\xa1s\\xfd+\\xe6\\xaa\\xb4K\\n(\\xa2\\x98\\x8f\\xa6(\\xa5\\xa4\\xa8()(\\xa2\\x80\\nJ(\\xa41(\\xc5-%\\x00U\\xbf;l\\xe4\\x7f\\xee\\r\\xdf\\x975\\xd2G\\xf7G\\xd2\\xb9\\xeb\\xb5\\xdfi2\\xff\\x00y\\x08\\xfd+oO\\x93\\xcd\\xb1\\x82O\\xefF\\xa7\\xf4\\xa4\\xc6\\x8bTQ\\xda\\x81HaKI\\xda\\x94S\\x10\\x94\\nZJ\\x00)i)\\xd4\\x00\\x94c\\x8aZO\\xa5\\x00\\x14PFF(\\xc7\\x14\\x00\\x94\\xb4\\n(\\x00\\xa3\\x1cQK@\\x08(\\xc5\\x14P\\x01\\xde\\x8a)h\\x01(\\xa5\\xa4\\xa6\\x02w\\xa2\\x96\\x8a\\x00LRR\\xe2\\x97\\xad\\x00&(\\x14\\xb4b\\x80\\x12\\x8aSG\\xd6\\x80\\x1bE-\\x1d\\xa8\\x01(\\xc5.(\\xc74\\x00\\x98\\x14\\xb8\\xa3\\x14P\\x02Q\\x8fZZ(\\x01(\\xa5\"\\x92\\x80\\x12\\x8cR\\xd2\\xe2\\x81\\r\\xc5\\x14\\xec{\\xd2\\x1a\\x00N\\xf4b\\x96\\x90\\xd01(\\xa5\\xc5\\x02\\x80\\x12\\x8aZJ\\x00AE/z(\\x01(\\xedK\\x8a1@\\x84\\xa2\\x8a\\\\P!(\\xa5\\xc5-\\x007\\x14b\\x94\\x8a\\\\P1\\xb8\\xe2\\x8a\\\\P\\x05\\x00\\x18\\xa4\\xc5:\\x8cP!1E-.?:\\x00\\xad}\\x07\\xdal.`\\xeb\\xe6\\xc4\\xc9\\xf9\\x8cW\\xca\\xd5\\xf5\\x8e+\\xe5\\x9dV\\x0f\\xb2\\xeb\\x17\\xb6\\xf8\\xc7\\x95q\"~LETD\\xca\\x94QEP\\x8f\\xa6(\\xa2\\x8a\\x82\\x84\\xa2\\x96\\x8a\\x00JJZ(\\x18\\x94QE\\x002A\\xf2\\x1f\\xa5^\\xd1Nt\\xaba\\xfd\\xd4\\xdb\\xf9q\\xfd*\\x93t\\xabZ\\x11\\xff\\x00\\x89p_\\xee\\xbb\\x0f\\xd4\\x9f\\xebR\\xc6\\x8dL\\xd3\\x87Zh\\xe9N\\xa0\\x03\\x1cR\\xd2Q@\\x074u\\xa5\\xa3\\x1d\\xe8\\x00\\xc5\\x14R\\x8a\\x001IKF(\\x011E-\\x14\\x00\\x98\\xa3\\x074\\xb4P\\x02b\\x8aZ(\\x01(\\xa2\\x94\\n\\x00J)qE0\\x10\\xd1\\x8aZJ\\x00(\\xa2\\x8e\\xf4\\x08(\\xa2\\x83@\\xc4\\xa0\\x8c\\xd2\\xd1@\\tE-\\x14\\x00\\x94Q\\xde\\x8cz\\x1a\\x00JZZNs@\\x05\\x18\\xa2\\x96\\x80\\x12\\x8aZJ\\x04&(\\xa5\\xc5\\x14\\x00\\x82\\x96\\x8a(\\x01?\\x1a;\\x9a)q@\\xc6\\xd1K\\x8a1@\\x84\\xc5.(\\xa2\\x80\\x1b\\x8a)\\xd4\\x98\\xa0\\x06\\xe2\\x80)\\xf8\\xa3\\x14\\x00\\xda;\\xd3\\xb1\\xcd\\x04P\\x02b\\x92\\x9dI@\\x82\\x92\\x97\\x14P\\x01\\x8a)h\\xef@\\x08(\\xc5/zZ`7\\x14S\\xa9\\r \\x13\\x14R\\xd1@\\x08k\\xe6\\xbf\\x1a\\xdb\\xfd\\x9b\\xc6\\xba\\xc4~\\xb7.\\xff\\x00\\xf7\\xd7\\xcd\\xfdk\\xe9J\\xf9\\xfb\\xe2\\x84\\x1eO\\x8fo\\x98\\x0c\\tR7\\x1f\\xf7\\xc0\\x1f\\xd2\\xaa\"g\\x1dE\\x14U\\x08\\xfaf\\x83E\\x15\\x05\\tE\\x14\\x94\\x00\\xb4\\x94Q@\\xc4\\xa2\\x8a)\\x00\\x86\\xa7\\xd0\\xb8\\x86\\xe1}\\'o\\xe9P\\x1a\\x9fE8\\xb8\\xbcO\\xf6\\xd4\\x8f\\xc4RcF\\xc0\\xa2\\x8e\\xf4\\xb8\\xa4\\x01F8\\xa2\\x8a\\x00)h\\xa3\\x14\\xc0)@\\xa4\\xa5\\x14\\x00QK\\x8e)1@\\t\\x8aZ(\\xa0\\x02\\x92\\x9d\\xda\\x92\\x80\\n(\\xa0P\\x02b\\x97\\x14\\xb4v\\xa0\\x04\\xa2\\x81\\x9csE0\\x12\\x8a(\\xa0\\x02\\x92\\x97\\x14P\\x01Hx\\x14\\xeaLq@\\x08\\xbc\\x8eiM\\x03\\xa5\\x14\\x00\\x94R\\xd1@\\tE-\\x14\\x00\\x94\\nZ1@\\tE\\x14P\\x01E\\x06\\x8a\\x00(\\xa2\\x8a\\x04\\x14QE\\x00%-%-\\x00%\\x18\\xa5\\xa2\\x80\\x12\\x93\\xb5/Z1@\\t@\\x1c\\xd1\\x8aZ\\x00(\\xa2\\x8a\\x04%\\x14\\xb8\\xa2\\x80\\x12\\x8aZ1\\xcd\\x00\\x14b\\x8a)\\x80QE\\x14\\x00QE\\x14\\x00QGj\\x07\"\\x80\\nJZ(\\x01+\\xc4>1\\xc1\\xe5\\xf8\\xae\\xd6`8\\x96\\xcds\\xf5\\x0c\\xdf\\xd3\\x15\\xee\\x1e\\xb5\\xe4_\\x1a\\xe0\\xc4\\xda=\\xc0\\x1fyeB~\\x9bH\\xfef\\x9a\\xdcL\\xf2\\x8a(\\xa2\\xa8G\\xd3TRQPP\\x94QHh\\x00\\xa2\\x8a(\\x18\\x94R\\xd2R\\x004\\xed(\\xe3U\\x9d}cV\\xfdH\\xa6\\xd1b\\xdbu\\x95\\x1f\\xdf\\x88\\xfe\\x87\\xff\\x00\\xafI\\x8d\\x1b\\xf9\\xc1\\x14\\x03E(\\xa4\\x01Gz1GN\\xd4\\x00~T\\xb4b\\x8a`\\x02\\x96\\x90t\\xe7\\xad.(\\x00\\xa4\\xc6)@\\xefF(\\x00\\xa2\\x8a(\\x00\\xa2\\x96\\x8cP!1E-\\x1d\\xe8\\x18{Ru\\xa5\\xa3\\xf1\\xa6\\x02Rc\\x8a^\\xd4P\\x02b\\x8e\\xf4\\xb4P\\x02g\\xebE\\x14P\\x01IKE\\x00 \\xa2\\x96\\x92\\x80\\n(\\xa2\\x80\\n(\\xa2\\x80\\n(\\xa2\\x80\\x0e\\xb4\\x9dzR\\xd2\\x11\\xef@\\x82\\x8a(\\xcd\\x03\\n))h\\x00\\xa2\\x8e\\xd4P \\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa0t\\xa2\\x8a\\x04%/j(\\xa0\\x03\\xbd\\x14f\\x8a\\x00J:\\xd2\\xd1@\\tE/j(\\x011E.(\\xa6\\x02b\\x8aZZ@4s\\xcd/4b\\x96\\x98\\x11\\xc8\\xfeZ\\x83\\xd6\\x9b\\x14\\xbb\\xf21\\x8a\\x91\\xd08\\xc1\\xa1P\\'A\\x8a@-%-\\x1c\\xfaS\\x01+\\xcd~3\\xc1\\xbb\\xc3\\xda}\\xc6?\\xd5\\xddl\\xff\\x00\\xbe\\x90\\x9f\\xfd\\x96\\xbd,\\xd7\\x0f\\xf1b\\x0f;\\xc0\\xb3>?\\xd4\\xcf\\x1b\\xfe\\xbb\\x7f\\xf6j\\x10\\x8f\\x02\\xa2\\x8a*\\xc4}3E\\x14T\\x14%\\x14Q@\\x05\\x14Q@\\tIKE\\x00%2#\\xb3T\\xb5o]\\xc9\\xf9\\xff\\x00\\xfa\\xa9\\xe6\\xa1\\x90\\xec\\x9e\\xd9\\xff\\x00\\xbb0\\xfe\\xa2\\x93\\x1a:Q\\xcd- \\xe9\\xebKR1}\\xe8\\xa2\\x8a`\\x14\\x03K\\xfc\\xa9\\x07\\x14\\x00\\xb4\\xeaN\\xe2\\x96\\x80\\n(\\xa2\\x80\\x12\\x8a1\\x9a\\\\P\\x00(\\xa2\\x96\\x81\\t@\\xe9\\x8a(\\xa0\\x04\\xa2\\x97\\x1c\\xd1@\\xc4\\xc6(\\xa2\\x82=\\xe9\\x80b\\x92\\x96\\x8e\\xd4\\x00\\x94QHqH\\x05\\xa4\\xf6\\xa2\\x8e\\x94\\x00RQFh\\x10QI\\x9a3@\\x0bE&i3@\\x0b\\x9a)\\r!4\\xc6;4\\x13M\\xcd&s@\\x0e\\xfch\\xa6n\\xa5\\xcd \\x17=8\\xa5\\xcd74S\\x01\\xd4\\xa6\\x9b\\x9a3@\\x85\\xfch\\xa3<Q\\x9a\\x04-\\x14\\x9d\\xe8\\xa0\\x05\\xa2\\x8a3@\\x05\\x14Q@\\x05\\x1d\\xa8\\xa2\\x80\\n(\\xa5\\xa0\\x02\\x92\\x96\\x81@\\tKE.(\\x01(\\xa5\\xc5\\x18\\xa6\\x02Q\\x8a\\\\Q@\\tE-\\x14\\x00\\x94Pz\\xd1@\\x05s_\\x10 \\xfbG\\x815t\\xeb\\x88w\\xff\\x00\\xdf,\\x1b\\xfaWI\\xd2\\xb3\\xb5\\xf8>\\xd5\\xe1\\xbdR\\x0cd\\xc9i*\\x0f\\xc5\\r\\x16\\x03\\xe5\\xba(\\xa2\\xac\\x93\\xe9\\x9aJu&*J\\x12\\x8aZ)\\x00\\x94R\\xd1@\\tE\\x14P\\x02Uk\\xce!\\r\\xdd]O\\xfe<*\\xcdW\\xbd\\xff\\x00\\x8f9\\xbdB\\x13I\\x8d\\x1d*|\\xca\\x0f\\xb6i\\xfd=\\xea+f\\x0fo\\x19\\xcf\\x1bG\\xf2\\xa9\\xaaF\\x14QKL\\x04\\xa3\\x1e\\x86\\x94\\n1@\\x0bKIK@\\x05%-\\x14\\x08L\\xf3K\\x9aB3K\\x8a\\x00(\\xa2\\x8a\\x00(\\xa3\\xb5\\x14\\x00\\x98\\xa2\\x8a(\\x18\\x1aL\\xe2\\x8a?\\x1a`\\x14\\x86\\x8a\\t\\xa4\\x02R\\x1f\\xd6\\x8aC@\\x85\\xa4\\xa34\\xd2h\\x01sFi\\x85\\xb9\\xa4-@\\x0f\\xcd&q\\xcd3u4\\xbd\\x00K\\xba\\x9b\\xbb\\xd6\\xa2/Hd\\xa0d\\xa5\\xe8\\xdf\\xcd@d\\xe3\\xad\\'\\x99\\xef@\\x13\\x97\\xa4\\xdfP\\x19)<\\xca\\x00\\x9fu;}W\\xf3)<\\xca\\x00\\xb3\\xbf\\xde\\x8d\\xd5_}.\\xfa\\x00\\xb1\\xba\\x97uW\\x0fK\\xbe\\x80\\'\\xdd\\x9a7T!\\xe9\\xc1\\xe8\\x02`\\xdc\\xd2\\xe6\\xa1\\rJ\\x1a\\x98\\x89\\xb3I\\x9ej=\\xd4\\xec\\xd0\\x16\\x1fE74P!\\xd9\\xa5\\x14\\xdc\\xd0\\r\\x03\\x1dE%-\\x02\\x14QE&2h\\x01GZ\\\\f\\x8e\\xd4S\\x00\\xc6:R\\xd1\\xcd\\x14 \\n(\\xa0sL\\x03\\x14\\x98\\xa5\\xef\\x8a(\\x01)1KE\\x00%5\\xd1dFF\\x19V\\x04\\x1au\\x1d\\xa8\\x03\\xe4\\xc9\\xa20O$M\\xf7\\x91\\x8a\\x9f\\xc0\\xe2\\x99Z\\xbe&\\x83\\xec\\xde*\\xd5\\xa1\\xc6\\x02^J\\x07\\xd3y\\xc7\\xe9YUD\\x9fL\\xe6\\x8c\\xd1EAAE%\\x14\\x00\\xb4QI@\\xc2\\x8a(\\xa4\\x02S%]\\xf1:\\xfa\\x82)\\xf4\\xd3\\xd2\\x805t\\x97\\xf34\\xbbW=Z%\\'\\xf2\\xab\\xd5\\x9b\\xa1\\xb6t\\xa8\\x87\\xf7w\\'\\xe4H\\xfe\\x95\\xa4)\\x0c;\\xd2\\xd1E\\x00\\x14\\xb4b\\x8a\\x00(\\xe6\\x96\\x92\\x80\\x16\\x8a(\\xed@\\x82\\x8a;Rg\\x14\\x00\\xbdh\\xa3\\xd74S\\x18Rt\\xa2\\x8a@\\x14\\x1a\\r&h\\x00\\'\\x18\\xa4\\xa3\\xa5&h\\x00\\xc1\\x04\\xf3I\\x9aBi\\xa5\\xa8\\x10\\xec\\xd3wS\\x0bb\\x98\\xcf@\\x0f/M-Q\\x99=*&\\x94\\x01Hd\\xe5\\xe9\\x86AU\\xdaZa\\x90\\x9e\\x80\\x9f\\xa0\\xa0\\x0b\\x06Ji\\x93\\xde\\xa0\\x0b;t\\x89\\xcf\\xe1K\\xf6[\\xa6\\xff\\x00\\x96\\'\\xf3\\xa0\\x07\\x99}\\xe9\\xa6P)\\x05\\x85\\xe1\\xe9\\x18\\xfaf\\x8f\\xec\\xdb\\xce~U\\xfc\\xe8\\x01\\x0c\\xbe\\xf4\\xc37\\xbd)\\xd3/\\x7f\\xba\\xbf\\x9d0\\xe9\\xb7\\xc3\\xfeY~F\\x80\\x1d\\xe6\\xfb\\xd2\\x19\\xaa&\\xb3\\xbcQ\\xcc\\x0e~\\x9c\\xd4\\x0e\\x93\\xa7\\xde\\x89\\xc7\\xe1@\\xcb~w\\xbd/\\x9dY\\xe6R:\\xe4Ry\\xfe\\xf4\\x82\\xc6\\x88\\x9b\\xde\\x9c&\\xf7\\xac\\xc1?=i\\xde\\x7f\\xbd\\x17\\x0b\\x1ab_zQ/\\xbdf\\x89\\xfd\\xe9\\xe2ozacDK\\xefO\\x12\\xfb\\xd6h\\x9b\\xde\\xa4\\x13{\\xd1p4\\x04\\x9c\\xd3\\x95\\xfd\\xea\\x8a\\xcb\\xefO\\x12\\xfb\\xd0\"\\xf6\\xfa]\\xf5Qd\\xa7\\xac\\x9e\\xf4\\xc0\\xb4\\x1a\\x9c\\x1a\\xab\\x87\\xfc\\xa9\\xe1\\x85\\x00N\\r(5\\x10jpjb%\\x14S\\x01\\xa7\\x03@\\x0e\\x1e\\x94QE\\x02\\x1c)i\\xbd\\xe9\\xd4\\x00\\n(\\xa5\\xa6\\x02b\\x94v\\xa2\\x8cS\\x00\\xf7\\xa4\\xa5\\xa2\\x80\\x13\\x14R\\xd1@\\r#\\x9a)q\\xc5\\x14\\x01\\xf3\\x7f\\xc4X>\\xcf\\xe3\\xedY1\\xf7\\xa4W\\xff\\x00\\xbe\\x91O\\xf5\\xae^\\xbb\\xcf\\x8b\\xb6\\xfeO\\x8e\\x19\\xf1\\xfe\\xba\\xda7\\xfek\\xff\\x00\\xb2\\xd7\\x07TI\\xf4\\xcd%-%IAIKE\\x02\\x134\\xb4\\x94P1i(\\xcd\\x06\\x90\\x054\\xd2\\xd2\\x1aC.\\xe8G\\xfd\\x16d\\xfe\\xe4\\xcd\\xfa\\xf3\\xfdkW\\x9e\\xd5\\x8d\\xa2\\x12\\xb3^&\\x7f\\x8c6>\\xaa\\x07\\xf4\\xad\\xa1Hb\\xe6\\x96\\x9a)\\xd4\\x00\\n(\\xc74\\xb4\\x00QE\\x14\\x08N\\xb4v\\xa5\\xa3\\x9e\\xd8\\xa0\\x04\\xe7\\x14b\\x97\\x1c\\xd1@\\x06(\\xa2\\x8e\\xd4\\xc6%\\x14\\x99\\xa4\\'\\x9a@-&i3M-@\\x87\\x13\\xc50\\x9ain*6~\\xb4\\x0c{=F\\xcfM\\xc3\\xc9\\xc2)5 \\xb4\\xef$\\x80{\\n\\x00\\x81\\xa4\\xe6\\x90,\\xb2\\x1f\\x95\\t\\xab\\xa9\\x1c\\t\\xca\\xaeO\\xa9\\xa9<\\xc3\\x8e8\\xa0\\nB\\xc6S\\xcb0QN[8\\x07\\xdf\\x90\\xb1\\xfc\\xaay\\x1c\\x8595\\xe5:\\xef\\x88\\xb5s\\xe2\\xc9#\\xd3\\x19\\xa4X\\x17\\x065\\xe4\\x1fZ\\x04\\xd9\\xea\\xab\\x05\\xb2}\\xd8\\xc1\\xfa\\xd4\\x81\\x95G\\xca\\x80~\\x15\\xc8\\xf8s\\xc5\\xf6\\xfa\\xb6-\\xe6\\x06\\x1b\\xb5\\xe1\\xa3~\\x0f\\xe1]P \\x8e(\\x00\\x96\\xe3\\xcbRzb\\xb9\\xab/\\x1ci\\xf7\\xba\\xac\\xb6\\x0b&\\xd7F\\xda\\xa4\\xf4\\x7f\\xa5/\\x8c/g\\xb5\\xd2\\x1a;E-q;\\x08\\xa3\\x03\\xaeMr\\xb6\\xdf\\x0e\\xdd\\xf4\\xc4\\x97\\xed\\r\\x15\\xf8;\\xc3\\x8e\\x80\\xfaQa6zrJX\\x02\\x0f\\x14\\xbb\\xda\\xb9o\\x0c^j\\x08Z\\xc3SC\\xe7\\xc48q\\xc8q\\xeb\\x9a\\xe9\\x8b\\x00\\xb9\\xa0w+j\\x1a\\x94z}\\xac\\x93\\xcc\\xfbQ\\x06I5\\x85\\xe1\\xef\\x1bZ\\xeb\\x93\\xcb\\nf9\\x15\\x8e\\x15\\x8f\\xde\\x1e\\xb5\\x99\\xe2K-C\\xc4z\\x9a\\xe9\\xf0\\x93\\x15\\x8cx2\\xc9\\xd3q\\xf4\\x15KQ\\xf0L\\x9ab\\xc3\\x7f\\xa2\\xb9\\x13\\xc2\\x06\\xe4\\xcf\\xdf\\xff\\x00\\xeb\\xd3\\x15\\xcfIY\\x98\\xd2\\xf9\\xa7\\xb8\\xcdd\\xe8\\x97\\xe6\\xfbN\\x8agR\\xaeF\\x19Oc\\xde\\xb4]\\xc2\\xa9c\\xd2\\x90\\xc2F\\x80\\xa9\\xf3\"B;\\xe4Ucc\\xa6\\xdc\\x8c\\xack\\xf5S\\\\\\x17\\x88\\xf5\\xfdCY\\xba}/DG*\\x0e\\xd9&^\\x07\\xd34\\x9e\\x08\\xd5n\\xacof\\xd15\\x02D\\xb1\\x9f\\x93wz,+\\x9d\\xbc\\x9e\\x1d\\x85\\xc6a\\x9d\\x97\\xd8\\xf3T\\'\\xd0o\\xa1\\xe56\\xc8=\\x8f5\\xd0+q\\x9c\\xd3\\xfc\\xc6\\x1d\\xe9X\\xab\\x9c\\\\\\x894\\r\\x89ct>\\xe2\\x90K]\\x94\\xb70\\x95\\xc4\\xea\\x85O\\\\\\xd59\\xb4M>\\xf0n\\x8c\\x98\\x98\\xf4*h\\xb0\\xeesboz\\x90OVn\\xfc;y\\x00-\\t\\x13/\\xb7\\x06\\xb2_\\xcd\\x85\\xb6\\xca\\x8c\\x8c;\\x11\\x8a@h\\xac\\xde\\xf5*\\xcdYK1\\xa9Voz\\x02\\xc6\\xaa\\xcbS,\\xbe\\xf5\\x94\\xb3{\\xd4\\xcb7\\xbd0\\xb1\\xa8\\xb2T\\x81\\xfd\\xeb5&\\xe2\\xa6Is@\\x8d\\x05~*El\\xd5\\x15\\x92\\xa6Y3\\xde\\x98\\x17\\x03S\\x81\\xe6\\xab\\xab\\xf1O\\r\\xc5\\x00X\\x06\\x9d\\x9a\\x85Z\\x9e\\r1\\x12f\\x96\\x99\\x9aZ\\x00}-3\\x9aQ@\\x87QE\\x14\\x00QK\\xde\\x96\\x98\\tI\\x8av(\\xa0\\x06\\xfbQ\\x8a\\\\Pi\\x81\\xe2\\x9f\\x1a\\xad\\xf6kze\\xc7\\xfc\\xf4\\xb7d\\xcf\\xfb\\xad\\x9f\\xfd\\x9a\\xbc\\xc2\\xbd\\x93\\xe3u\\xbelt{\\x9c}\\xc9%L\\xff\\x00\\xbc\\x14\\xff\\x00\\xec\\xb5\\xe3uH\\x96}1E\\x14T\\x8c))i(\\x00\\xa2\\x8aL\\xd01i(\\xcd\\x14\\x80i<\\xd0M)\\xa6\\x9aCE\\x8d%\\xb1\\xa9\\\\\\x0f\\xefF\\x87\\xf2-\\xfe\"\\xb7\\x7f\\x95s\\xbasm\\xd5\\xd3\\xd1\\xa1a\\xf8\\x82?\\xfa\\xf5\\xd1\\x0eG4\\x86(\\xa34b\\x96\\x80\\n^\\xd4\\x94P!s\\xc5 \\xa5\\xa3\\x14\\x00Q\\x9aJ(\\x01z\\xf1Fh\\xa4\\xa0`N1\\xc19\\xa3\\xa5\\x1d)\\t\\xa0B\\x1anp)I\\xa8\\xd8\\xd0\\x02\\xb3Tl\\xd4\\xa04\\x87\\n*A\\n\\xc62\\xe7&\\x81\\x90\\xaa<\\x9d\\x07\\x1e\\xa6\\xa5X#C\\xf3\\x9d\\xc7\\xf4\\xac-W\\xc6:v\\x93~\\xb6w2\\x18\\xd8\\xae\\xe0v\\xf1\\x8a\\xbde\\xabZ_ h\\'I\\x01\\xfe\\xebf\\x81\\\\\\xd3\\xdf\\x81\\x85\\x00\\x0fj\\xe4\\xbcu\\xaa\\xdc\\xe9\\x9a\\x0b\\xcbm!I\\x8b*\\xab\\x0e\\xdc\\xd7T\\x0eG\\x15\\xca\\xf8\\xcfK}V\\xda\\xd2\\xdd[\\x83:\\x97\\x19\\xfe\\x1a\\x01\\x9c\\xce\\x91\\xe3\\x9dR\\xce8\\x8e\\xabg#\\xc0\\xf8\\xc4\\xe8\\xbd\\xbd\\xeb\\xd0t\\xddZ\\xdbS\\xb7\\x13[\\xc8\\x1dO\\xe9X\\xff\\x00o\\xd34\\xb9\\xed\\xb4y\\x10\\x99]>E\\xd9\\x90Ef[\\xde?\\xdbo\\xadR\\xc8i\\xbb\\x81X\\xe7\\xc8\\xe4\\xf68\\xa7a\\x1d\\x8d\\xe4\\xf1Cn\\xcf$\\x8a\\x8a\\x07,\\xc7\\x02\\xb9\\xcf\\x0cxv;G\\x9e\\xfaR\\xb2Op\\xe5\\xcb\\x03\\x91\\x82z\\x03Y\\xb2\\xdfM\\xa5\\xdb\\xc7a\\xac7\\xdb\\xe2\\x97\\xefJF\\x01\\xa9d\\xf1\\x1c\\xbaU\\xc4Q\\xa5\\xa8[\\x0c\\x00\\x8c\\xbe\\x94X.ik\\xfat*\\xd0\\xcd\\r\\x80\\x96}\\xe0oC\\xb5\\x90z\\xe6\\x93Q\\xd5\\xafa\\xba\\xb4\\xb4\\xd3\\xd6\\x17\\x91\\x8f\\xef\\x96F\\xc1U\\xf5\\x15\\x87\\xab\\xea\\xd3^k6\\xcbo;,L\\x17\\x04\\x1e=\\xe9\\x92)\\x87\\xc5\\xea\\xf2HT6\\x08\\'\\xbf\\x14\\x01\\xa1\\xa8jW\\xf1\\xeb\\xf1\\xa4\\xb3\\xd9\\xad\\x9a\\x81\\x95\\x7f\\xbe\\x0f\\xa8\\xa6\\xbd\\xf5\\xd6\\x89x\\xf777mskr\\xdf\\xbbU\\x1c%s\\xde#\\x8d\\x93Y\\x98\\xb9![\\x95>\\xb5\\xa5\\x0b\\xa5\\xdf\\x84\\x1b\\xed\\x03&#\\xf2\\x1fCLW5-\\xf5m?I\\xb8.%\\x9aAr\\xdef\\\\\\xe4.}+[V\\xd7\\xadl\\xac\\xd5\\xdc\\x96\\x12\\x8e\\x02\\xf5\\xc5q2<M\\xe1\\x88\\xfc\\xd1\\x99C\\x91\\x19\\x1di\\x97\\x90\\xdc-\\x85\\x8c\\xd7!\\x9a\\x10\\xb8\\xc7\\xa74\\x82\\xe6\\xd3jV\\x9aN\\x98\\x89j\\xd3\\x93u\\x92\\x0b\\xbeJ\\xe7\\xbf4\\x97->\\x93\\xa0\\x8bq\\xab\\xb7\\xda\\xa5;\\x96I\\x86\\xe2\\x05g\\xea\\xb2\\xc1-\\xfd\\x8c\\xdc\\x1b}\\xa3\\n;T~+b\\xda\\x849\\x1f\\'\\x961L\\rq6\\xa4\\xfa\\x043\\xdajP\\x89\";\\xa7r\\x9c0\\xef\\xf4\\xab\\xf2j7\\x1a\\x9d\\x84\\x0feq\\x00\\x8c\\x9d\\xb3\\xf9\\xb9\\x19\\x1d\\xf1X\\x1a\\x02\\x8f\\xec+\\xef9\\xb6\\xc2r3U\\xecm\\xbc\\xdf\\x0f]1}\\x8a\\xaf\\xb9I8\\x04\\xd0\\x07\\xa0i\\xd66v\\xf6\\xe0[\\xc6\\x8a\\xbf\\xec\\xf7\\xac\\r~\\xce\\xc9\\xf5\\xcb&\\x8ftw\\xf9\\xca:\\xa1\\xc1Q\\xd4\\x13X\\xf6^ \\x9e\\xc7B\\xf2\\xd0\\x93)m\\xa8ju\\xd5u\\x0b\\r+\\xcf\\xba!\\xe7\\x90\\xfe\\xe8?P=i\\x0e\\xe7o\\x1c\\xf1\\xa1X\\xd9\\xd7~:g\\x9a\\xa7\\xadk0\\xe96\\x9ek\\x86w<$j2X\\xfb\\n\\xe5\\xed\\xe1\\x825\\x8b]\\xd4\\xe4u\\xba#\\x0b\\x868#\\xe9Rh\\xb7\\x17\\xb7S\\xdd\\xce\\xf7q^\\xa2\\x82a\\x8c\\xa6\\xd6_l\\xd1`\\xb9\\xcc\\xebs\\xf8\\x9fX\\xb6\\x96\\xf1\\xe2\\x92\\xda\\xd2!\\xb8F\\x0e\\t\\x1f\\xd6\\xbb\\xaf\\x07j\\x87Q\\xd0\\xe0\\x91\\x9b.\\xab\\xb5\\xbe\\xa2\\x93M\\xd5Z\\xefH\\xb8\\x93R\\xb6X\\x1a=\\xc1\\xe3S\\xbb\\x81\\xf4\\xa8<!b\\x96\\xcbq-\\xb1&\\xceg\\xdf\\x10<\\x10\\x0flP\\x07^\\xb22\\xf7\\xa4\\x9a\\x1b[\\xc4\\xdb<J\\xd9\\xef\\x8aoAY\\xba\\x96\\xb7c\\xa5\\xc6^\\xea\\xe1#\\xf6\\'\\x9aC+\\xde\\xf8[\\x83%\\x8c\\x99\\xff\\x00a\\xab\\x9e\\x9e\\x1b\\x8bI\\nO\\x1b!\\xf7\\xefW\\xb4\\x8f\\x1fZj\\x9a\\xc0\\xb2\\xb7\\x8e@0Hv\\xc0\\x06\\xbb\\x17[{\\xd8\\xbc\\xbb\\x88\\x95\\x81\\xeeE+\\r3\\xcfVlw\\xa9\\xd2c[:\\x97\\x85\\x19\\x01\\x9a\\xc1\\xf7/\\xf7\\x0f\\xf4\\xaerE\\x92\\t\\x0cr\\xab#\\x0e\\xa0\\xd2(\\xd1Y\\xbd\\xeat\\x98z\\xd6J\\xcbS$\\xbe\\xf4\\x01\\xae\\x92\\xd5\\x88\\xe4\\xac\\x94\\x96\\xac$\\xbe\\xf4\\xc4j\\xac\\x9528\\x00\\x01Y\\xa9-XIx\\x14\\xc4_V\\xc8\\xa9A\\xaah\\xf9\\x1525\\x00Z\\x06\\x9c*\\x15n)\\xeai\\x88\\x94R\\xd3\\x05<P!i{\\xd2\\nZ\\x00QKH)h\\x01i:\\xd2\\xd1@\\t\\xd2\\x8c\\x01\\xdf\\x19\\xa5\\xa3\\x14\\xee\\x07\\x9d\\xfce\\xb7\\xf3|\\x1b\\x0c\\xa0s\\r\\xe27\\xe0U\\x87\\xf5\\x15\\xe0\\xf5\\xf4g\\xc5\\x0b\\x7f?\\xe1\\xf6\\xa4@\\xcbFcq\\xf8H\\xb9\\xfd\\t\\xaf\\x9c\\xea\\x90\\x99\\xf4\\xc5%\\x14R\\x00\\xa0\\xd2Q@\\x054\\xd2\\xd1@\\xc4\\xa5\\xcd\\x06\\x8a@!4\\x94\\xa4Si\\r\\x0blv\\xea\\xd6\\x87\\xd5\\x99\\x7f\\xf1\\xd2\\x7f\\xa5t\\xa0q\\\\\\xbev]\\xda\\xbf\\xa4\\xaa?>?\\xadu\\x0b\\xc8\\xa41\\xd4QK@\\x05%-\\x14\\x08;\\xd1GJL\\xe2\\x80\\x16\\x8aJ\\\\\\xd0\\x01I\\x9aSM&\\x81\\x81\\xa6\\x13\\x8aRi\\x9c\\xb3`\\x0c\\x9a\\x04!jrB[\\x978\\x1e\\x95 \\x8cD2y5\\xc6\\xeb\\xbe;\\x8bD\\xd5\\x8d\\x9c\\xf6\\xb20\\xda\\x18:\\x91\\xdf\\xda\\x80;<\\x85\\x18Q\\x81Q\\xb1\\xc85\\xcb\\xd8x\\xf3G\\xbd`\\x86\\x7f)\\x8f\\x18\\x90b\\xba\\x07\\xbe\\xb6\\x16\\xfe{L\\x82/\\xef\\x16\\x18\\xfc\\xe8\\x03\\xcd\\xbca\\xa5\\x9b\\xff\\x00\\x1aYDS)*|\\xdf@kQ\\xfc\\x1ba\\xa5\\xc2\\xd7\\xb6\\xf776\\xe5\\x06\\xe6\\xf2\\xdb?\\xa5^\\xd6u;h\\xf5\\x8b2-d\\x99\\x99HY\\xd3\\xee\\xa0=y\\xaa\\xa4jZ}\\xac\\xf7\\x10_\\xff\\x00h+\\xb6\\xed\\x8c\\x07\\xc8\\xbe\\x83\\x14\\xc9:=\\x16\\xe8K\\xa7E#Ld\\xdc2\\x19\\x97i?\\x85fx\\x9a\\xebN\\xb7\\xb9\\xb4\\x96\\xea\\x07\\x92D%\\xa3*q\\xb6\\xb0M\\xcc\\xfa\\xe6\\xd7\\xb7\\x9c\\xdb\\xdcF?\\xd4\\xe7\\x00\\xfd*\\xac\\xb2]\\xebQ\\x9bY\\x00k\\xabl\\xe3\\x1f\\xc5\\xed@\\\\\\xd0\\xb8\\xd4\\xa7\\x8f\\xc4\\xd0\\x16\\\\\\xc1\"\\xae\\xcc\\xf6\\x06\\xb2\\xfcO\\x1c\\xd1k\\x0e\\xd21\\xf2\\xdc\\x06S\\xda\\xac\\x03.\\xad\\x1aZI\\x03G{\\x08\\xf9\\x1b\\xa0\\xe3\\xd6\\xacI*\\x1b\\x08\\xed\\xb5\\xe5x\\x9c\\xc9\\xe5\\xc5&2X\\xd3\\x01\\x9ad\\xc9\\xabhW\\x10\\xdd\\'\\x98\\xf6\\xeaJ\\x1e\\xfd*\\xad\\xbc\\xb2\\xddxnh\\x166vI\\x00\\x1cd\\xa8\\xad]\\x1fM\\xbe\\xb5\\xb9\\xbd\\xb7\\x86\\xc7\\xcb\\x8c\\xa6#\\x9eF\\xc8s\\xdb\\x81\\xda\\xb54\\xcd\\x02\\xfa-!\\xe1\\x96X\\xe0\\xba\\x91\\xb2\\xd2B8\\x1f\\x9d\\x01c*\\xdf\\xc3\\x12\\xde\\xe8p\\xb6<\\xbb\\xa4\\xe5s\\xc7\\xe0i\\xb7:4\\x97I\\r\\xac\\xd7\\x91\\x8dJ/\\x99W=V\\xbb\\x98c\\xfb5\\xba\\xab\\xb6\\xe2\\xa3\\x96=\\xeb>\\xce\\xf7I\\xd4\\xae\\xe4\\x96\\xdd\\xe2y\\xe3%\\x19\\x867\\x0cv\\xa4;\\x1c\\xb5\\xca\\xae\\xabm<_\\xd9\\xb3\\xcbwf6\\xae~A!\\xf6&\\x95\\xecu\\x01\\xa0\\xda\\xdaE\\xa5\\xed3\\xb6\\'R\\xff\\x00\\xea\\xc7\\xaek\\xbeX\\xa3\\xea\\x00\\xcdQ\\xd65\\x1b}&\\xc2[\\xb9\\x8e\\x125\\xcf\\xd7\\xda\\x800\\xbf\\xb1\\x927\\xb3\\xb1\\xfb\\x0f\\x9bn\\x01f\\x90\\x9f\\xbakv}6\\xde\\xe2\\xd3\\xc8\\x92\\x15h\\xc0\\xfb\\xb5\\xcexg\\xc6\\xb1\\xeb\\x134\\x171}\\x9e|\\xe5\\x14\\x9e\\x19{b\\xbb r3@\\x1ct\\xba;_\\xd9K\\x1c\\x9aw\\x90\\xd6\\xec|\\x80\\x1b\\xef\\x8e\\xd5KQ\\xb0\\xd5/th\\x1d\\xf4\\xa8\\x9e\\xed[iO3\\x1bW\\xeb]F\\xbb\\xad\\xdbh\\x96-q1\\xe7\\xa2\\xafv>\\x82\\xb1\\xfc+\\xe2\\xd1\\xad\\xb4\\xb0\\xdcD!\\xb8S\\xf7=Gj\\x00\\xce\\xb9\\xb5\\xb91\\xc3\\xa2\\xc5a$i\"\\x86y\\x97\\x95S\\xe9ChQ\\xdd*\\xe9V\\xd7xh9\\x95H\\xee{\\xd7|\\x11N\\x0e\\x05W\\x94[Z\\x96\\x9d\\x82!\\xc7\\xcc\\xc7\\x8f\\xce\\x80\\xb1\\xc8k~\\x19d\\xd3-\\xd2\\xcd74\\'\\xf3\\xf7\\xac\\xbdU.E\\xce\\x98\\xb3E\\xc8P1\\xd7\\xbdw)sg\\xae\\xd8J\\x96\\xd7\\x1b\\xa3pP\\xbcm\\xc8\\xfa\\x1a\\xcf\\xd4<94\\x9aT6\\x96wM\\x1c\\xb1\\x11\\xb6g\\xf9\\x9b\\x03\\xad\\x02\\xb1\\xc9x\\xb6V7pBr#D\\xce\\xd1SxV\\x16\\x86\\xde\\xee\\xeb\\xee\\xa1\\\\+\\x13\\xc5j\\xea\\xda.\\xa5s\\xa8Z\\x86\\x8a\\tl\\xd11#6C\\xe7\\xda\\xb3\\xe6Y5\\x8bo\\xb1i\\xd0Ik\\x04\\x12\\x11!\\x91v\\x83\\xee=i\\x81[G\\x9a\\xe6\\x0b}B\\xf22\\x1f\\x1c\\xfc\\xdd+\\xa6\\xf0\\xe6\\xb1\\xf6\\xbd=\\xa5\\x9fbl88\\xe0V\\x05\\xd5\\xad\\xfc1&\\x97c\\x01h\\x9c|\\xd2\\xa8\\xe1\\xbe\\xa6\\xa8\\xde\\xda\\xcfba\\xd2\\x96R<\\xcc3\\xe3\\xd4\\xd0\\x07k{\\xac<\\xd6\\x85\\xb4\\xb5[\\xa7\\xdd\\xb5\\x80l`z\\xd6C\\xf8cI\\x9a\\xe5e\\xd4\\xa6i\\xae\\xa5\\xed,\\x99\\xc9\\xf6\\x15\\x93>\\xfd%\\x85\\x86\\x9a\\xce\\xf72\\x01\\xbd\\xbf\\xc2\\xad\\x9b;+E\\xb5\\xb9\\xd6ei/\\x13\\x98\\xf99ZC\\xb9\\x9d\\xa8h\\xa3E\\xf1\\xa6\\x9d5\\xa4A-\\xe6\\xf9p\\xa3\\x80Ez\\\\9\\xd8+\\x89\\xb2\\xbc\\xbc\\xbb\\xb9\\x9a\\xebPX$\\xb0\\xb7\\xcc\\x90\\xc9\\x1f\\xde\\\\z\\x8f\\xa5u\\x1aF\\xafk\\xabY\\x8b\\x9bV&#\\xc0$b\\x80F\\xaaJ\\xc8x5\\x1d\\xde\\x9dg\\xaa\\xc4Vt\\x01\\xfb0\\xe0\\xd6^\\xa7\\xaf\\xe9\\xdaR\\xe6\\xee\\xe5#=\\x81<\\x9f\\xc2\\xb9\\x99\\xfe%i\\xf1J\\xab\\x04r\\xcb\\x93\\x8c\\x81\\x81\\xfa\\xd2\\x1d\\xecX\\xd54;\\xad1\\xcb\\x00d\\x87\\xb3\\x81\\xd3\\xebY\\xaa\\xf5\\xe8\\xb6\\x97kul\\xbeb\\x86F\\x1d\\rak~\\x17\\xf9Z\\xea\\xc0\\x0fS\\x18\\xfe\\x95-\\x14\\x99\\xce\\xa4\\xbe\\xf5b9}\\xeb;,\\x8cU\\xc1V\\x07\\x04\\x1e\\xd5*I\\xcd!\\x9a\\xb1\\xcdV\\xe3\\x975\\x8f\\x1c\\xbe\\xf5j9i\\x88\\xd7\\x8eJ\\xb2\\x8fYQ\\xcbV\\xa3\\x93&\\x98\\x1aH\\xf52\\xb5QI2*tzb-\\x83O\\x06\\xa0V\\x06\\xa5S\\xcd1\\x12\\x83KL\\x07\\x9ap4\\x00\\xeaZJQ@\\x85\\x14P)h\\x00\\xa2\\x8a(\\x03\\x0f\\xc6v\\xff\\x00i\\xf0V\\xb5\\x1e2~\\xc7#\\x01\\xee\\xaa[\\xfaW\\xcb\\xd5\\xf5\\xad\\xfd\\xbf\\xda\\xf4\\xdb\\xab|g\\xcd\\x85\\xd3\\x1fPE|\\x95V\\x84\\xcf\\xa5\\xcd\\x14RR\\x00\\xa4\\xa5\\xa4\\xa0aI\\x9a))\\x00\\xb9\\xa34\\x94R\\x01sIE\\x14\\x0c\\x86\\xe0\\xed\\x8f\\x7f\\xf7\\x187\\xe4s]Z}\\xd1\\\\\\xad\\xca\\xef\\xb6\\x91}T\\xd7Ii!\\x96\\xda\\'\\xfe\\xf2\\x83\\xfaR\\x1a,v\\xa5\\xcd\\x18\\xa2\\x80\\n(\\xa3\\x9a\\x04\\x14\\x94\\xb4\\x94\\x00\\x8d@\\xe2\\x96\\x90\\x9c\\n\\x00)\\x18\\xd2d\\xd0\\x14\\xb9\\xc0\\xe9\\xeb@\\r\\x00\\xbb`t\\xf5\\xa9\\xd5V1\\x81\\xf9\\xd6f\\xad\\xad\\xd9hv\\xe9%\\xdb\\x94Fm\\xa0\\x81\\x9ek2/\\x1c\\xe8S0\\xdbz\\x83\\xd9\\xb8\\xa0.t\\x8c2\\ry\\xcf\\x8e\\xb4w\\x9b\\\\\\xd3.\\xd52\\x85\\xfc\\xb9?>?\\xadwv\\xba\\xa5\\x9d\\xe4E\\xe0\\x9e7P3\\xc1\\xac\\xcdR\\xe2{\\xa1\\t\\xb0\\x16\\x93\\xa0\\x93\\xf7\\x9ei\\xce\\x07\\xb6;\\xd0 \\xfe\\xc0\\xb0kL\\x8b+r\\xf8\\xe3r\\x0cf\\xb0\\xafc)\\xe1\\xbb\\x8b;\\xd8m\\x9d\\xc7&\\x18I\\xdb\\x8c\\xfeu\\xa5u\\xe2\\xcb[+\\xa3k4n6\\xf0X\\x0e+\\x94\\xb8\\xbbKmu\\xafc&[Y\\t\\'\\x1c\\xf0{S\\x02\\xf0\\x94j\\xbe\\x1a\\x10\\xd9\\xa0\\x89\\xad\\xc0\\xfd\\xd8\\xf4\\x15\\xcf\\xe9\\xda\\x8d\\xc6\\x9br\\xae\\x8epN$\\x8c\\xf7\\xadU\\r\\x1d\\xc3\\\\\\xe8\\xb2\\x97\\r\\xcb\\xc2G\"\\xadH\\xbam\\xd5\\xcc)qk$\\x17\\xf3\\x8c\\xaa\\xec;I\\xf7\\xa6!5\\x18eK\\xfbMV\\xca1\\xb2L\\x03\\x81\\xd2\\xb4\\xb4\\xfb\\x0b[?\\x11n{\\x83\\xf6\\x89\\xd4\\xba\\xc7\\xb7\\xd7\\xaf5-\\xa7\\x86\\xae\\xeft\\xb8\\xed\\xb5[\\x83\\xba)w\\xa1\\xb7%8\\x1d\\x01\\xf6\\xad\\x1d[W\\xd3\\xbc>\\x90Ixv\\xee;\\x15\\xb6\\xe7\\x14\\x80\\xd1\\xb8\\xd3\\xa2\\x9e\\x19\\x14f6u\\xda]8a\\xf45\\x1c\\x1ad6\\xf6\\x91\\xc3.g\\xf2\\xfa4\\xbf1\\xfa\\xd1\\xa7\\xebv:\\x8a\\x06\\xb6\\xb8I>\\x86\\xafJ\\x0bFq\\xdcP3\\x92\\x7f\\x1ci\\xb6\\xba\\xd4\\xbat\\xc0\\xc7\\xe5\\x90\\xbea\\xfb\\xb9\\xae\\xa6\\xda\\xea\\x1b\\x98\\x84\\x918e# \\x83\\x9a\\xe44_\\x07D~\\xd76\\xa7\\n\\xcb-\\xc4\\xac\\xc40\\xce\\x06x\\xae\\x87J\\xd0\\xad\\xf4r\\xebjdX\\x9b\\xfeY\\x96\\xca\\x8f\\xa5\\x00C\\xe2\\x89\\xe7\\x83D\\x9d\\xad\\x94\\xb4\\xcc\\x02 \\x1e\\xa4\\xe3\\xfa\\xd7%\\xa7x\\x16\\xfa\\xce\\x08\\xaf-/Z\\x1b\\xdf\\xbc\\xe0\\xf2\\xad\\xeck\\xd2\\x19\\x03\\x0eFh\\x08=(\\x0b\\x14\\xf4\\xd3tm\\x13\\xedh\\x16`0\\xc0\\x1c\\x8a\\xa1\\xad\\xe8+\\xad\\xc9n\\x93\\xb9\\xfb<m\\xb9\\xa3\\xfe\\xf1\\xed\\x9fj\\xdc\\xc5\\x14\\x01\\x81y\\xe1[\\x0b\\xa5\\x89\\x96?*h\\xb1\\xe5\\xc8\\x9c\\x15\\xad\\xa8\"1\\xc2\\xa8[q\\x03\\x04\\xfa\\xd4\\xd4P\\x06\\x15\\xf7\\x87-\\xb5-E.\\xaf\\x0bJ#\\x1f$d\\xfc\\xaa}qU\\xee\\xfc)\\x03jPj\\x16\\x87\\xc8\\xb8\\x88\\x8c\\x95\\x1c:\\xf7\\x06\\xba\\\\Q\\x8a\\x00\\x89AT\\xe6\\xb9\\x1dwE\\xd5<Ax`\\x92sm\\xa7\\xa9\\xc1T?4\\x9f\\xfdj\\xec\\xf0)6\\x8fJ\\x00\\xf3\\xef\\ri\\xd7~\\x1a\\xd7\\xe6\\xd3\\x9bs\\xd9\\xcc7\\xc2\\xfe\\x9e\\xa0\\xd7\\x7f\\xbb\\xe5\\xc9\\xa4h\\x90\\xb0m\\xa3#\\xa1\\xa4\\x9a2\\xf12\\xabm$`\\x1fJ\\x02\\xc66\\xb5\\xe2]7F\\x8b7S(c\\xd1\\x07,\\x7f\\n4\\xfb\\x9b/\\x11i\\x06DR\"\\x9dH \\x1c\\x1a\\xa0\\xde\\x07\\xd3\\x9d\\xe5\\x9aui\\xe7\\x90\\x1c\\xc9#\\x12\\x7f\\ng\\x834\\xdb\\xbd\"\\x0b\\x8b\\x1b\\x80v\\xc5)\\xf2\\xdb\\xfb\\xcb@\\x1d\\x15\\x9e\\x9d\\r\\x8d\\xaaA\\x10;\\x10`d\\xe4\\xd6\\x06\\xabegs\\xaf\\xc0\\xb2E7\\x9c\\x17pu\\x1f/\\x1e\\xa6\\xba\\xa6`\\xa3\\x93YW\\x9a\\xce\\x9bk\"\\xa5\\xc5\\xc4j\\xecp\\x01<\\x93@\\x1c\\x96\\x9de2\\xeb\\xd7w30&,\\xe0g$\\xd75\\xa8\\\\O}\\x7f,\\x8f\\xb9\\x98\\xb6\\x14zW\\xa1\\xcd\\xe1\\xd8v\\xdf\\\\\\xe9\\xcca\\xbb\\xbb\\x1c\\xcaIl\\x1f\\\\V\\x02[\\xc3\\xa4]\\xdb\\xda\\xde\\xc2\\xd7Z\\x8b\\xa9a*FB\\x93\\xfc\\xa9\\x8a\\xc2[\\x89t?\\r;\\xba\\xe2i\\xbf\\x84\\xf6\\xcdIau\\x8d\\x04A-\\xdf\\xd8\\xe4\\x98\\xfe\\xed\\xd5j\\x8d\\xcc\\x17\\x97\\x12\\x1b\\x9dX\\xb4V\\xaa\\xdf*\\x7f@*\\xb5\\xed\\xc2jwP\\xf9(\\xc9o\\x08\\xc7\\xb0\\x1e\\xb4\\x01\\xdbA\\xe1\\xdb\\x0b\\x88RK\\x98\\xa3\\xb9\\x90\\x81\\x99\\x1dA\\'\\xde\\xb9O\\x1ch0[Ed\\xf6\\x96\\xe8\\x80N\\x14\\x85\\\\u\\xad%\\xf1|q\\x18\\xe0\\xb6\\x81\\xa4Q\\x85&\\xaf\\xdcD\\xf7\\xba\\x8cs\\\\\\\\E\\xf6E\\x01\\xc4,9\\x0c;\\xd2\\x19\\xb7\\xa6\\xa1[8\\x81\\x1c\\x85\\x15\\xa3\\x14\\xa58=;\\x8a\\xcf\\xb3\\xbd\\xb5\\xba\\x8bu\\xb4\\xc9\"\\x8e2\\x87\"\\xac<\\xc8\\x83\\x96\\x02\\x90\\xd1SZ\\xf0\\xfc\\x1a\\x9cf{|$\\xe0v\\xef\\xf5\\xae\\x16h\\xa5\\xb5\\x9d\\xa1\\x99J\\xba\\xf5\\x06\\xbd\\x0e=F(\\xdc~\\xf5A\\xfa\\xd4z\\xbe\\x8f\\x06\\xb3ld\\x8c\\x05\\x99FA\\x14\\x9a)3\\x81W\\xab1\\xc9Un \\x96\\xce\\xe1\\xa1\\x99J\\xba\\xfe\\xb4+\\xd4\\x8c\\xd4\\x8eZ\\xb9\\x14\\x95\\x8f\\x1c\\x98\\xabq\\xcb\\xd2\\x98\\x1b\\x11\\xc9V\\xa3\\x93\\xde\\xb2c\\x97\\xde\\xad\\xc3.@\\xcf\\x14\\xc4i\\xa3T\\xca\\xd5J7\\xab\\n\\xdd\\xe9\\x88\\xb4\\xa6\\xa4\\x15]O\\x152\\x9a`I\\xd4\\xd3\\x87Z`\\xe6\\x9c(\\x10\\xea_jh4\\xea\\x04\\x03\\xa7\\x14\\xa2\\x81\\xd6\\x8e\\xf4\\x00\\xb5\\xf2f\\xabo\\xf6Mb\\xfa\\xdb\\x18\\xf2\\xae$\\x8f\\xf2b+\\xeb1_0x\\xe2\\x0f\\xb3x\\xe7Z\\x8f\\x18\\xcd\\xdb\\xbf\\xfd\\xf4w\\x7fZ\\xa8\\x89\\x9e\\xefIJi\\xb4\\x00RQE\\x03\\nJ3HM \\x02h\\xa44\\x94\\x80vi(\\xedI@\\xc4r\\x02\\x9c\\xf4\\xad\\xad\\x16M\\xfad\\x03\\xba\\xa0S\\xf8qX\\xad\\xca\\xd5\\xaf\\nK#XL\\xb2\\x8eR\\xe2E\\x1f@x\\xa4\\xc6\\x8e\\x88QH\\x0f\\x14\\n\\x04\\x14\\xbdh\\xa4\\xa0\\x05\\xa2\\x9a}\\xa9Oj\\x00JC\\xd2\\x974\\xdeI\\x00P\\x00\\xaa\\\\\\xe0U\\x95@\\x17\\x00b\\x98\\xbbP\\x01\\x9f\\xa9\\xa9\\x04\\x8b\\x9f\\xbc(\\x03\\x9a\\xf1\\x8e\\x91\\xfd\\xab\\xa1\\xcf\\x02\\x0c\\xc8\\x06\\xe4\\xfa\\x8e\\x95\\xc9x/F\\xd2\\xee\\xf4c5\\xf5\\xa4^dlU\\x99\\xd7\\x04c\\xd6\\xbd,\\x80\\xc1\\x87Z\\xe5\\xde\\xd5V{\\xfbI4\\xf5\\x8a\\xce\\\\\\xb1\\x93\\x7f\\x12\\x13\\xd7\\x8e\\xd4\\xd0\\x99\\x9d{<v7\\x10\\xc7\\xa6i\\x90\\xcbc*\\x915\\xca\\xb8\\x01Gz\\xa0 \\xd2.m\\xc5\\xa6\\x9br\\xd6\\xae\\xacYr\\xc7\\x04\\xd3\\xb4\\xfb\\xcbq\\x1c\\x9a\\x14\\xd0\\x0bx\\x89*\\x85{V.\\xa3\\xa1\\xdeXH\\xd8\\x8c\\xc9\\x16~Y\\x13\\x9ab4\\xd9\\xa5\\xd3&K}Y#\\x9e\\x198\\x12c\\'\\xf3\\xa9\\xb4]:H\\xf5\\x89#0\\xef\\xb2\\x938,8\\xc7jK7K\\xed4YjX7\\x04\\x13n\\x8cp\\xcd\\x8a\\xdc\\xd1\\xb4\\xc9\\xb5\\r\\x1e\\xdd/-\\xe6\\xb3x\\x9b!\\x04\\x9c\\xf1\\xeaE\\x00_\\x1e\\x1e\\xb5\\x8a\\x19\\xbe\\xc8>\\xcf,\\x8b\\x8f1:\\xaf\\xd2\\xaeY\\xda%\\xbc\\x11\\xc74\\x9et\\x881\\xe60\\xe4\\xd5\\xc2\\x9b#\\xc6{W\\x98\\xc9\\x16\\xb3w\\xe3]B\\xd6\\xcfP\\x96\\x05L8\\x07\\x95\\xe4\\x0e\\xd4\\x86z\\x82\\xe3\\x1c~\\x15\\xc7x\\xd3G\\x9bV\\xba\\xd3\"T-\\x10\\x9c\\x99\\x0f\\xa0\\xc5lh\\xb6\\xfa\\xbd\\xb8\\xd9\\xa8\\\\E0\\xc7\\xdeE \\xd6\\xd9Py#8\\xa0\\x0en\\xdb\\xc1\\xbal\\x12\\xac\\xd0\\xc6\\xd0H9\\xcclV\\xba4M\\xaa\\x17\\xb0\\xa7R\\xd0\\x02\\x00)h\\xa2\\x81\\x85\\x18\\xa3\\xb5\\x14\\x00c\\x8a^\\xd4b\\x8cP\\x01F)h\\xa0\\x04\\xc5&)\\xd4P\\x03qF)\\xd4\\x98\\xa0\\x06\\xe2\\x90\\xd3\\xcd%\\x004\\x8c\\xd2m\\xf4\\x02\\x9d\\x8aJ\\x00\\xcd\\xd5\\xac\\'\\xd4-\\xbc\\x98\\xae\\xe4\\xb7\\xcf\\xdex\\xf1\\xbb\\x1e\\xc7\\xb5y\\xef\\x89|\\x184\\xcb8\\xefm\\xe5\\x9ey\\x92e.\\xd26\\xe2A5\\xea\\x95\\x1c\\xd0G2l\\x91C)\\xecG\\x14\\t\\xa2\\xb6\\x9f\\x9f\\xb1\\xc6O\\xf7EM$(\\xfc\\x903O G\\x1f\\x03\\x81\\xe9\\\\\\x86\\xab\\xe2\\xadF\\t\\x1d,\\xf4k\\x99\\x14\\x7f\\xcbG\\x18S@\\x1a\\xb1h[\\x96\\xe1/\\'k\\x94\\x92B\\xca\\x1f\\xf8\\x07\\xa0\\xac\\x8f\\x12if\\r5`\\xb0\\xb7\\xf9Y\\xbep\\x83\\x9cT\\x9e\\x0e\\xf1\\x15\\xe6\\xbc\\x97\\x12\\\\\\xc6\\x91\\x84}\\xaa\\x16\\xb6\\xae\\xf4\\xb6\\x9e\\xfe+\\xcf\\xb4J\\xa25#\\xcaS\\xf2\\xb7\\xd6\\x808\\x96\\x9f\\xfb2\\xd2\\x0b+h\\xd4\\xdfH>bG+S[\\xe9\\xa9\\xa7\\xb1\\xbb\\xd5\\xee\\xb7\\x12\\x08\\xd9\\xbb9\\xcdKg\\x1c\\x12\\xea\\xb7\\xd7\\xf3\\xc1,O\\x13\\x90\\x9ew\\x01\\xbd\\xc5sW\\xf7\\x177\\xd7\\xec\\xd2\\x07w\\'\\x01\\x07jb:\\x0b}F=0\\xc3\\x07\\x87\\xec<\\xcbi\\x1f\\xf7\\xb8\\'*O|\\x1a\\xbby\\xe1\\xc6\\xd5\\x8b2\\xebWJ\\xfd\\xd08\\xc0\\xfc\\x05R\\xd2m\\xbf\\xb1,\\xa4\\xbe\\xbd\\xca\\xbb.\\x16:\\x9b\\xc3b\\xde\\xde;\\xfdV(%\\x0f!,Wql\\xfd\\x05\\x00r\\x8f\\xa3Mc\\xe3K[\\x01u,\\xb8!\\xcb1\\xeb^\\xc7h\\xed\\x12\\xa9\\xc9\\xc8\\x15\\xcbi\\xfa_\\xf6\\x8e\\xbb\\xfd\\xb9$l\\x81\\xa2\\n\\x88\\xddG\\xaek\\xab\\n\\x00\\xa9cEmwF\\x8bV\\xb52\\xc6\\x02\\xce\\x83 \\x8f\\xf3\\xd2\\xbc\\xfaH\\xe4\\xb7\\x99\\xa2\\x91v\\xba\\x9c\\x10k\\xd3\\xe2\\x94\\xc6\\xe0\\x8f\\xc6\\xb1|O\\xa1\\x8b\\xb8\\xbe\\xd9l\\xbf\\xbcQ\\xc8\\x1d\\xc7\\xa5KE\\xa6q\\xa8\\xd5b7\\xaa*H8=EN\\x8dRQ\\xa5\\x14\\x95z):VDo\\xd2\\xae\\xc5%P\\x8dh\\xa4\\xe9\\xcd[\\x8d\\xf8\\x15\\x97\\x14\\x95v\\'\\xa6#A\\x1b\\xd6\\xa6V\\xaaq\\xbejtjb,\\x83\\xcdH:T\\n\\xc2\\xa4\\x07\\xa51\\x12\\x8aZh<qN\\x074\\x00\\xb4\\xb4\\xdc\\xd2\\xd0!q_:|U\\xb7\\xf2>!_\\xb68\\x95\"\\x90\\x7f\\xdf\\x00\\x7f0k\\xe8\\xbe\\xb5\\xe1\\x1f\\x1am\\xfc\\xbf\\x17\\xda\\xcc\\x07\\x12\\xd9.~\\xa1\\xd8\\x7f,U!3\\xd3\\x8d!\\xa54\\xd3@\\x05%\\x14P1(\\xa2\\x92\\x90\\x08M%\\x07\\xad\\x19\\xa0\\x05\\xa4\\xa34\\x94\\x86.j\\xf6\\x806\\xad\\xca\\x8f\\xf9\\xed\\x9f\\xcdA\\xaa\\x15wDb.\\xaeS\\xd9[\\xf3\\xc8\\xfe\\x941\\x9b\\xd4\\xa2\\x9bKHC\\xb1\\x81E\\'Z\\r\\x03\\x0f\\xad!\\xc6ii(\\x10\\x95\"G\\xc1\\'\\xad65\\xde\\xde\\xc2\\xad\\x01\\x81@\\x1ek\\xe3\\xeb\\x8dgM\\xb8\\x8e\\xe6\\xd2\\xeeH\\xedX\\x05`\\xbf\\xc2it\\xad\\x17^\\xbe\\xb4\\x8e\\xf2M~S\\x1b\\x00\\xc0(\\xed]\\xd6\\xad\\xa5[\\xea\\xb6\\x12\\xda\\xdc&Q\\xc6>\\x9e\\xf5\\xca\\x18\\xf5-\\x07G\\x8fM\\xb2\\x92\\t\\xae\\x95\\xf0\\x81\\xdb\\x19L\\xf5\\xa6#GH\\xd4\\xed\\xa2\\x86\\xe27\\xbd\\x96f\\x80\\xe2G\\x95q\\x8f\\xd2\\xb2<G\\x7fg\\xab\\xda\\x81ix\\xbej\\x1c\\x84\\xdd\\x8d\\xd4\\xcdV\\xe7ZQ\\xb0\\xd9C$\\x0e\\x00`\\x9c\\xfdk\\x1f\\xc9\\xd3nQ\\xe0h\\x1a\\xd2\\xf0\\x0f\\x97q8&\\x81\\x0c7\\x96\\x93\\xdaG\\x06\\xa1\\x04\\xab<c\\x0b*u\\xadM*\\xde\\xfa\\x02\\x8e\\x97\\xd1\\xb42\\x83\\xe5\\xac\\xc7\\x92{U\\xdf\\r\\xdb<\\x90\\x18u+u!N\\x11\\xa4\\x03&\\xbai4\\xab)\\x8c.\\xf0!0\\x9c\\xc7\\xc7\\xdd>\\xd4\\x05\\x8cM7G\\x90\\xc8/\\xf5\\x88\\xad\\x9a\\xf6<\\x85\\x92 p\\x17\\xf1\\xa9b\\xf1\\x96\\x86\\\\\\xc6\\xb7\\xd1\\x82\\xa7\\x07<V\\xfb\\xc6\\x0cek\\xcf\\xb4\\xcf\\n\\xc4\\x9e+\\xd4\\x12\\xe6\\xd5^\\x07>de\\x87\\x1c\\x9a.3\\xbb\\xb5\\xbe\\xb6\\xbf\\x8f}\\xbc\\xc9\"\\xfa\\xa9\\xcd14\\xbbd\\xd4\\x1e\\xf5S\\x13:\\x85c\\xea\\x05:\\xcbL\\xb4\\xb1R-\\xe0H\\xc1\\xeb\\xb5q\\x9a\\xb8p(\\x01\\x00\\xa2\\x97\"\\x9ah\\x18\\x99\\xa7S\\x019\\xa9\\x00\\xa0\\x02\\x8aZJ\\x00)qE-\\x00/jJ(\\xa0\\x02\\x8cQE\\x00\\x14QK@\\tIN#4b\\x80\\x1bF)M\\x14\\x00\\x94\\x98\\xa5\\xa2\\x80\\x1b\\x8aJ}&3@\\r\\xc6sU\\xe7\\x81e\\x8d\\x97\\x03\\x91\\x8a\\xb2E&(\\x03\\x9b\\xf0\\xce\\x80th\\xe7W\\xc12J\\xcf\\xf8g\\x8a\\xe8\\x89Z\\x18\\x1fJ\\xe5\\xf5\\x81\\xe2P\\xecld\\xb4\\t\\xd88&\\x8045\\xbd\\x12\\xd3Y\\xb5\\x10O\\xbbh`\\xdf#`\\xe4W3\\x14\\xb7Q\\xc7p\\xb0h\\xb2G$-\\xe5\\xc6\\xf2\\x0e\\\\z\\xe6\\xa3\\xf0\\x96\\xaf\\xadj:\\xdd\\xdd\\xbd\\xf4\\xaa\\xc9nJ6\\xc5\\xc0\\xdd\\x9a\\xecu->[\\xc8\\x91a\\xb9x\\n\\xb0bS\\xb8\\xf4\\xa0G\\x06\\xd6\\xf7Wn\\x0e\\xb3x\\x90\\xaa\\x9c\\xf9y\\x19\\xfd)\\xd6\\xf7\\x92\\xcd\\xadEo\\xa7\\xb9Kh\\xc8\\x18\\x1d\\x08\\xeek\\xa5\\xd4|/gs)\\xb9\\x9d\\x9b8\\xf9\\xb9\\xaeE\\x16K\\x9b\\xe9-t\\xc5\\xf2b^\\xaf\\x9e\\xbfS@\\x8fI\\x82D\\xd89\\x19\\xc75N\\xfb]\\xb0\\xd3\\xc7\\xfaM\\xcaG\\xf55\\xc7\\xdaO\\x1e\\x8ftZ\\xebP2\\x02\\n\\x94\\\\\\x9a\\xd0\\xb3\\xb9\\xd0-\\xc4V\\xb2Hd7lJ,\\xa0\\xb14Xw4\\x17\\xc6\\x9a)n/\\xa3\\xfa\\xe6\\xba\\x1d3R\\xb6\\xbf\\x870\\xca\\xb2B\\xfcnS\\x91^_\\xe3\\xad\\x0e\\xc2\\xce;e\\xb0\\xb5U\\xb8\\xb8\\x93h\\xdb\\xc7\\x1fJ\\xee<3\\xa6\\x7fe\\xe9\\x10@:\\xaa\\xf3\\xeei\\x022\\xfcS\\xa3\\x1b\\x1b\\xa3u\\x12\\xfe\\xe9\\xcf\\xcc\\x07cX\\x08\\xd5\\xeaw\\x16\\xf1\\xea6\\x0f\\x04\\x8b\\x93\\x8c~\\x15\\xe67\\xb6\\x92X^I\\x04\\x83\\x95<\\x1fQP\\xd1\\xa2c\\xd1\\xea\\xd4o\\xefY\\xe8\\xd5f\\'\\xa0f\\xa4/W\\xe2z\\xc9\\x89\\xea\\xf4OM\\x08\\xd4\\x89\\xb3\\xe9V\\xa3\"\\xb3\\xe2z\\xb9\\x1bS$\\xb8\\x98\\xc5H*\\x04=*p\\xd4\\xc0\\x90S\\x850\\x1a}1\\x0bK\\xda\\x92\\x8a\\x048\\x1ek\\xc7>9[\\xe2\\xe3E\\xb9\\x03\\xef,\\xb1\\x93\\xf4*G\\xf35\\xecc\\x8a\\xf3\\x1f\\x8d\\xd6\\xfb\\xbc;\\xa6\\xdc\\xe3\\xfd]\\xde\\xcf\\xfb\\xe9\\t\\xff\\x00\\xd9i\\xad\\xc4\\xce\\x96\\x9ai\\xc6\\x9ai\\x80\\x86\\x83E%\\x00!\\xa4\\xa54\\xd3@\\xc0\\xd2QHi\\x00\\x1a)\\r\\x14\\x86-Y\\xd2\\x1bn\\xa6\\xe3\\xfb\\xd1\\x7f#\\xff\\x00\\xd7\\xaa\\xb5-\\x83\\xec\\xd5a?\\xdeV_\\xe4\\x7f\\xa5\\x0c\\x0e\\x9f4\\xb4\\x80\\x82)sH\\x05\\xa4$p;\\x9a\\x0eOzo\\x7fz\\x06;<\\xd2\\x1c\\xe7\\x03\\xa9\\xa2\\xa4\\x857\\xb6h\\x11N\\xf3W\\xb0\\xd2T\\x1b\\xcb\\x98\\xe1\\xc8\\xe3y\\xc6k&O\\x1fh\\xa2M\\x91\\xcc\\xd2\\x9fH\\x90\\xb5Y\\xf1_\\x86\\xa2\\xd7\\xac\\x0cg\\xe5\\x999\\x8d\\xfd\\x0f\\xf8W3\\xe0Kh\\xed\\xaent\\xfb\\xdbDK\\xc8\\x1b\\xa9^Xz\\xd3\\x15\\xce\\xc1u\\xb3q\\xa7Mq\\x05\\xac\\xe5\\x91\\tTt([\\xd8f\\xb8\\xa6\\xb6:\\xba\\xc9\\xac\\x08Z\\rWf\\xcf%\\xa4\\xce\\xde};\\x1a\\xea5\\xc8\\xe5\\xb3\\x94_-\\xcc\\xbeLhsn\\x80a\\xbd\\xeb\\x8bT\\x17\\xd3\\xbd\\xe6\\x9f9\\x86p\\xd9hY\\xba\\xfe4\\x01\\x9a\\xba\\x96\\xa7c;\\x03p\\xe8\\xe0\\xf2\\x8f\\xde\\xb7!kO\\x11[\\x19.\\x97\\xc9\\xb9\\x8f\\x85\\x91N7\\x1aIon\\xa5\\x91b\\xbd\\xd2\\x16a\\x8e]FO\\xe7W\\x13I\\x87P\\xd4\\xa0\\xb6\\x93H\\x92;X@\\x95&\\x0f\\x81\\xbb\\xd0\\x8ab/\\xe8\\xf6m\\xa8\\xdbA&\\xa1g$2Z\\xbf\\xee\\xf77\\'\\x1d\\r7R\\xf1\\xc6\\x9f\\xa5\\xdf\\xbd\\x8c\\xa99\\x95:\\x85L\\xe6\\xba\\x98\\xe3\\x0b\\x18\\\\c\\x02\\xb9/\\x10\\xf8rK\\x8dj\\xc7T\\xb6@\\xcf\\x1b\\xed\\x95\\x7f\\xbc\\xbf\\xfdjC5t\\x8f\\x11E\\xab\\x1cEop\\x83\\xd6H\\xca\\x8a\\xda\\x083\\x9c\\x0c\\xd4V\\xf0\\xaaF0\\xa0U\\x80(\\x00\\xedLa\\x9ay\\xe2\\x9b\\xde\\x81\\x89M4\\xe3I@\\x08:\\xd4\\x82\\x90\\nZ\\x00ZJZ(\\x01h\\xa2\\x92\\x80\\x16\\x8a3\\xc5%\\x00-5\\xdb\\nMD\\xd71,\\xe2\\x12\\xeb\\xe6\\x11\\x90\\xb9\\xe7\\x1e\\xb4N\\xdbbf\\xf4\\x14\\x01\\x91\\xa1j\\x93j\\x17\\x17\\xc2\\\\m\\x86\\xe1\\xa3O\\xa0\\xab\\x17\\xda\\xd2Zj\\x16\\xd6J\\xa5\\xe5\\x9d\\xba\\x0f\\xe1Q\\xde\\xb3\\xbc*\\x83\\xec\\x12\\xdc\\x01\\x81,\\xae\\xe3\\xe9\\x9a\\x8bM\\x8cj>%\\xbb\\xbe<\\xc7\\x01\\xf2S\\xea:\\xfe\\xb4\\x08\\xea\\xd0\\x92)\\xddi\\xa3\\xa5:\\x81\\xa0\\xa2\\x8e\\xb4P\\x01F8\\xa2\\x96\\x80\\x19\\xd2\\x8c\\xd2\\xfbRb\\x80\\ni\\x14\\xe3E\\x00G\\xd6\\x99\"oR1R\\x1a(\\x03\\x0fD\\xd0c\\xd2<\\xf6\\x07t\\x93H]\\x9b\\xd75\\xb5\\x91\\x8al\\xbb\\xfc\\xb6\\xf2\\xf1\\xbf\\x1cg\\xa5q:\\xc6\\xb5\\xe2M/\\xcc\\x99\\xac\\xad\\x9e\\xdd\\x06K\\xab\\x9e\\x07\\xe3@\\xb6:]`\\xde\\xf9\\n\\xb6QG!f\\x01\\xc3\\x9c\\r\\xbd\\xeb\\x90\\xd5 \\x9a;\\xa3g\\xa5@\\x03?\\xfa\\xe7N\\xde\\xde\\xd5\\xb7\\xe1]v\\xef_\\xb2k\\x89\\xed\\x84K\\x9c.\\x0es\\xefTu;3\\xe1\\xfb\\xa7\\xba\\xb0\\xb1\\x9a\\xe2K\\xd9\\x7fz\\xca\\xc4\\xec\\xf7\\xc5\\x00e\\xc9o\\xa3iQ\"\\xdef{\\x8e\\xa5A\\xcf4\\xf5\\xd6\\xed\\xeeae\\xb3\\xd3\\xa2k\\xb8T\\xb4\\n\\xe3\\xae;\\n\\xcf\\x9f\\xc3\\xda\\x9c\\x97d\\xac`\\x82s\\xbd\\x8f\\x15\\xa3mei\\xe1\\xd5[\\xcb\\xc9<\\xc9\\xff\\x00\\x85V\\x98\\x8d\\x9d>\\xc9\\xf5f\\xb3\\xbf\\xd4\\xa2\\xf2\\xae#O\\xf5\\x07\\xf8Mt\\xea\\xa1T\\x01\\xd2\\xb8\\xad*D\\xb9\\xbe\\x9b^\\x9e\\xe2X`\\x0b\\xb7\\xcbv\\xf9\\x00\\xf5\\xad{\\x9f\\x15\\xe9\\x96e|\\xd9\\xca\\xabck\\x1589\\xf44\\x98\\xce\\x92\\x19\\n8#\\xb5`\\xf8\\xc7K\\x12\\xc0/a_\\x9998\\xee\\xb5%\\xa7\\x88\\xb4\\xdb\\xcc\\x18n\\xe2l\\xf6\\r\\xcdn\\xa6\\xcb\\xdb\\'\\x88\\xe1\\x81^=\\xeaZ)3\\xc9\\xd5\\xaa\\xc4mK\\xa9\\xda5\\x86\\xa3-\\xb9\\x1c\\x03\\x95\\xfaT(\\xd5\\x05\\x9a15^\\x85\\xeb.&\\xab\\xb0\\xb7Jb5bn\\x95v&\\xac\\xc8^\\xae\\xc4\\xd5D\\x9aQ\\xb5N\\xa75N6\\xe2\\xad!\\xe2\\x98\\x13\\xa9\\xa7\\x8a\\x8dM<S\\x10\\xf1J)\\xa2\\x9c(\\x01k\\x85\\xf8\\xbdo\\xe7x\\x06i:\\xf9\\x17\\x11\\xc9\\xfa\\xed\\xff\\x00\\xd9\\xab\\xba\\xcds?\\x11-\\xfe\\xd3\\xe0\\ra1\\x9cB\\x1f\\xfe\\xf9`\\xdf\\xd2\\x9a\\x10\\xc3M4\\xb4\\x86\\x98\\x84\\xa6\\x9aq\\xe9M4\\x00\\x84\\xd2Pi\\r\\x03\\x10\\x9aL\\xd1IH\\x00\\xd2QFi\\x0c3N\\x85\\xb6\\xdf\\xdb6q\\x891\\xf9\\x82?\\xad2\\x9a\\xcd\\xb5\\xe2o\\xee\\xca\\x87\\xf5\\x14\\x86u\\xe9\\xca\\xd3\\xc5D\\x9c\\xa8\\xa9\\x01\\xa0B\\xf6\\xf5\\xa4\\xc5-\\x1d(\\x01\\x0ez\\x0e\\xf5r%\\n\\x95U9|\\xf6\\x15\\xcdj\\xdf\\x10t\\xfd2\\xe5\\xed\\x969f\\x99>R\\xaa\\xbd\\xe8\\x03\\xb1 w\\xac\\x8dQ\\xa2\\xb2d\\xbcK\\x16\\x9el\\xec\\x0607\\x00\\x7f\\xa5a\\xe9\\x9a\\xf7\\x885\\x89\\x04\\x91\\xe9\\xf1\\xdb[\\x9f\\xe2\\x9b$\\x9f\\xc2\\xa5\\xd4\\xae\\xaf&\\xd4|\\xa4\\xd4\\xad\\xa2\\xb7\\x8e?\\xdf\"\\xfd\\xf0}}\\xa9\\x88\\x8b_\\xd7n`\\xb9Ha\\xb12\\xefL\\x9c\\xf3\\\\|\\x82\\t/\\xf1s\\x0b\\xd93\\xf2Jt\\xfc\\xabIt\\xe9$\\xbaw\\xb7\\xd7\\x15\\xf2\\x7f\\x89\\xf9\\xa6\\xca\\x97\\xa6t\\xb5\\xd4\\xedL\\xf0\\x83\\xc4\\xea9\\x1f\\x8d\\x02:\\x1d\\x1b\\xc3\\xcbm\\x99\\xd2\\xf2ID\\x8b\\x80I\\xfdj\\xf8h\\xbc?\\xa7I5\\xe5\\xd3\\xbchr\\xd2I\\xc9\\x19>\\xd4\\xcd;\\xed\\x0b2%\\xbf\\x90t\\xf0\\x80)\\x04\\x96\\xcf\\xf2\\xad;\\xdbH\\xef-$\\x82e\\x0c\\x8e\\xa4\\x10{\\x8a\\x06sI\\xe3\\xed2y\\x02[-\\xc5\\xc3\\x13\\x8f\\xdd\\xc4Mt\\xb6\\x93\\xfd\\xaa\\x05\\x94\\xc6\\xe9\\xb8gk\\x8c\\x11\\\\\\x8f\\x86\\xf4\\x19\\xf4=V\\xe6\\xd5\\xa2\\x0fl\\xc7|Rc\\xa7\\xb5v\\xc8\\x00\\x00c\\x14\\x02\\x17\\xa5-%\\x06\\x81\\x8d&\\x9b\\x9aRi\\xbd\\xe8\\x01\\xd4\\x01H\\x0f\\x14\\xa2\\x80\\x1c(\\xa0R\\xd0\\x02R\\xd2v\\xa4\\xdc?\\x1a\\x06.qH\\x18\\x13\\xd6\\xa9\\xeaW\\xa9ee,\\xeep\\xb1\\xa9c\\\\\\xcf\\x815\\x89\\xb5K\\x19\\xa4\\x95\\x99\\xcf\\x9c\\xc4\\x169\\xe0\\x9c\\xd0+\\x9d\\x99 SY\\x80S\\xcd`x\\xb7X:V\\x89,\\xa8\\xfb%8T>\\xe6\\xad[_\\x07\\xd2\\x12\\xe2C\\xff\\x00,\\xf7\\x13\\xf8P\\x171\\xadn~\\xdd\\xe3{\\xac\\x1c\\x8bh\\x84|z\\x93\\x9a\\xd8\\xf1\\x05\\xe0\\xb3\\xd1\\xa7}\\xd8b\\xbbW\\xeax\\x15\\xc5\\xf8\\x1a\\xec]\\xeb\\xfa\\xb5\\xc2\\x93\\xb6IK\\x0f\\xcc\\xd6\\x96\\xbfv\\xba\\xa7\\x89,t\\x94`V&\\xf3\\xa5\\x1fN\\x82\\x81\\x1b\\xf6j4\\xef\\x0f\\xaex\\xf2\\xe2\\xc9\\xfc\\xaa?\\n\\xc7\\x8d&9X|\\xd2\\xe6C\\xf8\\xf3Qx\\xaeai\\xe1\\x8b\\x90\\x0e\\tM\\x83\\x9f^*\\xde\\x89\\x8b}\\x12\\xdc\\x13\\xf7c\\x1f\\xca\\x80$\\xbc\\xd6\\x05\\xbe\\xabm`\\x8b\\xbaI\\xb2\\xc7\\xfd\\x95\\x1d\\xebUNEpZ\\x1d\\xd7\\xf6\\xc7\\x8co\\xae\\xc1\\xdd\\x14#\\xc9F\\xed\\xef]\\xe2\\x90\\x00\\x14\\r\\x0f\\x14\\xa2\\x9b\\x9a\\\\\\xd0\\x03\\xa8\\xa4\\x14\\xb4\\x00Ph\\xefE\\x03\\x1ax\\xa4\\xa7c\\x8aLP!\\xad\\xd2\\x99RSH\\xa0\\x06\\x9e\\xb5\\x87\\xe2].m[Lk8\\x8e\\xd1+\\x00\\xed\\xe8\\xb9\\xe6\\xb7\\x08\\xa44\\x01GK\\xd3b\\xd3l\\xe3\\xb6\\x89@DP\\x05;T\\xb3k\\xbb\\x19`\\x8eS\\x0b:\\xed\\x12/U\\xf7\\xac\\xfd[\\xc4\\x96\\xfa4\\x98\\xba\\x86q\\x19\\xff\\x00\\x96\\x812\\xbf\\x98\\xa4\\xd3\\xfcW\\xa4\\xeaN\"\\x82\\xea6\\x91\\xba)84\\x01\\xce\\xdd\\xe9\\xb7?d\\xf2\\x13Y.-\\xd7\\x12\\x92y\\xfcqY\\xd0\\xa6\\x96\\x83\\xce\\xb9\\xbck\\x96Q\\xc2\\x1e\\xf5\\xdf\\xff\\x00d\\xd9\\x019XPy\\xfc\\xc9\\x81\\xf7\\xab\\x88\\xd7\\xa0\\xd2\\xf4\\xf9\\xfc\\x8bkc%\\xc1\\xe3\\x19$\\n\\te\\xbd\\x02i\\xb5Y%\\x82[t\\xfb\\x01\\x18\\xd8W\\x81\\xed]M\\xc6\\x93e-\\x90\\x82H#h\\x80\\xc0R\\xbc\\n\\xe2\\xad\\xee\\xb5\\xdb$B\\x96\\xe1c\\xe3\\n\\x17\\x15\\xd3O\\xa8j,\\x96\\xb1\\xc5k\\xb8J1#\\xee\\xff\\x00W\\xf8P4y\\xc5\\xce\\x85\\x05\\xe7\\x8b\\xcd\\x96\\x92\\x8d\\x1cP\\xb7\\xef\\\\\\x13\\x80{\\xe2\\xbd\\x87J\\x8b\\xecp\\xc4\\x80\\x93\\xb4\\x01\\xcde\\xe8\\xba\\r\\xbe\\x95\\x1b\\x14\\x05\\xa4\\x91\\xb7\\xbb\\x9e\\xacMl\\x8f\\x94\\xf1I\\x82G?\\xe3m<mK\\xc4\\x1fw\\x00\\xfd\\x0fJ\\xe3\\xd0\\xf3^\\xa3\\xa9[-\\xf6\\x91$ds\\xb4\\xaf\\xf8W\\x96\\x951\\xc8\\xc8\\xddT\\x90j\\x19\\xa4Kq\\xb5\\\\\\x89\\xab:3W\"j\\x06i\\xc4\\xd9\\xab\\xf15e\\xc4\\xd5z\\x16\\xe9L\\x9b\\x1aq7J\\xb7\\x1bV|F\\xae\\xc6\\xd5B-)\\xe2\\xa5\\x1c\\xd4\\x08jU4\\x01 \\xa7SsN\\x06\\x98\\x80u\\xac\\xef\\x11\\xdb\\xfd\\xab\\xc3\\x1a\\xad\\xbe2d\\xb3\\x95G\\xd4\\xa1\\xad\\x1aI\\x11d\\x8d\\xa3nU\\x81\\x06\\x81\\x1c\\xb9\\xa44\\xeaa\\xaa\\x01\\r4\\xd3\\xa9\\xa6\\x81\\x08i\\xa7\\x9aq\\xa6\\x9a\\x00JJ))1\\x81\\xa4\\xcd\\x19\\xa6\\xd2\\x18\\xec\\xd47\\x07\\x109\\x1d@\\xc8\\xa9)\\xb2\\x0c\\xa3\\x0fQ\\x8aC:\\xd8[tJGp*Q\\x8a\\xa5\\xa79\\x93O\\xb7n\\xb9\\x8dO\\xe9V\\xf3@\\x0e\\xcd;\\x8cg\\xd2\\xa3\\xa5\\xea@\\xf54\\x08\\xb3n\\x99L\\x9a\\xe6<U\\xe0\\xd8u\\x9476\\xd8\\x86\\xf5yY\\x07\\x7fc]t`\\x08\\xa9X\\x8cu\\xa0G\\'\\xa1^\\xdf\\xc1\\xa4I\\x05\\xed\\xab\\x1b\\xcbu\\xc1Q\\xff\\x00-1\\xd3\\x07\\xde\\xb9\\xf6\\x82\\xc3Q\\x82\\xe6\\x7f(i\\xfa\\x8d\\xcbfH\\xe4|\\x93\\x8a\\xed\\xf5K[\\xa9\\xc4&\\xd2\\xe4C\\xb5\\xc39\\xdb\\x9d\\xcb\\xe9\\\\\\x16\\xb6\\xf6\\x17Z\\xb3\\xc5<R[>q\\xe6\\x8e\\xe7\\xd4\\x8a`dI\\xe1\\xedR\\tI\\x103\\xaer\\xae\\x86\\xb7,\\xce\\xaf\\xa7\\xe9E$\\xb3\\x92\\xe8J\\xe16\\x16\\xe5T\\xf55U\\xd1\\xe2\\xd9\\x14z\\xf0np\\x14g\\x8a\\xda\\x8e\\xc69o\\xacm\\xaeuK\\x83s\\x16d\\x08\\x87\\x01\\xc7\\xbf\\x1c\\xd0#kK\\xb5\\xb4\\xd14\\xc4\\x8d\\x00\\x86%\\x19\\xc37L\\xd4O\\xe2\\xdd$N [\\x91$\\x87\\x80\\xb1\\xa9c\\xfaT\\x9a\\xf6\\x87\\x0e\\xb5\\xa5\\xbd\\xa4\\xd9\\x00\\xf2\\xac:\\xa9\\xeck\\x9a\\xf0v\\x95&\\x8fu5\\x8d\\xdd\\xa2\\xf9\\x8aII\\xc2\\xf0\\xe3\\xeb@\\xce\\xea\\x16\\x12\\xc6\\x1c\\x0223\\xc8\\xc5K\\xd2\\x91F\\x00\\xa5&\\x81\\x89Hh\\xa6\\x9e\\x94\\x00\\x87\\xa56\\x95\\xb8\\xa4\\x14\\x00\\xee\\xf4\\xe1\\xd2\\x99N\\x1d(\\x01i{RQ\\x9a\\x00F\\xce8\\xae+Z\\x97\\xc5v\\x13<\\x96K\\r\\xdc$\\xe4.0\\xc0WQ\\xa9j\\x96\\xfa\\\\\"[\\x82\\xc13\\x8c\\x85\\'\\x1f\\\\t\\xac\\xa5\\xf1\\x86\\x89!\\xc1\\xbd\\x88}N(\\x11\\xe7:\\xe7\\x8c5{\\xad:k\\x1b\\xfb#\\x01\\x90c$\\x11]/\\xc3\\x01\\x8d\\x1eS\\x8cfS\\xcdu\\x12\\r\\x1fV\\x8c\\x07\\x10L\\xac8\\xce\\rM\\xa6\\xe9v:\\\\-\\x15\\x94k\\x1a\\x13\\xbb\\x00\\xf7\\xa0,p\\x7f\\x14o\\x1b\\xfd\\n\\xd5_\\x82\\xc5\\xd8~\\x83\\xfa\\xd6\\xce\\xa7u\\xf6_\\x01\\xbb!\\xe4\\xdb\\x85\\x07>\\xa3\\x15\\xc7|J\\x99\\xdf\\xc4q\\xa6\\xec\\xaaD\\x08\\x18\\xe8r\\x7f\\xfa\\xd5w\\xc4\\xd7\\x0e|\\t\\xa7.I\\xdeWw\\xe5@\\x88|\\t\\xa8\\xc7\\xa7i\\xfa\\x95\\xd4\\xa7\\n\\x98\\'\\xf2\\xab\\xbe\\x02\\x92MO\\xc4W\\xfa\\x94\\xab\\x92\\xe7\\x83\\xe9\\x93\\xd3\\xf9W\\x15\\x15\\xdbC\\xa0\\xcf\\n\\xf0f\\x94g\\x1e\\x80W\\xa1|1\\x84&\\x974\\xc4}\\xe9\\x0f\\xe5@\\x0f\\xf8\\x99\\xa8\\x04\\xb0\\xb6\\xb2S\\xf3K c\\xf4\\x15cW\\xd6?\\xb3<\\x16\\x84I\\x89\\xa4\\x88\"\\x1fr+\\x8d\\xf1\\xee\\xa1\\xfd\\xa1\\xe2o\"3\\xf2\\xc0\\x04c\\xeb\\xde\\xa9x\\x97Pk\\xbb\\x9b{$|\\xc3n\\x8a\\x80\\x0e\\xed\\x8eh\\x03\\xbd\\xf8m\\x17\\x97\\xa24\\xcc0]\\xc9\\xcf\\xadh\\xda\\xf8\\x82MG\\xc5\\xb2Y@\\xe3\\xec\\xf6\\xe9\\x86\\xc7\\xf17\\xff\\x00Z\\xa8\\x9b\\xb8|1\\xe0\\xa4 \\xe1\\xfc\\xbc =K\\x1a\\xce\\xf8gf\\xeenu\\t\\x0eL\\x8d\\x80\\x7f\\x9d\\x00zap\\x89\\x92p\\x00\\xaa:~\\xb1o\\xa9M:[\\x92\\xc2\\x17\\xd8[\\xb1>\\xd5\\x81\\xe3\\xbdx\\xe9:+\\xc7\\x13by\\xbeE\\xe7\\x91\\xeaj\\xb7\\xc3\\x98\\xfc\\xad\\x043\\x9f\\x9aF-\\xcfz\\x07s\\xbb\\x07\\x8ap\\xa8\\xd5\\x86:\\xd3\\xc1\\xa0b\\xd1E\\x14\\x0c)\\x0f\\x14\\xb4\\x87\\xad\\x02\\x12\\x90\\xd2\\xd3h\\x01\\xa4Rb\\x9dI@\\xcc\\xedT\\xc5\\x1d\\x84\\xd2K\\x18uU$\\x823\\x9fj\\xe3\\xbc!\\xe1w[\\xc95{\\xd8BM#\\x13\\x1c`` \\xae\\xfd\\x940\\xc1\\x00\\x8ahdN\\x01\\x02\\x81X\\xa9\\xa9\\xc5v\\xf6\\x12%\\x8c\\xa9\\x14\\xf8\\x1b]\\xd7 ~\\x15\\xc7\\xeb2\\xf970\\xb4\\x16\\xebq|\\x06\\x1d\\xd4d\\x03\\xf4\\xae\\xed\\xf0\\xc8y\\xae\\x12S\\x0e\\x8b\\xab\\xddX\\xd8\\xd9O\\xe6L\\x86o9\\xb2\\xcb\\xbb\\xd2\\x84&A\\xfd\\x99\\xaa\\xdeBe\\xbb\\xbe\\xf2Y\\xba!8\\xc5N\\xb6z\\xad\\x96\\x9c\\xff\\x00`\\xd4b\\x96m\\xc3\\xfda\\xe1Gz\\xe5n./\\xaeec3\\xcc\\xcd\\x9e\\x9c\\xd6\\xc6\\x8b\\xa4^]Cq\\x1c\\xe1\\xe1\\x82X\\xca\\xee\\'\\x06\\x98\\x8e\\xee\\xd6\\xf5\\x12\\xde!q4~a\\\\\\x9f\\x9b\\xad]Y\\x91\\xc6U\\x81\\x1e\\xa2\\xb8\\xcd\"\\xc3J\\xd54\\xb7\\xd3<\\xe6\\xb8kbP\\xc8\\xdc0>\\xc6\\xb9\\x8dF\\xe7V\\xf0\\x8e\\xaa\\xb6\\xd6\\xb7\\xff\\x00i\\x8d\\xcf\\xcb\\x13\\xfc\\xc4\\x0fCJ\\xc3\\xb9\\xec\\xf6\\xc7z\\xbc\\x7f\\xde\\x1c}k\\xcd\\xbcCk\\xf6]f`\\x06\\x03\\x9d\\xe3\\xf1\\xae\\xd3\\xc3\\xb7wS\\xda\\xc15\\xdcB9N\\x0b.zV\\'\\x8em\\xb6\\\\\\xc30\\x1e\\xaa\\x7f\\x9dL\\x8b\\x89\\xccFj\\xdcG\\x9a\\xa3\\x19\\xe6\\xad\\xc4zT\\x16\\xcd\\x18\\x8d^\\x84\\xf4\\xac\\xe8\\x8d^\\x84\\xd5\"M\\x18\\x8f\\x15v#\\x9a\\xcf\\x88\\xe7\\x15z3\\x8cS\\x11q*e\\xaa\\xf1\\xd5\\x854\\xc4<S\\xa9\\xa2\\x9c1LC\\x858sM\\x14\\xa2\\x81\\x1c\\xad!\\xa00e\\x0c\\xbd\\x08\\xc8\\xa45@!\\xa6\\x9aZC@\\x86\\x9ai\\xa7\\x1aa\\xa0\\x04\\xa44\\xb4\\xd2i\\x0cCFi\\r%!\\x8b\\x9aC\\xc8\\xa34\\x86\\x90\\xce\\x83Fl\\xe9p\\xfb\\x02?#\\x8a\\xd0\\xac\\xad\\r\\xb3a\\xb7\\xfb\\xae\\xc3\\xf5\\xcf\\xf5\\xadP(\\x01E,c\\xf7\\xa3\\x1d:\\xd3MMn\\xa0\\xca\\x7f*\\x00\\xe7\\xfcG\\xe3k}\\n_\\xb3y\\x12K>:\\x01\\x81\\xf9\\xd6v\\x93w\\xe2?\\x10H.$\\x94YY\\x9e@A\\x96#\\xeak\\xa8\\xd6\\xbc=e\\xad[\\x18\\xae\\xa2\\x0cq\\xf2\\xb0\\xea\\xbfCX\\x1a\\x1e\\x93\\xaa\\xf8v\\xe8\\xda\\xee\\xfbM\\x8b\\x1f\\x91\\xb3\\xca}i\\x92k\\x8db\\x08\\xe3\\xb9\\xb6\\x84\\xc9<\\xf6\\xab\\xf3\\x02\\x0eI\\xfa\\xd7\\x17\\xa8\\xde\\xea\\x1a\\xc9l\\xe9i\\xb4w+\\xcf\\xe7[\\x97\\x92\\xea\\xd7\\xd3]\\xc4bK\\x08\\xa3o\\x96b\\xc0\\xef\\x1f\\xd2\\xb1\\xbf\\xb3fBA\\xd7U\\xa5\\xea\\xa0?\\x1f\\xce\\x81\\x07\\x87F\\x975\\xd8\\xb7\\x9e\\xc0\\xa5\\xc0=I$W{\\x1cP\\xf0\\xc1F@\\xc6k\\x88\\xb27\\xfah\\x92\\xf2\\xf8E%\\xba\\xa9-\"\\x0c\\xb7\\xe1\\x8ek\\xa2\\xd2\\x12/\\xec\\xaf6\\xcd\\xe5+.]L\\xa4\\x92\\t\\xfa\\xd04k\\xbc\\xa8\\x9c\\xb3\\x00=\\xe9\\xb0\\xc9\\x14\\xd9h\\xd9[\\xdcs^[x\\xba\\x9b\\xf8\\x8d-<Cq2\\xdaH\\xdf\\xbb1\\x1d\\xb1\\xb7\\xa05\\xe9\\xbau\\xac\\x16\\x96\\xa9\\x1d\\xba\\x85\\x8c\\x0e\\x00\\xa0\\x0b\\x838\\xe2\\x83KM&\\x81\\x87Jon)i9\\xa0\\x065\\x00R\\xb5&h\\x00\\xe8i\\xc0\\xd5\\rG\\xed\\xbfg&\\xc4\\xc7\\xe6\\xe7\\xfeZt\\xac\\xb8\\xf5\\x8dR\\xd8b\\xf7Mc\\x8f\\xe3\\x85\\xb7\\x03\\xfdh\\x11\\xb3\\xa8\\xcfuo\\x00kh\\x04\\xcd\\x9eWv8\\xae~o\\x18}\\x88\\xe2\\xfbN\\xbb\\x87\\xfd\\xad\\x9b\\x97\\xf3\\x15}|Oc\\xc0\\x9b\\xcc\\x89\\x8fi#\"\\x91\\xf5\\xfd\\x16\\\\\\xab\\xdd\\xc3\\x9fBh\\x02\\x92x\\xd7B\\xbb\\x8f\\x0fu\\x1a\\xe7\\x82\\xb2qY7\\x9a?\\x85u\\xc6,\\x92\\xc2\\x927F\\x89\\xc2\\x9av\\xaba\\xe1\\x0b\\xe3\\x99\\xa5\\xb7G?\\xc4\\x8e\\x14\\xfe\\x95\\xc8j\\x9e\\x1a\\xd3\\xa2}\\xfav\\xb3\\x10$\\xfc\\xab#\\xff\\x00Q@\\x8bz\\x8f\\x825\\x1b\\x0c\\xc9\\xa4\\xde\\xb4\\xa0t@\\xd8j\\xcc\\x87\\xc4~#\\xd0e\\x11\\xdc\\xb4\\xb8\\x1f\\xc30\\xce\\x7f\\x1a\\xa2\\xd2\\xeb:c\\xee\\x8e\\xeeF\\x1f\\xde\\x8e]\\xc0\\xd6\\xd6\\x9d\\xe3T\\x9d\\x05\\xbe\\xb7j\\x97\\t\\xd3~\\xd1\\x91@\\x18z\\xd6\\xab/\\x88u\\x04\\xb8\\xf2\\xb1)\\x016/95\\xdej\\xda-\\xc3|>\\x8e/$\\xbc\\xf1\"\\xb6\\xd1\\xc9\\x1c\\xf3\\xfaV\\xe6\\x9f\\xa5xz\\xce\\xc4j\\x90Z\\xc3\\x1c{7\\xf9\\x98\\xe8+\\no\\x88\\xf1\\xcf\\xabAg\\xa7\\xda\\x19\\xa0g\\n\\xd2\\x1f\\xe8)\\x81\\xcd\\xc5\\xe0\\xedNo\\x0c\\x89\\xa2\\x84\\x99\\x9a@\\xdeY\\xeb\\xb7\\xa5w\\xde\\x1b\\xd3\\'\\xd1|.\\x16X\\xc8\\x99P\\xbb(\\xe4\\xe7\\xae*\\xce\\xbd\\xe2\\x8bo\\x0e\\xdaA,\\xd0I!\\x95\\xb6\\x85\\x8ct\\xab7\\xde\\'\\xd3\\xf4\\xeb{i/_\\xca\\xfbF\\x02\\x029\\xff\\x00<\\xd2\\x03\\xc6V\\xd6\\xe2i.\\xf5;\\x88\\x9c*\\x12\\xd9`ybx\\x15g\\xc2\\xba4\\xba\\xc6\\xaa\\'\\x90\\x1f\"&\\xde\\xec{\\x9fJ\\xf5\\xbdkO\\xb0\\xd4\\xf4\\x89\"\\x9aA\\x0cR\\x0c\\x97\\x04\\n\\xa1\\xfd\\x87\\x06\\x91\\xe1\\x8b\\x98t\\xbc\\xb3\\xf9LU\\xba\\x968\\xa0,y\\xd7\\x8cuc\\xaa\\xea\\xcbil\\xc5\\xad\\xe1\\xf9\\x14\\x0e\\x8c\\xde\\xb5\\xea^\\x11\\xd3N\\x9d\\xa0\\xdb\\xc2@\\x0f\\xb7-\\xf5\\xaf\\x16\\xd3nb\\xb0\\xd5\\x12\\xe6\\xea6\\x94\\xc6\\xd9)\\xef]\\xcc\\x7f\\x14R0\\x15l_\\x00vj\\x01\\x13x\\xcf\\xc2\\xfa\\xde\\xb9\\xab\\xf9\\xd0,f\\xde5\\n\\x80\\xbe\\x0f\\xbdg\\xd9x_\\xc5\\xf6!\\x05\\xb5\\xca\\xa0\\x03\\x85/\\xc0\\xad\\x8b\\x7f\\x8a6\\x0f\\xb4M\\x04\\xa9\\x9e\\xa7\\x19\\xc5kY\\xfc@\\xd1n\\x9bi\\x9b\\xcb\\'\\xfb\\xe3\\x14\\x06\\x84\\x9a\\x1c>&GO\\xed\\t`(\\x0f\\xcd\\x81\\x92k\\xadRp*\\x8d\\x9e\\xa9g{\\xc5\\xbc\\xd1\\xc9\\xdf\\xe59\\xab\\xc3\\xa6h)\\x0e\\xa5\\xa6\\x8a^\\xd4\\x80^\\xb4\\x1a\\x05\\x14\\xc0m&)\\xd4\\x94\\x00\\xd3M4\\xe3M4\\x00\\xd3\\xd2\\xb9?\\x14i\\x93\\xac2_\\xda\\xeaRY\\xc9\\x18\\xdcIo\\x90\\xfdEu\\xb5\\x91\\xad\\xe8\\xc3Z\\x81-\\xe5\\x95\\x96\\r\\xd9u^7\\xfbP\\x0c\\xe5\\xfc\\x19\\xe2\\x1d_Vv[\\x98U\\xe0^<\\xe1\\xc6\\xef\\xc2\\xb6u\\x8bmH\\xea0\\\\[\\\\F\\xb0\"\\x9d\\xf10\\xe5\\xcf\\xb1\\xad\\xab\\x1d:\\x0b\\x0bu\\x86\\x08\\xd5\\x11F\\x00\\x02\\xa0\\xd44\\x98o\\xe7\\x82Y\\x19\\xc3B\\xdb\\x94+`~4\\n\\xc7\\x1a\\xda\\xae\\xa8\\xb7,$\\xd3\\x17\\x8fD\\xfe\\xb5\\x0c\\xb2k7\\x93\\xa3K\\'\\xd9`\\'\\x00\\x16\\xc5_\\xd6t\\xadN\\x0b\\xc9.\\xed\\xee\\xc6\\xc3\\xd1I\\xc6+*\\xda\\xd2}Z\\xf1M\\xed\\xf2\\x00\\xa7\\xee\\xef\\xe7\\xf0\\xa0GGo<:l\\xcdgkg#\\xdc<^g\\x98\\xa9\\x85c\\xee}j\\r\\x1f\\xc2\\x8d\\xfd\\xa2\\xfa\\xa6\\xa4\\xdem\\xd3\\x9c\\x81\\xd9\\x07\\xa0\\xae\\x9a\\xd2\\x08\\xe2\\x81\\x15Nv\\x8cd\\xd5\\xa0Gj\\x18\\xec$H#\\xc0^\\xd5\\x9b\\xe3h|\\xdd/\\xcd\\xc7+\\xb5\\xbf\\xc6\\xb5\\x03\\x0c\\xd4>#O7\\xc3\\xf2\\x1cs\\xe5\\xb7\\xe9R\\xf6)ny\\x8a\\x1ej\\xdcg\\xa5SS\\xf3U\\xa8\\xfa\\xd4\\x16_\\x88\\xd5\\xf8Mg\\xc3W\\xa1\\xa6#B*\\xbb\\x17j\\xa3\\x11\\xab\\xb0\\x9a\\xa4\"\\xf4U8\\xaa\\xf1\\xf6\\xab\\x0bLD\\x82\\x9c)\\xa2\\x9e)\\x88QKH9=)\\xd4\\t\\x9c>\\x8d7\\xda4=>|\\xe7\\xcc\\xb6\\x8d\\xbf5\\x06\\xad\\x9a\\xc3\\xf0d\\xde\\x7f\\x83\\xf4\\xc7\\xcfH\\xb6\\x7f\\xdf$\\xaf\\xf4\\xad\\xc3T!\\xa6\\x9ai\\xc6\\x9ah\\x01\\xa4\\xf1L4\\xf2)\\x86\\x80\\x10\\xd3M-!\\xa4\\xc66\\x92\\x94\\xd2\\x1aC\\n)\\xb9\\xa2\\x805\\xf4\\x07\\xfd\\xcc\\xcb\\xe9!5\\xb6\\x0ek\\x9e\\xd0X\\xf9\\xd7+\\xee\\x0f\\xe9[\\xfd\\x05!\\x8f5=\\x90\\xf9\\x89\\xf7\\xaa\\xb9\\xc9\\x18\\xa9\\xa2\\x9d-\\xa0y\\\\\\xe1T\\x12M\\x00i\\x12\\x05U\\xb9\\x968\\xe2vf\\x00(\\xc95\\xc0j~=\\xb9\\xbe\\xbc\\xfb\\x06\\x8b\\x10\\x121\\xda%\\x93\\x8f\\xc8V\\xe6\\x9f\\xa6\\xde\\xd8\\xe9\\xf2]\\\\\\xc9%\\xf5\\xeb\\'*[\\x00\\xfb\\x0e\\xd4\\xc9\\xb9\\x80\\xb61j\\x96\\x97sXj\\xefr&\\x97v%b\\x00\\xc7a\\x9a\\xc4\\xb8\\xf0\\xd6\\xa7\\x1c\\xc0\\xf9 \\xe7\\xf8\\x83\\xd7A\\xad[\\xda\\x08`\\x92t\\x92\\xc6g\\x191\\xc6r\\x17\\xf2\\xac\\xbb\\x98\\xd1 S\\xfd\\xb6LG\\xa2\\xafZbe\\x95\\xb2\\xbf\\xd3tQ\\xbbP\\x86\\xd8\\xbc\\xab\\x93)\\xc8\\xc7\\xa7\\xd6\\xbb\\x9b$\\xdbl\\x80\\x90N\\x07 W\\x1f\\xa7\\xda\\xda\\xbe\\x95\\xe6\\xc7m.\\xa2L\\x83\\xe4\\x93\\x1c\\x1f^k\\xa3\\xd4\\xf5x\\xb4M$\\xddO\\x13\\xedQ\\xf7Qrh\\x19v\\xe6\\xca\\xda\\xf1<\\xbb\\x88\\x92E=\\x98f\\xa7\\x8a%\\x860\\x880\\xaa0\\x05p\\xda&\\xb5\\xa9\\xf8\\x9e\\xf5\\xa5\\x8ee\\xb5\\xb2C\\xf7\\x14\\x82\\xed\\xf5\\xf4\\xae\\xee1\\x85\\x1c\\xe6\\x90\\x0e\\xedI\\xde\\x94\\xd2P1(\\xa5\\x1d)(\\x01\\x86\\x98\\xdc\\n\\x93\\xbd!Z\\x00\\xe7\\xee\\xafu\\xc4\\xb8u\\x82\\xc2\\'\\x88}\\xd62\\xf5\\xa4]SUE\\x1e~\\x92\\xde\\xe5$\\r[\\xd8\\xe6\\x92Y#\\x85\\x0b\\xc8\\xc1PrI\\xed@\\x8c\\'\\xd7\\xac\\xfe\\xe5\\xd5\\xac\\xf1z\\xef\\x88\\xe3\\xf3\\xe9LF\\xf0\\xe6\\xa4x\\x16\\x8e\\xde\\x84\\x0c\\xd6\\xa8\\xbf\\xd3\\xa6S\\x89\\xe1a\\xfe\\xf0\\xac\\xbb\\xdd\\x13C\\xbe\\x04\\xb2B\\xad\\xd4:\\x1c\\x11\\xf8\\x8a\\x00\\xafu\\xe0\\xef\\x0f\\xdfe\\x8d\\xbc`\\x9e\\xe8q\\xfc\\xab\\x0e\\xeb\\xe1\\x85\\x93\\x83\\xf6k\\xb9P\\xf6\\xce\\rEy\\xe1=B\\xdc;iZ\\xdc\\xa0\\x1eB\\xbb\\xff\\x00Z\\xc2\\x93Z\\xf1v\\x94vH\\xd28^3\\xb46h\\x10^|;\\xd6m\\x1b6\\xf2G0\\x07\\x82\\x0e\\xd3Z~\\x15\\xd0u\\x16\\xd4\\x9e-[LC\\x10\\x1f\\xeb\\x1d\\x06s\\xf5\\x1dk2\\x0f\\x1fk\\xfb\\xf9\\x8d$\\xc7Q\\xb0\\xd7\\xa1\\xf8OX\\xbe\\xd5\\xac\\x8c\\xd7\\xb6\\x9eCg\\x0b\\xc67\\x0fZ\\x00\\xb1\\xadj\\x1aN\\x8b\\xa6,W\\xe5c\\xb7\\x93\\xf7a1\\xc1\\xf6\\xaey.\\xb4\\x1f\\r\\xc0g\\xb5\\xb1\\x98\\xc7*\\xf9\\x82D\\x88\\xb0\\xfc\\xfbU\\xcf\\x13\\xeb\\x16\\xa9\\xaa[i\\xd7zL\\x97h\\xe4\\x11&\\xcc\\xaa\\x9a\\xe8#\\x16\\x06\\xd5b+\\x18\\x8f\\x18\\xdaq\\x80=)\\x8c\\xe4|\\x1f\\xab/\\x89/\\xaf\\xe4\\x9e2\\xd1\\xac\\x80\\xa2\\xb8\\xc8Q\\xda\\xb4\\xbch4\\xab]>;\\xab\\xd8c\\x92H[\\xf7\\n\\xff\\x00\\xde\\xad\\xfd?K\\xb0\\xb3/%\\x9c1\\xc7\\xe6\\x1c\\xb1A\\x8c\\x9a\\xcb\\xf17\\x85-\\xfcI\\xe5-\\xc4\\xf2\\xa2\\xc7\\x92\\x02\\x1cs\\xeb@\\x18\\x9e\"\\xb1\\xb8\\xd7\\xbc5\\x0c\\xb6\\xd3\\x15(\\x9ea\\x8e>wq\\xd2\\x97\\xe1\\xfd\\xc6\\xa8\\xf6/m\\xa8[I\\x1cqp\\x8d  \\xb0\\xfcj\\xc8\\xd0\\xa6\\xf0\\xc6\\x9f$\\xbak\\\\]\\xba\\xae\\x16\\t\\x1f \\xd6\\xbf\\x87oou\\x1d8K}dme\\xcf\\xdc?\\xce\\x809\\x7f\\x10\\x1f\\x06\\x8dA\\xc5\\xd0\\x8f\\xed*H\\x7f,\\x1e\\xbe\\xf8\\xe35\\xcf\\xff\\x00hx63\\xb4XJ\\xc3?{\\x1f\\xfdz\\x9f\\xc7cI\\xb7\\xd6\\x1a/\\xb0H.\\x18oyU\\xb6\\x86\\xcf\\xb7z\\xe3\\x95\\xec\\x83\\xfc\\xf0HS\\xd9\\xf0i\\x08\\xef\\xac\\xb5\\x0f\\x04\\xc8\\x98{h\\x93\\x03\\x1f\\xbcJ\\xd9\\xb4\\xb4\\xf0}\\xdb\\x0f)-I=\\x01\\xaf>\\xb0\\xb5\\xf0\\xed\\xdc\\x81\\'\\xb8\\xb9\\xb7\\xcf\\xa9\\x18\\x1f\\x8duV\\xde\\x03\\xd2.\\xd0\\x1bMJB}U\\x81\\xa0\\x0e\\xf7N\\xb0\\xd2\\xecH6\\x91E\\x1e\\x7f\\xb8+Y\\\\\\x11\\xc1\\xae\\n\\xdf\\xc0\\x97\\x10\\x00#\\xd6n\\x80\\x1fw\\x07\\xa5i\\xdb\\xe8\\xba\\xed\\xae6\\xea\\xfeh\\xf4\\x92:\\x06u\\x80\\xe6\\x96\\xabZ,\\xc9\\x02\\xac\\xee\\x1e@9`0*\\xcfz\\x06(\\xa5\\xf5\\xa4\\xefE\\x03\\x10\\xd2\\x1aZ(\\x01\\xa6\\x9az\\xd3\\x8d0\\xd0 \\xaaz\\x8d\\xe3X\\xda\\xb4\\xe2\\x17\\x97o%S\\xae*\\xddT\\xd4na\\xb3\\xb3\\x92y\\x8e\\x11F~\\xb4\\x01GJ\\xf1%\\x86\\xac\\xb9\\xb7\\x99KwS\\xc1\\x1f\\x85Y\\xd5/\\xa5\\xb4\\xb43An\\xf7\\x0f\\x906/Z\\xf3\\xab?\\x0f\\xdfk\\x9a\\xfbj\\x91\\xc4\\xfam\\xb9l\\x80\\xbf+8\\xf5#\\xde\\xbb\\xddV;\\x98\\xb4iV\\xda\\xe1b\\x98\\'\\xcb$\\x9c\\x81\\xeeh\\x11\\xccx\\x89%\\xba\\xb8\\x89\\xa6\\xbcX!e\\xe66nG\\xe1Y2Zi;W\\xc8\\xbed\\x95{\\x91\\xc1\\xab\\xb7\\x16\\xda`\\xb7\\x8a\\xefQ\\xbb7\\x13\\xb8\\x19h\\xcf\\r\\x8e\\xf8\\xa8Z\\xf7\\xc3\\xb3*\\xc6\\xd6\\xce\\x98\\xe8\\xca1LGAk%\\xfa\\xe9\\xd6\\x91\\xe9\\xd3C8\\xdd\\x89]\\xcf!}\\xbd\\xea\\x86\\xaf\\xack\\x1e\\x1a\\xb9Y\\xa6Su`\\xc7\\x96\\x03\\xe6JH\\xecLW\\x16\\'I\\xd4\\x96\\xde\\x12\\xc5\\x9e692\\n_\\x14j\\xb7wc\\xfb\\'K\\x83\\xce\\x9d\\xc6\\xd9\\x1f\\x1f*\\x0f\\xf1\\xa43\\x7fF\\xf1\\x15\\x96\\xb3\\x10{yC\\x1e\\xeb\\xdcV\\xde\\xa6\\xbb\\xf4)?\\xddo\\xe5\\\\O\\x84\\xbc\\x1a4f\\xfbL\\xf2\\x17\\xb8a\\xce:\\n\\xed\\xefG\\xfcId\\xcf\\xa3\\x7f*Lh\\xf2\\x85\\xebV\\xe2\\xaa\\xc3\\xefU\\x98\\xab3B\\xf45v\\x1e\\xb5F*\\xbd\\x17jhE\\xf8\\xbaU\\xd8j\\x94]\\x05^\\x8a\\xa8E\\xd8\\xfbT\\xebU\\xe3\\xebV1\\x91\\x80pi\\x88\\x95i\\xe2\\x98\\xb4\\xf1LB\\x8au\\'J_z\\x04y?\\xc3\\x89\\xbc\\xdf\\x07B\\x9f\\xf3\\xcaY\\x13\\xf5\\xdd\\xfdk\\xab5\\xc2|+\\x9bv\\x85{\\x0e~\\xe5\\xce\\xef\\xcdG\\xf8Wvj\\xc46\\x9ai\\xd4\\xd3H\\x06\\x9aa\\x14\\xf3L4\\x00\\xdai\\xa7\\x1ai\\xa4\\xc0i\\xa6\\xd3\\x8d6\\x90\\xc2\\x8a)(\\x19{E}\\xba\\x8c\\xab\\xea\\x80\\xfe\\xa6\\xba5$\\x8a\\xe5\\xf4\\xb6\\xdb\\xab \\xfe\\xf4m\\xfac\\xfck\\xa8\\x18\\xa4\\x02\\xf0*\\xcd\\xaa\\x87B\\x08\\xe3\\x9a\\xadV\\xac\\x9b\\x07\\x07\\xde\\x800u\\xbf\\x03i\\xfa\\xa4\\x86x\\x81\\xb6\\xb8\\xeb\\xe6G\\xc7>\\xe2\\xad\\xe8v\\xba\\x9e\\x9f\\x0f\\xd9\\xf5\\t\\xa3\\x9d\\x10ae\\x1c\\x13\\xf5\\x15\\xd03\\x00k;SkI\\xed&\\x82\\xe2M\\xa8P\\xef\\xda\\xd88\\xfc)\\x8a\\xc6/\\x89\\xef\\xf4\\xf8#X\\xee-\\xbc\\xf7a\\x95\\x18\\xfe\\xb5\\xc4<[$[\\xb3\\xa3\\x93\\x00>\\xa7\\x02\\xba)\\xae_P\\xb7\\x8948#\\x96\\xd6!\\xb4M \\xe7#\\xebUn\\xac\\xb5o\\xb3\\x92\\xfa\\xb4K\\'\\xfc\\xf2\\xc8\\xc5\\x0274\\x9dZ\\xc8\\xe9\\xa2r\\x8bm\\x108\\xf9\\xb8\\x19\\xad\\xa7\\x8e+\\xa8\\xb0\\xc020\\xe8FA\\xae2?\\xed\\x1bM=\\x16{h\\xb5$i\\x14\\x04\\\\\\r\\xa3\\xd7\\x9a\\xecb\\x91R\\xddY\\x80@\\x07#\\xd2\\x81\\xa3\\n\\x1f\\t[Y\\xea\\x7fl\\xd3\\xdd\\xadX\\x9f\\x9d\\x13\\xee\\xb7\\xe1]\"\\r\\xa0\\n\\xe6\\xcf\\x8a\\xa3\\xb9\\xd5F\\x9f\\xa7\\'\\xda$\\x07\\xf7\\x8f\\x9f\\x95\\x07\\xd6\\xbaH\\xc9e\\xc9\\xeb@\\x0en\\x94\\xcaq4\\xda\\x06-!\\xa2\\x8e\\x94\\x00\\xd3K\\xda\\x8e\\xf4\\x0e\\xb4\\x0cB\\x05E,)<f9\\x102\\x9e\\xa0\\xf3SQ@\\x8c\\x0b\\xaf\\x08i\\x179-h\\x8a\\xdf\\xde^\\x0f\\xe9X\\x97_\\x0e\\xec\\xa4V\\xf2\\xae\\xeebn\\xc7\\xcc\\'\\x15\\xddu\\x15\\xce\\xeb\\x1aV\\xabs#=\\x96\\xa8\\xf6\\xf9\\xe8\\xbb\\x01\\x14\\t\\xa3\\x88\\xbb\\xf8\\x7f\\xac\\'\\x16\\xda\\xa6\\xf5\\x07\\x8d\\xccG\\x15\\x8fu\\xe1\\x1f\\x12[3 -*\\xe39Y:\\xfeu\\xd1\\\\\\xe9>6\\x82Bb\\xbfYG\\xaeq\\xfd+\\x1e\\xef\\xfe\\x13\\x84\\xc0\\x90Ny\\xfe\\x0c\\x7fJ\\x04g\\xc1\\xe1O\\x12K\\'1\\xbcg\\xaeZJ\\xf4?\\x07i\\xda\\xde\\x9f\\x0b\\xae\\xa7p\\x92F\\x07\\xee\\xd4\\x1c\\x91\\xf8\\xd7\\x9f<\\x9e/\\x03s\\xfd\\xb4\\x05\\x1c\\x921Z\\xde\\x0f\\xf1v\\xa05h\\xb4\\xfb\\xc9L\\xd1\\xc8p\\t\\xea\\xa7\\xeb@\\x1b\\x9a\\x9f\\x8e\\x16\\xd7\\xc4_\\xd9\\xb7\\x16;!\\xdd\\xb4\\xcc\\xed\\x8e=k7\\xc5~\\x1b\\x8a\\xe2;9\\xf4\\xb9\\xa6W\\x9eP>W$`\\x8e\\xb5\\xd3\\xf8\\x83\\xc2\\xfaf\\xbe\\xf0=\\xd3\\x98\\xe4F\\xe0\\xa9\\xc1#\\xd2\\xa4\\xd7t[\\xd94\\x05\\xb3\\xd1\\xa6\\x10\\xca\\x9bB\\xb18\\xf9G^i\\x8c\\xd6\\xd2-\\x7f\\xb3\\xf4\\x98 \\xdc[\\xcb@\\xb9\\'$\\xf1\\\\\\x14\\x9a\\xe7\\x89_\\xc5\\xd7\\x96\\xf6(&\\xb7\\x89\\xfe\\xe3\\xf0\\x00\\xfa\\xd6\\xee\\xa8\\xde \\xd3<;m\\x16\\x9e\\x82\\xe6\\xf7*\\xb21\\xe7\\x8e\\xe6\\x96\\xe8\\\\h\\x9a\\x05\\xc6\\xa5\\r\\xa2\\xbd\\xfb\\xa8y\\x14s\\x96\\xe0\\x1a\\x00MNO\\x12\\xdf\\xe9\\xb0\\x9b$\\x8e\\xd2\\xe47\\xef\\x15\\xc8l\\x8fc]\\x1d\\x81\\x9e\\r>?\\xb6\\x15i\\x95>r\\xa3\\x82k\\xcf\\xbc4\\xfe*\\xd5\\xb5\\x85\\xd4n\\x1d\\xa0\\xb3c\\xccN01\\xe8\\x05t\\x9e-\\xd45\\x8b\\x1b8\\xdfL\\xb7YG>o\\x19#\\xd3\\x02\\x93\\x03:\\xe7\\xc6\\x9e\\x1d\\xbb\\xba\\x92\\x0b\\xa8\\xfe\\xe3\\x15\\xdd$y\\x07\\x15=\\xb5\\xa7\\x84\\xb5@\\x0cqZ\\xb9\\xeb\\x8c\\x0c\\xd7\\x95\\xde\\xde\\xad\\xdd\\xc4\\x8duj\\xb1\\xcc\\xc7,\\xc80s\\xee*KM:+\\x96_\\'Q\\x8a\\'\\xec%\\xca\\xfe\\xb4\\n\\xe7\\xa9\\xcd\\xe0-\\x02\\xec|\\x91l\\xcf9F\\xc5V_\\x87\\xe2\\xceQ&\\x9d\\xa8\\xcf\\x03\\x0f|\\x8a\\xc0\\xd3\\xf4/\\x13\\xc6\\xab%\\xae\\xa8\\xa7\\x03\\x80\\\\\\x91]\\x15\\x92x\\xc6\\x15>kZ\\xc8{f\\x80.E\\x1f\\x8a,HR\\xd6\\xf7H;\\x9c\\xa9\\xab\\xcb\\xaf^B\\xc1n\\xb4\\xc9\\xd3\\xd5\\x93\\xe6\\x1f\\xa5V\\x86\\xfb\\xc4h\\xc4Oa\\x0b\\x01\\xdd$\\xeb\\xf9\\xd5\\x81\\xad\\xdc\\xc7\\x93u\\xa5\\xcc\\x80wP\\x18~\\x94\\x0c\\x99|W\\xa7\\x8e$w\\x8c\\xfa:\\x11SA\\xe2}.i\\x02-\\xdc{\\x8f\\x00\\x13\\x8a\\xad\\x1e\\xbb\\xa4N|\\xb9J\\xc6\\xc7\\xf8e]\\xa7\\xf5\\xab\\xd0Yiw\\x04I\\x1c\\x10>9\\x04(\\xa0\\rE`\\xea\\x18t4\\xeaj\\x80\\x00\\x00`S\\xa8\\x18\\x99\\xa4\\xa2\\x8a\\x00;S\\r/4\\xd3@\\xc4\\xcd2DG\\x18p\\x08\\xf44\\xefj\\xce\\xd6 \\x9e{\\x17[i\\xcc3\\x01\\x94q\\xeb\\xef\\xed@\\x8b\\xe8\\x88\\xa3\\xe5\\x02\\xb2|I,qh\\xb7&X\\x1et(T\\xc7\\x1fR\\r`x{\\xc6-5\\xdbi\\xba\\xa0\\x10\\xde\\xa1\\xdb\\xec\\xff\\x00J\\xe8\\xf5c|\\xf6\\xc8l\\x04e\\xcb\\x8d\\xdegM\\xbd\\xe8\\x03\\x88m\\x1e\\xc6\\xea\\xc2\\xda;i\\x85\\xb3\"\\xf1\\x14\\xad\\xc8\\xcf<\\xd4#\\xc2Wy\\xf9\\xeeaT\\xecI\\xab\\x1a\\xdcZkj\\xc672A7\\xf18\\xfb\\xb9\\xaa\\xd7vQ$k\\xe7j\\xe5\\x80\\xfb\\xaa\\x01&\\x99%\\xf9lt\\x9b\\x1dSI\\x17W25\\xcaeb\\x08xc\\xef]\\xbd\\xbd\\xac(7$j\\xa4\\xf2p+\\x95\\xb3\\x16\\x9a`\\xb3\\x8f\\xc9\\x96\\xe9\\xa5\\xcb$\\xbb3\\xb7\\xf1\\xedZ\\xf6\\x1e#\\xb4\\xbb\\xb8{\\\\\\x98\\xae\\x10\\xe1\\xa2~\\x08\\xa4\\xc6\\x8d\\xb00zS\\xb5&\\xdb\\xa1\\xcb\\xfe\\xeb\\x7f*j6\\xe21Q\\xf8\\x81\\xfc\\xaf\\x0f\\xcb\\xcfX\\xcf\\xebR\\xc6\\x8f1^\\xb5j*\\xaa\\x95n1Ph[\\x8a\\xaf\\xc5\\xda\\xa8\\xc5W\\xe1\\x1d*\\x84^\\x8b\\xb5]\\x88U8\\xaa\\xf4C\\xa52Kq\\xd5\\x81\\xebU\\xd3\\xa5XJ`H\\xb4\\xf1L\\x14\\xf1LC\\x81\\xe2\\x97\\x8cSG4\\xea\\x04x?\\xc2y\\xb1&\\xa9\\x01=Dn\\x07\\xd3p?\\xccW\\xa5\\x9a\\xf2_\\x85\\xb3l\\xf1\\x15\\xccD\\xf1%\\xa9?\\x88e\\xff\\x00\\x13^\\xb2j\\xd8\\x844\\xd3N4\\xd3H\\x06\\x9aa\\xa7\\x9aa\\xe9@\\r4\\xd3N4\\xd3C\\x01\\xa6\\x9ai\\xc6\\x9ajF%\\x14Q@\\xc9l\\x9bn\\xabl}I_\\xd3?\\xd2\\xba\\xb1\\xd2\\xb9\\x08\\xdbe\\xdd\\xb3\\xfaJ?^?\\xadu\\xeb\\xf7E!\\x8a\\x01\\xa9\\xadN\\xdc\\x92O\\xcb\\x9e\\xb5\\x10\\xe2\\xa6\\xb5\\x00\\xcaT\\x8e\\xb4\\x08\\xe1\\xfcI\\xe3\\xd6\\xfbI\\xd3\\xf4\\x92<\\xd2v\\x99\\xdb\\x85\\x07\\xda\\xb7\\xbc;\\xa3\\x9b[#=\\xcd\\xc1\\xbb\\xbb\\x94e\\xe4f\\xce}\\x87\\xb5\\\\\\xd5\\xfc\\x1b\\xa5j\\xb9ym\\x94H\\x7f\\x8d\\x06\\rQ\\xd2\\xbc5{\\xa2\\xc9\\xb2\\xdfPy-I\\xff\\x00W(\\xc9Q\\xeci\\x88\\xc9\\xb9\\x87_\\x96\\xc6\\xe66\\x828Ue>Z@@\\xcaW9&\\x89\\xaaLH\\xfb,\\xdb\\x8f\\xf11\\xe2\\xba\\xc7\\xd3b\\x8b\\xed\\xcd\\xa5\\xea\\xac\\xb3\\t\\x0b\\\\o|\\xed>\\x9e\\xd5\\x9a\\x8b}<,\\x1b[\\x87f2\\xdc\\xf3\\x8a\\x04\\xca\\x8f\\xa7\\x8b]\\x0b\\xfd2\\xfeX\\x9a9\\x03\\x94\\xb79c\\xed\\xc5v\\x1ff\\x8fY\\xd0\\xc4E\\xa6\\x8e9c\\xc6A*\\xc0W-\\xe1\\xe5\\xb2\\x1a\\x94\\x91B$\\xb8\\x9b\\x07\\x13?\\xdd\\xae\\xd3K\\x8e\\xf2;`/\\x1e6\\x97\\'&1\\x81\\xed@\\xd1\\xc7i\\xde\\x15\\xd5<7\\x7f\\xbfN\\x95.-\\x9c\\xfc\\xe9\\'\\r\\xf9\\xd7w\\x03;D\\xa5\\xd7kc\\x91\\xe9Iqq\\x15\\xb4fI\\x9dQ\\x14d\\xb3\\x1c\\x01P\\xd8j0j0\\xf9\\xd6\\xecZ<\\xe060\\x0f\\xd2\\x80-RS\\x8d4\\xd004Rf\\x96\\x81\\x89E\\x14P\\x01IK\\xedI\\x9a\\x00\\t\\xda\\xb95\\xc9j~:\\xb3\\xd3ed\\x9a\\xde\\xe7\\x01\\xb6\\xe7\\xcb\\xe2\\xba\\xdcz\\xd5k\\x9b\\x1b{\\x85\\xc4\\xb1#\\x83\\xd9\\x86h\\x138\\xaf\\xf8Y\\xbaQ\\x031\\xcd\\xd7\\xa6\\xda\\xdd\\xd0|Ge\\xe2\\x01#[#\\xedC\\x82Yq\\xcdp\\x7f\\x10t\\xdb;;\\x9bKk+X\\xd2Y\\x98\\x93\\xb0`\\x9a\\xed\\xfc)\\xa2\\xae\\x8f\\xa2\\xc7\\x16>r79\\xf74\\x12f\\xfc@\\xd6\\x17K\\xd1\\xccQ\\x10&\\xb8\\xf9\\x17\\x1e\\x9d\\xcdq\\x9e\\n\\xd3\\x14I&\\xb3tB\\xdb\\xdb\\x82T\\xb7s\\xebV<a$\\x9a\\xff\\x00\\x8b\\xe2\\xd3`b\\xc2/\\x90\\x8cp\\x0fSW\\xfce\\x1ah~\\x17\\xb6\\xd3m\\xf6\\xa8\\x91\\x80a\\x9eH\\x1c\\xd0\\x07?y\\xe2\\x1b\\x8d_\\xc5\\x10\\\\+\\xba\\xc1\\x1b\\x8d\\x8b\\x9e\\x15GS]\\x97\\x87|mq\\xab\\xebf\\xcd-\\xc0\\xb7\\nN\\xfc\\xf3^q\\xf6Sm\\xa1\\x0b\\xc68k\\x896\\'\\xd0u\\xae\\xeb\\xe1\\xa6\\x94R\\xdamA\\xc72\\x1c.}\\x05\\x00\\x8e\\xa7Z\\xf1}\\x86\\x8d{\\r\\xa5\\xc0c$\\x80\\x1f\\x94p\\x06q\\xcdg\\xde\\xf8\\xde\\xce-j\\r5c\\xf3\\x16L\\x07q\\xd1I\\xe8+\\x80\\xf1\\xb5\\xcb\\xcf\\xe2\\xd9\\x94\\x1d\\xdeYU\\x03\\xf5\\xfe\\xb5\\x91$\\x92C\\xae\\x879\\xf3\\x16Q\\x9f\\xad\\x01s\\xd6<U\\xe2\\xa8\\xf4\\x0bH\\xd6\\x04\\rq/\\xdd\\x1d\\x80\\xf5\\xae\\x10x\\xfb[I\\xb7\\xca\\xc9$g\\xf8J`~ug\\xe2\\x11%\\xf4\\xf6,~h\\xcf\\x1f\\x97\\xf8\\xd6\\xff\\x00\\x82\\xb4{MS\\xc3Q\\xa5\\xd5\\xba:\\x92q\\xb8s@\\x18_\\xda\\x9e\\x1d\\xf1\\x06\\xd1\\xa8\\xc1\\xf6[\\x93\\xff\\x00-\\x13\\x8c\\x9f\\xadY\\xff\\x00\\x85wmw\\x1bIc\\xa9\\x06\\x07\\xee\\x82\\x01\\x1f\\xa5k\\xdf\\xfc0\\xb1\\x96B\\xf6\\xb3\\xc9\\x0f\\xfb#\\x91Y#\\xc1\\xde%\\xd1\\xdc6\\x9dx\\x1f\\xd4\\x06\\xc7\\xf3\\xa0\\x08\\xa0\\xf0\\xcf\\x8a\\xf4v\\xff\\x00B\\x9c2\\xfa\\x07\\xe3\\xf25\\xb9i\\xe2\\x1f\\x11i\\xbbWT\\xd3\\x1eE\\xe8^!\\x9a\\x97M\\xd5\\xfcGdU5-5\\xa5Q\\xd5\\xe3\\xe4\\xfeU\\xda\\xdb2]\\xc0\\x92\\x18\\xca\\xee\\x19\\xc3\\x0c\\x11@\\x18\\x96\\x9e1\\xd3\\xe7;f\\x0f\\x03\\xf7YP\\xa9\\x15\\xbf\\x04\\xb0\\xdd\\xc4$\\x8c\\xab\\xa1\\xe8E6M>\\xdaa\\x89!F\\xfa\\x8a\\x96\\xde\\xda+h\\xc4q E\\x1d\\x80\\xe2\\x81\\x95\\xee\\xb4\\xab;\\xc4\\xdb<\\x11\\xb8\\xff\\x00isU\\xf4\\xff\\x00\\x0f\\xdai\\xd7\\r-\\xb6\\xf4\\xcfU\\xdcv\\xfeU\\xadK@\\xc0t\\xa5\\xc8\\xa4\\xa2\\x80\\x12\\x92\\x96\\x92\\x80\\na\\xa5=)\\xb4\\x00\\x86\\xb25\\xcb;\\xfb\\xeb\\x7f\"\\xce\\xe0[\\x86\\xe1\\x9f\\x19a\\xf4\\xadbp+:\\rf\\xd6k\\xe9l\\xf7\\xed\\x9e3\\xf3#p~\\xb4\\x01\\x8f\\xa3\\xf8&\\xc3L\\x94N\\xc1\\xa7\\xb8\\xeae\\x94\\xe4\\xe6\\xb7d\\xbc\\xb6\\x86u\\xb6yPJ\\xcb\\xb9S<\\x91\\xeb\\x8a\\xb7\\xb8\\x11\\x9a\\xe4uMN3\\xadM\\x04\\x1al\\x92^C\\x1eD\\xc5>R\\x0f`h\\x11\\x95\\xae\\xea\\xfam\\xec\\xad\\x17\\xd8\\xdaI\\x01\\xc0q\\xc1\\xaaZ4\\x1aU\\xc5\\xd8\\x8e\\xe8\\xc8\\xb2g\\x009\\xe0\\xd4\\xd1\\xcd\\xaa\\xa4\\x8f\"\\xe9\\xb1\\xe79?%6\\xd2\\xe6\\xc2\\xfbU\\x8b\\xed04\\x13\\x06\\xed\\xc0&\\x81\\x1e\\x83\\x05\\xbc1@\\xaa\\xa0mQ\\x81^q\\xe3\\xff\\x00\\xb1\\xdb^Cwkq\\xe5\\xea\\n~\\xeaua\\xef]\\x8c0\\xea\\x93\\xbd\\xcco:G\\x0b`B\\xf1\\x8c\\xb0\\x1f\\x8dV\\xb2\\xf0e\\x85\\xbd\\xcb\\\\M\\xba\\xe6v92Lrh\\x18\\xdf\\x05\\xeb\\x17\\xba\\xa6\\x9e\\xa6\\xee\\x07G^7\\x11\\x80\\xde\\xe2\\xb6\\xbca/\\x95\\xa2\\xec\\xcf-\\xb5j\\xf5\\xa5\\xbaF\\xca\\x88\\xa0\\x0e\\x98\\x15\\x85\\xe3\\x99\\xc6!\\x80\\x1e\\xacO\\xe0*[\\xd0\\xa8\\xa3\\x8eA\\xcd[\\x88Uh\\xc75n!R[-D*\\xfc\\x03\\xa5S\\x88U\\xf8\\x87Jb.D*\\xf4C\\x15R\\x11\\xd2\\xae\\xc6)\\x92Y\\x8e\\xa7^\\x05D\\x9d*U\\xe9T!\\xe2\\x9dH>\\x94\\xe1@\\x85\\x14\\xeae8P\\x07\\xcd?\\x0f&\\xf2\\xbcej\\xb9\\xc0\\x91$O\\xfct\\x9f\\xe9^\\xd5^\\x0b\\xe1)\\xbc\\x8f\\x16io\\x9cfuO\\xfb\\xeb\\xe5\\xfe\\xb5\\xef5lBR\\x1aZJ@0\\xd3\\x18T\\x86\\x98h\\x01\\x98\\xc7zi\\xa7\\x9ae\\x004\\xd2\\x1aSHi\\x0cJJZ1Hdr\\x1d\\xbb\\x1b\\xfb\\xae\\xad\\xf9\\x10k\\xb1\\x8c\\xe5GC\\xc5q\\xb7\\x00\\x98\\x1f\\xe8k\\xaf\\xb7u\\x92\\x04a\\xdcR\\x198\\xa7\\xc4v\\xcc\\xbe\\xf5\\x10\\xa7g\\x05N:\\x1a\\x04n\\x02\\x1a1U.\\xef-\\xec\\xe22O\"\\xa2\\x0e\\xecj\\x9e\\xa7\\xac\\xc3\\xa4\\xe9mu9;Tp\\x00\\xe4\\x9a\\xf3{\\x1d_\\xfe\\x12\\x7f\\x11\\xac\\xda\\x95\\xd2\\xc3k\\x1bf(\\x0bpOo\\xad1\\x1e\\x90\\xd6vWV\\xae\\xeb\\x1a\\x84\\x9ce\\x88\\x18-\\xf5\\xaf;\\xd5\\xed\\xf4\\xb4\\xbak{\\x08\\xa6\\x9al\\xe3\\x86\\xe2\\xbb\\xdb\\xc1;\\x08\\x1e\\xde\\xee8\\xad\\xa3\\xe6@W;\\x87\\xd7\\xb5r\\x13\\xbd\\xd4\\x97\\xf2\\x1d\"\\xc9UX\\xf3>3\\x9fph\\x11\\x06\\x8f\\x7fw\\xa6\\xdc\\xa5\\xaf\\xf6V\\xc0\\xc7\\x1b\\x80\\xfe\\xb5\\xd7G\\xa9\\xb4\\x9a\\x81\\xb5\\x16\\xf2\\x00\\x13w\\x9b\\x8f\\x97\\xe9\\\\m\\xf6\\x9e\\xe925\\xde\\xb8\\x11\\xbb\\x80z\\x1a\\xba\\x97F\\xc6\\xee\\xc6O\\xed\\xa5\\xfb#\\x1d\\x9bXd\\xc8\\xdfZ\\x00\\xa7\\xe3[mz\\xfa\\xe5R\\x1bs%\\x82\\x1c\\x94\\x8d\\xb0_\\xeb[\\xde\\x1a\\xd5\\x92kt\\xb4\\xfb\\x14\\xd6\\xb2F1\\xe5\\xc8\\x84~G\\xbdt+\\xb5\\xe3\\x07\\xadD\\xef\\x15\\xb2\\xb4\\x922\\xaa\\xaf$\\x9e\\xd4\\x0e\\xc5\\x90r=(aLGI\\xa3WC\\x90FA\\x14\\xe1\\x91\\xc1\\xa0bt\\xa2\\x94\\xf5\\xa4\\xa0\\x02\\x8a(\\xa0aIKHh\\x01qA\\xe5h\\x06\\x96\\x81\\x1c\\xd5\\xdf\\x86\\xc5\\xff\\x00\\x88\\xe3\\xd4\\xae\\x08h\\xe1LD\\x98\\xe8{\\x9a\\xdc\\x9b\\x11[1\\xc7\\n3\\xc5Y\\xa4e\\x0c0G\\x14\\x05\\x8f=\\xf0\\x96\\x84\\xd2\\xea\\x97z\\xdd\\xc2\\x9d\\xd3H\\xc6<\\x8f\\xe1\\xcfZ\\xe7\\xbch\\x92\\xeb\\x1e3\\x87OV\\xe0*\\xa8\\xc7l\\xf2k\\xd6\\xa5\\to\\x01\\xda\\x02\\xaa\\x8e\\xd5\\xc2xSO:\\x96\\xbb}\\xad\\xdc\\x00K\\xc8R?`8\\xa0F\\'\\x8et\\xe4\\xb3\\xb1\\xd2\\xac\\xa1P\\x08%UG\\xd0W{\\xa1\\xd9\\x8d/\\xc3\\xf0\\xc6T\\r\\x91\\xf3\\x8a\\xc5\\xf1=\\xa4w\\xde(\\xd1\\xe0<\\xf9e\\xa4 ~\\x1f\\xe1[~$\\xbb\\xfe\\xcf\\xf0\\xec\\xec\\x8d\\x87\\xd9\\xb5>\\xa7\\x81@\\x8f-\\xd3\\xac\\xe4\\xf1\\x0f\\x8b\\xae.\\xb6\\x93\\x12\\xcadc\\xf8\\xf1T\\xac\\xed\\r\\xff\\x00\\x8c|\\x97\\xc0\\xff\\x00H9\\xc0\\xf45\\xe9>\\x13\\xd0\\xbf\\xb1\\xf4&\\x92@<\\xe9\\x06\\xf6\\xff\\x00\\n\\xe6<\\r\\xa6\\xb5\\xe7\\x88\\xae\\xaf\\xd8|\\xb1\\xbb\\x0c\\xfa\\x92h\\x01~%@\\xb1\\xff\\x00g\\xf07`\\xaf\\xe0?\\xfdu\\xdbxB\\xccX\\xf8z\\xd91\\x82P1\\x1fZ\\xe6\\xfcq\\xa7\\xc9\\xa8\\xf8\\x83J\\xb5\\\\\\x90\\xd9\\xe3\\xdb<\\xd7{kn \\xb2H\\xc7EP(\\x03\\xce\\xf5\\xcf\\x1d\\xdf\\xe9>$\\xb9\\xb6TI`\\x8c\\x81\\xb4\\xf0G\\x1e\\xb5\\xb1\\xa5|C\\xd3/6\\xa5\\xc3y\\x0ez\\xef\\x1cg\\xeb\\\\\\xbbi\\xc7V\\xf8\\x8fp\\x8c\\xa1\\xa3\\x8d\\xf2\\xe0\\x8e\\x08\\xc5wO\\xe0m\\x12q\\x97\\xb2L\\x9e\\xb8\\xe2\\x807\\xadn-\\xae\\xe3\\x0f\\x13\\xab\\xa9\\xe8A\\xcd[\\x00\\x01\\xc0\\xacm#\\xc3\\xb6\\xda;\\xb7\\xd9Z@\\x87\\xf8\\x19\\x89\\x03\\xe9[B\\x82\\x82\\x96\\x92\\x94P\\x02\\x8a(\\xa2\\x80\\n(\\xe9I@\\x08h&\\x8aBq@\\r4\\x86\\x96\\x934\\x01^\\xea\\xe2+h\\x1aY\\x9dQ\\x14r\\xccp\\x05yg\\x885&\\xd4\\xf5\\xf8o4\\x18g\\x92\\xe2/\\x95\\xa5E\\xc2\\xb8\\xafV\\x91#\\x95J8\\x0c=\\r2;8c\\x1f$j\\xbfA@3?N\\xbb\\x9c\\xe9)=\\xf2y\\x12\\x05\\xcb\\x86=+\\x93\\xb9\\xbc\\xd5\"\\x8e\\xf2\\xfdn\\xe3\\xb8\\xb7\\x91\\xbfpc\\x1c*\\xd7U\\xac\\xdc\\xc7\\x1a\\xc7i%\\xb4\\x92\\xc7s\\x94b\\xab\\x90\\x07\\xbdq\\xf3\\xcbs\\xa2Jm\\xad\\xa1G\\xd3\\xc7EQ\\x90\\xa3\\xde\\x813.\\x1f\\x10\\xeaQ\\xb6\\xf18`\\x0f*\\xdd\\xebf-J\\xc6\\xff\\x00Oyn\\x0cV\\x97\\x0c|\\xb8\\xe6#\\xa3\\x1e\\x98\\xaa\\xd2\\xcf\\xe1\\xf9\\xd8<\\xb0\\xb2;u+\\xc6*y\"\\xd1\\'\\xb8\\xb0\\xd3\\xfe\\xc7,\\xc8\\xcd\\xe6\\xa3\\x80v\\x83\\xeei\\x89\\x1d>\\x83\\x1b\\xd9YGksx.\\'Q\\x92\\xc7\\xa9\\xad\\x9c\\xe4\\n\\xe1\\xfca\\x05\\xc6\\x9e\\x96\\xfa\\xb5\\x81\"H8\\x91G\\xf1/\\xbdm\\xf8k_\\x87[\\xb0IP\\xfc\\xe3\\x87_CHgOh\\xbf>\\xee\\xc0f\\xb8/\\x15\\\\\\xfd\\xa3Xd\\x07\"1\\x8f\\xc6\\xbb\\xcd\\xe2\\xde\\xcaIX\\xe0b\\xbc\\xba\\xe6csw,\\xc7\\xab\\xb15\\x12.(H\\xd7\\xa5[\\x89j\\x08\\xc7J\\xb7\\x12\\xd2\\x19j\\x11W\\xe1\\\\\\xe2\\xaaB\\xbd+B\\x11T\"\\xccB\\xaeF\\xbd*\\xbcB\\xad\\xc7\\xe9LD\\xe88\\xa9ED\\xa3\\x15(\\xa6!\\xe3\\xa5(\\xa4\\x14\\xecP!iq\\x8aN\\xd4\\xa34\\xc0\\xf9+M\\x9b\\xec\\xfa\\xad\\x9c\\xd9\\xc7\\x97:?\\xe4\\xc0\\xd7\\xd15\\xf3e}\\x1bk7\\xda,\\xe0\\x9b\\xfezF\\xaf\\xf9\\x8c\\xd51\"JCJi\\r \\x1ai\\x86\\x9ei\\xa6\\x80\\x18i\\xa6\\x9ei\\xa6\\x80\\x18i\\x08\\xa7\\x11Hi\\x0cn(\\xa5\\xa3\\x14\\x86G(\\xccM\\xf4\\xae\\x9bL;\\xb4\\xf8\\x0f\\xaa\\x0f\\xe5\\\\\\xdb\\x0c\\xa9\\x1e\\xb5\\xbf\\xa1\\xbe\\xfd.\\x13\\xed\\x8aC4@\\xa7\\xf0F)\\xb4\\xa2\\x81\\x16!\\x8a+\\x98Ls\"\\xb8=A\\x19\\xac\\xab\\xdf\\x04h\\xd7gq\\xb4X\\xdb?z?\\x94\\xfe\\x95\\xa7\\x03\\xec\\x9b\\xd8\\xd6\\x89a\\xb6\\x983\\x9d_\\r[C\\xa7Kf\\xd2O%\\xbc\\x8b\\xb4\\xa3\\xc8N\\x07\\xb5r\\xf2\\xcd\\x7f&\\x9f.\\x9fac=\\xb46\\xcf\\xb0z\\xba\\xd7c\\xac\\xeb\\x96\\xdaZ(\\x91\\xb7K!\\xdb\\x1cc\\xef1\\xack\\x8b+\\xd3|\\xf7\\xab\\xa9\\xf9&h\\xf6\\xc7n\\xf8\\xda\\x1b\\xfa\\xd0#\\x89\\x1e\\x1d\\xd5.\\xe5\\x1b\\xa1)\\x93\\x92\\xf2\\x1cV\\x9a\\xc5iih\\xb61\\xb4W:\\x8a\\xb6\\xe8\\xb7\\x8c\\xaa\\xbd>\\xe9.\\xa2\\xb8\\x92+\\xedhFO]\\xb9\\xaapK\\r\\xb5\\xfcp\\xe8\\xe8g\\x9b?<\\xce3\\x9f\\xf0\\xa0Gs\\xa4\\xcf?\\xd8\\xd2;\\xc7\\x89\\xae\\x95G\\x98#\\xe8\\rp~,\\xf1\\x13\\xdckq\\xe9\\xee%\\x8a\\xca\\'\\x06f\\xda~\\x7fo\\xa5w\\xb6:|\\x10M%\\xdf\\x96\\x16\\xe2`<\\xc2\\x0er@\\xabRZ[\\xce>x\\xd1\\xb3\\xea(\\x19KE\\xd5\\xec/\\xed\\xd5m\\'W\\xc0\\xc6\\xd0y\\x1f\\x85k\\x9e\\x95Z+K{Q\\x98\\xe3D\\xfa\\x0cT\\xd1J\\x92\\xaeQ\\x83\\x0fPh\\x01O\\x14S\\x8f\"\\x98r\\r\\x03\\x16\\x8a\\x05\\x14\\x0c(\\xa3\\xb5\\x14\\x00\\x94\\xe1\\xd2\\x9bJ(\\x01h9\\xcd\\x19\\xa2\\x803\\xb5\\x88\\xe7\\x93L\\x9d-\\x97t\\xac\\x85T{\\x9a\\x8bE\\xd3\\x17K\\xd3\"\\xb7\\x00eW\\x93\\xea{\\xd6\\xb6*\\xbd\\xd4\\xc9\\x04\\x0f#\\xb0\\n\\xa0\\x92Oj\\x04\\xceua[\\x9f\\x19<\\xb8\\xc8\\xb7\\x80(>\\xe4\\xe4\\xff\\x00Jf\\xbd\\x17\\xf6\\x9e\\xb7a`\\x0f\\xee\\xe3o:@;\\xe3\\xa0\\xab\\x1e\\x1bV\\x96+\\x8dA\\xc7\\xcdq!u\\xf6^\\xdf\\xa53F\\xcd\\xde\\xb9\\xa8]\\xb0\\xe1d\\xf2\\x93\\xe8\\xbf\\xfdz\\x04j\\xea\\x0c\\xb6\\xbaT\\xcc\\x00\\xc2FO\\xe9\\\\\\xf7\\x80t\\xf3k\\xa3\\x89\\x9b\\x96\\x99\\x8c\\x87\\xf1\\xae\\x9bS\\xb27\\xdat\\xf6\\xca\\xdb\\x0c\\x88T7\\xa6i\\xf6\\x16kek\\x14\\x0b\\xd1\\x14-\\x01a\\xb3i\\x90Oy\\r\\xd4\\x89\\x99b\\x04!\\xf4\\xcfZ\\xb7\\xb7\\x8c\\nu\\x14\\x0e\\xc6-\\x97\\x87\\xe2\\xb4\\xd6.\\xf5\\x00r\\xf7\\x04dc\\xa6\\x05l\\x81\\x8aZ:P\\x02\\xd1IK@\\x074\\xb4\\x94P\\x02\\xe6\\x96\\x9bE\\x00-\\x14\\x99\\xa2\\x80\\ni4\\x84\\xd3h\\x00\\xcd5\\xd8*\\x9c\\x9cS\\xab;V\\xd3\\xe5\\xd4 \\xf2\\xa3\\xba\\x96\\xdf=Z#\\x83@\\x1c\\xb5\\xc7\\x88%\\xd2|dmf\\x97u\\xa5\\xc8\\x05\\t?q\\xbab\\xbbX\\xe6V\\x88>x\\xc7Z\\xe3S\\xe1\\xdd\\x89\\x9df\\xb8\\xb8\\xba\\x9d\\xd4\\xe7t\\x92d\\xd6\\xa6\\xb1\\x7fc\\xa6\\xdb\\xc3\\xa7\\xdc\\x991q\\xfb\\xb5\\n\\t?\\x9d\\x025n\\xa6\\x83\\xc9%\\xa4P\\xa4cvk\\xcff\\xfbF\\x95\\xa8;\\xc2\\xc2\\xe6\\x17\\xeb\\xces\\xf5\\xa9\\xaf\\xef\\xf4\\xd9\\xa2\\x8a\\xc1ZxR\\x13\\x80H\\xcej\\xa4\\xbax\\x86\\xdc^i\\xd7&]\\xa7\\xe6\\x19\\xe4~\\x14\\t\\x96\\xacv\\xeaz\\x94h\\xfaZ,g\\xef\\x1d\\xa4b\\xba8Z\\xee\\x06\\x9e\\x184\\xc5\\x0b\\x17\\x10\\x92\\xd8\\r\\xfe\\x157\\x87\\xe77\\x1a|r\\xcd\\x1e\\xc9=\\xc63[\\x8b\\xb1\\xbab\\x81\\xa4y\\xf6\\xa1\\xa0x\\x8f]\\x94\\xad\\xed\\xd4v\\xf6\\xe7\\xfeY\\xc5\\x93\\xc7\\xf5\\xad\\xdf\\x0b\\xf8J\\x1d\\x03q\\x8eY$y1\\xb8\\xb1\\xe3\\xf2\\xae\\x94\\x81\\x9a\\xb1l\\xa0\\x12\\xe7\\xa2\\xf3J\\xe1c\\'\\xc5W\\x9fc\\xd2|\\x85o\\x9d\\xc6\\xd1\\xf8\\xf5\\xae\\t\\x05k\\xf8\\x96\\xfc\\xdfj\\xac\\xaas\\x1c_(\\xfa\\xf75\\x98\\x82\\xa1\\x9a-\\x89c\\x15r%\\xe9U\\xe3Z\\xbd\\nS\\x02\\xccKW\\xa2\\x1d*\\xbcI\\xd2\\xae\\xc4\\xb4\\xc9,F*\\xd2T\\x11\\x8e\\x95e)\\x88\\x90\\n\\x90SV\\x9e)\\x88P\\x0ei\\xc0\\xd2R\\xd3\\x01isIJ(\\x03\\xe4\\n\\xf7\\xef\\x0c\\xcb\\xe7\\xf8cK\\x93\\xbf\\xd9\\xa3\\x07\\xea\\x14\\x0f\\xe9^\\x03^\\xdf\\xe0)\\xbc\\xef\\x06Xz\\xa6\\xf4?\\x83\\xb7\\xf4\\xc5S\\x12:3M4\\xe3IH\\x06\\x1ai\\xa7\\x9ai\\xa0\\x06\\x1ai\\xe2\\x9c@\\xa4\\xc5\\x004\\xd3i\\xc4RR\\x18\\x94R\\xe2\\x8cR\\x01\\xa4V\\xc7\\x87\\xdb6\\x1bs\\xf7]\\x97\\xf5\\xac\\x83Z^\\x1fl%\\xc2\\x7fvC\\xfa\\xf3I\\x8c\\xdc\\x18\\xe6\\x80M\\x02\\x94P\\x008\\xe7\\x1d9\\xa7\\xdf_\\xfd\\x93N\\x96u\\x8d\\xa4(\\xb9\\n\\x83$\\xd2v\\xa7\\xc2@m\\xad\\xd2\\x80<\\x92\\xdf\\\\-\\xe2\\x7f\\xed-j\\t\\xf08\\x8dv\\x9c-z\\x1d\\xad\\xfe\\x89\\xaf\\xc9\\x03\\xe5$\\x963\\x98\\xc3\\x0c\\x10k}\\xec-\\xa5\\x1f4(A\\xf5\\x14\\x91X[[\\xb6b\\x85\\x10\\xff\\x00\\xb2\\xb8\\xa6#\\x9e\\xd7\\xf4\\x8d.8\\xa4\\xbd\\xba\\x8bq\\xc7@z\\x9a\\xe2m\\xe3\\xbb\\xb82OjR\\xc6\\xd8\\x1e\\x1b\\xa6\\x7f\\x1a\\xf4\\rI$\\x8ai\\xe7\\xbe\\xb8\\x87\\xec\\x018\\x8d\\xc69\\xf75\\xc8}\\x82\\xe7Q\"\\xea\\xf6H\\xe0\\xd3T\\xe5cR0Glb\\x81\\x0e\\xd3uE\\x81f\\xb5\\xb8\\xd5\\x1aY%\\xf9Q\\x93\\'o\\xbek\\xa2\\xd0\\xf5;IwX\\xc3u%\\xc4\\xd6\\xfcH\\xce\\x0es\\xf5\\xae1\\xf5\\xad:\\xcaf\\xfb\\x06\\x9e\\x84\\xa9\\xc7\\x98\\xdd\\xebJ\\xdfQ\\xbd\\x9b\\xc9\\xd4\\xe2hm\\xacc\\x0cn\\x97g\\xcc\\xd8\\xf44\\xc1\\x16\\xfc{\\xe2\\x16\\xd2\\xf4\\xe1k\\x03\\xed\\xb9\\xb8\\xf9A\\x1f\\xc2;\\x9a\\x97\\xc3> \\xd2\\xc5\\x85\\xbd\\xa2\\xde!\\x91T)\\x0cpI\\xadka\\xa7\\xeb\\xb6\\x91\\xdc\\x98Rda\\xf2\\x97O\\xf1\\xabp\\xe9VV\\xed\\xba+h\\xd0\\xfa\\xaa\\x81He\\xd0C\\x0c\\xd0Fz\\xd5v\\xbc\\x82)\\xd2\\x06\\x91D\\x8f\\xf7W\\xb9\\xab\\x00\\xe6\\x81\\x8c\\xc6)A\\xa7b\\x98x\\xa0\\x07QM\\r\\x9e)\\xd9\\xa0\\x03\\x14R\\xd2P0\\xa2\\x8cQ\\x9e\\xd4\\x00\\xb5\\x8b\\xe2\\x0b\\x0b\\x9dB\\xc4Z\\xdb\\xb8Q#\\x81!=\\x93\\xbdl\\xd2P\"\\x94v\\xa2\\xd3O\\x10\\xc41\\xb10+#\\xc2\\x10\\xca\\xbaa\\x92deydg!\\x86\\x0f&\\xba\\\\g\\x83H\\x10/A\\x8a\\x02\\xc3\\x87J8\\xa4\\xa2\\x80\\x16\\x8aJQ@\\xc2\\x8a(\\xa0\\x02\\x81E\\x14\\x08Z)(\\xcd\\x00.qI\\x9aJ(\\x18R\\x13Fx\\xa6\\xe6\\x81\\x06i\\t\\xa5\\xa8\\xe5\\xdd\\xe5\\xb6\\xccn\\xc7\\x19\\xa0\\x0c\\xfdsPm7I\\xb8\\xbb@\\x19\\xa2B\\xf8>\\xd4\\xed\\x1fT\\x8fU\\xd3\\xe2\\xb9\\x8c\\xfc\\xae\\xb9\\xaeS[\\xb4\\xf1]\\xfa\\xcbn\\x9feX\\\\\\x15=NA\\xab\\xfe\\x0c\\xd25\\r\\x1fOkk\\xd2\\xa4\\x06\\xca\\xed9\\xe2\\x81\\\\\\xe9o.\\xa2\\xb3\\xb7i\\xe6\\x91c\\x8dFY\\x98\\xf0\\x05q7\\xda\\xa5\\xf4W\\x92\\xdf\\xcam\\xe6\\xd3\\x98\\x0f\\xb3m\\x19$\\xfdksRyn\\xda\\xea\\xce\\xee\\xd5\\x05\\x99O\\x95\\xd9\\x81\\x0e~\\x95\\xccZ_Fs\\xa5_\\xc0\\x89\\n\\x9c!\\x1c\\x01\\xe9@\\x11\\xc7\\xe2\\x1b\\x1b\\xab\\x80/lc\\xe4\\xe3x\\x1d)\\xf7\\x1ak\\xda\\xb8\\xd4t\\xe9\\xd7\\xec\\xa3\\xe6p[\\x01Gz\\x82\\x7f\\x0cLd-e2M\\x11=3\\xc8\\xab\\xd6\\xb6\\xd7\\xd6\\x93\\xc1\\xa4\\x1b?>\\xd6e&y\\x0fE\\xf6\\xa6#f\\xd2\\x04\\xd5^\\xdfQ\\xb7\\xbd\\x7f%P\\x8f-\\x0e\\x15\\x8f\\xadfh:\\xf4\\xb6\\xfe \\xbc\\xd1\\xee\\xdc\\x93\\x1c\\x87\\xcaf=W55\\xe5\\xde\\xa3\\xa5A\\xf6=\\x1fG%W\\x85$\\xe1k\\x97]\\x0b\\xc4\\xb7\\xfa\\xdcZ\\x8c\\xd0G\\x14\\xa1\\x81<\\xe3\\x8a@z\\xd4g~)\\x9a\\xdd\\xf0\\xd34\\x96 \\xfe\\xf1\\x86\\x00\\xf7\\xa9t\\xe8\\xd9!V\\x97\\xf8G5\\xc7x\\x9bR\\xfbv\\xa2bS\\x98\\xe2\\xe3\\xeajYi\\x18\\xa3.K7$\\x9c\\x9a\\x9d\\x174\\xc4Z\\xb3\\x12T\\xa2\\x89\\xa1J\\xbd\\x12t\\xa8bJ\\xbd\\nU\\x08\\x9a%\\xe9W#N*(\\x93\\x15i\\x14\\x8ab%E\\xc0\\xa9\\xd4qLU\\xa9V\\x98\\x98\\xf5\\x18\\xa7\\x0e\\xb4\\x82\\x96\\x98\\x87w\\xa5\\xa4\\x06\\x96\\x9a\\x00&\\x94\\x1aJ(\\x11\\xf2\\x15z\\xff\\x00\\xc3\\x19\\xbc\\xcf\\x0bH\\x99\\xff\\x00Wr\\xeb\\xf9\\x85?\\xd6\\xbc\\x82\\xbdC\\xe1D\\xdb\\xac\\xb583\\xf7$G\\xfc\\xc1\\x1f\\xfb-6\\x08\\xf43M\\xa7\\x1ai\\xa41\\xa6\\x9ai\\xe6\\x9ah\\x10\\xc3Hi\\xd4\\x94\\x00\\xdaJu!\\xa0\\x06\\xd1KE!\\x8d\\xabz\\x19\\xc5\\xd5\\xd2\\xfa\\x95o\\xd3\\x1f\\xd2\\xaa\\xe2\\xaci\\x04\\xae\\xa9(\\xfe\\xf4k\\xfa\\x13\\xfe5,h\\xe8\\x87N)\\xe3\\xa54p)W\\xaf4\\x0c~(\\xe4s\\xdct\\xa3\\xa1\\xa5\\xa0E\\xdbyw\\xa8\\x19\\xaaz\\xce\\xab\\x0e\\x93\\xa7\\xcbw3a#\\\\\\xfd}\\xa8\\x8d\\xfc\\xb7\\xf6?\\xce\\xb9\\x9f\\x19hZ\\xaf\\x88\\x04Q\\xdaK\\x1a\\xc0\\xbc\\xb2\\xb1#&\\x98\\x98\\xba\\x1e\\xff\\x00\\x13\\xe9\\x93\\\\jK\\xba+\\x86\\xf9b=\\x02\\x8e\\x95B\\xf2\\xc3Q\\xb9\\x96m:Xa\\xb4\\xb2\\x8c\\x81l\\xc1\\xbe\\xf0\\xf7\\x14\\x9af\\x93\\xe2\\xdd5R\\x18\\xe7\\xb51(\\x00\\x028\\x02\\xb6\\xeft7\\xd4\\xa1\\x86}U\\xbfynw\\xa8\\x80\\x90(\\x11\\xc6\\x8d\\x0e\\xc3L\\x9f:\\x95\\xea\\xb1\\xceDi\\xfdjV\\xbe\\x9e\\xf6L@\\x05\\xbe\\x97\\x0f\\xde8\\xc6G\\xf5\\xabwZe\\x94\\xday\\xd4l\\xed\\'\\x95\\xf7\\xe3l\\xb9\\xfc\\xf1Y\\x97\\x87P\\x9a\\xd4\\x0b\\xb4K[U=\\x07\\x19\\xfc;\\xd0\\x07_\\xa6H\\xf7\\x92\\xc3qgr\\xabd\\x8aCD\\x13\\x92~\\xbd\\xaby\\xdbjg5\\xc2i\\xde\"\\xfb$q\\xdbYX\\xc8\\xf1\\x83\\x82\\xc7<\\xfb\\xd6\\xec\\x9a\\xa3\\xad\\xe1\\x96k\\x9bx\\xecR<\\xbe\\xe3\\xc8os@\\xce+\\xfe\\x12R<kqw,S\\xc9\\x04@\\xc5\\x10\\x8d\\x0bw\\xe4\\xd7\\xa0\\xe9\\x1a\\xca\\xea\\x89\\xb9-\\xee#\\x03\\xfez\\xc6V\\xa7\\xb7\\x82\\xceuY\\xa2H\\xd9\\\\d0\\x03\\x9a\\xb5\\xb1c\\x1cp(\\x04I\\x9a\\x08\\xcdc\\xd9\\xeb\\xb0\\xdej\\xd7v1\\x8c\\xfd\\x9f\\x01\\x9b=I\\xed\\xf8V\\xb8`h\\x19\\x0c6\\xeb\\x06\\xf2\\xa4\\xfc\\xecX\\xe4\\xe7\\x9a\\x9a\\x97\\x8aJ\\x06\\x14\\xb9\\xa44P\\x02\\xd1IGj\\x00(\\xcd\\x14P\\x02\\x83\\xebK\\x9am\\x19\\xa0\\x07QM\\xa34\\x00\\xbfJ3IFh\\x01\\xd4\\x99\\xa4\\xcd-\\x00\\x14\\x94Ph\\x01sE74\\x9b\\xa8\\x10\\xeaBi\\t\\xcd&h\\x01i\\t\\xc5\\x19\\xa6I\\xb9\\xa3;O8\\xe2\\x80#\\xb9\\xb8\\x10@\\xf2\\x1f\\xe1\\x04\\xd6g\\x87\\xb5\\xb1\\xac\\xd8,\\xf8\\x01\\xb2C\\x00{\\x8a\\xe7\\xf5\\x8bO\\x16?\\x98\\x96\\xf3\\xdbI\\x13\\x0c`\\xae\\x0e*O\\x02\\xe9w\\xfaU\\x94\\xb0\\xdfG\\xb0\\xf9\\x84\\x8es\\xc5\\x02\\xb9\\xda\\xb6\\xdcVZ\\xebV\\xa6\\xf2{`HxF\\\\\\x91\\x80?\\x1a\\xcf\\xd6\\xb5ye\\x12X\\xe970\\rAH;_\\x90\\x07z\\xc4\\xd55[\\xdbf0]Z\\x87GP\\x1eD\\x1d}h\\x0b\\x97\\xbcI4\\x1a\\xa5\\x96-.U\\x9e3\\x9d\\xaa\\xddk\\x9e[\\xfb\\x0b\\x8b4\\xb7\\xd4\\x11\\xfc\\xe8\\xc6\\x03\\xa8\\xe6\\x87\\xd3\\xed\\'\\xb4{\\xad>w\\xf3#\\x19dc\\xc8\\xad\\xbf\\x0e\\xdb\\xda\\xeb\\x16C\\xedV\\xe8\\xd2\\xc6p[\\x1c\\x9ab*\\xe9zC\\xc3$wQj\\x05\"\\x93\\x85V\\xe35\\xd0h:d\\xb6\\x11\\xc8&\\xbck\\xa7g-\\xb9\\xbb{U\\x9b\\xad\\x16\\xc6u\\xb7\\xf3\"\\x07\\xec\\xe7tx\\xfe\\x13\\\\\\xde\\x93\\xab\\xb4\\x1e/\\xd44\\xd7c\\xb0\\xbe\\xf4\\x07\\xb5!\\x9d\\xb6\\xc5=\\x85:8\\xb7\\x11\\x81\\xd6\\x9a\\x9f0\\x15a\\xe4\\x8e\\xca\\xd5\\xe6\\x90\\x80\\x00\\xcd!\\x99\\xfe \\xd4\\x97N\\xb0\\xf2\\xe3?\\xbd~\\x06=}k\\x82U,r\\xdc\\x93W5\\x1b\\xd7\\xd4\\xafZf\\'oE\\x1e\\x82\\xa1E\\xcdK\\xd4\\xb5\\xa0\\xe8\\xd3=\\xaa\\xe4IQ\\xc4\\x95v$\\xa1\\x08\\x96$\\xab\\x91%G\\x12z\\xd5\\xc8\\xd3\\xbdP\\x89c\\\\U\\x85\\x14\\xc4^ju\\x02\\x98\\x0eQR\\nh\\x18\\xa7/J\\t\\x1e)\\xd4\\xd1KL\\x05\\xa5\\xebH)i\\x88(\\xa2\\x8a\\x00\\xf9\\x0e\\xbd\\x07\\xe1L\\xdbu=B\\x0c\\xfd\\xf8U\\xff\\x00&\\xc7\\xfe\\xcd^}]\\x8f\\xc39\\xbc\\xaf\\x16l\\xcf\\xfa\\xdbwO\\xe4\\xdf\\xd2\\xa9\\x88\\xf6#IN\\xa6\\x9a\\x92\\x86\\x9am8\\xd2\\x1a\\x00i\\xa4\\xa54\\x86\\x81\\tIN\\xc5%\\x00%!\\xa5\\xa2\\x90\\t\\x8a\\x9bM\\xf9ut\\xf7\\x8d\\x87\\xea**}\\xa1\\xdb\\xaa[\\x1fRA\\xfc\\x8d&R:u\\x07o8\\xcd8\\nE\\xe4\\x0c\\xd3\\xa9\\x00P:\\xd2\\xe2\\x8c`\\xd3\\x18\\xd6\\x19\\x18\\xa9`\\x93\\r\\xb5\\xa9\\x87\\xd6\\x9as\\xc1\\x1dh\\x03Gh#5\\r\\xc4\\xb1\\xc3\\x13<\\x84\\x05Q\\x92M2\\x19\\xf2\\xb8?\\x8f\\xb5q\\x9f\\x11\\xf5\\xa3g\\xa5\\x0b8\\x98\\xac\\xb7<\\x12;/z\\tgG\\xa6\\xea\\x16\\xfa\\xa5\\xa3M\\nm\\x8bq\\n}@\\xef\\\\\\x7f\\x88m\\x8e\\xa7z\\'I\\xe260}\\xfd\\xa7\\xa1\\x1di\\x9e\\x1c\\xf1v\\x93\\xa7\\xe90X\\xb1\\x94\\xba\\xae\\x0e\\x10\\x9c\\x9a\\xb5\\xa8\\xa0\\x93C\\x914M;p\\x9eA\\xbdd\\x1b\\x06\\x0fS@\\x8c\\xb8\\x1e\\xe3Zw\\x82\\xceO\\xb2\\xd9\\xc60X\\x0cdTf]\\x12\\xc1\\x1e\\xd2Ek\\xdd\\xfcHO+Rj\\x97\\n\\xb6CM\\xd3Y\\x04\\x88?\\x7f\\x14|\\xb5gi\\xde\\x1f\\xb8\\x99\\x96[\\xb2-\\xed\\xc7R\\xfc\\x13L\\x0e\\x8a\\xcbZ\\xb9\\xd3\"\\x96\\xf2\\xecF\\xbaZ\\x85\\x10\\x08\\x94\\xe4\\x02q\\x8cWT\\xb7B\\xe6\\xccK\\x18#r\\xe4\\x03\\xc1\\xae\\n[\\xc9.\\xafR\\xda\\xd7\\x0bam\\xcb\\x11\\xc8 WC\\xa4\\xcf\\x16\\xa9z.\\xe0\\xb9\\x98G\\x1a\\xec\\xf2\\x88\\xc2\\xfdh\\x19\\xcbi\\xfa\\'\\x8a \\xd4\\xee\\xee`X`\\x13\\xc8X\\xb4\\x87\\'\\x19\\xf4\\x15\\xdei\\x16\\xd7\\xf0C\\x9b\\xeb\\x9f:C\\xe8\\xa0\\x01Z\\x05\\xe3@7\\x10>\\xb4\\xe6#nE \\x0f5<\\xcd\\x9b\\x86\\xee\\xb8\\xcf4\\xec\\xd7\\x9b\\xea\\x1e\"]\\'\\xc7S\\xfd\\xaaR\\xb0y*:\\x13\\x8a\\xea\\xf4\\x8f\\x10&\\xae\\xdf\\xe8\\xf6\\xf3yC\\xfeZ:\\xed\\x07\\xe9\\x9a\\x02\\xe6\\xc4\\x88\\xec\\xeaU\\xb0\\x07Q\\xebR\\x8e\\xd4\\x9b\\x86)r\\r\\x03\\x03Fi(\\xc5\\x03\\x16\\x8aJZ\\x003K\\xde\\x9b\\xd2\\x974\\x00\\xb4f\\x9b\\x9a3@\\x85\\xcd\\x19\\xa6\\xe6\\x8c\\xd0\\x03\\xa8\\xcd74P\\x02\\xe6\\x8c\\xd3s\\xebE\\x00.i3E4\\xb0\\x1dM\\x00?5\\x04\\xf7\\x11[\\xa6\\xf9]Qs\\x8c\\xb1\\xc5S\\x1a\\xbc\\r\\xab\\x1d=[2\\xaaolv\\x15b\\xf6\\xc6\\x1dB\\xd9\\xa1\\x9d\\x03\\xa3v4\\x01\\x85\\xe2\\x8f\\x10\\xc7a\\xa1M=\\xbc\\xca\\xd2\\x12\\x15v\\x9c\\xf2MmiS5\\xc5\\x842?%\\x90\\x13\\\\^\\xa3\\xf0\\xde\\xdebM\\xad\\xd4\\xb0\\x8c\\xe4\\xa3\\x1d\\xcb]9\\xbd\\xb7\\xd04\\xe8\\x16\\xe5\\xce2\\xb1\\x82\\x0194\\x08\\xd8\\x95\\x95\\x10\\xb3p\\x00\\xc95\\xcbkz\\xac\\x97Z\\'\\xdat\\xbb\\xc4\\x83\\xf7\\x80\\x19\\x1d{g\\x9a\\xe8M\\xccr.2\\t\\xc6q\\\\=\\xd5\\xe3j\\x1a\\x85\\xc6\\x90\\xd1\\xa4Q\\x12v\\xed\\x18\\xe4P\\x04Z\\xda-\\xb5\\xbaj\\x16j\\xa6Y\\x86%\\x9d:\\x9a\\xa5\\xa5k\\xf2\\xc72C{\\xfb\\xd8[\\x8c\\xb7$T\\xd67i\\xa7\\xa4\\xbav\\xa5\\x1byd\\xe0f\\xa4\\x97\\xc30\\x96\\xf3\\xed\\xe7\\x0f\\x01\\x1b\\x953\\xf3\\x1faLC\\xaet\\xf7\\xb1\\xd5\\xe3\\xba\\x85\\x97\\xecs\\xb0\\xcfa\\x83\\xd8\\xd7Mmkw\\x05\\xf2\\x0bU\\x81,|\\xbc\\x90\\x07\\xcc_\\xfc+\\x02\\x18\\xdbP\\xd1\\x04\\x9a\\xed\\xa1\\xb7\\x8a\\x19G\\x96\\x80\\xf3\\x8c\\x80\\t\\xae\\xd6\\xd7\\xcb\\xf2\\x13\\xcb\\xfb\\xb8\\xe3\\xe9Hi\\x1c\\xae\\xae|Y\\xbc\\x8bAjS\\xd7\\x9c\\xd7;a\\xe1\\xef\\x11\\x7f\\xc2K\\x0e\\xa3t\\x88N\\xe1\\xbc\\x86\\xea+\\xd4\\xca\\xe7\\xadI\\x14\\x00\\x9c\\x9e\\x07sE\\xc2\\xc1i\\x16\\xc8\\xc3\\xc9\\xc0\\x02\\xb9_\\x11\\xeb\\x06\\xf2cm\\x0b~\\xe9O\\xccGsZ\\x1e \\xd6\\xbc\\xa46\\x96\\xed\\xf3\\xf4b;\\x0f\\xf1\\xaeQS&\\xa5\\x96\\x90\"U\\xa8\\xe3\\xa4\\x8e:\\xb9\\x1cf\\x90\\xc2(\\xfaU\\xd8\\xa3\\xf6\\xa6\\xc5\\x15\\\\\\x8d)\\x88|i\\xedV\\x11p=i\\x11*t\\\\S\\x10\\xe4\\x1c\\xe6\\xa5\\x00R/\\x14\\xf1LB\\x8ap\\x14\\x80S\\x851\\x0e\\x02\\x96\\x90\\x1e\\xf4f\\x98\\x0bFh\\xc74\\xbe\\xd4\\x08\\x05-%-\\x00|\\x85]\\x17\\x81f\\xf2<g\\xa76xfd?\\x8a\\x91\\xfdk\\x9d\\xad/\\x0fM\\xf6\\x7f\\x12i\\x92\\xe7\\x01n\\xa3\\xcf\\xd3p\\xcdP\\x8f\\xa0\\xa9\\xa6\\x9dIRP\\xd3M4\\xe2)(\\x01\\xb8\\xa4\\xc5)\\xa0\\xd0!\\xb4R\\xd2P\\x02QKI\\x8a\\x06\\x18\\xa4S\\xb6\\xf2\\xd5\\xbf\\xe9\\xa8\\x14\\xead\\x87kD\\xdf\\xdd\\x91\\x7f\\x9d&\\x08\\xea\\xd4\\xf0)\\xe2\\x99\\x1fJ~)\\x0c^\\xd9\\xa2\\x81\\xd2\\x96\\x80\\x11\\xbaR\\x0e\\x98\\xcd)\\xe6\\x92\\x80\\x1ar\\xa7#\\xaf\\xf3\\xa8f\\xd3lo\\xdd^\\xe6\\xde9\\x19x\\x05\\xd4\\x12*\\xc7\\x14\\x9ft\\xee\\x1d}(\\x00\\x8bK\\xb3\\x87\\x1e]\\xbcj=\\x94S\\xa7\\x89D{@\\x00T\\x91\\xcb\\x91\\xed\\xe9Q\\xddL\\x91[\\xbc\\x8eF\\xd5\\x19&\\x81\\x1cn\\xa5f\\x90\\xde\\xccthm\\xbf\\xb5X\\x02\\xcd \\xe3\\x19\\xef\\x8a\\xa7\\xa8\\xe9\\x97\\x97\\xb2\\x1f\\xb6^\\'\\xc8\\x9b\\x8c1u\\xf7\\xc5dxw\\xc46\\xe3_\\xd4\\xef\\xaf\\xae\\x165\\x91\\xf1\\x1e\\xe3\\xdb\\x9f\\xfe\\xb5u\\x967\\xfa\\x15\\xee\\xa9\\xf6\\x9bgYnd\\x1b\\x0b.O\\x14\\xc4s\\x02i\\xe7\\xb5{\\x1d>\\xc8\\xc3\\x11\\x18\\x91\\xdb\\xa9\\xfa\\x9a~\\x9f\\xa9]Z\\xc0,t\\xb87\\xb8?<\\xbe\\xf5\\xdbj\\xf0G\\xfd\\x9b*#\\xa4,\\xe3hc\\xc0\\xcdp\\xf7\\x11\\xcd\\xa1Y}\\x92<5\\xcd\\xd1\\xfb\\xc9\\xd8R\\x03E\\xb5xdkK}C}\\xc5\\xe4Rn\\x02\"p\\x0f\\xbf\\xadi\\xc7\\xe2\\t\\xad\\x1eg\\xd5\\x92+K]\\xe1ab\\xd9/X3\\x1b\\x7f\\x0f\\xd9\\xc4\\xe2 \\xfa\\x84\\xab\\x9d\\xcd\\xfc5OJ\\xb8\\xb9\\xd5\\xb5\\x15\\x8a\\xec\\x8b\\x88\\x07\\xcd\"\\xc82\\x050;\\x7f\\xec}*\\xf2\\xf7\\xfbA\\xa0\\x8eI\\x9c\\x02\\x1c\\x8c\\x9cv\\xad\\x88\\xa1\\x8e%\\x01\\x14\\x01\\xed\\\\E\\x85\\xe5\\xbc\\xbe%\\xb8\\x9e)d\\x08\\x91\\xec\\xc1o\\x90c\\xda\\xbam\"k\\xc9bf\\xbbxI,v\\xf9G#\\x1d\\xa9\\x0c\\xcf\\xf1\\x96\\xa1q\\xa6\\xe9\\x1fj\\x80\\x91\\xe5\\xc8\\xa5\\xb1\\xe9\\x9a\\x8e\\x0f\\x1ai\\xa6(W\\xcd2O \\x18\\x8e1\\xb9\\xb9\\xad=sO\\xb7\\xd5\\xac\\x1e\\xc6\\xe2M\\xab.:\\x1ex9\\xaa\\xfa?\\x85\\xf4\\xdd\\x1d\\x07\\xd9\\xe0]\\xfd\\xdc\\xf2\\xc7\\xf1\\xa0\\r\\x98&2\\xc2\\x8eT\\xa6\\xe1\\xf7OQO\\x12)lg\\x91HF\\x17\\x8a\\xe05}zO\\x0e\\xf8\\xb5\\xda\\xe1\\x98\\xda\\\\\\xa0o\\\\\\x101\\xfe\\x14\\x0e\\xe7\\xa0\\xe6\\x8a\\xe5\\xf4]n\\xff\\x00Z\\xb8\\x12\\xa5\\xa9\\x82\\xc8t2\\x0f\\x99\\xeb\\xa3\\x96S\\x14L\\xd8\\xc9\\x038\\xf5\\xa0.KFk\\'K\\xd7\\xed5;O>\\x19\\x06\\x07\\xde\\x04\\xf2\\xa7\\xb85=\\xa6\\xabm}4\\x91\\xdb\\xc8$\\xf2\\xce\\x19\\x97\\xa6}3@\\\\\\xbf\\x9aN*+\\x9b\\xa8\\xadai\\xa6`\\xa8\\xbdI\\xedMK\\x98\\xa4\\x8fz\\xba\\x95\\xc6r\\r\\x00OHz\\xd5{k\\xd8n\\xc3\\x98X8V*H\\xf5\\x15_S\\xd5a\\xd2\\xe1Y\\xae2#,\\x14\\xb7e\\xfa\\xd0\\x06\\x85.k\\x0e\\xfb\\xc4\\xb6\\x16zq\\xbc2\\xab\\xa1\\xfb\\xa1NK\\x1e\\xc0U\\xed.\\xe6K\\xcb\\x18\\xa7\\x956;\\xa8%}(\\x0b\\x97\\x19\\x80\\xefUou\\x18,b\\x12L\\xfbA!G\\xb95\\x95\\xe2;\\rBx\\xd6}6\\xe5\\xa2\\xb8\\x8f\\xa2\\x9f\\xba\\xe3\\xd0\\xd7\\x13m.\\xaf\\xaf\\xf8\\x96\\xd2\\xdbR\\x85\\xa3KO\\x9d\\xd7\\x1c\\x13\\xd8\\xd0+\\x9e\\xa6\\x8d\\xe6&Gz\\xe4u\\xc8<Eep\\xf7:l\\xc2x\\x8f&\\x17\\x1c\\x8f\\xa5u\\xb0\\x80\\x91\\x81\\xe8*9.\\xad\\xc4\\xeb\\x03\\xba\\xf9\\x8c2\\x14\\x9eM\\x038?\\x04\\xc5}u\\xac\\xea\\x1a\\x8d\\xfcO\\x1c\\xae\\xc1p\\xc3\\x18\\xf6\\xae\\xfa\\xe2\\xee\\x0bHL\\x93H\\xa8\\x83\\xa9c\\x81Q\\\\\\x85Ky\\n2\\xc6v\\x9c1\\xed\\xef\\\\V\\xb3t\\x9f\\xd8\\to}*\\xdfn\\x90\\x07a\\xc7C\\x9e\\xd4\\xc4nj\\x1e%\\x89u\\x05\\xd3\\xa1\\x8eS$\\xb1\\x96\\x13\\x05\\xf9\\x17\\xd3\\x9a\\xc3\\x96\\xfbR\\xd1m\\xd3\\xedN/\\x91\\x98\\x93!\\x1d=\\x05A\\xe2\\x19\\xdc\\xe9\\x96\\x92\\xdb\\x12\\x90\\x15\\xc7\\x15W\\xc3\\xfa\\x91i~\\xc3v\\x04\\x90\\xc9\\xd3w84\\x08\\x9asws\\xbfS\\xb1\\xba$}\\xe7L\\xf2\\xa2\\xa2\\x82\\xde\\xe7Y\\xcd\\xed\\xb3m\\xbbN\\x1b\\x1cg\\xde\\xa4\\xb7\\x86[?\\x10Mb\\xa0\\xacS\\x82\\x07\\xb05\\xbb\\xe1\\xcbKM:\\xe6\\xe6\\x05\\xb9\\x12L\\xb8.?\\xba)\\x01\\x9c-$\\x93O\\x96\\xe3\\\\\\x89\\xb6E\\xd0\\x81\\xf3U\\x85\\xd3t\\xa8\\xe7\\xb2\\xbb{\\xa9\"\\x11&c\\x89\\xdf\\x03\\x07\\xb9\\x15\\xd7\\x85\\x86\\xe2!\\xc2\\xb2\\x9f\\xc4\\x1a\\xa5\\xa9hV:\\x9c{.!V\\xec\\x0e9\\x14\\\\v9O\\x1bk6\\xaf\\xe1\\xe9\"\\xb5\\xb8\\x8d\\xd8\\xb2\\x8c#s\\xd6\\xba/\\x0c\\xcen4KY\\t\\xe5\\xa3\\x06\\xb9\\xfb\\xbf\\x86\\x9a|\\xcd\\x98d\\x96<\\xfa\\x1c\\x8a\\xec4= i\\x9a|V\\xfb\\x8b,k\\x80M\\x00\\xaehG\\x11nO\\x03\\xd6\\xb2\\xb5\\xbdim\\x10\\xdb\\xdb\\x9c\\xca{\\xff\\x00v\\x9b\\xac\\xeb\\x82\\x056\\xf6\\xa4\\x19:\\x16\\xfe\\xedr\\xdbZG,\\xc4\\x96<\\x92jnRC6\\xb3\\xb9f$\\xb19$\\xf7\\xab\\x11\\xc4i\\xd1\\xc5V\\xa3\\x88\\xd2*\\xe3c\\x8a\\xaeG\\x15,qw\\xabQ\\xc7L\\x90\\x8e:\\xb2\\x89\\x8a\\x11*uZ`\\x08\\x86\\xa6U\\xa1V\\xa4\\x02\\x98\\x80\\x0eiiqJ\\x079\\xa0@\\x05.(\\xe9N\\x14\\xc0JP\\r-\\x14\\xc4\\x14\\xb4\\x94\\xb4\\x00\\xb4\\x94Q@\\x1f!\\xd3\\xe1\\x90\\xc3<r\\x8e\\xa8\\xc1\\x87\\xe0i\\x94U\\x08\\xfaMX2\\x86\\x1d\\x08\\xc8\\xa2\\xa9\\xe8\\xf3}\\xa3C\\xb0\\x9f?\\xeb-\\xa3o\\xcdA\\xab\\x95%\\x08i)i\\r\\x007\\x14\\x94\\xeaJ\\x00CIKF(\\x10\\x94\\x94\\xb8\\xa5\\xa0bTW\\x1f\\xeaI\\xf4 \\xfeF\\xa6\\xa8\\xae\\x17u\\xbc\\x83\\xd5M&\\x08\\xea`9\\x89O\\xa8\\x15-U\\xb2\\x90=\\xacg\\xd5EZ\\xa9\\x18t\\xa5\\xcd&)G\\x14\\xc03\\xedF)N\\x07Z\\x08\\xa0\\x04\\xc5\\x1d\\xb1E\\x1f\\x8d\\x003\\x90r85\\r\\xdd\\xb8\\xbe\\xb4\\x96\\x06%D\\x8aT\\xe3\\xae*sM#?Z\\x00\\xe5\\xad>\\x1dh\\x916d\\x85\\xa5>\\x92\\x1c\\xd6\\xed\\x9e\\x93i\\xa6\\x8d\\x96\\xf6\\xf1\\xc6\\xbd\\xb6\\xa8\\x15y\\\\c\\x0f\\xd7\\xd6\\x9e\\xd9)\\xcf\"\\x80\\xb1\\x99\\xac[Y\\xcffZ\\xf5A\\x8a/\\xdes\\xdb\\x15\\xce\\xcb\\x05\\xce\\xa7\\xa8X_\\xd9\\xf9\\x02\\xc5W.\\x1d~s\\xf4\\xab^7\\xbbko\\x0c]\\x9c\\x90J\\xed\\x1f\\x89\\xc5r\\xde\\x1a\\xf1\\x9d\\xa6\\x9d\\xa3\\xc1i\"\\xcb4\\xe0\\x11\\xb1\\x174!2[\\x9b_\\xf8H\\xf5)\\xa4\\x84I\\x01\\x88\\xec\\x7f9\\x08\\x1cw\\x06\\xa5\\x96{}\\n#aa\\x1f\\x9dw \\xc3\\xb8\\xeckd\\xdb?\\x89\\xec\\xccsZ\\xcde\\x01!\\x83+\\xedrjV\\xd3\\x85\\x95\\xf5\\xbd\\xb5\\xbd\\x81\\x91\\x1d\\x08\\x92\\xe4\\x9eW\\x8ab9y\\xe3\\x87N\\xd2\\x1a\\xdc\\xba\\x9b\\xc9\\xc8,\\x078\\x1e\\x95r\\xcb]m#L\\x8a\\xd2%2\\xdd7$\\x7fw5\\xb7o\\xe1;[Y\\x9a\\xe1\\x8bJ\\xf9%wv\\xaev\\xd6+\\x8b+\\xeb\\xdb\\xdb\\xa8\\x19UT\\x95\\xdc;\\xf6\\xa0\\r\\t\\xf5\\x98\\xfc\\xdbI\\xaf\\xe0f\\xbfL\\xecE=3\\xebW\\x0e\\xad\\xaai\\xcbuww\\xb2hN\\x0c\\x16\\xf1/\\xce\\x07\\xbda\\xe9\"#ms\\xac]\\x03$\\x88N\\xdd\\xde\\xb5\\x8b-\\xdd\\xcd\\xf5\\xea\\xc8dc$\\x8d\\x80\\x01\\xe8(\\x0b\\x9e\\x89\\x1f\\x8a-\\xc2\\xd9%\\xcaI\\x14\\xd7\\x7fr2\\xa4\\xe3\\xebN\\xbf\\xd3\\xb4\\x8d_P\\x84],r\\xdc@7*\\x13\\xc8\\x07\\xdb\\xf0\\xaeoY\\xb9\\xba\\x86\\xe3O\\xb6\\x89\\x8e\\xfc\\x0c\\x91\\xdc\\xd5\\xcb=a\\x07\\x88\\xda\\x17\\xb7E\\x90\\x8d\\x86N\\xe4\\n\\x00\\xeca\\x868P*\\x00\\x00\\xe3\\x8at\\x80:\\x91\\xd75\\xcf\\xdd\\xf8\\x8a\\xd9\\xae\\x1a\\xc69XJ\\xe0\\xa8u\\xe7i\\xac\\xd3\\xab]\\x8ba\\xa7\\xe9\\x97\"\\xe6\\xf22\\x03\\xcd7q\\xdc\\xf1\\xde\\x90\\xcc{\\xff\\x00\\x07\\xea_\\xdb\\xf3%\\x94\\xad\\r\\x85\\xc9\\xdf)S\\xdf\\xb8\\xae\\xebG\\xd2\\xa0\\xd2\\xac\\x92\\x08T*\\xaf_z\\xc7\\x1a\\xf5\\xe2\\xea\\xd1Y}\\x90<{2\\xf3\\x06\\x18\\x07\\xd3\\x15.\\x9f\\xaf\\\\\\xdc\\\\]Cql!x\\xc9\\xf2\\xd7x%\\xc7\\xad\\x00m\\xea\\x16\\xa9{g,\\x12\\x0c\\xa4\\x8aT\\x8a\\xf3\\x17\\xd3\\xbcE\\x05\\xfbhP\\xcb/\\xd9\\x1c\\xee\\x13z\\'\\xa6k\\xd1t\\xbb\\xd9\\xae\\xed\\xf7\\\\\\xc4\\xb1I\\x93\\x94\\r\\x9cTz\\x9d\\xcc\\xf6\\xfeY\\xb4\\xb7Y\\x9c\\xb8\\x0c\\x0bc\\x03\\xb9\\xa0\\t4\\x8d:=2\\xc6;x\\xfa(\\xe4\\x9e\\xe6\\xa7\\xbe\\xb3\\x8a\\xfa\\xd6H&P\\xc8\\xe3\\x04\\x1a\\xc8\\xb8\\xd6\\xee\\x17R\\xb7\\xb5\\xb7\\xb5\\xf3\\x91\\xb3\\xe6\\xc8\\x1b\\x88\\xea\\xb4:\\xf6\\xa1uw{l\\xb6b#\\x18\"\\x17v\\xe1\\xcd;\\x01\\x87\\x07\\x81e\\xb7\\xd7Q\\x9ab\\xfa|gz!=\\x0f\\xa5z\\x15\\xba\\x08\\xe3\\n1\\x80+\\x92\\xb6\\xd4.o\\xac\\x9e\\xc6\\xf2\\xed!\\xbf^\\\\\\xc3\\xd0}+[K\\xd6\\xadnT\\xc3\\x14\\xa5\\xde1\\x82OS\\xefH\\r\\x19\\xb5\\x0bX\\xee\\xd6\\xd5\\xe5Q;\\xa9eN\\xe4z\\xd69\\xd7l\\xfe\\xdd{\\x040H\\xf7\\x16\\xab\\xb9\\x80O\\xbd\\xc6p\\rf\\xbe\\xbb\\x15\\xde\\xa7s\\xe5\\xda\\xabI\\n0Y{\\xe0U\\x1d*\\xfa\\xe2}+P\\x9f\\xfeZ\\x00H|sLF\\x97\\xf6\\x9e\\xab\\xac\\xe9\\xa8\\xf6\\xc7\\xfb>e\\x93.\\xb2\\r\\xc4\\xaf\\xd2\\xab\\xae\\xb3\\x05\\xe4\\xd2M\\x1d\\xbeu\\x08T\\xaan\\xeaEr\\xf6:\\xa5\\xc5\\xbd\\xe4w\\x0c\\xec\\xc0\\xb6\\x08\\xcfZ\\xd8\\xd7\\x12+\\rN\\xd6\\xea\\xdf*\\xd2\\x9d\\xcd\\x8a\\x02\\xe5\\xa5\\xf1\\x1c\\xd7\\xb6\\x17V\\x97\\x0b\\xb2}\\x84/l\\xd6f\\x9b\\x14\\x17zU\\xc5\\xab\\xba\\xad\\xc9m\\xca\\rZ\\xb9\\xb6\\x92\\xef\\xc4\\xb1\\x18\\xa2!A\\x198\\xe0\\xfb\\xd6\\xdc\\xfe\\x11\\x82K\\xb4\\xb8G1\\x8e\\xac\\xa0u\\xa4\\x06&\\x99w\\x1d\\xdc\\'I\\xbe@\\x00\\xe1O\\xbdT\\x9fN\\x1a-\\xdc\\x13\\xacr\\xde\\xe6L\"\\xc22?\\x13\\xda\\xba\\x01om?\\xdaZ\\xfa\\xcb\\xec\\xa1[\\xcaI3\\xf38<dV\\xde\\x8d\\xa3[\\xe9\\x96)\\x04%\\x9dG \\xb9\\xc94\\x05\\x8cf\\xb4\\x9a_\\x10\\xc1{%\\xda\\xc5\\n\\xc5\\x8f\\xb3\\x9e\\xb9=\\xcd/\\x89\\xee\\xed\\xb4\\xcd\\x12\\xee\\xe2\\x00\\x82yWf\\xe5\\x1c\\x92x\\xad=o\\xc3\\xb6\\xba\\xc4;d\\x0c\\xae>\\xeb\\xa1\\xc1\\x15\\xc1j\\xbe\\x05\\xd6\\x11|\\xab{\\xc6\\xb8\\x879\\xda\\xe4\\xe6\\x81\\x9d\\xe7\\x85\\xa5y4+Vs\\xcf\\x96?\\x95n\\x85\\xcdg\\xe8z{\\xdai\\xb0@\\xc3\\x94@\\rh\\\\\\xdd\\xdb\\xd8G\\xb9\\xd8g\\xb0\\xf5\\xa44I\\xb5\"]\\xf2\\x10\\x00\\x19\\xe6\\xb9\\xedW^i3\\x05\\xa1\\xc2\\xf4.?\\xa5T\\xd45I\\xef\\xd8\\xaeJE\\xfd\\xd1\\xdf\\xebT\\xd2*EX\\x89c\\xc9\\xc9\\xebS\\xa4>\\xd52CVR\\x1a\\x02\\xe4Q\\xc3V\\x92*\\x928\\xaa\\xc2G\\xed@\\x88\\xe3\\x8e\\xac\\xa2S\\x96<v\\xa9Ui\\x80*\\x8e*UZ\\x02\\xd3\\xc2\\xe2\\x98\\x80\\x0cS\\xa8\\x03\\x14\\xb8\\xa0B\\x8au4\\nu0\\x001J(\\xa2\\x98\\x0bE\\x14P \\xa2\\x92\\x8a\\x00\\\\\\xd2\\xf7\\xa4\\xefE\\x00|\\x89E\\x14U\\x08\\xf7\\x8f\\x06\\xcd\\xe7\\xf8?L|\\xf4\\x87g\\xfd\\xf2J\\xff\\x00J\\xdb5\\xca|8\\x9b\\xcd\\xf0t\\t\\x9f\\xf5R\\xc8\\x9f\\xae\\xef\\xeb]eICM\\x14\\xb4\\x94\\x00\\x98\\xa4\\xa5\\xa2\\x80\\x1aE%:\\x92\\x81\\tE-\\x14\\x00\\x94\\x8c2\\x84{S\\xa9\\x0fJLh\\xd7\\xd1\\x9b~\\x99\\x06y!\\x005\\xa5Y:!?\\xd9\\xe8\\x07PX~\\xa6\\xb5F}jJ\\x1dKM\\xa5\\xa6!i;\\xd1E\\x02\\n(\\xa0\\xd0\\x02b\\x92\\x96\\x8a\\x00i\\xa4\\x0c\\xcb\\xc7oJZ\\x08\\xf5\\xa0w(\\xea\\x9aM\\xae\\xb3jm\\xae\\x06\\xe8\\xc9\\xc9^\\x95\\r\\x87\\x87t\\xfd5B\\xdb\\xda\\xc6\\x83\\xd4-i\\x11\\xcd9e#\\x86\\x19\\xf7\\xa0\\x04TU\\x18\\x03\\x15\\x97\\xe2\\x0b\\xd6\\xd3\\xb4k\\xbb\\xa8\\xc7\\xcf\\x1cE\\x87\\xd6\\xb6\\x00\\r\\xca\\x9a\\xc3\\xf1=\\xbc\\xb7:\\x15\\xe4Q\\xa1gh\\xce\\x14\\x0c\\xe4\\xd0\\x0c\\x83\\xc3\\xba\\xb8\\xd5thn\\x19\\xf2\\xec\\xb8c\\xefU\\x9e\\xd76\\xd7V\\xd77b\\xeeiK2\\'\\x00\\x81\\xd8q\\\\~\\x85\\xe1]~ku\\x82k\\x89,\\xads\\x9d\\x8a~c^\\x81\\xa3xz\\xd3H\\x8blI\\x97?y\\xd8\\xe4\\xb1\\xfa\\xd0#\\x94\\xb8f\\xb3\\xf0\\x92\\xa6\\xa3`\\xf03\\xbe\\xdf.\\x1f\\x98\\x8fzf\\x9f\\xa7Y\\xe9\\xc8\\xb7\\xb2\\xcd\\xbefM\\xf1B\\xdc7\\xe5]\\xfc\\xd1!O\\x99\\x01\\x1e\\xf5\\xc7i\\xb2i\\xda\\xce\\xbdp\\xd7\\x10\\'\\xdb,\\xe41\\xa1\\xff\\x00f\\x98X\\xcb\\x84\\\\\\x89\\x1fX\\xd4\"r\\x14\\xfe\\xe9=\\xfb~\\x14\\xc8\\xed\\xef\\'\\x17Z\\xc4\\x89\\xe5\\x10\\xa4\\xa0\\x03\\xadu\\xd2Fm\\xaf\\xa5\\x9a\\xee\\xf21f@\\t\\x13\\x000kJkx\\'\\xb3h\\x8a\\x03\\x13.0=)\\n\\xc7\\x9d\\xe9\\xed\\x1d\\xb6\\x8ds{\\x8d\\xd7$\\xed\\xcbv\\xcdOj\\xa9\\xa6\\xf8z[\\xd8\\xd8\\x99\\xe7\\xf9s\\xe9ZGK\\xb6\\xbd\\xd2\\xae\\xa0\\x82\\tm\\x95$#2/-\\x8e\\xf5An4\\xfb\\xaf\\tI\\xc4\\xf1\\xc5n\\xdbK2`\\x93\\x9e\\xb8\\xa6\\x06>\\x8a\\xf2\\x9df\\xdf\\x0e\\xc4\\x96\\xc99\\xad\\x99U\\x97\\xc69\\x12\\x13\\xb8v\\xed\\xc5\\x1a<\\x1a~\\x9fh\\xba\\x9c\\x97C\\x12\\xfc\\xb1y\\x83o4\\xfd;J\\xbdSs}#*O(\" \\xc7\\xd7\\xbd\\x00W\\xd3\\xf5\\tt\\xad^\\xe9\\x1d\\xd9\\xd4\\x02z\\xe6\\x9f\\xa7\\xdc\\xde\\xdc\\x9b\\xadNI\\xd8\"\\x86!s\\xdf\\xe9Z\\x9aO\\x86$\\x8e9\\xe5\\xbb!\\xa6\\x94\\x11\\xf4\\x06\\xaaXhw\\xb6iuo#\\xa2\\xa4\\xaaB\\x82z\\x9fZ@V\\xd1\\x9a[}\"\\xfa\\xf8\\xc8K\\xb6pk\\x1fM\\xbe\\x9d58\\\\\\xc8\\xc7s\\xf3\\xcfZ\\xda\\xd1\\xd3\\xec\\xf0\\xdci\\x97\\x92\\x08\\xa5\\x9f\"5=O\\xbdR\\xd3,-N\\xbaak\\x95w\\xb7%\\x98(=\\xa9\\x81sT\\x81m\\xbcKo*>Zb\\x0b/\\xe9P\\xbc\"\\xd7\\xc4\\xeb\\x15\\x91#p\\xf9\\x80\\xe83V\\xa0\\x8e\\x1dw]k\\xe8\\x1c\\x98 ;O\\x04r+WB\\xb2\\xb0\\x9e\\xf2[\\xf8\\x84\\xbb\\xb7\\x95\\xfd\\xe0\\xc7\\xe5@\\x1c\\xed\\x83\\x1d7T\\x9e\\xda\\xe2#\\xfb\\xec\\xae\\xecz\\xd4\\xfaD\\x92\\xd8jsi\\xd3!\\x10\\xc9\\x9e\\xa3\\xb7\\xadv\\xb7\\xdalS\\x034qFn\\x02\\xfc\\x8c\\xcb\\x9c\\x1e\\xd5\\x81\\xaaAn\\x9aR[\\xeb\\x8e\\x03\\xcc6<\\xd1\\x8c\\x01\\xdf\\xafjAc\\x99\\xd54\\xeb}.\\xe6)&\\x9b0\\xcd&#\\x11\\x8c\\x93\\xed[\\xf7\\xf6\\xef{\\xaa\\xe9\\xf6\\xcbe#@\\x8b\\xb8\\xccz/\\xb5i\\xdb\\xa6\\x93i\\xa4!\\x0e\\x8f\\x05\\xba\\xe5Y\\x8eq\\x8a\\x8b\\xc2\\xfa\\x9c\\x9a\\xcc\\x977x+n_l@\\xfa\\x0e\\xf4\\xc6h%\\x8d\\xe2jBa2\\x0bUL\\x08\\xf6\\xf3\\x9f\\xadf\\xcd\\xe3[K+\\xd7\\xb4\\xbf\\x8aKy\\x14\\xe3,8#\\xd75\\xd5\\xe0b\\xb2u}\\x06\\xcbW\\x84\\xa5\\xcc*\\xc7\\xb1\\xc7\"\\x95\\xc0\\xe2\\xf5\\xddyu\\x9d\\x7fN\\xd3\\xec\\\\4;\\xc4\\x8e\\xcb\\xde\\xbd\\x16\\x00V%\\x1e\\xd5\\xc6\\xe8^\\x02]+[7k!x\\xc0\\xc2+\\x0eEw\\x8b\\x12\\xc6\\xb9v\\xc0\\x14\\x98\"0\\xa5\\x8d<\\xc6\\x91\\x8d\\xf2\\x10\\x00\\xf55J\\xebY\\x82\\x1c\\xa4\\x03\\xcco\\xd2\\xb1nn\\xae/\\x1b2?\\x1d\\x94t\\xa4U\\x8d;\\xdduS1\\xda\\x8d\\xc7\\xa6\\xee\\xd5\\x84\\xe6I\\xe42J\\xc5\\x98\\xf75\"E\\x9a\\x99a\\xcfj\\x00\\xae\\xb1{T\\xe9\\x15XX}\\xaad\\x87\\xda\\x80!X\\xaat\\x8f\\xda\\xa6X\\xaaU\\x8e\\x98\\x0cH\\xeaeJz\\xa7\\xa5H\\x17\\xda\\x98\\x86\\xaaT\\x81y\\xa5\\x0bN\\x02\\x81\\x00\\x14\\xecRb\\x9c)\\x80QGZP)\\xd8\\x02\\x94g<\\xd0)h\\x00\\xa2\\x8a3@\\x85\\x14\\x9fJ3E\\x00&\\xef^(>\\xddiqE\\x03\\x13<\\xf3KA\\xe9I@\\x8f\\x91\\xa8\\xa2\\x8a\\xa1\\x1e\\xb1\\xf0\\xaem\\xda\\x15\\xe4?\\xdc\\xb9\\xdd\\xf9\\xa8\\xff\\x00\\n\\xef+\\xcd>\\x13\\xcd\\xf3\\xea\\x90\\x13\\xd4F\\xe0\\x7f\\xdf@\\xff\\x00J\\xf4\\xcaLhm\\x14\\xb4\\x94\\x86!\\xa4\\xa7RP\\x03h\\xa5\\xa3\\x14\\x08JLR\\xe2\\x93\\xbd\\x00\\x14R\\xd0h\\x02\\xfe\\x85\\xff\\x00\\x1e\\xae?\\xbb#\\n\\xd9\\x1d+\\x0fC8\\x17\\x0b\\xe9\\'\\xf3\\x19\\xad\\xb0\\xd5%\\x0b\\x8aZ@ih\\x10\\x94P)h\\x01(\\xebE\\x00`P\\x02Q\\x8av)(\\x01(\\xc5.(\\xa0\\x06\\x11M\"\\xa4\\xf6\\xa6\\xe2\\x80#\\xc1\\x07\\x8aw\\x99\\x91\\x86\\x19\\xa5\"\\x90\\xad\\x03\\x1c\\xa23\\xf7p)J\\xe2\\xa1\\xc5\\x02GN\\xf9\\xa0\\x05\\x95r\\xa4W\\x91\\xea\\xd0\\xea\\x9a\\x7f\\x8dn?\\xb3!f\\x96`\\x1b d\\x00}k\\xd7D\\xe0\\x8c2\\xd3|\\x9bw\\x93x\\x0b\\xbb\\xd6\\x80h\\xe3\\xb4?\\x0b\\xdc\\x19\\xd6\\xfbX\\x9d\\xae.:\\xaa\\x93\\xf2\\xaf\\xe1]\\x8a\\xa8U\\x00\\n\\x94F;`\\xd2\\x14 R\\x03\\x92\\xf1\\x8d\\xed\\xce\\x97c\\x1d\\xe5\\xb8%b\\x90y\\x8a;\\xa9\\xe2\\xa2\\x8f\\xc4\\xdaA\\xd0\\xd2\\xeer\\x81\\x1c}\\xce\\xe4\\xfab\\xba\\x1d[O[\\xfb\\t\\xad\\xddr$R\\xb5\\xc1h\\x1f\\x0f\\xa5\\x8e\\xec\\xcb\\xa9\\x10\\xc8\\x8cvF\\x0eG\\xd4\\xd3\\x137\\xb4\\xa5\\x1e!E\\x9a\\xe2\\xc28\\xec\\xd4\\xe6\\x14u\\xf9\\xbe\\xbe\\xd5\\xb5y\\xa3\\xda\\xddI\\x04\\x92\\xa1\\xcc\\x07)\\x83\\x80\\r^\\xb7\\xb7Kx\\x82\"\\x80\\x00\\xc0\\xa9H\\xc8\\xa0v9\\xb8\\xbcK\\x0cZ\\xd4\\xdae\\xc8\\x11H\\xa4yd\\x9e\\x1cb\\xa2\\xd7\\xae\\xb4\\xcb;\\x98/\\xae\\x18\\xbd\\xc2\\x8d\\xb1F\\xad\\xcb\\x13\\xedY\\xfe<\\xd0$\\xbb\\xb5\\x17\\xf6\\x8a~\\xd5\\x07\\xcc6\\xf5\"\\xb3\\xbc)\\xe1\\xdb\\xcb\\xfb\\x95\\xd55r\\xec\\xe0\\x0f-\\x1f\\xb0\\xfaP#\\xac\\xb5\\xd3a\\xbc\\x96\\rB\\xe2\\xdd\\x16\\xe4/\\xd7mX\\xba\\xd3\\xe3\\x8a9\\xa6\\xb6\\x8a5\\x9d\\x94\\xfc\\xdbz\\x9fz\\xd2E\\n\\xa1@\\xc0\\x14\\xac\\xbb\\x874\\\\v8\\x8d\\x13\\xc4\\xb6\\x02y-\\'\\x88Z\\xdc\\xa9;\\xd0\\x8c\\x02}j8\\xb5\\xc7\\xd6\\xfc@\\xb6Zx\\xd9e\\x03n\\x96E\\xe3y\\x1d\\x07\\xd2\\xa5\\xf1o\\x83\\x0e\\xaa\\xc2\\xea\\xcb\\x11\\xdd\\x0e\\xa7\\xa6\\xe1\\xefZ\\xbe\\x17\\xf0\\xd2\\xe8\\xb6J\\x84fS\\xcb\\xb7\\xa9\\xa0GA\\x1f\\xdd\\x19\\xaa:\\xae\\x9d\\x06\\xa7h\\xf6\\xf7\\x08\\x1a6\\x1c\\x8a\\xd3\\x11\\x11A\\x88\\x0f\\xbcqHv<sU\\xf0\\x9e\\xb1a7\\xd8\\xec\\xa4\\x92[)\\xd8\\x03\\xcf\\xdd\\xfa\\xd7\\xa5\\xe8:Z\\xe9\\xbad6\\xc8\\xb8\\xd8\\xa0~5\\xa5$\\x96\\xb1\\x9f\\x9d\\x94\\x9a\\x85\\xf5h\\xd3\\x88\\xa3\\'\\xeb\\xc5\\x17\\x0b\\x17V#\\x8ei$\\x96\\xde\\x01\\x99$\\x03\\xf1\\xacyu\\x0b\\xa9\\xb8\\xdd\\xb0z-V\\xf2\\xd9\\x8eX\\x92}M!\\x9a3\\xebA~X#\\xcf\\xb9\\xe0Vd\\xd7\\x17\\x17\\'\\xf7\\x8eH\\xf4\\xedO\\x10\\xfbT\\x82\\x1a\\x00\\xaa\\xb0\\xfbT\\x8b\\x15ZX\\xaaA\\x1f\\xb5\\x00VXy\\xa9\\x96,v\\xa9\\xc4u\"\\xc7L\\x08V>:T\\xaa\\x9e\\xd5 J\\x90%\\x001R\\x9e\\x12\\x9e\\x12\\x9c\\x16\\x98\\xae\"\\xad;m(\\x14\\xb4\\x08\\x00\\xa3\\x14\\xb4\\xa0S\\x00\\x02\\x8cR\\x8e\\x94{\\xd0\\x01\\x8e(\\x1e\\xb4u4\\xb4\\xc0)i\\xb4\\xb98\\xa0B\\xd1IK@\\x05\\x14\\x94\\xb4\\x00\\x94\\xb4Q@\\xc34\\x9d\\xe8\\xa2\\x81\\x1f#QE\\x15B;\\x9f\\x85\\x93l\\xf1\\x15\\xd4D\\xf0\\xf6\\xa4\\xfe!\\x97\\xfcMz\\xd9\\xaf\\x15\\xf8w7\\x95\\xe3+U\\xce<\\xd4\\x91?\\xf1\\xd2\\x7f\\xa5{U&4\\x14QE!\\x89IKI@\\x05!\\xa5\\xa3\\x14\\x00\\x94Px\\x14\\x9b\\x86\\xdc\\xf5\\xfaP!i\\r/jJ\\x00\\xb3\\xa3\\x1c\\\\]/\\xfbA\\xbfL\\x7fJ\\xdd\\x1c\\xd7?\\xa56\\xddFe\\xfe\\xf2)\\xfc\\xb3\\xfe5\\xd0\\n\\x92\\x85\\x14\\xa0\\xe7\\xda\\x92\\x8c\\xd0!h\\xa0\\xd2P\\x02\\xd1\\xd2\\x8a\\r\\x00\\x14\\xbd\\xa9(\\xa0\\x03\\x074QGJ`!\\xa4\\xa54\\x86\\x80\\x12\\x83KE\\x000\\x8aB)\\xfdi1\\xc5 \"\\xc74\\xd2\\x9569\\xa4\\xdb@\\xc8\\xbea\\xd0\\x9aQ,\\x80rsN+I\\xb6\\x80\\x03rz\\x14\\xcd\\x1fhA\\xd5H\\xa4)L)\\xedH\\t\\xbe\\xd1\\t\\xeb\\x9a<\\xe8\\x7f\\xbdU\\xf6SL~\\xd4\\x01a\\xa5\\xb6n\\xad\\xc5\"\\xcbl\\x83\\x83\\x8f\\xc2\\xaa\\x94<\\xf1G\\x97@\\xcbF\\xf2\\xdcz\\xfeT\\xd3\\x7f\\x0fe\\'\\xf0\\xaa\\xc6:o\\x97\\xcd\\x00Nu\\x05\\xed\\x11\\xa66\\xa1/\\xf0\\xa2\\x8a\\x8f\\xcb\\xf6\\xa5\\xf2\\xb8\\xe9@\\rk\\xcb\\x96\\xfe<}*\\x072I\\xf7\\x9d\\x8f\\xd6\\xac\\xf9~\\xd4\\xbe]\\x00S\\xf2sN\\x10\\x8fJ\\xb6#\\xe6\\x94%\\x00U\\x11S\\xc4~\\xd5`GN\\xd9\\xed@\\x15\\xc4~\\xd4\\xf1\\x1f\\xb5N\\x13\\x8a]\\x94\\x01\\x08\\x8f\\xda\\x9e\\x12\\xa5\\xdb\\x8av\\xde(\\x020\\x9cS\\x82\\xd4\\x80S\\xb1\\xedN\\xc2\\xb9\\x18\\\\S\\xc0\\xe2\\x94\\x0e)E\\x00 \\x14\\xe0(\\xc5-\\x02\\x0cQ\\x8a^\\xf4b\\x80\\nZAK\\xda\\x98\\x01\\xe9E \\xa5\\xa0A\\xcd-\\x14\\x9d\\xa9\\x80\\xb4\\x83\\x83J\\r\\x18\\xef\\x8a\\x06\\x1d\\xe8\\xa4\\xe34\\x1a\\x04-- \\xa0\\xd0\\x02\\xd2\\nZLP0\\xa2\\x8aJ\\x04|\\x8fE\\x14U\\x08\\xda\\xf0\\x8c\\xdeG\\x8bt\\xb7\\xf5\\x9dS\\xfe\\xfa\\xf9\\x7f\\xad{\\xdd|\\xe9\\xa6M\\xf6}Z\\xce|\\xe3\\xcb\\x9d\\x1f\\xf2`k\\xe8\\xbaLhJ)i)\\x0cJ)i(\\x10RR\\xd1@\\ra\\x91H\\x17\\x8ez\\xd3\\xe8\\xa0\\x04\\xa44\\xb4P\\x02\\xd8\\x1d\\xba\\xb0?\\xde\\x88\\x8f\\xd6\\xba%\\xe9\\\\\\xdc\\x07f\\xa7l}w\\x03\\xf9WH\\xbd*F;\\x14QI@\\x0bE\\x14\\xb4\\x00QE\\x14\\xc0ZJ(&\\x80\\x13\\xa8\\xebK\\xe8)\\xbd\\x0e{S\\x8d\\x16\\x00\\xa4\\xefE\\x14\\xc4\\x14v\\xa2\\x8a\\x00JCKH@\\xa5`\\x13\\x14R\\xd1\\xd6\\x81\\x89\\x8aLS\\xa96\\xf3@\\r\\xc5!Zy\\x14R\\x02=\\xb4\\xd2\\xb55!\\x14\\x05\\xc86f\\x8d\\xbc\\xd4\\xa4R\\xe2\\x81\\xdc\\x83e\\x1bjb\\xb4\\x9bx\\xa0.E\\xb2\\x8d\\x95.\\xda\\\\P\\x04;)v\\xd4\\xb8\\xa5\\xc5\\x01r\\x1d\\xb4\\xbbj]\\xa2\\x8cP+\\x91l\\xc5;mI\\x8a1@\\x0c\\xdbK\\x8ei\\xf8\\xcd\\x18\\xa0.7\\x14\\xa0S\\xa8\\xa0\\x04\\xc5-\\x18\\xa5\\xc50\\x13\\xb5-\\x14\\n@-\\x14Q\\xda\\x98\\x0b\\x8a\\r\\x14\\x94X\\x05\\xc5\\x14Q\\xd2\\x98\\x05-%\\x14\\x08S\\xd2\\x8a)3@\\x0bIJ(\\xa0\\x04\\xc5\\x04QF{\\xd0\\x01KH(\\xa0\\x05\\xcd\\x1d{\\xd3I\\xa074\\x00\\xec\\x8cRRd\\x93K@\\x1f#\\xd1E\\x15B\\x0e\\x95\\xf4}\\xac\\xbfh\\xb4\\x86a\\xff\\x00-#W\\xfc\\xc6k\\xe7\\n\\xfa\\x07\\xc33y\\xfe\\x17\\xd2\\xe4\\xceI\\xb5\\x8c\\x1f\\xa8P\\x0f\\xf2\\xa4\\xc6\\x8d:\\x05-\\x14\\x86%%/4P\\x02QE\\x14\\x08JZ)(\\x00\\xa2\\x96\\x8a\\x00\\x88\\x9d\\xb7v\\xcc?\\xe7\\xa8\\x1f\\x9dt\\xa9\\xd3\\xde\\xb9\\x99\\xce\\xdd\\x8d\\xfd\\xd7S\\xfa\\xd7J\\x87\\x81I\\x8c\\x97<RRf\\x974\\x80:\\xd2\\xd2f\\x81@\\x0e\\xa4\\xa2\\x8c\\xd3@\\x14t\\xa2\\x8f\\xa8\\xa6\\x01E\\x07\\xa5\"\\xfd\\xd1@\\x85\\xa2\\x8a(\\x00\\xa2\\x8aZ\\x00JCKE\\x007\\xfaR\\xf7\\xa2\\x8a\\x00);\\xd2\\xd1@\\xc4\\xefE-\\'\\xb5 \\n(\\xc5\\x14\\x00\\x94\\x98\\xa7Q\\xdf\\x8a\\x00JJv)1@\\x08E\\x1dzR\\xd1@\\tE;\\x14\\x94\\x00\\x94\\x01KK@\\t\\x8a1K\\x8aZ\\x00J)qE\\x00&)qF9\\xa5\\xcd\\x00%\\x14\\xa2\\x8a`\\x14QE+\\x00R\\xd2QLA\\xda\\x81A\\xa2\\x81\\x8bE \\xa5\\xa0\\x02\\x83GN\\xf4\\x13@\\x00\\xa2\\x8a\\x05\\x02\\x12\\x8c\\xd0h\\xa0\\x05\\xa4\\xa2\\x92\\x81\\x8b\\x9e)i\\x05-\\x02\\x0e\\xb4\\x98\\x14\\xa6\\x8a\\x00J\\r\\x14P\\x07\\xc9\\x14QEP\\x82\\xbd\\xc7\\xc03y\\xde\\x0b\\xb0=\\xd0:\\x1f\\xc1\\xdb\\x1f\\xa6+\\xc3\\xab\\xd8~\\x18M\\xe6xU\\xd3?\\xea\\xae]\\x7fE?\\xd6\\x93\\x1a;J(\\xa2\\x90\\x05%\\x14P\\x02QE\\x14\\x00QIK@\\x05\\x14Q@\\x10\\\\\\xff\\x00\\xa8c\\xe9\\x83\\xf9\\x1a\\xe8\\xed\\xdbt*}@\\xaev\\xe0f\\t\\x07\\xaa\\x9a\\xde\\xb1`\\xf6\\x91\\x1fU\\x14\\x98\\xcb\"\\x96\\x90R\\xe7\\xd2\\x80\\x17\\x14\\n(\\xa0\\x05\\xa2\\x92\\x8ab\\x16\\x8a;u\\xa4\\xc5\\x00\\x04d\\xe4\\xf6\\xa5\\xa4\\xefFh\\x00\\xa5\\xa4\\xcd\\x14\\x00\\xa6\\x8aJ(\\x00\\xa5\\xa2\\x8c\\xd0\\x02R\\xd1I\\xed@\\x05\\x14\\x94\\xb4\\x00RR\\xd2P0\\xa5\\xa0RR\\x01i\\r\\x14w\\xa6\\x01E\\x14s\\xc6)X\\x02\\x83\\xc5-!\\x14\\x00QG_\\xa5-1\\tE\\x1e\\xde\\x94\\xb4\\x0c(\\xa2\\x8a\\x00)i2){P\\x02R\\xd1E\\x02\\n(4P1{\\xd2QE\\x02\\x0e\\x9d\\xa8\\xa34P\\x01E\\x14P0\\xa5\\xa4\\xa5\\xa0\\x04&\\x96\\x92\\x8a\\x00Z):\\xd1@\\x05\\x14Q@\\x82\\x8a(\\xa0`)i(\\xa0\\x05\\xa2\\x934w\\xa0B\\xd1\\xda\\x8aJ\\x00\\xf9\"\\x8a(\\xaa\\x10W\\xa8\\xfc(\\x9bu\\x8e\\xa5\\x07\\xf7$G\\xfc\\xc1\\x1f\\xfb-yuz\\x17\\xc2\\x89\\xb6\\xeaz\\x8c\\x19\\xfb\\xf0\\xab\\xfeM\\x8f\\xfd\\x9a\\x86\\x07\\xa9\\xd1E\\x15#\\x12\\x96\\x92\\x8a\\x00)(4P\\x02R\\xd1E\\x00\\x14QE\\x001\\xf9S\\xf4\\xad]%\\xb3\\xa6\\xc2;\\x84\\x02\\xb2\\xc8\\xc8\\xab\\xfa3f\\xc5G\\xa1#\\xf5\\xa4\\xc6jq\\xc0\\xa5\\xa4\\xa3\\xbd\\x00/Z(\\xa2\\x98\\x0b\\x9aJ);\\xd0!\\xd9\\xa34\\x94P\\x02\\xd1\\xefI\\x9aN\\xb4\\x00\\xa3\\x8aE`\\xd9\\xc6x\\xa5Q\\x81K@\\x05\\x14Q@\\x0bIHI\\xc8\\xc5\\x19\\xa0\\x05\\xa3\\xbesI@\\xa0\\x054\\x94\\x03\\x91\\x9cc\\xebG4\\x00\\xb4\\x94Q\\xda\\x80\\x0e\\x94\\x9dO\\xb5\\x18\\xe7\\xad\\x1d\\xb8\\xa0b\\x9a(\\xa3<P!\\x0f4\\xb4f\\x8a\\x00Z(\\xa2\\x80\\n(\\xa2\\x80\\n(\\xedE\\x00\\x14QG\\xb5\\x00\\x14\\xa2\\x92\\x8a\\x00Z(\\xa2\\x80\\x03IKE\\x00\\x14QE\\x03\\n(\\xa2\\x80\\nJ)h\\x00\\xcd\\x14Q@\\x05\\x14Q@\\x07j(\\xa2\\x80\\n3\\x93E\\x14\\x00q@\\xefE%\\x00-\\x14Q@\\x05\\x19\\xa2\\x8f\\xc2\\x80\\nJZJ\\x00\\xf9&\\x8a(\\xaa$+\\xb2\\xf8e7\\x95\\xe2\\xc2\\x9f\\xf3\\xd6\\xdd\\xd3\\xf5\\r\\xfd+\\x8d\\xae\\x8b\\xc0\\x93y\\x1e3\\xd3\\x9b<32\\x1f\\xc5\\x08\\xa0\\x0fs\\xa2\\x8aJ\\x92\\x834QE\\x02\\n(\\xa2\\x81\\x89\\xde\\x8a(\\xa0\\x02\\x92\\x96\\x92\\x81\\x01\\xabZ1\\xc4R\\xaf\\xf7d5V\\xaci\\x07\\x12\\xdc/\\xfb@\\xd2c6F1K\\x9aA\\xd2\\x8a\\x04\\x19\\xe7\\xad8\\x9am/j`.i\\x08\\xe74Q@\\x01\\xcfj\\x00\\xc0\\xfcih\\xcd\\x00\\x14\\x9d(\\xf7\\xa3<\\xd0\\x01\\x9e\\xbc\\xe2\\x94\\x10E&=h\\xc0\\xa0\\x05\\xea(\\xa3\\xb5\\x14\\x00QE%\\x00-\\x02\\x92\\x974\\x00f\\x8a(\\xa0\\x03\\x9c\\xd1\\x9c\\x9a\\x05\\x14\\x00b\\x8a(\\xa0\\x02\\x8a(\\xa0\\x02\\x92\\x8a(\\x01h\\xa3\\xbd\\x14\\x00R\\xd2f\\x8c\\xf3@\\x05\\x14\\xb4\\x94\\x00\\xb4Q\\xd0Q@\\x05\\x14\\x94\\xb4\\x00QE\\x14\\x00R\\xd2R\\xd0\\x01E\\x14P0\\xa4\\xa5\\xa4<\\x0c\\x93@\\x05\\x15N}_L\\xb5\\xcf\\xda5\\x1bHq\\xff\\x00=\\'U\\xfef\\xb3\\'\\xf1\\xc7\\x86-\\xb3\\xbf\\\\\\xb3?\\xf5\\xceM\\xff\\x00\\xfa\\x0eh\\x03~\\x96\\xb8\\xb9\\xfe)\\xf8N\\x1c\\xec\\xbe\\x96o\\xfa\\xe7n\\xff\\x00\\xd4\\n\\xcc\\x9f\\xe3.\\x82\\x99\\x10\\xd9j\\x12\\x9fR\\x88\\xa3\\xff\\x00B\\xa0G\\xa3R\\xf6\\xaf%\\x9f\\xe3b\\x0c\\x8b}\\t\\x8f\\xbc\\x978\\xfd\\x02\\xff\\x00Z\\xcc\\x9f\\xe3F\\xb4\\xff\\x00\\xf1\\xef\\xa7XG\\xfe\\xfe\\xf7\\xfe\\xa2\\x9d\\x82\\xe7\\xb6\\xe6\\x8a\\xf9\\xfe\\x7f\\x8b\\x1e+\\x9b>]\\xcd\\xbc\\x1f\\xf5\\xce\\x05?\\xfa\\x16k2\\x7f\\x1fx\\xaa\\xe7;\\xf5\\xbb\\x91\\x9f\\xf9\\xe7\\x84\\xff\\x00\\xd0@\\xa2\\xc1s\\xe9:\\x8aY\\xe1\\x80fi\\x925\\xf5v\\x03\\xf9\\xd7\\xcb\\xb3\\xeb\\xda\\xc5\\xd6~\\xd1\\xaa\\xdfK\\x9f\\xef\\xdc;\\x7f3T\\x19\\x99\\xd8\\xb31bz\\x92sE\\x82\\xe7\\xd3\\xf7\\x1e)\\xd0-\\xb3\\xe7kZz\\x11\\xdb\\xed\\t\\x9f\\xcb9\\xac\\xc9\\xfe#\\xf8N\\xdf;\\xb5\\x88\\xd8\\xfaG\\x1b\\xbf\\xf2\\x15\\xf3\\x95\\x14X.{\\xd4\\xff\\x00\\x17\\xbc1\\x0e|\\xbf\\xb6\\xcd\\xff\\x00\\\\\\xe1\\x03\\xff\\x00B\"\\xb3\\'\\xf8\\xd5\\xa6\\xae~\\xcf\\xa4]I\\xff\\x00]$T\\xfeY\\xaf\\x18\\xa2\\x8b\\x05\\xcfT\\x9f\\xe3e\\xdbg\\xec\\xfa,\\x11\\xff\\x00\\xd7I\\xcb\\xff\\x00 +2\\x7f\\x8c^$\\x97\"8t\\xf8G\\xaa\\xc4\\xc4\\xfe\\xack\\xcf\\xa8\\xa6+\\x9dt\\xff\\x00\\x13|[>G\\xf6\\xaf\\x96\\x0fh\\xe1\\x8c~\\xbbsYw\\x1e/\\xf1\\x1d\\xce|\\xddr\\xff\\x00\\x07\\xa8Y\\xd9G\\xe4\\x08\\xacZ(\\x00\\xa2\\x8a(\\x00\\xad?\\x0e\\xcd\\xf6\\x7f\\x12\\xe9\\x92\\xe7\\x01n\\xa3\\xcf\\xd3p\\xcdfT\\x90Ja\\xb8\\x8eQ\\xd5\\x180\\xfc\\x0eh\\x03\\xe9\\x1a)\\x01\\x0c\\x01\\x07 \\x8c\\x83KRP\\x94R\\xd2P\\x01E\\x14P\\x01IE%\\x00-\\x18\\xa4\\xa5\\xa0\\x045&\\x9a\\xdbo\\xe5N\\xe5A\\xa8\\xe9\\xf6<j_\\xef&(`n\\x8e\\x94\\xbd\\xa9\\xaax\\xa7\\n@\\x14R\\xd2\\x1a\\x00Z(\\xa2\\x98\\x834QI\\xf4\\xa0b\\xd1I\\x9aZ\\x00(\\xa2\\x8a\\x04\\x14\\xb4\\x9e\\x94P\\x02\\xf7\\xa4\\xa2\\x8a\\x00(\\xe2\\x8a(\\x00\\xa5\\xa4\\xa2\\x80\\x16\\x8a@h\\xe8(\\x00\\xa34Q@\\x0b\\xd6\\x90\\xd1E\\x00\\x14\\xb4\\xdfs\\xda\\xa9\\xcf\\xaci\\x96\\xb9\\xfbF\\xa5i\\x0f\\xfdt\\x9dW\\xf9\\x9a\\x00\\xbdEs\\xf3\\xf8\\xe7\\xc2\\xf6\\xe0\\xef\\xd6\\xec\\xce?\\xe7\\x9b\\xef\\xff\\x00\\xd0sY\\x97\\x1f\\x14\\xfc\\'\\x08!o\\xa5\\x9b\\x1f\\xf3\\xce\\xdd\\xff\\x00\\xa8\\x14\\x01\\xd9\\xd1^sq\\xf1\\x97BL\\x88,u\\tH\\xeeU\\x14\\x1f\\xfcx\\xd6d\\xff\\x00\\x1b\\x17\\x91o\\xa1\\x93\\xe8\\xd2\\\\\\xe3\\xf4\\x0b\\xfdi\\x81\\xeb4w\\xaf\\x13\\xb8\\xf8\\xcd\\xad>|\\x8d:\\xc2?\\xf7\\xc3\\xb9\\xff\\x00\\xd0\\x85fO\\xf1[\\xc5sge\\xd4\\x10\\x7f\\xd7;u?\\xfa\\x16h\\xb0\\x1f@Q_6O\\xe3\\xdf\\x14\\xdc\\xe7~\\xb7r3\\xff\\x00<\\xc8O\\xfd\\x04\\n\\xcc\\x9f]\\xd5\\xee\\xb3\\xf6\\x8dV\\xfa\\\\\\xff\\x00\\xcfK\\x87o\\xe6h\\xb0\\x1fP\\xcbq\\x04\\x033M\\x1cc\\xd5\\xdc\\x0f\\xe7Y\\xb3\\xf8\\xa7@\\xb6\\xcf\\x9d\\xadi\\xea}>\\xd0\\x84\\xfeY\\xcd|\\xc2\\xccY\\x8b1$\\x9e\\xa4\\x9aJ,\\x07\\xd1\\x93\\xfcG\\xf0\\x95\\xbf\\xde\\xd6#c\\xe9\\x1cN\\xff\\x00\\xc9k2\\x7f\\x8b\\xbe\\x19\\x87;\\x05\\xec\\xff\\x00\\xf5\\xce\\x10?\\xf4\"+\\xc1\\xa8\\xa2\\xc1s\\xd9\\xa7\\xf8\\xd5\\xa7.~\\xcf\\xa4]I\\xff\\x00]$T\\xfeY\\xac\\xc9\\xfe5\\xde6~\\xcf\\xa2\\xc1\\x1f\\xa7\\x991\\x7f\\xe4\\x05ye\\x14\\xec#\\xd0.>0\\xf8\\x92\\\\\\xf9qXB?\\xd8\\x89\\x89\\xfdX\\xd6d\\xff\\x00\\x13<[>G\\xf6\\xa9\\x8d}#\\x865\\xfdv\\xe6\\xb9*(\\x03j\\x7f\\x17x\\x8e\\xe7>n\\xb9\\xa8\\x10{-\\xc3(\\xfc\\x81\\xac\\xc9\\xefn\\xae\\x7f\\xe3\\xe2\\xe6i\\x7f\\xeb\\xa4\\x85\\xbf\\x9dAE\\x00\\x14QE\\x00\\x14QE\\x00\\x14QE\\x00\\x14QE\\x00\\x14QE\\x00\\x14QE\\x00\\x14QE\\x00\\x14QE\\x00\\x14QE\\x00\\x7f\\xff\\xd9'>,\n 'image/filename': <tf.Tensor: shape=(), dtype=string, numpy=b'IMG_1762_JPG.rf.0b75b278cac9fe802f09da6b210a7be1.jpg'>,\n 'image/format': <tf.Tensor: shape=(), dtype=string, numpy=b'jpeg'>,\n 'image/height': <tf.Tensor: shape=(), dtype=int64, numpy=640>,\n 'image/object/bbox/xmax': <tf.Tensor: shape=(3,), dtype=float32, numpy=array([0.353125 , 0.38125  , 0.4140625], dtype=float32)>,\n 'image/object/bbox/xmin': <tf.Tensor: shape=(3,), dtype=float32, numpy=array([0.346875 , 0.3734375, 0.4046875], dtype=float32)>,\n 'image/object/bbox/ymax': <tf.Tensor: shape=(3,), dtype=float32, numpy=array([0.509375 , 0.6796875, 0.709375 ], dtype=float32)>,\n 'image/object/bbox/ymin': <tf.Tensor: shape=(3,), dtype=float32, numpy=array([0.5046875, 0.6734375, 0.7      ], dtype=float32)>,\n 'image/object/class/label': <tf.Tensor: shape=(3,), dtype=int64, numpy=array([2, 2, 2])>,\n 'image/object/class/text': <tf.Tensor: shape=(3,), dtype=string, numpy=array([b'paint stain', b'paint stain', b'paint stain'], dtype=object)>,\n 'image/width': <tf.Tensor: shape=(), dtype=int64, numpy=640>}"},"metadata":{}}]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport numpy as np\nimport tensorflow as tf\n\n%matplotlib inline\n\nN = 16\nfig, ax = plt.subplots(int(np.sqrt(N)), int(np.sqrt(N)), figsize=(12,12))\nax = ax.flatten()\n\nfor idx in range(N):\n    image_features = next(iterator)\n    image_raw = image_features['image/encoded']\n    image = tf.image.decode_jpeg(image_raw).numpy()\n    classes = image_features['image/object/class/label'].numpy()\n    boxes = np.stack([\n        image_features['image/object/bbox/xmin'],\n        image_features['image/object/bbox/ymin'],\n        image_features['image/object/bbox/xmax'],\n        image_features['image/object/bbox/ymax'],\n    ], -1)\n\n    plot_img_with_boxes(image, \n                        classes, \n                        boxes,\n                        axis=ax[idx])\n    \nfig.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-24T12:01:38.45598Z","iopub.execute_input":"2024-07-24T12:01:38.456394Z","iopub.status.idle":"2024-07-24T12:01:40.195412Z","shell.execute_reply.started":"2024-07-24T12:01:38.456346Z","shell.execute_reply":"2024-07-24T12:01:40.193863Z"},"trusted":true},"execution_count":9,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)","\u001b[0;32m<ipython-input-9-d1f59e7b948b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m     \u001b[0mimage_features\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     13\u001b[0m     \u001b[0mimage_raw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mimage_features\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'image/encoded'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     14\u001b[0m     \u001b[0mimage\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdecode_jpeg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimage_raw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnumpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'iterator' is not defined"],"ename":"NameError","evalue":"name 'iterator' is not defined","output_type":"error"},{"output_type":"display_data","data":{"text/plain":"<Figure size 864x864 with 16 Axes>","image/png":"iVBORw0KGgoAAAANSUhEUgAAAs4AAAKvCAYAAAB6REnTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdX4yl910f/vfnt4ulYv6E1gsF22mNZDCLlKBkMGlaihEC1kbIQuLCDmpEFGllKUZcVbFUFS5yxQUSQjFYq8iyuIlvSMEgB7dSBZFw3Xpc2Y6d1NHWgXjZSN6QKBUg1XXy+V3MMRzGszvfmXnO7HnOvF7SyPM8z/ec89nj9zx6z5kz81R3BwAAuLb/73oPAAAAc6A4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADNi3OFfVo1X1elW9dJXjVVW/XVUXq+rFqnrP9GPCwckucyW7zJHcchKMvOL8WJJz1zh+d5LbFx/nk/zu0ceCSTwW2WWeHovsMj+PRW7ZcPsW5+7+TJKvXmPJvUl+r3c8k+QdVfW9Uw0IhyW7zJXsMkdyy0lweoL7uDnJa0vblxb7vrx7YVWdz853mbnxxhvfe8cdd0zw8Jxkzz333Fe6+8whby67XBdHzG0iu1wnzrnM1QTn3STTFOfaY9+e1/Hu7gtJLiTJ1tZWb29vT/DwnGRV9ZdHufke+2SXlTtibhPZ5TpxzmWuJjjvJpnmr2pcSnLr0vYtSS5PcL+warLLXMkucyS3zN4UxfmJJB9c/Lbs+5J8vbvf9mMXWEOyy1zJLnMkt8zevm/VqKpPJrkryU1VdSnJryf5liTp7keSPJnkniQXk/xdkg+talg4CNllrmSXOZJbToJ9i3N337/P8U7ykckmgonILnMlu8yR3HISuHIgAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYMFScq+pcVb1SVRer6qE9jn9nVf1RVb1QVS9X1YemHxUOTnaZI7llrmSXTbdvca6qU0keTnJ3krNJ7q+qs7uWfSTJ57r73UnuSvKbVXXDxLPCgcgucyS3zJXschKMvOJ8Z5KL3f1qd7+R5PEk9+5a00m+vaoqybcl+WqSNyedFA5OdpkjuWWuZJeNN1Kcb07y2tL2pcW+ZR9P8kNJLif5bJJf7e5v7r6jqjpfVdtVtX3lypVDjgzDZJc5miy3iexyrJxz2Xgjxbn22Ne7tn82yfNJvi/JjyT5eFV9x9tu1H2hu7e6e+vMmTMHHhYOSHaZo8lym8gux8o5l403UpwvJbl1afuW7HynuOxDST7VOy4m+WKSO6YZEQ5NdpkjuWWuZJeNN1Kcn01ye1XdtngD/31Jnti15ktJfipJqup7kvxgklenHBQOQXaZI7llrmSXjXd6vwXd/WZVPZjkqSSnkjza3S9X1QOL448k+ViSx6rqs9n5Uc1Hu/srK5wb9iW7zJHcMleyy0mwb3FOku5+MsmTu/Y9svT55SQ/M+1ocHSyyxzJLXMlu2w6Vw4EAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBgwFBxrqpzVfVKVV2sqoeusuauqnq+ql6uqj+bdkw4HNlljuSWuZJdNt3p/RZU1akkDyf56SSXkjxbVU909+eW1rwjye8kOdfdX6qq717VwDBKdpkjuWWuZJeTYOQV5zuTXOzuV7v7jSSPJ7l315oPJPlUd38pSbr79WnHhEORXeZIbpkr2WXjjRTnm5O8trR9abFv2Q8k+a6q+tOqeq6qPrjXHVXV+ararqrtK1euHG5iGCe7zNFkuU1kl2PlnMvGGynOtce+3rV9Osl7k/xckp9N8h+r6gfedqPuC9291d1bZ86cOfCwcECyyxxNlttEdjlWzrlsvH3f45yd7xhvXdq+JcnlPdZ8pbv/NsnfVtVnkrw7yRcmmRIOR3aZI7llrmSXjTfyivOzSW6vqtuq6oYk9yV5YteaP0zy41V1uqq+NcmPJfn8tKPCgckucyS3zJXssvH2fcW5u9+sqgeTPJXkVJJHu/vlqnpgcfyR7v58Vf1JkheTfDPJJ7r7pVUODvuRXeZIbpkr2eUkqO7dbz86HltbW729vX1dHpvNUVXPdffWcT6m7HJU1yO3iexydM65zNVU2XXlQAAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYMFeeqOldVr1TVxap66BrrfrSqvlFVvzjdiHB4ssscyS1zJbtsun2Lc1WdSvJwkruTnE1yf1Wdvcq630jy1NRDwmHILnMkt8yV7HISjLzifGeSi939ane/keTxJPfuse5Xkvx+ktcnnA+OQnaZI7llrmSXjTdSnG9O8trS9qXFvr9XVTcn+YUkj0w3GhyZ7DJHcstcyS4bb6Q41x77etf2byX5aHd/45p3VHW+qraravvKlSujM8JhyS5zNFluE9nlWDnnsvFOD6y5lOTWpe1bklzetWYryeNVlSQ3Jbmnqt7s7j9YXtTdF5JcSJKtra3dX0wwNdlljibLbSK7HCvnXDbeSHF+NsntVXVbkr9Kcl+SDywv6O7b3vq8qh5L8sd7ncDhmMkucyS3zJXssvH2Lc7d/WZVPZid3349leTR7n65qh5YHPc+JdaS7DJHcstcyS4nwcgrzunuJ5M8uWvfnl8A3f3LRx8LpiG7zJHcMleyy6Zz5UAAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBgqDhX1bmqeqWqLlbVQ3sc/6WqenHx8XRVvXv6UeHgZJc5klvmSnbZdPsW56o6leThJHcnOZvk/qo6u2vZF5P8RHe/K8nHklyYelA4KNlljuSWuZJdToKRV5zvTHKxu1/t7jeSPJ7k3uUF3f10d39tsflMklumHRMORXaZI7llrmSXjTdSnG9O8trS9qXFvqv5cJJP73Wgqs5X1XZVbV+5cmV8Sjgc2WWOJsttIrscK+dcNt5Ica499vWeC6t+MjtfCB/d63h3X+jure7eOnPmzPiUcDiyyxxNlttEdjlWzrlsvNMDay4luXVp+5Ykl3cvqqp3JflEkru7+6+nGQ+ORHaZI7llrmSXjTfyivOzSW6vqtuq6oYk9yV5YnlBVb0zyaeS/Lvu/sL0Y8KhyC5zJLfMleyy8fZ9xbm736yqB5M8leRUkke7++WqemBx/JEkv5bknyX5napKkje7e2t1Y8P+ZJc5klvmSnY5Cap7z7cfrdzW1lZvb29fl8dmc1TVc8d90pVdjup65DaRXY7OOZe5miq7rhwIAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAgKHiXFXnquqVqrpYVQ/tcbyq6rcXx1+sqvdMPyocnOwyR3LLXMkum27f4lxVp5I8nOTuJGeT3F9VZ3ctuzvJ7YuP80l+d+I54cBklzmSW+ZKdjkJRl5xvjPJxe5+tbvfSPJ4knt3rbk3ye/1jmeSvKOqvnfiWeGgZJc5klvmSnbZeKcH1tyc5LWl7UtJfmxgzc1Jvry8qKrOZ+c7zCT5v1X10oGmXb2bknzleg+xxDz7+8FrHDsp2V3H/y/rNtO6zXMsuU1k94DWbZ5k/WZyzt2xbv9fzLO/a2V32Ehxrj329SHWpLsvJLmQJFW13d1bA49/bNZtJvPsr6q2r3V4j30bl911mydZv5nWcZ5rHd5j36Fym8juQazbPMn6zeScu2PdZjLP/vbJ7rCRt2pcSnLr0vYtSS4fYg0cN9lljuSWuZJdNt5IcX42ye1VdVtV3ZDkviRP7FrzRJIPLn5b9n1Jvt7db/uRIRwz2WWO5Ja5kl023r5v1ejuN6vqwSRPJTmV5NHufrmqHlgcfyTJk0nuSXIxyd8l+dDAY1849NSrs24zmWd/V53pBGV33eZJ1m+m2cyzwtxe83GvE/Psb91mcs7dsW4zmWd/k8xU3Xu+LQ4AAFjiyoEAADBAcQYAgAErKc5HueTmfrdd0Ty/tJjjxap6uqrevXTsL6rqs1X1/FR/ymRgnruq6uuLx3y+qn5t9LYrnOnfL83zUlV9o6r+6eLYKp6jR6vq9av97c5VZGjdcjs404nOrtyO3fa4s7tuuR2cSXZld+2yu265HZxps7Pb3ZN+ZOcXAv53ku9PckOSF5Kc3bXmniSfzs7fc3xfkv8+etsVzfP+JN+1+Pzut+ZZbP9FkpuO+fm5K8kfH+a2q5pp1/qfT/JfV/UcLe7z3yZ5T5KXrnJ80gytW25lV25Hn591y+665VZ2ZXeu2V233MruzscqXnE+yiU3R247+Tzd/XR3f22x+Ux2/q7kqhzl37iK5+cw93t/kk9O8LhX1d2fSfLVayyZOkPrltuhmU54duV2x7pld91yOzTTim471X3K7snM7rrl9jD3u3HZXUVxvtrlNEfWjNx2FfMs+3B2vjN5Syf5z1X1XO1cAvSoRuf5V1X1QlV9uqp++IC3XdVMqapvTXIuye8v7Z76ORoxdYbWLbejMy07admV22vf56of9yjzLFt1bg8yk+xeney+3Uk75x7ofjc1uyOX3D6oo1xyc/gyshPPs7Ow6iez84Xwb5Z2/+vuvlxV353kv1TV/1p8d7PKef5nkn/R3X9TVfck+YMktw/edlUzveXnk/x5dy9/dzf1czRi6gytW26v9XhvX3gysyu3177PVT/uUebZWXg8uR2dSXavTXaXF57Mc+7oTG/ZyOyu4hXno1xycxWX4hy6z6p6V5JPJLm3u//6rf3dfXnx39eT/KfsvLS/0nm6+/90998sPn8yybdU1U2j/5ZVzLTkvuz6scsKnqMRU2do3XI7OtNJzq7cXvs+V/24R5nnOHM7NJPs7kt2F07wOXdopiWbmd2e8A3avfNm69NJXk1yW/7hzdY/vGvNz+Ufv1H7f4zedkXzvDM7VzF6/679Nyb59qXPn05y7hjm+ef5h4vT3JnkS4vnavLn5yDPe5LvzM77iG5c5XO0dN//Mld/s/+kGVq33Mqu3I4+P+uW3XXLrezK7lyzu265ld3F/U0x8B5D3pPkC9n5bcX/sNj3QJIHFp9XkocXxz+bZOtatz2GeT6R5GtJnl98bC/2f//iiXwhycvHOM+Di8d7ITu/fPD+a932OGZabP9yksd33W5Vz9Enk3w5yf/LzneFH151htYtt7Irt3PN7rrlVnZld67ZXbfcym675DYAAIxw5UAAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAA/YtzlX1aFW9XlUvXeV4VdVvV9XFqnqxqt4z/ZhwcLLLXMkucyS3nAQjrzg/luTcNY7fneT2xcf5JL979LFgEo9FdpmnxyK7zM9jkVs23L7Fubs/k+Sr11hyb5Lf6x3PJHlHVX3vVAPCYckucyW7zJHcchJM8R7nm5O8trR9abEP1p3sMleyyxzJLbN3eoL7qD329Z4Lq85n58czufHGG997xx13TPDwnGTPPffcV7r7zCFvLrtcF0fMbSK7XCfOuczVBOfdJNMU50tJbl3aviXJ5b0WdveFJBeSZGtrq7e3tyd4eE6yqvrLI9xcdrkujpjbRHa5TpxzmasJzrtJpnmrxhNJPrj4bdn3Jfl6d395gvuFVZNd5kp2mSO5Zfb2fcW5qj6Z5K4kN1XVpSS/nuRbkqS7H0nyZJJ7klxM8ndJPrSqYeEgZJe5kl3mSG45CfYtzt19/z7HO8lHJpsIJiK7zJXsMkdyy0ngyoEAADBAcQYAgAGKMwAADFCcAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGDAUHGuqnNV9UpVXayqh/Y4/p1V9UdV9UJVvVxVH5p+VDg42WWO5Ja5kl023b7FuapOJXk4yd1Jzia5v6rO7lr2kSSf6+53J7kryW9W1Q0TzwoHIrvMkdwyV7LLSTDyivOdSS5296vd/UaSx5Pcu2tNJ/n2qqok35bkq0nenHRSODjZZY7klrmSXTbeSHG+OclrS9uXFvuWfTzJDyW5nOSzSX61u7+5+46q6nxVbVfV9pUrVw45MgyTXeZostwmssuxcs5l440U59pjX+/a/tkkzyf5viQ/kuTjVfUdb7tR94Xu3ururTNnzhx4WDgg2WWOJsttIrscK+dcNt5Icb6U5Nal7Vuy853isg8l+VTvuJjki0numGZEODTZZY7klrmSXTbeSHF+NsntVXXb4g389yV5YteaLyX5qSSpqu9J8oNJXp1yUDgE2WWO5Ja5kl023un9FnT3m1X1YJKnkpxK8mh3v1xVDyyOP5LkY0keq6rPZudHNR/t7q+scG7Yl+wyR3LLXMkuJ8G+xTlJuvvJJE/u2vfI0ueXk/zMtKPB0ckucyS3zJXssulcORAAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABQ8W5qs5V1StVdbGqHrrKmruq6vmqermq/mzaMeFwZJc5klvmSnbZdKf3W1BVp5I8nOSnk1xK8mxVPdHdn1ta844kv5PkXHd/qaq+e1UDwyjZZY7klrmSXU6CkVec70xysbtf7e43kjye5N5daz6Q5FPd/aUk6e7Xpx0TDkV2mSO5Za5kl403UpxvTvLa0valxb5lP5Dku6rqT6vquar64F53VFXnq2q7qravXLlyuIlhnOwyR5PlNpFdjpVzLhtvpDjXHvt61/bpJO9N8nNJfjbJf6yqH3jbjbovdPdWd2+dOXPmwMPCAckuczRZbhPZ5Vg557Lx9n2Pc3a+Y7x1afuWJJf3WPOV7v7bJH9bVZ9J8u4kX5hkSjgc2WWO5Ja5kl023sgrzs8mub2qbquqG5Lcl+SJXWv+MMmPV9XpqvrWJD+W5PPTjgoHJrvMkdwyV7LLxtv3FefufrOqHkzyVJJTSR7t7per6oHF8Ue6+/NV9SdJXkzyzSSf6O6XVjk47Ed2mSO5Za5kl5Ogune//eh4bG1t9fb29nV5bDZHVT3X3VvH+Ziyy1Fdj9wmssvROecyV1Nl15UDAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGDBUnKvqXFW9UlUXq+qha6z70ar6RlX94nQjwuHJLnMkt8yV7LLp9i3OVXUqycNJ7k5yNsn9VXX2Kut+I8lTUw8JhyG7zJHcMleyy0kw8orznUkudver3f1GkseT3LvHul9J8vtJXp9wPjgK2WWO5Ja5kl023khxvjnJa0vblxb7/l5V3ZzkF5I8Mt1ocGSyyxzJLXMlu2y8keJce+zrXdu/leSj3f2Na95R1fmq2q6q7StXrozOCIclu8zRZLlNZJdj5ZzLxjs9sOZSkluXtm9JcnnXmq0kj1dVktyU5J6qerO7/2B5UXdfSHIhSba2tnZ/McHUZJc5miy3iexyrJxz2XgjxfnZJLdX1W1J/irJfUk+sLygu2976/OqeizJH+91AodjJrvMkdwyV7LLxtu3OHf3m1X1YHZ++/VUkke7++WqemBx3PuUWEuyyxzJLXMlu5wEI684p7ufTPLkrn17fgF09y8ffSyYhuwyR3LLXMkum86VAwEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBggOIMAAADFGcAABigOAMAwICh4lxV56rqlaq6WFUP7XH8l6rqxcXH01X17ulHhYOTXeZIbpkr2WXT7Vucq+pUkoeT3J3kbJL7q+rsrmVfTPIT3f2uJB9LcmHqQeGgZJc5klvmSnY5CUZecb4zycXufrW730jyeJJ7lxd099Pd/bXF5jNJbpl2TDgU2WWO5Ja5kl023khxvjnJa0vblxb7rubDST6914GqOl9V21W1feXKlfEp4XBklzmaLLeJ7HKsnHPZeCPFufbY13surPrJ7HwhfHSv4919obu3unvrzJkz41PC4cguczRZbhPZ5Vg557LxTg+suZTk1qXtW5Jc3r2oqt6V5BNJ7u7uv55mPDgS2WWO5Ja5kl023sgrzs8mub2qbquqG5Lcl+SJ5QVV9c4kn0ry77r7C9OPCYciu8yR3DJXssvG2/cV5+5+s6oeTPJUklNJHu3ul6vqgcXxR5L8WpJ/luR3qipJ3uzurdWNDfuTXeZIbpkr2eUkqO493360cltbW729vX1dHpvNUVXPHfdJV3Y5quuR20R2OTrnXOZqquy6ciAAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBggOIMAAADhopzVZ2rqleq6mJVPbTH8aqq314cf7Gq3jP9qHBwssscyS1zJbtsun2Lc1WdSvJwkruTnE1yf1Wd3bXs7iS3Lz7OJ/ndieeEA5Nd5khumSvZ5SQYecX5ziQXu/vV7n4jyeNJ7t215t4kv9c7nknyjqr63olnhYOSXeZIbpkr2WXjnR5Yc3OS15a2LyX5sYE1Nyf58vKiqjqfne8wk+T/VtVLB5p29W5K8pXrPcQS8+zvB69x7KRkdx3/v6zbTOs2z7HkNpHdA1q3eZL1m8k5d8e6/X8xz/6uld1hI8W59tjXh1iT7r6Q5EKSVNV2d28NPP6xWbeZzLO/qtq+1uE99m1cdtdtnmT9ZlrHea51eI99h8ptIrsHsW7zJOs3k3PujnWbyTz72ye7w0beqnEpya1L27ckuXyINXDcZJc5klvmSnbZeCPF+dkkt1fVbVV1Q5L7kjyxa80TST64+G3Z9yX5ene/7UeGcMxklzmSW+ZKdtl4+75Vo7vfrKoHkzyV5FSSR7v75ap6YHH8kSRPJrknycUkf5fkQwOPfeHQU6/Ous1knv1ddaYTlN11mydZv5lmM88Kc3vNx71OzLO/dZvJOXfHus1knv1NMlN17/m2OAAAYIkrBwIAwADFGQAABqykOB/lkpv73XZF8/zSYo4Xq+rpqnr30rG/qKrPVtXzU/0pk4F57qqqry8e8/mq+rXR265wpn+/NM9LVfWNqvqni2OreI4erarXr/a3O1eRoXXL7eBMJzq7cjt22+PO7rrldnAm2ZXdtcvuuuV2cKbNzm53T/qRnV8I+N9Jvj/JDUleSHJ215p7knw6O3/P8X1J/vvobVc0z/uTfNfi87vfmmex/RdJbjrm5+euJH98mNuuaqZd638+yX9d1XO0uM9/m+Q9SV66yvFJM7RuuZVduR19ftYtu+uWW9mV3blmd91yK7s7H6t4xfkol9wcue3k83T30939tcXmM9n5u5KrcpR/4yqen8Pc7/1JPjnB415Vd38myVevsWTqDK1bbodmOuHZldsd65bddcvt0Ewruu1U9ym7JzO765bbw9zvxmV3FcX5apfTHFkzcttVzLPsw9n5zuQtneQ/V9VztXMJ0KManedfVdULVfXpqvrhA952VTOlqr41ybkkv7+0e+rnaMTUGVq33I7OtOykZVdur32fq37co8yzbNW5PchMsnt1svt2J+2ce6D73dTsjlxy+6COcsnN4cvITjzPzsKqn8zOF8K/Wdr9r7v7clV9d5L/UlX/a/HdzSrn+Z9J/kV3/01V3ZPkD5LcPnjbVc30lp9P8ufdvfzd3dTP0YipM7Ruub3W47194cnMrtxe+z5X/bhHmWdn4fHkdnQm2b022V1eeDLPuaMzvWUjs7uKV5yPcsnNVVyKc+g+q+pdST6R5N7u/uu39nf35cV/X0/yn7Lz0v5K5+nu/9Pdf7P4/Mkk31JVN43+W1Yx05L7suvHLit4jkZMnaF1y+3oTCc5u3J77ftc9eMeZZ7jzO3QTLK7L9ldOMHn3KGZlmxmdnvCN2j3zputTyd5Nclt+Yc3W//wrjU/l3/8Ru3/MXrbFc3zzuxcxej9u/bfmOTblz5/Osm5Y5jnn+cfLk5zZ5IvLZ6ryZ+fgzzvSb4zO+8junGVz9HSff/LXP3N/pNmaN1yK7tyO/r8rFt21y23siu7c83uuuVWdhf3N8XAewx5T5IvZOe3Ff/DYt8DSR5YfF5JHl4c/2ySrWvd9hjm+USSryV5fvGxvdj//Ysn8oUkLx/jPA8uHu+F7PzywfuvddvjmGmx/ctJHt91u1U9R59M8uUk/y873xV+eNUZWrfcyq7czjW765Zb2ZXduWZ33XIru+2S2wAAMMKVAwEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGDAvsW5qh6tqter6qWrHK+q+u2qulhVL1bVe6YfEw5Odpkr2WWO5JaTYOQV58eSnLvG8buT3L74OPZ2rPEAAB8rSURBVJ/kd48+Fkziscgu8/RYZJf5eSxyy4bbtzh392eSfPUaS+5N8nu945kk76iq751qQDgs2WWuZJc5kltOgtMT3MfNSV5b2r602Pfl3Qur6nx2vsvMjTfe+N477rhjgofnJHvuuee+0t1nDnlz2eW6OGJuE9nlOnHOZa4mOO8mmaY41x77eq+F3X0hyYUk2dra6u3t7QkenpOsqv7yKDffY5/ssnJHzG0iu1wnzrnM1QTn3STT/FWNS0luXdq+JcnlCe4XVk12mSvZZY7kltmbojg/keSDi9+WfV+Sr3f3237sAmtIdpkr2WWO5JbZ2/etGlX1ySR3Jbmpqi4l+fUk35Ik3f1IkieT3JPkYpK/S/KhVQ0LByG7zJXsMkdyy0mwb3Hu7vv3Od5JPjLZRDAR2WWuZJc5kltOAlcOBACAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYMBQca6qc1X1SlVdrKqH9jj+nVX1R1X1QlW9XFUfmn5UODjZZY7klrmSXTbdvsW5qk4leTjJ3UnOJrm/qs7uWvaRJJ/r7ncnuSvJb1bVDRPPCgciu8yR3DJXsstJMPKK851JLnb3q939RpLHk9y7a00n+faqqiTfluSrSd6cdFI4ONlljuSWuZJdNt5Icb45yWtL25cW+5Z9PMkPJbmc5LNJfrW7v7n7jqrqfFVtV9X2lStXDjkyDJNd5miy3Cayy7FyzmXjjRTn2mNf79r+2STPJ/m+JD+S5ONV9R1vu1H3he7e6u6tM2fOHHhYOCDZZY4my20iuxwr51w23khxvpTk1qXtW7LzneKyDyX5VO+4mOSLSe6YZkQ4NNlljuSWuZJdNt5IcX42ye1VddviDfz3JXli15ovJfmpJKmq70nyg0lenXJQOATZZY7klrmSXTbe6f0WdPebVfVgkqeSnEryaHe/XFUPLI4/kuRjSR6rqs9m50c1H+3ur6xwbtiX7DJHcstcyS4nwb7FOUm6+8kkT+7a98jS55eT/My0o8HRyS5zJLfMleyy6Vw5EAAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAFDxbmqzlXVK1V1saoeusqau6rq+ap6uar+bNox4XBklzmSW+ZKdtl0p/dbUFWnkjyc5KeTXErybFU90d2fW1rzjiS/k+Rcd3+pqr57VQPDKNlljuSWuZJdToKRV5zvTHKxu1/t7jeSPJ7k3l1rPpDkU939pSTp7tenHRMORXaZI7llrmSXjTdSnG9O8trS9qXFvmU/kOS7qupPq+q5qvrgVAPCEcgucyS3zJXssvH2fatGktpjX+9xP+9N8lNJ/kmS/1ZVz3T3F/7RHVWdT3I+Sd75zncefFo4GNlljibLbSK7HCvnXDbeyCvOl5LcurR9S5LLe6z5k+7+2+7+SpLPJHn37jvq7gvdvdXdW2fOnDnszDBKdpmjyXKbyC7HyjmXjTdSnJ9NcntV3VZVNyS5L8kTu9b8YZIfr6rTVfWtSX4syeenHRUOTHaZI7llrmSXjbfvWzW6+82qejDJU0lOJXm0u1+uqgcWxx/p7s9X1Z8keTHJN5N8ortfWuXgsB/ZZY7klrmSXU6C6t799qPjsbW11dvb29flsdkcVfVcd28d52PKLkd1PXKbyC5H55zLXE2VXVcOBACAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAA4aKc1Wdq6pXqupiVT10jXU/WlXfqKpfnG5EODzZZY7klrmSXTbdvsW5qk4leTjJ3UnOJrm/qs5eZd1vJHlq6iHhMGSXOZJb5kp2OQlGXnG+M8nF7n61u99I8niSe/dY9ytJfj/J6xPOB0chu8yR3DJXssvGGynONyd5bWn70mLf36uqm5P8QpJHrnVHVXW+qraravvKlSsHnRUOSnaZo8lyu1gruxwX51w23khxrj329a7t30ry0e7+xrXuqLsvdPdWd2+dOXNmdEY4LNlljibLbSK7HCvnXDbe6YE1l5LcurR9S5LLu9ZsJXm8qpLkpiT3VNWb3f0Hk0wJhyO7zJHcMleyy8YbKc7PJrm9qm5L8ldJ7kvygeUF3X3bW59X1WNJ/tgXAWtAdpkjuWWuZJeNt29x7u43q+rB7Pz266kkj3b3y1X1wOL4vu+xg+tBdpkjuWWuZJeTYOQV53T3k0me3LVvzy+A7v7lo48F05Bd5khumSvZZdO5ciAAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBggOIMAAADhopzVZ2rqleq6mJVPbTH8V+qqhcXH09X1bunHxUOTnaZI7llrmSXTbdvca6qU0keTnJ3krNJ7q+qs7uWfTHJT3T3u5J8LMmFqQeFg5Jd5khumSvZ5SQYecX5ziQXu/vV7n4jyeNJ7l1e0N1Pd/fXFpvPJLll2jHhUGSXOZJb5kp22XgjxfnmJK8tbV9a7LuaDyf59F4Hqup8VW1X1faVK1fGp4TDkV3maLLcJrLLsXLOZeONFOfaY1/vubDqJ7PzhfDRvY5394Xu3ururTNnzoxPCYcju8zRZLlNZJdj5ZzLxjs9sOZSkluXtm9Jcnn3oqp6V5JPJLm7u/96mvHgSGSXOZJb5kp22Xgjrzg/m+T2qrqtqm5Icl+SJ5YXVNU7k3wqyb/r7i9MPyYciuwyR3LLXMkuG2/fV5y7+82qejDJU0lOJXm0u1+uqgcWxx9J8mtJ/lmS36mqJHmzu7dWNzbsT3aZI7llrmSXk6C693z70cptbW319vb2dXlsNkdVPXfcJ13Z5aiuR24T2eXonHOZq6my68qBAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADBgqzlV1rqpeqaqLVfXQHserqn57cfzFqnrP9KPCwckucyS3zJXssun2Lc5VdSrJw0nuTnI2yf1VdXbXsruT3L74OJ/kdyeeEw5MdpkjuWWuZJeTYOQV5zuTXOzuV7v7jSSPJ7l315p7k/xe73gmyTuq6nsnnhUOSnaZI7llrmSXjTdSnG9O8trS9qXFvoOugeMmu8yR3DJXssvGOz2wpvbY14dYk6o6n50fzSTJ/62qlwYe/zjdlOQr13uIJebZ3w9e49hJye46/n9Zt5nWbZ5jyW0iuwe0bvMk6zeTc+6Odfv/Yp79XSu7w0aK86Ukty5t35Lk8iHWpLsvJLmQJFW13d1bB5p2xdZtJvPsr6q2r3H4RGR33eZJ1m+mdZznGocny20iuwexbvMk6zeTc+6OdZvJPPvbJ7vDRt6q8WyS26vqtqq6Icl9SZ7YteaJJB9c/Lbs+5J8vbu/PMWAcASyyxzJLXMlu2y8fV9x7u43q+rBJE8lOZXk0e5+uaoeWBx/JMmTSe5JcjHJ3yX50OpGhjGyyxzJLXMlu5wEI2/VSHc/mZ2wL+97ZOnzTvKRAz72hQOuPw7rNpN59nfNmU5IdtdtnmT9ZprVPCvK7b6Pex2YZ3/rNpNz7o51m8k8+5tkptrJMAAAcC0uuQ0AAANWUpyPcsnN/W67onl+aTHHi1X1dFW9e+nYX1TVZ6vq+al+I3Ngnruq6uuLx3y+qn5t9LYrnOnfL83zUlV9o6r+6eLYKp6jR6vq9av9CaJVZGjdcjs404nOrtyO3fa4s7tuuR2cSXZld+2yu265HZxps7Pb3ZN+ZOcXAv53ku9PckOSF5Kc3bXmniSfzs7fc3xfkv8+etsVzfP+JN+1+Pzut+ZZbP9FkpuO+fm5K8kfH+a2q5pp1/qfT/JfV/UcLe7z3yZ5T5KXrnJ80gytW25lV25Hn591y+665VZ2ZXeu2V233MruzscqXnE+yiU3R247+Tzd/XR3f22x+Ux2/q7kqhzl37iK5+cw93t/kk9O8LhX1d2fSfLVayyZOkPrltuhmU54duV2x7pld91yOzTTim471X3K7snM7rrl9jD3u3HZXUVxPsolN1dxKc6D3ueHs/OdyVs6yX+uqudq50pGRzU6z7+qqheq6tNV9cMHvO2qZkpVfWuSc0l+f2n31M/RiKkztG65HZ1p2UnLrtxe+z5X/bhHmWfZqnN7kJlk9+pk9+1O2jn3QPe7qdkd+nN0B3SUS24OX0Z24nl2Flb9ZHa+EP7N0u5/3d2Xq+q7k/yXqvpfi+9uVjnP/0zyL7r7b6rqniR/kOT2wduuaqa3/HySP+/u5e/upn6ORkydoXXL7bUe7+0LT2Z25fba97nqxz3KPDsLjye3ozPJ7rXJ7vLCk3nOHZ3pLRuZ3VW84nyUS24OX0Z24nlSVe9K8okk93b3X7+1v7svL/77epL/lJ2X9lc6T3f/n+7+m8XnTyb5lqq6afTfsoqZltyXXT92WcFzNGLqDK1bbkdnOsnZldtr3+eqH/co8xxnbodmkt19ye7CCT7nDs20ZDOz2xO+Qbt33mx9OsmrSW7LP7zZ+od3rfm5/OM3av+P0duuaJ53ZucqRu/ftf/GJN++9PnTSc4dwzz/PP/wN7bvTPKlxXM1+fNzkOc9yXdm531EN67yOVq673+Zq7/Zf9IMrVtuZVduR5+fdcvuuuVWdmV3rtldt9zK7uL+phh4jyHvSfKF7Py24n9Y7HsgyQOLzyvJw4vjn02yda3bHsM8n0jytSTPLz62F/u/f/FEvpDk5WOc58HF472QnV8+eP+1bnscMy22fznJ47tut6rn6JNJvpzk/2Xnu8IPrzpD65Zb2ZXbuWZ33XIru7I71+yuW25lt105EAAARrhyIAAADFCcAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAzYtzhX1aNV9XpVvXSV41VVv11VF6vqxap6z/RjwsHJLnMlu8yR3HISjLzi/FiSc9c4fneS2xcf55P87tHHgkk8Ftllnh6L7DI/j0Vu2XD7Fufu/kySr15jyb1Jfq93PJPkHVX1vVMNCIclu8yV7DJHcstJcHqC+7g5yWtL25cW+768e2FVnc/Od5m58cYb33vHHXdM8PCcZM8999xXuvvMIW8uu1wXR8xtIrtcJ865zNUE590k0xTn2mNf77Wwuy8kuZAkW1tbvb29PcHDc5JV1V8e5eZ77JNdVu6IuU1kl+vEOZe5muC8m2Sav6pxKcmtS9u3JLk8wf3CqskucyW7zJHcMntTFOcnknxw8duy70vy9e5+249dYA3JLnMlu8yR3DJ7+75Vo6o+meSuJDdV1aUkv57kW5Kkux9J8mSSe5JcTPJ3ST60qmHhIGSXuZJd5khuOQn2Lc7dff8+xzvJRyabCCYiu8yV7DJHcstJ4MqBAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADBgqzlV1rqpeqaqLVfXQHse/s6r+qKpeqKqXq+pD048KBye7zJHcMleyy6bbtzhX1akkDye5O8nZJPdX1dldyz6S5HPd/e4kdyX5zaq6YeJZ4UBklzmSW+ZKdjkJRl5xvjPJxe5+tbvfSPJ4knt3rekk315VleTbknw1yZuTTgoHJ7vMkdwyV7LLxhspzjcneW1p+9Ji37KPJ/mhJJeTfDbJr3b3N3ffUVWdr6rtqtq+cuXKIUeGYbLLHE2W20R2OVbOuWy8keJce+zrXds/m+T5JN+X5EeSfLyqvuNtN+q+0N1b3b115syZAw8LByS7zNFkuU1kl2PlnMvGGynOl5LcurR9S3a+U1z2oSSf6h0Xk3wxyR3TjAiHJrvMkdwyV7LLxhspzs8mub2qblu8gf++JE/sWvOlJD+VJFX1PUl+MMmrUw4KhyC7zJHcMleyy8Y7vd+C7n6zqh5M8lSSU0ke7e6Xq+qBxfFHknwsyWNV9dns/Kjmo939lRXODfuSXeZIbpkr2eUk2Lc4J0l3P5nkyV37Hln6/HKSn5l2NDg62WWO5Ja5kl02nSsHAgDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMGCoOFfVuap6paouVtVDV1lzV1U9X1UvV9WfTTsmHI7sMkdyy1zJLpvu9H4LqupUkoeT/HSSS0meraonuvtzS2vekeR3kpzr7i9V1XevamAYJbvMkdwyV7LLSTDyivOdSS5296vd/UaSx5Pcu2vNB5J8qru/lCTd/fq0Y8KhyC5zJLfMleyy8UaK881JXlvavrTYt+wHknxXVf1pVT1XVR+cakA4AtlljuSWuZJdNt6+b9VIUnvs6z3u571JfirJP0ny36rqme7+wj+6o6rzSc4nyTvf+c6DTwsHI7vM0WS5TWSXY+Wcy8YbecX5UpJbl7ZvSXJ5jzV/0t1/291fSfKZJO/efUfdfaG7t7p768yZM4edGUbJLnM0WW4T2eVYOeey8UaK87NJbq+q26rqhiT3JXli15o/TPLjVXW6qr41yY8l+fy0o8KByS5zJLfMleyy8fZ9q0Z3v1lVDyZ5KsmpJI9298tV9cDi+CPd/fmq+pMkLyb5ZpJPdPdLqxwc9iO7zJHcMleyy0lQ3bvffnQ8tra2ent7+7o8Npujqp7r7q3jfEzZ5aiuR24T2eXonHOZq6my68qBAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGCA4gwAAAMUZwAAGKA4AwDAAMUZAAAGKM4AADBAcQYAgAGKMwAADFCcAQBgwFBxrqpzVfVKVV2sqoeuse5Hq+obVfWL040Ihye7zJHcMleyy6bbtzhX1akkDye5O8nZJPdX1dmrrPuNJE9NPSQchuwyR3LLXMkuJ8HIK853JrnY3a929xtJHk9y7x7rfiXJ7yd5fcL54ChklzmSW+ZKdtl4I8X55iSvLW1fWuz7e1V1c5JfSPLIte6oqs5X1XZVbV+5cuWgs8JByS5zNFluF2tll+PinMvGGynOtce+3rX9W0k+2t3fuNYddfeF7t7q7q0zZ86MzgiHJbvM0WS5TWSXY+Wcy8Y7PbDmUpJbl7ZvSXJ515qtJI9XVZLclOSeqnqzu/9gkinhcGSXOZJb5kp22XgjxfnZJLdX1W1J/irJfUk+sLygu2976/OqeizJH/siYA3ILnMkt8yV7LLx9i3O3f1mVT2Ynd9+PZXk0e5+uaoeWBzf9z12cD3ILnMkt8yV7HISjLzinO5+MsmTu/bt+QXQ3b989LFgGrLLHMktcyW7bDpXDgQAgAGKMwAADFCcAQBggOIMAAADFGcAABigOAMAwADFGQAABijOAAAwQHEGAIABijMAAAxQnAEAYIDiDAAAAxRnAAAYoDgDAMAAxRkAAAYozgAAMEBxBgCAAYozAAAMUJwBAGDAUHGuqnNV9UpVXayqh/Y4/ktV9eLi4+mqevf0o8LByS5zJLfMleyy6fYtzlV1KsnDSe5OcjbJ/VV1dteyLyb5ie5+V5KPJbkw9aBwULLLHMktcyW7nAQjrzjfmeRid7/a3W8k/3979/cqx1nHcfz9JTEXFvFXIkrSagpBSKFCOdQaRdq7JFJymyKKEgi5yK0oCP0jhGoJIRfeNDf+IEhDFbwQDNGeStImoCWWYkMKjTVUSkGNfL2YOXTc7Nl9dndmM7P7fsEhZ2eemflk8jnDczZzznAeONYckJmXMvNO/fIysK/dmNJc7K6GyN5qqOyuVl7JxHkv8Fbj9c162XZOABfHrYiIkxGxGRGbt2/fLk8pzcfuaoha6y3YXS2V11ytvJKJc4xZlmMHRjxF9YXw/XHrM/NMZm5k5saePXvKU0rzsbsaotZ6C3ZXS+U1VytvZ8GYm8CDjdf7gFujgyLiUeAscCQz320nnrQQu6shsrcaKrurlVfyjvPLwIGI2B8Ru4DjwIXmgIh4CPg58K3MfL39mNJc7K6GyN5qqOyuVt7Ud5wz825EnAZeAnYA5zLzekScqtc/DzwLfBr4cUQA3M3Mje5iS9PZXQ2RvdVQ2V2tg8gce/tR5zY2NnJzc/O+HFurIyJeWfZF1+5qUfejt2B3tTivuRqqtrrrkwMlSZKkAk6cJUmSpAJOnCVJkqQCTpwlSZKkAk6cJUmSpAJOnCVJkqQCTpwlSZKkAk6cJUmSpAJOnCVJkqQCTpwlSZKkAk6cJUmSpAJOnCVJkqQCTpwlSZKkAk6cJUmSpAJOnCVJkqQCTpwlSZKkAk6cJUmSpAJOnCVJkqQCTpwlSZKkAk6cJUmSpAJFE+eIOBwRf4mIGxHxgzHrIyJ+VK9/NSIeaz+qNDu7qyGytxoqu6tVN3XiHBE7gOeAI8BB4JmIODgy7AhwoP44Cfyk5ZzSzOyuhsjeaqjsrtZByTvOjwM3MvONzPw3cB44NjLmGPDTrFwGPhERn2s5qzQru6shsrcaKrurlbezYMxe4K3G65vAlwvG7AXebg6KiJNU32EC/Csirs2Utnu7gb/f7xAN5pnuixPWrUt3+/jv0rdMfcuzlN6C3Z1R3/JA/zJ5za307d/FPNNN6m6xkolzjFmWc4whM88AZwAiYjMzNwqOvzR9y2Se6SJic9LqMctWrrt9ywP9y9THPJNWj1k2V2/B7s6ib3mgf5m85lb6lsk8003pbrGSWzVuAg82Xu8Dbs0xRlo2u6shsrcaKrurlVcycX4ZOBAR+yNiF3AcuDAy5gLw7fqnZZ8A3svMe/7LUFoyu6shsrcaKrurlTf1Vo3MvBsRp4GXgB3Aucy8HhGn6vXPAy8CR4EbwAfAdwuOfWbu1N3pWybzTLdtpjXqbt/yQP8yDSZPh72deNz7xDzT9S2T19xK3zKZZ7pWMkXm2NviJEmSJDX45EBJkiSpgBNnSZIkqUAnE+dFHrk5bduO8nyzzvFqRFyKiC811r0ZEa9FxJW2fpVJQZ4nI+K9+phXIuLZ0m07zPS9Rp5rEfHfiPhUva6Lc3QuIt7Z7nd3dtGhvvW2MNNad9felm277O72rbeFmeyu3e1dd/vW28JMq93dzGz1g+oHAv4KPAzsAq4CB0fGHAUuUv0+xyeAP5Ru21GeQ8An68+PbOWpX78J7F7y+XkS+NU823aVaWT808BvuzpH9T6/DjwGXNtmfasd6ltv7a69LT0/fetu33prd+3uULvbt97a3eqji3ecF3nkZsm2refJzEuZead+eZnq90p2ZZG/YxfnZ579PgO80MJxt5WZvwP+MWFI2x3qW2+LMq15d+1tpW/d7VtvizJ1tG1b+7S769ndvvV2nv2uXHe7mDhv9zjNkjEl23aRp+kE1XcmWxL4dUS8EtUjQBdVmucrEXE1Ii5GxCMzbttVJiLio8Bh4GeNxW2foxJtd6hvvS3N1LRu3bW3k/fZ9XEXydPUdW9nyWR3t2d377Vu19yZ9ruq3S155PasFnnkZvFjZFvOUw2MeIrqC+FrjcVfzcxbEfEZ4DcR8ef6u5su8/wJ+Hxmvh8RR4FfAgcKt+0q05angd9nZvO7u7bPUYm2O9S33k463r0D17O79nbyPrs+7iJ5qoHL6W1pJrs7md1tDlzPa25ppi0r2d0u3nFe5JGbXTyKs2ifEfEocBY4lpnvbi3PzFv1n+8Av6B6a7/TPJn5z8x8v/78ReAjEbG79O/SRaaG44z8t0sH56hE2x3qW29LM61zd+3t5H12fdxF8iyzt0WZ7O5Udre2xtfcokwNq9ndbPEG7axutt4JvAHs58ObrR8ZGfMN/v9G7T+WbttRnoeonmJ0aGT5A8DHGp9fAg4vIc9n+fDhNI8Df6vPVevnZ5bzDnyc6j6iB7o8R419f4Htb/ZvtUN9663dtbel56dv3e1bb+2u3R1qd/vWW7tb76+NwGNCHgVep/ppxR/Wy04Bp+rPA3iuXv8asDFp2yXkOQvcAa7UH5v18ofrE3kVuL7EPKfr412l+uGDQ5O2XUam+vV3gPMj23V1jl4A3gb+Q/Vd4YmuO9S33tpdezvU7vatt3bX7g61u33rrd1NH7ktSZIklfDJgZIkSVIBJ86SJElSASfOkiRJUgEnzpIkSVIBJ86SJElSASfOkiRJUgEnzpIkSVKB/wHACr5Fuo9UmQAAAABJRU5ErkJggg==\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":"# Model configuration\n\nHere I override default configurations of the pre-trained model that are specific for COCO dataset. This step is equivalent to writing the `pipeline.config` file by hand or by looking for strings through regular expressions, but I find this way more clean and straightforward.\n\nNotice that differently from the standard way of using OD API, in this case I'm not using the `pipeline.config` file, but I'm loading configurations into a dictionary that I'm going to use later.","metadata":{}},{"cell_type":"code","source":"configs = config_util.get_configs_from_pipeline_file(PIPELINE_PATH)\n\nconfigs['model'].ssd.num_classes = NUM_CLASSES\n\nconfigs['train_config'].sync_replicas = True if REPLICAS > 1 else False\nconfigs['train_config'].replicas_to_aggregate = REPLICAS\nconfigs['train_config'].batch_size = BATCH_SIZE\nconfigs['train_config'].data_augmentation_options.pop(1)\n\nconfigs['train_config'].fine_tune_checkpoint = (\n    BASE_DIR + f'/pre-trained-models/{MODEL_PATH}/checkpoint/ckpt-0'\n)\nconfigs['train_config'].fine_tune_checkpoint_type = \"detection\"\n\nconfigs['train_input_config'].label_map_path = LABEL_MAP_PATH\nconfigs['train_input_config'].tf_record_input_reader.input_path[:] = TRAIN_DATASET\nconfigs['train_input_config'].load_multiclass_scores = True\n\nconfigs['eval_config'].batch_size = 1\nconfigs['eval_config'].metrics_set[:] = ''\nconfigs['eval_config'].metrics_set.append('pascal_voc_detection_metrics')\n\nconfigs['eval_input_config'].label_map_path = LABEL_MAP_PATH\nconfigs['eval_input_config'].tf_record_input_reader.input_path[:] = TEST_DATASET\nconfigs['eval_input_config'].load_multiclass_scores = True\n\nconfig_util.save_pipeline_config(config_util.create_pipeline_proto_from_configs(configs),\n                                 PIPELINE_PATH.replace('pipeline.config', ''))","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:05:57.934529Z","iopub.execute_input":"2024-07-24T11:05:57.934904Z","iopub.status.idle":"2024-07-24T11:05:57.953645Z","shell.execute_reply.started":"2024-07-24T11:05:57.934867Z","shell.execute_reply":"2024-07-24T11:05:57.952641Z"},"trusted":true},"execution_count":109,"outputs":[]},{"cell_type":"code","source":"model_config = configs['model']\ntrain_config = configs['train_config']\ntrain_input_config = configs['train_input_config']\neval_config = configs['eval_config']\neval_input_config = configs['eval_input_configs'][0]","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:06:00.318979Z","iopub.execute_input":"2024-07-24T11:06:00.31933Z","iopub.status.idle":"2024-07-24T11:06:00.324666Z","shell.execute_reply.started":"2024-07-24T11:06:00.3193Z","shell.execute_reply":"2024-07-24T11:06:00.323679Z"},"trusted":true},"execution_count":110,"outputs":[]},{"cell_type":"markdown","source":"## Build model\n\nHere I build my detector using `model_builder` utils. Notice that `build_model` fuction also overrides the preprocessing function used by the feature extractor backbone (`feature_extractor.preprocess`). This function is used both during training and inference to pre-process the data before feeding them to the detector. The [default pre-processing](https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_efficientnet_bifpn_feature_extractor.py#L185)  provided by OD API is channel-wise normalization by ImageNet mean/std.","metadata":{}},{"cell_type":"code","source":"def preprocess_fn(inputs):\n    return inputs / 255.0\n\ndef build_model():\n    detection_model = model_builder._build_ssd_model(ssd_config=model_config.ssd,\n                                                     is_training=True,\n                                                     add_summaries=False)\n\n    detection_model._feature_extractor.preprocess = preprocess_fn\n    \n    return detection_model\n\ntry:\n    with strategy.scope():\n        detection_model = build_model()\nexcept:\n    detection_model = build_model()","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:06:02.67049Z","iopub.execute_input":"2024-07-24T11:06:02.670842Z","iopub.status.idle":"2024-07-24T11:06:06.514811Z","shell.execute_reply.started":"2024-07-24T11:06:02.670811Z","shell.execute_reply":"2024-07-24T11:06:06.51399Z"},"trusted":true},"execution_count":111,"outputs":[]},{"cell_type":"markdown","source":"# Training utils","metadata":{}},{"cell_type":"code","source":"SHAPE = (512,512)\nlearning_rate = 1e-4\n\nEPOCHS = 1\nSTEPS_PER_EPOCH = int(ct_train)\nNUM_TRAIN_STEPS = int(STEPS_PER_EPOCH * EPOCHS)\ntrain_steps = NUM_TRAIN_STEPS\n\nRUN_EVAL = True\nMONITOR_METRIC = 'PascalBoxes_Precision/mAP@0.5IOU'\nES_PATIENCE = 5\n\nbest_metric_value = 0.0\nnot_improved = 0\nsteps_per_sec_list = []\n\nunpad_groundtruth_tensors = train_config.unpad_groundtruth_tensors\nadd_regularization_loss = train_config.add_regularization_loss\n\nclip_gradients_value = None\nif train_config.gradient_clipping_by_norm > 0:\n    clip_gradients_value = train_config.gradient_clipping_by_norm\n\nconfig_util.update_fine_tune_checkpoint_type(train_config)\nfine_tune_checkpoint_type = train_config.fine_tune_checkpoint_type\nfine_tune_checkpoint_version = train_config.fine_tune_checkpoint_version","metadata":{"execution":{"iopub.status.busy":"2024-07-24T11:06:12.629365Z","iopub.execute_input":"2024-07-24T11:06:12.629723Z","iopub.status.idle":"2024-07-24T11:06:12.638192Z","shell.execute_reply.started":"2024-07-24T11:06:12.629692Z","shell.execute_reply":"2024-07-24T11:06:12.637373Z"},"trusted":true},"execution_count":112,"outputs":[]},{"cell_type":"markdown","source":"## Dataset functions\n\nI used `dataset.build` ([code](https://github.com/tensorflow/models/blob/master/research/object_detection/builders/dataset_builder.py#L166)) as it is done in OD API codebase. From the docs:\n```\nBuilds a tf.data.Dataset by applying the `transform_input_data_fn` on all\n  records. Applies a padded batch to the resulting dataset.\n  Args:\n    input_reader_config: A input_reader_pb2.InputReader object.\n    batch_size: Batch size. If batch size is None, no batching is performed.\n    transform_input_data_fn: Function to apply transformation to all records,\n      or None if no extra decoding is required.\n    input_context: optional, A tf.distribute.InputContext object used to\n      shard filenames and compute per-replica batch_size when this function\n      is being called per-replica.\n    reduce_to_frame_fn: Function that extracts frames from tf.SequenceExample\n      type input data.\n  Returns:\n    A tf.data.Dataset based on the input_reader_config.\n```","metadata":{}},{"cell_type":"markdown","source":"### Training dataset\n\nHere you can change `train_config.data_augmentation_options` in `pipeline.config` file to change data augmentation applied during training. Possible options are listed [here](https://github.com/tensorflow/models/blob/master/research/object_detection/protos/preprocessor.proto#L8).","metadata":{}},{"cell_type":"code","source":"def train_dataset_fn(input_context):\n    def transform_input_data_fn(tensor_dict):\n        data_augmentation_options = [\n            preprocessor_builder.build(step)\n            for step in train_config.data_augmentation_options\n        ]\n        data_augmentation_fn = functools.partial(\n            inputs.augment_input_data,\n            data_augmentation_options=data_augmentation_options\n        )\n\n        image_resizer_config = model_config.ssd.image_resizer\n        image_resizer_fn = image_resizer_builder.build(image_resizer_config)\n        transform_data_fn = functools.partial(\n            inputs.transform_input_data, \n            model_preprocess_fn=detection_model.preprocess,\n            image_resizer_fn=image_resizer_fn,\n            num_classes=NUM_CLASSES,\n            data_augmentation_fn=data_augmentation_fn,\n            merge_multiple_boxes=False,\n            use_multiclass_scores=False\n        )\n\n        tensor_dict = inputs.pad_input_data_to_static_shapes(\n            tensor_dict=transform_data_fn(tensor_dict),\n            max_num_boxes=train_input_config.max_number_of_boxes,\n            num_classes=NUM_CLASSES,\n            spatial_image_shape=SHAPE\n        )\n\n        return (inputs._get_features_dict(tensor_dict, False),\n                inputs._get_labels_dict(tensor_dict))\n\n    train_input = dataset_builder.build(\n        train_input_config,\n        transform_input_data_fn=transform_input_data_fn,\n        batch_size=train_config.batch_size,\n        input_context=input_context,\n    )\n    train_input = train_input.repeat()    \n\n    return train_input","metadata":{"_kg_hide-input":false,"execution":{"iopub.status.busy":"2024-07-24T11:06:18.452125Z","iopub.execute_input":"2024-07-24T11:06:18.452463Z","iopub.status.idle":"2024-07-24T11:06:18.463608Z","shell.execute_reply.started":"2024-07-24T11:06:18.452434Z","shell.execute_reply":"2024-07-24T11:06:18.462624Z"},"trusted":true},"execution_count":113,"outputs":[]},{"cell_type":"markdown","source":"### Validation dataset","metadata":{}},{"cell_type":"code","source":"def eval_dataset_fn(input_context):\n    def transform_input_data_fn(tensor_dict):\n        image_resizer_config = model_config.ssd.image_resizer\n        image_resizer_fn = image_resizer_builder.build(image_resizer_config)\n\n        transform_data_fn = functools.partial(\n            inputs.transform_input_data, \n            model_preprocess_fn=detection_model.preprocess,\n            image_resizer_fn=image_resizer_fn,\n            num_classes=NUM_CLASSES,\n            merge_multiple_boxes=False,\n            use_multiclass_scores=False,\n            retain_original_image=eval_config.retain_original_images,\n            retain_original_image_additional_channels=eval_config.retain_original_image_additional_channels\n        )\n\n        tensor_dict = inputs.pad_input_data_to_static_shapes(\n            tensor_dict=transform_data_fn(tensor_dict),\n            max_num_boxes=eval_input_config.max_number_of_boxes,\n            num_classes=NUM_CLASSES,\n            spatial_image_shape=SHAPE\n        )\n\n        return (inputs._get_features_dict(tensor_dict, False),\n                inputs._get_labels_dict(tensor_dict))\n\n    eval_input = dataset_builder.build(\n        eval_input_config,\n        transform_input_data_fn=transform_input_data_fn,\n        batch_size=eval_config.batch_size,\n        input_context=input_context,\n    )\n\n    return eval_input","metadata":{"_kg_hide-input":false,"execution":{"iopub.status.busy":"2024-07-24T11:06:19.929325Z","iopub.execute_input":"2024-07-24T11:06:19.929705Z","iopub.status.idle":"2024-07-24T11:06:19.939413Z","shell.execute_reply.started":"2024-07-24T11:06:19.929666Z","shell.execute_reply":"2024-07-24T11:06:19.938322Z"},"trusted":true},"execution_count":114,"outputs":[]},{"cell_type":"code","source":"train_input = strategy.experimental_distribute_datasets_from_function(\n    train_dataset_fn\n)\n\ntrain_input_iter = iter(train_input)\n\neval_input = strategy.experimental_distribute_datasets_from_function(\n    eval_dataset_fn\n)","metadata":{"_kg_hide-input":false,"execution":{"iopub.status.busy":"2024-07-24T11:06:21.236504Z","iopub.execute_input":"2024-07-24T11:06:21.236886Z","iopub.status.idle":"2024-07-24T11:06:21.301278Z","shell.execute_reply.started":"2024-07-24T11:06:21.236846Z","shell.execute_reply":"2024-07-24T11:06:21.299848Z"},"trusted":true},"execution_count":115,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)","\u001b[0;32m<ipython-input-115-56e4cea520c1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m train_input = strategy.experimental_distribute_datasets_from_function(\n\u001b[0;32m----> 2\u001b[0;31m     \u001b[0mtrain_dataset_fn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m )\n\u001b[1;32m      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mtrain_input_iter\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0miter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_input\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_lib.py\u001b[0m in \u001b[0;36mexperimental_distribute_datasets_from_function\u001b[0;34m(self, dataset_fn, options)\u001b[0m\n\u001b[1;32m   1126\u001b[0m     \"\"\"\n\u001b[1;32m   1127\u001b[0m     return self._extended._experimental_distribute_datasets_from_function(  # pylint: disable=protected-access\n\u001b[0;32m-> 1128\u001b[0;31m         dataset_fn, options)\n\u001b[0m\u001b[1;32m   1129\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1130\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moptions\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/tensorflow/python/distribute/mirrored_strategy.py\u001b[0m in \u001b[0;36m_experimental_distribute_datasets_from_function\u001b[0;34m(self, dataset_fn, options)\u001b[0m\n\u001b[1;32m    501\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_input_workers\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    502\u001b[0m         \u001b[0minput_contexts\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 503\u001b[0;31m         self._container_strategy())\n\u001b[0m\u001b[1;32m    504\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    505\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0m_experimental_distribute_values_from_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue_fn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/tensorflow/python/distribute/input_lib.py\u001b[0m in \u001b[0;36mget_distributed_datasets_from_function\u001b[0;34m(dataset_fn, input_workers, input_contexts, strategy)\u001b[0m\n\u001b[1;32m    134\u001b[0m         \u001b[0minput_workers\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    135\u001b[0m         \u001b[0minput_contexts\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 136\u001b[0;31m         strategy)\n\u001b[0m\u001b[1;32m    137\u001b[0m   \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    138\u001b[0m     return DistributedDatasetsFromFunctionV1(\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/tensorflow/python/distribute/input_lib.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, dataset_fn, input_workers, input_contexts, strategy)\u001b[0m\n\u001b[1;32m   1181\u001b[0m         _create_datasets_per_worker_with_input_context(self._input_contexts,\n\u001b[1;32m   1182\u001b[0m                                                        \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_input_workers\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1183\u001b[0;31m                                                        dataset_fn))\n\u001b[0m\u001b[1;32m   1184\u001b[0m     self._element_spec = _create_distributed_tensor_spec(\n\u001b[1;32m   1185\u001b[0m         self._strategy, element_spec)\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/tensorflow/python/distribute/input_lib.py\u001b[0m in \u001b[0;36m_create_datasets_per_worker_with_input_context\u001b[0;34m(input_contexts, input_workers, dataset_fn)\u001b[0m\n\u001b[1;32m   1765\u001b[0m     \u001b[0mworker\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minput_workers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mworker_devices\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1766\u001b[0m     \u001b[0;32mwith\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mworker\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1767\u001b[0;31m       \u001b[0mdataset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdataset_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mctx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1768\u001b[0m       \u001b[0mdatasets\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1769\u001b[0m   \u001b[0;32mreturn\u001b[0m \u001b[0mdatasets\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdataset\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0melement_spec\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m<ipython-input-113-902c2af92106>\u001b[0m in \u001b[0;36mtrain_dataset_fn\u001b[0;34m(input_context)\u001b[0m\n\u001b[1;32m     36\u001b[0m         \u001b[0mtransform_input_data_fn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtransform_input_data_fn\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     37\u001b[0m         \u001b[0mbatch_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrain_config\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbatch_size\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 38\u001b[0;31m         \u001b[0minput_context\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_context\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     39\u001b[0m     )\n\u001b[1;32m     40\u001b[0m     \u001b[0mtrain_input\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrain_input\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.7/site-packages/object_detection/builders/dataset_builder.py\u001b[0m in \u001b[0;36mbuild\u001b[0;34m(input_reader_config, batch_size, transform_input_data_fn, input_context, reduce_to_frame_fn)\u001b[0m\n\u001b[1;32m    151\u001b[0m     \u001b[0mconfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minput_reader_config\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtf_record_input_reader\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    152\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mconfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minput_path\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 153\u001b[0;31m       raise ValueError('At least one input path must be specified in '\n\u001b[0m\u001b[1;32m    154\u001b[0m                        '`input_reader_config`.')\n\u001b[1;32m    155\u001b[0m     def dataset_map_fn(dataset, fn_to_map, batch_size=None,\n","\u001b[0;31mValueError\u001b[0m: At least one input path must be specified in `input_reader_config`."],"ename":"ValueError","evalue":"At least one input path must be specified in `input_reader_config`.","output_type":"error"}]},{"cell_type":"markdown","source":"### Show training samples","metadata":{}},{"cell_type":"code","source":"%matplotlib inline\n\nN = 16\nfig, ax = plt.subplots(int(np.sqrt(N)), int(np.sqrt(N)), figsize=(12,12))\nax = ax.flatten()\n\ntrain_dataset = train_dataset_fn(None).unbatch().batch(1)\ntrain_iter = iter(train_dataset)\n\nfor idx in range(N):\n    features, labels = next(train_iter)\n    image = features['image'][0].numpy()\n    n_boxes = labels['num_groundtruth_boxes'][0].numpy()\n    boxes = labels['groundtruth_boxes'][0, :n_boxes, :].numpy()\n    classes = labels['groundtruth_classes'][0, :n_boxes, :].numpy()\n    classes = np.argmax(classes, axis=-1) + 1\n    \n    plot_img_with_boxes((image*255).astype('uint8'), \n                        classes, \n                        boxes,\n                        axis=ax[idx])\n    \nfig.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-22T07:48:47.394391Z","iopub.execute_input":"2024-07-22T07:48:47.394739Z","iopub.status.idle":"2024-07-22T07:48:54.530571Z","shell.execute_reply.started":"2024-07-22T07:48:47.39471Z","shell.execute_reply":"2024-07-22T07:48:54.529759Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Training","metadata":{}},{"cell_type":"markdown","source":"## Load weights\n\nFirst I load the model checkpoint from `pipeline.config` file (i.e. the saved model pre-trained on COCO dataset).","metadata":{}},{"cell_type":"code","source":"with strategy.scope():\n    global_step = tf.Variable(0,\n                              trainable=False,\n                              dtype=tf.compat.v2.dtypes.int64,\n                              name='global_step',\n                              aggregation=tf.compat.v2.VariableAggregation.ONLY_FIRST_REPLICA)\n    \n    checkpointed_step = int(global_step.value())\n    logged_step = int(global_step.value())\n    total_loss = 0\n\n    if train_config.fine_tune_checkpoint:\n        load_fine_tune_checkpoint(detection_model,\n                                  train_config.fine_tune_checkpoint,\n                                  fine_tune_checkpoint_type,\n                                  fine_tune_checkpoint_version,\n                                  train_input,\n                                  unpad_groundtruth_tensors)","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-22T07:49:04.886186Z","iopub.execute_input":"2024-07-22T07:49:04.886555Z","iopub.status.idle":"2024-07-22T07:49:40.692422Z","shell.execute_reply.started":"2024-07-22T07:49:04.886523Z","shell.execute_reply":"2024-07-22T07:49:40.691236Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Then I load the last saved checkpoint from `MODEL_DIR` (if any), in order to resume the training process if any checkpoint has been saved in `MODEL_DIR`.","metadata":{}},{"cell_type":"code","source":"with strategy.scope():\n    if callable(learning_rate):\n        learning_rate_fn = learning_rate\n    else:\n        learning_rate_fn = lambda: learning_rate\n\n    optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)\n    \n    ckpt = tf.compat.v2.train.Checkpoint(step=global_step,\n                                         model=detection_model,\n                                         optimizer=optimizer)\n\n    manager_dir = get_filepath(strategy, MODEL_DIR)\n\n    manager = tf.compat.v2.train.CheckpointManager(ckpt,\n                                                   manager_dir,\n                                                   max_to_keep=1)\n\n    latest_checkpoint = tf.train.latest_checkpoint(MODEL_DIR)\n    ckpt.restore(latest_checkpoint).expect_partial()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-22T07:50:07.909927Z","iopub.execute_input":"2024-07-22T07:50:07.910353Z","iopub.status.idle":"2024-07-22T07:50:07.922104Z","shell.execute_reply.started":"2024-07-22T07:50:07.910312Z","shell.execute_reply":"2024-07-22T07:50:07.921083Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Custom training loop\n\nTo implement the training loop i used `eager_train_step`  from `model_lib_v2` ([code](https://github.com/tensorflow/models/blob/31e86e86c1e7f4154819e1c52ea0c51b287c2c70/research/object_detection/model_lib_v2.py#L146)), but you can rewrite if on your own as it is essentially a standard [TF-2 custom training loop](https://www.tensorflow.org/guide/keras/writing_a_training_loop_from_scratch), except for the fact that I use COCO evaluator to compute mean average precision after each epoch.","metadata":{}},{"cell_type":"code","source":"with strategy.scope():\n    def train_step_fn(features, labels):\n        loss = eager_train_step(detection_model,\n                                features,\n                                labels,\n                                unpad_groundtruth_tensors,\n                                optimizer,\n                                learning_rate=learning_rate_fn(),\n                                add_regularization_loss=add_regularization_loss,\n                                clip_gradients_value=clip_gradients_value,\n                                global_step=global_step,\n                                num_replicas=REPLICAS)\n        global_step.assign_add(1)\n        return loss\n\n    def _sample_and_train(strategy, train_step_fn, data_iterator):\n        features, labels = data_iterator.next()\n        per_replica_losses = strategy.run(train_step_fn, \n                                          args=(features, labels))\n        return strategy.reduce(tf.distribute.ReduceOp.SUM,\n                               per_replica_losses, axis=None)\n\n    @tf.function\n    def _dist_train_step(data_iterator):\n        return _sample_and_train(strategy, \n                                 train_step_fn, \n                                 data_iterator)","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-22T07:50:23.063419Z","iopub.execute_input":"2024-07-22T07:50:23.063772Z","iopub.status.idle":"2024-07-22T07:50:23.07462Z","shell.execute_reply.started":"2024-07-22T07:50:23.063735Z","shell.execute_reply":"2024-07-22T07:50:23.073647Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Notice that in the following cell the training steps are performed within `strategy.scope()`, while the evaluation loop is performed outside. This is intended as differently from the training step, for evaluation i used directly `eager_eval_loop`. If you look at the [code](https://github.com/tensorflow/models/blob/31e86e86c1e7f4154819e1c52ea0c51b287c2c70/research/object_detection/model_lib_v2.py#L775) you will notice that this function use a similar approach to the one used in previous cell. Anyway the GPU usage when running evaluation is very low with respect to the training loop. For this reason, a more efficient and time-saving approach would be to write functions similar to those used for training also for running evaluation, at the cost of not using the mAP score but for instance the value of the loss (or other tensorflow metrics).","metadata":{}},{"cell_type":"code","source":"last_step_time = time.time()\n\nfor _ in range(global_step.value(), train_steps):\n    with strategy.scope():\n        loss = _dist_train_step(train_input_iter)\n        time_taken = time.time() - last_step_time\n        last_step_time = time.time()\n        steps_per_sec = 1.0 / time_taken\n        steps_per_sec_list.append(steps_per_sec)\n        total_loss += loss\n        \n    if int(global_step.value()) % STEPS_PER_EPOCH == 0:\n        if not RUN_EVAL:\n            print('Epoch {} [ETA {:.2f}s] loss={:.3f}'.format(\n                  int(global_step.value()) // STEPS_PER_EPOCH,\n                  time_taken * STEPS_PER_EPOCH,\n                  total_loss / STEPS_PER_EPOCH))\n        else:\n            eval_global_step = tf.compat.v2.Variable(0, \n                                                     trainable=False,\n                                                     dtype=tf.compat.v2.dtypes.int64)\n\n            eval_metrics = eager_eval_loop(detection_model,\n                                           configs,\n                                           eval_input,\n                                           global_step=eval_global_step)\n\n            print('Epoch {} [ETA {:.2f}s] loss={:.3f} mAP@.5={:.3f}'.format(\n                  int(global_step.value()) // STEPS_PER_EPOCH,\n                  time_taken * STEPS_PER_EPOCH,\n                  total_loss / STEPS_PER_EPOCH,\n                  eval_metrics[MONITOR_METRIC]))\n\n            if eval_metrics[MONITOR_METRIC] > best_metric_value:\n                best_metric_value = eval_metrics[MONITOR_METRIC]\n                manager.save()\n                not_improved = 0\n            else:\n                not_improved += 1\n\n            if not_improved >= ES_PATIENCE:\n                print(f\"Early stopping at epoch {int(global_step.value()) // STEPS_PER_EPOCH}\")\n                break\n            \n        total_loss = 0\n\nclean_temporary_directories(strategy, manager_dir)","metadata":{"execution":{"iopub.status.busy":"2024-07-22T07:50:36.196044Z","iopub.execute_input":"2024-07-22T07:50:36.19643Z","iopub.status.idle":"2024-07-22T07:57:49.126091Z","shell.execute_reply.started":"2024-07-22T07:50:36.196391Z","shell.execute_reply":"2024-07-22T07:57:49.125359Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Export model for inference\n\nWe first load the latest checkpoint saved during training, then we export the whole detection model (pre-processing and post-processing included) in TF2 OD-API style.","metadata":{}},{"cell_type":"code","source":"class DetectionFromImageModule(DetectionInferenceModule):\n    def __init__(self, detection_model):\n        \n        sig = [tf.TensorSpec(shape=[1, None, None, 3],\n                             dtype=tf.uint8,\n                             name='input_tensor')]\n\n        def call_func(input_tensor):\n            return self._run_inference_on_images(input_tensor)\n\n        self.__call__ = tf.function(call_func, input_signature=sig)\n\n        super(DetectionFromImageModule, self).__init__(detection_model)\n        \n    def _run_inference_on_images(self, image, **kwargs):\n        label_id_offset = 1\n        image = tf.cast(image, tf.float32)\n        image, shapes = self._model.preprocess(image)\n        prediction_dict = self._model.predict(image, shapes, **kwargs)\n        detections = self._model.postprocess(prediction_dict, shapes)\n        classes_field = fields.DetectionResultFields.detection_classes\n        classes = tf.cast(detections[classes_field], tf.float32)\n        detections[classes_field] = (classes + label_id_offset)\n\n        for key, val in detections.items():\n            detections[key] = tf.cast(val, tf.float32)\n\n        return detections","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-22T08:17:22.380183Z","iopub.execute_input":"2024-07-22T08:17:22.380712Z","iopub.status.idle":"2024-07-22T08:17:22.395557Z","shell.execute_reply.started":"2024-07-22T08:17:22.380669Z","shell.execute_reply":"2024-07-22T08:17:22.394433Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ckpt = tf.train.Checkpoint(model=detection_model)\nmanager = tf.train.CheckpointManager(ckpt, \n                                     MODEL_DIR,\n                                     max_to_keep=1)\n\nstatus = ckpt.restore(manager.latest_checkpoint).expect_partial()\n\ndetection_module = DetectionFromImageModule(detection_model)\nconcrete_function = detection_module.__call__.get_concrete_function()\nstatus.assert_existing_objects_matched()\n\nexported_checkpoint_manager = tf.train.CheckpointManager(ckpt, \n                                                         OUTPUT_MODEL_DIR, \n                                                         max_to_keep=1)\n\nexported_checkpoint_manager.save(checkpoint_number=0)\ntf.saved_model.save(detection_module,\n                    OUTPUT_MODEL_DIR + '/saved_model',\n                    signatures=concrete_function)","metadata":{"execution":{"iopub.status.busy":"2024-07-22T08:17:46.263368Z","iopub.execute_input":"2024-07-22T08:17:46.263726Z","iopub.status.idle":"2024-07-22T08:19:40.374647Z","shell.execute_reply.started":"2024-07-22T08:17:46.263695Z","shell.execute_reply":"2024-07-22T08:19:40.373828Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Inference from saved model\n\nHere we test the saved model by running it on few examples and compare detected boxes (coloured) with respect to ground-truth boxes (in black).","metadata":{}},{"cell_type":"code","source":"detector = tf.saved_model.load('/kaggle/working/saved_model/saved_model/')","metadata":{"execution":{"iopub.status.busy":"2024-07-22T08:19:59.208072Z","iopub.execute_input":"2024-07-22T08:19:59.208469Z","iopub.status.idle":"2024-07-22T08:20:31.855224Z","shell.execute_reply.started":"2024-07-22T08:19:59.208436Z","shell.execute_reply":"2024-07-22T08:20:31.854122Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Plot detected boxes","metadata":{}},{"cell_type":"code","source":"%matplotlib inline\n\nN = 16\nfig, ax = plt.subplots(int(np.sqrt(N)), int(np.sqrt(N)), figsize=(12,12))\nax = ax.flatten()\n\nraw_image_dataset = tf.data.TFRecordDataset(TEST_DATASET)\nparsed_image_dataset = raw_image_dataset.map(parse_image_sample)\niterator = iter(parsed_image_dataset)\n\nfor idx in range(N):\n    image_features = next(iterator)\n    image_raw = image_features['image/encoded']\n    image = tf.image.decode_jpeg(image_raw)\n    gt_boxes = np.stack([\n        image_features['image/object/bbox/xmin'],\n        image_features['image/object/bbox/ymin'],\n        image_features['image/object/bbox/xmax'],\n        image_features['image/object/bbox/ymax'],\n    ], -1)\n    \n    out = detector(tf.expand_dims(image, 0))\n    \n    classes = out['detection_classes'].numpy()[0].astype('int')\n    scores = out['detection_scores'].numpy()[0]\n    boxes = out['detection_boxes'].numpy()[0]\n    boxes = np.stack([\n        boxes[:,1],\n        boxes[:,0],\n        boxes[:,3],\n        boxes[:,2]        \n    ], -1)\n    \n    image_with_gt = image.numpy()\n    \n    viz_utils.draw_bounding_boxes_on_image_array(image_with_gt, \n                                                 gt_boxes,\n                                                 color='black')\n    \n    plot_img_with_boxes(image_with_gt, \n                        classes, \n                        boxes,\n                        scores,\n                        axis=ax[idx])\n    \nfig.show()","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2024-07-22T08:20:35.68438Z","iopub.execute_input":"2024-07-22T08:20:35.684763Z","iopub.status.idle":"2024-07-22T08:20:45.4002Z","shell.execute_reply.started":"2024-07-22T08:20:35.684727Z","shell.execute_reply":"2024-07-22T08:20:45.399163Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Clean Environment","metadata":{}},{"cell_type":"code","source":"!rm -r /kaggle/working/models\n!rm -r /kaggle/working/chest-x-ray-detection","metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"trusted":true},"execution_count":null,"outputs":[]}]}